Files
assistant-android/app/src/main/java/com/gh/gamecenter/GameDetailActivity.kt

281 lines
10 KiB
Kotlin

package com.gh.gamecenter
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.os.Bundle
import android.view.View
import com.gh.base.DownloadToolbarActivity
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.gamecenter.common.constant.Constants
import com.gh.gamecenter.common.constant.EntranceConsts
import com.gh.gamecenter.core.utils.DisplayUtils
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 : DownloadToolbarActivity() {
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<String, String> {
val fragment = targetFragment as GameDetailFragment
return if (fragment.arguments != null) {
Pair(fragment.requireArguments().getString(EntranceConsts.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)
}
})
}
override fun isAutoResetViewBackgroundEnabled(): Boolean = true
override fun updateStaticViewBackground(view: View?) {
updateStaticView(
view,
listOf(R.id.menu_download_iv, R.id.gameBigEvent, R.id.cardContainer, R.id.iv_reserve, R.id.iv_concern)
)
}
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
) {
val bundle = Bundle()
if (traceEvent != null) {
val clickEvent = createEvent(gameEntity, traceEvent.source, appendTrace(traceEvent), ExposureType.CLICK)
log(clickEvent)
bundle.putParcelable(EntranceConsts.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(EntranceConsts.KEY_TARGET, defaultTab)
}
if (isSkipGameComment) {
bundle.putBoolean(EntranceConsts.KEY_SKIP_GAME_COMMENT, true)
}
if (scrollToLibao) {
bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_DESC)
bundle.putBoolean(EntranceConsts.KEY_SCROLL_TO_LIBAO, true)
}
if (scrollToServer) {
bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_DESC)
bundle.putBoolean(EntranceConsts.KEY_SCROLL_TO_SERVER, true)
}
bundle.putString(EntranceConsts.KEY_GAMEID, gameEntity?.id)
bundle.putString(EntranceConsts.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)
}
@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
) {
startGameDetailActivity(
context,
gameId,
entrance,
defaultTab,
isSkipGameComment,
scrollToLibao,
openVideoStreaming,
openPlatformWindow,
null,
null,
traceEvent
)
}
/**
* @param gameId 游戏Id
* @param defaultTab 默认定位到哪个tab
* @param isSkipGameComment 是否跳转到评论tab
* @param scrollToLibao 滚动到礼包区域
* @param openVideoStreaming 是否打开视频流
* @param openPlatformWindow 打开多版本下载弹窗
* @param platformName 平台名称
* @param packageName 包名
* @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,
platformName: String? = null,
packageName: String? = null,
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(EntranceConsts.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(EntranceConsts.KEY_TARGET, defaultTab)
}
if (isSkipGameComment) {
bundle.putBoolean(EntranceConsts.KEY_SKIP_GAME_COMMENT, true)
}
if (openVideoStreaming) {
bundle.putBoolean(EntranceConsts.KEY_OPEN_VIDEO_STREAMING, true)
bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_DESC)
}
if (openPlatformWindow) {
bundle.putBoolean(EntranceConsts.KEY_OPEN_PLATFORM_WINDOW, true)
if (!platformName.isNullOrEmpty()) {
bundle.putString(EntranceConsts.KEY_PLATFORM, platformName)
}
if (!packageName.isNullOrEmpty()) {
bundle.putString(EntranceConsts.KEY_PACKAGENAME, packageName)
}
}
if (scrollToLibao) {
bundle.putInt(EntranceConsts.KEY_TARGET, GameDetailFragment.INDEX_TRENDES)
bundle.putBoolean(EntranceConsts.KEY_SCROLL_TO_LIBAO, true)
}
bundle.putString(EntranceConsts.KEY_GAMEID, gameId)
bundle.putString(EntranceConsts.KEY_ENTRANCE, entrance)
context.startActivity(
getTargetIntent(
context,
GameDetailActivity::class.java,
GameDetailFragment::class.java,
bundle
)
)
}
}
}