[3.3.0][魔方] 添加埋点

This commit is contained in:
renwj
2023-06-24 14:30:25 +08:00
parent 5bc7634ea3
commit 7c5ee81d56
7 changed files with 134 additions and 10 deletions

View File

@@ -218,7 +218,7 @@ ext {
weak_network : "com.mogo.weak:network:1.0.0",
mofang_runtime : "com.mogo.eagle.core.mofang:runtime:1.0.0"
mofang_runtime : "com.mogo.eagle.mofang.core:runtime:1.0.0"
]
android = [
launcherApplicationId : "com.mogo.launcher",

View File

@@ -0,0 +1,47 @@
package com.zhjt.mogo_core_function_devatools.mofang
import android.os.Handler
import android.os.HandlerThread
import android.os.Process
import com.mogo.commons.utils.*
internal class MoFangAnalyticUtils {
companion object {
// 魔方连接状态
const val EVENT_MOFANG_CONNECT = "event_mofang_connect"
const val EVENT_SUB_START_CONNECT = "event_sub_start_connect"
const val EVENT_SUB_CONNECT_SUCCESS = "event_sub_connect_success"
const val EVENT_SUB_START_DISCONNECT = "event_sub_start_disconnect"
const val EVENT_SUB_DISCONNECT_SUCCESS = "event_sub_disconnect_success"
// 魔方电量
const val EVENT_BATTERY = "event_mofang_battery"
const val EVENT_BATTERY_VALUE = "battery"
// 收到魔方按键指令
const val EVENT_INPUT = "event_mofang_input"
const val EVENT_INPUT_SUB_KEYCODE = "keycode"
const val EVENT_INPUT_SUB_TYPE = "input_type" // 1:单击2:长按, 3:组合键
// 执行魔方按键指令
const val EVENT_EXECUTE = "event_mofang_execute"
const val EVENT_EXECUTE_SUB_KEYCODE = "keycode"
const val EVENT_EXECUTE_SUB_TYPE = "input_type" // 1:单击2:长按, 3:组合键
private val handler by lazy { HandlerThread("mofang-analytic-worker", Process.THREAD_PRIORITY_BACKGROUND).let { it.start(); Handler(it.looper) } }
@JvmStatic
fun track(event: String, params: MutableMap<String, Any>) {
handler.post {
try {
MogoAnalyticUtils.track(event, params)
} catch (t: Throwable) {
t.printStackTrace()
}
}
}
}
}

View File

@@ -5,6 +5,9 @@ import android.util.*
import android.view.KeyEvent
import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.network.utils.GsonUtil
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_EXECUTE
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_EXECUTE_SUB_KEYCODE
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_EXECUTE_SUB_TYPE
internal class MoFangCommandExecutor {
@@ -37,6 +40,7 @@ internal class MoFangCommandExecutor {
val acc = msg.obj as? Double
if (acc != null) {
send = acc != 0.0
MoFangAnalyticUtils.track(EVENT_EXECUTE, mutableMapOf(EVENT_EXECUTE_SUB_KEYCODE to (getKeycodeByWhat(msg.what) ?: ""), EVENT_EXECUTE_SUB_TYPE to (getInputTypeByWhat(msg.what) ?: "")))
linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message, $acc"))
CallerAutoPilotControlManager.sendOperatorSetAcceleratedSpeed(acc)
}
@@ -55,6 +59,7 @@ internal class MoFangCommandExecutor {
return@Callback true
}
val isLeft = msg.arg1 == -1
MoFangAnalyticUtils.track(EVENT_EXECUTE, mutableMapOf(EVENT_EXECUTE_SUB_KEYCODE to (getKeycodeByWhat(msg.what) ?: ""), EVENT_EXECUTE_SUB_TYPE to (getInputTypeByWhat(msg.what) ?: "")))
if (isLeft) {
linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message"))
Log.d(TAG, "--- 左变道执行了 ----")
@@ -74,6 +79,7 @@ internal class MoFangCommandExecutor {
val autoPilotStatusInfo = CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo()
val parameters = autoPilotStatusInfo.autopilotControlParameters
val json = GsonUtil.jsonFromObject(parameters)
MoFangAnalyticUtils.track(EVENT_EXECUTE, mutableMapOf(EVENT_EXECUTE_SUB_KEYCODE to (getKeycodeByWhat(msg.what) ?: ""), EVENT_EXECUTE_SUB_TYPE to (getInputTypeByWhat(msg.what) ?: "")))
linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message, $json"))
Log.d(TAG, "--- 启动自驾 ----入参:$json")
CallerAutoPilotControlManager.startAutoPilot(parameters)
@@ -89,6 +95,7 @@ internal class MoFangCommandExecutor {
if (value != null && value != 0.0) {
send = value != 2.0
Log.d(TAG, "--- 长按鸣笛 ---入参:$value")
MoFangAnalyticUtils.track(EVENT_EXECUTE, mutableMapOf(EVENT_EXECUTE_SUB_KEYCODE to (getKeycodeByWhat(msg.what) ?: ""), EVENT_EXECUTE_SUB_TYPE to (getInputTypeByWhat(msg.what) ?: "")))
linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message, $value"))
CallerAutoPilotControlManager.sendOperatorSetHorn(value)
}
@@ -142,6 +149,39 @@ internal class MoFangCommandExecutor {
}
}
private fun getKeycodeByWhat(what: Int): String? {
return when(what) {
MSG_WHAT_KEY_CODE_A -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_A)
MSG_WHAT_KEY_CODE_B,MSG_WHAT_KEY_CODE_BL -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_B)
MSG_WHAT_KEY_CODE_C -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_C)
MSG_WHAT_KEY_CODE_D -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_D)
MSG_WHAT_KEY_CODE_E, MSG_WHAT_KEY_CODE_EL -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_E)
MSG_WHAT_KEY_CODE_AB -> "${KeyEvent.keyCodeToString(KeyEvent.KEYCODE_A)},${KeyEvent.keyCodeToString(KeyEvent.KEYCODE_B)}"
else -> null
}
}
private fun getInputTypeByWhat(what: Int): String? {
return when(what) {
MSG_WHAT_KEY_CODE_A,
MSG_WHAT_KEY_CODE_B,
MSG_WHAT_KEY_CODE_C,
MSG_WHAT_KEY_CODE_D,
MSG_WHAT_KEY_CODE_E -> {
"1"
}
MSG_WHAT_KEY_CODE_BL,MSG_WHAT_KEY_CODE_EL -> {
"2"
}
MSG_WHAT_KEY_CODE_AB -> {
"3"
}
else -> {
null
}
}
}
fun handleSingleClick(keycode: Int) {
if (keycode == KeyEvent.KEYCODE_A) {

View File

@@ -14,6 +14,16 @@ import com.mogo.eagle.core.function.api.devatools.mofang.*
import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider.OnMoFangStatusListener
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.eagle.core.utilcode.util.Utils
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_BATTERY
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_BATTERY_VALUE
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_INPUT
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_INPUT_SUB_KEYCODE
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_INPUT_SUB_TYPE
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_MOFANG_CONNECT
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_CONNECT_SUCCESS
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_DISCONNECT_SUCCESS
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_START_CONNECT
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_START_DISCONNECT
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicInteger
@@ -57,20 +67,25 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
}
}
override fun onBluetoothStartConnect() {
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_START_CONNECT to "${System.currentTimeMillis()}"))
linkedLog.record(mapOf("connect" to "real-start"))
}
override fun connect() {
try {
linkedLog.record(mapOf("connect" to "start"))
linkedLog.record(mapOf("connect" to "[手动触发]:${System.currentTimeMillis()}"))
MoFangManager.connect()
linkedLog.record(mapOf("connect" to "success"))
} catch (t: Throwable) {
t.printStackTrace()
linkedLog.record(mapOf("connect" to "error: ${t.message}"))
linkedLog.record(mapOf("connect" to "[手动触发]:error -> ${t.message}"))
throw t
}
}
override fun disconnect() {
try {
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_START_DISCONNECT to "${System.currentTimeMillis()}"))
linkedLog.record(mapOf("disconnect" to "start"))
MoFangManager.disconnect()
linkedLog.record(mapOf("disconnect" to "success"))
@@ -95,7 +110,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
}
override fun provideWindowCallback(delegate: Callback?): Callback {
val ret = MoFangManager.providerWindowCallback()
val ret = MoFangManager.provideWindowCallback()
ret.setDelegate(delegate)
return ret
}
@@ -110,6 +125,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
override fun onBluetoothBatteryChanged(battery: Int) {
linkedLog.record(mapOf("callback" to "onBluetoothBatteryChanged:$battery"))
MoFangAnalyticUtils.track(EVENT_BATTERY, mutableMapOf(EVENT_BATTERY_VALUE to "$battery"))
if (this.battery.get() != battery) {
UiThreadHandler.post {
listeners.values.forEach {
@@ -127,6 +143,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
} catch (t: Throwable) {
t.printStackTrace()
}
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_CONNECT_SUCCESS to "${System.currentTimeMillis()}"))
UiThreadHandler.post {
listeners.values.forEach {
it.onMoFangConnected()
@@ -141,6 +158,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
} catch (t: Throwable) {
t.printStackTrace()
}
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_DISCONNECT_SUCCESS to "${System.currentTimeMillis()}"))
UiThreadHandler.post {
listeners.values.forEach {
it.onMoFangDisconnected()
@@ -149,15 +167,17 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
}
override fun onBluetoothKeyBoardCombineClicked(vararg keyCodes: Int) {
val keycodesText = keyCodes.joinToString(",") { KeyEvent.keyCodeToString(it) }
if (isTest.get()) {
toast.get()?.cancel()
Toast.makeText(Utils.getApp(), "组合键[${keyCodes.joinToString(",") { KeyEvent.keyCodeToString(it) }}]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
Toast.makeText(Utils.getApp(), "组合键[$keycodesText]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
toast.set(it)
}.show()
return
}
try {
linkedLog.record(mapOf("command" to "combine_clicked: ${keyCodes.joinToString(",") { KeyEvent.keyCodeToString(it) } }"))
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keycodesText, EVENT_INPUT_SUB_TYPE to "3"))
linkedLog.record(mapOf("command" to "combine_clicked: $keycodesText"))
executor.handleCombineClick(*keyCodes)
} finally {
UiThreadHandler.post { listeners.values.forEach {
@@ -175,6 +195,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
return
}
try {
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keyCode.toString(), EVENT_INPUT_SUB_TYPE to "2"))
linkedLog.record(mapOf("command" to "long_clicked: ${ KeyEvent.keyCodeToString(keyCode) }"))
executor.handleLongClick(keyCode)
} finally {
@@ -187,15 +208,17 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
}
override fun onBluetoothKeyboardClicked(keyCode: Int) {
val keycodeText = KeyEvent.keyCodeToString(keyCode)
if (isTest.get()) {
toast.get()?.cancel()
Toast.makeText(Utils.getApp(), "单击键[${KeyEvent.keyCodeToString(keyCode)}]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
Toast.makeText(Utils.getApp(), "单击键[$keycodeText]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
toast.set(it)
}.show()
return
}
try {
linkedLog.record(mapOf("command" to "clicked: ${ KeyEvent.keyCodeToString(keyCode) }"))
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keyCode.toString(), EVENT_INPUT_SUB_TYPE to "1"))
linkedLog.record(mapOf("command" to "clicked: $keycodeText"))
executor.handleSingleClick(keyCode)
} finally {
UiThreadHandler.post {

View File

@@ -58,7 +58,7 @@
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:enabled="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop"
android:launchMode="singleTask"
android:resizeableActivity="false"
android:resumeWhilePausing="true"
android:screenOrientation="${SCREEN_ORIENTATION}"

View File

@@ -7,6 +7,7 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_MAIN;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Process;
@@ -14,6 +15,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.launcher.ARouter;
@@ -200,6 +202,12 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
super.onBackPressed();
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, " --- onConfigurationChanged --");
}
@Override
public void onSkinModeChange(int skinMode) {
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dip"/>
<stroke android:color="@color/black" android:width="0.5dp"/>
</shape>