[dev_opt_2.15.0]BadCase添加埋点统计上报
This commit is contained in:
@@ -82,6 +82,7 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
moFangManager.init(mContext!!)
|
||||
bindingCarManager.init(mContext!!)
|
||||
apmEnvProvider.init(if(DebugConfig.isDebug()) "0" else "1", "${ DebugConfig.getNetMode() }", mDockerVersion ?: "")
|
||||
BadCaseManager.init()
|
||||
}
|
||||
|
||||
override fun checkMonitorDb() {
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
package com.zhjt.mogo_core_function_devatools.badcase
|
||||
|
||||
import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
|
||||
/**
|
||||
* BadCase埋点统计管理
|
||||
*/
|
||||
object BadCaseAnalyticsManager {
|
||||
|
||||
private val bagRecordReceive = "bagrecord_receive" //收到工控机回调时触发(可忽略是否开启美化模式)
|
||||
private val bagRecordUpload = "bagrecord_upload"//点击上报按钮触发
|
||||
|
||||
private val eventParamKey = "key" //Bag包唯一关键字
|
||||
private val eventParamFileName = "fileName" //文件路径
|
||||
private val eventParamReceiveTime = "receiveTime" //时间
|
||||
private val eventParamStat = "stat" //状态record stat:100 - record succeed,auto stop | 101 - record succeed,handle stop | 200 - record failed
|
||||
private val eventParamPlateNumber = "plateNumber" //车牌号
|
||||
private val eventParamTotalDuration = "totalDuration" //Bag包采集时长
|
||||
private val eventParamCarSn = "carSn" //鹰眼SN
|
||||
private val eventParamMapVersion = "mapVersion" //工控机版本
|
||||
private val eventParamEyeVersion = "eyeVersion" //鹰眼版本
|
||||
private val eventParamLatitude = "latitude" //纬度
|
||||
private val eventParamLongitude = "longitude" //经度
|
||||
|
||||
private val eventParamUserRole = "userRole"//采集者角色
|
||||
private val eventParamAudioUrl = "audioUrl" //音频地址
|
||||
private val eventParamReason = "reason" //采集原因
|
||||
private val eventParamUploadTime = "uploadTime" //上报时间
|
||||
private val eventParamChannel = "channel" //渠道
|
||||
|
||||
/**
|
||||
* 收到工控机回调时埋点
|
||||
* @param key Bag包唯一关键字
|
||||
* @param fileName 文件路径
|
||||
* @param receiveTime 时间
|
||||
* @param stat 状态record
|
||||
* @param plateNumber 车牌号
|
||||
* @param totalDuration Bag包采集时长
|
||||
* @param carSn 鹰眼SN
|
||||
* @param mapVersion 工控机版本
|
||||
* @param eyeVersion 鹰眼版本
|
||||
* @param latitude 纬度
|
||||
* @param longitude 经度
|
||||
*/
|
||||
fun bagRecordReceive(key: String,fileName: String,receiveTime: String,stat: String,plateNumber: String
|
||||
,totalDuration: String,carSn: String,mapVersion: String
|
||||
,eyeVersion: String,latitude: String,longitude: String){
|
||||
val receiverParams = HashMap<String,Any>()
|
||||
receiverParams[eventParamKey] = key
|
||||
receiverParams[eventParamFileName] = fileName
|
||||
receiverParams[eventParamReceiveTime] = receiveTime
|
||||
receiverParams[eventParamStat] = stat
|
||||
receiverParams[eventParamPlateNumber] = plateNumber
|
||||
receiverParams[eventParamTotalDuration] = totalDuration
|
||||
receiverParams[eventParamCarSn] = carSn
|
||||
receiverParams[eventParamMapVersion] = mapVersion
|
||||
receiverParams[eventParamEyeVersion] = eyeVersion
|
||||
receiverParams[eventParamLatitude] = latitude
|
||||
receiverParams[eventParamLongitude] = longitude
|
||||
MogoAnalyticUtils.track(bagRecordReceive,receiverParams)
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击上报按钮触发埋点
|
||||
* @param key Bag包唯一关键字
|
||||
* @param fileName 文件路径
|
||||
* @param receiveTime 时间
|
||||
* @param stat 状态record
|
||||
* @param plateNumber 车牌号
|
||||
* @param totalDuration Bag包采集时长
|
||||
* @param carSn 鹰眼SN
|
||||
* @param mapVersion 工控机版本
|
||||
* @param eyeVersion 鹰眼版本
|
||||
* @param latitude 纬度
|
||||
* @param longitude 经度
|
||||
* @param userRole 采集者角色
|
||||
* @param audioUrl 音频地址
|
||||
* @param reason 采集原因
|
||||
* @param uploadTime 上报时间
|
||||
* @param channel 渠道
|
||||
*/
|
||||
fun bagRecordUpload(key: String,fileName: String,receiveTime: String,stat: String,plateNumber: String
|
||||
,totalDuration: String,carSn: String,mapVersion: String
|
||||
,eyeVersion: String,latitude: String,longitude: String
|
||||
,userRole: String,audioUrl: String,reason: String,uploadTime: String,channel: String){
|
||||
val uploadParams = HashMap<String,Any>()
|
||||
uploadParams[eventParamKey] = key
|
||||
uploadParams[eventParamFileName] = fileName
|
||||
uploadParams[eventParamReceiveTime] = receiveTime
|
||||
uploadParams[eventParamStat] = stat
|
||||
uploadParams[eventParamPlateNumber] = plateNumber
|
||||
uploadParams[eventParamTotalDuration] = totalDuration
|
||||
uploadParams[eventParamCarSn] = carSn
|
||||
uploadParams[eventParamMapVersion] = mapVersion
|
||||
uploadParams[eventParamEyeVersion] = eyeVersion
|
||||
uploadParams[eventParamLatitude] = latitude
|
||||
uploadParams[eventParamLongitude] = longitude
|
||||
uploadParams[eventParamUserRole] = userRole
|
||||
uploadParams[eventParamAudioUrl] = audioUrl
|
||||
uploadParams[eventParamReason] = reason
|
||||
uploadParams[eventParamUploadTime] = uploadTime
|
||||
uploadParams[eventParamChannel] = channel
|
||||
MogoAnalyticUtils.track(bagRecordUpload,uploadParams)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,12 +11,17 @@ import androidx.lifecycle.LifecycleCoroutineScope
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
import com.mogo.eagle.core.utilcode.kotlin.lifecycleOwner
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
@@ -35,50 +40,25 @@ import record_cache.RecordPanelOuterClass
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener {
|
||||
internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener,
|
||||
IMoGoChassisLocationWGS84Listener {
|
||||
|
||||
const val TAG = "BadCase"
|
||||
|
||||
/**
|
||||
* 超过此时间,case入口自动消失
|
||||
*/
|
||||
|
||||
private val CASE_EXPIRE_DURATION: Long =
|
||||
TimeUnit.HOURS.toMillis(4)/* TimeUnit.SECONDS.toMillis(10) */
|
||||
|
||||
private var hideFloat: (() -> Unit)? = null
|
||||
|
||||
@Volatile
|
||||
private var record: AutoPilotRecord? = null
|
||||
|
||||
@Volatile
|
||||
private var viewHolder: WeakReference<View>? = null
|
||||
private var longitude: Double = 0.0
|
||||
private var latitude: Double?= 0.0
|
||||
|
||||
@Volatile
|
||||
private var dismissJob: Job? = null
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
private var channel: Channel<AutoPilotRecord> = Channel(Channel.RENDEZVOUS)
|
||||
get() = if (field.isClosedForReceive || field.isClosedForSend) {
|
||||
field = Channel(Channel.RENDEZVOUS)
|
||||
field
|
||||
} else {
|
||||
field
|
||||
}
|
||||
|
||||
private val presenter by lazy {
|
||||
BadCasePresenter()
|
||||
fun init(){
|
||||
CallerAutopilotRecordListenerManager.addListener(TAG, this)
|
||||
// 添加 ADAS车辆状态&定位 监听
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
|
||||
}
|
||||
|
||||
@Volatile
|
||||
private var scope: LifecycleCoroutineScope? = null
|
||||
get() = if (field == null) {
|
||||
field = viewHolder?.get()?.lifecycleOwner?.lifecycleScope
|
||||
field
|
||||
} else {
|
||||
field
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示BadCase配置页面
|
||||
*/
|
||||
@@ -120,8 +100,6 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
* 主动采集BadCase
|
||||
*/
|
||||
fun initBadCase(view: View) {
|
||||
CallerAutopilotRecordListenerManager.addListener(TAG, this)
|
||||
|
||||
val activity = view.context as? FragmentActivity
|
||||
?: throw IllegalStateException("please ensure context is FragmentActivity.")
|
||||
view.setOnClickListener {
|
||||
@@ -268,6 +246,17 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
)
|
||||
)
|
||||
)
|
||||
//埋点统计
|
||||
BadCaseAnalyticsManager.bagRecordReceive(recordPanel.key.toString(),recordPanel.filename,
|
||||
System.currentTimeMillis().toString(),recordPanel.stat.toString(),
|
||||
AppConfigInfo.plateNumber,recordPanel.duration.toString(),
|
||||
MoGoAiCloudClientConfig.getInstance().sn,BadCaseConfig.dockerVersion ?:"",
|
||||
AppUtils.getAppVersionName(),latitude.toString(),longitude.toString())
|
||||
//日志埋点
|
||||
CallerLogger.i("$M_DEVA$TAG", "BadCase Receive Analytics="+"key="+recordPanel.key+" filename="+recordPanel.filename+
|
||||
" receiveTime="+System.currentTimeMillis()+" stat="+recordPanel.stat+" plateNumber="+AppConfigInfo.plateNumber+
|
||||
" totalDuration="+recordPanel.duration+" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+latitude+" longitude="+longitude)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -277,4 +266,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
latitude = gnssInfo.latitude
|
||||
longitude = gnssInfo.longitude
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@ import com.zhidao.loglib.call.LogInfoManagerFactory
|
||||
import com.zhidao.loglib.upload.OnUploadListener
|
||||
import com.zhidao.loglib.upload.UploadManager
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
@@ -86,9 +88,11 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
|
||||
private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签
|
||||
@Volatile
|
||||
private var recordKey: String?=null //录制bag包key
|
||||
private var recordKey: Long = 0 //录制bag包key
|
||||
@Volatile
|
||||
private var recordFileName: String?=null //录制文件包名
|
||||
private var receiveTime: String?= null
|
||||
private var uploadStamp: String = System.currentTimeMillis().toString()
|
||||
private var longitude: Double?=null
|
||||
private var latitude: Double?=null
|
||||
|
||||
@@ -290,7 +294,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
itx["carLicense"] = AppConfigInfo.plateNumber?:"" //车牌号
|
||||
itx["filename"] = recordFileName?:"" //bag包文件地址
|
||||
itx["filesize"] = "0" //bag包文件大小
|
||||
itx["key"] = recordKey?:"" //key
|
||||
itx["key"] = recordKey.toString() //key
|
||||
itx["reason"] = uploadReason.toString() //采集原因
|
||||
itx["duration"] = BadCaseConfig.totalDuration.toString() //采集时长,固定为20S
|
||||
itx["startTime"] = System.currentTimeMillis().toString() //上报时间(时间戳格式)
|
||||
@@ -301,7 +305,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本
|
||||
itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本
|
||||
itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标
|
||||
|
||||
})
|
||||
if (uploadResult == null || uploadResult.code != 200) {
|
||||
TipToast.shortTip("上报失败")
|
||||
@@ -312,14 +315,32 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
val hasAudio = downloadUrl != null
|
||||
val descReqEntity = BagDescriptionEntity(uploadReason.toString(),hasAudio,downloadUrl.toString(),true)
|
||||
bagManagerEntity.reqType = 5
|
||||
bagManagerEntity.keyReq = it.toLong()
|
||||
bagManagerEntity.keyReq = it
|
||||
bagManagerEntity.descReq = descReqEntity
|
||||
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
|
||||
}
|
||||
BadCaseAnalyticsManager.bagRecordUpload(recordKey.toString(),recordFileName?:"",uploadStamp,
|
||||
"100",AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
|
||||
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),latitude.toString(),longitude.toString(),
|
||||
BadCaseConfig.identity,downloadUrl?:"",uploadReason.toString(),System.currentTimeMillis().toString(),"1")
|
||||
//日志
|
||||
CallerLogger.i("$M_DEVA$TAG", "BadCase Initiative Analytics="+"key="+recordKey+" filename="+recordFileName+
|
||||
" receiveTime="+uploadStamp+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
|
||||
" totalDuration="+ BadCaseConfig.totalDuration +" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ latitude +" longitude="+ longitude+
|
||||
" identity="+BadCaseConfig.identity + " downloadUrl="+downloadUrl +" uploadReason="+uploadReason+
|
||||
" uploadTime="+System.currentTimeMillis()+" channel="+"1")
|
||||
BadCaseConfig.windowNum--
|
||||
clickListener?.closeWindow()
|
||||
}
|
||||
}
|
||||
//主动上报埋点统计
|
||||
if(receiveTime!=null){
|
||||
try {
|
||||
uploadStamp=TimeUtils.dateToStamp(receiveTime,"yyyyMMddHHmmss")
|
||||
}catch (e: Exception){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onTouch(v: View?, motionEvent: MotionEvent?): Boolean {
|
||||
@@ -356,11 +377,12 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
mWindowParams!!.y = metrics.heightPixels - BarUtils.getStatusBarHeight()-950
|
||||
mWindowManager!!.addView(mFloatLayout, mWindowParams)
|
||||
//开启录包
|
||||
recordKey = Random(SystemClock.elapsedRealtime()).nextInt().toLong()
|
||||
if(recordCaseEntity!=null){
|
||||
CallerAutoPilotControlManager.recordPackage(recordCaseEntity.caseId,Random(SystemClock.elapsedRealtime()).nextInt(),
|
||||
CallerAutoPilotControlManager.recordPackage(recordCaseEntity.caseId,recordKey.toInt(),
|
||||
BadCaseConfig.totalDuration, BadCaseConfig.previousDuration,recordCaseEntity.topicList)
|
||||
}else{
|
||||
CallerAutoPilotControlManager.recordPackage(BadCaseConfig.type,Random(SystemClock.elapsedRealtime()).nextInt(),
|
||||
CallerAutoPilotControlManager.recordPackage(BadCaseConfig.type,recordKey.toInt(),
|
||||
BadCaseConfig.totalDuration, BadCaseConfig.previousDuration)
|
||||
}
|
||||
}
|
||||
@@ -376,8 +398,9 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
mWindowManager!!.addView(mFloatLayout, mWindowParams)
|
||||
//已经录包无需再次启动录包,只要将录包信息同步到弹窗
|
||||
bagInfoEntity.let {
|
||||
recordKey = it.key.toString()
|
||||
recordKey = it.key
|
||||
recordFileName = it.bagPath
|
||||
receiveTime = it.timestamp
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -394,7 +417,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
CallerLogger.d("${M_DEVA}${TAG}", "-- 收到工控机录制任务回调 -- $recordPanel")
|
||||
ThreadUtils.runOnUiThread {
|
||||
if(recordKey==null){
|
||||
recordKey = recordPanel.key.toString()
|
||||
recordKey = recordPanel.key
|
||||
BadCaseConfig.recordKeyList.add(recordPanel.key)
|
||||
}
|
||||
if(recordFileName==null){
|
||||
|
||||
@@ -40,6 +40,7 @@ import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import com.zhidao.loglib.upload.UploadManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import java.io.File
|
||||
@@ -69,9 +70,11 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
private var uploadReason: String = String() //上报原因,标签
|
||||
private var recordKey: String?=null //录制bag包key
|
||||
private var recordFileName: String?=null //录制文件包名
|
||||
private var receiveTime: String ?= null //接收时间
|
||||
private var stat: String = ""
|
||||
private var boxBean: MsgBoxBean ?= null
|
||||
private var longitude: Double?=null
|
||||
private var latitude: Double?=null
|
||||
private var longitude: Double = 0.0
|
||||
private var latitude: Double = 0.0
|
||||
|
||||
private var mInViewX = 0f
|
||||
private var mInViewY = 0f
|
||||
@@ -250,7 +253,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
private fun upload(downloadUrl: String?){
|
||||
GlobalScope.launch{
|
||||
val uploadResult = presenter.upload(mutableMapOf<String, String>().also { itx ->
|
||||
itx["carLicense"] = AppConfigInfo.plateNumber?:"" //车牌号
|
||||
itx["carLicense"] = AppConfigInfo.plateNumber //车牌号
|
||||
itx["filename"] = recordFileName?:"" //bag包文件地址
|
||||
itx["filesize"] = "0" //bag包文件大小
|
||||
itx["key"] = recordKey?:"" //key
|
||||
@@ -279,10 +282,23 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
bagManagerEntity.descReq = descReqEntity
|
||||
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
|
||||
}
|
||||
//被动上报埋点统计
|
||||
BadCaseAnalyticsManager.bagRecordUpload(recordKey?:"",recordFileName?:"",receiveTime?:System.currentTimeMillis().toString(),
|
||||
stat,AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
|
||||
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),latitude.toString(),longitude.toString(),
|
||||
BadCaseConfig.identity,downloadUrl?:"",uploadReason,System.currentTimeMillis().toString(),"0")
|
||||
//日志
|
||||
CallerLogger.i("$M_DEVA$TAG", "BadCase Passive Analytics="+"key="+recordKey+" filename="+recordFileName+
|
||||
" receiveTime="+receiveTime+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
|
||||
" totalDuration="+ BadCaseConfig.totalDuration +" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
|
||||
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ latitude +" longitude="+ longitude+
|
||||
" identity="+BadCaseConfig.identity + " downloadUrl="+downloadUrl +" uploadReason="+uploadReason+
|
||||
" uploadTime="+System.currentTimeMillis()+" channel="+"0")
|
||||
BadCaseConfig.windowNum--
|
||||
clickListener?.closeWindow()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onTouch(v: View?, motionEvent: MotionEvent?): Boolean {
|
||||
@@ -378,6 +394,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
val recordBagMsg = (msgBoxBean.bean as RecordBagMsg)
|
||||
recordKey = recordBagMsg.key.toString()
|
||||
recordFileName = recordBagMsg.fileName
|
||||
receiveTime = msgBoxBean.timestamp.toString()
|
||||
stat = recordBagMsg.stat.toString()
|
||||
}
|
||||
|
||||
fun setClickListener(clickListener: ClickListener) {
|
||||
|
||||
Reference in New Issue
Block a user