diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java index c82d57dac4..334e0ede44 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java @@ -934,7 +934,7 @@ public class CarouselLayoutManager extends RecyclerView.LayoutManager implements } private CarouselSavedState(@NonNull final Parcel in) { - mSuperState = in.readParcelable(Parcelable.class.getClassLoader()); + mSuperState = in.readParcelable(RecyclerView.LayoutManager.class.getClassLoader()); mCenterItemPosition = in.readInt(); } diff --git a/OCH/mogo-och-shuttle-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt b/OCH/mogo-och-shuttle-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt index 6b669203e9..5ecbcb1992 100644 --- a/OCH/mogo-och-shuttle-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt +++ b/OCH/mogo-och-shuttle-passenger/src/m2/java/com/mogo/och/bus/passenger/model/PM2DrivingModel.kt @@ -300,7 +300,7 @@ class PM2DrivingModel private constructor() { private val mAutoPilotStatusListener: IMoGoAutopilotStatusListener = object : IMoGoAutopilotStatusListener { - override fun onAutopilotStatusResponse(state: Int) { //todo yakun 检查逻辑 + override fun onAutopilotStatusResponse(state: Int) { super.onAutopilotStatusResponse(state) d(SceneConstant.M_BUS_P+TAG, "onAutopilotStatusResponse ===== $state") if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != state){ diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java index 7b607580bd..badb7dee50 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java @@ -2,6 +2,7 @@ package com.mogo.och.taxi.passenger.callback; import com.amap.api.maps.model.LatLng; +import com.mogo.eagle.core.data.map.MogoLocation; import java.util.List; @@ -11,7 +12,7 @@ import mogo.telematics.pad.MessagePad; * @date: 2021/11/1 */ public interface IOCHTaxiPassengerAutopilotPlanningCallback { - void setLineMarker(List models); - void routeResultByServer(List models,int haveArrivedIndex); + void setLineMarker(LatLng startStation,LatLng endStation); + void routeResultByServer(List routeArriviedTemp, List routeArrivingTemp, MogoLocation location); void showRottingMapView(); } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index 6032de1855..83f5e3ae9b 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -48,6 +48,9 @@ import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; +import com.mogo.och.common.module.manager.trajectorymamager.IDistanceListener; +import com.mogo.och.common.module.manager.trajectorymamager.ITrajectoryListener; +import com.mogo.och.common.module.manager.trajectorymamager.TrajectoryAndDistanceManager; import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.PinYinUtil; @@ -254,6 +257,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); CallerMsgBoxEventListenerManager.INSTANCE.addListener(TAG,iMsgBoxEventListener); + + TrajectoryAndDistanceManager.INSTANCE.addDistanceListener(TAG,distanceListener); + + TrajectoryAndDistanceManager.INSTANCE.addTrajectoryListener(TAG,trajectoryListener); } private void releaseListeners() { @@ -274,6 +281,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null); CallerMsgBoxEventListenerManager.INSTANCE.removeListener(iMsgBoxEventListener); + + TrajectoryAndDistanceManager.INSTANCE.removeListener(TAG); } /** @@ -446,7 +455,27 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } + //监听网络变化,避免启动机器时无网导致无法更新订单信息 + private final IDistanceListener distanceListener = distance -> { + + }; + + private final ITrajectoryListener trajectoryListener = (routeArrivied, routeArriving, location) -> { + List routeArriviedTemp = new ArrayList<>(); + List routeArrivingTemp = new ArrayList<>(); + LatLng temp; + for (MogoLocation mogoLocation : routeArrivied) { + temp = new LatLng(mogoLocation.getLatitude(),mogoLocation.getLongitude()); + routeArriviedTemp.add(temp); + } + for (MogoLocation mogoLocation : routeArriving) { + temp = new LatLng(mogoLocation.getLatitude(),mogoLocation.getLongitude()); + routeArrivingTemp.add(temp); + } + mAutopilotPlanningCallback.routeResultByServer(routeArriviedTemp,routeArrivingTemp,location); + setRouteLineMarker(); + }; private final IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { @Override public void onIntentReceived( String intentStr, Intent intent ) { @@ -584,7 +613,6 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { if (null != routeList && routeList.getWayPointsList().size() > 0){ calculateRouteLineSum(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,routeList.getWayPointsList())); - setRouteLineMarker(routeList.getWayPointsList()); startToRouteAndWipe(routeList.getWayPointsList()); } } @@ -664,38 +692,26 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback * @param isStart */ public void startOrStopRouteAndWipe(boolean isStart){ - if (isStart){ - TaxiPassengerModelLoopManager.getInstance().startRouteAndWipe(); - }else { - mPreRouteIndex = 0; - TaxiPassengerModelLoopManager.getInstance().stopRouteAndWipe(); - } - } - public void loopRouteAndWipe() { - if (mLocationsModels != null && mLocationsModels.size() > 0 && mLocation != null){ - int haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndexNew(mPreRouteIndex, - mLocationsModels, - mLocation); - mPreRouteIndex = haveArrivedIndex; - if (mAutopilotPlanningCallback != null){ - List latLngsModels = CoordinateCalculateRouteUtil - .coordinateConverterLocationToLatLng(mContext, - mLocationsModels); - mAutopilotPlanningCallback.routeResultByServer(latLngsModels,haveArrivedIndex); - } - } } /** * 设置小地图路径的起终点marker */ - public void setRouteLineMarker(List models){ - List latLngModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjListCommon(mContext,models); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.setLineMarker(latLngModels); + public void setRouteLineMarker(){ + if (mCurrentOCHOrder.startSiteGcjPoint == null || mCurrentOCHOrder.startSiteGcjPoint.isEmpty() || mCurrentOCHOrder.startSiteGcjPoint.size() < 2|| + mCurrentOCHOrder.endSiteGcjPoint == null || mCurrentOCHOrder.endSiteGcjPoint.isEmpty() || mCurrentOCHOrder.endSiteGcjPoint.size() < 2) { + setMarker(null,null); + return; + } + LatLng startStation = new LatLng(mCurrentOCHOrder.startSiteGcjPoint.get(1),mCurrentOCHOrder.startSiteGcjPoint.get(0)); + LatLng endStation = new LatLng(mCurrentOCHOrder.endSiteGcjPoint.get(1),mCurrentOCHOrder.endSiteGcjPoint.get(0)); + setMarker(startStation,endStation); + } + + private void setMarker(LatLng startStation,LatLng endStation){ + if (mAutopilotPlanningCallback != null) { + mAutopilotPlanningCallback.setLineMarker(startStation,endStation); } } @@ -772,9 +788,9 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback if (data != null && data.data != null && data.data != null && data.data.size() > 0){ if (mAutopilotPlanningCallback != null){ calculateRouteLineSum(data.data); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.setLineMarker(data.data); - } +// if (mAutopilotPlanningCallback != null){ +// mAutopilotPlanningCallback.setLineMarker(data.data); +// } mLocationsModels.clear(); List locationsModels = CoordinateCalculateRouteUtil. coordinateConverterLatlngToLocation(data.data); @@ -1044,4 +1060,20 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } + public void setStation(){ + if(mCurrentOCHOrder!=null){ + MogoLocation startStation = new MogoLocation(); + startStation.setLongitude(mCurrentOCHOrder.startSiteGcjPoint.get(0)); + startStation.setLatitude(mCurrentOCHOrder.startSiteGcjPoint.get(1)); + MogoLocation endStation = new MogoLocation(); + endStation.setLongitude(mCurrentOCHOrder.endSiteGcjPoint.get(0)); + endStation.setLatitude(mCurrentOCHOrder.endSiteGcjPoint.get(1)); + TrajectoryAndDistanceManager.INSTANCE.setStationPoint(startStation,endStation); + } + } + + public void cleanStation(){ + TrajectoryAndDistanceManager.INSTANCE.setStationPoint(null,null); + } + } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java index f182ba65c3..bb3ebec0dc 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java @@ -59,45 +59,6 @@ public class TaxiPassengerModelLoopManager { } } - public void startRouteAndWipe() { - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startRouteAndWipe()"); - if (mRouteWipeDisposable != null) return; - - mRouteWipeDisposable = new CompositeDisposable(); - Disposable disposable = startLoopRouteAndWipe() - .doOnSubscribe(new Consumer() { - @Override - public void accept(Disposable disposable) throws Exception { - - } - }).doOnError(new Consumer() { - @Override - public void accept(Throwable throwable) throws Exception { - } - }) - .delay(TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(Integer integer) throws Exception { - } - }); - mRouteWipeDisposable.add(disposable); - } - - public Observable startLoopRouteAndWipe(){ - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - TaxiPassengerModel.getInstance().loopRouteAndWipe(); - emitter.onComplete(); - } - }); - } - public void stopRouteAndWipe() { if (mRouteWipeDisposable != null) { CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopRouteAndWipe()"); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index d61feb6cc9..3a0e4215c1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -173,6 +173,7 @@ public class BaseTaxiPassengerPresenter extends Presenter{ @@ -201,6 +203,7 @@ public class BaseTaxiPassengerPresenter extends Presenter models) { - if (models == null) return; - runOnUIThread(() -> mView.setLineMarker(models)); + public void setLineMarker(LatLng startStation,LatLng endStation) { + if (startStation == null || endStation == null) return; + runOnUIThread(() -> mView.setLineMarker(startStation,endStation)); } @Override - public void routeResultByServer(List models, int haveArrivedIndex) { - if (models == null) return; - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResultByServer:" + models.size() - + " haveArrivedIndex = " + haveArrivedIndex); - runOnUIThread(() ->mView.routeResultByServer(models,haveArrivedIndex)); + public void routeResultByServer(List routeArriviedTemp, List routeArrivingTemp, MogoLocation location) { + runOnUIThread(() ->mView.routeResultByServer(routeArriviedTemp,routeArrivingTemp,location)); } @Override diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java deleted file mode 100644 index 831abdbe23..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -/** - * @author xiaoyuzhou - * @date 2021/6/24 11:33 上午 - */ -public interface ITaxiPassengerMapDirectionView { - - /** - * 绘制路径线 - */ - void drawablePolyline(); - - /** - * 清除路径线 - */ - void clearPolyline(); - - /** - * 设置路径中起终点marker - */ - void setLineMarker(); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.kt new file mode 100644 index 0000000000..4db01025e5 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.kt @@ -0,0 +1,24 @@ +package com.mogo.och.taxi.passenger.ui + +import com.amap.api.maps.model.LatLng + +/** + * @author xiaoyuzhou + * @date 2021/6/24 11:33 上午 + */ +interface ITaxiPassengerMapDirectionView { + /** + * 绘制路径线 + */ + fun drawablePolyline() + + /** + * 清除路径线 + */ + fun clearPolyline() + + /** + * 设置路径中起终点marker + */ + fun setLineMarker(startStation: LatLng, endStation: LatLng) +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.java deleted file mode 100644 index 3a5a53d67a..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.java +++ /dev/null @@ -1,376 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.content.Context; -import android.os.Bundle; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.RelativeLayout; - -import androidx.annotation.Nullable; - -import com.amap.api.maps.AMap; -import com.amap.api.maps.CameraUpdate; -import com.amap.api.maps.CameraUpdateFactory; -import com.amap.api.maps.CoordinateConverter; -import com.amap.api.maps.TextureMapView; -import com.amap.api.maps.UiSettings; -import com.amap.api.maps.model.BitmapDescriptor; -import com.amap.api.maps.model.BitmapDescriptorFactory; -import com.amap.api.maps.model.CameraPosition; -import com.amap.api.maps.model.CustomMapStyleOptions; -import com.amap.api.maps.model.LatLng; -import com.amap.api.maps.model.LatLngBounds; -import com.amap.api.maps.model.Marker; -import com.amap.api.maps.model.MarkerOptions; -import com.amap.api.maps.model.Polyline; -import com.amap.api.maps.model.PolylineOptions; -import com.mogo.eagle.core.data.map.MogoLatLng; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener; -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback; -import com.mogo.och.taxi.passenger.utils.TaxiPassengerMapAssetStyleUtil; - -import java.util.ArrayList; -import java.util.List; - -/** - * 乘客屏小地图 - */ -public class TaxiPassengerMapDirectionView - extends RelativeLayout - implements IMoGoChassisLocationGCJ02Listener, ITaxiPassengerMapDirectionView, AMap.OnCameraChangeListener { - - //小地图名称 - public static final String TAG = "TPMapDirectionView"; - - private TextureMapView mAMapNaviView; - private AMap mAMap; - private Marker mCarMarker; - private Marker mStartMarker; - private Marker mEndMarker; - - private int zoomLevel = 13; - private List mCoordinatesLatLng = new ArrayList<>(); - private Polyline mPolyline; - private CameraUpdate mCameraUpdate; - private Context mContext; - private int mHaveArrivedIndex; - - List textureList = new ArrayList<>(); - List texIndexList = new ArrayList<>(); - - private BitmapDescriptor mArrivedRes; - private BitmapDescriptor mUnArrivedRes; - - private ITaxiPassengerMapViewCallback mITaxiPassengerMapViewCallback; - - public TaxiPassengerMapDirectionView(Context context) { - this(context, null); - } - - public TaxiPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public TaxiPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - try { - initView(context); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public void setTaxiPassengerMapViewCallback(ITaxiPassengerMapViewCallback ITaxiPassengerMapViewCallback){ - this.mITaxiPassengerMapViewCallback = ITaxiPassengerMapViewCallback; - } - - private void initView(Context context) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "initView"); - - mContext = context; - - View smpView = LayoutInflater.from(context).inflate(R.layout.taxi_p_map_view, this); - - mAMapNaviView = (TextureMapView) smpView.findViewById(R.id.taxi_p_order_amap_view); - - initAMapView(); - - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG, 10,this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG); - } - - private void initAMapView() { - mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); - mAMap = mAMapNaviView.getMap(); - // 设置导航地图模式,aMap是地图控制器对象。 - mAMap.setMapType(AMap.MAP_TYPE_NIGHT); - - // 关闭显示实时路况图层,aMap是地图控制器对象。 - mAMap.setTrafficEnabled(false); - - // 设置 锚点 图标 - mCarMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_car)) - .anchor(0.5f, 0.5f)); - mStartMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_start))); - mEndMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_end))); - - mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_arrived); - mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_un_arrive); - - // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(TaxiPassengerMapAssetStyleUtil.getAssetsStyle(getContext(),"map_style.data")) - .setStyleExtraData(TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(),"map_style_extra.data")); - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); - - //设置希望展示的地图缩放级别 - mAMap.moveCamera(mCameraUpdate); - - // 设置地图的样式 - UiSettings uiSettings = mAMap.getUiSettings(); - uiSettings.setZoomControlsEnabled(false);// 地图缩放级别的交换按钮 - uiSettings.setAllGesturesEnabled(false);// 所有手势 - uiSettings.setMyLocationButtonEnabled(false); // 显示默认的定位按钮 - uiSettings.setLogoBottomMargin(-150); //设置Logo下边界距离屏幕底部的边距,设置为负值即可 - - mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() { - @Override - public void onMapLoaded() { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "smp---onMapLoaded"); - // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(TaxiPassengerMapAssetStyleUtil.getAssetsStyle(getContext(),"map_style.data")) - .setStyleExtraData(TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(),"map_style_extra.data")); - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); - mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); - } - }); - - //设置地图状态的监听接口 - mAMap.setOnCameraChangeListener(this); - } - - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - return true; - } - - @Override - public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { - if (gnssInfo == null){ - return; - } - LatLng currentLatLng = new LatLng(gnssInfo.getLatitude(), gnssInfo.getLongitude()); - - if (mCoordinatesLatLng.size() > 1) { - //圈定地图显示范围 - LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); - //存放经纬度 - LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); - boundsBuilder.include(currentLatLng); - boundsBuilder.include(endLatLng); - //第二个参数为四周留空宽度 - mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100,100,100,100)); -// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--moveCamera :" + location.getLatitude()+", "+location.getLongitude()); - - } else { - //设置希望展示的地图缩放级别 - CameraPosition cameraPosition = new CameraPosition.Builder() - .target(mCarMarker.getPosition()).tilt(0).bearing((float) gnssInfo.getHeading()).zoom(zoomLevel).build(); - mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); - } - //更新车辆位置 - if (mCarMarker != null) { -// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "location.getBearing() = " + location.getBearing()); - mCarMarker.setRotateAngle((float) (360 - gnssInfo.getHeading())); - mCarMarker.setPosition(currentLatLng); -// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--loacation :" + location.getLatitude()+", "+location.getLongitude()); - mCarMarker.setToTop(); - } - } - - @Override - public void setLineMarker() { - if (mStartMarker != null) { - mStartMarker.setVisible(false); - } - if (mEndMarker != null) { - mEndMarker.setVisible(false); - } - if (mCoordinatesLatLng.size() >= 2) { - // 设置开始结束Marker位置 - LatLng startLatLng = mCoordinatesLatLng.get(0); - LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); - if (mStartMarker != null) { - mStartMarker.setPosition(startLatLng); - mStartMarker.setVisible(true); - } - - if (mEndMarker != null) { - mEndMarker.setPosition(endLatLng); - mEndMarker.setVisible(true); - } - } - } - - @Override - public void drawablePolyline() { - if (mPolyline != null) { - mPolyline.remove(); - } - if (mAMap != null) { - - addRouteColorList(); - - if (mCoordinatesLatLng.size() >= 2) { - //设置线段纹理 - PolylineOptions polylineOptions = new PolylineOptions(); - polylineOptions.addAll(mCoordinatesLatLng); - polylineOptions.setUseTexture(true); - polylineOptions.width(15); - polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); - polylineOptions.setCustomTextureList(textureList); - polylineOptions.setCustomTextureIndex(texIndexList); -// polylineOptions.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_un_arrive)); - - // 绘制线 - mPolyline = mAMap.addPolyline(polylineOptions); - - } - } - } - - /** - * 添加画线颜色值 - */ - private void addRouteColorList() { - textureList.clear(); - texIndexList.clear(); - for (int i = 0; i < mCoordinatesLatLng.size(); i++){ - if (i <= mHaveArrivedIndex){ - textureList.add(mArrivedRes); - }else { - textureList.add(mUnArrivedRes); - } - texIndexList.add(i); - } - } - - - public LatLng CoordinateConverterFrom84(Context mContext, MogoLatLng mogoLatLng) { - CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); - mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); - mCoordinateConverter.coord(new LatLng(mogoLatLng.lat, mogoLatLng.lon)); - LatLng latLng = mCoordinateConverter.convert(); - return latLng; - } - - public List CoordinateConverterFrom84ForList(Context mContext, List mogoLatLngList) { - List list = new ArrayList<>(); - for (MogoLatLng m : mogoLatLngList) { - LatLng mogoLatLng = CoordinateConverterFrom84(mContext, m); - list.add(mogoLatLng); - } - return list; - } - - @Override - public void clearPolyline() { - if (mPolyline != null) { - mPolyline.remove(); - } - if (mStartMarker != null) { - mStartMarker.setVisible(false); - } - if (mEndMarker != null) { - mEndMarker.setVisible(false); - } - } - - public void resetPolyine() { - mCoordinatesLatLng.clear(); - if (mPolyline != null) { - mPolyline.remove(); - } - if (mStartMarker != null) { - mStartMarker.setVisible(false); - } - if (mEndMarker != null) { - mEndMarker.setVisible(false); - } - } - - public void onCreateView(Bundle savedInstanceState) { - if (mAMapNaviView != null) { - mAMapNaviView.onCreate(savedInstanceState); - } - } - - public void onResume() { - if (mAMapNaviView != null) { - mAMapNaviView.onResume(); - } - } - - public void onPause() { - if (mAMapNaviView != null) { - mAMapNaviView.onPause(); - } - } - - public void onDestroy() { - if (mAMapNaviView != null) { - mAMapNaviView.onDestroy(); - } - } - - public void convert(List coordinates) { - mCoordinatesLatLng.clear(); - List latLngs = CoordinateConverterFrom84ForList(mContext, coordinates); - mCoordinatesLatLng.addAll(latLngs); - } - - public void setCoordinatesLatLng(List latLngs){ - mCoordinatesLatLng.clear(); - mCoordinatesLatLng.addAll(latLngs); - } - - public void setCoordinatesLatLng(List latLngs, int haveArrivedIndex){ - mCoordinatesLatLng.clear(); - mCoordinatesLatLng.addAll(latLngs); - mHaveArrivedIndex = haveArrivedIndex; - } - - @Override - public void onCameraChange(CameraPosition cameraPosition) { - mITaxiPassengerMapViewCallback.onCameraChange(cameraPosition.bearing); - } - - @Override - public void onCameraChangeFinish(CameraPosition cameraPosition) { - - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.kt new file mode 100644 index 0000000000..f918dc1956 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.kt @@ -0,0 +1,268 @@ +package com.mogo.och.taxi.passenger.ui + +import android.content.Context +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.MotionEvent +import android.widget.RelativeLayout +import com.amap.api.maps.AMap +import com.amap.api.maps.CameraUpdate +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.TextureMapView +import com.amap.api.maps.model.BitmapDescriptor +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.CustomMapStyleOptions +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.LatLngBounds +import com.amap.api.maps.model.Marker +import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.Polyline +import com.amap.api.maps.model.PolylineOptions +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.addListener +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback +import com.mogo.och.taxi.passenger.utils.TaxiPassengerMapAssetStyleUtil + +/** + * 乘客屏小地图 + */ +class TaxiPassengerMapDirectionView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, + ITaxiPassengerMapDirectionView, AMap.OnCameraChangeListener { + + companion object { + //小地图名称 + const val TAG = "TPMapDirectionView" + private const val zoomLevel = 13.0f + } + + private lateinit var mAMapNaviView: TextureMapView + private lateinit var mAMap: AMap + private lateinit var mCarMarker: Marker + private lateinit var mStartMarker: Marker + private lateinit var mEndMarker: Marker + private lateinit var mArrivedRes: BitmapDescriptor + private lateinit var mUnArrivedRes: BitmapDescriptor + + private val mCoordinatesLatLng: MutableList = ArrayList() + private var mPolyline: Polyline? = null + private var mCameraUpdate: CameraUpdate? = null + private var mContext: Context? = null + var textureList: MutableList = ArrayList() + var texIndexList: MutableList = ArrayList() + private var mITaxiPassengerMapViewCallback: ITaxiPassengerMapViewCallback? = null + + private val routeArrivied: MutableList = ArrayList() + private val routeArriving: MutableList = ArrayList() + private var location: MogoLocation? = null + + init { + initView(context) + } + + fun setTaxiPassengerMapViewCallback(ITaxiPassengerMapViewCallback: ITaxiPassengerMapViewCallback?) { + mITaxiPassengerMapViewCallback = ITaxiPassengerMapViewCallback + } + + private fun initView(context: Context) { + d(SceneConstant.M_TAXI_P + TAG, "initView") + mContext = context + LayoutInflater.from(context).inflate(R.layout.taxi_p_map_view, this) + mAMapNaviView = findViewById(R.id.taxi_p_order_amap_view) + initAMapView() + + // 注册定位监听 + addListener(TAG, 10, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + // 注册定位监听 + CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + } + + private fun initAMapView() { + mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel) + mAMap = mAMapNaviView.map + // 设置导航地图模式,aMap是地图控制器对象。 + mAMap.mapType = AMap.MAP_TYPE_NIGHT + + // 关闭显示实时路况图层,aMap是地图控制器对象。 + mAMap.isTrafficEnabled = false + + // 设置 锚点 图标 + mCarMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_car)).anchor(0.5f, 0.5f)) + mStartMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_start))) + mEndMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_end))) + mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_arrived) + mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_un_arrive) + + // 加载自定义样式 + val customMapStyleOptions = CustomMapStyleOptions() + .setEnable(true) + .setStyleData(TaxiPassengerMapAssetStyleUtil.getAssetsStyle(context, "map_style.data")) + .setStyleExtraData(TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data")) + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions) + + //设置希望展示的地图缩放级别 + mAMap.moveCamera(mCameraUpdate) + + // 设置地图的样式 + mAMap.uiSettings.apply { + isZoomControlsEnabled = false // 地图缩放级别的交换按钮 + setAllGesturesEnabled(false) // 所有手势 + isMyLocationButtonEnabled = false // 显示默认的定位按钮 + setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可 + } + + mAMap.setOnMapLoadedListener { + d(SceneConstant.M_TAXI_P + TAG, "smp---onMapLoaded") + // 加载自定义样式 + val options = CustomMapStyleOptions() + .setEnable(true) + .setStyleData( + TaxiPassengerMapAssetStyleUtil.getAssetsStyle(context, "map_style.data") + ) + .setStyleExtraData( + TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data") + ) + // 设置自定义样式 + mAMap.setCustomMapStyle(options) + mAMapNaviView.map.setPointToCenter(mAMapNaviView.width / 2, mAMapNaviView.height / 2) + } + + //设置地图状态的监听接口 + mAMap.setOnCameraChangeListener(this) + } + + override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { + return true + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + if (mogoLocation == null) { + return + } + val currentLatLng = LatLng(mogoLocation.latitude, mogoLocation.longitude) + if (mPolyline!=null&&!mPolyline!!.points.isNullOrEmpty()) { + //圈定地图显示范围 + val endLatLng = mPolyline!!.points.last() + //存放经纬度 + val boundsBuilder = LatLngBounds.Builder().apply { + include(currentLatLng) + include(endLatLng) + } + //第二个参数为四周留空宽度 + mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100, 100, 100, 100)) + } else { + //设置希望展示的地图缩放级别 + val cameraPosition = CameraPosition.Builder() + .target(mCarMarker.position) + .tilt(0f) + .bearing(mogoLocation.heading.toFloat()) + .zoom(zoomLevel).build() + mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) + } + //更新车辆位置 + mCarMarker.rotateAngle = (360 - mogoLocation.heading).toFloat() + mCarMarker.position = currentLatLng + mCarMarker.setToTop() + } + + override fun setLineMarker(startStation:LatLng,endStation:LatLng) { + mStartMarker.isVisible = false + mEndMarker.isVisible = false + mStartMarker.position = startStation + mStartMarker.isVisible = true + mEndMarker.position = endStation + mEndMarker.isVisible = true + } + + override fun drawablePolyline() { + if (routeArrivied.isEmpty() && routeArriving.isEmpty()) { + d(SceneConstant.M_TAXI + TAG, "没有点") + return + } + texIndexList.clear() + val allPoints = ArrayList(routeArrivied) + for (i in routeArrivied.indices) { + if (routeArrivied.size > 1 && i < routeArrivied.size - 1) { + texIndexList.add(0) + } + } + texIndexList.add(0) + allPoints.add(LatLng(location!!.latitude, location!!.longitude)) + allPoints.addAll(routeArriving) + for (ignored in routeArrivied) { + texIndexList.add(1) + } + if (mPolyline != null) { + mPolyline!!.points = allPoints + mPolyline!!.options.customTextureIndex = texIndexList + return + } + textureList.add(mArrivedRes) + textureList.add(mUnArrivedRes) + //设置线段纹理 + val polylineOptions = PolylineOptions().apply { + addAll(allPoints) + isUseTexture = true + width(15f) + lineCapType(PolylineOptions.LineCapType.LineCapRound) + customTextureList = textureList + customTextureIndex = texIndexList + } + + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions) + } + + override fun clearPolyline() { + if (mPolyline != null) { + mPolyline!!.remove() + } + mStartMarker.isVisible = false + mEndMarker.isVisible = false + } + + fun onCreateView(savedInstanceState: Bundle?) { + mAMapNaviView.onCreate(savedInstanceState) + } + + fun onResume() { + mAMapNaviView.onResume() + } + + fun onPause() { + mAMapNaviView.onPause() + } + + fun onDestroy() { + mAMapNaviView.onDestroy() + } + + fun setCoordinatesLatLng(routeArrivied: List?, routeArriving: List?, location: MogoLocation?) { + this.routeArrivied.clear() + this.routeArrivied.addAll(routeArrivied!!) + this.routeArriving.clear() + this.routeArriving.addAll(routeArriving!!) + this.location = location + } + + override fun onCameraChange(cameraPosition: CameraPosition) { + mITaxiPassengerMapViewCallback!!.onCameraChange(cameraPosition.bearing) + } + + override fun onCameraChangeFinish(cameraPosition: CameraPosition) {} +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java deleted file mode 100644 index c40834776b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java +++ /dev/null @@ -1,435 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.animation.Animator; -import android.animation.AnimatorInflater; -import android.os.Build; -import android.os.Bundle; -import android.os.Looper; -import android.view.View; -import android.view.animation.Animation; -import android.view.animation.RotateAnimation; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.appcompat.widget.AppCompatSeekBar; -import androidx.fragment.app.FragmentTransaction; - -import com.amap.api.maps.model.LatLng; -import com.mogo.commons.mvp.MvpFragment; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.common.module.map.AmapNaviToDestinationModel; -import com.mogo.och.common.module.map.CommonAmapNaviVIew; -import com.mogo.och.common.module.utils.DateTimeUtil; -import com.mogo.och.common.module.utils.NumberFormatUtil; -import com.mogo.och.common.module.wigets.OCHGradientTextView; -import com.mogo.och.common.module.wigets.OCHRadiusImageView; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; -import com.mogo.och.taxi.passenger.presenter.TaxiPassengerServingOrderPresenter; -import com.mogo.och.taxi.passenger.utils.TPRouteDataTestUtils; - -import java.util.Calendar; -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2022/3/8 - */ -public class TaxiPassengerServingOrderFragment extends - MvpFragment - implements TaxiPassengerTaxiView, ITaxiPassengerMapViewCallback { - - private final String TAG = TaxiPassengerServingOrderFragment.class.getSimpleName(); - - private OCHGradientTextView mTPSpeedTv; - private TextView mTPSpeedTvShadowBg; - - private TextView mTPOrderStatus; - private TextView mTPOrderStartStation; - private TextView mTPOrderEndStation; - private TextView mTPOrderRemainDis; - private TextView mTPOrderRemainDisUnit; - private TextView mTPOrderRemainTime; - private TextView mTPOrderRemainArriveTime; - private ImageView mMapArrowIcon; - - private TaxiPassengerMapDirectionView mMapRottingView; - private CommonAmapNaviVIew mAmapNaviVIew; - - private float lastBearing = 0; - private RotateAnimation rotateAnimation; - - private AppCompatSeekBar mProgressSeekBar; - private TextView mProgessDes; - - private OCHRadiusImageView mSpeedLayoutBg; - - private int mLimitingVelocity = 0;// 返回的道路限速值 - - public static TaxiPassengerServingOrderFragment newInstance() { - - Bundle args = new Bundle(); - - TaxiPassengerServingOrderFragment fragment = new TaxiPassengerServingOrderFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - protected int getLayoutId() { - return R.layout.taxi_p_activity_serving_order_view; - } - - @Override - public String getTagName() { - return "TaxiPassengerServingOrderFragment"; - } - - @Override - protected void initViews() { - - mTPSpeedTv = findViewById(R.id.taxi_p_speed_tv); - mTPSpeedTvShadowBg = findViewById(R.id.taxi_p_speed_tv_bg); - mTPSpeedTv.setVertrial(true); - mTPSpeedTv.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_speed_normal_color1),getResources().getColor(R.color.taxi_p_speed_normal_color2)}); - mTPSpeedTv.setText(String.valueOf(0)); - mTPSpeedTvShadowBg.setText(String.valueOf(0)); - - mTPOrderStatus = findViewById(R.id.taxi_p_order_status_tv); - mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv); - mTPOrderEndStation = findViewById(R.id.taxi_p_order_status_end_station_tv); - mTPOrderRemainDis = findViewById(R.id.taxi_p_order_remain_distance); - mTPOrderRemainDisUnit = findViewById(R.id.taxi_p_order_remain_distance_unit); - mTPOrderRemainTime = findViewById(R.id.taxi_p_order_remain_time); - mTPOrderRemainArriveTime = findViewById(R.id.taxi_p_order_remain_arrive_time); - - mMapArrowIcon = findViewById(R.id.taxi_p_arrow_nor); - mProgressSeekBar = findViewById(R.id.taxi_p_seekbar); - mProgessDes = findViewById(R.id.taxi_p_progress_des); - - mSpeedLayoutBg = findViewById(R.id.taxi_p_speed_bg); - - mTPOrderStatus.setOnLongClickListener(new View.OnLongClickListener() { //测试用 - @Override - public boolean onLongClick(View v) { - TPRouteDataTestUtils.converToRouteData(); - return true; - } - }); - - } - - @Override - protected void initViews(Bundle savedInstanceState) { - super.initViews(savedInstanceState); - initRouteNaviView(savedInstanceState); - initAmapNaviView(savedInstanceState); - } - - private void initAmapNaviView(Bundle savedInstanceState) { - mAmapNaviVIew = mRootView.findViewById(R.id.taxi_p_order_amap_navi_view); - mAmapNaviVIew.onCreate(savedInstanceState); - TaxiPassengerModel.getInstance().startNaviByAmap(); - } - - private void initRouteNaviView(Bundle savedInstanceState) { - mMapRottingView = mRootView.findViewById(R.id.taxi_p_order_rotting_map_view); - mMapRottingView.onCreateView(savedInstanceState); - mMapRottingView.setTaxiPassengerMapViewCallback(this); - } - - @NonNull - @Override - protected TaxiPassengerServingOrderPresenter createPresenter() { - return new TaxiPassengerServingOrderPresenter(this); - } - - /** - * 设置进度条最大值为 起点终点首次规划出的值 - */ - private void setSeekBarMax() { - //计算订单起点和终点距离 - int maxInt = SharedPrefsMgr.getInstance(getContext()).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0); - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "maxInt = " + maxInt); - mProgressSeekBar.setMax(maxInt); - } - - /** - * 行驶进度值更新 - */ - @RequiresApi(api = Build.VERSION_CODES.N) - private void updateDriveProcessLoading(int progressLoading) { - int progressInt = SharedPrefsMgr.getInstance(getContext()) - .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0) - progressLoading; - CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"progressInt = "+progressInt); - mProgressSeekBar.setProgress( - progressInt - , true); - mProgressSeekBar.jumpDrawablesToCurrentState(); - } - - private void updateDriveRoadName(String currentRoadName){ - if (mProgessDes != null){ - mProgessDes.setText(currentRoadName); - } - } - - @Override - public void onResume() { - super.onResume(); - if (mMapRottingView != null) { - mMapRottingView.onResume(); - } - if (mAmapNaviVIew != null){ - mAmapNaviVIew.onResume(); - } - TaxiPassengerModel.getInstance().initGeocodeSearch(); - } - - @Override - public void onHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - - if (hidden){//fragment 隐藏, 导航取消c - clearPolyline(); - TaxiPassengerModel.getInstance().destoryGeocodeSearch(); - }else { //fragment 显示, 导航开始 - CallerLogger.INSTANCE.e(M_TAXI_P +"TaxiPassengerNaviTo","initGeocodeSearch"); - TaxiPassengerModel.getInstance().initGeocodeSearch(); - } - } - - @Override - public void onPause() { - super.onPause(); - if (mMapRottingView != null) { - mMapRottingView.onPause(); - } - if (mAmapNaviVIew != null){ - mAmapNaviVIew.onPause(); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (mMapRottingView != null) { - mMapRottingView.onDestroy(); - } - if (mAmapNaviVIew != null){ - mAmapNaviVIew.onDestroy(); - } - AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); - TaxiPassengerModel.getInstance().destoryGeocodeSearch(); - } - - public void showRottingMapView(){ - if (mAmapNaviVIew != null && mAmapNaviVIew.getVisibility() == View.VISIBLE){ - mAmapNaviVIew.setVisibility(View.GONE); - } - if (mMapRottingView != null && mMapRottingView.getVisibility() == View.GONE){ - mMapRottingView.setVisibility(View.VISIBLE); - } - } - - public void setLineMarker(List latLngList){ - if (latLngList.size() > 0) { - if (mMapRottingView != null) { - mMapRottingView.setCoordinatesLatLng(latLngList); - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mMapRottingView.setLineMarker(); - } - }); - } - } else { - clearPolyline(); - } - } - - public void routeResultByServer(List latLngList,int haveArrivedIndex) { - if (latLngList.size() > 0) { - drawablePolylineByServerRoute(latLngList,haveArrivedIndex); - } else { - clearPolyline(); - } - } - - public void drawablePolylineByServerRoute(List mCoordinatesLatLng,int haveArrivedIndex){ - if (mMapRottingView != null){ - mMapRottingView.setCoordinatesLatLng(mCoordinatesLatLng,haveArrivedIndex); - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mMapRottingView.drawablePolyline(); - } - }); - } - } - private void clearPolyline() { - if (mMapRottingView != null) { - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - mMapRottingView.clearPolyline(); - } - }); - } - } - - public void updateOrderStatusView(TaxiPassengerOrderQueryRespBean.Result order) { - mTPOrderStartStation.setText(order.startSiteAddr); - mTPOrderEndStation.setText(order.endSiteAddr); - - if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus) { - mTPOrderStatus.setText(getString(R.string.taxi_p_arrive_to_start)); - mTPOrderRemainDis.setText("--"); - mTPOrderRemainTime.setText("--"); - mTPOrderRemainArriveTime.setText("--"); - setSeekBarMax(); - return; - } - - if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus) { - mTPOrderStatus.setText(R.string.taxi_p_start_to_end); - setSeekBarMax(); - return; - } - } - - /** - * 剩余里程,剩余时间,当前定位点所在道路 - * @param meters 单位 米 - * @param remainTime 单位 秒 - */ - @RequiresApi(api = Build.VERSION_CODES.N) - public void onCurrentOrderDistToEndChanged(long meters, long remainTime) { - String disUnit = "公里"; - String remainDis = "0"; - - if (meters > 0){ - if (meters / 1000 < 1){ - disUnit = "米"; - remainDis = String.valueOf(Math.round(meters)); - }else { - disUnit = "公里"; - remainDis = NumberFormatUtil.formatLong((double) meters / 1000); - } - } - - int time = (int)Math.ceil((double)remainTime/ 60f); - - Calendar beforeTime = Calendar.getInstance(); - beforeTime.add(Calendar.MINUTE,time); - String arriveTime = DateTimeUtil.formatCalendarToString(beforeTime,DateTimeUtil.HH_mm); - updateOrderDisAndTimeView(remainDis, disUnit,time, arriveTime); - updateDriveProcessLoading(new Long(meters).intValue()); - } - - public void onCurrentRoadName(String roadName){ - updateDriveRoadName(roadName); - } - - private void updateOrderDisAndTimeView(String remainDis, String remainDisUnit, int remainTime, String arriveTime) { - mTPOrderRemainDis.setText(remainDis); - mTPOrderRemainDisUnit.setText(remainDisUnit); - mTPOrderRemainTime.setText(String.valueOf(remainTime)); - mTPOrderRemainArriveTime.setText(arriveTime); - - } - - public void onCarLocationChanged(MogoLocation location) { - updateSpeedView((float) location.getGnssSpeed()); - } - - public void onLimitingVelocityChange(int limitingVelocity) { - mLimitingVelocity = limitingVelocity; - } - - /** - * 更新速度 - * - * @param newSpeed - */ - private void updateSpeedView(float newSpeed) { - int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值 - CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"mLimitingVelocity = "+mLimitingVelocity); -// if (mLimitingVelocity > 0 && speed >= mLimitingVelocity) { -// mTPSpeedTv.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_speed_warn_color1),getResources().getColor(R.color.taxi_p_speed_warn_color2)}); -// mTPSpeedTv.setText(String.valueOf(speed)); -// mTPSpeedTvShadowBg.setText(String.valueOf(speed)); -// -// mSpeedLayoutBg.setImageResource(R.drawable.taxi_p_speed_light_red_bg); -// } else { - mTPSpeedTv.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_speed_normal_color1),getResources().getColor(R.color.taxi_p_speed_normal_color2)}); - mTPSpeedTv.setText(String.valueOf(speed)); - mTPSpeedTvShadowBg.setText(String.valueOf(speed)); - - mSpeedLayoutBg.setImageResource(R.drawable.taxi_p_speed_light_green_bg); -// } - } - - private void runOnUIThread(Runnable executor) { - if (executor == null) { - return; - } - if (Looper.myLooper() != Looper.getMainLooper()) { - UiThreadHandler.post(executor); - } else { - executor.run(); - } - } - - @Override - public void onCameraChange(float bearing) { - startIvCompass(bearing); - } - - /** - * 设置指南针旋转 - * - * @param bearing - */ - private void startIvCompass(float bearing) { - bearing = 360 - bearing; - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startIvCompass: " + bearing); - rotateAnimation = new RotateAnimation(lastBearing, bearing, Animation.RELATIVE_TO_SELF - , 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); - rotateAnimation.setFillAfter(true); - - mMapArrowIcon.startAnimation(rotateAnimation); - lastBearing = bearing; - } - - @Nullable - @Override - public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { - if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) { - if (enter) {//普通的进入的动作 - return AnimatorInflater.loadAnimator(getContext(),R.animator.alpha_hide_show_f); - } else {//比如一个已经Fragmen被另一个replace,是一个进入动作,被replace的那个就是false - return AnimatorInflater.loadAnimator(getContext(),R.animator.alpha_hide_hide_f); - } - } else if (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE == transit) { - if (enter) {//之前被replace的重新进入到界面或者Fragment回到栈顶 - return AnimatorInflater.loadAnimator(getContext(),R.animator.alpha_hide_show_f); - } else {//Fragment退出,出栈 - return AnimatorInflater.loadAnimator(getContext(),R.animator.alpha_hide_hide_f); - } - } - return super.onCreateAnimator(transit,enter,nextAnim); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt new file mode 100644 index 0000000000..c5c828571d --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt @@ -0,0 +1,369 @@ +package com.mogo.och.taxi.passenger.ui + +import android.animation.Animator +import android.animation.AnimatorInflater +import android.os.Build +import android.os.Bundle +import android.view.View +import android.view.animation.Animation +import android.view.animation.RotateAnimation +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.RequiresApi +import androidx.appcompat.widget.AppCompatSeekBar +import androidx.fragment.app.FragmentTransaction +import com.amap.api.maps.model.LatLng +import com.mogo.commons.mvp.MvpFragment +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.map.AmapNaviToDestinationModel +import com.mogo.och.common.module.map.CommonAmapNaviVIew +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.NumberFormatUtil +import com.mogo.och.common.module.wigets.OCHGradientTextView +import com.mogo.och.common.module.wigets.OCHRadiusImageView +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst +import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import com.mogo.och.taxi.passenger.presenter.TaxiPassengerServingOrderPresenter +import com.mogo.och.taxi.passenger.utils.TPRouteDataTestUtils +import java.util.Calendar + +/** + * @author: wangmingjun + * @date: 2022/3/8 + */ +class TaxiPassengerServingOrderFragment : + MvpFragment(), + TaxiPassengerTaxiView, ITaxiPassengerMapViewCallback { + private val TAG = TaxiPassengerServingOrderFragment::class.java.simpleName + private var mTPSpeedTv: OCHGradientTextView? = null + private var mTPSpeedTvShadowBg: TextView? = null + private var mTPOrderStatus: TextView? = null + private var mTPOrderStartStation: TextView? = null + private var mTPOrderEndStation: TextView? = null + private var mTPOrderRemainDis: TextView? = null + private var mTPOrderRemainDisUnit: TextView? = null + private var mTPOrderRemainTime: TextView? = null + private var mTPOrderRemainArriveTime: TextView? = null + private var mMapArrowIcon: ImageView? = null + private var mMapRottingView: TaxiPassengerMapDirectionView? = null + private var mAmapNaviVIew: CommonAmapNaviVIew? = null + private var lastBearing = 0f + private var rotateAnimation: RotateAnimation? = null + private var mProgressSeekBar: AppCompatSeekBar? = null + private var mProgessDes: TextView? = null + private var mSpeedLayoutBg: OCHRadiusImageView? = null + private var mLimitingVelocity = 0 // 返回的道路限速值 + override fun getLayoutId(): Int { + return R.layout.taxi_p_activity_serving_order_view + } + + override fun getTagName(): String { + return "TaxiPassengerServingOrderFragment" + } + + override fun initViews() { + mTPSpeedTv = findViewById(R.id.taxi_p_speed_tv) + mTPSpeedTvShadowBg = findViewById(R.id.taxi_p_speed_tv_bg) + mTPSpeedTv!!.setVertrial(true) + mTPSpeedTv!!.setmColorList( + intArrayOf( + resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor( + R.color.taxi_p_speed_normal_color2 + ) + ) + ) + mTPSpeedTv!!.text = 0.toString() + mTPSpeedTvShadowBg!!.text = 0.toString() + mTPOrderStatus = findViewById(R.id.taxi_p_order_status_tv) + mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv) + mTPOrderEndStation = findViewById(R.id.taxi_p_order_status_end_station_tv) + mTPOrderRemainDis = findViewById(R.id.taxi_p_order_remain_distance) + mTPOrderRemainDisUnit = findViewById(R.id.taxi_p_order_remain_distance_unit) + mTPOrderRemainTime = findViewById(R.id.taxi_p_order_remain_time) + mTPOrderRemainArriveTime = findViewById(R.id.taxi_p_order_remain_arrive_time) + mMapArrowIcon = findViewById(R.id.taxi_p_arrow_nor) + mProgressSeekBar = findViewById(R.id.taxi_p_seekbar) + mProgessDes = findViewById(R.id.taxi_p_progress_des) + mSpeedLayoutBg = findViewById(R.id.taxi_p_speed_bg) + mTPOrderStatus!!.setOnLongClickListener { + TPRouteDataTestUtils.converToRouteData() + true + } + } + + override fun initViews(savedInstanceState: Bundle?) { + super.initViews(savedInstanceState) + initRouteNaviView(savedInstanceState) + initAmapNaviView(savedInstanceState) + } + + private fun initAmapNaviView(savedInstanceState: Bundle?) { + mAmapNaviVIew = findViewById(R.id.taxi_p_order_amap_navi_view) + mAmapNaviVIew?.onCreate(savedInstanceState) + TaxiPassengerModel.getInstance().startNaviByAmap() + } + + private fun initRouteNaviView(savedInstanceState: Bundle?) { + mMapRottingView = findViewById(R.id.taxi_p_order_rotting_map_view) + mMapRottingView?.onCreateView(savedInstanceState) + mMapRottingView?.setTaxiPassengerMapViewCallback(this) + } + + override fun createPresenter(): TaxiPassengerServingOrderPresenter { + return TaxiPassengerServingOrderPresenter(this) + } + + /** + * 设置进度条最大值为 起点终点首次规划出的值 + */ + private fun setSeekBarMax() { + //计算订单起点和终点距离 + val maxInt = SharedPrefsMgr.getInstance(requireContext()) + .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) + d(SceneConstant.M_TAXI_P + TAG, "maxInt = $maxInt") + mProgressSeekBar!!.max = maxInt + } + + /** + * 行驶进度值更新 + */ + @RequiresApi(api = Build.VERSION_CODES.N) + private fun updateDriveProcessLoading(progressLoading: Int) { + val progressInt = SharedPrefsMgr.getInstance(requireContext()) + .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - progressLoading + d(SceneConstant.M_TAXI_P + TAG, "progressInt = $progressInt") + mProgressSeekBar?.setProgress(progressInt, true) + mProgressSeekBar?.jumpDrawablesToCurrentState() + } + + private fun updateDriveRoadName(currentRoadName: String) { + mProgessDes?.text = currentRoadName + } + + override fun onResume() { + super.onResume() + mMapRottingView?.onResume() + mAmapNaviVIew?.onResume() + TaxiPassengerModel.getInstance().initGeocodeSearch() + } + + override fun onHiddenChanged(hidden: Boolean) { + super.onHiddenChanged(hidden) + if (hidden) { //fragment 隐藏, 导航取消c + clearPolyline() + TaxiPassengerModel.getInstance().destoryGeocodeSearch() + } else { //fragment 显示, 导航开始 + e(SceneConstant.M_TAXI_P + "TaxiPassengerNaviTo", "initGeocodeSearch") + TaxiPassengerModel.getInstance().initGeocodeSearch() + } + } + + override fun onPause() { + super.onPause() + mMapRottingView?.onPause() + mAmapNaviVIew?.onPause() + } + + override fun onDestroy() { + super.onDestroy() + mMapRottingView?.onDestroy() + mAmapNaviVIew?.onDestroy() + AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi() + TaxiPassengerModel.getInstance().destoryGeocodeSearch() + } + + fun showRottingMapView() { + if (mAmapNaviVIew != null && mAmapNaviVIew!!.visibility == View.VISIBLE) { + mAmapNaviVIew!!.visibility = View.GONE + } + if (mMapRottingView != null && mMapRottingView!!.visibility == View.GONE) { + mMapRottingView!!.visibility = View.VISIBLE + } + } + + fun setLineMarker(startStation: LatLng?, endStation: LatLng?) { + if (startStation != null && endStation != null) { + UiThreadHandler.post { mMapRottingView?.setLineMarker(startStation, endStation) } + } else { + clearPolyline() + } + } + + fun routeResultByServer( + routeArriviedTemp: List?, + routeArrivingTemp: List?, + location: MogoLocation + ) { + if (routeArriviedTemp.isNullOrEmpty()||routeArrivingTemp.isNullOrEmpty()) { + clearPolyline() + } else { + drawablePolylineByServerRoute(routeArriviedTemp, routeArrivingTemp,location) + } + } + + private fun drawablePolylineByServerRoute(routeArrivied: List?, + routeArriving: List?, + location: MogoLocation?) { + mMapRottingView?.setCoordinatesLatLng(routeArrivied, routeArriving,location) + UiThreadHandler.post { mMapRottingView?.drawablePolyline() } + } + + private fun clearPolyline() { + UiThreadHandler.post { mMapRottingView?.clearPolyline() } + } + + fun updateOrderStatusView(order: TaxiPassengerOrderQueryRespBean.Result) { + mTPOrderStartStation!!.text = order.startSiteAddr + mTPOrderEndStation!!.text = order.endSiteAddr + if (TaxiPassengerOrderStatusEnum.ArriveAtStart.code == order.orderStatus) { + mTPOrderStatus!!.text = getString(R.string.taxi_p_arrive_to_start) + mTPOrderRemainDis!!.text = "--" + mTPOrderRemainTime!!.text = "--" + mTPOrderRemainArriveTime!!.text = "--" + setSeekBarMax() + return + } + if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) { + mTPOrderStatus!!.setText(R.string.taxi_p_start_to_end) + setSeekBarMax() + return + } + } + + /** + * 剩余里程,剩余时间,当前定位点所在道路 + * @param meters 单位 米 + * @param remainTime 单位 秒 + */ + @RequiresApi(api = Build.VERSION_CODES.N) + fun onCurrentOrderDistToEndChanged(meters: Long, remainTime: Long) { + var disUnit = "公里" + var remainDis = "0" + if (meters > 0) { + if (meters / 1000 < 1) { + disUnit = "米" + remainDis = Math.round(meters.toFloat()).toString() + } else { + disUnit = "公里" + remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) + } + } + val time = Math.ceil(remainTime.toDouble() / 60f).toInt() + val beforeTime = Calendar.getInstance() + beforeTime.add(Calendar.MINUTE, time) + val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.HH_mm) + updateOrderDisAndTimeView(remainDis, disUnit, time, arriveTime) + updateDriveProcessLoading(meters.toInt()) + } + + fun onCurrentRoadName(roadName: String) { + updateDriveRoadName(roadName) + } + + private fun updateOrderDisAndTimeView( + remainDis: String, + remainDisUnit: String, + remainTime: Int, + arriveTime: String + ) { + mTPOrderRemainDis!!.text = remainDis + mTPOrderRemainDisUnit!!.text = remainDisUnit + mTPOrderRemainTime!!.text = remainTime.toString() + mTPOrderRemainArriveTime!!.text = arriveTime + } + + fun onCarLocationChanged(location: MogoLocation) { + updateSpeedView(location.gnssSpeed) + } + + fun onLimitingVelocityChange(limitingVelocity: Int) { + mLimitingVelocity = limitingVelocity + } + + /** + * 更新速度 + * + * @param newSpeed + */ + private fun updateSpeedView(newSpeed: Float) { + val speed = (Math.abs(newSpeed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值 + d(SceneConstant.M_TAXI_P + TAG, "mLimitingVelocity = $mLimitingVelocity") + mTPSpeedTv?.setmColorList( + intArrayOf( + resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor( + R.color.taxi_p_speed_normal_color2 + ) + ) + ) + mTPSpeedTv?.text = speed.toString() + mTPSpeedTvShadowBg?.text = speed.toString() + mSpeedLayoutBg?.setImageResource(R.drawable.taxi_p_speed_light_green_bg) + } + + override fun onCameraChange(bearing: Float) { + startIvCompass(360-bearing) + } + + /** + * 设置指南针旋转 + * + * @param bearing + */ + private fun startIvCompass(bearing: Float) { + d(SceneConstant.M_TAXI_P + TAG, "startIvCompass: $bearing") + rotateAnimation = RotateAnimation( + lastBearing, bearing, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f + ) + rotateAnimation!!.fillAfter = true + mMapArrowIcon!!.startAnimation(rotateAnimation) + lastBearing = bearing + } + + override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? { + if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) { + return if (enter) { //普通的进入的动作 + AnimatorInflater.loadAnimator( + context, + R.animator.alpha_hide_show_f + ) + } else { //比如一个已经Fragmen被另一个replace,是一个进入动作,被replace的那个就是false + AnimatorInflater.loadAnimator( + context, + R.animator.alpha_hide_hide_f + ) + } + } else if (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE == transit) { + return if (enter) { //之前被replace的重新进入到界面或者Fragment回到栈顶 + AnimatorInflater.loadAnimator( + context, + R.animator.alpha_hide_show_f + ) + } else { //Fragment退出,出栈 + AnimatorInflater.loadAnimator( + context, + R.animator.alpha_hide_hide_f + ) + } + } + return super.onCreateAnimator(transit, enter, nextAnim) + } + + companion object { + @JvmStatic + fun newInstance(): TaxiPassengerServingOrderFragment { + val args = Bundle() + val fragment = TaxiPassengerServingOrderFragment() + fragment.arguments = args + return fragment + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselLayoutManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselLayoutManager.java index e77f40efe4..326341e950 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselLayoutManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselLayoutManager.java @@ -934,7 +934,7 @@ public class CarouselLayoutManager extends RecyclerView.LayoutManager implements } private CarouselSavedState(@NonNull final Parcel in) { - mSuperState = in.readParcelable(Parcelable.class.getClassLoader()); + mSuperState = in.readParcelable(RecyclerView.LayoutManager.class.getClassLoader()); mCenterItemPosition = in.readInt(); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java index 7bd9a381ea..d837a76b89 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java @@ -37,7 +37,6 @@ public class TPRouteDataTestUtils { builder.setLongitude(s.getDouble("lon")); list.add(builder.build()); } - TaxiPassengerModel.getInstance().setRouteLineMarker(list); TaxiPassengerModel.getInstance().startToRouteAndWipe(list); } catch (JSONException e) { e.printStackTrace(); 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 deleted file mode 100644 index 69b7e40b4e..0000000000 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.java +++ /dev/null @@ -1,330 +0,0 @@ -package com.mogo.och.taxi.ui; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; - -import android.content.Context; -import android.os.Bundle; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.RelativeLayout; - -import androidx.annotation.Nullable; - -import com.amap.api.maps.AMap; -import com.amap.api.maps.CameraUpdate; -import com.amap.api.maps.CameraUpdateFactory; -import com.amap.api.maps.TextureMapView; -import com.amap.api.maps.UiSettings; -import com.amap.api.maps.model.BitmapDescriptor; -import com.amap.api.maps.model.BitmapDescriptorFactory; -import com.amap.api.maps.model.CameraPosition; -import com.amap.api.maps.model.CustomMapStyleOptions; -import com.amap.api.maps.model.LatLng; -import com.amap.api.maps.model.LatLngBounds; -import com.amap.api.maps.model.Marker; -import com.amap.api.maps.model.MarkerOptions; -import com.amap.api.maps.model.Polyline; -import com.amap.api.maps.model.PolylineOptions; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener; -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.taxi.R; -import com.mogo.och.taxi.utils.TaxiMapAssetStyleUtil; - -import java.util.ArrayList; -import java.util.List; - -/** - * taxi司机端前往目的地小地图导航 - */ -public class TaxiMapDirectionView - extends RelativeLayout - implements IMoGoChassisLocationGCJ02Listener, ITaxiMapDirectionView, AMap.OnCameraChangeListener { - - //小地图名称 - public static final String TAG = "TPMapDirectionView"; - - private TextureMapView mAMapNaviView; - private AMap mAMap; - private Marker mCarMarker; - private Marker mStartMarker; - private Marker mEndMarker; - - private final int zoomLevel = 13; - private final List routeArrivied = new ArrayList<>(); - private final List routeArriving = new ArrayList<>(); - private MogoLocation location; - - private LatLng startStation; - private LatLng endStation; - private Polyline mPolyline; - - List textureList = new ArrayList<>(); - List texIndexList = new ArrayList<>(); - - private BitmapDescriptor mArrivedRes; - private BitmapDescriptor mUnArrivedRes; - - public TaxiMapDirectionView(Context context) { - this(context, null); - } - - public TaxiMapDirectionView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public TaxiMapDirectionView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - try { - initView(context); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - private void initView(Context context) { - CallerLogger.INSTANCE.d(M_TAXI + TAG, "initView"); - - View smpView = LayoutInflater.from(context).inflate(R.layout.taxi_map_view, this); - - mAMapNaviView = smpView.findViewById(R.id.taxi_amap_view); - - initAMapView(); - - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG, 10, this); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG); - } - - private void initAMapView() { - CameraUpdate mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); - mAMap = mAMapNaviView.getMap(); - // 设置导航地图模式,aMap是地图控制器对象。 - mAMap.setMapType(AMap.MAP_TYPE_NIGHT); - - // 关闭显示实时路况图层,aMap是地图控制器对象。 - mAMap.setTrafficEnabled(false); - - // 设置 锚点 图标 - mCarMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_car)) - .anchor(0.5f, 0.5f)); - mStartMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_view_dir_start))); - mEndMarker = mAMap.addMarker(new MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_view_dir_end))); - mStartMarker.setVisible(false); - mEndMarker.setVisible(false); - - mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_arrow_arrived); - mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_arrow_un_arrive); - - // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(TaxiMapAssetStyleUtil.getAssetsStyle(getContext(), "map_style.data")) - .setStyleExtraData(TaxiMapAssetStyleUtil.getAssetsExtraStyle(getContext(), "map_style_extra.data")); - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); - - //设置希望展示的地图缩放级别 - mAMap.moveCamera(mCameraUpdate); - - // 设置地图的样式 - UiSettings uiSettings = mAMap.getUiSettings(); - uiSettings.setZoomControlsEnabled(false);// 地图缩放级别的交换按钮 - uiSettings.setAllGesturesEnabled(false);// 所有手势 - uiSettings.setMyLocationButtonEnabled(false); // 显示默认的定位按钮 - uiSettings.setLogoBottomMargin(-150); //设置Logo下边界距离屏幕底部的边距,设置为负值即可 - - mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() { - @Override - public void onMapLoaded() { - CallerLogger.INSTANCE.d(M_TAXI + TAG, "smp---onMapLoaded"); - // 加载自定义样式 - CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(TaxiMapAssetStyleUtil.getAssetsStyle(getContext(), "map_style.data")) - .setStyleExtraData(TaxiMapAssetStyleUtil.getAssetsExtraStyle(getContext(), "map_style_extra.data")); - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions); - mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); - } - }); - - //设置地图状态的监听接口 - mAMap.setOnCameraChangeListener(this); - } - - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - return true; - } - - @Override - public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { - if (gnssInfo == null) { - return; - } - try { - LatLng currentLatLng = new LatLng(gnssInfo.getLatitude(), gnssInfo.getLongitude()); - if (mPolyline!=null&&mPolyline.getPoints().size() > 1) { - List points = mPolyline.getPoints(); - //圈定地图显示范围 - LatLng endLatLng = points.get(points.size() - 1); - //存放经纬度 - LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); - boundsBuilder.include(currentLatLng); - boundsBuilder.include(endLatLng); - //第二个参数为四周留空宽度 - mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100, 100, 100, 100)); - - } else { - //设置希望展示的地图缩放级别 - CameraPosition cameraPosition = new CameraPosition.Builder() - .target(mCarMarker.getPosition()).tilt(0).bearing((float) gnssInfo.getHeading()).zoom(zoomLevel).build(); - mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); - } - //更新车辆位置 - if (mCarMarker != null) { - mCarMarker.setRotateAngle((float) (360 - gnssInfo.getHeading())); - mCarMarker.setPosition(currentLatLng); - mCarMarker.setToTop(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public void setLineMarker() { - if (mStartMarker != null && mEndMarker != null - && mStartMarker.isVisible() && mEndMarker.isVisible()) { - return; - } - - if (startStation != null && endStation != null) { - // 设置开始结束Marker位置 - if (mStartMarker != null) { - mStartMarker.setPosition(startStation); - mStartMarker.setVisible(true); - } - if (mEndMarker != null) { - mEndMarker.setPosition(endStation); - mEndMarker.setVisible(true); - } - } - } - - @Override - public void drawablePolyline() { - if(routeArrivied.isEmpty()&&routeArriving.isEmpty()){ - CallerLogger.INSTANCE.d(M_TAXI + TAG, "没有点"); - return; - } - texIndexList.clear(); - ArrayList allPoints = new ArrayList<>(routeArrivied); - for (int i = 0; i < routeArrivied.size(); i++) { - if(routeArrivied.size()>1&&i routeArrivied, List routeArriving, MogoLocation location) { - this.routeArrivied.clear(); - this.routeArrivied.addAll(routeArrivied); - this.routeArriving.clear(); - this.routeArriving.addAll(routeArriving); - this.location = location; - } - - @Override - public void onCameraChange(CameraPosition cameraPosition) { - - } - - @Override - public void onCameraChangeFinish(CameraPosition cameraPosition) { - - } -} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt new file mode 100644 index 0000000000..db83146586 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt @@ -0,0 +1,286 @@ +package com.mogo.och.taxi.ui + +import android.content.Context +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.MotionEvent +import android.widget.RelativeLayout +import com.amap.api.maps.AMap +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.TextureMapView +import com.amap.api.maps.model.BitmapDescriptor +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.CustomMapStyleOptions +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.LatLngBounds +import com.amap.api.maps.model.Marker +import com.amap.api.maps.model.MarkerOptions +import com.amap.api.maps.model.Polyline +import com.amap.api.maps.model.PolylineOptions +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.taxi.R +import com.mogo.och.taxi.utils.TaxiMapAssetStyleUtil + +/** + * taxi司机端前往目的地小地图导航 + */ +class TaxiMapDirectionView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, + ITaxiMapDirectionView, AMap.OnCameraChangeListener { + private lateinit var mAMapNaviView: TextureMapView + private lateinit var mAMap: AMap + private var mCarMarker: Marker? = null + private lateinit var mStartMarker: Marker + private lateinit var mEndMarker: Marker + private val zoomLevel = 13 + private val routeArrivied: MutableList = ArrayList() + private val routeArriving: MutableList = ArrayList() + private var location: MogoLocation? = null + private var startStation: LatLng? = null + private var endStation: LatLng? = null + private var mPolyline: Polyline? = null + var textureList: MutableList = ArrayList() + var texIndexList: MutableList = ArrayList() + private var mArrivedRes: BitmapDescriptor? = null + private var mUnArrivedRes: BitmapDescriptor? = null + + init { + try { + initView(context) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun initView(context: Context) { + d(SceneConstant.M_TAXI + TAG, "initView") + val smpView = LayoutInflater.from(context).inflate(R.layout.taxi_map_view, this) + mAMapNaviView = smpView.findViewById(R.id.taxi_amap_view) + initAMapView() + + // 注册定位监听 + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + // 注册定位监听 + CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + } + + private fun initAMapView() { + val mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel.toFloat()) + mAMap = mAMapNaviView.map + // 设置导航地图模式,aMap是地图控制器对象。 + mAMap.mapType = AMap.MAP_TYPE_NIGHT + + // 关闭显示实时路况图层,aMap是地图控制器对象。 + mAMap.isTrafficEnabled = false + + // 设置 锚点 图标 + mCarMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_car)).anchor(0.5f, 0.5f)) + mStartMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_view_dir_start))) + mEndMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_view_dir_end))) + mStartMarker.isVisible = false + mEndMarker.isVisible = false + mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_arrow_arrived) + mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_map_arrow_un_arrive) + + // 加载自定义样式 + val customMapStyleOptions = CustomMapStyleOptions() + .setEnable(true) + .setStyleData(TaxiMapAssetStyleUtil.getAssetsStyle(context, "map_style.data")) + .setStyleExtraData( + TaxiMapAssetStyleUtil.getAssetsExtraStyle( + context, + "map_style_extra.data" + ) + ) + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions) + + //设置希望展示的地图缩放级别 + mAMap.moveCamera(mCameraUpdate) + + // 设置地图的样式 + mAMap.uiSettings.apply { + isZoomControlsEnabled = false // 地图缩放级别的交换按钮 + setAllGesturesEnabled(false) // 所有手势 + isMyLocationButtonEnabled = false // 显示默认的定位按钮 + setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可 + } + mAMap.setOnMapLoadedListener(AMap.OnMapLoadedListener { + d(SceneConstant.M_TAXI + TAG, "smp---onMapLoaded") + // 加载自定义样式 + val customMapStyleOptions = CustomMapStyleOptions() + .setEnable(true) + .setStyleData(TaxiMapAssetStyleUtil.getAssetsStyle(context, "map_style.data")) + .setStyleExtraData( + TaxiMapAssetStyleUtil.getAssetsExtraStyle( + context, + "map_style_extra.data" + ) + ) + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions) + mAMapNaviView.map.setPointToCenter( + mAMapNaviView.width / 2, + mAMapNaviView.height / 2 + ) + }) + + //设置地图状态的监听接口 + mAMap.setOnCameraChangeListener(this) + } + + override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { + return true + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + if (mogoLocation == null) { + return + } + try { + val currentLatLng = LatLng(mogoLocation.latitude, mogoLocation.longitude) + if (mPolyline != null && mPolyline!!.points.size > 1) { + val points = mPolyline!!.points + //圈定地图显示范围 + val endLatLng = points[points.size - 1] + //存放经纬度 + val boundsBuilder = LatLngBounds.Builder() + boundsBuilder.include(currentLatLng) + boundsBuilder.include(endLatLng) + //第二个参数为四周留空宽度 + mAMap.moveCamera( + CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100, 100, 100, 100) + ) + } else { + //设置希望展示的地图缩放级别 + val cameraPosition = CameraPosition.Builder() + .target(mCarMarker!!.position).tilt(0f).bearing(mogoLocation.heading.toFloat()) + .zoom(zoomLevel.toFloat()).build() + mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) + } + //更新车辆位置 + if (mCarMarker != null) { + mCarMarker!!.rotateAngle = (360 - mogoLocation.heading).toFloat() + mCarMarker!!.position = currentLatLng + mCarMarker!!.setToTop() + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun setLineMarker() { + if (mStartMarker.isVisible && mEndMarker.isVisible + ) { + return + } + if (startStation != null && endStation != null) { + // 设置开始结束Marker位置 + mStartMarker.position = startStation + mStartMarker.isVisible = true + mEndMarker.position = endStation + mEndMarker.isVisible = true + } + } + + override fun drawablePolyline() { + if (routeArrivied.isEmpty() && routeArriving.isEmpty()) { + d(SceneConstant.M_TAXI + TAG, "没有点") + return + } + texIndexList.clear() + val allPoints = ArrayList(routeArrivied) + for (i in routeArrivied.indices) { + if (routeArrivied.size > 1 && i < routeArrivied.size - 1) { + texIndexList.add(0) + } + } + texIndexList.add(0) + allPoints.add(LatLng(location!!.latitude, location!!.longitude)) + allPoints.addAll(routeArriving) + for (ignored in routeArrivied) { + texIndexList.add(1) + } + if (mPolyline != null) { + mPolyline!!.points = allPoints + mPolyline!!.options.customTextureIndex = texIndexList + return + } + textureList.add(mArrivedRes) + textureList.add(mUnArrivedRes) + //设置线段纹理 + val polylineOptions = PolylineOptions().apply { + addAll(allPoints) + isUseTexture = true + width(15f) + lineCapType(PolylineOptions.LineCapType.LineCapRound) + customTextureList = textureList + customTextureIndex = texIndexList + } + + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions) + } + + override fun clearPolyline() { + if (mPolyline != null) { + mPolyline!!.remove() + } + mStartMarker.isVisible = false + mEndMarker.isVisible = false + } + + fun onCreateView(savedInstanceState: Bundle?) { + mAMapNaviView.onCreate(savedInstanceState) + } + + fun onResume() { + mAMapNaviView.onResume() + } + + fun onPause() { + mAMapNaviView.onPause() + } + + fun onDestroy() { + mAMapNaviView.onDestroy() + } + + fun setStartMarkAndEndMark(startStation: LatLng?, endStation: LatLng?) { + this.startStation = startStation + this.endStation = endStation + } + + fun setCoordinatesLatLng( + routeArrivied: List?, + routeArriving: List?, + location: MogoLocation? + ) { + this.routeArrivied.clear() + this.routeArrivied.addAll(routeArrivied!!) + this.routeArriving.clear() + this.routeArriving.addAll(routeArriving!!) + this.location = location + } + + override fun onCameraChange(cameraPosition: CameraPosition) {} + override fun onCameraChangeFinish(cameraPosition: CameraPosition) {} + + companion object { + //小地图名称 + const val TAG = "TPMapDirectionView" + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt index a16a7f3f71..afaaa4585a 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/obu/V2xObuEventManager.kt @@ -5,7 +5,6 @@ import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.V2XMsg -import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuSaveMessageListener import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.obu.CallerObuSaveMessageListenerManager @@ -37,20 +36,19 @@ object V2xObuEventManager : IMoGoObuSaveMessageListener { * @param content 事件内容 * @param tts 事件语音播报 //30秒内同一个事件只出现一次 TODO 临时添加,后面宏宇统一在数据中心处理 */ - override fun onMoGoObuSaveMessage(type: String, content: String, tts: String, source: DataSourceType) { + override fun onMoGoObuSaveMessage(type: String, content: String, tts: String, sourceType: DataSourceType) { if (content.isNotEmpty()) { if (obuDataMap.containsKey(type)) { - var oldTime = obuDataMap[type] - var timeDiff = (System.currentTimeMillis() - oldTime!!) / 1000 - if (timeDiff < 30) { - return + val oldTime = obuDataMap[type] + oldTime?.let { + val timeDiff = (System.currentTimeMillis() - it) / 1000 + if (timeDiff < 30) { + return + } + obuDataMap.remove(type) } - obuDataMap.remove(type) - obuDataMap[type] = System.currentTimeMillis() - } else { - obuDataMap[type] = System.currentTimeMillis() } - + obuDataMap[type] = System.currentTimeMillis() CallerLogger.d("${SceneConstant.M_OBU}${TAG}", "onMoGoObuSaveMessage type = $type ---content = $content ---tts = $tts ") CallerMsgBoxManager.saveMsgBox( MsgBoxBean( @@ -61,7 +59,7 @@ object V2xObuEventManager : IMoGoObuSaveMessageListener { tts ) ).apply { - sourceType = source + this.sourceType = sourceType } ) } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index c5db40725d..8e0b9fff59 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -27,13 +27,13 @@ import com.mogo.eagle.core.function.api.map.collect.IMoGoMapDataCollectProvider import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicStatusListenerManager import com.mogo.eagle.core.function.datacenter.autopilot.adapter.MoGoAdasListenerImpl import com.mogo.eagle.core.function.datacenter.autopilot.adapter.MoGoAdasMsgConnectStatusListenerImpl import com.mogo.eagle.core.function.datacenter.autopilot.server.AsyncDataToAutopilotServer import com.mogo.eagle.core.function.datacenter.autopilot.telematic.EventListener import com.mogo.eagle.core.function.datacenter.autopilot.telematic.IMsgHandler import com.mogo.eagle.core.function.datacenter.autopilot.telematic.TeleMsgHandler -import com.mogo.eagle.core.function.call.telematic.CallerTelematicStatusListenerManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C @@ -52,6 +52,7 @@ import com.mogo.telematic.server.netty.NettyTcpServer import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.AdasOptions import com.zhidao.support.adas.high.OnMultiDeviceListener +import com.zhidao.support.adas.high.chain.AdasChain import com.zhidao.support.adas.high.common.Constants import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS import com.zhidao.support.adas.high.common.CupidLogUtils @@ -321,6 +322,12 @@ class MoGoAutopilotControlProvider : CallerLogger.d("$M_D_C$TAG", "结束记录包: [$cmdId, $result]") } + @ChainLog( + linkChainLog = AdasChain.CHAIN_TYPE_SOCKET_AUTOPILOT, + linkCode = AdasChain.CHAIN_SOURCE_ADAS, + nodeAliasCode = AdasChain.CHAIN_CODE_ADAS_START_AUTOPILOT, + paramIndexes = [0] + ) override fun startAutoPilot(controlParameters: AutopilotControlParameters) { if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { val invokeResult = AdasManager.getInstance() @@ -858,7 +865,7 @@ class MoGoAutopilotControlProvider : } if (carConfigResp.dockVersion.isNotEmpty()) { - if (carConfigResp.dockVersion.contains("taxi")) { + if (carConfigResp.dockVersion.toLowerCase(Locale.getDefault()).contains("taxi")) { //修改雨天模式开关默认状态为开启(仅针对taxi320及以上的版本)-sop 215 val num = ParseVersionUtils.parseVersion(true, carConfigResp.dockVersion) if (num >= 30200) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/IPCUpgradeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/IPCUpgradeManager.kt index f8513dadd1..e42e314fa4 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/IPCUpgradeManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/upgrade/IPCUpgradeManager.kt @@ -30,6 +30,7 @@ class IPCUpgradeManager: IMogoOnMessageListener , private var mContext: Context? = null private val ipcUpgradeNetWorkModel = IPCUpgradeNetWorkModel() + @Volatile private var autopilotStatus: Int? = null //自动驾驶状态 0代表不可自动驾驶,1代表可自动驾驶,2代表自动驾驶中 private var hasIPCUpgradeTask = false //是否有工控机升级任务,默认没有该任务 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusView.kt index 424afa0987..f7d440bd53 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusView.kt @@ -49,7 +49,7 @@ class StatusView private constructor() { .setSidePattern(sidePattern) .setGravity(gravity, offsetY = 70) .setImmersionStatusBar(true) - .slideDel(false) + .slideDel(true) .setWindowHeight(currentHeight) .setWindowWidth(AutoSizeUtils.dp2px(context, 600f)) .setAnimator(object : DefaultAnimator() { @@ -69,9 +69,12 @@ class StatusView private constructor() { params: WindowManager.LayoutParams, windowManager: WindowManager, sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) + ): Animator? { + mStatusSummaryViewFloat = null + mStatusSummaryView = null + return super.exitAnim(view, params, windowManager, sidePattern) ?.setDuration(200) + } }) .show() } diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt index 46f3afc287..6203de28d4 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/view/SmallMapView.kt @@ -324,6 +324,12 @@ class SmallMapView @JvmOverloads constructor( if (globalPathResp == null || globalPathResp.wayPointsList.size == 0) { return } + if(CallerAutoPilotStatusListenerManager.getState() != 2){ + UiThreadHandler.post { + clearPolyline() + } + return + } val latLngList: MutableList = ArrayList() for (routeModel in globalPathResp.wayPointsList) { latLngList.add(MogoLatLng(routeModel.latitude, routeModel.longitude)) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 682c2f1d44..b55d391eb6 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -61,13 +61,6 @@ object CallerAutoPilotControlManager { * * @param controlParameters 开启自动驾驶的控制参数 */ - @ChainLog( - linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT, - linkCode = CHAIN_SOURCE_ADAS, - nodeAliasCode = CHAIN_CODE_EAGLE_START_AUTOPILOT, - paramIndexes = [0], - endPoint = false - ) fun startAutoPilot(controlParameters: AutopilotControlParameters?) { if (controlParameters == null) { //LogUtils.eTag(TAG, "自动驾驶控制参数异常,请检查参数信息") diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index 39d394dda7..e05950933e 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -841,12 +841,6 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * @param routeInfo 自动驾驶路径信息 * @return boolean */ - @ChainLog( - linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT, - linkCode = CHAIN_SOURCE_ADAS, - nodeAliasCode = CHAIN_CODE_ADAS_START_AUTOPILOT, - paramIndexes = {0, 1, 2} - ) @Override public boolean sendAutoPilotModeReq(int mode, int source, MessagePad.RouteInfo routeInfo) { MessagePad.SetAutopilotModeReq.Builder builder = MessagePad.SetAutopilotModeReq.newBuilder();