diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index fbd29ca4bc..ebcb8b0017 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -70,6 +70,7 @@ dependencies { implementation project(':core:mogo-core-res') implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-utils') + implementation project(':core:mogo-core-res') implementation project(':core:mogo-core-function-api') implementation project(':core:mogo-core-function-call') // implementation project(':core:mogo-core-res') 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 16cd74ee96..c012eac757 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,16 +8,19 @@ import android.view.WindowManager import android.view.animation.OvershootInterpolator import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.data.camera.Camera 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.warning.IMoGoWarningStatusListener +import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager 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.notice.NoticeBannerView import com.mogo.eagle.core.function.hmi.ui.notice.NoticeFloatView +import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView import com.mogo.module.common.enums.EventTypeEnum import com.mogo.utils.logger.Logger @@ -32,9 +35,15 @@ class MoGoHmiFragment : MvpFragment MoGoWarningContract.View { var mWarningFloat: WarningFloat.Builder? = null + private var cameraListView: CameraListView? = null + private var cameraViewFloat: WarningFloat.Builder? = null override fun initViews() { - + ivCameraIcon.setOnClickListener { + if (cameraViewFloat == null) { + showCameraList(CallerMonitorManager.getCameraList()) + } + } } override fun getLayoutId(): Int { @@ -61,7 +70,6 @@ class MoGoHmiFragment : MvpFragment viewCheckStatus.visibility = visibility } - /** * 展示VR下V2X预警 * @@ -289,9 +297,80 @@ class MoGoHmiFragment : MvpFragment */ override fun showNoticeNormal(normalData: NoticeNormalData) { if (floatView == null) { - floatView = this.getContext()?.let { NoticeFloatView(it) } + floatView = this.context?.let { NoticeFloatView(it) } } floatView?.pushBeanChanged(normalData) } + private fun showCameraList(cameraList: List?) { + context?.let { + if (cameraViewFloat == null) { + if (cameraListView == null) { + cameraListView = CameraListView(it) + cameraListView!!.updateCameraData(cameraList) + } + cameraListView!!.setClickListener(object : CameraListView.ClickListener { + override fun onClose(v: View) { + dismissFloatView() + } + + override fun onShowLive(isShow: Boolean) { + when { + isShow -> ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_selected) + else -> ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor) + } + } + }) + cameraViewFloat = WarningFloat.with(it) + .setTag("CameraListFloat") + .setLayout(cameraListView!!) + .setSidePattern(SidePattern.RIGHT) + .setLocation(1742, 280) + .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) + }) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onDismiss() { + cameraViewFloat = null + cameraListView = null + ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor) + } + }) + .show() + } else { + cameraViewFloat?.show() + } + } + } + + private fun dismissFloatView() { + cameraViewFloat?.let { + WarningFloat.dismiss(it.config.floatTag, false) + cameraViewFloat = null + cameraListView = null + } + } + + override fun onDestroy() { + super.onDestroy() + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/CameraListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/CameraListAdapter.kt new file mode 100644 index 0000000000..9b3e5a6e07 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/CameraListAdapter.kt @@ -0,0 +1,55 @@ +package com.mogo.eagle.core.function.hmi.ui.camera + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView.Adapter +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import com.mogo.eagle.core.data.camera.Camera +import com.mogo.eagle.core.function.hmi.R + +class CameraListAdapter: Adapter { + + private var context: Context? = null + var data: List? = null + private var clickListener: View.OnClickListener? = null + + constructor(context: Context, data: List?, clickListener: View.OnClickListener? = null) { + this.context = context + this.data = data + this.clickListener = clickListener + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CameraListHolder { + var view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_camera_info, parent, false) + return CameraListHolder(view) + } + + override fun onBindViewHolder(holder: CameraListHolder, position: Int) { + data?.let { + holder.cameraInfo.text = with(it[position]) { + "${roadName}${crossingName}" + } + holder.bottomLine.visibility = if (it.size - 1 == position) View.INVISIBLE else View.VISIBLE + if (position == 0) { + // 顺义可直接查看摄像头视频的地址,用来测试 + holder.itemView.tag = "https://video.zhidaohulian.com/live/origin_13_48.flv?txSecret=397b1296eb548c737871fca242ff7ec5&txTime=6AABBEB2" + } else { + holder.itemView.tag = it[position].flvUrl + } + holder.itemView.setOnClickListener(clickListener) + } + } + + override fun getItemCount() = data?.size ?: 0 + + class CameraListHolder : ViewHolder { + var cameraInfo: TextView = itemView.findViewById(R.id.tvCameraInfo) + var bottomLine: View = itemView.findViewById(R.id.viewBottomLine) + + constructor(itemView: View): super(itemView) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/CameraListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/CameraListView.kt new file mode 100644 index 0000000000..80133aa45c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/CameraListView.kt @@ -0,0 +1,216 @@ +package com.mogo.eagle.core.function.hmi.ui.camera + +import android.animation.ValueAnimator +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Color +import android.text.SpannableStringBuilder +import android.text.Spanned +import android.text.style.ForegroundColorSpan +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.FrameLayout +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.data.camera.Camera +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.utils.GSYVideoType +import kotlinx.android.synthetic.main.view_camera_list.view.* +import java.lang.Exception + +/** + * @author ChenFufeng + * 行车超视距摄像头列表View + */ +class CameraListView : FrameLayout { + + private val TAG = "CameraListView" + + var cameraInfoList = ArrayList() + private var clickListener: ClickListener? = null + private val gsyVideoOptionBuilder by lazy { + GSYVideoOptionBuilder() + } + private val spannableStringBuilder by lazy { + SpannableStringBuilder("当前设备暂无信号,切换其他摄像头 3S") + } + + private val spannableStringBuilder2 by lazy { + SpannableStringBuilder("当前路口信号丢失,3S 后自动关闭") + } + private var isCloseStatus = true + private val valueAnimator by lazy { + ValueAnimator.ofInt(3, 0) + } + + @JvmOverloads + constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : super( + context, + attrs, + defStyleAttr + ) + + init { + LayoutInflater.from(context).inflate(R.layout.view_camera_list, this, true) + initView() + } + + private fun initView() { + rvCameraList.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + rvCameraList.adapter = CameraListAdapter(context, cameraInfoList) { + it.tag?.let { tag -> + isCloseStatus = false + showLiveView() + clickListener?.onShowLive(true) + val flvUrl = tag as String + gsyVideoOptionBuilder.setUrl(flvUrl) + .setCacheWithPlay(false) + .setAutoFullWithSize(false) + .setPlayTag(TAG).build(svpPlayer) + svpPlayer.startButton.performClick() + } + } + ivCloseIcon.setOnClickListener { + when { + isCloseStatus -> clickListener?.onClose(it) + else -> { + hideLiveView() + isCloseStatus = true + } + } + clickListener?.onShowLive(false) + } + GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL) + svpPlayer.setPlayListener(object : SimpleVideoPlayer.PlayListener { + override fun onPlayEvent(event: Int) { + when (event) { + SimpleVideoPlayer.PLAY_EVT_PLAY_LOADING -> { + + } + SimpleVideoPlayer.PLAY_EVT_PLAY_BEGIN -> { + progressBar.visibility = View.GONE + } + else -> { + showNoSignalView() + valueAnimator.start() + } + } + } + }) + // 后期可改为动态获取3s起始位置,暂时写死 + spannableStringBuilder.setSpan( + ForegroundColorSpan(Color.parseColor("#2966EE")), + spannableStringBuilder.length - 2, + spannableStringBuilder.length, + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + ) + spannableStringBuilder2.setSpan( + ForegroundColorSpan(Color.parseColor("#2966EE")), + spannableStringBuilder2.length - 8, + spannableStringBuilder2.length - 6, + Spanned.SPAN_INCLUSIVE_INCLUSIVE + ) + valueAnimator.duration = 3000 + valueAnimator.addUpdateListener { + when (val currentValue = it.animatedValue as Int) { + 0 -> { + if (cameraInfoList.isNullOrEmpty()) { + clickListener?.onClose(ivSignalIcon) + } else { + hideNoSignalView() + } + } + else -> { + if (cameraInfoList.isNullOrEmpty()) { + spannableStringBuilder2.replace(9, 10, currentValue.toString()) + tvTipContent.text = spannableStringBuilder2 + } else { + spannableStringBuilder.replace(17, 18, currentValue.toString()) + tvTipContent.text = spannableStringBuilder + } + } + } + } + } + + fun updateCameraData(cameraInfoList: List?) { + if (cameraInfoList.isNullOrEmpty()) { + showNoSignalView() + valueAnimator.start() + } else { + this.cameraInfoList.clear() + this.cameraInfoList.addAll(cameraInfoList) + } + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + @SuppressLint("NotifyDataSetChanged") + fun refreshCameraList() { + rvCameraList.adapter?.notifyDataSetChanged() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + stopLive() + valueAnimator.cancel() + } + + private fun stopLive() { + svpPlayer.removeAllViews() + try { + GSYVideoManager.releaseAllVideos() + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun showLiveView() { + tvCameraTitle.visibility = View.GONE + rvCameraList.visibility = View.GONE + svpPlayer.visibility = View.VISIBLE + progressBar.visibility = View.VISIBLE + ivCloseIcon.setBackgroundResource(R.drawable.icon_back) + } + + private fun hideLiveView() { + tvCameraTitle.visibility = View.VISIBLE + rvCameraList.visibility = View.VISIBLE + svpPlayer.visibility = View.GONE + progressBar.visibility = View.GONE + stopLive() + ivCloseIcon.setBackgroundResource(R.drawable.icon_close_nor) + } + + private fun showNoSignalView() { + ivSignalIcon.visibility = View.VISIBLE + tvTipContent.visibility = View.VISIBLE + tvCameraTitle.visibility = View.GONE + rvCameraList.visibility = View.GONE + svpPlayer.visibility = View.GONE + progressBar.visibility = View.GONE + } + + private fun hideNoSignalView() { + ivSignalIcon.visibility = View.GONE + tvTipContent.visibility = View.GONE + hideLiveView() + clickListener?.onShowLive(false) + } + + interface ClickListener { + fun onShowLive(isShow: Boolean) + fun onClose(v: View) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt index 32e8748110..884d2cc8db 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt @@ -5,6 +5,7 @@ import android.util.Log import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.data.camera.Camera import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.notice.NoticeNormalData diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_camera_selected.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_camera_selected.png new file mode 100644 index 0000000000..117d57346b Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_camera_selected.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_back.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_back.png new file mode 100644 index 0000000000..e305deb3f4 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_back.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_camera_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_camera_nor.png new file mode 100644 index 0000000000..bda7e1ed8d Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_camera_nor.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_camera_selected.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_camera_selected.png new file mode 100644 index 0000000000..117d57346b Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_camera_selected.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_close_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_close_nor.png new file mode 100644 index 0000000000..5cce370a51 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_close_nor.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_rideo_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_rideo_nor.png new file mode 100644 index 0000000000..d187488084 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_rideo_nor.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_signal.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_signal.png new file mode 100644 index 0000000000..2a927ad2ba Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_signal.png differ 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 4e3202d87f..d061568580 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 @@ -85,5 +85,15 @@ app:layout_constraintStart_toEndOf="@+id/viewPerspectiveSwitch" app:layout_goneMarginStart="50px" /> - + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_camera_info.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_camera_info.xml new file mode 100644 index 0000000000..e291851262 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_camera_info.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_camera_list.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_camera_list.xml new file mode 100644 index 0000000000..8601e80aef --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_camera_list.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-monitoring/build.gradle b/core/function-impl/mogo-core-function-monitoring/build.gradle index 3f661075a1..9b0b62b968 100644 --- a/core/function-impl/mogo-core-function-monitoring/build.gradle +++ b/core/function-impl/mogo-core-function-monitoring/build.gradle @@ -56,11 +56,15 @@ dependencies { implementation rootProject.ext.dependencies.mogo_core_res implementation rootProject.ext.dependencies.mogo_core_data implementation rootProject.ext.dependencies.mogo_core_function_api + implementation rootProject.ext.dependencies.mogo_core_function_call + implementation rootProject.ext.dependencies.modulecommon } else { implementation project(':core:mogo-core-utils') implementation project(':core:mogo-core-res') implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-function-api') + implementation project(':core:mogo-core-function-call') + implementation project(':modules:mogo-module-common') } } diff --git a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt new file mode 100644 index 0000000000..ed2abeda53 --- /dev/null +++ b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/CronTaskManager.kt @@ -0,0 +1,67 @@ +package com.mogo.eagle.core.function.monitoring + +import android.os.Handler +import android.os.Looper +import android.os.Message +import com.mogo.eagle.core.data.camera.Camera +import com.mogo.eagle.core.function.monitoring.net.CameraListServices +import com.mogo.module.common.MogoApisHandler +import com.mogo.module.common.constants.HostConst +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers + +class CronTaskManager { + private val TAG = "CronTaskManager" + private val CRON_TASK_TYPE = 1011 + + private val netWork by lazy { + MogoApisHandler.getInstance().apis.networkApi + } + private var disposable: Disposable? = null + private var cameraList: List? = null + + private val cronHandler: Handler = object : Handler(Looper.getMainLooper()) { + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + when (msg.what) { + CRON_TASK_TYPE -> { + removeMessages(CRON_TASK_TYPE) + requestCameraList() + sendEmptyMessageDelayed(CRON_TASK_TYPE, 10000) + } + } + } + } + + private fun requestCameraList() { + // 衡阳可直播的摄像头有限,先写死roadId便于调试 + disposable = netWork.create(CameraListServices::class.java, HostConst.CAMERA_STREAM_HOST) + .getCameraList("10849") + .subscribeOn(Schedulers.io()) + .map { cameraListInfo -> + cameraListInfo.result?.crossings?.flatMap { crossing -> + crossing.cameras.filter { camera -> + !camera.flvUrl.isNullOrEmpty() && !camera.rtmpUrl.isNullOrEmpty() + } + } ?: ArrayList() + } + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + cameraList = it + }, { + it.printStackTrace() + }) + } + + fun startCronTask() { + cronHandler.sendEmptyMessageDelayed(CRON_TASK_TYPE, 0) + } + + fun getCameraList() = cameraList + + fun clear() { + disposable?.dispose() + cronHandler.removeMessages(CRON_TASK_TYPE) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/MoGoMonitoringProvider.java b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/MoGoMonitoringProvider.java index 3b1e2d4fa0..30c93c14b2 100644 --- a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/MoGoMonitoringProvider.java +++ b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/MoGoMonitoringProvider.java @@ -5,17 +5,22 @@ import android.content.Context; import androidx.annotation.NonNull; import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.eagle.core.data.camera.Camera; import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.function.api.monitoring.IMoGoMonitoringProvider; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import java.util.List; + /** * @author xiaoyuzhou * @date 2021/10/29 11:09 上午 */ @Route(path = MogoServicePaths.PATH_AI_MONITORING) public class MoGoMonitoringProvider implements IMoGoMonitoringProvider { + public String TAG = "MoGoMonitoringProvider"; + private CronTaskManager mCronTaskManager; @NonNull @Override @@ -26,11 +31,18 @@ public class MoGoMonitoringProvider implements IMoGoMonitoringProvider { @Override public void init(Context context) { Logger.d(TAG, "初始化……"); + mCronTaskManager = new CronTaskManager(); + mCronTaskManager.startCronTask(); + } + + @Override + public List getCameraList() { + return mCronTaskManager.getCameraList(); } @Override public void onDestroy() { - + mCronTaskManager.clear(); } } diff --git a/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/net/CameraListServices.kt b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/net/CameraListServices.kt new file mode 100644 index 0000000000..03cde67570 --- /dev/null +++ b/core/function-impl/mogo-core-function-monitoring/src/main/java/com/mogo/eagle/core/function/monitoring/net/CameraListServices.kt @@ -0,0 +1,11 @@ +package com.mogo.eagle.core.function.monitoring.net + +import com.mogo.eagle.core.data.camera.CameraListInfo +import io.reactivex.Single +import retrofit2.http.GET +import retrofit2.http.Query + +interface CameraListServices { + @GET("/yycp-smartTransportationAiCloud-service/eagle/device/list") + fun getCameraList(@Query("roadId") roadId: String?): Single +} \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/CameraListInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/CameraListInfo.kt new file mode 100644 index 0000000000..9610c0b543 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/camera/CameraListInfo.kt @@ -0,0 +1,86 @@ +package com.mogo.eagle.core.data.camera + +import androidx.annotation.Keep + +import com.google.gson.annotations.SerializedName +import com.mogo.eagle.core.data.BaseData +import java.io.Serializable + + +@Keep +data class CameraListInfo ( + @SerializedName("result") + var result: Result? +): BaseData() + +@Keep +data class Result( + @SerializedName("crossings") + var crossings: List +) + +@Keep +data class Crossing( + @SerializedName("cameras") + var cameras: List, + @SerializedName("id") + var id: Int, + @SerializedName("lat") + var lat: Double, + @SerializedName("lights") + var lights: List, + @SerializedName("lon") + var lon: Double +) + +@Keep +data class Camera( + @SerializedName("areaName") + var areaName: String, + @SerializedName("bindingStat") + var bindingStat: String, + @SerializedName("category") + var category: String, + @SerializedName("cityName") + var cityName: String, + @SerializedName("createTime") + var createTime: Long, + @SerializedName("creator") + var creator: String, + @SerializedName("crossingId") + var crossingId: Int, + @SerializedName("crossingName") + var crossingName: String, + @SerializedName("desc") + var desc: String, + @SerializedName("flvUrl") + var flvUrl: String?, + @SerializedName("heading") + var heading: Int, + @SerializedName("headingDesc") + var headingDesc: Any?, + @SerializedName("id") + var id: String, + @SerializedName("ip") + var ip: String, + @SerializedName("lat") + var lat: Double, + @SerializedName("lon") + var lon: Double, + @SerializedName("mac") + var mac: String, + @SerializedName("name") + var name: String, + @SerializedName("proviceName") + var proviceName: String, + @SerializedName("roadName") + var roadName: String, + @SerializedName("rtmpUrl") + var rtmpUrl: String?, + @SerializedName("sn") + var sn: String, + @SerializedName("stat") + var stat: String, + @SerializedName("subCategory") + var subCategory: Any? +): Serializable \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt index e699268afe..88e703e84c 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/warning/IMoGoWaringProvider.kt @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.api.hmi.warning +import com.mogo.eagle.core.data.camera.Camera import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/monitoring/IMoGoMonitoringProvider.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/monitoring/IMoGoMonitoringProvider.java index b2269157a7..1719b456b1 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/monitoring/IMoGoMonitoringProvider.java +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/monitoring/IMoGoMonitoringProvider.java @@ -1,12 +1,15 @@ package com.mogo.eagle.core.function.api.monitoring; +import com.mogo.eagle.core.data.camera.Camera; import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider; +import java.util.List; + /** * @author xiaoyuzhou * @date 2021/10/29 10:35 上午 * 超视距功能,路测摄像头,前车摄像头监控 */ public interface IMoGoMonitoringProvider extends IMoGoFunctionServerProvider { - + List getCameraList(); } 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 124e93fdeb..1fa8193f60 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 @@ -1,5 +1,6 @@ package com.mogo.eagle.core.function.call.hmi +import com.mogo.eagle.core.data.camera.Camera import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.notice.NoticeNormalData @@ -173,5 +174,4 @@ object CallerHmiManager : CallerBase() { fun showNormalBanner(noticeNormal: NoticeNormalData) { waringProviderApi.showNoticeNormalData(noticeNormal) } - } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/monitor/CallerMonitorManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/monitor/CallerMonitorManager.kt new file mode 100644 index 0000000000..9daa97ca9a --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/monitor/CallerMonitorManager.kt @@ -0,0 +1,17 @@ +package com.mogo.eagle.core.function.call.monitor + +import com.mogo.eagle.core.data.camera.Camera +import com.mogo.eagle.core.data.constants.MogoServicePaths +import com.mogo.eagle.core.function.api.monitoring.IMoGoMonitoringProvider +import com.mogo.eagle.core.function.call.base.CallerBase + +object CallerMonitorManager { + private val providerApi: IMoGoMonitoringProvider + get() = CallerBase.getApiInstance( + IMoGoMonitoringProvider::class.java, + MogoServicePaths.PATH_AI_MONITORING) + + fun getCameraList(): List? { + return providerApi.cameraList + } +} \ No newline at end of file diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java index 74f6ab1fbd..a1737215ed 100644 --- a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java +++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java @@ -9,6 +9,8 @@ import android.util.AttributeSet; import androidx.constraintlayout.widget.ConstraintLayout; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; + /** * author : donghongyu @@ -49,6 +51,7 @@ public class RoundConstraintLayout extends ConstraintLayout { private void setRoundPath() { //添加一个圆角矩形到path中, 如果要实现任意形状的View, 只需要手动添加path就行 + roundPath.reset(); roundPath.addRoundRect(rectF, roundLayoutRadius, roundLayoutRadius, Path.Direction.CW); } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java index 1aacef7d33..db20c0ebc3 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java @@ -20,6 +20,7 @@ public class HostConst { public static final String TMC_HOST = "http://dzt-tmcServer.zhidaozhixing.com"; public static final String IM_SOCKET_DOMAIN = "dzt-im.zhidaozhixing.com"; public static final String WEBSOCKET_DOMAIN = "dzt-Instant.zhidaozhixing.com"; + public static final String CAMERA_STREAM_HOST = "http://dzt-smartTransportationAiCloud.zhidaozhixing.com"; public static final String SOCKET_CENTER_DOMAIN = "socketRegion";