From d80e1c4188eda39629c47d8b6326545decf01622 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 19 Jul 2022 19:07:38 +0800 Subject: [PATCH] =?UTF-8?q?[Feat]=E5=85=A8=E8=A7=88=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9F=A5=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/taxi/ui/TaxiNaviFragment.java | 4 +- .../core/function/hmi/ui/MoGoHmiFragment.kt | 49 ++++- .../function/hmi/ui/camera/RoadVideoDialog.kt | 119 +++++++++++ .../core/function/main/MainActivity.java | 8 +- .../src/main/res/layout/road_video_dialog.xml | 43 ++++ .../eagle/core/function/map/MapFragment.java | 32 ++- .../function/overview/InfStructureManager.kt | 21 ++ .../core/function/smp/AMapCustomView.java | 185 ++++++++++++++---- .../core/function/smp/SmallMapFragment.java | 61 +++--- .../src/main/res/anim/fade_out.xml | 9 + .../src/main/res/anim/slide_in.xml | 9 + .../drawable-xhdpi-2560x1440/video_nor.png | Bin 0 -> 8276 bytes .../drawable-xhdpi/icon_shexiangtou_nor.png | Bin 5580 -> 0 bytes .../src/main/res/drawable-xhdpi/video_nor.png | Bin 0 -> 8276 bytes .../res/layout/module_map_fragment_map.xml | 12 +- .../res/layout/module_small_map_fragment.xml | 6 +- .../main/res/layout/module_small_map_view.xml | 50 ++--- .../api/hmi/warning/IMoGoWaringProvider.kt | 2 + .../function/call/hmi/CallerHmiManager.kt | 4 + 19 files changed, 496 insertions(+), 118 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/RoadVideoDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/road_video_dialog.xml create mode 100644 core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/InfStructureManager.kt create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/anim/fade_out.xml create mode 100644 core/function-impl/mogo-core-function-map/src/main/res/anim/slide_in.xml create mode 100755 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/video_nor.png delete mode 100644 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/icon_shexiangtou_nor.png create mode 100755 core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_nor.png diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiNaviFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiNaviFragment.java index 8899f882a0..4038351737 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiNaviFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiNaviFragment.java @@ -81,8 +81,8 @@ public class TaxiNaviFragment extends BaseTaxiUIFragment implements AMapNaviView aMap.setCustomMapStyle( new CustomMapStyleOptions() .setEnable(true) - .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext())) - .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext())) + .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext(), "small_map_style.data")) + .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext(), "small_map_style_extra.data")) ); //设置希望展示的地图缩放级别 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 d302443572..7f7d478472 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 @@ -19,6 +19,8 @@ import android.widget.* import androidx.core.view.* import androidx.lifecycle.lifecycleScope import com.alibaba.android.arouter.facade.annotation.Route +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.commons.mvp.BaseFragment import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.voice.* import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper @@ -56,6 +58,7 @@ import com.mogo.eagle.core.function.hmi.ui.bindingcar.ModifyBindingCarDialog 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.setting.DebugSettingView @@ -137,6 +140,12 @@ import kotlin.collections.ArrayList private var speakJob: Job? = null + private var roadVideoDialog: RoadVideoDialog? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + override fun vipIdentification(visible: Boolean) { ThreadUtils.runOnUiThread { if (visible) { @@ -275,6 +284,15 @@ import kotlin.collections.ArrayList mViewNotificationProvider = provider } + override fun showVideoDialog(url: String, isFlvUrl: Boolean) { + context?.let { + if (roadVideoDialog == null) { + roadVideoDialog = RoadVideoDialog(it) + } + roadVideoDialog?.show(url, isFlvUrl) + } + } + /** * 设置 红绿灯 代理View */ @@ -888,14 +906,6 @@ import kotlin.collections.ArrayList dismissToolsFloatView() } - override fun showSmallFragment() { - // TODO:("展示全览模式地图") - } - - override fun hideSmallFragment() { - // TODO:("隐藏全览模式地图") - } - private fun showCameraList(cameraList: List?) { context?.let { if (cameraViewFloat == null) { @@ -1114,6 +1124,29 @@ import kotlin.collections.ArrayList } } + override fun showSmallFragment() { + // 加载 小地图 图层 + val fragmentSmpMap = ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_SMP) + .navigation() as BaseFragment + activity?.supportFragmentManager?.beginTransaction() + ?.setCustomAnimations(R.anim.slide_in, R.anim.fade_out)?.apply { + if (!fragmentSmpMap.isAdded) { + add(R.id.module_main_id_smp_fragment, fragmentSmpMap, fragmentSmpMap.tagName) + } else { + show(fragmentSmpMap) + }.commitAllowingStateLoss() + } + } + + override fun hideSmallFragment() { + val fragmentSmpMap = ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_SMP) + .navigation() as BaseFragment + activity?.supportFragmentManager?.beginTransaction() + ?.setCustomAnimations(R.anim.slide_in, R.anim.fade_out) + ?.hide(fragmentSmpMap) + ?.commitAllowingStateLoss() + } + override fun onDestroy() { super.onDestroy() CallerLogger.d("$M_HMI$TAG", "onDestroy") diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/RoadVideoDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/RoadVideoDialog.kt new file mode 100644 index 0000000000..fc8c71d8a7 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/camera/RoadVideoDialog.kt @@ -0,0 +1,119 @@ +package com.mogo.eagle.core.function.hmi.ui.camera + +import android.content.Context +import android.graphics.PorterDuff +import android.graphics.PorterDuffColorFilter +import android.view.View +import androidx.core.content.ContextCompat +import androidx.lifecycle.LifecycleObserver +import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager +import com.mogo.eagle.core.function.hmi.R +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.util.ToastUtils +import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer +import com.mogo.module.common.dialog.BaseFloatDialog +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.model.VideoOptionModel +import com.shuyu.gsyvideoplayer.player.IjkPlayerManager +import com.shuyu.gsyvideoplayer.player.PlayerFactory +import com.shuyu.gsyvideoplayer.utils.GSYVideoType +import kotlinx.android.synthetic.main.road_video_dialog.* +import kotlinx.android.synthetic.main.view_camera_list.view.* +import tv.danmaku.ijk.media.player.IjkMediaPlayer + + +/** + * @brief 道路视频Dialog + * @author chenfufeng + */ +class RoadVideoDialog(context: Context) : BaseFloatDialog(context), LifecycleObserver { + + private val TAG = "RoadVideoDialog" + + private var mVideoUrl: String = "" + + private val gsyVideoOptionBuilder by lazy { + GSYVideoOptionBuilder() + } + + init { + setContentView(R.layout.road_video_dialog) + setCanceledOnTouchOutside(true) + + roadVideoClose.setOnClickListener { + stopLive() + dismiss() + } + + initVideoPlayer() + } + + fun show(url: String, isFlvUrl: Boolean) { + show() + if (!isFlvUrl) { + // 打开指定ip的摄像头直播流 + CallerMonitorManager.openCameraStream(url, { flvUrl -> + gsyVideoPlay(flvUrl) + }) { + ToastUtils.showShort(it.message) + } + } else { + gsyVideoPlay(url) + } + } + + override fun dismiss() { + super.dismiss() + stopLive() + } + + private fun initVideoPlayer() { + val list: MutableList = ArrayList() + list.add(VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "reconnect", 3)) + GSYVideoManager.instance().optionModelList = list + GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL) + PlayerFactory.setPlayManager(IjkPlayerManager::class.java) + roadVideoPlayer.setPlayListener(object : SimpleVideoPlayer.PlayListener { + override fun onPlayEvent(event: Int) { + CallerLogger.d("${SceneConstant.M_HMI}$TAG", "onPlayEvent: event is:$event") + when (event) { + SimpleVideoPlayer.PLAY_EVT_PLAY_LOADING -> { + // 会出现临时中断后又可以继续播放,需要停掉倒计时 + + } + SimpleVideoPlayer.PLAY_EVT_PLAY_BEGIN -> { + roadVideoPB.visibility = View.GONE + roadVideoPlayer.visibility = View.VISIBLE + } + else -> { + CallerLogger.w("${SceneConstant.M_HMI}$TAG", "播放视频异常,event is:$event") + } + } + } + }) + roadVideoPB.indeterminateDrawable.colorFilter = PorterDuffColorFilter( + ContextCompat.getColor(context, R.color.notice_blue), + PorterDuff.Mode.MULTIPLY + ) + } + + private fun gsyVideoPlay(flvUrl: String) { + gsyVideoOptionBuilder.setUrl(flvUrl) + .setCacheWithPlay(false) + .setAutoFullWithSize(false) + .setIsTouchWigetFull(false) + .setIsTouchWiget(false) + .setPlayTag(TAG).build(roadVideoPlayer) + roadVideoPlayer.startButton.performClick() + } + + private fun stopLive() { + try { + GSYVideoManager.releaseAllVideos() + } catch (e: Exception) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java index 0eb6d56cac..abe9c112f4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java @@ -229,7 +229,6 @@ public class MainActivity extends MvpActivity implement final long start = System.currentTimeMillis(); MogoModulesManager.getInstance().init(this); - IMogoHosListenerRegister listenerRegister = CallerMapUIServiceManager.INSTANCE.getHostListenerRegister(); if (listenerRegister != null) { listenerRegister.registerHostMapListener(EventDispatchCenter.getInstance()); @@ -304,10 +303,9 @@ public class MainActivity extends MvpActivity implement // 加载 HMI 图层 BaseFragment fragmentHdMap = (BaseFragment) ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_HMI).navigation(); addFragment(fragmentHdMap, fragmentHdMap.getTagName(), R.id.module_main_id_waring_fragment); - - // 加载 小地图 图层 - BaseFragment fragmentSmpMap = (BaseFragment) ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_SMP).navigation(); - addFragment(fragmentSmpMap, fragmentSmpMap.getTagName(), R.id.module_main_id_smp_fragment); +// // 加载 小地图 图层 +// BaseFragment fragmentSmpMap = (BaseFragment) ARouter.getInstance().build(MoGoFragmentPaths.PATH_FRAGMENT_SMP).navigation(); +// addFragment(fragmentSmpMap, fragmentSmpMap.getTagName(), R.id.module_main_id_smp_fragment); } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/road_video_dialog.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/road_video_dialog.xml new file mode 100644 index 0000000000..937c3505fe --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/road_video_dialog.xml @@ -0,0 +1,43 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java index 84e5755729..cf2a3d9579 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapFragment.java @@ -9,15 +9,17 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.alibaba.android.arouter.facade.annotation.Route; -import com.amap.api.maps.AMap; -import com.amap.api.maps.TextureMapView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.data.constants.MoGoFragmentPaths; import com.mogo.eagle.core.data.map.CenterLine; import com.mogo.eagle.core.function.api.map.hd.IMoGoMapFragmentProvider; import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; import com.mogo.eagle.core.function.call.map.CallerHDMapManager; import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager; +import com.mogo.eagle.core.function.overview.InfStructureManager; +import com.mogo.eagle.core.function.overview.ViewModelExtKt; +import com.mogo.eagle.core.function.overview.vm.OverViewModel; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.map.IMogoMap; import com.mogo.map.IMogoUiSettings; @@ -41,8 +43,6 @@ public class MapFragment extends MvpFragment private MogoMapView mMogoMapView; private IMogoMap mMogoMap; - private TextureMapView mNaviMapView; - private AMap mAMap; private final boolean mIsControllerByOthersStatus = false; @@ -85,8 +85,6 @@ public class MapFragment extends MvpFragment if (mMogoMap != null) { mMogoMap.getUIController().showMyLocation(true); } - mNaviMapView = findViewById(R.id.module_gaode_id_map); - mAMap = mNaviMapView.getMap(); // 添加换肤监听 CallerSkinModeListenerManager.INSTANCE.addListener(TAG, this); } @@ -101,6 +99,7 @@ public class MapFragment extends MvpFragment public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initMapView(); + queryInfStructure(); } @Override @@ -183,6 +182,27 @@ public class MapFragment extends MvpFragment MapPointCloudSubscriber.Companion.getInstance(); } + private void queryInfStructure() { + OverViewModel viewModel = ViewModelExtKt.obtainViewModel(this, OverViewModel.class); +// viewModel.getInfStructures().observe(this.getViewLifecycleOwner(), infrastructures -> { +// if (isFirst) { +// for (Infrastructure entity : infrastructures) { +// Double lat = Double.parseDouble(entity.getLat()); +// Double lon = Double.parseDouble(entity.getLon()); +// if (lat < 0 || lat > 90 || lon < 0 || lon > 180) { +// continue; +// } +// String geoHash = GeoHash.withCharacterPrecision(lat, lon, 7).toBase32(); +// viewModel.updateGeoHash(entity.getId(), geoHash); +// } +// isFirst = false; +// } +// }); + + viewModel.getInfStructuresMap().observe(this.getViewLifecycleOwner(), InfStructureManager.INSTANCE::saveData); + viewModel.fetchInfStructures(); + } + @Override public IMogoMapUIController getUIController() { return mMogoMap.getUIController(); diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/InfStructureManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/InfStructureManager.kt new file mode 100644 index 0000000000..7be615c9fe --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/overview/InfStructureManager.kt @@ -0,0 +1,21 @@ +package com.mogo.eagle.core.function.overview + +/** + * 本地数据库查询出来的红绿灯、摄像头等数据 + */ +object InfStructureManager { + + // 每个GeoHash网格对应的新基建Bean + private val _infMap by lazy { + HashMap>() + } + + fun saveData(map: HashMap>) { + if (_infMap.isNotEmpty()) { + _infMap.clear() + } + _infMap.putAll(map) + } + + fun getData(): Map> = _infMap +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java index 793381471e..7046a7c476 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/AMapCustomView.java @@ -19,7 +19,10 @@ import com.amap.api.maps.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.CoordinateConverter; import com.amap.api.maps.UiSettings; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CustomMapStyleOptions; import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.Polyline; import com.amap.api.navi.AMapNavi; import com.amap.api.navi.AMapNaviListener; @@ -43,6 +46,7 @@ import com.amap.api.navi.model.NaviInfo; import com.amap.api.navi.model.NaviLatLng; import com.amap.api.navi.model.RouteOverlayOptions; import com.autonavi.tbt.TrafficFacilityInfo; +import com.elegant.utils.UiThreadHandler; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.map.MogoLatLng; import com.mogo.eagle.core.data.map.MogoLocation; @@ -51,9 +55,13 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager; import com.mogo.eagle.core.function.map.R; +import com.mogo.eagle.core.function.overview.InfStructureManager; +import com.mogo.eagle.core.function.overview.Infrastructure; import com.mogo.eagle.core.function.smp.view.ISmallMapDirectionView; +import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.module.common.utils.DrivingDirectionUtils; @@ -62,8 +70,11 @@ import com.zhidao.support.adas.high.AdasManager; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import ch.hsr.geohash.GeoHash; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; @@ -83,12 +94,6 @@ public class AMapCustomView private AMap mAMap; protected NaviLatLng mStartLatlng = new NaviLatLng(); protected NaviLatLng mEndLatlng = new NaviLatLng(); - //328路线测试数据 -// protected NaviLatLng mStartLatlng = new NaviLatLng(39.969111, 116.411903); -// protected NaviLatLng mEndLatlng = new NaviLatLng(40.037209, 116.314358); - //顺义国展测试数据 -// mStartLatlng = new NaviLatLng(40.09383,116.51899); -// mEndLatlng = new NaviLatLng(40.09964,116.54570); protected final List sList = new ArrayList(); protected final List eList = new ArrayList(); private int zoomLevel = 15; @@ -102,6 +107,10 @@ public class AMapCustomView private TextView overLayerView; private boolean calculate = false; + // 全局路径规划中的GeoHash网格 + private Map> pathMap = new HashMap(); + private Map posInfMap = new HashMap(); + public AMapCustomView(Context context) { this(context, null); } @@ -121,27 +130,6 @@ public class AMapCustomView private void initView(Context context) { mContext = context; - //测试代码:路线指定路径328线路 -// mWayPointList.add(new NaviLatLng(39.968847, 116.406952)); -// mWayPointList.add(new NaviLatLng(39.969058, 116.407346)); -// mWayPointList.add(new NaviLatLng(39.968955, 116.401767)); -// mWayPointList.add(new NaviLatLng(39.968626, 116.394938)); -// mWayPointList.add(new NaviLatLng(39.968433, 116.388725)); -// mWayPointList.add(new NaviLatLng(39.968542, 116.383775)); -// mWayPointList.add(new NaviLatLng(40.037808, 116.342539)); -// mWayPointList.add(new NaviLatLng(40.037239, 116.337172)); -// mWayPointList.add(new NaviLatLng(40.035897, 116.329582)); -// mWayPointList.add(new NaviLatLng(40.036396, 116.322166)); - Log.d(TAG, "initView:" + mWayPointList.toString()); - - //顺义国展路线 -// mWayPointList.add(new NaviLatLng(40.097621,116.526495)); -// mWayPointList.add(new NaviLatLng(40.097982,116.529135)); -// mWayPointList.add(new NaviLatLng(40.098434,116.531903)); -// mWayPointList.add(new NaviLatLng(40.098828,116.534563)); -// mWayPointList.add(new NaviLatLng(40.099377,116.538651)); -// mWayPointList.add(new NaviLatLng(40.099927,116.54173)); - View smpView = LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this); mAMapNaviView = smpView.findViewById(R.id.aMapNaviView); overLayerView = findViewById(R.id.overLayer); @@ -157,6 +145,78 @@ public class AMapCustomView overLayerView.setOnClickListener(v -> { mAMapNaviView.displayOverview(); }); + // 注册定位监听 + CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); + CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); + } + + private void initAMapView(Context context) { + Log.d(TAG, "initAMapView"); + mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); + mAMap = mAMapNaviView.getMap(); + setUpMap(); + customOptions(); + } + + private void setUpMap() { + // 地图文字标注 + mAMap.showMapText(true); + // 显示实时路况图层,aMap是地图控制器对象。 + mAMap.setTrafficEnabled(true); + //设置希望展示的地图缩放级别 + mAMap.moveCamera(mCameraUpdate); + //设置地图的样式 + UiSettings uiSettings = mAMap.getUiSettings(); + //地图缩放级别的交换按钮 + uiSettings.setZoomControlsEnabled(false); + //所有手势 + uiSettings.setAllGesturesEnabled(true); + //隐藏指南针 + uiSettings.setCompassEnabled(false); + //设置倾斜手势是否可用。 + uiSettings.setTiltGesturesEnabled(true); + //隐藏默认的定位按钮 + uiSettings.setMyLocationButtonEnabled(false); + //设置Logo下边界距离屏幕底部的边距,设置为负值即可 + uiSettings.setLogoBottomMargin(-150); + Log.d(TAG, "before onMapLoaded"); + } + + /** + * 自定义导航View和路况状态 + */ + private void customOptions() { + AMapNaviViewOptions options = mAMapNaviView.getViewOptions(); + //关闭自动绘制路线,自行绘制路线 +// options.setAutoDrawRoute(false); + //不显示导航界面 + options.setLayoutVisible(false); + //黑夜模式 + options.setNaviNight(true); + //导航全程光柱 + options.setTrafficBarEnabled(false); + //指南针 +// options.setCompassEnabled(false); +// options.setTilt((int) tilt); + //自车车标 + options.setCarBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_my_location_logo)); + options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.amap_custom_corner)); + options.setStartPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_start)); + options.setWayPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.icon_module_small_map_four_corners)); + options.setEndPointBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.module_small_map_view_dir_end)); + //与走过的路线 + options.setAfterRouteAutoGray(true); + //路线纹理自定义 + RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); + routeOverlayOptions.setTurnArrowIs3D(false); + routeOverlayOptions.setUnknownTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_no));//未知路段 + routeOverlayOptions.setSmoothTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_smooth_route)); + routeOverlayOptions.setJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_bad));//拥堵路段 + routeOverlayOptions.setVeryJamTraffic(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture_grayred));//超级拥堵路段 + routeOverlayOptions.setPassRoute(BitmapFactory.decodeResource(getResources(), R.drawable.amap_custom_pass_route));//走过的路段 + options.setRouteOverlayOptions(routeOverlayOptions); + mAMapNaviView.setViewOptions(options); } private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() { @@ -190,7 +250,7 @@ public class AMapCustomView int state = autoPilotStatusInfo.getState(); //0 不能自动驾驶 1 可以自动驾驶,但是在人工干预 2 自动驾驶中 if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - Log.d(TAG, "自动驾驶中= %s" + String.valueOf(state)); + Log.d(TAG, "自动驾驶中 state=" + String.valueOf(state)); if (sList.size() == 0 && eList.size() == 0 && mWayPointList.size() == 0) { Log.d(TAG, "sendGlobalPathReq"); AdasManager.getInstance().sendGlobalPathReq(); @@ -221,7 +281,7 @@ public class AMapCustomView */ @Override public void onAutopilotRotting(@org.jetbrains.annotations.Nullable MessagePad.GlobalPathResp globalPathResp) { - if (calculate == true) { + if (calculate == true && sList.size() == 0 && eList.size() == 0 && mWayPointList.size() == 0) { return; } calculate = true; @@ -256,6 +316,8 @@ public class AMapCustomView Log.d(TAG, "全局路径" + list.size() + ",起点:" + sList.toString() + ",终点:" + eList.toString() + ",经点:" + mWayPointList.toString()); //指定路径绘制导航路线 mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy); + + drawInfrastructureMarkers(globalPathResp); } }; @@ -620,9 +682,11 @@ public class AMapCustomView @Override public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { Log.d(TAG, "onCalculateRouteSuccess aMapCalcRouteResult" + aMapCalcRouteResult.toString()); - mAMapNavi.startNavi(NaviType.EMULATOR); - mAMapNaviView.displayOverview(); - + //提测修改为EMULATOR + mAMapNavi.startNavi(NaviType.GPS); + UiThreadHandler.postDelayed(() -> { + mAMapNaviView.displayOverview(); + }, 2000); //停止导航测试代码 // UiThreadHandler.postDelayed(() -> { // mAMapNavi.stopNavi(); @@ -682,7 +746,14 @@ public class AMapCustomView @Override public void onNaviViewLoaded() { - + Log.d(TAG, "---onNaviViewLoaded---"); + // 加载自定义样式 + CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() + .setEnable(true) + .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext(), "over_view_style.data")) + .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext(), "over_view_style_extra.data")); + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions); } @Override @@ -695,4 +766,52 @@ public class AMapCustomView } + private void drawInfrastructureMarkers(MessagePad.GlobalPathResp globalPathResp) { + if (globalPathResp != null) { + if (!pathMap.isEmpty()) { + pathMap.clear(); + } + String geoHash; + ArrayList infList; + for (MessagePad.Location location : globalPathResp.getWayPointsList()) { + geoHash = GeoHash.withCharacterPrecision(location.getLatitude(), location.getLongitude(), 7).toBase32(); + // 网格内的轨迹点只取一次 + if (!pathMap.containsKey(geoHash)) { + // 从缓存的新基建数据中去取对应geoHash的新基建数据集合 + infList = InfStructureManager.INSTANCE.getData().get(geoHash); + if (infList != null) { + pathMap.put(geoHash, infList); + } + } + } + // 绘制新基建数据 + if (!posInfMap.isEmpty()) { + posInfMap.clear(); + } + ArrayList markerOptionsList = new ArrayList(); + for (ArrayList structureList : pathMap.values()) { + for (Infrastructure structure : structureList) { + MarkerOptions markerOption = new MarkerOptions(); + LatLng latLng = new LatLng(Double.valueOf(structure.getLat()), + Double.valueOf(structure.getLon())); + markerOption.position(latLng); + markerOption.icon(BitmapDescriptorFactory.fromBitmap( + BitmapFactory.decodeResource(getResources(), R.drawable.video_nor) + )); + posInfMap.put(latLng, structure); + markerOptionsList.add(markerOption); + } + } + mAMap.addMarkers(markerOptionsList, false); + mAMap.setOnMarkerClickListener(marker -> { + Infrastructure infrastructure = posInfMap.get(marker.getPosition()); + // 如果是摄像头 + if (0 == infrastructure.getCategory() && infrastructure.getIp() != null) { + CallerHmiManager.INSTANCE.showVideoDialog(infrastructure.getIp()); + return true; + } + return false; + }); + } + } } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java index 17227329ec..5751b70918 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapFragment.java @@ -37,7 +37,7 @@ public class SmallMapFragment extends BaseFragment implements IMogoSmallMapProvider, IMoGoAutopilotPlanningListener, IMoGoAutopilotStatusListener { private final String TAG = "SmallMapFragment"; - protected SmallMapDirectionView mSmallMapDirectionView; + protected AMapCustomView mAMapCustomView; @Override public void onAttach(Context context) { @@ -62,63 +62,68 @@ public class SmallMapFragment extends BaseFragment @Override protected void initViews(Bundle savedInstanceState) { super.initViews(savedInstanceState); - mSmallMapDirectionView = mRootView.findViewById(R.id.smallMapDirectionView); - mSmallMapDirectionView.onCreateView(savedInstanceState); + mAMapCustomView = mRootView.findViewById(R.id.smallMapDirectionView); + mAMapCustomView.onCreateView(savedInstanceState); CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG, this); } @Override public void showPanel() { - if (mSmallMapDirectionView != null) { - mSmallMapDirectionView.setVisibility(View.VISIBLE); + if (mAMapCustomView != null) { + mAMapCustomView.setVisibility(View.VISIBLE); } } @Override public void hidePanel() { - if (mSmallMapDirectionView != null) { - mSmallMapDirectionView.setVisibility(View.GONE); + if (mAMapCustomView != null) { + mAMapCustomView.setVisibility(View.GONE); } } @Override public void drawablePolyline(List coordinates) { - if (mSmallMapDirectionView != null) { - mSmallMapDirectionView.convert(coordinates); - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mSmallMapDirectionView.drawablePolyline(); - } - }); + if (mAMapCustomView != null) { + mAMapCustomView.convert(coordinates); + UiThreadHandler.post(() -> mAMapCustomView.drawablePolyline()); } } @Override public void clearPolyline() { - if (mSmallMapDirectionView != null) { - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mSmallMapDirectionView.clearPolyline(); - } - }); + if (mAMapCustomView != null) { + UiThreadHandler.post(() -> mAMapCustomView.clearPolyline()); } } @Override public void onResume() { super.onResume(); - if (mSmallMapDirectionView != null) { - mSmallMapDirectionView.onResume(); + if (mAMapCustomView != null) { + mAMapCustomView.onResume(); } } + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); +// queryInfStructure(); + } + +// private void queryInfStructure() { +// mViewModel = ViewModelExtKt.obtainViewModel(this, OverViewModel.class); +// mViewModel.getInfStructuresMap().observe(this.getViewLifecycleOwner(), map -> { +// mAMapCustomView.updateInfStructures(map); +// }); +// // 本地数据库查询 +// mViewModel.fetchInfStructures(); +// } + @Override public void onPause() { super.onPause(); - if (mSmallMapDirectionView != null) { - mSmallMapDirectionView.onPause(); + if (mAMapCustomView != null) { + mAMapCustomView.onPause(); } } @@ -126,8 +131,8 @@ public class SmallMapFragment extends BaseFragment @Override public void onDestroy() { super.onDestroy(); - if (mSmallMapDirectionView != null) { - mSmallMapDirectionView.onDestroy(); + if (mAMapCustomView != null) { + mAMapCustomView.onDestroy(); } CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(TAG); } diff --git a/core/function-impl/mogo-core-function-map/src/main/res/anim/fade_out.xml b/core/function-impl/mogo-core-function-map/src/main/res/anim/fade_out.xml new file mode 100644 index 0000000000..67dc9715c7 --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/res/anim/fade_out.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/res/anim/slide_in.xml b/core/function-impl/mogo-core-function-map/src/main/res/anim/slide_in.xml new file mode 100644 index 0000000000..c4f5ed5f0f --- /dev/null +++ b/core/function-impl/mogo-core-function-map/src/main/res/anim/slide_in.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/video_nor.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/video_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..0259cb33eb2ce30d9159b4fa4c4363ece54c8321 GIT binary patch literal 8276 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 X5XLhR*{9?6UnbQ^-(0U&2NwT7dE0B2 diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_nor.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_nor.png new file mode 100755 index 0000000000000000000000000000000000000000..0259cb33eb2ce30d9159b4fa4c4363ece54c8321 GIT binary patch literal 8276 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 ShDhW90000 + android:layout_height="match_parent" + > - - + android:visibility="visible"/> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_fragment.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_fragment.xml index 47b8763b7d..82fb8c6ab8 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_fragment.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_fragment.xml @@ -6,10 +6,8 @@ diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml index 0fa8d310d8..a8a1ede8d9 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_small_map_view.xml @@ -2,41 +2,45 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerInParent="true" /> - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_centerInParent="true"> - - - - - + - - + + + android:src="@drawable/module_small_map_view_border_north" + android:visibility="gone" /> + \ 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 5fac285a8e..81cc59c55e 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 @@ -243,4 +243,6 @@ interface IMoGoWaringProvider : IMoGoHmiViewProxy { * @param reportList 上报数据列表 */ fun showIPCReportWindow(reportList: ArrayList) + + fun showVideoDialog(url: String, isFlvUrl: Boolean) } \ 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 12b4ecdb98..6efce9500d 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 @@ -358,4 +358,8 @@ object CallerHmiManager : CallerBase() { waringProviderApi?.showIPCReportWindow(reportList) } + @JvmOverloads + fun showVideoDialog(url: String, isFlvUrl: Boolean = false) { + waringProviderApi?.showVideoDialog(url, isFlvUrl) + } } \ No newline at end of file