[3.3.0][魔方] 添加埋点
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user