From fef4f93d6103393960e273d701532b49bb57c3e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 30 Sep 2021 22:15:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=95=BF=E6=8C=89=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=A9=BE=E9=A9=B6=E6=8C=89=E9=92=AE=E8=BF=9B=E5=85=A5?= =?UTF-8?q?DebugSetting=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 董宏宇 --- .idea/misc.xml | 1 + .../core/function/hmi/ui/MoGoHmiFragment.kt | 48 +++++++++++++++++-- .../hmi/ui/setting/DebugSettingView.kt | 47 ++++++++++++++++-- .../src/main/res/layout/fragment_hmi.xml | 4 +- .../main/res/layout/view_debug_setting.xml | 40 ++++++++++++++++ .../obu/mogo/MogoPrivateObuManager.kt | 12 ++--- .../call/obu/CallerObuListenerManager.kt | 33 ++++++++++--- 7 files changed, 163 insertions(+), 22 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml 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 {