62 lines
1.9 KiB
Kotlin
62 lines
1.9 KiB
Kotlin
package com.gh.common.dialog
|
|
|
|
import android.content.DialogInterface
|
|
import android.os.Bundle
|
|
import android.view.KeyEvent
|
|
import android.view.View
|
|
import com.gh.common.util.MtaHelper
|
|
import com.lightgame.dialog.BaseDialogFragment
|
|
import java.util.concurrent.atomic.AtomicBoolean
|
|
|
|
/**
|
|
* 对 dialog 操作进行 MTA 事件记录的 dialog fragment
|
|
*/
|
|
abstract class BaseTrackableDialogFragment : BaseDialogFragment() {
|
|
|
|
abstract fun getEvent(): String
|
|
abstract fun getKey(): String
|
|
|
|
// 区分此 dialog 是点击 dialog 外部取消的还是点击返回取消的
|
|
private val mIsCanceledByClickOutsideOfDialog = AtomicBoolean(true)
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
if (getEvent().isEmpty()) {
|
|
throw IllegalStateException("需要提供非空的 Event 来供 MTA 进行事件记录")
|
|
}
|
|
|
|
if (getKey().isEmpty()) {
|
|
throw IllegalStateException("需要提供非空的 Key 来供 MTA 进行事件记录")
|
|
}
|
|
|
|
onEvent("出现弹窗")
|
|
|
|
dialog?.setCanceledOnTouchOutside(true)
|
|
dialog?.setOnKeyListener { _, keyCode, event ->
|
|
if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) {
|
|
mIsCanceledByClickOutsideOfDialog.set(false)
|
|
onEvent("点击返回")
|
|
}
|
|
false
|
|
}
|
|
}
|
|
|
|
fun onEvent(value: String) {
|
|
if (trackWithBasicDeviceInfo()) {
|
|
MtaHelper.onEventWithBasicDeviceInfo(getEvent(), getKey(), value)
|
|
} else {
|
|
MtaHelper.onEvent(getEvent(), getKey(), value)
|
|
}
|
|
}
|
|
|
|
override fun onCancel(dialog: DialogInterface) {
|
|
super.onCancel(dialog)
|
|
if (mIsCanceledByClickOutsideOfDialog.get()) {
|
|
onEvent("点击空白")
|
|
}
|
|
}
|
|
|
|
open fun trackWithBasicDeviceInfo() = false
|
|
|
|
} |