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 0000000000..0259cb33eb Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/video_nor.png differ diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/icon_shexiangtou_nor.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/icon_shexiangtou_nor.png deleted file mode 100644 index c19426f7c8..0000000000 Binary files a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/icon_shexiangtou_nor.png and /dev/null differ 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 0000000000..0259cb33eb Binary files /dev/null and b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi/video_nor.png differ diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_map_fragment_map.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_map_fragment_map.xml index 710445abdd..80ea65bf7c 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/layout/module_map_fragment_map.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/module_map_fragment_map.xml @@ -1,19 +1,13 @@ + 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