From 295300c54f85adde429058aace642ccd67591d1a Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Sun, 23 Oct 2022 16:21:41 +0800 Subject: [PATCH] =?UTF-8?q?[2.12.0]=20taxi=20=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=E9=80=81=E9=A9=BE=E9=AB=98=E5=BE=B7=E5=AF=BC=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../map/AmapNaviToDestinationModel.java} | 108 +------- .../common/module/map/CommonAmapNaviVIew.kt | 249 ++++++++++++++++++ .../map/ICommonNaviChangedCallback.java} | 6 +- .../common/module/utils/PermissionUtil.java | 35 +++ .../drawable-xhdpi/taxi_navi_arrow_icon.png | Bin 0 -> 2663 bytes .../taxi_navi_direction_icon.png | Bin 0 -> 11547 bytes .../drawable-xhdpi/taxi_navi_line_icon.png | Bin 0 -> 542 bytes .../res/layout/taxi_common_amap_navi_view.xml | 5 + .../com/mogo/och/taxi/model/TaxiModel.java | 16 +- .../och/taxi/presenter/NaviPresenter.java | 3 +- ... => CommonBeingServerdOrdersFragment.java} | 23 +- .../och/taxi/ui/TaxiAmapNaviFragment.java | 105 +------- .../com/mogo/och/taxi/ui/TaxiFragment.java | 2 - .../och/taxi/ui/TaxiMapDirectionView.java | 17 +- .../och/taxi/ui/TaxiRottingNaviFragment.java | 25 +- .../och/taxi/ui/TaxiServerOrdersFragment.java | 4 +- .../main/res/layout/taxi_amap_navi_view.xml | 2 +- .../res/layout/taxi_rotting_navi_view.xml | 13 +- 18 files changed, 380 insertions(+), 233 deletions(-) rename OCH/{mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java => mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java} (75%) create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt rename OCH/{mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java => mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java} (75%) create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java create mode 100644 OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png create mode 100755 OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png create mode 100644 OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png create mode 100644 OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml rename OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/{TaxiBeingServerdOrdersFragment.java => CommonBeingServerdOrdersFragment.java} (97%) diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java similarity index 75% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java index 1ea822836d..048a0baa0d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.model; +package com.mogo.och.common.module.map; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; @@ -25,9 +25,7 @@ import com.amap.api.navi.model.NaviLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; -import com.mogo.och.taxi.callback.ITaxiNaviChangedCallback; -import com.mogo.och.taxi.constant.TaxiConst; -import com.mogo.och.taxi.utils.PermissionUtil; +import com.mogo.och.common.module.utils.PermissionUtil; import java.util.ArrayList; import java.util.List; @@ -37,7 +35,7 @@ import java.util.concurrent.atomic.AtomicInteger; * @author: wangmingjun * @date: 2021/12/6 */ -public class NaviToDestinationModel implements AMapNaviListener { +public class AmapNaviToDestinationModel implements AMapNaviListener { public static final String TAG = "NaviToDestinationModel"; @@ -46,18 +44,18 @@ public class NaviToDestinationModel implements AMapNaviListener { protected final List sList = new ArrayList(); protected final List eList = new ArrayList(); protected List mWayPointList = new ArrayList(); - private ITaxiNaviChangedCallback mNaviChangedCallback; + private ICommonNaviChangedCallback mNaviChangedCallback; private AtomicInteger errorCount = new AtomicInteger(0); private boolean isPlay; - public static NaviToDestinationModel getInstance(Context context) { + public static AmapNaviToDestinationModel getInstance(Context context) { mContext = context; return SingletonHolder.INSTANCE; } private static final class SingletonHolder { - private static final NaviToDestinationModel INSTANCE = new NaviToDestinationModel(); + private static final AmapNaviToDestinationModel INSTANCE = new AmapNaviToDestinationModel(); } - private NaviToDestinationModel(){ + private AmapNaviToDestinationModel(){ } public void initAMapNavi(NaviLatLng startLatLng,NaviLatLng endLatLng) { try { @@ -94,7 +92,7 @@ public class NaviToDestinationModel implements AMapNaviListener { } } - public void setOCHTaciNaviChangedCallback(ITaxiNaviChangedCallback callback){ + public void setOCHTaciNaviChangedCallback(ICommonNaviChangedCallback callback){ this.mNaviChangedCallback = callback; } @Override @@ -170,11 +168,7 @@ public class NaviToDestinationModel implements AMapNaviListener { } return; } -// if (result.getErrorCode() == 3){ -// ToastUtils.showShort("车辆当前坐标错误"); -// }else if (result.getErrorCode() == 6){ -// ToastUtils.showShort("终点坐标错误"); -// } + CallerLogger.INSTANCE.i(M_TAXI + TAG, "路线计算失败:错误码=" + result.getErrorCode() + ",Error Message= " + result.getErrorDetail()); CallerLogger.INSTANCE.i(M_TAXI + TAG, "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/"); } @@ -346,88 +340,4 @@ public class NaviToDestinationModel implements AMapNaviListener { public void onPlayRing(int i) { } - - /** - * 车道信息说明: - *

- * 0xFF, 无对应车道 - * 0, 直行 - * 1, 左转 - * 2, 直行+左转 - * 3, 右转 - * 4, 直行+右转 - * 5, 左掉头 - * 6, 左转+右转 - * 7, 直行+左转+右转 - * 8, 右掉头 - * 9, 直行+左掉头 - * 10, 直行+右掉头 - * 11, 左转+左掉头 - * 12, 右转+右掉头 - * 13, 直行+扩展 - * 14, 左转+左掉头+扩展 - * 15, 保留 - * 16, 直行+左转+左掉头 - * 17, 右转+左掉头 - * 18, 左转+右转+左掉头 - * 19, 直行+右转+左掉头 - * 20, 左转+右掉头 - * 21, 公交车道 - * 22, 空车道 - * 23 可变车道 - */ - - String[] array = { - "直行车道" - , "左转车道" - , "左转或直行车道" - , "右转车道" - , "右转或直行车道" - , "左掉头车道" - , "左转或者右转车道" - , " 左转或右转或直行车道" - , "右转掉头车道" - , "直行或左转掉头车道" - , "直行或右转掉头车道" - , "左转或左掉头车道" - , "右转或右掉头车道" - , "直行并且车道扩展" - , "左转+左掉头+扩展" - , "不可以选择该车道" - , "直行+左转+左掉头车道" - , "右转+左掉头" - , "左转+右转+左掉头" - , "直行+右转+左掉头" - , "左转+右掉头" - , "公交车道" - , "空车道" - , "可变车道" - }; - - String[] actions = { - "直行" - , "左转" - , "左转或直行" - , "右转" - , "右转或这行" - , "左掉头" - , "左转或者右转" - , " 左转或右转或直行" - , "右转掉头" - , "直行或左转掉头" - , "直行或右转掉头" - , "左转或左掉头" - , "右转或右掉头" - , "直行并且车道扩展" - , "左转+左掉头+扩展" - , "不可以选择" - , "直行+左转+左掉头" - , "右转+左掉头" - , "左转+右转+左掉头" - , "直行+右转+左掉头" - , "左转+右掉头" - , "公交车道" - , "空车道" - , "可变车道" - }; } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt new file mode 100644 index 0000000000..887729704f --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt @@ -0,0 +1,249 @@ +package com.mogo.och.common.module.map + +import android.content.Context +import android.graphics.BitmapFactory +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.RelativeLayout +import com.amap.api.maps.AMap +import com.amap.api.maps.model.CustomMapStyleOptions +import com.amap.api.navi.AMapNaviView +import com.amap.api.navi.AMapNaviViewListener +import com.amap.api.navi.AMapNaviViewOptions +import com.amap.api.navi.model.RouteOverlayOptions +import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.R +import kotlinx.android.synthetic.main.taxi_common_amap_navi_view.view.* +import kotlin.concurrent.thread + +/** + * @author: wangmingjun + * @date: 2022/10/23 + */ +class CommonAmapNaviVIew @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0) + : RelativeLayout(context,attrs,defStyleAttr), AMapNaviViewListener { + + private val TAG : String = "TaxiAmapNaviVIew" + + var aMap : AMap? = null + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_common_amap_navi_view,this,true) + initMapView() + } + + private fun initMapView(){ + + amapNaviView.setAMapNaviViewListener(this) + //车头向上模式 + amapNaviView.naviMode = AMapNaviView.CAR_UP_MODE + aMap = amapNaviView.map + //关闭地图文字显示 + aMap!!.showMapText(false) + // 设置导航地图模式,aMap是地图控制器对象。 + aMap!!.mapType = AMap.MAP_TYPE_NIGHT + // 关闭显示实时路况图层,aMap是地图控制器对象。 + aMap!!.isTrafficEnabled = false + setMapViewOptions() + + thread(start = true){ + try { + Thread.sleep(1000L) + } catch (e : InterruptedException) { + e.printStackTrace() + } + + if (null == context){ + return@thread + } + + aMap!!.setCustomMapStyle( + CustomMapStyleOptions() + .setEnable(true) + .setStyleData(MapAssetStyleUtils.getAssetsStyle(context, "over_view_style.data")) + .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(context, "over_view_style_extra.data")) + ) + } + } + + private fun setMapViewOptions() { + + val options = AMapNaviViewOptions() + options.tilt = 0 //设置 2D 模式 + + options.isLayoutVisible = false //设置导航界面UI是否显示。 + + options.isTrafficBarEnabled = false //设置路况光柱条是否显示(只适用于驾车导航,需要联网)。 + + options.isAutoLockCar = true //设置6秒后是否自动锁车 + + options.isAutoDisplayOverview = true //设置是否自动全览模式,即在算路成功后自动进入全览模式 + + options.isTrafficLine = false + options.setModeCrossDisplayShow(true) //设置是否显示路口放大图(路口模型图) + + options.isAutoChangeZoom = true //自动缩放级别 + + options.carBitmap = + BitmapFactory.decodeResource(context.resources, R.drawable.taxi_navi_arrow_icon) + options.fourCornersBitmap = + BitmapFactory.decodeResource(this.resources, R.drawable.taxi_navi_direction_icon) + options.isAutoChangeZoom = true //设置是否开启动态比例尺 (锁车态下自动进行地图缩放变化) + +// options.setZoom(18);//14-18 +// options.setTrafficInfoUpdateEnabled(false); +// options.setTrafficLayerEnabled(false);//设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。 +// options.setCameraInfoUpdateEnabled(false); +// options.setCompassEnabled(false);//设置指南针图标否在导航界面显示,默认显示。 +// options.setLaneInfoShow(false);// 设置是否显示道路信息view +// options.setNaviArrowVisible(false);//设置路线转向箭头隐藏和显示 +// options.setRealCrossDisplayShow(false);//设置是否显示路口放大图(实景图) +// options.setRouteListButtonShow(true);//设置导航界面是否显示路线全览按钮。 +// options.setSettingMenuEnabled(false);//设置菜单按钮是否在导航界面显示。 + + // options.setZoom(18);//14-18 +// options.setTrafficInfoUpdateEnabled(false); +// options.setTrafficLayerEnabled(false);//设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。 +// options.setCameraInfoUpdateEnabled(false); +// options.setCompassEnabled(false);//设置指南针图标否在导航界面显示,默认显示。 +// options.setLaneInfoShow(false);// 设置是否显示道路信息view +// options.setNaviArrowVisible(false);//设置路线转向箭头隐藏和显示 +// options.setRealCrossDisplayShow(false);//设置是否显示路口放大图(实景图) +// options.setRouteListButtonShow(true);//设置导航界面是否显示路线全览按钮。 +// options.setSettingMenuEnabled(false);//设置菜单按钮是否在导航界面显示。 + val routeOverlayOptions = RouteOverlayOptions() + +// routeOverlayOptions.setArrowOnTrafficRoute(BitmapFactory.decodeResource(getResources(),R.drawable.custtexture_aolr)); + +// routeOverlayOptions.setArrowOnTrafficRoute(BitmapFactory.decodeResource(getResources(),R.drawable.custtexture_aolr)); + routeOverlayOptions.normalRoute = + BitmapFactory.decodeResource(resources, R.drawable.taxi_navi_line_icon) + options.routeOverlayOptions = routeOverlayOptions + + amapNaviView.viewOptions = options + } + + override fun onNaviSetting() { + //底部导航设置点击回调 + } + + override fun onNaviCancel() { + TODO("Not yet implemented") + } + + override fun onNaviBackClick(): Boolean { + return false + } + + override fun onNaviMapMode(p0: Int) { + //导航态车头模式,0:车头朝上状态;1:正北朝上模式。 + } + + override fun onNaviTurnClick() { + //转弯view的点击回调 + } + + override fun onNextRoadClick() { + //下一个道路View点击回调 + } + + override fun onScanViewButtonClick() { + //全览按钮点击回调 + } + + override fun onLockMap(p0: Boolean) { + //锁地图状态发生变化时回调 + } + + override fun onNaviViewLoaded() { + d(SceneConstant.M_TAXI + TAG, "导航页面加载成功") + d( + SceneConstant.M_TAXI + TAG, + "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑" + ) + } + + override fun onMapTypeChanged(p0: Int) { + TODO("Not yet implemented") + } + + override fun onNaviViewShowMode(p0: Int) { + TODO("Not yet implemented") + } + + fun onCreate(savedInstanceState : Bundle?){ + amapNaviView.onCreate(savedInstanceState) + } + + fun onResume(){ + amapNaviView.onResume() + } + + fun onPause(){ + amapNaviView.onPause() + } + + fun onDestroy(){ + amapNaviView.onDestroy() + } + + var array = arrayOf( + "直行车道", + "左转车道", + "左转或直行车道", + "右转车道", + "右转或直行车道", + "左掉头车道", + "左转或者右转车道", + " 左转或右转或直行车道", + "右转掉头车道", + "直行或左转掉头车道", + "直行或右转掉头车道", + "左转或左掉头车道", + "右转或右掉头车道", + "直行并且车道扩展", + "左转+左掉头+扩展", + "不可以选择该车道", + "直行+左转+左掉头车道", + "右转+左掉头", + "左转+右转+左掉头", + "直行+右转+左掉头", + "左转+右掉头", + "公交车道", + "空车道", + "可变车道" + ) + + var actions = arrayOf( + "直行", + "左转", + "左转或直行", + "右转", + "右转或这行", + "左掉头", + "左转或者右转", + " 左转或右转或直行", + "右转掉头", + "直行或左转掉头", + "直行或右转掉头", + "左转或左掉头", + "右转或右掉头", + "直行并且车道扩展", + "左转+左掉头+扩展", + "不可以选择", + "直行+左转+左掉头", + "右转+左掉头", + "左转+右转+左掉头", + "直行+右转+左掉头", + "左转+右掉头", + "公交车道", + "空车道", + "可变车道" + ) +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java similarity index 75% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java index 138de6b9b1..12440028bb 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java @@ -1,11 +1,11 @@ -package com.mogo.och.taxi.callback; +package com.mogo.och.common.module.map; /** * @author: wangmingjun * @date: 2021/12/3 */ -public interface ITaxiNaviChangedCallback { +public interface ICommonNaviChangedCallback { // 当前位置距离上车点的距离(米)、预估时间(秒) void onCurrentNaviDistAndTimeChanged(int meters, long timeInSecond); void reInitNaviAmap(boolean isPlay,boolean isRestart); -} +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java new file mode 100644 index 0000000000..8dac5fdf56 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java @@ -0,0 +1,35 @@ +package com.mogo.och.common.module.utils; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.location.LocationManager; + +import androidx.core.content.ContextCompat; + +/** + * @author: wangmingjun + * @date: 2021/12/7 + */ +public class PermissionUtil { + + public static boolean checkPermission(Context context,String... permissons) { + + for (String permisson : permissons) { + if ((ContextCompat.checkSelfPermission(context, + permisson) != PackageManager.PERMISSION_GRANTED)) { + return false; + } + } + return true; + } + + public static boolean isLocServiceEnable(Context context) { + LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); + boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + if (gps || network) { + return true; + } + return false; + } +} diff --git a/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a83b7c9e7415f5b9cc6e710376202f45e2869183 GIT binary patch literal 2663 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 literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f758d59992c742e4e1ad215dd6da4ec07d1445e GIT binary patch literal 542 zcmeAS@N?(olHy`uVBq!ia0vp^vOw&>!3HFsHP@&CDaPU;cPEB*=VV?2IWDOYo@u_m z3|c@o2Loe!CIbsd2@p#GF#`kh0!9XAAk7F8TfhXDm0iFLXFGrt%Kebl1}f|Dba4!c z;Cwsjpteh($g%yW4L;3i4YWDzv`}M~$4RFkvs2gR_3G&6N^oia41e=BE&E}e#UC!m+vp_x^iJ{VM4CT*?C{eo~#Lfx@P7l zzPS^+H`%}LFFN$yMeka?$t>YL&gRD&@^%{duok_0x+s3;XU}!-9<4ur`a!?{1KX~8 z``7oEf0=);;dOQVq8PXNOTyUs@@iJ)yx&`~`DkI5^r^z2RXpp3WYUfI$fz$p^+D@k jq1oZnn1b8>H-G0gh&TAy!MWuvC~iDm{an^LB{Ts5jTGLB literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml b/OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml new file mode 100644 index 0000000000..3d5f5aa763 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml @@ -0,0 +1,5 @@ + + diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 6a2fa36132..f48738f28a 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -38,6 +38,7 @@ import com.mogo.och.common.module.biz.constant.LoginStatusManager; import com.mogo.och.common.module.biz.constant.OchCommonConst; import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.och.common.module.utils.ToastUtilsOch; @@ -1250,12 +1251,25 @@ public class TaxiModel { } if (null != routeList && routeList.getWayPointsList().size() > 0) { updateOrderRoute(routeList.getWayPointsList()); + setRouteLineMarker(routeList.getWayPointsList()); updateOrderRouteInfo(routeList.getWayPointsList()); } } }; + /** + * 设置路径规划起终点 + * @param models + */ + private void setRouteLineMarker(List models) { + List latLngModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjListCommon(mContext,models); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.setLineMarker(latLngModels); + } + } + /** * 上报订单全路径规划数据 * @@ -1326,7 +1340,7 @@ public class TaxiModel { } //开启实时计算剩余距离,剩余时间,预计时间 startOrStopCalculateRouteInfo(true); - NaviToDestinationModel.getInstance(mContext).destroyAmaNavi(); + AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi(); } private void reportTotalDisAndTime() { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/NaviPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/NaviPresenter.java index d6050f2e0c..8cb3205aa9 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/NaviPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/NaviPresenter.java @@ -69,7 +69,8 @@ public class NaviPresenter extends Presenter implements @Override public void setLineMarker(List models) { - + if (models == null) return; + runOnUIThread(() -> mView.setLineMarker(models)); } @Override diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiBeingServerdOrdersFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/CommonBeingServerdOrdersFragment.java similarity index 97% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiBeingServerdOrdersFragment.java rename to OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/CommonBeingServerdOrdersFragment.java index ebc707400d..8c8ae53469 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiBeingServerdOrdersFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/CommonBeingServerdOrdersFragment.java @@ -29,17 +29,17 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.MogoMarkerManager; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; +import com.mogo.och.common.module.map.ICommonNaviChangedCallback; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.utils.OCHThreadPoolManager; -import com.mogo.och.taxi.callback.ITaxiNaviChangedCallback; import com.mogo.och.taxi.constant.TaxiConst; import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.R; import com.mogo.och.taxi.bean.OrderQueryRespBean; import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean; import com.mogo.och.taxi.model.TaxiModel; -import com.mogo.och.taxi.model.NaviToDestinationModel; import java.util.Calendar; import java.util.List; @@ -49,7 +49,8 @@ import java.util.List; * @since 2021/1/18 * 正在进行中订单 */ -public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implements View.OnClickListener, ITaxiNaviChangedCallback { +public class CommonBeingServerdOrdersFragment extends BaseTaxiUIFragment + implements View.OnClickListener, ICommonNaviChangedCallback { public static final String TAG = "OCHTaxiBeingServerd"; private static Activity mActivity; @@ -96,12 +97,12 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement private volatile int saveOrderState = -1; - public static TaxiBeingServerdOrdersFragment newInstance(Activity activity, TaxiFragment taxiFragment) { + public static CommonBeingServerdOrdersFragment newInstance(Activity activity, TaxiFragment taxiFragment) { mActivity = activity; mTaxiFragment = taxiFragment; Bundle args = new Bundle(); - TaxiBeingServerdOrdersFragment fragment = new TaxiBeingServerdOrdersFragment(); + CommonBeingServerdOrdersFragment fragment = new CommonBeingServerdOrdersFragment(); fragment.setArguments(args); return fragment; } @@ -341,20 +342,20 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement } private void startNaviToStation(boolean isVoicePlay, double stationLat, double stationLng) { - NaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); + AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); CallerLogger.INSTANCE.d(M_TAXI + TAG, "currentLatLng=" + mTaxiFragment.mCurLatitude + " " + mTaxiFragment.mCurLongitude); NaviLatLng startNaviLatLng = new NaviLatLng(mTaxiFragment.mCurLatitude, mTaxiFragment.mCurLongitude); NaviLatLng endNaviLatLng = new NaviLatLng(stationLat, stationLng); - NaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng); - NaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay); - NaviToDestinationModel.getInstance(getContext()).setOCHTaciNaviChangedCallback(this); + AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng); + AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay); + AmapNaviToDestinationModel.getInstance(getContext()).setOCHTaciNaviChangedCallback(this); } private void showOrHideNavi(boolean isShow) { if (!isShow) { mNaviStartIcon.setVisibility(View.GONE); mNaviToEndIcon.setVisibility(View.GONE); - NaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); + AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); mTaxiFragment.showAmapNaviToStationFragment(false); } } @@ -436,7 +437,7 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement @Override public void onDestroyView() { super.onDestroyView(); - NaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); + AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); } private void startOrEndService() { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiAmapNaviFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiAmapNaviFragment.java index 4255c9edf6..f112a4f47a 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiAmapNaviFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiAmapNaviFragment.java @@ -2,31 +2,24 @@ package com.mogo.och.taxi.ui; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; -import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; -import com.amap.api.maps.AMap; -import com.amap.api.maps.model.CustomMapStyleOptions; -import com.amap.api.navi.AMapNaviView; import com.amap.api.navi.AMapNaviViewListener; -import com.amap.api.navi.AMapNaviViewOptions; -import com.amap.api.navi.model.RouteOverlayOptions; -import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; +import com.mogo.och.common.module.map.ICommonNaviChangedCallback; +import com.mogo.och.common.module.map.CommonAmapNaviVIew; import com.mogo.och.taxi.R; -import com.mogo.och.taxi.callback.ITaxiNaviChangedCallback; -import com.mogo.och.taxi.model.NaviToDestinationModel; /** * @author: wangmingjun * @date: 2021/11/30 */ -public class TaxiAmapNaviFragment extends BaseTaxiUIFragment implements AMapNaviViewListener, View.OnClickListener { +public class TaxiAmapNaviFragment extends BaseTaxiUIFragment implements AMapNaviViewListener { - private AMapNaviView mAMapNaviView; - private AMap aMap; - private ITaxiNaviChangedCallback mNaviToStartInfoCallback; // 前往乘客上车点 + private CommonAmapNaviVIew mAMapNaviView; + private ICommonNaviChangedCallback mNaviToStartInfoCallback; public static TaxiAmapNaviFragment newInstance() { Bundle args = new Bundle(); @@ -43,105 +36,27 @@ public class TaxiAmapNaviFragment extends BaseTaxiUIFragment implements AMapNavi @Override protected void initViews(View view) { - view.bringToFront(); - initMapView(view); - } - - private void initMapView(View view) { - mAMapNaviView = view.findViewById(R.id.navi_view); - mAMapNaviView.setAMapNaviViewListener(this); - //车头向上模式 - mAMapNaviView.setNaviMode(AMapNaviView.CAR_UP_MODE); - aMap = mAMapNaviView.getMap(); - //关闭地图文字显示 - aMap.showMapText(false); - // 设置导航地图模式,aMap是地图控制器对象。 - aMap.setMapType(AMap.MAP_TYPE_NIGHT); - // 关闭显示实时路况图层,aMap是地图控制器对象。 - aMap.setTrafficEnabled(false); - setMapViewOptions(); - new Thread(() -> { - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - e.printStackTrace(); - } - if (null == getContext()){ - return; - } - aMap.setCustomMapStyle( - new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext(), "over_view_style.data")) - .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext(), "over_view_style_extra.data")) - ); - - //设置希望展示的地图缩放级别 - }).start(); } - private void setMapViewOptions() { - AMapNaviViewOptions options = new AMapNaviViewOptions(); - options.setTilt(0);//设置 2D 模式 - options.setLayoutVisible(false);//设置导航界面UI是否显示。 - options.setTrafficBarEnabled(false);//设置路况光柱条是否显示(只适用于驾车导航,需要联网)。 - options.setAutoLockCar(true);//设置6秒后是否自动锁车 - options.setAutoDisplayOverview(true);//设置是否自动全览模式,即在算路成功后自动进入全览模式 - options.setTrafficLine(false); - options.setModeCrossDisplayShow(true);//设置是否显示路口放大图(路口模型图) - options.setAutoChangeZoom(true);//自动缩放级别 - options.setCarBitmap(BitmapFactory.decodeResource(getContext().getResources(), R.drawable.taxi_navi_arrow_icon)); - options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.taxi_navi_direction_icon)); - options.setAutoChangeZoom(true);//设置是否开启动态比例尺 (锁车态下自动进行地图缩放变化) -// options.setZoom(18);//14-18 -// options.setTrafficInfoUpdateEnabled(false); -// options.setTrafficLayerEnabled(false);//设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。 -// options.setCameraInfoUpdateEnabled(false); -// options.setCompassEnabled(false);//设置指南针图标否在导航界面显示,默认显示。 -// options.setLaneInfoShow(false);// 设置是否显示道路信息view -// options.setNaviArrowVisible(false);//设置路线转向箭头隐藏和显示 -// options.setRealCrossDisplayShow(false);//设置是否显示路口放大图(实景图) -// options.setRouteListButtonShow(true);//设置导航界面是否显示路线全览按钮。 -// options.setSettingMenuEnabled(false);//设置菜单按钮是否在导航界面显示。 - - RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); - -// routeOverlayOptions.setArrowOnTrafficRoute(BitmapFactory.decodeResource(getResources(),R.drawable.custtexture_aolr)); - routeOverlayOptions.setNormalRoute(BitmapFactory.decodeResource(getResources(), R.drawable.taxi_navi_line_icon)); - options.setRouteOverlayOptions(routeOverlayOptions); - - mAMapNaviView.setViewOptions(options); - } - public void goToOverview(){ - if (mAMapNaviView.isRouteOverviewNow()){ - mAMapNaviView.recoverLockMode(); - }else { - mAMapNaviView.displayOverview(); - } - } - - @Override - public void onClick(View v) { -// if (v.getId() == R.id.navi_overviewbuttonview){ -// goToOverview(); -// } - } @Override protected void initViews(Bundle savedInstanceState) { super.initViews(savedInstanceState); + if (mAMapNaviView != null) mAMapNaviView.onCreate(savedInstanceState); } @Override public void onResume() { super.onResume(); + if (mAMapNaviView != null) mAMapNaviView.onResume(); } @Override public void onPause() { super.onPause(); + if (mAMapNaviView != null) mAMapNaviView.onPause(); } @@ -149,7 +64,7 @@ public class TaxiAmapNaviFragment extends BaseTaxiUIFragment implements AMapNavi public void onDestroy() { super.onDestroy(); - NaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(false); + AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(false); if (mAMapNaviView != null){ mAMapNaviView.onDestroy(); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java index 2738e1420a..219d5090b8 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java @@ -22,11 +22,9 @@ import com.mogo.module.common.MogoApisHandler; import com.mogo.och.common.module.biz.constant.OchCommonConst; import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.taxi.R; -import com.mogo.och.taxi.constant.TaxiConst; import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.bean.OrderQueryRespBean; import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.model.NaviToDestinationModel; import com.mogo.och.taxi.model.TaxiModel; import com.mogo.och.taxi.presenter.TaxiPresenter; import com.mogo.och.taxi.utils.TPRouteDataTestUtils; diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.java index 85e06be5bd..6ffc32d42e 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.java @@ -47,7 +47,7 @@ public class TaxiMapDirectionView implements IMoGoMapLocationListener, ITaxiMapDirectionView, AMap.OnCameraChangeListener { //小地图名称 - public static final String TAG = "TaxiMapDirectionView"; + public static final String TAG = "TPMapDirectionView"; private TextureMapView mAMapNaviView; private AMap mAMap; @@ -85,6 +85,7 @@ public class TaxiMapDirectionView } } + private void initView(Context context) { CallerLogger.INSTANCE.d(M_TAXI + TAG, "initView"); @@ -208,14 +209,11 @@ public class TaxiMapDirectionView @Override public void setLineMarker() { -// if (mStartMarker != null) { -// mStartMarker.setVisible(false); -// } -// if (mEndMarker != null) { -// mEndMarker.setVisible(false); -// } - if (mStartMarker.isVisible() && mStartMarker.isVisible()){ - return; + if (mStartMarker != null) { + mStartMarker.setVisible(false); + } + if (mEndMarker != null) { + mEndMarker.setVisible(false); } if (mCoordinatesLatLng.size() > 2) { // 设置开始结束Marker位置 @@ -231,7 +229,6 @@ public class TaxiMapDirectionView @Override public void drawablePolyline() { - setLineMarker(); if (mPolyline != null) { mPolyline.remove(); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiRottingNaviFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiRottingNaviFragment.java index 853c9ec895..e1318d866b 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiRottingNaviFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiRottingNaviFragment.java @@ -42,7 +42,14 @@ public class TaxiRottingNaviFragment extends MvpFragment latLngList){ + if (latLngList.size() > 0) { + if (mMapDirectionView != null) { + mMapDirectionView.setCoordinatesLatLng(latLngList); + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.setLineMarker(); + } + }); + } + } else { + clearPolyline(); + } + } + public void drawablePolylineByRoute(List mCoordinatesLatLng,int haveArrivedIndex){ if (mMapDirectionView != null){ mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng,haveArrivedIndex); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.java index eb8874dc3c..ce0f7bb40d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.java @@ -51,7 +51,7 @@ public class TaxiServerOrdersFragment extends BaseTaxiUIFragment { private ViewPager mTaxiOrderPager; private String[] mTabTitles = {"进行中","待服务"}; private List fragments = new ArrayList<>(); - private TaxiBeingServerdOrdersFragment beingServerdOrdersFragment = null; + private CommonBeingServerdOrdersFragment beingServerdOrdersFragment = null; private TaxiReserveOrdersFragment reserveOrdersFragment = null; @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @@ -82,7 +82,7 @@ public class TaxiServerOrdersFragment extends BaseTaxiUIFragment { if (0 == i){ mTaxiOrderTab.addTab(tab,true); changeTabLayoutTabUI(tab,true); - beingServerdOrdersFragment = TaxiBeingServerdOrdersFragment.newInstance(getActivity(),(TaxiFragment) getParentFragment()); + beingServerdOrdersFragment = CommonBeingServerdOrdersFragment.newInstance(getActivity(),(TaxiFragment) getParentFragment()); fragments.add(beingServerdOrdersFragment); }else if (1 == i){ mTaxiOrderTab.addTab(tab); diff --git a/OCH/mogo-och-taxi/src/main/res/layout/taxi_amap_navi_view.xml b/OCH/mogo-och-taxi/src/main/res/layout/taxi_amap_navi_view.xml index daf34f28bb..419da50519 100644 --- a/OCH/mogo-och-taxi/src/main/res/layout/taxi_amap_navi_view.xml +++ b/OCH/mogo-och-taxi/src/main/res/layout/taxi_amap_navi_view.xml @@ -8,7 +8,7 @@ app:cardUseCompatPadding="true" app:cardPreventCornerOverlap="false" app:cardBackgroundColor="@android:color/transparent"> - diff --git a/OCH/mogo-och-taxi/src/main/res/layout/taxi_rotting_navi_view.xml b/OCH/mogo-och-taxi/src/main/res/layout/taxi_rotting_navi_view.xml index 5d8207fd00..7d33b0f15a 100644 --- a/OCH/mogo-och-taxi/src/main/res/layout/taxi_rotting_navi_view.xml +++ b/OCH/mogo-och-taxi/src/main/res/layout/taxi_rotting_navi_view.xml @@ -1,16 +1,15 @@ - - + android:id="@+id/rotting_navi_view" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + \ No newline at end of file