From 56b2983252d5f5217817c6c13343b44342f8acb3 Mon Sep 17 00:00:00 2001 From: jack <1484288157@qq.com> Date: Fri, 17 Dec 2021 16:07:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=95=B4=E7=90=86=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81=20https:?= =?UTF-8?q?//git.shanqu.cc/halo/android/assistant-android/-/issues/53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gamedetail/GameDetailFragment.kt | 1233 +++++++---------- .../main/res/layout/fragment_gamedetail.xml | 23 +- app/src/main/res/layout/gamedetail_body.xml | 6 +- 3 files changed, 499 insertions(+), 763 deletions(-) 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 8fd6e0be25..30ce2c3c0d 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -5,22 +5,15 @@ import android.content.Intent import android.os.Build import android.os.Bundle import android.text.TextUtils -import android.view.MenuItem -import android.view.MotionEvent -import android.view.View -import android.view.ViewGroup +import android.view.* import android.widget.ImageView -import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.fragment.app.Fragment import androidx.lifecycle.Observer -import butterknife.BindView -import butterknife.OnClick import com.ethanhua.skeleton.Skeleton import com.ethanhua.skeleton.ViewSkeletonScreen import com.gh.base.adapter.FragmentAdapter @@ -36,8 +29,6 @@ import com.gh.common.repository.ReservationRepository import com.gh.common.simulator.SimulatorGameManager import com.gh.common.util.* import com.gh.common.view.FlexLinearLayout -import com.gh.common.view.GameIconView -import com.gh.common.view.TabIndicatorView import com.gh.common.view.WrapContentDraweeView import com.gh.common.xapk.XapkInstaller import com.gh.common.xapk.XapkUnzipStatus @@ -45,6 +36,7 @@ import com.gh.download.DownloadManager import com.gh.download.server.BrowserInstallHelper import com.gh.gamecenter.* import com.gh.gamecenter.adapter.viewholder.DetailViewHolder +import com.gh.gamecenter.databinding.* import com.gh.gamecenter.entity.* import com.gh.gamecenter.eventbus.* import com.gh.gamecenter.gamedetail.desc.DescFragment @@ -65,22 +57,16 @@ import com.gh.gamecenter.tag.TagsActivity import com.gh.gamecenter.user.UserViewModel import com.gh.gamecenter.video.detail.CustomManager import com.google.android.material.appbar.AppBarLayout -import com.google.android.material.tabs.TabLayout import com.halo.assistant.HaloApp import com.halo.assistant.fragment.WebFragment import com.lightgame.download.DataWatcher import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadStatus -import com.lightgame.view.NoScrollableViewPager import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack import com.shuyu.gsyvideoplayer.utils.OrientationUtils import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.dialog_download.view.* -import kotlinx.android.synthetic.main.download_dialog_installed_item.* -import kotlinx.android.synthetic.main.editor_insert_default_item.* -import kotlinx.android.synthetic.main.piece_game_detail_video.* import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -92,162 +78,17 @@ import kotlin.math.abs class GameDetailFragment : NormalFragment() { - @BindView(R.id.titleTv) - lateinit var mTitleTv: TextView - - @BindView(R.id.gamedetail_thumb_small) - lateinit var mGameIconSmall: GameIconView - - @BindView(R.id.gamedetail_vp) - lateinit var mViewPager: NoScrollableViewPager - - @BindView(R.id.reuse_ll_loading) - lateinit var mLoading: View - - @BindView(R.id.reuse_no_connection) - lateinit var mNoConnection: View - - @BindView(R.id.gamedetail_iv_thumb) - lateinit var mGameIcon: GameIconView - - @BindView(R.id.gamedetail_tv_name) - lateinit var mGameName: TextView - - @BindView(R.id.rating_score_average) - lateinit var ratingScoreAverage: TextView - - @BindView(R.id.rating_score_container) - lateinit var ratingScoreContainer: View - - @BindView(R.id.gamedetail_appbar) - lateinit var mAppBarLayout: AppBarLayout - - @BindView(R.id.gamedetail_kaifu_hint) - lateinit var mKaifuHint: View - - @BindView(R.id.reuse_none_data) - lateinit var mNoneDataView: View - - @BindView(R.id.reuse_tv_none_data) - lateinit var mNoneDataTv: TextView - - @BindView(R.id.list_skeleton) - lateinit var mListSkeleton: View - - @BindView(R.id.toolbar) - lateinit var mToolbar: Toolbar - - @BindView(R.id.player) - lateinit var mTopVideoView: TopVideoView - - @BindView(R.id.video_placeholder) - lateinit var mVideoPlaceholder: View - - @BindView(R.id.normal_toolbar) - lateinit var mErrorToolbar: Toolbar - - @BindView(R.id.error_toolbar_container) - lateinit var mErrorToolbarContainer: View - - @BindView(R.id.tab_layout) - lateinit var mTabLayout: TabLayout - - @BindView(R.id.gamedetail_tabbar) - lateinit var mTabContainer: View - - @BindView(R.id.toolbarGapView) - lateinit var mToolbarGapView: View - - @BindView(R.id.tab_indicator) - lateinit var mTabIndicatorView: TabIndicatorView - - @BindView(R.id.gamedetail_gametag) - lateinit var mGameTagView: FlexLinearLayout - - @BindView(R.id.gameDetailRankLl) - lateinit var gameDetailRankLl: LinearLayout - - @BindView(R.id.gameDetailRankTv) - lateinit var gameDetailRankTv: TextView - - @BindView(R.id.gameBigEvent) - lateinit var gameBigEvent: TextView - - @BindView(R.id.recommendAgeIv) - lateinit var recommendAgeIv: ImageView - - @BindView(R.id.tv_concern) - lateinit var mConcernTv: TextView - - @BindView(R.id.iv_concern) - lateinit var mConcernIv: ImageView - - @BindView(R.id.tv_reserve) - lateinit var mReserveTv: TextView - - @BindView(R.id.iv_reserve) - lateinit var mReserveIv: ImageView - - @BindView(R.id.reserve_guide_container) - lateinit var mReserveGuideContainer: View - - @BindView(R.id.closeIv) - lateinit var mReserveGuideClose: View - - @BindView(R.id.tv_switch) - lateinit var mSwitchTv: TextView - - @BindView(R.id.iv_switch) - lateinit var mSwitchIv: ImageView - - @BindView(R.id.browser_install_hint_container) - lateinit var mBrowserInstallContainer: View - - @BindView(R.id.browser_install_hint_close_iv) - lateinit var mBrowserInstallCloseIv: View - - @BindView(R.id.browser_install_hint_tv) - lateinit var mBrowserInstallHintTv: TextView - - @BindView(R.id.install_hint_container) - lateinit var mInstallContainer: View - - @BindView(R.id.install_hint_close_iv) - lateinit var mInstallCloseIv: View - - @BindView(R.id.install_hint_tv) - lateinit var mInstallHintTv: TextView - - @BindView(R.id.recommendView) - lateinit var mRecommendView: View - - @BindView(R.id.recommendText) - lateinit var mRecommendText: TextView - - @BindView(R.id.recommendLinkTv) - lateinit var mRecommendLinkTv: TextView - - @BindView(R.id.recommendImage) - lateinit var mRecommendImage: WrapContentDraweeView - private var mDownloadMenuIcon: ImageView? = null private var mDownloadCountHint: TextView? = null private var mSkeleton: ViewSkeletonScreen? = null - - private lateinit var mViewModel: GameDetailViewModel - private lateinit var mPackageViewModel: PackageViewModel - private lateinit var mUserViewModel: UserViewModel - private var mGameEntity: GameEntity? = null private var mDownloadEntity: DownloadEntity? = null private var mNewGameDetailEntity: NewGameDetailEntity? = null - private var mTraceEvent: ExposureEvent? = null private var mOrientationUtils: OrientationUtils? = null - private var mMoreMenuItem: MenuItem? = null 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 @@ -263,11 +104,20 @@ class GameDetailFragment : NormalFragment() { private var mIsRecommendViewShow = false private var mRecommendDisposable: Disposable? = null private var mRecommendPopupEntity: RecommendPopupEntity? = null - private var mTabClickEvent: Pair = Pair(0L, "") - val fragmentsList = ArrayList() - val tabTitleList = ArrayList() + private lateinit var mBinding: FragmentGamedetailBinding + private lateinit var mVideoBinding: PieceGameDetailVideoBinding + private lateinit var mBodyBinding: GamedetailBodyBinding + private lateinit var mDownloadBinding: DetailDownloadItemBinding + private lateinit var mRecommendBinding: LayoutGameDetailRecommendViewBinding + + private lateinit var mViewModel: GameDetailViewModel + private lateinit var mPackageViewModel: PackageViewModel + private lateinit var mUserViewModel: UserViewModel + + private val mFragmentsList = ArrayList() + private val mTabTitleList = ArrayList() private val dataWatcher = object : DataWatcher() { override fun onDataChanged(downloadEntity: DownloadEntity) { @@ -280,9 +130,7 @@ class GameDetailFragment : NormalFragment() { if (mGameEntity != null && mGameEntity!!.getApk().size == 1) { val url = mGameEntity!!.getApk()[0].url if (downloadEntity.url == url) { - if ("pause" != DownloadManager.getInstance(context) - .getStatus(downloadEntity.url)?.status - ) { + if ("pause" != DownloadManager.getInstance(context).getStatus(downloadEntity.url)?.status) { mDownloadEntity = downloadEntity DetailDownloadUtils.detailInvalidate(detailViewHolder) } @@ -291,24 +139,21 @@ class GameDetailFragment : NormalFragment() { DialogUtils.showUnzipFailureDialog(requireContext(), downloadEntity) } } - val meta = - downloadEntity.getMetaExtra(PageSwitchDataHelper.PAGE_GAME_DETAIL_RECOMMEND) + val meta = downloadEntity.getMetaExtra(PageSwitchDataHelper.PAGE_GAME_DETAIL_RECOMMEND) if (downloadEntity.status == DownloadStatus.add) { if (downloadEntity.gameId == mViewModel.game?.id) { - mRecommendView.postDelayed({ showRecommendView() }, 500) + mRecommendBinding.recommendView.postDelayed({ showRecommendView() }, 500) } if (meta.isNotEmpty() && mRecommendPopupEntity != null) { LogUtils.uploadRecommendPopup( - "recommend_pop_download", - mRecommendPopupEntity?.id, - mViewModel.game?.id - ?: "", - mViewModel.game?.name - ?: "", - mRecommendPopupEntity?.popupDetail?.link?.type, - mRecommendPopupEntity?.popupDetail?.link?.text, - downloadEntity.gameId, - downloadEntity.name + "recommend_pop_download", + mRecommendPopupEntity?.id, + mViewModel.game?.id ?: "", + mViewModel.game?.name ?: "", + mRecommendPopupEntity?.popupDetail?.link?.type, + mRecommendPopupEntity?.popupDetail?.link?.text, + downloadEntity.gameId, + downloadEntity.name ) } } else if (downloadEntity.status == DownloadStatus.done) { @@ -317,16 +162,14 @@ class GameDetailFragment : NormalFragment() { } if (meta.isNotEmpty() && mRecommendPopupEntity != null) { LogUtils.uploadRecommendPopup( - "recommend_pop_download_complete", - mRecommendPopupEntity?.id, - mViewModel.game?.id - ?: "", - mViewModel.game?.name - ?: "", - mRecommendPopupEntity?.popupDetail?.link?.type, - mRecommendPopupEntity?.popupDetail?.link?.text, - downloadEntity.gameId, - downloadEntity.name + "recommend_pop_download_complete", + mRecommendPopupEntity?.id, + mViewModel.game?.id ?: "", + mViewModel.game?.name ?: "", + mRecommendPopupEntity?.popupDetail?.link?.type, + mRecommendPopupEntity?.popupDetail?.link?.text, + downloadEntity.gameId, + downloadEntity.name ) } } @@ -339,26 +182,36 @@ class GameDetailFragment : NormalFragment() { private val detailViewHolder: DetailViewHolder get() = DetailViewHolder( - mCachedView, - mGameEntity, - mDownloadEntity, - false, - mEntrance, - "游戏详情", - mGameEntity!!.name, - mTraceEvent + mCachedView, + mGameEntity, + mDownloadEntity, + false, + mEntrance, + "游戏详情", + mGameEntity!!.name, + mTraceEvent ) - override fun getLayoutId(): Int { - return R.layout.fragment_gamedetail + override fun getLayoutId(): Int = 0 + + override fun getInflatedLayout(): View { + return FragmentGamedetailBinding.inflate(LayoutInflater.from(requireContext())).apply { + mBinding = this + mBodyBinding = mBinding.bodyContainer + mVideoBinding = mBodyBinding.gameDetailVideo + mDownloadBinding = mBinding.detailLlBottom + mRecommendBinding = mBinding.gameDetailRecommendView + }.root } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - mToolbar.inflateMenu(R.menu.menu_game_detail) - mMoreMenuItem = mToolbar.menu.findItem(R.id.menu_more) - mSearchMenuItem = mToolbar.menu.findItem(R.id.menu_search) - mDownloadMenuItem = mToolbar.menu.findItem(R.id.menu_download) + mBodyBinding.run { + toolbar.inflateMenu(R.menu.menu_game_detail) + mMoreMenuItem = toolbar.menu.findItem(R.id.menu_more) + mSearchMenuItem = toolbar.menu.findItem(R.id.menu_search) + mDownloadMenuItem = toolbar.menu.findItem(R.id.menu_download) + } mDownloadMenuIcon = mDownloadMenuItem?.actionView?.findViewById(R.id.menu_download_iv) @@ -368,10 +221,9 @@ class GameDetailFragment : NormalFragment() { R.id.menu_more -> { if (mGameEntity != null && mNewGameDetailEntity != null) { GameDetailMoreDialog.showMoreDialog( - requireActivity() as AppCompatActivity, - mGameEntity, - mNewGameDetailEntity?.shareCode - ?: "" + requireActivity() as AppCompatActivity, + mGameEntity, + mNewGameDetailEntity?.shareCode ?: "" ) MtaHelper.onEvent("游戏详情_新", "更多按钮", mViewModel.game?.name ?: "") } @@ -391,8 +243,7 @@ class GameDetailFragment : NormalFragment() { mDownloadMenuItem?.actionView?.setOnClickListener { MtaHelper.onEvent("游戏详情_新", "下载管理图标", mViewModel.game?.name ?: "") // MtaHelper.onEvent("下载管理", "下载管理入口", (requireActivity() as BaseActivity).activityNameInChinese) - val intent = - DownloadManagerActivity.getDownloadMangerIntent(requireContext(), mEntrance) + val intent = DownloadManagerActivity.getDownloadMangerIntent(requireContext(), mEntrance) startActivity(intent) } @@ -408,10 +259,9 @@ class GameDetailFragment : NormalFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - mNoneDataTv.text = "页面不见了" - - mViewPager.setScrollable(true) - mViewPager.offscreenPageLimit = 3 + mBinding.reuseNoneData.reuseTvNoneData.text = "页面不见了" + mBodyBinding.gamedetailVp.setScrollable(true) + mBodyBinding.gamedetailVp.offscreenPageLimit = 3 mMaxWidth = resources.displayMetrics.widthPixels - DisplayUtils.dip2px(40f) @@ -422,27 +272,27 @@ class GameDetailFragment : NormalFragment() { mDestinationTab = args.getInt(EntranceUtils.KEY_TARGET, -1) mIsOpenPlatformWindow = args.getBoolean(EntranceUtils.KEY_OPEN_PLATFORM_WINDOW) - mSkeleton = Skeleton.bind(mListSkeleton) - .shimmer(true) - .angle(Constants.SHIMMER_ANGLE) - .color(R.color.skeleton_shimmer_color) - .duration(Constants.SHIMMER_DURATION) - .maskWidth(Constants.MASK_WIDTH) - .gradientCenterColorWidth(Constants.GRADIENT_CENTER_COLOR_WIDTH) - .load(R.layout.fragment_gamedetail_skeleton) - .show() + mSkeleton = Skeleton.bind(mBinding.listSkeleton) + .shimmer(true) + .angle(Constants.SHIMMER_ANGLE) + .color(R.color.skeleton_shimmer_color) + .duration(Constants.SHIMMER_DURATION) + .maskWidth(Constants.MASK_WIDTH) + .gradientCenterColorWidth(Constants.GRADIENT_CENTER_COLOR_WIDTH) + .load(R.layout.fragment_gamedetail_skeleton) + .show() val factory = GameDetailViewModel.Factory( - HaloApp.getInstance().application, - args.getString(EntranceUtils.KEY_GAMEID), - args.getParcelable(GameEntity.TAG) + HaloApp.getInstance().application, + args.getString(EntranceUtils.KEY_GAMEID), + args.getParcelable(GameEntity.TAG) ) mViewModel = viewModelProviderFromParent(factory) mPackageViewModel = viewModelProvider(PackageViewModel.Factory()) mUserViewModel = viewModelProvider(UserViewModel.Factory(HaloApp.getInstance().application)) - mViewPager.doOnPageSelected { position -> - mKaifuHint.visibleIf(mIsShowKaifuHint && position == INDEX_TRENDES) + mBodyBinding.gamedetailVp.doOnPageSelected { position -> + mBinding.gamedetailKaifuHint.visibleIf(mIsShowKaifuHint && position == INDEX_TRENDES) if (mFirstTimeSelected) { when (position) { @@ -461,12 +311,12 @@ class GameDetailFragment : NormalFragment() { } } - if (mNewGameDetailEntity?.bbsTab != null && position == tabTitleList.size - 1) { + if (mNewGameDetailEntity?.bbsTab != null && position == mTabTitleList.size - 1) { DirectUtils.directToLinkPage( - requireContext(), - mNewGameDetailEntity?.bbsTab!!, - "游戏详情", - "" + requireContext(), + mNewGameDetailEntity?.bbsTab!!, + "游戏详情", + "" ) LogUtils.uploadAccessToBbs(mNewGameDetailEntity?.bbsTab?.link, "游戏详情") } else { @@ -475,54 +325,56 @@ class GameDetailFragment : NormalFragment() { hideRecommendView() } - mAppBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset -> + mBodyBinding.gamedetailAppbar.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset -> // requireContext():not attached to context if (!isAdded) return@OnOffsetChangedListener val absVerticalOffset = abs(verticalOffset) val total = appBarLayout.totalScrollRange - if (mViewModel.displayTopVideo) { - // 每次设置 title 都会触发 requestLayout,最后造成 OOM,这里过滤下,相同文字的时候不处理 - if (absVerticalOffset > total / 2) { - if (mTitleTv.text.isNullOrEmpty()) { - mTitleTv.text = mGameEntity?.name ?: "" - mGameIconSmall.visibility = View.VISIBLE - updateToolbarStyle(isToolbarWhite = true) + mBodyBinding.run { + if (mViewModel.displayTopVideo) { + // 每次设置 title 都会触发 requestLayout,最后造成 OOM,这里过滤下,相同文字的时候不处理 + if (absVerticalOffset > total / 2) { + if (titleTv.text.isNullOrEmpty()) { + titleTv.text = mGameEntity?.name ?: "" + gamedetailThumbSmall.visibility = View.VISIBLE + updateToolbarStyle(isToolbarWhite = true) + } + } else { + if (!titleTv.text.isNullOrEmpty()) { + titleTv.text = "" + gamedetailThumbSmall.visibility = View.GONE + updateToolbarStyle(isToolbarWhite = false) + } } } else { - if (!mTitleTv.text.isNullOrEmpty()) { - mTitleTv.text = "" - mGameIconSmall.visibility = View.GONE - updateToolbarStyle(isToolbarWhite = false) - } - } - } else { - if (absVerticalOffset > total * 0.5) { - if (mTitleTv.text.isNullOrEmpty()) { - mTitleTv.text = mGameEntity?.name ?: "" - mGameIconSmall.visibility = View.VISIBLE - } - } else { - if (!mTitleTv.text.isNullOrEmpty()) { - mTitleTv.text = "" - mGameIconSmall.visibility = View.GONE + if (absVerticalOffset > total * 0.5) { + if (titleTv.text.isNullOrEmpty()) { + titleTv.text = mGameEntity?.name ?: "" + gamedetailThumbSmall.visibility = View.VISIBLE + } + } else { + if (!titleTv.text.isNullOrEmpty()) { + titleTv.text = "" + gamedetailThumbSmall.visibility = View.GONE + } } } } if (absVerticalOffset == total) { - if (mTopVideoView.currentState == GSYVideoView.CURRENT_STATE_PLAYING) { + if (mVideoBinding.player.currentState == GSYVideoView.CURRENT_STATE_PLAYING) { pauseVideo() mIsPauseTopVideo = true } - mToolbar.setTitleTextColor(ContextCompat.getColor(requireContext(), R.color.black)) + mBodyBinding.toolbar.setTitleTextColor(ContextCompat.getColor(requireContext(), R.color.black)) if (mIsScrollToKaiFu) { mIsScrollToKaiFu = false EventBus.getDefault().post(EBReuse(SCROLL_TO_KAIFU)) } - } else if (mIsPauseTopVideo && absVerticalOffset == 0 && mTopVideoView.currentState == GSYVideoView.CURRENT_STATE_PAUSE) { + } else if (mIsPauseTopVideo && absVerticalOffset == 0 && mVideoBinding.player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) { resumeVideo() mIsPauseTopVideo = false } @@ -534,27 +386,27 @@ class GameDetailFragment : NormalFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - mOrientationUtils = OrientationUtils(requireActivity(), player) + mOrientationUtils = OrientationUtils(requireActivity(), mVideoBinding.player) mOrientationUtils?.isEnable = false + setListener() // toolbar 消费 fitsSystemWindows 避免在 collapsingToolbar 下面出现多出来的 padding // [https://stackoverflow.com/questions/48137666/viewgroup-inside-collapsingtoolbarlayout-show-extra-bottom-padding-when-set-fits] - ViewCompat.setOnApplyWindowInsetsListener(mAppBarLayout) { _, insets -> - (mToolbar.layoutParams as ViewGroup.MarginLayoutParams).topMargin = - insets.systemWindowInsetTop + ViewCompat.setOnApplyWindowInsetsListener(mBodyBinding.gamedetailAppbar) { _, insets -> + (mBodyBinding.toolbar.layoutParams as ViewGroup.MarginLayoutParams).topMargin = insets.systemWindowInsetTop insets.consumeSystemWindowInsets() } - mToolbar.setNavigationOnClickListener { requireActivity().finish() } - mConcernIv.visibility = View.VISIBLE - mConcernTv.visibility = View.VISIBLE + mBodyBinding.toolbar.setNavigationOnClickListener { requireActivity().finish() } + mDownloadBinding.ivConcern.visibility = View.VISIBLE + mDownloadBinding.tvConcern.visibility = View.VISIBLE } @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMainThread(bean: EBScroll) { if (mGameEntity?.id == bean.id) { - mViewPager.currentItem = 0 - mAppBarLayout.setExpanded(false, false) + mBodyBinding.gamedetailVp.currentItem = 0 + mBodyBinding.gamedetailAppbar.setExpanded(false, false) } } @@ -565,9 +417,7 @@ class GameDetailFragment : NormalFragment() { mGameEntity = gameResource.data controlInstallHint() // 添加启动弹窗的相关信息 - if (mEntrance.contains(EntranceUtils.ENTRANCE_WELCOME) - && mEntrance.countOccurrences("+") <= 1 - ) { + if (mEntrance.contains(EntranceUtils.ENTRANCE_WELCOME) && mEntrance.countOccurrences("+") <= 1) { mGameEntity?.setWelcomeDialogInfoIfAvailable() } } else if (gameResource.status == Status.ERROR) { @@ -605,8 +455,8 @@ class GameDetailFragment : NormalFragment() { mAutoDownload = false } - mTopVideoView.goneIf(!mViewModel.displayTopVideo) - mVideoPlaceholder.goneIf(mViewModel.displayTopVideo) + mVideoBinding.player.goneIf(!mViewModel.displayTopVideo) + mVideoBinding.videoPlaceholder.goneIf(mViewModel.displayTopVideo) if (mViewModel.displayTopVideo) { data.topVideo?.let { setUpTopVideo(it) } updateToolbarStyle(isToolbarWhite = false) @@ -614,7 +464,7 @@ class GameDetailFragment : NormalFragment() { updateToolbarStyle(isToolbarWhite = true) } - mErrorToolbarContainer.visibility = View.GONE + mBinding.errorToolbarContainer.visibility = View.GONE controlReserveBtn() mSkeleton?.hide() @@ -626,7 +476,6 @@ class GameDetailFragment : NormalFragment() { mViewModel.unifiedGameDetailWithUserRelatedInfoForParentLiveData.observeNonNull(this) { mNewGameDetailEntity = it - initGameDetailTop() } @@ -638,10 +487,10 @@ class GameDetailFragment : NormalFragment() { DataUtils.onEvent(context, "游戏关注", mGameEntity!!.name, kv) MtaHelper.onEvent("游戏详情_新", "关注", mGameEntity!!.name) DataCollectionUtils.uploadConcern( - context, - mGameEntity!!.name, - mGameEntity!!.id, - "关注" + context, + mGameEntity!!.name, + mGameEntity!!.id, + "关注" ) // GdtHelper.logAction(ActionType.ADD_TO_WISHLIST, GdtHelper.CONTENT_TYPE, "GAME", GdtHelper.CONTENT_ID, mGameEntity!!.id) @@ -657,10 +506,10 @@ class GameDetailFragment : NormalFragment() { DataUtils.onEvent(context, "游戏关注", mGameEntity!!.name, kv) DataCollectionUtils.uploadConcern( - context, - mGameEntity!!.name, - mGameEntity!!.id, - "取消关注" + context, + mGameEntity!!.name, + mGameEntity!!.id, + "取消关注" ) MtaHelper.onEvent("游戏详情_新", "取消关注", mGameEntity!!.name) @@ -677,8 +526,7 @@ class GameDetailFragment : NormalFragment() { mViewModel.bigEventLiveData.observeNonNull(this) { GameBigEventDialog.showGameBigEventDialog( - requireContext(), mGameEntity?.name - ?: "", it, mEntrance + requireContext(), mGameEntity?.name ?: "", it, mEntrance ) } mViewModel.recommendPopupLiveData.observe(this, Observer { @@ -700,7 +548,7 @@ class GameDetailFragment : NormalFragment() { val scrollToLibao = arguments?.getBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO) ?: false val scrollToServer = arguments?.getBoolean(EntranceUtils.KEY_SCROLL_TO_SERVER) ?: false if (scrollToLibao || scrollToServer) { - mAppBarLayout.setExpanded(false, true) + mBodyBinding.gamedetailAppbar.setExpanded(false, true) } val bundle = Bundle() @@ -709,84 +557,80 @@ class GameDetailFragment : NormalFragment() { bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO, scrollToLibao) bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_SERVER, scrollToServer) bundle.putBoolean( - EntranceUtils.KEY_SCROLL_TO_LIBAO, - arguments?.getBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO) - ?: false + EntranceUtils.KEY_SCROLL_TO_LIBAO, + arguments?.getBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO) ?: false ) bundle.putBoolean( - EntranceUtils.KEY_OPEN_VIDEO_STREAMING, - arguments?.getBoolean(EntranceUtils.KEY_OPEN_VIDEO_STREAMING) - ?: false + EntranceUtils.KEY_OPEN_VIDEO_STREAMING, + arguments?.getBoolean(EntranceUtils.KEY_OPEN_VIDEO_STREAMING) ?: false ) - fragmentsList.clear() - tabTitleList.clear() + mFragmentsList.clear() + mTabTitleList.clear() - val tag = "android:switcher:${mViewPager.id}:" - val descFragment = childFragmentManager.findFragmentByTag("${tag}$INDEX_DESC") - ?: DescFragment() + val tag = "android:switcher:${mBodyBinding.gamedetailVp.id}:" + val descFragment = childFragmentManager.findFragmentByTag("${tag}$INDEX_DESC") ?: DescFragment() descFragment.arguments = bundle - fragmentsList.add(descFragment) - tabTitleList.add(getString(R.string.game_detail_desc)) + mFragmentsList.add(descFragment) + mTabTitleList.add(getString(R.string.game_detail_desc)) data.zone?.let { if (it.style == "link") {//显示web页面 - val webFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_TRENDES}") - ?: WebFragment() + val webFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_TRENDES}") ?: WebFragment() val webBundle = Bundle() webBundle.putString(EntranceUtils.KEY_URL, it.link) webBundle.putBoolean(WebFragment.KEY_OPEN_NATIVE_PAGE, true) webFragment.arguments = webBundle - fragmentsList.add(webFragment) + mFragmentsList.add(webFragment) } else { - val fuliFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_TRENDES}") - ?: FuLiFragment() + val fuliFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_TRENDES}") ?: FuLiFragment() fuliFragment.arguments = bundle - fragmentsList.add(fuliFragment) + mFragmentsList.add(fuliFragment) } - tabTitleList.add(getString(R.string.game_detail_dongtai)) + mTabTitleList.add(getString(R.string.game_detail_dongtai)) } if (data.showComment) { - val ratingFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_RATING}") - ?: RatingFragment() + val ratingFragment = childFragmentManager.findFragmentByTag("${tag}${INDEX_RATING}") ?: RatingFragment() bundle.putBoolean(EntranceUtils.KEY_SKIP_GAME_COMMENT, mSkipGameComment) bundle.putBoolean(EntranceUtils.KEY_DIRECT_COMMENT, data.directComment) ratingFragment.arguments = bundle - fragmentsList.add(ratingFragment) - tabTitleList.add(getString(R.string.game_detail_comment)) + mFragmentsList.add(ratingFragment) + mTabTitleList.add(getString(R.string.game_detail_comment)) } if (data.bbsTab != null) { - fragmentsList.add(Fragment()) - tabTitleList.add(getString(R.string.game_detail_bbs)) + mFragmentsList.add(Fragment()) + mTabTitleList.add(getString(R.string.game_detail_bbs)) } - mTabContainer.goneIf(tabTitleList.size == 1) - mToolbarGapView.goneIf(tabTitleList.size == 1) + mBodyBinding.gamedetailTabbar.goneIf(mTabTitleList.size == 1) + mBodyBinding.toolbarGapView.goneIf(mTabTitleList.size == 1) - mViewPager.adapter = FragmentAdapter(childFragmentManager, fragmentsList, tabTitleList) - mViewPager.doOnPageSelected { - logTabClick(it) - } - mViewPager.currentItem = INDEX_DESC - - mTabLayout.setupWithViewPager(mViewPager) - mTabIndicatorView.setupWithTabLayout(mTabLayout) - mTabIndicatorView.setupWithViewPager(mViewPager) - - for (i in 0 until mTabLayout.tabCount) { - val tab = mTabLayout.getTabAt(i) ?: continue - val tabTitle = if (tab.text != null) tab.text.toString() else "" - tab.customView = BaseFragment_TabLayout.createDefaultTabCustomView(tabTitle) - tab.view.setOnTouchListener { _, event -> - if (event.action == MotionEvent.ACTION_DOWN) { - handleTabTouchEvent(tabTitle) - } - return@setOnTouchListener false + mBodyBinding.run { + gamedetailVp.adapter = FragmentAdapter(childFragmentManager, mFragmentsList, mTabTitleList) + gamedetailVp.doOnPageSelected { + logTabClick(it) } - } + gamedetailVp.currentItem = INDEX_DESC - BaseFragment_TabLayout.initTabStyle(mTabLayout, mViewPager.currentItem) + mBodyBinding.tabLayout.setupWithViewPager(gamedetailVp) + mBodyBinding.tabIndicator.setupWithTabLayout(mBodyBinding.tabLayout) + mBodyBinding.tabIndicator.setupWithViewPager(gamedetailVp) + + 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 "" + tab.customView = BaseFragment_TabLayout.createDefaultTabCustomView(tabTitle) + tab.view.setOnTouchListener { _, event -> + if (event.action == MotionEvent.ACTION_DOWN) { + handleTabTouchEvent(tabTitle) + } + return@setOnTouchListener false + } + } + + BaseFragment_TabLayout.initTabStyle(mBodyBinding.tabLayout, gamedetailVp.currentItem) + } } private fun showAlertDialogIfNeeded(detailEntity: NewGameDetailEntity) { @@ -795,9 +639,9 @@ class GameDetailFragment : NormalFragment() { if (dialog != null) { val dayOfMonth = Calendar.getInstance().get(Calendar.DAY_OF_MONTH) if ("EVERY_TIME_OPEN" == dialog.alert || SPUtils.getLong( - SP_OPENED_DIALOG_TIME_PREFIX + mGameEntity?.id, - 0 - ) != dayOfMonth.toLong() + SP_OPENED_DIALOG_TIME_PREFIX + mGameEntity?.id, + 0 + ) != dayOfMonth.toLong() ) { SPUtils.setLong(SP_OPENED_DIALOG_TIME_PREFIX + mGameEntity?.id, dayOfMonth.toLong()) doShowAlertDialog(dialog) @@ -820,92 +664,79 @@ class GameDetailFragment : NormalFragment() { private fun doShowAlertDialog(dialog: GameEntity.Dialog) { DialogHelper.showDialogWithHtmlContent( - requireContext(), - dialog.title, - dialog.content, - dialog.confirmButton.text.toString(), - dialog.closeButtonText, - { - dialog.confirmButton.text = dialog.confirmButton.linkText - DirectUtils.directToLinkPage( - requireContext(), - dialog.confirmButton, - mEntrance, - "" - ) - } + requireContext(), + dialog.title, + dialog.content, + dialog.confirmButton.text.toString(), + dialog.closeButtonText, + { + dialog.confirmButton.text = dialog.confirmButton.linkText + DirectUtils.directToLinkPage(requireContext(), dialog.confirmButton, mEntrance, "") + } ) } private fun loadErrorControl(exception: HttpException?) { - mErrorToolbarContainer.visibility = View.VISIBLE - mErrorToolbar.setNavigationOnClickListener { requireActivity().finish() } + mBinding.errorToolbarContainer.visibility = View.VISIBLE + mBinding.errorReuseToolbar.normalToolbar.setNavigationOnClickListener { requireActivity().finish() } if (exception != null && exception.code() == 404) { mViewModel.removeFromHistory() - - mLoading.visibility = View.GONE - mNoConnection.visibility = View.GONE - mNoneDataView.visibility = View.VISIBLE - mConcernIv.visibility = View.GONE - mConcernTv.visibility = View.GONE + mBinding.reuseLoading.reuseLlLoading.visibility = View.GONE + mBinding.reuseNoConnection.reuseNoConnection.visibility = View.GONE + mBinding.reuseNoneData.reuseNoneData.visibility = View.VISIBLE + mDownloadBinding.ivConcern.visibility = View.GONE + mDownloadBinding.tvConcern.visibility = View.GONE toast("内容可能已被删除") } else { - mLoading.visibility = View.GONE - mNoConnection.visibility = View.VISIBLE - mNoneDataView.visibility = View.GONE + mBinding.reuseLoading.reuseLlLoading.visibility = View.GONE + mBinding.reuseNoConnection.reuseNoConnection.visibility = View.VISIBLE + mBinding.reuseNoneData.reuseNoneData.visibility = View.GONE } mSkeleton?.hide() } private fun initGameDetailTop() { - mLoading.visibility = View.GONE - mAppBarLayout.visibility = View.VISIBLE + mBinding.reuseLoading.reuseLlLoading.visibility = View.GONE + mBodyBinding.gamedetailAppbar.visibility = View.VISIBLE if (mNewGameDetailEntity!!.showComment) { if (mSkipGameComment) { //跳转评论Tab需要判断是否有专区Tab - val hasZone = tabTitleList.contains(getString(R.string.game_detail_dongtai)) + val hasZone = mTabTitleList.contains(getString(R.string.game_detail_dongtai)) val skipPosition = if (hasZone) INDEX_RATING else INDEX_RATING - 1 tabPerformClick(skipPosition) - mAppBarLayout.setExpanded(false) + mBodyBinding.gamedetailAppbar.setExpanded(false) mSkipGameComment = false } } updateConcernMenuIcon(mNewGameDetailEntity!!.me.isGameConcerned) mBaseHandler.postDelayed({ - mGameEntity?.gameType = mNewGameDetailEntity?.tagStyle?.joinToString("-") { it.name } - ?: "" - mGameTagView.setTags(mNewGameDetailEntity?.tagStyle!!) + mGameEntity?.gameType = mNewGameDetailEntity?.tagStyle?.joinToString("-") { it.name } ?: "" + mBodyBinding.gamedetailGametag.setTags(mNewGameDetailEntity?.tagStyle!!) }, 5) - mGameTagView.onClickListener = object : FlexLinearLayout.OnItemClickListener { + mBodyBinding.gamedetailGametag.onClickListener = object : FlexLinearLayout.OnItemClickListener { override fun onMoreClickListener() { if (!isVisible) return MtaHelper.onEvent("游戏详情_新", "标签展开", mViewModel.game?.name ?: "") GameTagsDialog.showGameTagsDialog( - requireActivity(), mNewGameDetailEntity?.tagStyle!!, mGameEntity?.id + requireActivity(), mNewGameDetailEntity?.tagStyle!!, mGameEntity?.id ?: "", mGameEntity?.name ?: "" ) } override fun onItemClickListener(tag: TagStyleEntity) { - NewLogUtils.logGameDetailTagClick( - mGameEntity?.id ?: "", mGameEntity?.name - ?: "", tag.id, tag.name - ) + NewLogUtils.logGameDetailTagClick(mGameEntity?.id ?: "", mGameEntity?.name ?: "", tag.id, tag.name) MtaHelper.onEvent("游戏详情_新", "点击标签", mViewModel.game?.name ?: "") requireContext().startActivity( - TagsActivity.getIntent( - requireContext(), - tag.name, tag.name, mEntrance, "游戏介绍" - ) + TagsActivity.getIntent(requireContext(), tag.name, tag.name, mEntrance, "游戏介绍") ) } } val recommendAge = mNewGameDetailEntity?.recommendAge - recommendAgeIv.goneIf(recommendAge.isNullOrEmpty()) + mBodyBinding.recommendAgeIv.goneIf(recommendAge.isNullOrEmpty()) if (!recommendAge.isNullOrEmpty()) { val recommendAgeRes = when (recommendAge) { "8+" -> R.drawable.ic_recommend_age8 @@ -914,104 +745,60 @@ class GameDetailFragment : NormalFragment() { else -> -1 } if (recommendAgeRes > 0) { - recommendAgeIv.setImageDrawable(recommendAgeRes.toDrawable()) + mBodyBinding.recommendAgeIv.setImageDrawable(recommendAgeRes.toDrawable()) } } - ratingScoreContainer.goneIf(!mNewGameDetailEntity!!.showComment) + mBodyBinding.ratingScoreContainer.goneIf(!mNewGameDetailEntity!!.showComment) if (mGameEntity?.commentCount ?: 0 > 3) { - ratingScoreAverage.textSize = 18f - ratingScoreAverage.text = - if (mGameEntity?.star == 10F) "10" else mGameEntity?.star.toString() + mBodyBinding.ratingScoreAverage.textSize = 18f + mBodyBinding.ratingScoreAverage.text = if (mGameEntity?.star == 10F) "10" else mGameEntity?.star.toString() } else { - ratingScoreAverage.textSize = 8f - ratingScoreAverage.text = "评分过少" + mBodyBinding.ratingScoreAverage.textSize = 8f + mBodyBinding.ratingScoreAverage.text = "评分过少" } - mGameName.text = mGameEntity!!.name - mGameName.isSelected = true + mBodyBinding.gamedetailTvName.text = mGameEntity!!.name + mBodyBinding.gamedetailTvName.isSelected = true val ranking = mNewGameDetailEntity!!.ranking if (ranking != null) { - gameDetailRankLl.visibility = View.VISIBLE - gameDetailRankTv.text = "${ranking.columnName}第${ranking.no}名" - gameDetailRankTv.isSelected = true - gameDetailRankLl.setOnClickListener { - MtaHelper.onEvent( - "游戏详情_新", - "点击榜单", - "${mViewModel.game?.name}+${ranking.columnName}" - ) - DirectUtils.directToColumnCollection( - requireContext(), - ranking.collectionId, - entrance = mEntrance, - columnName = ranking.columnName - ) + mBodyBinding.gameDetailRankLl.visibility = View.VISIBLE + mBodyBinding.gameDetailRankTv.text = "${ranking.columnName}第${ranking.no}名" + mBodyBinding.gameDetailRankTv.isSelected = true + mBodyBinding.gameDetailRankLl.setOnClickListener { + MtaHelper.onEvent("游戏详情_新", "点击榜单", "${mViewModel.game?.name}+${ranking.columnName}") + DirectUtils.directToColumnCollection(requireContext(), ranking.collectionId, entrance = mEntrance, columnName = ranking.columnName) } } - BindingAdapters.setGame(mGameIcon, mGameEntity) - BindingAdapters.setGame(mGameIconSmall, mGameEntity) + BindingAdapters.setGame(mBodyBinding.gamedetailIvThumb, mGameEntity) + BindingAdapters.setGame(mBodyBinding.gamedetailThumbSmall, mGameEntity) mNewGameDetailEntity?.event?.let { - gameBigEvent.visibility = View.VISIBLE + mBodyBinding.gameBigEvent.visibility = View.VISIBLE if (it.highLight) { - gameBigEvent.setTextColor( - ContextCompat.getColor( - requireContext(), - R.color.text_2A85FB - ) + mBodyBinding.gameBigEvent.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_2A85FB)) + mBodyBinding.gameBigEvent.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_game_big_event_light) + mBodyBinding.gameBigEvent.setCompoundDrawablesWithIntrinsicBounds( + ContextCompat.getDrawable(requireContext(), R.drawable.ic_game_detail_big_event), null, + ContextCompat.getDrawable(requireContext(), R.drawable.ic_game_detail_big_event_arrow), null ) - gameBigEvent.background = - ContextCompat.getDrawable(requireContext(), R.drawable.bg_game_big_event_light) - gameBigEvent.setCompoundDrawablesWithIntrinsicBounds( - ContextCompat.getDrawable( - requireContext(), - R.drawable.ic_game_detail_big_event - ), null, - ContextCompat.getDrawable( - requireContext(), - R.drawable.ic_game_detail_big_event_arrow - ), null - ) - var eventStr = "${ - TimeUtils.getFormatTime( - it.time, - "MM-dd" - ) - }${TimeUtils.getDayString(it.time)}:${it.content}" - if (eventStr.contains("\n")) eventStr = - eventStr.substring(0, eventStr.indexOf("\n")) - gameBigEvent.text = eventStr + var eventStr = "${TimeUtils.getFormatTime(it.time, "MM-dd")}${TimeUtils.getDayString(it.time)}:${it.content}" + if (eventStr.contains("\n")) eventStr = eventStr.substring(0, eventStr.indexOf("\n")) + mBodyBinding.gameBigEvent.text = eventStr } else { - gameBigEvent.setTextColor( - ContextCompat.getColor( - requireContext(), - R.color.text_subtitleDesc - ) - ) - gameBigEvent.background = - ContextCompat.getDrawable(requireContext(), R.drawable.bg_game_big_event) - gameBigEvent.setCompoundDrawablesWithIntrinsicBounds( - ContextCompat.getDrawable( - requireContext(), - R.drawable.ic_game_detail_big_event_gray - ), null, - ContextCompat.getDrawable( - requireContext(), - R.drawable.ic_game_detail_big_event_arrow_gray - ), null + mBodyBinding.gameBigEvent.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_subtitleDesc)) + mBodyBinding.gameBigEvent.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_game_big_event) + mBodyBinding.gameBigEvent.setCompoundDrawablesWithIntrinsicBounds( + ContextCompat.getDrawable(requireContext(), R.drawable.ic_game_detail_big_event_gray), null, + ContextCompat.getDrawable(requireContext(), R.drawable.ic_game_detail_big_event_arrow_gray), null ) var eventStr = if (TimeUtils.getBeforeDays(it.time) <= 15) "${ - TimeUtils.getFormatTime( - it.time, - "MM-dd" - ) + TimeUtils.getFormatTime(it.time, "MM-dd") }${TimeUtils.getDayString(it.time)}:${it.content}" else it.content - if (eventStr.contains("\n")) eventStr = - eventStr.substring(0, eventStr.indexOf("\n")) - gameBigEvent.text = eventStr + if (eventStr.contains("\n")) eventStr = eventStr.substring(0, eventStr.indexOf("\n")) + mBodyBinding.gameBigEvent.text = eventStr } - gameBigEvent.setOnClickListener { + mBodyBinding.gameBigEvent.setOnClickListener { MtaHelper.onEvent("游戏详情_新", "游戏大事件", mViewModel.game?.name ?: "") mViewModel.getBigEvent() } @@ -1020,46 +807,46 @@ class GameDetailFragment : NormalFragment() { private fun setUpTopVideo(topVideo: GameDetailEntity.Video) { GSYVideoOptionBuilder() - .setIsTouchWigetFull(false) - .setIsTouchWiget(false) - .setRotateViewAuto(false) - .setShowFullAnimation(false) - .setSeekRatio(1f) - .setUrl(topVideo.url) - .setCacheWithPlay(true) - .setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onQuitFullscreen(url: String?, vararg objects: Any) { - mOrientationUtils?.backToProtVideo() - mTopVideoView.uploadVideoStreamingPlaying("退出全屏") - } - }) - .build(mTopVideoView) + .setIsTouchWigetFull(false) + .setIsTouchWiget(false) + .setRotateViewAuto(false) + .setShowFullAnimation(false) + .setSeekRatio(1f) + .setUrl(topVideo.url) + .setCacheWithPlay(true) + .setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onQuitFullscreen(url: String?, vararg objects: Any) { + mOrientationUtils?.backToProtVideo() + mVideoBinding.player.uploadVideoStreamingPlaying("退出全屏") + } + }) + .build(mVideoBinding.player) - mTopVideoView.gameName = mGameEntity?.name ?: "" - mTopVideoView.viewModel = mViewModel - mTopVideoView.video = topVideo - mTopVideoView.updateThumb(topVideo.poster) + mVideoBinding.player.gameName = mGameEntity?.name ?: "" + mVideoBinding.player.viewModel = mViewModel + mVideoBinding.player.video = topVideo + mVideoBinding.player.updateThumb(topVideo.poster) //val trafficVideo = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(SettingsFragment.TRAFFIC_VIDEO_SP_KEY, false) val videoOption = SPUtils.getString( - Constants.SP_HOME_OR_DETAIL_VIDEO_OPTION, - VideoSettingFragment.VIDEO_OPTION_WIFI + Constants.SP_HOME_OR_DETAIL_VIDEO_OPTION, + VideoSettingFragment.VIDEO_OPTION_WIFI ) - ?: VideoSettingFragment.VIDEO_OPTION_WIFI + ?: VideoSettingFragment.VIDEO_OPTION_WIFI when (videoOption) { VideoSettingFragment.VIDEO_OPTION_ALL -> { - mTopVideoView.startPlayLogic(isAutoPlay = true) + mVideoBinding.player.startPlayLogic(isAutoPlay = true) } VideoSettingFragment.VIDEO_OPTION_WIFI -> { if (NetworkUtils.isWifiConnected(requireContext()) /*|| !trafficVideo*/) { if (mViewModel.isTopVideoPartlyCached(topVideo.url)) { - mTopVideoView.startPlayLogic(isAutoPlay = true) + mVideoBinding.player.startPlayLogic(isAutoPlay = true) } else { // 未有缓存时,为避免影响页面加载,延迟自动播放视频 postDelayedRunnable({ if (activity != null && activity?.isFinishing != true) { - mTopVideoView.startPlayLogic(isAutoPlay = true) + mVideoBinding.player.startPlayLogic(isAutoPlay = true) } }, INITIAL_DELAY) } @@ -1070,46 +857,35 @@ class GameDetailFragment : NormalFragment() { } } - mTopVideoView.fullscreenButton.setOnClickListener { - val horizontalVideoView = - mTopVideoView.startWindowFullscreen(requireContext(), true, true) as? TopVideoView + mVideoBinding.player.fullscreenButton.setOnClickListener { + val horizontalVideoView = mVideoBinding.player.startWindowFullscreen(requireContext(), true, true) as? TopVideoView if (horizontalVideoView == null) { toastInInternalRelease("全屏失败,请向技术人员提供具体的操作步骤") return@setOnClickListener } mOrientationUtils?.resolveByClick() - horizontalVideoView.uuid = mTopVideoView.uuid + horizontalVideoView.uuid = mVideoBinding.player.uuid horizontalVideoView.viewModel = mViewModel horizontalVideoView.video = topVideo horizontalVideoView.updateThumb(topVideo.poster) horizontalVideoView.violenceUpdateMuteStatus() - mTopVideoView.uploadVideoStreamingPlaying("开始播放") - mTopVideoView.uploadVideoStreamingPlaying("点击全屏") - MtaHelper.onEvent("游戏详情_顶部视频", "顶部视频-点击进入全屏", mTopVideoView.combinedTitleAndId) + mVideoBinding.player.uploadVideoStreamingPlaying("开始播放") + mVideoBinding.player.uploadVideoStreamingPlaying("点击全屏") + MtaHelper.onEvent("游戏详情_顶部视频", "顶部视频-点击进入全屏", mVideoBinding.player.combinedTitleAndId) } - mTopVideoView.observeVolume(this) + mVideoBinding.player.observeVolume(this) } private fun updateToolbarStyle(isToolbarWhite: Boolean) { - mTitleTv.setTextColor( - ContextCompat.getColor( - requireContext(), - if (isToolbarWhite) R.color.black else R.color.white - ) + mBodyBinding.titleTv.setTextColor( + ContextCompat.getColor(requireContext(), if (isToolbarWhite) R.color.black else R.color.white) ) - mToolbar.setNavigationIcon(if (isToolbarWhite) R.drawable.ic_bar_back else R.drawable.ic_bar_back_light) - mToolbar.setBackgroundColor( - ContextCompat.getColor( - requireContext(), - if (isToolbarWhite) R.color.white else R.color.transparent - ) - ) - DisplayUtils.setStatusBarColor( - requireActivity(), - if (isToolbarWhite) R.color.white else R.color.transparent, - true + mBodyBinding.toolbar.setNavigationIcon(if (isToolbarWhite) R.drawable.ic_bar_back else R.drawable.ic_bar_back_light) + mBodyBinding.toolbar.setBackgroundColor( + ContextCompat.getColor(requireContext(), if (isToolbarWhite) R.color.white else R.color.transparent) ) + DisplayUtils.setStatusBarColor(requireActivity(), if (isToolbarWhite) R.color.white else R.color.transparent, true) updateConcernMenuIcon(mNewGameDetailEntity?.me?.isGameConcerned ?: false) mMoreMenuItem?.setIcon(if (isToolbarWhite) R.drawable.ic_menu_gamedetail_more else R.drawable.ic_menu_gamedetail_more_light) mSearchMenuItem?.setIcon(if (isToolbarWhite) R.drawable.ic_menu_gamedetail_search else R.drawable.ic_menu_gamedetail_search_light) @@ -1129,22 +905,22 @@ class GameDetailFragment : NormalFragment() { if (SKIP_DESC == reuse.type) { tabPerformClick(INDEX_DESC) } else if (OPEN_APPBAR == reuse.type && !mIsTouchScreen) { - mAppBarLayout.setExpanded(true, true) + mBodyBinding.gamedetailAppbar.setExpanded(true, true) } else if (SKIP_FULI == reuse.type) { - mViewPager.currentItem = INDEX_TRENDES + mBodyBinding.gamedetailVp.currentItem = INDEX_TRENDES } else if (SKIP_RATING == reuse.type) { - mViewPager.currentItem = - if (mNewGameDetailEntity?.zone == null) INDEX_RATING_FOR_NO_TRENDES else INDEX_RATING + mBodyBinding.gamedetailVp.currentItem = + if (mNewGameDetailEntity?.zone == null) INDEX_RATING_FOR_NO_TRENDES else INDEX_RATING } else if ("hideKaifuHint" == reuse.type) { mIsShowKaifuHint = false - mKaifuHint.visibility = View.GONE + mBinding.gamedetailKaifuHint.visibility = View.GONE } else if ("showKaifuHint" == reuse.type) { mIsShowKaifuHint = true if (mCurVpPosition == INDEX_TRENDES) { - mKaifuHint.post { mKaifuHint.visibility = View.VISIBLE } + mBinding.gamedetailKaifuHint.post { mBinding.gamedetailKaifuHint.visibility = View.VISIBLE } } } else if (CLOSE_APPBAR == reuse.type && !mIsTouchScreen) { - mAppBarLayout.setExpanded(false, true) + mBodyBinding.gamedetailAppbar.setExpanded(false, true) } } @@ -1181,129 +957,107 @@ class GameDetailFragment : NormalFragment() { } } - @OnClick( - R.id.reuse_no_connection, - R.id.gamedetail_kaifu_hint, - R.id.iv_concern, - R.id.tv_concern, - R.id.iv_reserve, - R.id.tv_reserve, - R.id.iv_switch, - R.id.tv_switch, - R.id.closeIv, - R.id.recommendCloseIv - ) - override fun onClick(v: View) { - when (v.id) { - R.id.reuse_no_connection -> { - mLoading.visibility = View.VISIBLE - mNoConnection.visibility = View.GONE - mErrorToolbarContainer.visibility = View.GONE - mSkeleton?.show() - mViewModel.loadData() + private fun setListener() { + mBinding.reuseNoConnection.root.setOnClickListener { + mBinding.reuseLoading.reuseLlLoading.visibility = View.VISIBLE + mBinding.reuseNoConnection.reuseNoConnection.visibility = View.GONE + mBinding.errorToolbarContainer.visibility = View.GONE + mSkeleton?.show() + mViewModel.loadData() + } + mBinding.gamedetailKaifuHint.setOnClickListener { + mBodyBinding.gamedetailAppbar.setExpanded(false, true) + mIsScrollToKaiFu = true + } + mDownloadBinding.ivConcern.setOnClickListener { + ifLogin("游戏详情-[关注]") { + if (mNewGameDetailEntity != null && mNewGameDetailEntity!!.me.isGameConcerned) { + DialogHelper.showCancelDialog(requireContext(), { + mViewModel.concernCommand(false) + }) + } else { + mViewModel.concernCommand(true) + } } - R.id.gamedetail_kaifu_hint -> { - mAppBarLayout.setExpanded(false, true) - mIsScrollToKaiFu = true + } + mDownloadBinding.tvConcern.setOnClickListener { mDownloadBinding.ivConcern.performClick() } + mDownloadBinding.ivReserve.setOnClickListener { + if (mGameEntity != null && SimulatorGameManager.isSimulatorGame(mGameEntity!!)) { + startActivity(SimulatorGameActivity.getIntent(requireContext())) + return@setOnClickListener } - R.id.iv_concern, R.id.tv_concern -> { - ifLogin("游戏详情-[关注]") { - if (mNewGameDetailEntity != null && mNewGameDetailEntity!!.me.isGameConcerned) { - DialogHelper.showCancelDialog(requireContext(), { - mViewModel.concernCommand(false) - }) + CheckLoginUtils.checkLogin(requireContext(), "游戏详情") { + if (!ReservationRepository.thisGameHasBeenReserved(mGameEntity?.id ?: "")) { + val dialogFragment = ReserveDialogFragment.getInstance(mGameEntity!!, getCallback()) + dialogFragment.show(childFragmentManager, "reserve") + } else { + if ("download" == mGameEntity?.reserveStatus) { + ReservationHelper.showDeleteReservationDialog( + requireContext(), + object : EmptyCallback { + override fun onCallback() { + ReservationHelper.deleteReservation( + mGameEntity!!, + object : EmptyCallback { + override fun onCallback() { + DetailDownloadUtils.detailInitDownload(detailViewHolder, false) + showReserveBtn(isShowReserveBtn()) + } + }) + } + }) } else { - mViewModel.concernCommand(true) + ReservationHelper.showCancelReservationDialog( + requireContext(), + object : EmptyCallback { + override fun onCallback() { + ReservationHelper.cancelReservation( + mGameEntity!!, + object : EmptyCallback { + override fun onCallback() { + DetailDownloadUtils.detailInitDownload(detailViewHolder, false) + showReserveBtn(isShowReserveBtn()) + } + }) + } + }) } } } - R.id.iv_reserve, R.id.tv_reserve -> { - if (mGameEntity != null && SimulatorGameManager.isSimulatorGame(mGameEntity!!)) { - startActivity(SimulatorGameActivity.getIntent(requireContext())) - return - } - CheckLoginUtils.checkLogin(requireContext(), "游戏详情") { - if (!ReservationRepository.thisGameHasBeenReserved(mGameEntity?.id ?: "")) { - val dialogFragment = ReserveDialogFragment.getInstance(mGameEntity!!, getCallback()) - dialogFragment.show(childFragmentManager, "reserve") - } else { - if ("download" == mGameEntity?.reserveStatus) { - ReservationHelper.showDeleteReservationDialog( - requireContext(), - object : EmptyCallback { - override fun onCallback() { - ReservationHelper.deleteReservation( - mGameEntity!!, - object : EmptyCallback { - override fun onCallback() { - DetailDownloadUtils.detailInitDownload( - detailViewHolder, - false - ) - showReserveBtn(isShowReserveBtn()) - } - }) - } - }) - } else { - ReservationHelper.showCancelReservationDialog( - requireContext(), - object : EmptyCallback { - override fun onCallback() { - ReservationHelper.cancelReservation( - mGameEntity!!, - object : EmptyCallback { - override fun onCallback() { - DetailDownloadUtils.detailInitDownload( - detailViewHolder, - false - ) - showReserveBtn(isShowReserveBtn()) - } - }) - } - }) - } - } - } - } - R.id.iv_switch, R.id.tv_switch -> { - val intent = ShellActivity.getIntent( - requireContext(), - ShellActivity.Type.SWITCH_INSTALL_METHOD, - null - ) - requireActivity().startActivity(intent) - } - R.id.closeIv -> { - showReserveGuide(false) - } - R.id.recommendCloseIv -> { - hideRecommendView(true) - } + } + mDownloadBinding.tvReserve.setOnClickListener { mDownloadBinding.ivReserve.performClick() } + mDownloadBinding.ivSwitch.setOnClickListener { + val intent = ShellActivity.getIntent(requireContext(), ShellActivity.Type.SWITCH_INSTALL_METHOD, null) + requireActivity().startActivity(intent) + } + mDownloadBinding.tvSwitch.setOnClickListener { mDownloadBinding.ivSwitch.performClick() } + mBinding.popReserverGuide.closeIv.setOnClickListener { + showReserveGuide(false) + } + mRecommendBinding.recommendCloseIv.setOnClickListener { + hideRecommendView(true) } } private fun updateConcernMenuIcon(isConcerned: Boolean) { if (isConcerned) { - mConcernTv.text = "已关注" - mConcernIv.background = R.drawable.ic_gamedetail_concerned.toDrawable() + mDownloadBinding.tvConcern.text = "已关注" + mDownloadBinding.ivConcern.background = R.drawable.ic_gamedetail_concerned.toDrawable() } else { - mConcernTv.text = "关注" - mConcernIv.background = R.drawable.ic_gamedetail_concern.toDrawable() + mDownloadBinding.tvConcern.text = "关注" + mDownloadBinding.ivConcern.background = R.drawable.ic_gamedetail_concern.toDrawable() } } private fun updateDownloadIcon() { updateDownloadCountHint(mPackageViewModel.filterSameUpdateLiveData.value) - val downloadMenuView = mToolbar.menu.findItem(R.id.menu_download).actionView + val downloadMenuView = mBodyBinding.toolbar.menu.findItem(R.id.menu_download).actionView mDownloadCountHint = downloadMenuView.findViewById(R.id.menu_download_count_hint) } private fun updateDownloadCountHint(updateList: List?) { - val count = - DownloadManager.getInstance(requireContext()).getDownloadOrUpdateCount(updateList) + val count = DownloadManager.getInstance(requireContext()).getDownloadOrUpdateCount(updateList) val params = mDownloadCountHint?.layoutParams if (TextUtils.isEmpty(count)) { params?.width = DisplayUtils.dip2px(6f) @@ -1338,38 +1092,39 @@ class GameDetailFragment : NormalFragment() { private fun showReserveBtn(isShow: Boolean = false) { if (mGameEntity != null && SimulatorGameManager.isSimulatorGame(mGameEntity!!)) { - mReserveIv.visibility = View.VISIBLE - mReserveTv.visibility = View.VISIBLE - mReserveTv.text = "管理" - mReserveIv.background = R.drawable.ic_gamedetail_simulator_manage.toDrawable() + mDownloadBinding.ivReserve.visibility = View.VISIBLE + mDownloadBinding.tvReserve.visibility = View.VISIBLE + mDownloadBinding.tvReserve.text = "管理" + mDownloadBinding.ivReserve.background = R.drawable.ic_gamedetail_simulator_manage.toDrawable() return } if (isShow) { - mReserveIv.visibility = View.VISIBLE - mReserveTv.visibility = View.VISIBLE + mDownloadBinding.ivReserve.visibility = View.VISIBLE + mDownloadBinding.tvReserve.visibility = View.VISIBLE if (ReservationRepository.thisGameHasBeenReserved(mGameEntity?.id ?: "")) { - mReserveTv.text = "已预约" - mReserveIv.background = R.drawable.ic_gamedetail_reserved.toDrawable() + mDownloadBinding.tvReserve.text = "已预约" + mDownloadBinding.ivReserve.background = R.drawable.ic_gamedetail_reserved.toDrawable() } else { - mReserveTv.text = "预约" - mReserveIv.background = R.drawable.ic_gamedetail_reserve.toDrawable() + mDownloadBinding.tvReserve.text = "预约" + mDownloadBinding.ivReserve.background = R.drawable.ic_gamedetail_reserve.toDrawable() } } else { - mReserveIv.visibility = View.GONE - mReserveTv.visibility = View.GONE + mDownloadBinding.ivReserve.visibility = View.GONE + mDownloadBinding.tvReserve.visibility = View.GONE } } private fun showReserveGuide(isShow: Boolean = false) { - mReserveGuideContainer.visibility = if (isShow) View.VISIBLE else View.GONE + mBinding.popReserverGuide.reserveGuideContainer.visibility = if (isShow) View.VISIBLE else View.GONE } private fun isShowReserveBtn(): Boolean { if (mGameEntity == null) return false if (mNewGameDetailEntity == null) return false - if (mGameEntity!!.getApk() - .isEmpty() || mGameEntity!!.downloadOffStatus != null || !mNewGameDetailEntity!!.appointmentSwitchStatus + if (mGameEntity!!.getApk().isEmpty() || + mGameEntity!!.downloadOffStatus != null || + !mNewGameDetailEntity!!.appointmentSwitchStatus ) return false return true } @@ -1381,26 +1136,26 @@ class GameDetailFragment : NormalFragment() { private fun pauseVideo() { if (mViewModel.displayTopVideo) { - mTopVideoView.onVideoPause() + mVideoBinding.player.onVideoPause() } } private fun resumeVideo() { if (mViewModel.displayTopVideo) { - mTopVideoView.onVideoResume() + mVideoBinding.player.onVideoResume() } } private fun releaseVideo() { if (mViewModel.displayTopVideo) { - mTopVideoView.release() - mTopVideoView.disposableTimer() + mVideoBinding.player.release() + mVideoBinding.player.disposableTimer() } } private fun tabPerformClick(position: Int) { if (!mIsPreferredTabSelected) { - mViewPager.currentItem = position + mBodyBinding.gamedetailVp.currentItem = position mIsPreferredTabSelected = true } } @@ -1409,107 +1164,89 @@ class GameDetailFragment : NormalFragment() { val entrance = if (mEntrance.contains("论坛详情")) "论坛" else "游戏" mGameEntity?.run { when (position) { - INDEX_TRENDES -> NewLogUtils.logGameDetailTabClick( - "view_game_detail_special_area_tab", - entrance, - id, - gameType, - bbsId, - ) + INDEX_TRENDES -> NewLogUtils.logGameDetailTabClick("view_game_detail_special_area_tab", entrance, id, gameType, bbsId) - INDEX_RATING -> NewLogUtils.logGameDetailTabClick( - "view_game_detail_comment_tab", - entrance, - id, - gameType, - bbsId, - ) + INDEX_RATING -> NewLogUtils.logGameDetailTabClick("view_game_detail_comment_tab", entrance, id, gameType, bbsId) } } } private fun handleTabTouchEvent(title: String) { - if (title == mTabClickEvent.second - && System.currentTimeMillis() - mTabClickEvent.first < 300 - ) { - val fragment = fragmentsList[mViewPager.currentItem] + if (title == mTabClickEvent.second && System.currentTimeMillis() - mTabClickEvent.first < 300) { + val fragment = mFragmentsList[mBodyBinding.gamedetailVp.currentItem] if (fragment is IScrollable && fragment.isAdded) { fragment.scrollToTop() } } else { mTabClickEvent = Pair(System.currentTimeMillis(), title) if (title == "专区" || title == "评论") { - mAppBarLayout.setExpanded(false, true) + mBodyBinding.gamedetailAppbar.setExpanded(false, true) // 部分手机触发了 touch 但是没有触发 viewpager 的变动,这里手动帮它一下 - tabPerformClick(tabTitleList.indexOf(title)) + tabPerformClick(mTabTitleList.indexOf(title)) } } } private fun showBrowserInstallHintIfNeeded() { if (BrowserInstallHelper.shouldShowGameDetailUseBrowserToInstallHint()) { - mBrowserInstallContainer.visibility = View.VISIBLE - mBrowserInstallContainer.setOnClickListener { + mDownloadBinding.browserInstallHintContainer.visibility = View.VISIBLE + mDownloadBinding.browserInstallHintContainer.setOnClickListener { val intent = ShellActivity.getIntent( - requireContext(), - ShellActivity.Type.SWITCH_INSTALL_METHOD, - null + requireContext(), + ShellActivity.Type.SWITCH_INSTALL_METHOD, + null ) requireActivity().startActivity(intent) BrowserInstallHelper.logOrdinaryBrowserEvent(BrowserInstallHelper.Type.SWITCH_INSTALL_GUIDE_ACCESS) } val manufacturer = Build.MANUFACTURER.toUpperCase(Locale.CHINA) - var hintText = "" - var closeHintText = "" + val hintText: String + val closeHintText: String if (manufacturer == "OPPO" || manufacturer == "VIVO") { hintText = - if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) "当前安装方式为[浏览器安装],点击切换安装方式" else "${manufacturer}手机如何解决安装需要密码" + if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) "当前安装方式为[浏览器安装],点击切换安装方式" else "${manufacturer}手机如何解决安装需要密码" closeHintText = - "关闭后“切换安装方式”入口将显示在左下角,您也可以前往“我的光环-设置-切换安装方式”进行设置,或在“ 我的光环-帮助与反馈”查看相关问题" + "关闭后“切换安装方式”入口将显示在左下角,您也可以前往“我的光环-设置-切换安装方式”进行设置,或在“ 我的光环-帮助与反馈”查看相关问题" } else { hintText = - if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) "当前安装方式为[浏览器安装],点击切换安装方式" else "手机如何解决无法安装问题" + if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) "当前安装方式为[浏览器安装],点击切换安装方式" else "手机如何解决无法安装问题" closeHintText = "关闭后“切换安装方式”入口将显示在左下角,您也可以前往“我的光环-设置-切换安装方式”进行设置" } - mBrowserInstallHintTv.text = hintText - mBrowserInstallCloseIv.setOnClickListener { + mDownloadBinding.browserInstallHintTv.text = hintText + mDownloadBinding.browserInstallHintCloseIv.setOnClickListener { DialogHelper.showDialog( - requireContext(), - "温馨提示", - closeHintText, - "确定", - "取消", - { - mBrowserInstallContainer.visibility = View.GONE - SPUtils.setBoolean(Constants.SP_SWITCH_INSTALL_VISIBLE, true) - mSwitchIv.visibility = View.VISIBLE - mSwitchTv.visibility = View.VISIBLE - BrowserInstallHelper.hideGameDetailUseBrowserToInstallHint() - BrowserInstallHelper.logOrdinaryBrowserEvent(BrowserInstallHelper.Type.SWITCH_INSTALL_GUIDE_QUIT) - } + requireContext(), + "温馨提示", + closeHintText, + "确定", + "取消", + { + mDownloadBinding.browserInstallHintContainer.visibility = View.GONE + SPUtils.setBoolean(Constants.SP_SWITCH_INSTALL_VISIBLE, true) + mDownloadBinding.ivSwitch.visibility = View.VISIBLE + mDownloadBinding.tvSwitch.visibility = View.VISIBLE + BrowserInstallHelper.hideGameDetailUseBrowserToInstallHint() + BrowserInstallHelper.logOrdinaryBrowserEvent(BrowserInstallHelper.Type.SWITCH_INSTALL_GUIDE_QUIT) + } ) } } else { - mBrowserInstallContainer.visibility = View.GONE + mDownloadBinding.browserInstallHintContainer.visibility = View.GONE } if (SPUtils.getBoolean(Constants.SP_SWITCH_INSTALL_VISIBLE, false)) { - mSwitchIv.visibility = View.VISIBLE - mSwitchTv.visibility = View.VISIBLE + mDownloadBinding.ivSwitch.visibility = View.VISIBLE + mDownloadBinding.tvSwitch.visibility = View.VISIBLE } else { - mSwitchIv.visibility = View.GONE - mSwitchTv.visibility = View.GONE + mDownloadBinding.ivSwitch.visibility = View.GONE + mDownloadBinding.tvSwitch.visibility = View.GONE } } private fun controlInstallHint() { if (mGameEntity != null) { - val status = GameUtils.getDownloadBtnText( - requireContext(), - mGameEntity, - PluginLocation.only_game - ) + val status = GameUtils.getDownloadBtnText(requireContext(), mGameEntity, PluginLocation.only_game) val isLaunch = (status == getString(R.string.launch) || status == getString(R.string.open)) if (SPUtils.getBoolean(Constants.SP_SHOULD_SHOW_GAME_DETAIL_INSTALL_GUIDE, false) && !mGameEntity!!.isReservable) { if (mGameEntity!!.downloadOffText?.isEmpty() == true && !isLaunch) { @@ -1524,18 +1261,18 @@ class GameDetailFragment : NormalFragment() { private fun showInstallHint() { val gameGuidePopupEntity = Config.getGameGuidePopupEntity() if (SPUtils.getBoolean(Constants.SP_GAME_DETAIL_INSTALL_GUIDE, true) && gameGuidePopupEntity != null) { - mInstallHintTv.text = gameGuidePopupEntity.content - mInstallContainer.visibility = View.VISIBLE + mDownloadBinding.installHintTv.text = gameGuidePopupEntity.content + mDownloadBinding.installHintContainer.visibility = View.VISIBLE NewLogUtils.logGuidePopShow(gameGuidePopupEntity.id) - mInstallContainer.setDebouncedClickListener { + mDownloadBinding.installHintContainer.setDebouncedClickListener { DirectUtils.directToLinkPage(requireContext(), gameGuidePopupEntity.jump, mEntrance, "游戏详情") NewLogUtils.logGuidePopLinkClick( - gameGuidePopupEntity.id, - gameGuidePopupEntity.jump.type, - gameGuidePopupEntity.jump.linkText + gameGuidePopupEntity.id, + gameGuidePopupEntity.jump.type, + gameGuidePopupEntity.jump.linkText ) } - mInstallCloseIv.setDebouncedClickListener { + mDownloadBinding.installHintCloseIv.setDebouncedClickListener { hideInstallHint() SPUtils.setBoolean(Constants.SP_GAME_DETAIL_INSTALL_GUIDE, false) NewLogUtils.logGuidePopClose(gameGuidePopupEntity.id) @@ -1544,52 +1281,42 @@ class GameDetailFragment : NormalFragment() { } private fun hideInstallHint() { - mInstallContainer.visibility = View.GONE + mDownloadBinding.installHintContainer.visibility = View.GONE } - private fun initRecommendUI() { val recommendPopupList = mViewModel.recommendPopupLiveData.value - mRecommendPopupEntity = - RecommendPopupHelper.getRecommendPopup(mViewModel.game, recommendPopupList) - ?: return + mRecommendPopupEntity = RecommendPopupHelper.getRecommendPopup(mViewModel.game, recommendPopupList) ?: return val popupDetail = mRecommendPopupEntity!!.popupDetail - mRecommendText.text = popupDetail.text + mRecommendBinding.recommendText.text = popupDetail.text if (popupDetail.images.isNotEmpty()) { - ImageUtils.display(mRecommendImage, popupDetail.images[0]) - mRecommendImage.loadingCallback = object : WrapContentDraweeView.LoadingCallback { + ImageUtils.display(mRecommendBinding.recommendImage, popupDetail.images[0]) + mRecommendBinding.recommendImage.loadingCallback = object : WrapContentDraweeView.LoadingCallback { override fun loaded() { - mRecommendImage.post { - mRecommendImage.layoutParams.apply { + mRecommendBinding.recommendImage.post { + mRecommendBinding.recommendImage.layoutParams.apply { width = 68f.dip2px() - height = (width / mRecommendImage.aspectRatio).toInt() - mRecommendImage.layoutParams = this + height = (width / mRecommendBinding.recommendImage.aspectRatio).toInt() + mRecommendBinding.recommendImage.layoutParams = this } } } } } else { - mRecommendImage.visibility = View.GONE - (mRecommendText.layoutParams as ConstraintLayout.LayoutParams).apply { + mRecommendBinding.recommendImage.visibility = View.GONE + (mRecommendBinding.recommendText.layoutParams as ConstraintLayout.LayoutParams).apply { leftMargin = 16f.dip2px() - mRecommendText.layoutParams = this + mRecommendBinding.recommendText.layoutParams = this } - mRecommendText.maxWidth = 150f.dip2px() + mRecommendBinding.recommendText.maxWidth = 150f.dip2px() } - mRecommendLinkTv.text = popupDetail.link?.title - mRecommendLinkTv.setOnClickListener { + mRecommendBinding.recommendLinkTv.text = popupDetail.link?.title + mRecommendBinding.recommendLinkTv.setOnClickListener { popupDetail.link?.let { - PageSwitchDataHelper.pushCurrentPageData( - hashMapOf( - Pair( - PageSwitchDataHelper.PAGE_GAME_DETAIL_RECOMMEND, - "" - ) - ) - ) + PageSwitchDataHelper.pushCurrentPageData(hashMapOf(Pair(PageSwitchDataHelper.PAGE_GAME_DETAIL_RECOMMEND, ""))) DirectUtils.directToLinkPage(requireContext(), it, mEntrance, "游戏详情") LogUtils.uploadRecommendPopup( - "recommend_pop_link_click", mRecommendPopupEntity?.id, mViewModel.game?.id + "recommend_pop_link_click", mRecommendPopupEntity?.id, mViewModel.game?.id ?: "", mViewModel.game?.name ?: "", it.type, it.text, "", "" ) } @@ -1599,22 +1326,22 @@ class GameDetailFragment : NormalFragment() { private fun showRecommendView() { if (mRecommendPopupEntity == null) return if (!RecommendPopupHelper.checkFrequencyIsMatch(mRecommendPopupEntity!!)) return - mRecommendView.post { + mRecommendBinding.recommendView.post { if (!mIsRecommendViewShow) { - val width = mRecommendView.measuredWidth.toFloat() - mRecommendView.x = -width - mRecommendView.visibility = View.VISIBLE - mRecommendView.animate().x(0f).setDuration(500).start() + val width = mRecommendBinding.recommendView.measuredWidth.toFloat() + mRecommendBinding.recommendView.x = -width + mRecommendBinding.recommendView.visibility = View.VISIBLE + mRecommendBinding.recommendView.animate().x(0f).setDuration(500).start() mIsRecommendViewShow = true RecommendPopupHelper.saveRecord(mRecommendPopupEntity!!) if (mRecommendPopupEntity!!.popupDetail.duration > 0) { mRecommendDisposable = - countDownTimer(mRecommendPopupEntity!!.popupDetail.duration) { finish, _ -> - if (finish) hideRecommendView() - } + countDownTimer(mRecommendPopupEntity!!.popupDetail.duration) { finish, _ -> + if (finish) hideRecommendView() + } } LogUtils.uploadRecommendPopup( - "recommend_pop_show", mRecommendPopupEntity?.id, mViewModel.game?.id + "recommend_pop_show", mRecommendPopupEntity?.id, mViewModel.game?.id ?: "", mViewModel.game?.name ?: "", "", "", "", "" ) } @@ -1622,16 +1349,16 @@ class GameDetailFragment : NormalFragment() { } private fun hideRecommendView(isManuallyClose: Boolean = false) { - mRecommendView.post { + mRecommendBinding.recommendView.post { if (mIsRecommendViewShow) { - val width = mRecommendView.measuredWidth.toFloat() - mRecommendView.animate().x(-width).setDuration(500).start() + val width = mRecommendBinding.recommendView.measuredWidth.toFloat() + mRecommendBinding.recommendView.animate().x(-width).setDuration(500).start() mIsRecommendViewShow = false mRecommendDisposable?.dispose() mRecommendDisposable = null if (isManuallyClose) { LogUtils.uploadRecommendPopup( - "recommend_pop_close", mRecommendPopupEntity?.id, mViewModel.game?.id + "recommend_pop_close", mRecommendPopupEntity?.id, mViewModel.game?.id ?: "", mViewModel.game?.name ?: "", "", "", "", "" ) } @@ -1649,13 +1376,14 @@ class GameDetailFragment : NormalFragment() { override fun onBackPressed(): Boolean { mOrientationUtils?.backToProtVideo() - if (mViewPager.currentItem == INDEX_TRENDES - && fragmentsList[INDEX_TRENDES] is WebFragment - && fragmentsList[INDEX_TRENDES].isAdded) { - return (fragmentsList[INDEX_TRENDES] as WebFragment).onBackPressed() + if (mBodyBinding.gamedetailVp.currentItem == INDEX_TRENDES + && mFragmentsList[INDEX_TRENDES] is WebFragment + && mFragmentsList[INDEX_TRENDES].isAdded + ) { + return (mFragmentsList[INDEX_TRENDES] as WebFragment).onBackPressed() } - if (CustomManager.backFromWindowFull(requireActivity(), mTopVideoView.getKey())) { + if (CustomManager.backFromWindowFull(requireActivity(), mVideoBinding.player.getKey())) { return true } @@ -1664,8 +1392,8 @@ class GameDetailFragment : NormalFragment() { override fun onResume() { super.onResume() - if (mNewGameDetailEntity?.bbsTab != null && mViewPager.currentItem == tabTitleList.size - 1) { - mViewPager.currentItem = mCurVpPosition + if (mNewGameDetailEntity?.bbsTab != null && mBodyBinding.gamedetailVp.currentItem == mTabTitleList.size - 1) { + mBodyBinding.gamedetailVp.currentItem = mCurVpPosition } if (!mIsPauseTopVideo) { resumeVideo() @@ -1684,13 +1412,10 @@ class GameDetailFragment : NormalFragment() { super.onPause() pauseVideo() if (mViewModel.displayTopVideo) { - val currentPosition = mTopVideoView.getCurrentPosition() + val currentPosition = mVideoBinding.player.getCurrentPosition() val topVideo = mNewGameDetailEntity?.topVideo if (topVideo != null) { - ScrollCalculatorHelper.savePlaySchedule( - MD5Utils.getContentMD5(topVideo.url), - currentPosition - ) + ScrollCalculatorHelper.savePlaySchedule(MD5Utils.getContentMD5(topVideo.url), currentPosition) } } hideRecommendView() @@ -1711,7 +1436,7 @@ class GameDetailFragment : NormalFragment() { override fun onSuccess() { LogUtils.logReservation(mGameEntity, mTraceEvent) DetailDownloadUtils.detailInitDownload(detailViewHolder, false) - if (mReserveIv.visibility == View.VISIBLE) { + if (mDownloadBinding.ivReserve.visibility == View.VISIBLE) { showReserveBtn(isShowReserveBtn()) } } @@ -1719,8 +1444,7 @@ class GameDetailFragment : NormalFragment() { } private fun restoreDialogFragment() { - (childFragmentManager.findFragmentByTag("reserve") - as? ReserveDialogFragment)?.run { + (childFragmentManager.findFragmentByTag("reserve") as? ReserveDialogFragment)?.run { successCallback = getCallback() } } @@ -1738,7 +1462,6 @@ class GameDetailFragment : NormalFragment() { const val CLOSE_APPBAR = "closeappbar" const val SCROLL_TO_KAIFU = "scrollToKaiFu" const val EB_SCROLLING = "EB_SCROLLING" - const val INITIAL_DELAY = 500L private const val SP_OPENED_DIALOG_TIME_PREFIX = "opened_dialog_time_prefix_" diff --git a/app/src/main/res/layout/fragment_gamedetail.xml b/app/src/main/res/layout/fragment_gamedetail.xml index 768ea026db..53ca737b00 100644 --- a/app/src/main/res/layout/fragment_gamedetail.xml +++ b/app/src/main/res/layout/fragment_gamedetail.xml @@ -1,6 +1,5 @@ - + - + - + - + @@ -83,6 +92,7 @@ + android:visibility="invisible" /> \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_body.xml b/app/src/main/res/layout/gamedetail_body.xml index 5502141900..f48429b198 100644 --- a/app/src/main/res/layout/gamedetail_body.xml +++ b/app/src/main/res/layout/gamedetail_body.xml @@ -35,7 +35,9 @@ android:gravity="center_horizontal" android:orientation="vertical"> - + From e250f69d6b533482bbe4a4f65e9c42126c3e68f8 Mon Sep 17 00:00:00 2001 From: jack <1484288157@qq.com> Date: Tue, 21 Dec 2021 15:27:46 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=95=B4=E7=90=86=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81=20https:?= =?UTF-8?q?//git.shanqu.cc/halo/android/assistant-android/-/issues/53?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FlutterBoostRouteServiceImplAop.java | 14 +- .../com/gh/gamecenter/GameDetailActivity.java | 315 ------------------ .../com/gh/gamecenter/GameDetailActivity.kt | 216 ++++++++++++ .../java/com/gh/gamecenter/MainActivity.java | 2 +- .../com/gh/gamecenter/SuggestionActivity.java | 11 +- .../adapter/LibaoDetailAdapter.java | 2 +- .../gh/gamecenter/adapter/VoteAdapter.java | 2 +- .../gamecenter/amway/AmwaySuccessFragment.kt | 5 +- .../amway/search/AmwaySearchViewHolder.kt | 2 +- .../catalog/NewCatalogListAdapter.kt | 2 +- .../category/NewCategoryListAdapter.kt | 2 +- .../category2/CategoryV2ListAdapter.kt | 2 +- .../collection/GamesCollectionAdapter.kt | 14 +- .../forum/detail/ForumDetailFragment.kt | 5 +- .../gh/gamecenter/game/GameFragmentAdapter.kt | 32 +- .../game/horizontal/GameHorizontalAdapter.kt | 2 +- .../horizontal/GameHorizontalSlideAdapter.kt | 2 +- .../game/imageslide/ImageSlideAdapter.kt | 2 +- .../gamedetail/rating/RatingReplyAdapter.kt | 2 +- .../LegacyHomeFragmentAdapterAssistant.kt | 4 +- .../message/KeFuFragmentAdapter.java | 4 +- .../message/MessageItemViewHolder.java | 2 +- .../mygame/MyFollowedGameAdapter.kt | 20 +- .../newsdetail/NewsDetailAdapter.java | 2 +- .../personalhome/rating/RatingAdapter.kt | 17 +- .../qa/editor/OnLinkClickListener.kt | 2 +- .../gamecenter/qa/select/VotingFragment.java | 2 +- .../search/SearchGameIndexAdapter.kt | 48 +-- .../search/SearchGameResultAdapter.kt | 76 +++-- .../servers/GameServersContentAdapter.kt | 4 +- .../servers/GameServersTestAdapter.kt | 2 +- .../gh/gamecenter/subject/SubjectAdapter.kt | 2 +- .../com/gh/gamecenter/tag/TagsListAdapter.kt | 2 +- .../fragment/myconcern/MyConcernAdapter.java | 4 +- .../myconcern/MyConcernRecommendAdapter.java | 6 +- 35 files changed, 382 insertions(+), 449 deletions(-) delete mode 100644 app/src/main/java/com/gh/gamecenter/GameDetailActivity.java create mode 100644 app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt diff --git a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java index c2deb4ef7d..890280c4c4 100644 --- a/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java +++ b/app/src/main/java/com/gh/flutter/FlutterBoostRouteServiceImplAop.java @@ -45,7 +45,7 @@ public class FlutterBoostRouteServiceImplAop { public void handleHelpDetail(Context context, Map params) { StringBuilder builder = new StringBuilder("ghzhushou://" + EntranceUtils.HOST_HELP_DETAIL); String url = (String) params.get("url"); - if(url != null && !url.isEmpty()) { + if (url != null && !url.isEmpty()) { builder.append("?url=").append(params.get("url")); } else { builder.append("?id=").append(params.get("id")); @@ -58,7 +58,7 @@ public class FlutterBoostRouteServiceImplAop { @TargetClass(TARGET_CLASS) @Insert(METHOD_HANDLE_HELP_SUGGESTION) public void handleHelpSuggestion(Context context, Map params) { - String url = "ghzhushou://" + EntranceUtils.HOST_HELP_SUGGESTION + "?type=" + params.get("type"); + String url = "ghzhushou://" + EntranceUtils.HOST_HELP_SUGGESTION + "?type=" + params.get("type"); DefaultUrlHandler.interceptUrl(context, url, ""); } @@ -82,7 +82,7 @@ public class FlutterBoostRouteServiceImplAop { libaoEntity.setTotal(Integer.parseInt((String) libaoStatus.get("total"))); libaoEntity.setCode((String) libaoStatus.get("code")); Intent intent = LibaoDetailActivity.getIntent(context, libaoEntity, false, entrance + "+(礼包中心:最新)"); - ((Activity)context).startActivityForResult(intent, LIBAO_NEW_REQUEST); + ((Activity) context).startActivityForResult(intent, LIBAO_NEW_REQUEST); } @TargetClass(TARGET_CLASS) @@ -97,7 +97,7 @@ public class FlutterBoostRouteServiceImplAop { if (views != null) concern.setViews(views); if (commentNum != null) concern.setCommentnum(commentNum); Intent intent = MessageDetailActivity.getIntentByEntity(context, concern, entrance); - ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); + ((Activity) context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); } @TargetClass(TARGET_CLASS) @@ -131,10 +131,10 @@ public class FlutterBoostRouteServiceImplAop { //统计阅读量 if (concern.getLink() != null) { Intent intent = WebActivity.getIntentByNews(context, concern, entrance); - ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); + ((Activity) context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); } else { Intent intent = NewsDetailActivity.getIntentById(context, concern.getId(), entrance); - ((Activity)context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); + ((Activity) context).startActivityForResult(intent, NEWS_MESSAGE_ARTICLE_REQUEST); } } @@ -146,6 +146,6 @@ public class FlutterBoostRouteServiceImplAop { JsonElement element = gson.toJsonTree(params.get("game")); GameEntity game = new Gson().fromJson(element, GameEntity.class); DataCollectionUtils.uploadClick(context, "列表", "我的关注", game.getName()); - GameDetailActivity.startGameDetailActivity(context, game, StringUtils.buildString(entrance, "+(我的关注-列表)")); + GameDetailActivity.startGameDetailActivity(context, game, StringUtils.buildString(entrance, "+(我的关注-列表)"), null); } } diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java deleted file mode 100644 index 21ee975b55..0000000000 --- a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java +++ /dev/null @@ -1,315 +0,0 @@ -package com.gh.gamecenter; - -import android.content.Context; -import android.content.ContextWrapper; -import android.content.Intent; -import android.os.Bundle; - -import com.gh.common.exposure.ExposureEvent; -import com.gh.common.exposure.ExposureManager; -import com.gh.common.exposure.ExposureTraceUtils; -import com.gh.common.exposure.ExposureType; -import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.common.util.EntranceUtils; -import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.gamedetail.GameDetailFragment; -import com.halo.assistant.HaloApp; - -import kotlin.Pair; - -import static com.gh.common.constant.Constants.GAME_DETAIL_COME_IN; - -/** - * TODO 合并构建 intent 的重复代码 - * Created by khy on 2017/3/24. - * 游戏详情适配器 - */ -public class GameDetailActivity extends NormalActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - DisplayUtils.transparentStatusBar(this); - } - - @Override - protected Intent provideNormalIntent() { - return getTargetIntent(this, GameDetailActivity.class, GameDetailFragment.class); - } - - @Override - protected int getLayoutId() { - return R.layout.activity_game_detail; - } - - /** - * 启动游戏详情页面 - */ - public static void startGameDetailActivity(Context context, GameEntity gameEntity, String entrance) { - DataUtils.onMtaEvent(context, "详情页面", "游戏详情", gameEntity != null ? gameEntity.getName() : ""); - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_GAMEID, gameEntity.getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putParcelable(GameEntity.TAG, gameEntity); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 启动游戏详情页面 - */ - public static void startGameDetailActivity(Context context, String gameId, String entrance) { - startGameDetailActivity(context, gameId, false, entrance); - } - - /** - * @param scrollToLibao 滚动到动态 tab 的礼包 item - */ - public static void startGameDetailActivity(Context context, String gameId, Boolean scrollToLibao, String entrance) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_GAMEID, gameId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - if (scrollToLibao) { - bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_TRENDES); - bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO, true); - } - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - - /** - * 启动游戏详情页面 with 曝光事件 - */ - public static void startGameDetailActivity(Context context, GameEntity gameEntity, String entrance, ExposureEvent traceEvent) { - startGameDetailActivity(context, gameEntity, entrance, -1, false, false, traceEvent); - } - - public static void startGameDetailActivity(Context context, GameEntity gameEntity, String entrance, int defaultTab, ExposureEvent traceEvent) { - startGameDetailActivity(context, gameEntity, entrance, defaultTab, false, false, traceEvent); - } - - public static void startGameDetailActivityToLibao(Context context, GameEntity gameEntity, String entrance, ExposureEvent traceEvent) { - startGameDetailActivity(context, gameEntity, entrance, -1, true, false, traceEvent); - } - - public static void startGameDetailActivityToServer(Context context, GameEntity gameEntity, String entrance, ExposureEvent traceEvent) { - startGameDetailActivity(context, gameEntity, entrance, -1, false, true, traceEvent); - } - - public static void startGameDetailActivity(Context context, - GameEntity gameEntity, - String entrance, - int defaultTab, - boolean scrollToLibao, - boolean scrollToServer, - ExposureEvent traceEvent) { - DataUtils.onMtaEvent(context, "详情页面", "游戏详情", gameEntity != null ? gameEntity.getName() : ""); - - Bundle bundle = new Bundle(); - - // TODO TraceEvent 为空时不该调用此方法才对 - if (BuildConfig.DEBUG) { - if (traceEvent == null) { - throw new IllegalArgumentException("没有曝光的 TraceEvent 不要调用这个方法"); - } - } - - if (traceEvent != null) { - ExposureEvent clickEvent = ExposureEvent.Companion.createEvent(gameEntity, traceEvent.getSource(), ExposureTraceUtils.INSTANCE - .appendTrace(traceEvent), ExposureType.CLICK); - ExposureManager.INSTANCE.log(clickEvent); - bundle.putParcelable(EntranceUtils.KEY_TRACE_EVENT, clickEvent); - } - - if (gameEntity != null - && traceEvent != null - && gameEntity.getId() != null - && !gameEntity.getId().equals(traceEvent.getPayload().getGameId())) { - // 当游戏 ID 跟曝光 traceEvent 的游戏ID 不一样的时候更新 traceEvent 的游戏ID - ExposureEvent forNewPayload = ExposureEvent.Companion.createEvent(gameEntity, - traceEvent.getSource(), - ExposureTraceUtils.INSTANCE.appendTrace(traceEvent), - ExposureType.EXPOSURE); - traceEvent.setPayload(forNewPayload.getPayload()); - } - - if (defaultTab != -1) { - bundle.putInt(EntranceUtils.KEY_TARGET, defaultTab); - } - - if (scrollToLibao) { - bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_DESC); - bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO, true); - } - - if (scrollToServer) { - bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_DESC); - bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_SERVER, true); - } - - bundle.putString(EntranceUtils.KEY_GAMEID, gameEntity.getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putParcelable(GameEntity.TAG, gameEntity); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 启动游戏详情页面 with 曝光事件 - */ - public static void startGameDetailActivity(Context context, String gameId, String entrance, ExposureEvent traceEvent) { - startGameDetailActivity(context, gameId, entrance, -1, traceEvent); - } - - public static void startGameDetailActivity(Context context, String gameId, String entrance, int defaultTab, ExposureEvent traceEvent) { - Bundle bundle = new Bundle(); - - // TODO TraceEvent 为空时不该调用此方法才对 - if (BuildConfig.DEBUG) { - if (traceEvent == null) { - throw new IllegalArgumentException("没有曝光的 TraceEvent 不要调用这个方法"); - } - } - - if (traceEvent != null) { - ExposureEvent clickEvent = ExposureEvent.Companion.createEvent( - new GameEntity( - gameId, - traceEvent.getPayload().getGameName()), - traceEvent.getSource(), - ExposureTraceUtils.INSTANCE.appendTrace(traceEvent), - ExposureType.CLICK); - ExposureManager.INSTANCE.log(clickEvent); - bundle.putParcelable(EntranceUtils.KEY_TRACE_EVENT, clickEvent); - } - - if (traceEvent != null - && !gameId.equals(traceEvent.getPayload().getGameId())) { - // 当游戏 ID 跟曝光 traceEvent 的游戏ID 不一样的时候更新 traceEvent 的游戏ID - ExposureEvent forNewPayload = ExposureEvent.Companion.createEvent(new GameEntity(gameId), - traceEvent.getSource(), - ExposureTraceUtils.INSTANCE.appendTrace(traceEvent), - ExposureType.EXPOSURE); - traceEvent.setPayload(forNewPayload.getPayload()); - } - - if (defaultTab != -1) { - bundle.putInt(EntranceUtils.KEY_TARGET, defaultTab); - } - - bundle.putString(EntranceUtils.KEY_GAMEID, gameId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 启动游戏详情页面,自动定位到评论页面 - */ - public static void startGameDetailCommentActivity(Context context, String gameId, String entrance) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_GAMEID, gameId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putBoolean(EntranceUtils.KEY_SKIP_GAME_COMMENT, true); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 启动游戏详情页面,自动定位到评论页面 - */ - public static void startGameDetailCommentActivity(Context context, GameEntity game, String entrance) { - Bundle bundle = new Bundle(); - bundle.putParcelable(GameEntity.TAG, game); - bundle.putString(EntranceUtils.KEY_GAMEID, game.getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putBoolean(EntranceUtils.KEY_SKIP_GAME_COMMENT, true); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 启动游戏详情页面并定位到第一个或第二个 tab - */ - public static void startGameDetailByShortcut(Context context, GameEntity game, int tab, String entrance) { - Bundle bundle = new Bundle(); - bundle.putParcelable(GameEntity.TAG, game); - bundle.putString(EntranceUtils.KEY_GAMEID, game.getId()); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putInt(EntranceUtils.KEY_TARGET, tab); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - public static void startGameDetailByShortcut(Context context, String gameId, int tab, String entrance) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_GAMEID, gameId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putInt(EntranceUtils.KEY_TARGET, tab); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 启动游戏详情页面并定位到 介绍tab,并打开视频流 - */ - public static void startGameDetailToVideoStreaming(Context context, String gameId, String entrance) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_GAMEID, gameId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putBoolean(EntranceUtils.KEY_OPEN_VIDEO_STREAMING, true); - bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_DESC); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - /** - * 如果存在多个游戏平台则打开 - */ - public static void startGameDetailActivityByVote(Context context, String gameId, String entrance) { - Bundle bundle = new Bundle(); - bundle.putString(EntranceUtils.KEY_GAMEID, gameId); - bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance); - bundle.putBoolean(EntranceUtils.KEY_OPEN_PLATFORM_WINDOW, true); - context.startActivity(getTargetIntent(context, GameDetailActivity.class, GameDetailFragment.class, bundle)); - } - - @Override - public boolean showToolbarAtLeft() { - return true; - } - - @Override - protected boolean showDownloadMenu() { - return true; - } - - @Override - protected void onDestroy() { - super.onDestroy(); - HaloApp.remove(GAME_DETAIL_COME_IN); - } - - @Override - public String getActivityNameInChinese() { - return "游戏详情"; - } - - @Override - public Pair getBusinessId() { - GameDetailFragment fragment = (GameDetailFragment) getTargetFragment(); - if (fragment.getArguments() != null) { - return new Pair<>(fragment.getArguments().getString(EntranceUtils.KEY_GAMEID), ""); - } else { - return null; - } - } - - @Override - protected void attachBaseContext(Context newBase) { - super.attachBaseContext(new ContextWrapper(newBase) { - @Override - public Object getSystemService(String name) { - // 解决 VideoView 中 AudioManager 造成的内存泄漏 - if (Context.AUDIO_SERVICE.equals(name)) { - return getApplicationContext().getSystemService(name); - } - return super.getSystemService(name); - } - }); - } -} diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt new file mode 100644 index 0000000000..8d382e8f40 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt @@ -0,0 +1,216 @@ +package com.gh.gamecenter + +import android.content.Context +import android.content.ContextWrapper +import android.content.Intent +import android.os.Bundle +import com.gh.common.constant.Constants +import com.gh.common.exposure.ExposureEvent +import com.gh.common.exposure.ExposureEvent.Companion.createEvent +import com.gh.common.exposure.ExposureManager.log +import com.gh.common.exposure.ExposureTraceUtils.appendTrace +import com.gh.common.exposure.ExposureType +import com.gh.common.util.DataUtils +import com.gh.common.util.DisplayUtils +import com.gh.common.util.EntranceUtils +import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.gamedetail.GameDetailFragment +import com.halo.assistant.HaloApp + +/** + * Created by khy on 2017/3/24. + * 游戏详情适配器 + */ +class GameDetailActivity : NormalActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + DisplayUtils.transparentStatusBar(this) + } + + override fun provideNormalIntent(): Intent { + return getTargetIntent(this, GameDetailActivity::class.java, GameDetailFragment::class.java) + } + + override fun getLayoutId(): Int { + return R.layout.activity_game_detail + } + + override fun showToolbarAtLeft(): Boolean { + return true + } + + override fun showDownloadMenu(): Boolean { + return true + } + + override fun onDestroy() { + super.onDestroy() + HaloApp.remove(Constants.GAME_DETAIL_COME_IN) + } + + override fun getActivityNameInChinese(): String { + return "游戏详情" + } + + override fun getBusinessId(): Pair { + val fragment = targetFragment as GameDetailFragment + return if (fragment.arguments != null) { + Pair(fragment.requireArguments().getString(EntranceUtils.KEY_GAMEID) ?: "", "") + } else { + super.getBusinessId() + } + } + + + override fun attachBaseContext(newBase: Context) { + super.attachBaseContext(object : ContextWrapper(newBase) { + override fun getSystemService(name: String): Any? { + // 解决 VideoView 中 AudioManager 造成的内存泄漏 + if (Context.AUDIO_SERVICE == name) { + return applicationContext.getSystemService(name) + } + return super.getSystemService(name) + } + }) + } + + companion object { + + @JvmStatic + fun startGameDetailActivity(context: Context, gameEntity: GameEntity?, entrance: String, traceEvent: ExposureEvent?) { + startGameDetailActivity(context, gameEntity, entrance, -1, traceEvent = traceEvent) + } + + /** + * @param gameEntity 游戏实体 + * @param defaultTab 默认定位到哪个tab + * @param isSkipGameComment 是否跳转到评论tab + * @param scrollToLibao 滚动到礼包区域 + * @param scrollToServer 滚动到开服表区域 + * @param traceEvent 曝光事件 + */ + @JvmStatic + fun startGameDetailActivity( + context: Context, + gameEntity: GameEntity?, + entrance: String, + defaultTab: Int = -1, + isSkipGameComment: Boolean = false, + scrollToLibao: Boolean = false, + scrollToServer: Boolean = false, + traceEvent: ExposureEvent? = null + ) { + DataUtils.onMtaEvent(context, "详情页面", "游戏详情", if (gameEntity != null) gameEntity.name else "") + val bundle = Bundle() + + if (traceEvent != null) { + val clickEvent = createEvent(gameEntity, traceEvent.source, appendTrace(traceEvent), ExposureType.CLICK) + log(clickEvent) + bundle.putParcelable(EntranceUtils.KEY_TRACE_EVENT, clickEvent) + } + if (gameEntity != null && traceEvent != null && gameEntity.id != traceEvent.payload.gameId) { + // 当游戏 ID 跟曝光 traceEvent 的游戏ID 不一样的时候更新 traceEvent 的游戏ID + val (payload) = createEvent( + gameEntity, + traceEvent.source, + appendTrace(traceEvent), + ExposureType.EXPOSURE + ) + traceEvent.payload = payload + } + if (defaultTab != -1) { + bundle.putInt(EntranceUtils.KEY_TARGET, defaultTab) + } + if (isSkipGameComment) { + bundle.putBoolean(EntranceUtils.KEY_SKIP_GAME_COMMENT, true) + } + if (scrollToLibao) { + bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_DESC) + bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO, true) + } + if (scrollToServer) { + bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_DESC) + bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_SERVER, true) + } + bundle.putString(EntranceUtils.KEY_GAMEID, gameEntity?.id) + bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance) + bundle.putParcelable(GameEntity.TAG, gameEntity) + context.startActivity(getTargetIntent(context, GameDetailActivity::class.java, GameDetailFragment::class.java, bundle)) + } + + @JvmStatic + fun startGameDetailActivity(context: Context, gameId: String, entrance: String?, traceEvent: ExposureEvent?) { + startGameDetailActivity(context, gameId, entrance, -1, traceEvent = traceEvent) + } + + /** + * @param gameId 游戏Id + * @param defaultTab 默认定位到哪个tab + * @param isSkipGameComment 是否跳转到评论tab + * @param scrollToLibao 滚动到礼包区域 + * @param openVideoStreaming 是否打开视频流 + * @param openPlatformWindow 打开多版本下载弹窗 + * @param traceEvent 曝光事件 + */ + @JvmStatic + fun startGameDetailActivity( + context: Context, + gameId: String, + entrance: String?, + defaultTab: Int = -1, + isSkipGameComment: Boolean = false, + scrollToLibao: Boolean = false, + openVideoStreaming: Boolean = false, + openPlatformWindow: Boolean = false, + traceEvent: ExposureEvent? = null + ) { + val bundle = Bundle() + + if (traceEvent != null) { + val clickEvent = createEvent( + GameEntity( + gameId, + traceEvent.payload.gameName + ), + traceEvent.source, + appendTrace(traceEvent), + ExposureType.CLICK + ) + log(clickEvent) + bundle.putParcelable(EntranceUtils.KEY_TRACE_EVENT, clickEvent) + } + if (traceEvent != null && gameId != traceEvent.payload.gameId) { + // 当游戏 ID 跟曝光 traceEvent 的游戏ID 不一样的时候更新 traceEvent 的游戏ID + val (payload) = createEvent( + GameEntity(gameId), + traceEvent.source, + appendTrace(traceEvent), + ExposureType.EXPOSURE + ) + traceEvent.payload = payload + } + if (defaultTab != -1) { + bundle.putInt(EntranceUtils.KEY_TARGET, defaultTab) + } + if (isSkipGameComment) { + bundle.putBoolean(EntranceUtils.KEY_SKIP_GAME_COMMENT, true) + } + if (openVideoStreaming) { + bundle.putBoolean(EntranceUtils.KEY_OPEN_VIDEO_STREAMING, true) + bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_DESC) + } + if (openPlatformWindow) { + bundle.putBoolean(EntranceUtils.KEY_OPEN_PLATFORM_WINDOW, true) + } + if (scrollToLibao) { + bundle.putInt(EntranceUtils.KEY_TARGET, GameDetailFragment.INDEX_TRENDES) + bundle.putBoolean(EntranceUtils.KEY_SCROLL_TO_LIBAO, true) + } + bundle.putString(EntranceUtils.KEY_GAMEID, gameId) + bundle.putString(EntranceUtils.KEY_ENTRANCE, entrance) + context.startActivity(getTargetIntent(context, GameDetailActivity::class.java, GameDetailFragment::class.java, bundle)) + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 8e7cde52bf..458b313285 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -653,7 +653,7 @@ public class MainActivity extends BaseActivity { startActivity(PackageSkipActivity.getIntent(MainActivity.this, response)); LogUtils.uploadPackageSkip("external_jump", "进入展示页", "", ""); } else { - GameDetailActivity.startGameDetailActivity(MainActivity.this, response.get(0), "应用跳转"); + GameDetailActivity.startGameDetailActivity(MainActivity.this, response.get(0), "应用跳转", null); LogUtils.uploadPackageSkip("external_jump", "进入游戏详情", response.get(0).getId(), response.get(0).getName()); } } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index 3829d0e2e8..6a3f035f54 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -1292,14 +1292,15 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall , "关闭提交", "返回修改", () -> { setResult(SUGGEST_TYPE_REQUEST); finish(); - }, () -> { }); + }, () -> { + }); return; } else if (error.getCode() == 403062) { DialogHelper.showCenterDialog(SuggestionActivity.this, "提示", "光环助手已收录游戏:" + error.getData().getGameName(), "退出并查看游戏", "仍然提交", () -> { GameDetailActivity.startGameDetailActivity(SuggestionActivity.this, - error.getData().getGameId(), "(意见反馈-游戏收录-存在相同游戏)"); + error.getData().getGameId(), "(意见反馈-游戏收录-存在相同游戏)", null); finish(); }, () -> { try { @@ -1408,7 +1409,8 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, MEDIA_STORE_REQUEST); } - }, () -> { }); + }, () -> { + }); return; } List picList = (List) data; @@ -1458,7 +1460,8 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall mFunctionType != -1) { DialogHelper.showCenterDialog(this, "提示", "确定放弃反馈吗?", "继续反馈", "放弃", - () -> { }, this::finish); + () -> { + }, this::finish); return true; } return super.handleBackPressed(); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java index 60f6df3bf7..65aff926fd 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java @@ -189,7 +189,7 @@ public class LibaoDetailAdapter extends BaseRecyclerAdapter { holder.itemView.setOnClickListener(v -> { if (mGameEntity != null) { - GameDetailActivity.startGameDetailActivity(mContext, mGameEntity, mEntrance); + GameDetailActivity.startGameDetailActivity(mContext, mGameEntity, mEntrance, null); } }); diff --git a/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java index e26ee68877..f451df6932 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java @@ -126,7 +126,7 @@ public class VoteAdapter extends ListAdapter { String entrance = "(游戏求版本)"; switch (link.getType() == null ? "" : link.getType()) { case EntranceUtils.HOST_GAME: - GameDetailActivity.startGameDetailActivityByVote(mContext, link.getLink(), entrance); + GameDetailActivity.startGameDetailActivity(mContext, link.getLink(), entrance, -1, false, false, false, true, null); break; case EntranceUtils.HOST_ARTICLE: mContext.startActivity(NewsDetailActivity.getIntentById(mContext, link.getLink(), entrance)); diff --git a/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt b/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt index 3f65502f55..3a02c16f77 100644 --- a/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/amway/AmwaySuccessFragment.kt @@ -31,10 +31,11 @@ class AmwaySuccessFragment : NormalFragment() { checkCommentBtn.setOnClickListener { if (mGameEntity != null) { - GameDetailActivity.startGameDetailCommentActivity( + GameDetailActivity.startGameDetailActivity( requireContext(), mGameEntity, - "安利墙" + "安利墙", + isSkipGameComment = true ) } else { requireActivity().finish() diff --git a/app/src/main/java/com/gh/gamecenter/amway/search/AmwaySearchViewHolder.kt b/app/src/main/java/com/gh/gamecenter/amway/search/AmwaySearchViewHolder.kt index b9173579ed..d28c7e4852 100644 --- a/app/src/main/java/com/gh/gamecenter/amway/search/AmwaySearchViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/amway/search/AmwaySearchViewHolder.kt @@ -39,7 +39,7 @@ class AmwaySearchViewHolder(var binding: AmwaySearchItemBinding, val mViewModel: override fun onCallback(arg: Boolean) { if (arg) { // 已评论过此游戏 - GameDetailActivity.startGameDetailCommentActivity(binding.root.context, gameEntity, "安利墙") + GameDetailActivity.startGameDetailActivity(binding.root.context, gameEntity, "安利墙", isSkipGameComment = true) } else { it.context.showRegulationTestDialogIfNeeded { val installPackageName = mViewModel.canUserCommentThisGame(gameEntity) diff --git a/app/src/main/java/com/gh/gamecenter/catalog/NewCatalogListAdapter.kt b/app/src/main/java/com/gh/gamecenter/catalog/NewCatalogListAdapter.kt index ab5b2fdce2..d773f7924c 100644 --- a/app/src/main/java/com/gh/gamecenter/catalog/NewCatalogListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/catalog/NewCatalogListAdapter.kt @@ -108,7 +108,7 @@ class NewCatalogListAdapter(context: Context, mContext, gameEntity, StringUtils.buildString(mEntrance, "+(", toolbarTitle, ":列表[", selectedCatalogName, "=", sortType, "=", (position + 1).toString(), "])"), - event) + traceEvent = event) } DownloadItemUtils.setOnClickListener(mContext, holder.binding.downloadBtn, diff --git a/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt b/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt index b041ce59b0..c29cd8b524 100644 --- a/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/category/NewCategoryListAdapter.kt @@ -106,7 +106,7 @@ class NewCategoryListAdapter(context: Context, mContext, gameEntity, StringUtils.buildString(mEntrance, "+(", toolbarTitle, ":列表[", selectedCategoryName, "=", sortType, "=", (position + 1).toString(), "])"), - event) + traceEvent = event) } DownloadItemUtils.setOnClickListener(mContext, holder.binding.downloadBtn, diff --git a/app/src/main/java/com/gh/gamecenter/category2/CategoryV2ListAdapter.kt b/app/src/main/java/com/gh/gamecenter/category2/CategoryV2ListAdapter.kt index e2238cfea9..f0b890df3d 100644 --- a/app/src/main/java/com/gh/gamecenter/category2/CategoryV2ListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/category2/CategoryV2ListAdapter.kt @@ -117,7 +117,7 @@ class CategoryV2ListAdapter(context: Context, mContext, gameEntity, StringUtils.buildString(mEntrance, "+(", selectedCategoryName, ":列表[", selectedSubCatalogName, "=", sortType, "=", (position + 1).toString(), "])"), - event + traceEvent = event ) } DownloadItemUtils.setOnClickListener(mContext, diff --git a/app/src/main/java/com/gh/gamecenter/collection/GamesCollectionAdapter.kt b/app/src/main/java/com/gh/gamecenter/collection/GamesCollectionAdapter.kt index dfb13372b2..d88df233dc 100644 --- a/app/src/main/java/com/gh/gamecenter/collection/GamesCollectionAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/collection/GamesCollectionAdapter.kt @@ -70,9 +70,11 @@ class GamesCollectionAdapter( entity = itemEntity executePendingBindings() - moreIv.goneIf(mViewModel.type != TYPE_USER - || mViewModel.mIsInsertGameCollection - || itemEntity.user?.id != UserManager.getInstance().userId) + moreIv.goneIf( + mViewModel.type != TYPE_USER + || mViewModel.mIsInsertGameCollection + || itemEntity.user?.id != UserManager.getInstance().userId + ) when (itemEntity.stamp) { "special_choice" -> { @@ -129,13 +131,13 @@ class GamesCollectionAdapter( } gameOne.setOnClickListener { - GameDetailActivity.startGameDetailActivity(mContext, itemEntity.games?.safelyGetInRelease(0)?.id, "") + GameDetailActivity.startGameDetailActivity(mContext, itemEntity.games?.safelyGetInRelease(0)?.id ?: "", "") } gameTwo.setOnClickListener { - GameDetailActivity.startGameDetailActivity(mContext, itemEntity.games?.safelyGetInRelease(1)?.id, "") + GameDetailActivity.startGameDetailActivity(mContext, itemEntity.games?.safelyGetInRelease(1)?.id ?: "", "") } gameThree.setOnClickListener { - GameDetailActivity.startGameDetailActivity(mContext, itemEntity.games?.safelyGetInRelease(2)?.id, "") + GameDetailActivity.startGameDetailActivity(mContext, itemEntity.games?.safelyGetInRelease(2)?.id ?: "", "") } userIcon.setOnClickListener { diff --git a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt index 2b73e80fdc..a5cc137cf8 100644 --- a/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/forum/detail/ForumDetailFragment.kt @@ -438,9 +438,8 @@ class ForumDetailFragment : BaseLazyTabFragment() { NewLogUtils.logForumDetailEnterOrClick("click_strategy_zone", bbsId, bbsType) if (mForumDetail?.zone != null) { MtaHelper.onEvent("论坛详情", "顶部区域", "游戏专区") - GameDetailActivity.startGameDetailByShortcut( - requireContext(), mForumDetail?.game?.id - ?: "", GameDetailFragment.INDEX_TRENDES, mEntrance + GameDetailActivity.startGameDetailActivity( + requireContext(), mForumDetail?.game?.id ?: "", mEntrance, GameDetailFragment.INDEX_TRENDES ) } } diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt index 65bb538732..cffee7ba0c 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.kt @@ -186,7 +186,15 @@ class GameFragmentAdapter( RankCollectionViewHolder(RankCollectionListBinding.bind(mLayoutInflater.inflate(R.layout.rank_collection_list, parent, false))) } ItemViewType.GAME_COLLECTION_ITEM -> { - HomeGameCollectionViewHolder(HomeGameCollectionItemBinding.bind(mLayoutInflater.inflate(R.layout.home_game_collection_item, parent, false))) + HomeGameCollectionViewHolder( + HomeGameCollectionItemBinding.bind( + mLayoutInflater.inflate( + R.layout.home_game_collection_item, + parent, + false + ) + ) + ) } else -> GameItemViewHolder(GameItemBinding.bind(mLayoutInflater.inflate(R.layout.game_item, parent, false))) } @@ -376,7 +384,7 @@ class GameFragmentAdapter( GameDetailActivity.startGameDetailActivity( mContext, gameEntity, StringUtils.buildString("(游戏-专题:", subjectData?.name, "-列表[", (subjectData?.position).toString(), "])"), - gameEntity.exposureEvent + traceEvent = gameEntity.exposureEvent ) } @@ -623,7 +631,7 @@ class GameFragmentAdapter( StringUtils.buildString("(游戏-专题:", entity.name, "[1-", (clickedPosition + 1).toString(), "]", ")") ) } - entity.type == "game" -> GameDetailActivity.startGameDetailActivity(mContext, entity.link, "(推荐入口)") + entity.type == "game" -> GameDetailActivity.startGameDetailActivity(mContext, entity.link ?: "", "(推荐入口)") entity.type == EntranceUtils.HOST_COMMUNITY -> DirectUtils.directToCommunity( mContext, CommunityEntity(entity.link!!, entity.text!!) @@ -793,8 +801,10 @@ class GameFragmentAdapter( ) } else { GameDetailActivity.startGameDetailActivity( - mContext, gameEntity, - StringUtils.buildString("(游戏-专题:", subjectData.name, "-列表[", (subjectData.position).toString(), "])"), itemData.exposureEvent + mContext, + gameEntity, + StringUtils.buildString("(游戏-专题:", subjectData.name, "-列表[", (subjectData.position).toString(), "])"), + traceEvent = itemData.exposureEvent ) } } @@ -882,7 +892,7 @@ class GameFragmentAdapter( private fun bindGameCollection(holder: HomeGameCollectionViewHolder, position: Int) { val gameItemData = mItemDataList[position] - val gameCollectionItemDataList = gameItemData.gameCollection?: listOf() + val gameCollectionItemDataList = gameItemData.gameCollection ?: listOf() val exposureList = arrayListOf() for (gameCollectionItemData in gameCollectionItemDataList) { @@ -891,11 +901,15 @@ class GameFragmentAdapter( val gameCollectionSource = listOf(ExposureSource("游戏单", "${gameCollection?.title} + ${gameCollection?.id}")) val gameExposureList = arrayListOf() gameCollection?.games?.take(3)?.forEachIndexed { index, game -> - gameExposureList.add(ExposureEvent.createEventWithSourceConcat( - gameEntity = game.toGameEntity().apply { outerSequence = gameCollectionItemData.outerSequence; sequence = gameCollectionItemData.gameStartPosition + index + 1 }, + gameExposureList.add( + ExposureEvent.createEventWithSourceConcat( + gameEntity = game.toGameEntity().apply { + outerSequence = gameCollectionItemData.outerSequence; sequence = gameCollectionItemData.gameStartPosition + index + 1 + }, basicSource = mBasicExposureSource, source = gameCollectionSource - )) + ) + ) } gameCollectionItemData.exposureEventList = gameExposureList exposureList.addAll(gameExposureList) diff --git a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt index dbff8aac55..3fc4b85279 100644 --- a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalAdapter.kt @@ -73,7 +73,7 @@ class GameHorizontalAdapter(context: Context, StringUtils.buildString(entrance, "+(", "游戏详情", "[", gameName, "]:大家都在玩[", (position + 1).toString(), "])")) } else { GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString("(游戏-专题:", mSubjectEntity.name, "-列表[", (position + 1).toString(), "])"), exposureEventList!![position]) + StringUtils.buildString("(游戏-专题:", mSubjectEntity.name, "-列表[", (position + 1).toString(), "])"), traceEvent = exposureEventList!![position]) } } } diff --git a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt index f33fd72764..3481bdcfbf 100644 --- a/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/horizontal/GameHorizontalSlideAdapter.kt @@ -66,7 +66,7 @@ class GameHorizontalSlideAdapter(context: Context, val exposureEvent = exposureEventList?.safelyGetInRelease(position) if (exposureEvent != null) { GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString("(游戏-专题:", mSubjectEntity.name, "-列表[", (position + 1).toString(), "])"), exposureEvent) + StringUtils.buildString("(游戏-专题:", mSubjectEntity.name, "-列表[", (position + 1).toString(), "])"), traceEvent = exposureEvent) } else { GameDetailActivity.startGameDetailActivity(mContext, gameEntity, StringUtils.buildString("(游戏-专题:", mSubjectEntity.name, "-列表[", (position + 1).toString(), "])")) diff --git a/app/src/main/java/com/gh/gamecenter/game/imageslide/ImageSlideAdapter.kt b/app/src/main/java/com/gh/gamecenter/game/imageslide/ImageSlideAdapter.kt index 4db269d77c..a904baba24 100644 --- a/app/src/main/java/com/gh/gamecenter/game/imageslide/ImageSlideAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/game/imageslide/ImageSlideAdapter.kt @@ -46,7 +46,7 @@ class ImageSlideAdapter(context: Context, private fun skipGameDetail(gameEntity: GameEntity?, position: Int) { GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString("($entrance:", subject.name, "-列表[", (position + 1).toString(), "])"), gameEntity?.exposureEvent) + StringUtils.buildString("($entrance:", subject.name, "-列表[", (position + 1).toString(), "])"), traceEvent = gameEntity?.exposureEvent) } fun checkResetData(subjectEntity: GameEntity) { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt index 179735bcbe..dac57e0905 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/rating/RatingReplyAdapter.kt @@ -155,7 +155,7 @@ class RatingReplyAdapter( mContext, game, BaseActivity.mergeEntranceAndPath(entrance, path), - mExposureEvent + traceEvent = mExposureEvent ) } holder.binding.gameDownload.run { diff --git a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt index 8e3a9c1c16..461874a92b 100644 --- a/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt +++ b/app/src/main/java/com/gh/gamecenter/home/LegacyHomeFragmentAdapterAssistant.kt @@ -262,7 +262,7 @@ class LegacyHomeFragmentAdapterAssistant( GameDetailActivity.startGameDetailActivity( mContext, gameEntity, StringUtils.buildString("(游戏-专题:", subjectData?.name, "-列表[", (subjectData?.position).toString(), "])"), - gameEntity.exposureEvent + traceEvent = gameEntity.exposureEvent ) } @@ -538,7 +538,7 @@ class LegacyHomeFragmentAdapterAssistant( } else { GameDetailActivity.startGameDetailActivity( mContext, gameEntity, - StringUtils.buildString("(游戏-专题:", subjectData.name, "-列表[", (subjectData.position).toString(), "])"), gameEntity.exposureEvent + StringUtils.buildString("(游戏-专题:", subjectData.name, "-列表[", (subjectData.position).toString(), "])"), traceEvent = gameEntity.exposureEvent ) } } diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java index 314b4be809..dc79c87204 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java @@ -294,7 +294,7 @@ public class KeFuFragmentAdapter extends ListAdapter { switch (type) { case "游戏": if (!TextUtils.isEmpty(data.getId())) { - GameDetailActivity.startGameDetailActivity(mContext, data.getId(), ""); + GameDetailActivity.startGameDetailActivity(mContext, data.getId(), "", null); } break; case "QQ号": @@ -369,7 +369,7 @@ public class KeFuFragmentAdapter extends ListAdapter { break; case "游戏详情评论": if (!TextUtils.isEmpty(data.getId())) { - GameDetailActivity.startGameDetailCommentActivity(mContext, data.getId(), ""); + GameDetailActivity.startGameDetailActivity(mContext, data.getId(), "", -1, true, false, false, false, null); } break; case "订单中心": diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageItemViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/MessageItemViewHolder.java index 948994a277..6b5aac6c4b 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageItemViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageItemViewHolder.java @@ -653,7 +653,7 @@ public class MessageItemViewHolder extends BaseRecyclerViewHolder break; case "game_comment_vote": if (view.getId() == R.id.message_original || view.getId() == R.id.message_item) { - GameDetailActivity.startGameDetailCommentActivity(context, entity.getGame().getId(), BaseActivity.mergeEntranceAndPath(entrance, path)); + GameDetailActivity.startGameDetailActivity(context, entity.getGame().getId(), BaseActivity.mergeEntranceAndPath(entrance, path), -1, true, false, false, false, null); } break; case "game_comment_reply": 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 d42b1c1000..b1e4df9bb3 100644 --- a/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/mygame/MyFollowedGameAdapter.kt @@ -21,8 +21,7 @@ import com.gh.gamecenter.databinding.ItemFollowedGameBinding import com.gh.gamecenter.entity.GameEntity import com.gh.gamecenter.gamedetail.GameDetailFragment -class MyFollowedGameAdapter(context: Context, var mViewModel: MyFollowedGameViewModel) - : ListAdapter(context), IExposable { +class MyFollowedGameAdapter(context: Context, var mViewModel: MyFollowedGameViewModel) : ListAdapter(context), IExposable { private val mEntrance = "(我的关注)" private val mExposureEventSparseArray: SparseArray = SparseArray() @@ -61,14 +60,15 @@ class MyFollowedGameAdapter(context: Context, var mViewModel: MyFollowedGameView gameItemIncluded.game = gameEntity moreBtn.visibility = View.GONE initServerType(gameEntity) - initShortcut(gameEntity, mEntrance, path,newPath) + initShortcut(gameEntity, mEntrance, path, newPath) updateConcernButton(gameEntity, mViewModel) executePendingBindings() } val exposureEvent = ExposureEvent.createEvent( - gameEntity, - listOf(ExposureSource("我的游戏", "关注"))) + gameEntity, + listOf(ExposureSource("我的游戏", "关注")) + ) mExposureEventSparseArray.append(position, exposureEvent) itemView.setOnClickListener { @@ -146,19 +146,19 @@ class MyFollowedGameViewHolder(var binding: ItemFollowedGameBinding) : RecyclerV MtaHelper.onEvent("我的光环", path, "介绍入口") MtaHelper.onEvent("我的光环_新", newPath, "详情入口") MtaHelper.onEvent("我的光环_新", path, "介绍入口") - GameDetailActivity.startGameDetailByShortcut(binding.root.context, gameEntity, GameDetailFragment.INDEX_DESC, entrance) + GameDetailActivity.startGameDetailActivity(binding.root.context, gameEntity, entrance, defaultTab = GameDetailFragment.INDEX_DESC) } - if(gameEntity.isZoneOpen) { + if (gameEntity.isZoneOpen) { binding.trendsContainer.alpha = 1F binding.trendsContainer.addSelectableItemBackground() binding.trendsContainer.setOnClickListener { MtaHelper.onEvent("我的光环", path, "动态入口") MtaHelper.onEvent("我的光环_新", newPath, "专区入口") MtaHelper.onEvent("我的光环_新", path, "动态入口") - GameDetailActivity.startGameDetailByShortcut(binding.root.context, gameEntity, GameDetailFragment.INDEX_TRENDES, entrance) + GameDetailActivity.startGameDetailActivity(binding.root.context, gameEntity, entrance, defaultTab = GameDetailFragment.INDEX_TRENDES) } - }else{ + } else { binding.trendsContainer.alpha = 0.4F binding.trendsContainer.removeSelectableItemBackground() binding.trendsContainer.setOnClickListener { } @@ -171,7 +171,7 @@ class MyFollowedGameViewHolder(var binding: ItemFollowedGameBinding) : RecyclerV MtaHelper.onEvent("我的光环", path, "评论入口") MtaHelper.onEvent("我的光环_新", newPath, "评论入口") MtaHelper.onEvent("我的光环_新", path, "评论入口") - GameDetailActivity.startGameDetailCommentActivity(binding.root.context, gameEntity, entrance) + GameDetailActivity.startGameDetailActivity(binding.root.context, gameEntity, entrance, isSkipGameComment = true) } } else { binding.commentsContainer.alpha = 0.4F diff --git a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java index 2f5cfa8efb..5a0a99a31f 100644 --- a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java @@ -403,7 +403,7 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter { viewHolder.itemView.setOnClickListener(v -> { DataCollectionUtils.uploadClick(mContext, "游戏信息", "新闻详情", mNewsDetailEntity.getTitle()); - GameDetailActivity.startGameDetailActivity(mContext, mGameEntity.getId(), mEntrance + "+(新闻详情[" + mNewsDetailEntity.getTitle() + "])"); + GameDetailActivity.startGameDetailActivity(mContext, mGameEntity.getId(), mEntrance + "+(新闻详情[" + mNewsDetailEntity.getTitle() + "])", null); }); } diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/rating/RatingAdapter.kt b/app/src/main/java/com/gh/gamecenter/personalhome/rating/RatingAdapter.kt index 1366866b2c..882d64cdcb 100644 --- a/app/src/main/java/com/gh/gamecenter/personalhome/rating/RatingAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personalhome/rating/RatingAdapter.kt @@ -16,9 +16,11 @@ import com.gh.gamecenter.baselist.ListAdapter import com.gh.gamecenter.baselist.NormalListViewModel import com.gh.gamecenter.databinding.PersonalHomeRatingBinding -class RatingAdapter(context: Context, - private val mEntrance: String, - private val mListViewModel: NormalListViewModel) : ListAdapter(context) { +class RatingAdapter( + context: Context, + private val mEntrance: String, + private val mListViewModel: NormalListViewModel +) : ListAdapter(context) { override fun getItemViewType(position: Int): Int { return if (position == itemCount - 1) { @@ -52,12 +54,13 @@ class RatingAdapter(context: Context, val entity = mEntityList[holder.adapterPosition] holder.binding.entity = entity.transformHistoryEntity() holder.binding.userCommand.text = (mContext.getString( - R.string.personal_home_rating_command, - NewsUtils.getFormattedTime(entity.time), - entity.game.name)).fromHtml() + R.string.personal_home_rating_command, + NewsUtils.getFormattedTime(entity.time), + entity.game.name + )).fromHtml() holder.binding.content.setTextWithHighlightedTextWrappedInsideWrapper(text = entity.content, copyClickedText = true) holder.itemView.setOnClickListener { - GameDetailActivity.startGameDetailCommentActivity(mContext, entity.game.id, mEntrance) + GameDetailActivity.startGameDetailActivity(mContext, entity.game.id, mEntrance, isSkipGameComment = true) } } is FooterViewHolder -> { diff --git a/app/src/main/java/com/gh/gamecenter/qa/editor/OnLinkClickListener.kt b/app/src/main/java/com/gh/gamecenter/qa/editor/OnLinkClickListener.kt index ad169d2a6d..283e16f619 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/editor/OnLinkClickListener.kt +++ b/app/src/main/java/com/gh/gamecenter/qa/editor/OnLinkClickListener.kt @@ -54,7 +54,7 @@ class OnLinkClickListener( "game" -> { GameDetailActivity.startGameDetailActivity( context, - insertEntity.id, + insertEntity.id ?: "", BaseActivity.mergeEntranceAndPath(entrance, "$path-链接") ) } diff --git a/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java b/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java index e4801a75e4..5c85c0295c 100644 --- a/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java +++ b/app/src/main/java/com/gh/gamecenter/qa/select/VotingFragment.java @@ -72,7 +72,7 @@ public class VotingFragment extends ListFragment(context), IExposable { +class SearchGameIndexAdapter( + context: Context, + val fragment: SearchGameIndexFragment, + val entrance: String, + val type: String +) : ListAdapter(context), IExposable { private val dao = SearchHistoryDao(mContext) private var exposureEventArray: SparseArray? = null @@ -141,7 +143,7 @@ class SearchGameIndexAdapter(context: Context, val screenWidth = mContext.resources.displayMetrics.widthPixels val tagWidth = (screenWidth - (16F * 2 + 8F * 3).dip2px()) / 4 tagContainer.removeAllViews() - run outside@ { + run outside@{ gameEntity.contentTag!!.custom.forEach { val customView = getContentTagView( -1, @@ -190,7 +192,7 @@ class SearchGameIndexAdapter(context: Context, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_TRENDES, exposureEvent + ), GameDetailFragment.INDEX_TRENDES, traceEvent = exposureEvent ) gameEntity.run { @@ -218,12 +220,12 @@ class SearchGameIndexAdapter(context: Context, if (tagContainer.childCount == 3) 0 else 8F.dip2px() ) { dao.add(key) - GameDetailActivity.startGameDetailActivityToLibao( + GameDetailActivity.startGameDetailActivity( mContext, gameEntity, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), exposureEvent + ), scrollToLibao = true, traceEvent = exposureEvent ) gameEntity.run { @@ -256,7 +258,7 @@ class SearchGameIndexAdapter(context: Context, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_BBS, exposureEvent + ), GameDetailFragment.INDEX_BBS, traceEvent = exposureEvent ) gameEntity.run { @@ -284,12 +286,12 @@ class SearchGameIndexAdapter(context: Context, if (tagContainer.childCount == 3) 0 else 8F.dip2px() ) { dao.add(key) - GameDetailActivity.startGameDetailActivityToServer( + GameDetailActivity.startGameDetailActivity( mContext, gameEntity, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), exposureEvent + ), scrollToServer = true, traceEvent = exposureEvent ) gameEntity.run { @@ -319,7 +321,7 @@ class SearchGameIndexAdapter(context: Context, } if (SearchType.fromString(type) == SearchType.AUTO) { - // MtaHelper.onEvent("游戏搜索", "自动搜索", key) + // MtaHelper.onEvent("游戏搜索", "自动搜索", key) } GameDetailActivity.startGameDetailActivity( @@ -327,7 +329,7 @@ class SearchGameIndexAdapter(context: Context, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.getAdapterPosition() + 1).toString(), "])" - ), exposureEvent + ), traceEvent = exposureEvent ) dao.add(key) @@ -375,16 +377,16 @@ class SearchGameIndexAdapter(context: Context, binding.gameItemIncluded.downloadBtn.windowToken ) - if (searchMap[gameEntity.id] == null) { - EventBus.getDefault() - .post(EBSearch("search", gameEntity.id, gameEntity.name)) - searchMap[gameEntity.id] = gameEntity.name - } + if (searchMap[gameEntity.id] == null) { + EventBus.getDefault() + .post(EBSearch("search", gameEntity.id, gameEntity.name)) + searchMap[gameEntity.id] = gameEntity.name + } - if (SearchType.fromString(type) == SearchType.AUTO) { - dao.add(key) - // MtaHelper.onEvent("游戏搜索", "自动搜索", key) - } + if (SearchType.fromString(type) == SearchType.AUTO) { + dao.add(key) + // MtaHelper.onEvent("游戏搜索", "自动搜索", key) + } LogUtils.uploadSearchClick( "search_click", @@ -421,7 +423,7 @@ class SearchGameIndexAdapter(context: Context, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", type, "=", (holder.getAdapterPosition() + 1).toString(), "])" - ), exposureEvent + ), traceEvent = exposureEvent ) dao.add(key) 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 cdc0aecaee..209a83e224 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameResultAdapter.kt @@ -36,11 +36,13 @@ import com.lightgame.utils.Util_System_Keyboard import org.greenrobot.eventbus.EventBus import java.util.* -class SearchGameResultAdapter(context: Context, - val fragment: SearchGameResultFragment, - val listViewModel: SearchGameResultViewModel, - val entrance: String, - val type: String) : ListAdapter(context), IExposable { +class SearchGameResultAdapter( + context: Context, + val fragment: SearchGameResultFragment, + val listViewModel: SearchGameResultViewModel, + val entrance: String, + val type: String +) : ListAdapter(context), IExposable { private var searchMap: ArrayMap = ArrayMap() private var exposureEventArray: SparseArray? = null @@ -190,9 +192,11 @@ class SearchGameResultAdapter(context: Context, exposureSources.add(ExposureSource("首页搜索", "")) // ~~曝光去掉搜索关键字避免出现很多路径附带~~ #734 又恢复了 exposureSources.add(ExposureSource(SearchType.fromString(type).toChinese(), key)) - val exposureEvent = ExposureEvent.createEvent(gameEntity, - exposureSources, null, - ExposureType.EXPOSURE) + val exposureEvent = ExposureEvent.createEvent( + gameEntity, + exposureSources, null, + ExposureType.EXPOSURE + ) exposureEventArray!!.put(holder.adapterPosition, exposureEvent) binding.run { @@ -209,7 +213,7 @@ class SearchGameResultAdapter(context: Context, val screenWidth = mContext.resources.displayMetrics.widthPixels val tagWidth = (screenWidth - (16F * 2 + 8F * 3).dip2px()) / 4 tagContainer.removeAllViews() - run outside@ { + run outside@{ gameEntity.contentTag!!.custom.forEach { val customView = getContentTagView( -1, @@ -256,7 +260,7 @@ class SearchGameResultAdapter(context: Context, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_TRENDES, exposureEvent + ), GameDetailFragment.INDEX_TRENDES, traceEvent = exposureEvent ) gameEntity.run { @@ -283,12 +287,12 @@ class SearchGameResultAdapter(context: Context, tagWidth, if (tagContainer.childCount == 3) 0 else 8F.dip2px() ) { - GameDetailActivity.startGameDetailActivityToLibao( + GameDetailActivity.startGameDetailActivity( mContext, gameEntity, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), exposureEvent + ), scrollToLibao = true, traceEvent = exposureEvent ) gameEntity.run { @@ -320,7 +324,7 @@ class SearchGameResultAdapter(context: Context, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), GameDetailFragment.INDEX_BBS, exposureEvent + ), GameDetailFragment.INDEX_BBS, traceEvent = exposureEvent ) gameEntity.run { @@ -347,12 +351,12 @@ class SearchGameResultAdapter(context: Context, tagWidth, if (tagContainer.childCount == 3) 0 else 8F.dip2px() ) { - GameDetailActivity.startGameDetailActivityToServer( + GameDetailActivity.startGameDetailActivity( mContext, gameEntity, StringUtils.buildString( entrance, "+(搜索-列表[", key, "=", "$type=", (holder.adapterPosition + 1).toString(), "])" - ), exposureEvent + ), scrollToServer = true, traceEvent = exposureEvent ) gameEntity.run { @@ -383,20 +387,25 @@ class SearchGameResultAdapter(context: Context, EventBus.getDefault().post(EBSearch("click", gameEntity.id, gameEntity.name)) } - GameDetailActivity.startGameDetailActivity(mContext, gameEntity, - StringUtils.buildString(entrance, "+(搜索-列表[", key, "=", type, "=", - (holder.adapterPosition + 1).toString(), "])"), - exposureEvent) + GameDetailActivity.startGameDetailActivity( + mContext, gameEntity, + StringUtils.buildString( + entrance, "+(搜索-列表[", key, "=", type, "=", + (holder.adapterPosition + 1).toString(), "])" + ), + traceEvent = exposureEvent + ) // mDao.add(gameEntity.nameWithoutSuffix) LogUtils.uploadSearchClick( - "search_click", - "搜索页", - key, - SearchType.fromString(type).toChinese(), - gameEntity.id, - gameEntity.name, - gameEntity.shouldUseMirrorInfo()) + "search_click", + "搜索页", + key, + SearchType.fromString(type).toChinese(), + gameEntity.id, + gameEntity.name, + gameEntity.shouldUseMirrorInfo() + ) if (SearchType.fromString(type) == SearchType.AUTO) { // MtaHelper.onEvent("游戏搜索", "自动搜索", key) @@ -429,13 +438,14 @@ class SearchGameResultAdapter(context: Context, } LogUtils.uploadSearchClick( - "search_click", - "搜索页", - key, - SearchType.fromString(type).toChinese(), - gameEntity.id, - gameEntity.name, - gameEntity.shouldUseMirrorInfo()) + "search_click", + "搜索页", + key, + SearchType.fromString(type).toChinese(), + gameEntity.id, + gameEntity.name, + gameEntity.shouldUseMirrorInfo() + ) if (SearchType.fromString(type) == SearchType.AUTO) { // MtaHelper.onEvent("游戏搜索", "自动搜索", key) diff --git a/app/src/main/java/com/gh/gamecenter/servers/GameServersContentAdapter.kt b/app/src/main/java/com/gh/gamecenter/servers/GameServersContentAdapter.kt index 6ca62bc0a3..72e53a7faa 100644 --- a/app/src/main/java/com/gh/gamecenter/servers/GameServersContentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/servers/GameServersContentAdapter.kt @@ -319,13 +319,13 @@ class GameServersContentAdapter(context: Context, GameDetailActivity.startGameDetailActivity(mContext, gameEntity, StringUtils.buildString(mEntrance, "+(开服表[", viewHolder.adapterPosition.toString(), "])"), - mExposureEventArray.get(viewHolder.adapterPosition)) + traceEvent = mExposureEventArray.get(viewHolder.adapterPosition)) } } else { viewHolder.itemView.setOnClickListener { GameDetailActivity.startGameDetailActivity(mContext, gameEntity, StringUtils.buildString(mEntrance, "+(开服表[", viewHolder.adapterPosition.toString(), "])"), - mExposureEventArray.get(viewHolder.adapterPosition)) + traceEvent = mExposureEventArray.get(viewHolder.adapterPosition)) } } } diff --git a/app/src/main/java/com/gh/gamecenter/servers/GameServersTestAdapter.kt b/app/src/main/java/com/gh/gamecenter/servers/GameServersTestAdapter.kt index b2d57512eb..f41b169f14 100644 --- a/app/src/main/java/com/gh/gamecenter/servers/GameServersTestAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/servers/GameServersTestAdapter.kt @@ -122,7 +122,7 @@ class GameServersTestAdapter(context: Context, viewHolder.itemView.setOnClickListener { GameDetailActivity.startGameDetailActivity(mContext, gameEntity, StringUtils.buildString(mEntrance, "+(开服表[", viewHolder.adapterPosition.toString(), "])"), - mExposureEventArray[viewHolder.adapterPosition]) + traceEvent = mExposureEventArray[viewHolder.adapterPosition]) } } diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt b/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt index d9b82e59d1..7f63c8935f 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectAdapter.kt @@ -208,7 +208,7 @@ class SubjectAdapter(context: Context, if (subjectData.sort.contains("publish")) "最新" else "最热", "=", (humanReadablePosition).toString(), "])"), - exposureEvent) + traceEvent = exposureEvent) } DownloadItemUtils.setOnClickListener( diff --git a/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt b/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt index 3c6ce9f5f6..71d504e096 100644 --- a/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/tag/TagsListAdapter.kt @@ -95,7 +95,7 @@ class TagsListAdapter(context: Context, mExposureEventSparseArray.append(position, exposureEvent) holder.itemView.setOnClickListener { - GameDetailActivity.startGameDetailActivity(mContext, gameEntity, mEntrance, exposureEvent) + GameDetailActivity.startGameDetailActivity(mContext, gameEntity, mEntrance ?: "", traceEvent = exposureEvent) } DownloadItemUtils.setOnClickListener(mContext, holder.binding.downloadBtn, diff --git a/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernAdapter.java b/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernAdapter.java index 91fc4c071a..45f4e7cd09 100644 --- a/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernAdapter.java +++ b/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernAdapter.java @@ -100,7 +100,7 @@ class MyConcernAdapter extends BaseRecyclerAdapter { public void onBindViewHolder(final ConcernViewHolder holder, int position) { final GameEntity gameEntity = mConcernGameList.get(position); - if (position == getItemCount() -1) { + if (position == getItemCount() - 1) { holder.itemView.setPadding( 0, DisplayUtils.dip2px(16F), 0, DisplayUtils.dip2px(16F)); @@ -161,7 +161,7 @@ class MyConcernAdapter extends BaseRecyclerAdapter { DataCollectionUtils.uploadClick(mContext, "列表", "我的关注", gameEntity1.getName()); - GameDetailActivity.startGameDetailActivity(mContext, gameEntity1, StringUtils.buildString(mEntrance, "+(我的关注-列表)")); + GameDetailActivity.startGameDetailActivity(mContext, gameEntity1, StringUtils.buildString(mEntrance, "+(我的关注-列表)"), null); } }); } diff --git a/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernRecommendAdapter.java b/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernRecommendAdapter.java index 481d847a70..bd6e046eb1 100644 --- a/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernRecommendAdapter.java +++ b/app/src/main/java/com/halo/assistant/fragment/myconcern/MyConcernRecommendAdapter.java @@ -163,7 +163,7 @@ public class MyConcernRecommendAdapter extends BaseRecyclerAdapter