diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5e334d0770..6e35ef9fd2 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -14,6 +14,7 @@
+
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
index 59ac1e30bf..8282a2b0be 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
@@ -8,14 +8,15 @@ import android.view.WindowManager
import android.view.animation.OvershootInterpolator
import com.mogo.commons.mvp.MvpFragment
import com.mogo.commons.voice.AIAssist
-import com.mogo.module.common.enums.EventTypeEnum
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
+import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
+import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.notification.WarningFloat
import com.mogo.eagle.core.function.hmi.notification.anim.DefaultAnimator
import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern
+import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView
import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView
-import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
-import com.mogo.eagle.core.function.hmi.R
+import com.mogo.module.common.enums.EventTypeEnum
import com.mogo.utils.logger.Logger
import kotlinx.android.synthetic.main.fragment_hmi.*
@@ -28,9 +29,48 @@ class MoGoHmiFragment : MvpFragment
MoGoWarningContract.View {
var mWarningFloat: WarningFloat.Builder? = null
+ var mDebugSettingViewFloat: WarningFloat.Builder? = null
override fun initViews() {
- autopilotStatus.visibility = View.VISIBLE
+ autopilotStatus.setOnLongClickListener {
+ activity?.let {
+ val debugSettingView = DebugSettingView(it)
+
+ if (mDebugSettingViewFloat != null) {
+ WarningFloat.dismiss(mDebugSettingViewFloat!!.config.floatTag, false)
+ mDebugSettingViewFloat = null
+ } else {
+ mDebugSettingViewFloat = WarningFloat.with(it)
+ .setTag("DebugSettingView")
+ .setLayout(debugSettingView)
+ .setSidePattern(SidePattern.RIGHT)
+ .setGravity(Gravity.RIGHT, offsetY = 80)
+ .setImmersionStatusBar(true)
+ .setAnimator(object : DefaultAnimator() {
+ override fun enterAnim(
+ view: View,
+ params: WindowManager.LayoutParams,
+ windowManager: WindowManager,
+ sidePattern: SidePattern
+ ): Animator? =
+ super.enterAnim(view, params, windowManager, sidePattern)?.apply {
+ interpolator = OvershootInterpolator()
+ }
+
+ override fun exitAnim(
+ view: View,
+ params: WindowManager.LayoutParams,
+ windowManager: WindowManager,
+ sidePattern: SidePattern
+ ): Animator? =
+ super.exitAnim(view, params, windowManager, sidePattern)
+ ?.setDuration(200)
+ })
+ .show()
+ }
+ }
+ false
+ }
}
override fun getLayoutId(): Int {
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
index e0a97e0c13..21458fc6fc 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt
@@ -1,4 +1,15 @@
-package com.mogo.eagle.core.function.hmi.ui.setting;
+package com.mogo.eagle.core.function.hmi.ui.setting
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.mogo.eagle.core.data.obu.ObuStatusInfo
+import com.mogo.eagle.core.function.api.obu.IMoGoObuStatusListener
+import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager
+import com.mogo.eagle.core.function.hmi.R
+import com.mogo.eagle.core.utilcode.util.GsonUtils
+import kotlinx.android.synthetic.main.view_debug_setting.view.*
/**
* @author xiaoyuzhou
@@ -6,6 +17,36 @@ package com.mogo.eagle.core.function.hmi.ui.setting;
* 调试使用的设置页面,这里制作为调试使用
* 展示 本机、网络、工控机、OBU等状态信息,支持设置IP,等参数进行调试
*/
-public class DebugSettingView {
+class DebugSettingView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoObuStatusListener {
-}
+ private val TAG = "DebugSettingView"
+
+ init {
+ LayoutInflater.from(context).inflate(R.layout.view_debug_setting, this, true)
+ initView()
+ }
+
+ override fun onAttachedToWindow() {
+ super.onAttachedToWindow()
+ CallerObuListenerManager.addListener(TAG, this)
+ }
+
+ override fun onDetachedFromWindow() {
+ super.onDetachedFromWindow()
+ CallerObuListenerManager.removeListener(TAG)
+
+ }
+
+ private fun initView() {
+ tvObuInfo.text = CallerObuListenerManager.getObuStatusInfo()
+ }
+
+ override fun onObuStatusResponse(obuStatusInfo: ObuStatusInfo) {
+ tvObuInfo.text = GsonUtils.toJson(obuStatusInfo)
+ }
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
index 555f7c0390..3aac290c0c 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
@@ -30,10 +30,8 @@
android:layout_height="@dimen/module_mogo_autopilot_status_bg_height"
android:layout_marginTop="@dimen/module_mogo_autopilot_status_margin_top"
android:elevation="@dimen/dp_10"
- android:visibility="gone"
app:layout_constraintLeft_toLeftOf="@+id/flSpeedChartView"
- app:layout_constraintTop_toBottomOf="@+id/flSpeedChartView"
- tools:visibility="visible" />
+ app:layout_constraintTop_toBottomOf="@+id/flSpeedChartView" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt
index b3ec33c8dd..438087d866 100644
--- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt
+++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt
@@ -58,7 +58,7 @@ class MogoPrivateObuManager private constructor() {
override fun onConnected() {
Logger.d(MogoObuConst.TAG_MOGO_OBU, "onConnected ------> ")
mObuStatusInfo.obuStatus = true
- CallerObuListenerManager.invokeCheckAutoPilotBtnListener(mObuStatusInfo)
+ CallerObuListenerManager.invokeListener(mObuStatusInfo)
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", true) }
}
@@ -68,7 +68,7 @@ class MogoPrivateObuManager private constructor() {
mObuStatusInfo.obuStatus = false
mObuStatusInfo.obuHvStatus = false
mObuStatusInfo.obuRvStatus = false
- CallerObuListenerManager.invokeCheckAutoPilotBtnListener(mObuStatusInfo)
+ CallerObuListenerManager.invokeListener(mObuStatusInfo)
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) }
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) }
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) }
@@ -80,7 +80,7 @@ class MogoPrivateObuManager private constructor() {
mObuStatusInfo.obuStatus = false
mObuStatusInfo.obuHvStatus = false
mObuStatusInfo.obuRvStatus = false
- CallerObuListenerManager.invokeCheckAutoPilotBtnListener(mObuStatusInfo)
+ CallerObuListenerManager.invokeListener(mObuStatusInfo)
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU", false) }
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", false) }
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", false) }
@@ -107,14 +107,14 @@ class MogoPrivateObuManager private constructor() {
mObuStatusInfo.appInfo = info.app_info
mObuStatusInfo.hliInfo = info.hli_info
mObuStatusInfo.otherInfo = info.other_info
- CallerObuListenerManager.invokeCheckAutoPilotBtnListener(mObuStatusInfo)
+ CallerObuListenerManager.invokeListener(mObuStatusInfo)
}
// (2) 车辆信息:CVX_HV_INFO_IND
override fun onCvxHvInfoIndInfo(info: CvxHvInfoIndInfo?) {
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_HV", true) }
mObuStatusInfo.obuHvStatus = true
- CallerObuListenerManager.invokeCheckAutoPilotBtnListener(mObuStatusInfo)
+ CallerObuListenerManager.invokeListener(mObuStatusInfo)
Logger.d(MogoObuConst.TAG_MOGO_OBU, "onCvxHvInfoIndInfo ------> $info")
if (info != null && info.basic_info != null && info.basic_info.position != null) {
val movingObjectInfo = info.basic_info
@@ -164,7 +164,7 @@ class MogoPrivateObuManager private constructor() {
override fun onCvxRvInfoIndInfo(info: CvxRvInfoIndInfo) {
Logger.d(MogoObuConst.TAG_MOGO_OBU, "onCvxRvInfoIndInfo ------> $info")
mObuStatusInfo.obuRvStatus = true
- CallerObuListenerManager.invokeCheckAutoPilotBtnListener(mObuStatusInfo)
+ CallerObuListenerManager.invokeListener(mObuStatusInfo)
mContext?.let { SharedPrefsMgr.getInstance(it).putBoolean("OBU_RV", true) }
// 更新数据
TrafficDataConvertUtils.cvxRvInfoIndInfo2TrafficData(info)?.let {
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuListenerManager.kt
index 40dbbda8e1..a62f84a7d2 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuListenerManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/obu/CallerObuListenerManager.kt
@@ -4,6 +4,7 @@ import androidx.annotation.Nullable
import com.mogo.eagle.core.data.obu.ObuStatusInfo
import com.mogo.eagle.core.function.api.obu.IMoGoObuStatusListener
import com.mogo.eagle.core.function.call.base.CallerBase
+import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.LogUtils
/**
@@ -16,15 +17,23 @@ object CallerObuListenerManager : CallerBase() {
// 存储最后一次回调的数据,当有新当位置注册了监听将此数据回调过去,防止有些模块注册顺序问题导致无法获取最新状态
private var mObuStatusInfo: ObuStatusInfo = ObuStatusInfo()
+
// 存储所有注册了监听的对象,invokeXXXX进行遍历回调,将信息同步
private val mObuStatusListeners: HashMap = HashMap()
+ /**
+ * 查询OBU状态
+ */
+ fun getObuStatusInfo(): String {
+ return GsonUtils.toJson(mObuStatusInfo)
+ }
+
/**
* 添加自动驾驶按钮选中监听
* @param tag 标记,用来注销监听使用
* @param listener 监听回调
*/
- fun addCheckAutoPilotBtnListener(
+ fun addListener(
@Nullable tag: String,
@Nullable listener: IMoGoObuStatusListener
) {
@@ -33,18 +42,30 @@ object CallerObuListenerManager : CallerBase() {
}
/**
- * 删除自动驾驶按钮选中监听
+ * 删除 监听
* @param tag 标记,用来注销监听使用
*/
- fun removeCheckAutoPilotBtnListener(@Nullable tag: String) {
+ fun removeListener(@Nullable tag: String) {
mObuStatusListeners.remove(tag)
}
/**
- * 触发自动驾驶按钮选中监听
- * @param isChecked 选中状态
+ * 删除自动驾驶按钮选中监听
+ * @param listener 要删除的监听对象
*/
- fun invokeCheckAutoPilotBtnListener(obuStatusInfo: ObuStatusInfo) {
+ fun removeListener(@Nullable listener: IMoGoObuStatusListener) {
+ mObuStatusListeners.forEach {
+ if (it.value == listener) {
+ mObuStatusListeners.remove(it.key)
+ }
+ }
+ }
+
+ /**
+ * 触发自动驾驶按钮选中监听
+ * @param obuStatusInfo 选中状态
+ */
+ fun invokeListener(obuStatusInfo: ObuStatusInfo) {
LogUtils.dTag(TAG, "isChecked:$obuStatusInfo")
mObuStatusInfo = obuStatusInfo
mObuStatusListeners.forEach {