[2.13.0]notice push data to msgbox and provider the call of hmi

This commit is contained in:
zhongchao
2022-11-28 17:31:50 +08:00
parent 12cffa44f7
commit 636b29b127
11 changed files with 112 additions and 139 deletions

View File

@@ -31,9 +31,5 @@ public class WaringConst {
public static String BROADCAST_V2X_LIMITING_VELOCITY_IS_SHOW__EXTRA_KEY = "limitingVelocityIsShow";
// 限速的速度
public static String BROADCAST_V2X_LIMITING_VELOCITY_SPEED__EXTRA_KEY = "limitingVelocitySpeed";
// 交警任务
public static String NOTICE_FOR_TRAFFIC_KEY = "noticeForTraffic";
//普通公告弹框
public static String NOTICE_FOR_NORMAL_KEY = "noticeForNotice";
}

View File

@@ -23,7 +23,6 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.cloud.passport.MoGoAiCloudClient
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.debug.DebugConfig
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.commons.mvp.BaseFragment
import com.mogo.commons.mvp.MvpFragment
import com.mogo.commons.voice.*
@@ -36,6 +35,7 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.data.enums.SidePattern.*
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
@@ -69,7 +69,6 @@ import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager
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.ui.bindingcar.ModifyBindingCarDialog
@@ -77,8 +76,8 @@ import com.mogo.eagle.core.function.hmi.ui.bindingcar.ToBindingCarDialog
import com.mogo.eagle.core.function.hmi.ui.bindingcar.UpgradeAppDialog
import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView
import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeNormalBannerView
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeTrafficDialog
import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView
import com.mogo.eagle.core.function.hmi.ui.setting.IPCReportWindow
import com.mogo.eagle.core.function.hmi.ui.setting.ReportListFloatWindow
@@ -141,8 +140,6 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
//StatusView
private var statusBarView: StatusBarView? = null
private var mNoticeFloat: WarningFloat.Builder? = null
// 超视距、路侧、前车直播
private var cameraListView: CameraListView? = null
private var cameraViewFloat: WarningFloat.Builder? = null
@@ -280,15 +277,19 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
//美化模式隐藏开关
viewDemoModeSwitch.setOnClickListener {
//只在司机端设置美化模式开关功能
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
//单次查询,是否有行程信息(订单进行中时点击不生效),autopilotControlParameters为null代表不处于自动驾驶状态下
if(CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().autopilotControlParameters == null){
if (CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().autopilotControlParameters == null) {
FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode
context?.let {
CallerHmiManager.updateStatusBarRightView(FunctionBuildConfig.isDemoMode, "demoMode", DemoModeView(it))
CallerHmiManager.updateStatusBarRightView(
FunctionBuildConfig.isDemoMode,
"demoMode",
DemoModeView(it)
)
}
CallerAutoPilotManager.setDemoMode(FunctionBuildConfig.isDemoMode)
if(!FunctionBuildConfig.isDemoMode){
if (!FunctionBuildConfig.isDemoMode) {
//关闭美化模式时,通知工控机
CallerAutoPilotManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode)
}
@@ -322,8 +323,14 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) {
CallerLogger.d("$M_HMI$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat}")
CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.RECORD, RecordBagMsg(recordPanel.key, recordPanel.stat, recordPanel.id,
recordPanel.type, recordPanel.filename, recordPanel.note)))
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.RECORD, RecordBagMsg(
recordPanel.key, recordPanel.stat, recordPanel.id,
recordPanel.type, recordPanel.filename, recordPanel.note
)
)
)
if (BadCaseConfig.recordKeyList.contains(recordPanel.key)) {
if (recordPanel.stat == 100 || recordPanel.stat == 101) {
//成功结束录制
@@ -511,7 +518,7 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
.setGravity(Gravity.LEFT)
.setImmersionStatusBar(true)
.setWindowHeight(LayoutParams.MATCH_PARENT)
.setWindowWidth(AutoSizeUtils.dp2px(context,960f))
.setWindowWidth(AutoSizeUtils.dp2px(context, 960f))
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
@@ -694,8 +701,8 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
.setSidePattern(side)
.setGravity(gravity, offsetY = 70)
.setImmersionStatusBar(true)
.setWindowHeight(AutoSizeUtils.dp2px(context,1100f))
.setWindowWidth(AutoSizeUtils.dp2px(context,800f))
.setWindowHeight(AutoSizeUtils.dp2px(context, 1100f))
.setWindowWidth(AutoSizeUtils.dp2px(context, 800f))
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
@@ -747,8 +754,8 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
.setSidePattern(side)
.setGravity(gravity, offsetY = 70)
.setImmersionStatusBar(true)
.setWindowWidth(AutoSizeUtils.dp2px(context,800f))
.setWindowHeight(AutoSizeUtils.dp2px(context,1100f))
.setWindowWidth(AutoSizeUtils.dp2px(context, 800f))
.setWindowHeight(AutoSizeUtils.dp2px(context, 1100f))
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
@@ -1126,105 +1133,37 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
clearAnimation(flV2XWarningView)
}
private var noticeTrafficDialog: NoticeTrafficDialog? = null
/**
* 展示云公告顶部弹窗
* 展示云公告交警详情
* @param trafficStylePushData
*/
override fun showNoticeForTrafficWithData(trafficStylePushData: NoticeTrafficStylePushData?) {
if (trafficStylePushData == null) {
return
}
ThreadUtils.runOnUiThread {
activity?.let {
val noticeBannerView = this.context?.let { it1 -> NoticeBannerView(it1) }
noticeBannerView?.refreshWithData(trafficStylePushData)
mNoticeFloat = it?.let { it1 ->
noticeBannerView?.let { it2 ->
WarningFloat.with(it1)
.setTag(WaringConst.NOTICE_FOR_TRAFFIC_KEY)
.setLayout(it2)
.setSidePattern(SidePattern.TOP)
.setCountDownTime(60 * 1000 * 3)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
// AIAssist.getInstance(activity)
// .speakTTSVoice("")
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
}
}
context?.let {
noticeTrafficDialog = NoticeTrafficDialog(it, trafficStylePushData)
noticeTrafficDialog?.show()
}
}
}
override fun showNoticeNormalData(normalData: NoticeNormalData?) {
ThreadUtils.runOnUiThread {
activity?.let {
val noticeBannerView = this.context?.let { it1 -> NoticeNormalBannerView(it1) }
noticeBannerView?.setPushData(normalData)
mNoticeFloat = it.let { it1 ->
noticeBannerView?.let { it2 ->
WarningFloat.with(it1)
.setTag(WaringConst.NOTICE_FOR_NORMAL_KEY)
.setLayout(it2)
.setSidePattern(SidePattern.TOP)
.setCountDownTime(10000)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
// AIAssist.getInstance(activity)
// .speakTTSVoice("")
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)
?.apply {
interpolator = OvershootInterpolator()
}
private var pushCheckDialog: NoticeCheckDialog? = null
override fun exitAnim(
view: View,
params: LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
}
}
/**
* 展示云公告详情
*/
override fun showNoticeNormalData(normalData: NoticeNormalData?) {
if (normalData == null) {
return
}
ThreadUtils.runOnUiThread {
context?.let {
pushCheckDialog = NoticeCheckDialog(it)
pushCheckDialog?.showCheckDialog(normalData)
}
}
}

View File

@@ -12,11 +12,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.mogo.eagle.core.data.notice.NoticeTrafficStyleInfo;
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData;
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.utilcode.mogo.glide.GlideApp;
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform;
import com.mogo.eagle.core.utilcode.util.BitmapHelper;
@@ -67,14 +64,11 @@ public class NoticeBannerView extends ConstraintLayout {
(30f, GlideRoundedCornersTransform.CornerType.LEFT)).into(styleImageView);
} else {
iconImageView.setVisibility(View.VISIBLE);
new Thread(new Runnable() {
@Override
public void run() {
Bitmap firstBitmap = BitmapHelper.getVideoThumbnail(mPushData.getPoiImgUrl());/*获取第一帧图*/
ThreadUtils.runOnUiThread(()->{
styleImageView.setImageBitmap(firstBitmap);
});
}
new Thread(() -> {
Bitmap firstBitmap = BitmapHelper.getVideoThumbnail(mPushData.getPoiImgUrl());/*获取第一帧图*/
ThreadUtils.runOnUiThread(()->{
styleImageView.setImageBitmap(firstBitmap);
});
});
};
}
@@ -89,12 +83,7 @@ public class NoticeBannerView extends ConstraintLayout {
noticeBannerCheck.setOnClickListener(v -> {
mNoticeTrafficDialog = new NoticeTrafficDialog(mContext, mPushData);
mNoticeTrafficDialog.show();
WarningFloat.dismiss(WaringConst.NOTICE_FOR_TRAFFIC_KEY);
});
}
//数据改变刷新UI
public void pushBeanChanged(NoticeTrafficStyleInfo info) {
}
}

View File

@@ -19,7 +19,6 @@ import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTran
import com.mogo.eagle.core.utilcode.util.BitmapHelper
import com.mogo.eagle.core.widget.media.video.NoticeSimpleVideoPlayer
import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog
import com.mogo.service.IMogoServiceApis
import com.shuyu.gsyvideoplayer.GSYVideoManager
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack
@@ -43,7 +42,6 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context), LifecycleO
private var mVideoUrl: String = ""
private var playErrorImageView: ImageView? = null
private var connectTextView: TextView? = null
private var mServiceApis: IMogoServiceApis? = null
private val statusChangedListenerForCheckNotice = IMogoStatusChangedListener { descriptor, isTrue ->
if (descriptor == StatusDescriptor.MAIN_PAGE_IS_BACKGROUND) {
dismiss()

View File

@@ -13,8 +13,6 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import com.mogo.eagle.core.data.notice.NoticeNormalData;
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.utilcode.mogo.glide.GlideApp;
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform;
@@ -80,7 +78,6 @@ public class NoticeNormalBannerView extends ConstraintLayout {
}
pushCheckDialog.showCheckDialog(mPushData);
WarningFloat.dismiss(WaringConst.NOTICE_FOR_NORMAL_KEY);
});
}

View File

@@ -685,6 +685,7 @@ class DebugSettingView @JvmOverloads constructor(
1 -> R.id.trackerIPC
2 -> R.id.trackerIPCObu
3 -> R.id.trackerIPCV2I
4 -> R.id.trackerIPCV2nRsm
else -> R.id.trackerIPCUnion
}
)
@@ -694,6 +695,7 @@ class DebugSettingView @JvmOverloads constructor(
R.id.trackerIPC -> FunctionBuildConfig.trackerIPCProvider = 1
R.id.trackerIPCObu -> FunctionBuildConfig.trackerIPCProvider = 2
R.id.trackerIPCV2I -> FunctionBuildConfig.trackerIPCProvider = 3
R.id.trackerIPCV2nRsm -> FunctionBuildConfig.trackerIPCProvider = 4
}
}

View File

@@ -13,7 +13,6 @@ import android.view.View;
import androidx.annotation.Nullable;
import com.mogo.eagle.core.function.hmi.R;
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView;
/**

View File

@@ -1886,6 +1886,16 @@
android:textColor="#000"
android:textSize="@dimen/dp_24" />
<RadioButton
android:id="@+id/trackerIPCV2nRsm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="@dimen/dp_10"
android:text="融合V2N-RSM感知数据"
android:textColor="#000"
android:textSize="@dimen/dp_24" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -30,6 +30,11 @@ object TrackerSourceColorHelper {
trackIPCFilter = false
}
}
4 -> {
if(isV2nRSM(data).second){
trackIPCFilter = false
}
}
}
return trackIPCFilter
}
@@ -46,7 +51,7 @@ object TrackerSourceColorHelper {
color = "#00AEFFFF"
}
//等级最高
//level : 2
if (isObu(data).second) {
color = "#36D3FEFF"
// obu预警
@@ -58,6 +63,11 @@ object TrackerSourceColorHelper {
}
}
//融合结果 level : 1
if (isFusion(data)) {
color = "#9900ffFF"
}
// pnc预警
WarningHelper.getPncColor(data.uuid.toString()) {
if (it.isNotBlank()) {
@@ -82,6 +92,13 @@ object TrackerSourceColorHelper {
}
}
/**
* 是否为融合数据,融合数据来源size >=2
*/
fun isFusion(data: TrackedObject): Boolean {
return data.trackedSourceList.size > 1
}
/**
* any match 任何一个匹配到OBU则认为是存在obu数据
*/
@@ -140,4 +157,34 @@ object TrackerSourceColorHelper {
}
/**
* 过滤所有 v2n 感知数据 all match
*/
@SuppressLint("NewApi")
fun isV2nRSM(data: TrackedObject): Pair<SubSource?, Boolean> {
if (data.trackedSourceList.size == 1) { // 如果仅有一个类型
val source = data.trackedSourceList.stream().allMatch { it.source == 2 }
if (source) {
val first = data.trackedSourceList.stream()
.filter { trackedSource: TrackedSource -> trackedSource.source == 2 }
.findFirst()
if (first.isPresent) {
val subV2nRSM = first.get().subSourceList.stream().allMatch {
it.source == 4
}
if (subV2nRSM) {
val subFirst = first.get().subSourceList.stream()
.filter { subSource: SubSource -> subSource.source == 4 }
.findFirst()
if (subFirst.isPresent) {
return Pair(subFirst.get(), true)
}
}
}
}
}
return Pair(null, false)
}
}

View File

@@ -9,7 +9,6 @@ import com.mogo.eagle.core.data.msgbox.MsgBoxBean;
import com.mogo.eagle.core.data.msgbox.MsgBoxType;
import com.mogo.eagle.core.data.notice.NoticeNormalData;
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.network.utils.GsonUtil;
@@ -64,7 +63,7 @@ class NoticeSocketManager {
if (obj == null) {
return;
}
CallerHmiManager.INSTANCE.showNoticeNormalData(obj);
CallerMsgBoxManager.INSTANCE.saveMsgBox(new MsgBoxBean(MsgBoxType.NOTICE,obj));
}
};
@@ -81,8 +80,7 @@ class NoticeSocketManager {
@Override
public void onMsgReceived(NoticeTrafficStylePushData obj) {
CallerLogger.INSTANCE.d(M_NOTICE + TAG, "301001-- 交警类型公告数据:" + GsonUtil.jsonFromObject(obj));
// todo
CallerHmiManager.INSTANCE.showTrafficBanner(obj);
CallerMsgBoxManager.INSTANCE.saveMsgBox(new MsgBoxBean(MsgBoxType.NOTICE,obj));
}
};
}