From 15281b6b766242e1c064da40b7e8bcc0edca6381 Mon Sep 17 00:00:00 2001 From: donghongyu Date: Wed, 16 Mar 2022 12:56:44 +0800 Subject: [PATCH] =?UTF-8?q?[Change]=20=E5=A2=9E=E5=8A=A0CallerHmiManager.I?= =?UTF-8?q?NSTANCE.setProxyNotificationView(view)=E8=AE=BE=E7=BD=AEHMI?= =?UTF-8?q?=E4=B8=ADV2X=E5=BC=B9=E7=AA=97=E9=A2=84=E8=AD=A6=EF=BC=8C?= =?UTF-8?q?=E5=8F=82=E8=80=83V2XNotificationView=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- .../com/mogo/functions/test/ReminderTest.kt | 4 +- .../function/hmi/notification/WarningFloat.kt | 3 +- .../notification/WarningFloatWindowHelper.kt | 2 +- .../notification/WarningNotificationConfig.kt | 46 +++--- .../hmi/notification/anim/DefaultAnimator.kt | 12 +- .../interfaces/OnFloatAnimator.kt | 2 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 153 +++++++++--------- .../hmi/ui/carcorder/CarcorderPreviewView.kt | 2 +- .../hmi/ui/widget/V2XNotificationView.kt | 27 ++-- .../eagle/core/data}/enums/ShowPattern.kt | 2 +- .../eagle/core/data}/enums/SidePattern.kt | 2 +- .../function/api/hmi/IMoGoHmiViewProxy.kt | 9 +- .../api/hmi/view/IViewNotification.kt | 58 +++++++ .../function/call/hmi/CallerHmiManager.kt | 13 +- 14 files changed, 212 insertions(+), 123 deletions(-) rename core/{function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification => mogo-core-data/src/main/java/com/mogo/eagle/core/data}/enums/ShowPattern.kt (83%) rename core/{function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification => mogo-core-data/src/main/java/com/mogo/eagle/core/data}/enums/SidePattern.kt (91%) create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewNotification.kt diff --git a/app/src/androidTest/java/com/mogo/functions/test/ReminderTest.kt b/app/src/androidTest/java/com/mogo/functions/test/ReminderTest.kt index 5cc40a03cc..de9ad31d87 100644 --- a/app/src/androidTest/java/com/mogo/functions/test/ReminderTest.kt +++ b/app/src/androidTest/java/com/mogo/functions/test/ReminderTest.kt @@ -19,8 +19,7 @@ import androidx.test.filters.LargeTest import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener 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.widget.V2XNotificationView +import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.function.main.MainLauncherActivity import com.mogo.eagle.core.utilcode.kotlin.shape import com.mogo.eagle.core.utilcode.reminder.Reminder @@ -28,7 +27,6 @@ import com.mogo.eagle.core.utilcode.reminder.api.impl.ActivityReminder import com.mogo.eagle.core.utilcode.reminder.api.impl.PopupWindowReminder import com.mogo.eagle.core.utilcode.reminder.api.impl.ViewReminder import com.mogo.eagle.core.utilcode.util.AppStateManager -import com.mogo.module.common.enums.EventTypeEnum import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloat.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloat.kt index aa27bd98ee..483800259c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloat.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloat.kt @@ -6,11 +6,10 @@ import android.view.View import androidx.appcompat.view.ContextThemeWrapper import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner -import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern +import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatAnimator import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.reminder.Reminder import com.mogo.eagle.core.utilcode.reminder.api.impl.ViewReminder diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt index 635188dc3a..52dc5887b2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt @@ -12,7 +12,7 @@ import android.view.LayoutInflater import android.view.View import android.view.WindowManager import com.mogo.eagle.core.function.hmi.notification.anim.AnimatorManager -import com.mogo.eagle.core.function.hmi.notification.enums.ShowPattern +import com.mogo.eagle.core.data.enums.ShowPattern import com.mogo.eagle.core.function.hmi.notification.widget.ParentFrameLayout import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningNotificationConfig.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningNotificationConfig.kt index 722c037e3d..51997f5177 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningNotificationConfig.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningNotificationConfig.kt @@ -3,8 +3,8 @@ package com.mogo.eagle.core.function.hmi.notification import android.view.View import android.view.WindowManager import com.mogo.eagle.core.function.hmi.notification.anim.DefaultAnimator -import com.mogo.eagle.core.function.hmi.notification.enums.ShowPattern -import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern +import com.mogo.eagle.core.data.enums.ShowPattern +import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatAnimator import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatCallbacks import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener @@ -16,55 +16,55 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener */ data class WarningNotificationConfig( // 浮窗的xml布局文件 - var layoutId: Int? = null, - var layoutView: View? = null, + var layoutId: Int? = null, + var layoutView: View? = null, // 当前浮窗的tag - var floatTag: String? = null, + var floatTag: String? = null, // 是否正在执行动画 - var isAnim: Boolean = false, + var isAnim: Boolean = false, // 是否显示 - var isShow: Boolean = false, + var isShow: Boolean = false, // 状态栏沉浸 - var immersionStatusBar: Boolean = false, + var immersionStatusBar: Boolean = false, // 浮窗的吸附方式(默认不吸附,拖到哪里是哪里) - var sidePattern: SidePattern = SidePattern.DEFAULT, + var sidePattern: SidePattern = SidePattern.DEFAULT, // 浮窗显示类型(默认只在当前页显示) - var showPattern: ShowPattern = ShowPattern.CURRENT_ACTIVITY, + var showPattern: ShowPattern = ShowPattern.CURRENT_ACTIVITY, // 倒计时关闭window,-1 表示不自动关闭, 单位毫秒。1s = 1000ms - var countDownTime: Long = 0, + var countDownTime: Long = 0, // 浮窗的摆放方式,使用系统的Gravity属性 - var gravity: Int = 0, + var gravity: Int = 0, // 坐标的偏移量 - var offsetPair: Pair = Pair(0, 0), + var offsetPair: Pair = Pair(0, 0), // 固定的初始坐标,左上角坐标 - var locationPair: Pair = Pair(0, 0), + var locationPair: Pair = Pair(0, 0), // ps:优先使用固定坐标,若固定坐标不为原点坐标,gravity属性和offset属性无效 // 四周边界值 - var leftBorder: Int = 0, - var topBorder: Int = -999, - var rightBorder: Int = 9999, - var bottomBorder: Int = 9999, + var leftBorder: Int = 0, + var topBorder: Int = -999, + var rightBorder: Int = 9999, + var bottomBorder: Int = 9999, // 出入动画 - var floatAnimator: OnFloatAnimator? = DefaultAnimator(), + var floatAnimator: OnFloatAnimator? = DefaultAnimator(), // 设置视图状态监听;show,dismiss - var statusListenerMapIMoGo: ArrayList< IMoGoWarningStatusListener> = ArrayList(), + var statusListenerMapIMoGo: ArrayList< IMoGoWarningStatusListener> = ArrayList(), // Callbacks - var callbacks: OnFloatCallbacks? = null, + var callbacks: OnFloatCallbacks? = null, // 窗口宽度 - var width: Int = WindowManager.LayoutParams.WRAP_CONTENT, + var width: Int = WindowManager.LayoutParams.WRAP_CONTENT, // 窗口高度 - var height: Int = WindowManager.LayoutParams.WRAP_CONTENT + var height: Int = WindowManager.LayoutParams.WRAP_CONTENT ) { var isEnqueue: Boolean = false var isOverride: Boolean = true diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/anim/DefaultAnimator.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/anim/DefaultAnimator.kt index 675ed6ddda..d382563d0f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/anim/DefaultAnimator.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/anim/DefaultAnimator.kt @@ -5,7 +5,7 @@ import android.animation.ValueAnimator import android.graphics.Rect import android.view.View import android.view.WindowManager -import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern +import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatAnimator import com.mogo.eagle.core.utilcode.util.WindowUtils import kotlin.math.min @@ -32,11 +32,11 @@ open class DefaultAnimator : OnFloatAnimator { ): Animator? = getAnimator(view, params, windowManager, sidePattern, true) private fun getAnimator( - view: View, - params: WindowManager.LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern, - isExit: Boolean + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern, + isExit: Boolean ): Animator { val triple = initValue(view, params, windowManager, sidePattern) // 退出动画的起始值、终点值,与入场动画相反 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/interfaces/OnFloatAnimator.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/interfaces/OnFloatAnimator.kt index 4568229584..f3f5c43070 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/interfaces/OnFloatAnimator.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/interfaces/OnFloatAnimator.kt @@ -3,7 +3,7 @@ package com.mogo.eagle.core.function.hmi.notification.interfaces import android.animation.Animator import android.view.View import android.view.WindowManager -import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern +import com.mogo.eagle.core.data.enums.SidePattern /** * @author: donghongyu 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 3425c7603f..fcb1237545 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 @@ -15,12 +15,14 @@ import com.mogo.eagle.core.data.autopilot.AdUpgradeStateHelper import com.mogo.eagle.core.data.camera.CameraEntity import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.constants.MoGoFragmentPaths +import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity +import com.mogo.eagle.core.function.api.hmi.view.IViewNotification import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener @@ -33,7 +35,6 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.WaringConst 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.camera.CameraListView import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView import com.mogo.eagle.core.function.hmi.ui.notice.NoticeNormalBannerView @@ -91,6 +92,8 @@ class MoGoHmiFragment : MvpFragment private var mViewTrafficLight: IViewTrafficLight? = null // 限速 View代理 private var mViewLimitingVelocity: IViewLimitingVelocity? = null + // V2X预警弹窗 View 代理 + private var mViewNotification: IViewNotification? = null override fun vipIdentification(visible: Boolean) { @@ -140,7 +143,8 @@ class MoGoHmiFragment : MvpFragment // 首次初始化使用默认视图 setProxyTrafficLightView(viewTrafficLightVr) - setLimitingSpeedView(viewLimitingVelocity) + setProxyLimitingSpeedView(viewLimitingVelocity) + setProxyNotificationView(V2XNotificationView(view.context)) } @OptIn(ExperimentalCoroutinesApi::class) @@ -188,11 +192,15 @@ class MoGoHmiFragment : MvpFragment } } + override fun setProxyNotificationView(view: IViewNotification) { + mViewNotification = view + } + override fun setProxyTrafficLightView(view: IViewTrafficLight) { mViewTrafficLight = view } - override fun setLimitingSpeedView(view: IViewLimitingVelocity) { + override fun setProxyLimitingSpeedView(view: IViewLimitingVelocity) { mViewLimitingVelocity = view } @@ -291,17 +299,11 @@ class MoGoHmiFragment : MvpFragment setToolsViewVisibility(View.GONE) } + // 控制 BadCase 按钮展示 if (HmiBuildConfig.isShowBadCaseView) { CallerDevaToolsManager.initBadCase(vsBadCaseToolsView) } - // 控制 限速UI 展示 - if (HmiBuildConfig.isShowLimitingVelocityView) { - showLimitingVelocity(View.VISIBLE) - } else { - showLimitingVelocity(View.GONE) - } - // 控制 红绿灯 展示 if (HmiBuildConfig.isShowTrafficLightView) { setTrafficLightVrVisibility(View.VISIBLE) @@ -309,7 +311,7 @@ class MoGoHmiFragment : MvpFragment setTrafficLightVrVisibility(View.GONE) } - // 控制 切换视角 展示 + // 控制 远程摄像头图标 展示 if (HmiBuildConfig.isShowCameraView) { setCameraViewVisibility(View.VISIBLE) } else { @@ -422,63 +424,65 @@ class MoGoHmiFragment : MvpFragment val floatWindow = mWarningFloat val showTag = floatWindow?.config?.floatTag if (floatWindow == null || TextUtils.isEmpty(showTag) || !floatWindow.isShow() || floatWindow.config.floatTag != tag) { - val notificationView = V2XNotificationView(it) - notificationView.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType.toString())) - val warningContent = alertContent - ?: EventTypeEnum.getWarningContent(v2xType.toString()) - if (warningContent.isEmpty()) { - CallerLogger.e("$M_HMI$TAG", "Show warningContent is null or empty!") - return@launchWhenResumed - } else { - notificationView.setWarningContent(warningContent) - } - if (floatWindow != null && floatWindow.isShow()) { - WarningFloat.dismiss(floatWindow.config.floatTag, true) - } - mWarningFloat = WarningFloat.with(it) - .setTag(tag) - .setLayout(notificationView) - .setSidePattern(SidePattern.RESULT_TOP) - .setCountDownTime(expireTime) - .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) - .setImmersionStatusBar(true) - .isEnqueue(true) - .addWarningStatusListener(listenerIMoGo) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onShow() { - // 创建弹窗成功才进行TTS播报 - CallerLogger.d( - "$M_HMI$TAG", - "mWarningFloat = $mWarningFloat---ttsContent = $ttsContent" - ) - if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) { - CallerLogger.d("$M_HMI$TAG", "---> ttsContent = $ttsContent") - AIAssist.getInstance(activity) - .speakTTSVoice(ttsContent) - } - } - }) - .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() - } + // 代理View初始化了才可以弹窗 + mViewNotification?.let { notificationView-> + notificationView.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType.toString())) + val warningContent = alertContent + ?: EventTypeEnum.getWarningContent(v2xType.toString()) + if (warningContent.isEmpty()) { + CallerLogger.e("$M_HMI$TAG", "Show warningContent is null or empty!") + return@launchWhenResumed + } else { + notificationView.setWarningContent(warningContent) + } + if (floatWindow != null && floatWindow.isShow()) { + WarningFloat.dismiss(floatWindow.config.floatTag, true) + } + mWarningFloat = WarningFloat.with(it) + .setTag(tag) + .setLayout(notificationView) + .setSidePattern(notificationView.sidePattern) + .setCountDownTime(expireTime) + .setGravity(notificationView.layoutGravity, offsetX = notificationView.offsetX, offsetY = notificationView.offsetY) + .setImmersionStatusBar(true) + .isEnqueue(true) + .addWarningStatusListener(listenerIMoGo) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onShow() { + // 创建弹窗成功才进行TTS播报 + CallerLogger.d( + "$M_HMI$TAG", + "mWarningFloat = $mWarningFloat---ttsContent = $ttsContent" + ) + if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) { + CallerLogger.d("$M_HMI$TAG", "---> ttsContent = $ttsContent") + AIAssist.getInstance(activity) + .speakTTSVoice(ttsContent) + } + } + }) + .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() + override fun exitAnim( + view: View, + params: WindowManager.LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .show() + } } else { val notification = floatWindow.config.layoutView as? V2XNotificationView if (alertContent?.isNotEmpty() == true) { @@ -545,12 +549,17 @@ class MoGoHmiFragment : MvpFragment * 控制展示限速标志及内容 */ override fun showLimitingVelocity(limitingSpeed: Int) { - if (limitingSpeed > 0) { - mViewLimitingVelocity?.visibility = View.VISIBLE - mViewLimitingVelocity?.updateLimitingSpeed(limitingSpeed) + // 控制 限速UI 展示 + if (HmiBuildConfig.isShowLimitingVelocityView) { + if (limitingSpeed > 0) { + mViewLimitingVelocity?.visibility = View.VISIBLE + mViewLimitingVelocity?.updateLimitingSpeed(limitingSpeed) + } else { + mViewLimitingVelocity?.visibility = View.INVISIBLE + mViewLimitingVelocity?.updateLimitingSpeed(0) + } } else { - mViewLimitingVelocity?.visibility = View.INVISIBLE - mViewLimitingVelocity?.updateLimitingSpeed(0) + disableLimitingVelocity() } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt index cbd7938af3..5607bdd909 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/carcorder/CarcorderPreviewView.kt @@ -15,7 +15,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger 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.data.enums.SidePattern import com.mogo.usbcamera.UVCCameraHelper import com.serenegiant.usb.ParentPreviewConstraintLayout import com.serenegiant.usb.widget.CameraViewInterface diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XNotificationView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XNotificationView.kt index fa3cc75639..7cb59295d2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XNotificationView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XNotificationView.kt @@ -3,49 +3,58 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context import android.graphics.drawable.Drawable import android.util.AttributeSet +import android.view.Gravity import android.view.LayoutInflater import androidx.annotation.DrawableRes import androidx.annotation.Nullable import androidx.annotation.StringRes -import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.data.enums.SidePattern +import com.mogo.eagle.core.function.api.hmi.view.IViewNotification import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.UiThreadHandler import kotlinx.android.synthetic.main.notification_v2x_msg_vr.view.* /** + * 默认预警弹窗实现 *@author xiaoyuzhou *@date 2021/8/6 12:25 下午 */ class V2XNotificationView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr) { + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : IViewNotification(context, attrs, defStyleAttr) { init { LayoutInflater.from(context).inflate(R.layout.notification_v2x_msg_vr, this, true) + // 设置View的出场位置 + sidePattern = SidePattern.RESULT_TOP + layoutGravity = Gravity.CENTER_HORIZONTAL + // 设置View的停留位置 + offsetX = 0 + offsetY = 110 } - fun setWarningIcon(@DrawableRes warningIcon: Int) { + override fun setWarningIcon(@DrawableRes warningIcon: Int) { UiThreadHandler.post { ivWaringIcon.setImageResource(warningIcon) } } - fun setWarningIcon(@Nullable drawable: Drawable) { + override fun setWarningIcon(@Nullable drawable: Drawable) { UiThreadHandler.post { ivWaringIcon.setImageDrawable(drawable) } } - fun setWarningContent(@Nullable warningContent: CharSequence) { + override fun setWarningContent(@Nullable warningContent: CharSequence) { UiThreadHandler.post { tvWaringContent.text = warningContent } } - fun setWarningContent(@StringRes warningContentId: Int) { + override fun setWarningContent(@StringRes warningContentId: Int) { UiThreadHandler.post { tvWaringContent.setText(warningContentId) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/enums/ShowPattern.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/ShowPattern.kt similarity index 83% rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/enums/ShowPattern.kt rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/ShowPattern.kt index e9f0a88ccd..8f2c45b8d1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/enums/ShowPattern.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/ShowPattern.kt @@ -1,4 +1,4 @@ -package com.mogo.eagle.core.function.hmi.notification.enums +package com.mogo.eagle.core.data.enums /** * @author: donghongyu diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/enums/SidePattern.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/SidePattern.kt similarity index 91% rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/enums/SidePattern.kt rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/SidePattern.kt index 49dcdf5bbf..90aee12dda 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/enums/SidePattern.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/SidePattern.kt @@ -1,4 +1,4 @@ -package com.mogo.eagle.core.function.hmi.notification.enums +package com.mogo.eagle.core.data.enums /** * @author: donghongyu diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/IMoGoHmiViewProxy.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/IMoGoHmiViewProxy.kt index 5dc0f46e49..f07cdfe6df 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/IMoGoHmiViewProxy.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/IMoGoHmiViewProxy.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.api.hmi import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity +import com.mogo.eagle.core.function.api.hmi.view.IViewNotification import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight /** @@ -9,6 +10,12 @@ import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight interface IMoGoHmiViewProxy { + /** + * 设置 V2X预警 代理View + * @param view + */ + fun setProxyNotificationView(view: IViewNotification) + /** * 设置 红绿灯 代理View * @param view @@ -19,5 +26,5 @@ interface IMoGoHmiViewProxy { * 设置 限速 代理View * @param view */ - fun setLimitingSpeedView(view: IViewLimitingVelocity) + fun setProxyLimitingSpeedView(view: IViewLimitingVelocity) } \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewNotification.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewNotification.kt new file mode 100644 index 0000000000..9c9e1ff864 --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/view/IViewNotification.kt @@ -0,0 +1,58 @@ +package com.mogo.eagle.core.function.api.hmi.view + +import android.content.Context +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import android.view.Gravity +import android.widget.LinearLayout +import androidx.annotation.DrawableRes +import androidx.annotation.IntDef +import androidx.annotation.Nullable +import androidx.annotation.StringRes +import com.mogo.eagle.core.data.enums.SidePattern + +/** + * 定义 通知视图 接口 + */ +abstract class IViewNotification(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : + LinearLayout(context, attrs, defStyleAttr) { + + @kotlin.annotation.Retention(AnnotationRetention.SOURCE) + @IntDef(*[ + Gravity.LEFT, Gravity.RIGHT, + Gravity.TOP, Gravity.BOTTOM, + Gravity.START, Gravity.END, + Gravity.CENTER_HORIZONTAL, Gravity.CENTER_VERTICAL, + Gravity.FILL_HORIZONTAL, Gravity.FILL_VERTICAL, + ]) + annotation class GravityFlag + + /** + * 视图布局 + */ + @GravityFlag + open var layoutGravity: Int = Gravity.CENTER_HORIZONTAL + + /** + * 视图动画的出场方式 + */ + open var sidePattern: SidePattern = SidePattern.RESULT_TOP + + /** + * 距离屏幕左上角 0,0点 X 轴距离,单位:px + */ + open var offsetX: Int = 0 + + /** + * 距离屏幕左上角 0,0点 Y 轴距离,单位:px + */ + open var offsetY: Int = 0 + + open fun setWarningIcon(@DrawableRes warningIcon: Int) {} + + open fun setWarningIcon(@Nullable drawable: Drawable) {} + + open fun setWarningContent(@Nullable warningContent: CharSequence) {} + + open fun setWarningContent(@StringRes warningContentId: Int) {} +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index c0888f7624..f17a73c9cd 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -7,6 +7,7 @@ import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity +import com.mogo.eagle.core.function.api.hmi.view.IViewNotification import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener @@ -306,8 +307,16 @@ object CallerHmiManager : CallerBase() { * 设置 限速 代理View * @param view */ - fun setLimitingSpeedView(view: IViewLimitingVelocity) { - waringProviderApi?.setLimitingSpeedView(view) + fun setProxyLimitingSpeedView(view: IViewLimitingVelocity) { + waringProviderApi?.setProxyLimitingSpeedView(view) + } + + /** + * 设置 V2X弹窗预警 代理View + * @param view + */ + fun setProxyNotificationView(view: IViewNotification) { + waringProviderApi?.setProxyNotificationView(view) } } \ No newline at end of file