diff --git a/OCH/mogo-och-bus-passenger/build.gradle b/OCH/mogo-och-bus-passenger/build.gradle index 4bc7c0fd4c..f9be5b07ca 100644 --- a/OCH/mogo-och-bus-passenger/build.gradle +++ b/OCH/mogo-och-bus-passenger/build.gradle @@ -29,15 +29,13 @@ android { } buildTypes { - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - debug { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + debug { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } diff --git a/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data b/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data index 2be43925c7..ab077f9849 100644 Binary files a/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data and b/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data differ diff --git a/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data b/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data index 6a172a62e5..01f7f2116e 100644 Binary files a/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data and b/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data differ diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java index be1455d093..93e66bad7e 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java @@ -28,7 +28,7 @@ public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter stations){ this.mContext = context; @@ -58,15 +58,15 @@ public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter models); + void routeResult(List models,int haveArrivedIndex); void routePlanningToNextStationChanged(long meters, long timeInSecond); void setLineMarker(List models); + void updateTotalDistance(); } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt index 7f23e2f925..38f614a10b 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt @@ -41,5 +41,8 @@ class BusPassengerConst { //bus平均速度 const val BUS_AVERAGE_SPEED = 25 + + // 订单总里程 + const val BUS_SP_KEY_ORDER_SUM_DIS = "BUS_SP_KEY_ORDER_SUM_DIS" } } \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 5a6583960e..64830672fe 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -22,6 +22,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListen import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; 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.NetworkUtils; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; @@ -52,6 +53,7 @@ import java.util.concurrent.ConcurrentHashMap; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; +import system_master.SystemStatusInfo; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_STOPPED; @@ -82,6 +84,10 @@ public class BusPassengerModel { private double mLongitude, mLatitude; + List mStations = new ArrayList<>(); + private int mNextStationIndex = 0;// 要到达站的index + private List mTwoStationsRouts = new ArrayList<>(); + private BusPassengerModel() { } @@ -145,12 +151,22 @@ public class BusPassengerModel { mRouteLineInfoCallback.updateLineInfo(result.getName(),result.getRunningDur()); if (result.getSites() != null){ List stations = result.getSites(); + mStations.clear(); + mStations.addAll(stations); for (int i = 0; i< stations.size(); i++){ BusPassengerStation station = stations.get(i); if (station.getDrivingStatus() == STATION_STATUS_STOPPED && station.isLeaving() && i+1 < stations.size()){ mRouteLineInfoCallback.updateStationsInfo(stations,i+1,false); + if(mNextStationIndex != i+1){ + mTwoStationsRouts.clear(); + startRemainRouteInfo(); + } + mNextStationIndex = i+1; return; }else if (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving()){ + if (i == 0){ + startOrStopRouteAndWipe(false); + } startOrStopCalculateRouteInfo(false); mRouteLineInfoCallback.updateStationsInfo(stations,i,true); return; @@ -284,6 +300,8 @@ public class BusPassengerModel { } }; + private volatile int mPreAutoStatus = -1; + private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ @Override @@ -301,19 +319,25 @@ public class BusPassengerModel { public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; int state = autopilotStatusInfo.getState(); - CallerLogger.INSTANCE.d( M_BUS_P + TAG, "state = %s", state ); if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); - // TODO: 2022/3/31 + //2022.7.20 自动驾驶更换成带档位的 +// if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - // TODO: 2022/3/31 - - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); + if(state != mPreAutoStatus){ + mTwoStationsRouts.clear(); + } +// if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - // TODO: 2022/3/31 - - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + if(state != mPreAutoStatus){ + mTwoStationsRouts.clear(); + } +// if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + }else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){ + if(state != mPreAutoStatus){ + mTwoStationsRouts.clear(); + } } + mPreAutoStatus = state; } @Override @@ -337,6 +361,10 @@ public class BusPassengerModel { } } + @Override + public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + + } }; private final IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){ @@ -352,7 +380,6 @@ public class BusPassengerModel { List routePoints = routeList.getWayPointsList(); if (null != routePoints && routePoints.size() > 0){ updateRoutePoints(routePoints); - startRemainRouteInfo(); setRouteLineMarker(); startToRouteAndWipe(); } @@ -364,26 +391,64 @@ public class BusPassengerModel { List latLngModels = CoordinateCalculateRouteUtil .coordinateConverterWgsToGcjListCommon(mContext,routePoints); mRoutePoints.addAll(latLngModels); + calculateTwoStationsRoute(); + } + + private void calculateTwoStationsRoute(){ + //找出前往站对应的轨迹点,拿出两站点的集合 + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size()); + if (mRoutePoints.size() > 0) { + if (mStations.size() > 2){ //两个站点以上要计算两个站点间的估计路线 + if (mNextStationIndex <= mStations.size()-1 && mNextStationIndex - 1 >=0){ + mTwoStationsRouts.clear(); + BusPassengerStation stationNext = mStations.get(mNextStationIndex); + BusPassengerStation stationCur = mStations.get(mNextStationIndex - 1); + //当前站在轨迹中对应的点 + int currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndex(mRoutePoints + ,stationCur.getGcjLon(),stationCur.getGcjLat()); + //要前往的站在轨迹中对应的点 + int nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndex(mRoutePoints + ,stationNext.getGcjLon(),stationNext.getGcjLat()); + mTwoStationsRouts.addAll(mRoutePoints.subList(currentRouteIndex,nextRouteIndex)); + } + }else { //只有两个站点的时候整个路线就是两个站点之间的轨迹 + mTwoStationsRouts.clear(); + mTwoStationsRouts.addAll(mRoutePoints); + } + if (mTwoStationsRouts.size() > 0){ + float sumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(mTwoStationsRouts); + SharedPrefsMgr.getInstance(mContext).putInt(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS,(int) sumLength); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.updateTotalDistance(); + } + } + } } public void dynamicCalculateRouteInfo() { - List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mRoutePoints,mLongitude,mLatitude); - - float lastSumLength = 0; - if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 - lastSumLength = CoordinateUtils.calculateLineDistance( - lastPoints.get(0).longitude, lastPoints.get(0).latitude, - mLongitude, mLatitude); - }else { - lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + //计算当前位置和下一站的剩余点集合 + //计算剩余点总里程和时间 + if (mTwoStationsRouts.size() == 0){ + calculateTwoStationsRoute(); } - double lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 ; //秒 + if (mTwoStationsRouts.size() > 0){ + List lastPoints = CoordinateCalculateRouteUtil + .getRemainPointListByCompare(mTwoStationsRouts,mLongitude,mLatitude); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); + float lastSumLength = 0; + if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 + lastSumLength = CoordinateUtils.calculateLineDistance( + lastPoints.get(0).longitude, lastPoints.get(0).latitude, + mLongitude, mLatitude); + }else { + lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + } + double lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 ; //秒 + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "lastSumLength = " + lastSumLength); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); + } } - } public void startRemainRouteInfo() { @@ -409,10 +474,12 @@ public class BusPassengerModel { public void loopRouteAndWipe() { if (mRoutePoints != null && mRoutePoints.size() > 0){ - List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mRoutePoints,mLongitude,mLatitude); + int haveArrivedIndex = CoordinateCalculateRouteUtil + .getArrivedPointIndex(mRoutePoints,mLongitude,mLatitude); + + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "thread = "+ Thread.currentThread().getName()+" haveArrivedIndex== " + haveArrivedIndex); if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routeResult(lastPoints); + mAutopilotPlanningCallback.routeResult(mRoutePoints,haveArrivedIndex); } } } @@ -431,11 +498,11 @@ public class BusPassengerModel { * @param isStart */ public void startOrStopCalculateRouteInfo(boolean isStart) { - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startOrStopOrderLoop() " + isStart); + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startOrStopCalculateRouteInfo() " + isStart); if (isStart) { BusPassengerModelLoopManager.getInstance().startCalculateRouteInfoLoop(); } else { - mRoutePoints.clear(); + mTwoStationsRouts.clear(); BusPassengerModelLoopManager.getInstance().stopCalculateRouteInfLoop(); } } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java index d0d419c996..c37b463947 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java @@ -6,8 +6,12 @@ import com.mogo.och.bus.passenger.model.BusPassengerModel; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; @@ -24,8 +28,6 @@ public class BusPassengerModelLoopManager { private static final String TAG = BusPassengerModelLoopManager.class.getSimpleName(); - private Disposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 - private static final class SingletonHolder { private static final BusPassengerModelLoopManager INSTANCE = new BusPassengerModelLoopManager(); } @@ -35,27 +37,44 @@ public class BusPassengerModelLoopManager { } private Disposable mHeartbeatDisposable; //心跳轮询 - private Disposable mRouteWipeDisposable; //轨迹擦除 + private CompositeDisposable mRouteWipeDisposable; + private CompositeDisposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 public void startOrStopRouteAndWipe() { - if (mRouteWipeDisposable != null && !mRouteWipeDisposable.isDisposed()) { - return; - } CallerLogger.INSTANCE.i(M_BUS_P + TAG, "startOrStopRouteWipe()"); - mRouteWipeDisposable = Observable.interval(LOOP_DELAY, - LOOP_LINE_1S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) + if (mRouteWipeDisposable != null) return; + if (mRouteWipeDisposable == null){ + 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(LOOP_LINE_1S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 .subscribeOn(Schedulers.io()) + .repeat() // repeat保证请求成功后能够重新订阅。 + .retry() // retry保证请求失败后能重新订阅 .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> BusPassengerModel.getInstance().loopRouteAndWipe()); + .subscribe(new Consumer() { + @Override + public void accept(Integer integer) throws Exception { + } + }); + mRouteWipeDisposable.add(disposable); } public void stopOrStopRouteAndWipe() { - if (mRouteWipeDisposable != null) { - CallerLogger.INSTANCE.i(M_BUS_P + TAG, "stopOrStopRouteWipe()"); - mRouteWipeDisposable.dispose(); - mRouteWipeDisposable = null; - } + if (mRouteWipeDisposable != null) { + mRouteWipeDisposable.dispose(); + mRouteWipeDisposable = null; + } } public void startQueryDriverLineLoop() { @@ -80,16 +99,33 @@ public class BusPassengerModelLoopManager { } public void startCalculateRouteInfoLoop() { - if (mCalculateRouteDisposable != null && !mCalculateRouteDisposable.isDisposed()) { - return; - } CallerLogger.INSTANCE.i(M_BUS_P + TAG, "startCalculateRouteInfoLoop()"); - mCalculateRouteDisposable = Observable.interval(LOOP_DELAY, - LOOP_LINE_2S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) + if (mCalculateRouteDisposable != null) return; + if (mCalculateRouteDisposable == null){ + mCalculateRouteDisposable = new CompositeDisposable(); + } + Disposable disposable = startLoopCalculateRouteInfo() + .doOnSubscribe(new Consumer() { + @Override + public void accept(Disposable disposable) throws Exception { + } + }) + .doOnError(new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + } + }) + .delay(LOOP_LINE_2S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 .subscribeOn(Schedulers.io()) + .repeat() // repeat保证请求成功后能够重新订阅。 + .retry() // retry保证请求失败后能重新订阅 .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> BusPassengerModel.getInstance().dynamicCalculateRouteInfo()); + .subscribe(new Consumer() { + @Override + public void accept(Integer integer) throws Exception { + } + }); + mCalculateRouteDisposable.add(disposable); } public void stopCalculateRouteInfLoop() { @@ -99,4 +135,26 @@ public class BusPassengerModelLoopManager { mCalculateRouteDisposable = null; } } + + private Observable startLoopRouteAndWipe(){ + return Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + if (emitter.isDisposed()) return; + BusPassengerModel.getInstance().loopRouteAndWipe(); + emitter.onComplete(); + } + }); + } + + private Observable startLoopCalculateRouteInfo(){ + return Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + if (emitter.isDisposed()) return; + BusPassengerModel.getInstance().dynamicCalculateRouteInfo(); + emitter.onComplete(); + } + }); + } } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java index 51799eb526..b855057746 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java @@ -82,7 +82,7 @@ public class BaseBusPassengerPresenter extends Presenter models) { - runOnUIThread(() -> mView.routeResult(models)); + public void routeResult(List models, int haveArrivedIndex) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "routeResult:" + models.size() + + " haveArrivedIndex = "+haveArrivedIndex); + runOnUIThread(() ->mView.routeResult(models,haveArrivedIndex)); } @Override @@ -149,4 +151,9 @@ public class BaseBusPassengerPresenter extends Presenter models) { runOnUIThread(() -> mView.setLineMarker(models)); } + + @Override + public void updateTotalDistance() { + runOnUIThread(() -> mView.setProgressBarMax()); + } } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java index b7fee75b5c..e2b0ac575c 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java @@ -3,17 +3,24 @@ package com.mogo.och.bus.passenger.ui; import android.os.Bundle; import android.text.Html; import android.view.LayoutInflater; +import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; +import androidx.core.widget.ContentLoadingProgressBar; + import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerSmpManager; +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.passenger.R; +import com.mogo.och.bus.passenger.constant.BusPassengerConst; import com.mogo.och.common.module.utils.NumberFormatUtil; /** @@ -29,7 +36,7 @@ public abstract class BusPassengerBaseFragment 0){ @@ -119,6 +147,19 @@ public abstract class BusPassengerBaseFragment { // 3. 其他过程直接更新 @@ -139,4 +180,14 @@ public abstract class BusPassengerBaseFragment colorList = new ArrayList<>(); + List textureList = new ArrayList<>(); + List texIndexList = new ArrayList<>(); + private int mHaveArrivedIndex = 0; + private List mLineMarkers = new ArrayList<>(); private IBusPassengerMapViewCallback mIBusPassengerMapViewCallback; + private BitmapDescriptor mArrivedRes; + private BitmapDescriptor mUnArrivedRes; public BusPassengerMapDirectionView(Context context) { this(context, null); @@ -129,6 +134,9 @@ public class BusPassengerMapDirectionView mEndMarker = mAMap.addMarker(new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_view_dir_end_point))); + mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_arrived); + mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_un_arrive); + // 加载自定义样式 CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() .setEnable(true) @@ -178,12 +186,12 @@ public class BusPassengerMapDirectionView if (location == null) { return; } - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "onCarLocationChanged2 :" + location.getLatitude() + ":" + location.getLongitude()); +// CallerLogger.INSTANCE.d(M_BUS_P + TAG, "onCarLocationChanged2 :" + location.getLatitude() + ":" + location.getLongitude()); LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude()); //更新车辆位置 if (mCarMarker != null) { - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "location.getBearing() = " + location.getBearing()); +// CallerLogger.INSTANCE.d(M_BUS_P + TAG, "location.getBearing() = " + location.getBearing()); mCarMarker.setRotateAngle(360 - location.getBearing()); mCarMarker.setPosition(currentLatLng); mCarMarker.setToTop(); @@ -224,10 +232,13 @@ public class BusPassengerMapDirectionView //设置线段纹理 PolylineOptions polylineOptions = new PolylineOptions(); polylineOptions.addAll(mCoordinatesLatLng); - polylineOptions.colorValues(colorList); - polylineOptions.useGradient(true); - polylineOptions.width(10); //线段宽度 + polylineOptions.width(14); //线段宽度 + polylineOptions.setUseTexture(true); polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); + polylineOptions.setCustomTextureList(textureList); + polylineOptions.setCustomTextureIndex(texIndexList); +// polylineOptions.colorValues(colorList); +// polylineOptions.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow)); // 绘制线 mPolyline = mAMap.addPolyline(polylineOptions); @@ -240,8 +251,15 @@ public class BusPassengerMapDirectionView * 添加画线颜色值 */ private void addRouteColorList() { - for (int i = 0; i < mCoordinatesLatLng.size(); i++) { - colorList.add(Color.argb(255, 70, 147, 253));//路线颜色 + 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); } } @@ -280,7 +298,10 @@ public class BusPassengerMapDirectionView } public void clearCoordinatesLatLng(){ + textureList.clear(); + texIndexList.clear(); mCoordinatesLatLng.clear(); + mLinePointsLatLng.clear(); } public void onCreateView(Bundle savedInstanceState) { @@ -314,6 +335,12 @@ public class BusPassengerMapDirectionView mCoordinatesLatLng.addAll(latLngs); } + public void setCoordinatesLatLng(List latLngs,int haveArrivedIndex) { + mCoordinatesLatLng.clear(); + mCoordinatesLatLng.addAll(latLngs); + mHaveArrivedIndex = haveArrivedIndex; + } + public void clearLineMarkers(){ for (int i =0; i< mLineMarkers.size();i++){ mLineMarkers.get(i).setVisible(false); diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index e1b865de85..29ccf56f35 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -17,10 +17,12 @@ import com.amap.api.maps.model.LatLng; import com.elegant.utils.UiThreadHandler; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.och.bus.passenger.R; import com.mogo.och.bus.passenger.adapter.BusPassengerLineStationsAdapter; import com.mogo.och.bus.passenger.bean.BusPassengerStation; import com.mogo.och.bus.passenger.callback.IBusPassengerMapViewCallback; +import com.mogo.och.bus.passenger.constant.BusPassengerConst; import com.mogo.och.bus.passenger.presenter.BaseBusPassengerPresenter; import com.mogo.och.bus.passenger.utils.BPRouteDataTestUtils; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; @@ -139,10 +141,9 @@ public class BusPassengerRouteFragment extends } } - public void routeResult(List latLngList) { - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "routeResult:" + latLngList.size()); + public void routeResult(List latLngList,int haveArrivedIndex) { if (latLngList.size() > 0) { - drawablePolyline(latLngList); + drawablePolyline(latLngList,haveArrivedIndex); } else { clearPolyline(); } @@ -169,9 +170,9 @@ public class BusPassengerRouteFragment extends * * @param coordinates */ - private void drawablePolyline(List coordinates) { + private void drawablePolyline(List coordinates,int haveArrivedIndex) { if (mMapDirectionView != null) { - mMapDirectionView.setCoordinatesLatLng(coordinates); + mMapDirectionView.setCoordinatesLatLng(coordinates,haveArrivedIndex); UiThreadHandler.post(new Runnable() { @Override public void run() { @@ -245,8 +246,10 @@ public class BusPassengerRouteFragment extends } if (currentStationIndex == 0 && isArrived){ //到达始发站且并未出发, 恢复站点marker 清楚路径 清空路径点 - clearPolyline(); + SharedPrefsMgr.getInstance(getContext()) + .remove(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS); if (mMapDirectionView != null) mMapDirectionView.clearCoordinatesLatLng(); + clearPolyline(); } if (stations.size() > 0){ diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java index fb012b4143..edab28cb78 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java @@ -16,7 +16,7 @@ public class BusPassengerMapAssetStyleUtil { byte[] buffer1 = null; InputStream is1 = null; try { - is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style.data + is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style.data int lenght1 = is1.available(); buffer1 = new byte[lenght1]; is1.read(buffer1); @@ -39,7 +39,7 @@ public class BusPassengerMapAssetStyleUtil { byte[] buffer1 = null; InputStream is1 = null; try { - is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style_extra.data + is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style_extra.data int lenght1 = is1.available(); buffer1 = new byte[lenght1]; is1.read(buffer1); diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_arrow_arrived.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_arrow_arrived.png new file mode 100644 index 0000000000..445906d280 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_arrow_arrived.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_arrow_un_arrive.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_arrow_un_arrive.png new file mode 100644 index 0000000000..99d8bd7b56 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_arrow_un_arrive.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/station_arrow.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/station_arrow.png new file mode 100644 index 0000000000..114c7a2ba7 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/station_arrow.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_arrow_arrived.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_arrow_arrived.png new file mode 100644 index 0000000000..445906d280 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_arrow_arrived.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_arrow_un_arrive.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_arrow_un_arrive.png new file mode 100644 index 0000000000..99d8bd7b56 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_arrow_un_arrive.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/station_arrow.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/station_arrow.png new file mode 100644 index 0000000000..114c7a2ba7 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/station_arrow.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_panel_cur_station_panel.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_panel_cur_station_panel.xml new file mode 100644 index 0000000000..9cc2472376 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_panel_cur_station_panel.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml index 73fbe1f005..94dd7c0007 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml @@ -4,8 +4,8 @@ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_progress_bar_bg.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_progress_bar_bg.xml new file mode 100644 index 0000000000..aa1eeaecd0 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_progress_bar_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/progress_item_round.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/progress_item_round.xml new file mode 100644 index 0000000000..2d74f8fd54 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/progress_item_round.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml index 7a3b8aff27..03e16a4146 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml @@ -8,7 +8,7 @@ android:id="@+id/steering_wheel" android:layout_width="@dimen/dp_490" android:layout_height="@dimen/dp_490" - android:layout_marginLeft="@dimen/dp_22" + android:layout_marginLeft="@dimen/dp_50" android:layout_marginTop="@dimen/dp_88" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -28,69 +28,100 @@ + + + + + + + + + + + + + + - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + + app:layout_constraintRight_toLeftOf="@+id/bus_p_route_panel" /> \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml index 01bff7f219..58ae13004c 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml @@ -7,7 +7,7 @@ 60px 6px - 638px - 316px + 685px + 309px 50px - 38px + 10px 44px 55px 40px diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml b/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml index c32aec9eff..d4bfe96b27 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml @@ -51,7 +51,7 @@ 638px 316px 38px - 38px + 10px 44px 55px 40px diff --git a/OCH/mogo-och-bus/build.gradle b/OCH/mogo-och-bus/build.gradle index 91a03380a4..eea68114f8 100644 --- a/OCH/mogo-och-bus/build.gradle +++ b/OCH/mogo-och-bus/build.gradle @@ -61,12 +61,14 @@ dependencies { implementation rootProject.ext.dependencies.modulecommon implementation rootProject.ext.dependencies.mogo_core_data implementation rootProject.ext.dependencies.mogo_core_function_call + implementation rootProject.ext.dependencies.mogo_core_function_hmi }else { implementation project(":core:mogo-core-utils") implementation project(":foudations:mogo-commons") implementation project(':modules:mogo-module-common') implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-function-call') + implementation project(':core:function-impl:mogo-core-function-hmi') } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java index 9d2f0e6657..ba188d3bee 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java @@ -22,6 +22,11 @@ public class BusRoutesResult { public String txtFileMd5 = ""; //轨迹文件md5,默认“” public long contrailSaveTime; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 public String carModel = ""; //[optional] 车型号(如红旗H9),默认“”,暂不加入校验逻辑、用于人工排查问题 + public String csvFileUrlDPQP = ""; //轨迹文件下载的cos url,默认“” + public String csvFileMd5DPQP = ""; //轨迹文件md5,默认“” + public String txtFileUrlDPQP = ""; //打点文件下载的cos url,默认“” + public String txtFileMd5DPQP = ""; //轨迹文件md5,默认“” + public long contrailSaveTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 public int getLineId() { return lineId; @@ -54,6 +59,11 @@ public class BusRoutesResult { ", txtFileMd5='" + txtFileMd5 + '\'' + ", contrailSaveTime=" + contrailSaveTime + ", carModel='" + carModel + '\'' + + ", csvFileUrlDPQP='" + csvFileUrlDPQP + '\'' + + ", csvFileMd5DPQP='" + csvFileMd5DPQP + '\'' + + ", txtFileUrlDPQP='" + txtFileUrlDPQP + '\'' + + ", txtFileMd5DPQP='" + txtFileMd5DPQP + '\'' + + ", contrailSaveTimeDPQP=" + contrailSaveTimeDPQP + '}'; } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java index 4e8b00eb18..ce62d497e5 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java @@ -28,6 +28,8 @@ public class BusStationBean { private double lon; //高精坐标 private double lat; //高精坐标 private int businessType; //站点类型,9:taxi,10:bus + private double gcjLon; //高德 + private double gcjLat; //高德 private int status; private int siteId; private int seq; @@ -35,6 +37,14 @@ public class BusStationBean { private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 private boolean leaving; + public double getGcjLon() { + return gcjLon; + } + + public double getGcjLat() { + return gcjLat; + } + public void setName(String name) { this.name = name; } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java index 854a2699d5..ae4a8b9713 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java @@ -9,5 +9,5 @@ import java.util.List; * @date: 2021/10/22 */ public interface IRefreshBusStationsCallback { - void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived); + void refreshBusStations(String lineName,List stationList, int currentStation, int nextStation, boolean isArrived); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt index 740bb3c03d..bd1c823a13 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt @@ -71,6 +71,9 @@ class BusConst { */ const val TYPE_MARKER_BUS_ORDER = "TYPE_MARKER_BUS_ORDER" - const val TIMER_START_AUTOPILOT_INTERVAL = 10 * 1000L + const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L + + //围栏到站 暂定10米 + const val ARRIVE_AT_END_STATION_DISTANCE = 10 } } \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java index aaa13e9e27..c83715f9f1 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -5,7 +5,6 @@ import static com.mogo.och.bus.constant.BusConst.TIMER_START_AUTOPILOT_INTERVAL; import android.animation.ObjectAnimator; import android.content.Intent; -import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.animation.LinearInterpolator; @@ -15,6 +14,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.Group; @@ -31,6 +31,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; +import com.mogo.eagle.core.function.hmi.ui.widget.TrafficDataView; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; @@ -46,9 +47,9 @@ import com.mogo.och.bus.bean.BusRoutesResult; import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.model.BusOrderModel; import com.mogo.och.bus.util.BDRouteDataTestUtils; -import com.mogo.och.bus.view.BusArcView; import com.mogo.och.bus.view.SlidePanelView; +import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; /** @@ -68,12 +69,14 @@ public abstract class BaseBusTabFragment private TextView ctvAutopilotStatusTv; protected TextView tvOperationStatus; protected RelativeLayout mSettingBtn; - protected ImageView mBadcaseBtn; + protected RelativeLayout mBadcaseBtn; + protected RelativeLayout mAICollectBtn; public boolean isOperationStatus;//false-收车,true-出车 private FrameLayout flStationPanelContainer; private Group groupTestPanel; private FrameLayout flSpeed; - private BusArcView mouduleArc; +// private BusArcView mouduleArc; + private TrafficDataView mTrafficDataView; private ImageView mUpgradeTipIv; // private BusTrafficLightView mTrafficLightView; @@ -119,7 +122,7 @@ public abstract class BaseBusTabFragment tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status); flSpeed = (FrameLayout) findViewById(R.id.fl_speed); - mouduleArc = (BusArcView) findViewById(R.id.bus_arc); + mTrafficDataView = (TrafficDataView) findViewById(R.id.bus_arc); panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); @@ -147,8 +150,8 @@ public abstract class BaseBusTabFragment }); if (DebugConfig.isDebug()) { - mouduleArc.setLongClickable(true); - mouduleArc.setOnLongClickListener(v -> { + mTrafficDataView.setLongClickable(true); + mTrafficDataView.setOnLongClickListener(v -> { CallerLogger.INSTANCE.d(M_BUS + TAG, "长按显示状态工具栏"); Intent intent = new Intent(); intent.putExtra("oper", 52); @@ -203,7 +206,7 @@ public abstract class BaseBusTabFragment }); // mBadcaseBtn的visible显示逻辑在showBadcaseEntrance内处理 - mBadcaseBtn = findViewById(R.id.module_mogo_och_badcase_iv); + mBadcaseBtn = findViewById(R.id.module_mogo_och_badcase_rl); // CallerHmiManager.INSTANCE.registerBadCaseCallback( // () -> { // onShow() // return mBadcaseBtn; }, @@ -211,14 +214,16 @@ public abstract class BaseBusTabFragment // return null; }); if (mBadcaseBtn != null) { - CallerDevaToolsManager.INSTANCE.initBadCase(mBadcaseBtn, null, null); + CallerDevaToolsManager.INSTANCE.initBadCase(mBadcaseBtn); if (!HmiBuildConfig.isShowBadCaseView) { CallerAutopilotRecordListenerManager.INSTANCE.addListener(TAG, this); } } - //设置升级小红点提示 默认隐藏 - mUpgradeTipIv = findViewById(R.id.module_och_bus_upgrade_red_tip); - CallerHmiManager.INSTANCE.registerUpgradeTipsCallback(() -> mUpgradeTipIv); + + mAICollectBtn = findViewById(R.id.module_mogo_och_ai_collet_rl); + if (mAICollectBtn != null){ + CallerDevaToolsManager.INSTANCE.initAiCollect(mAICollectBtn); + } } private void updateSwitchMapIcon(){ @@ -246,9 +251,13 @@ public abstract class BaseBusTabFragment @Override public void onAutopilotRecordResult(@Nullable RecordPanelOuterClass.RecordPanel recordPanel) { - if (!HmiBuildConfig.isShowBadCaseView && recordPanel != null && recordPanel.getType() == 1 && recordPanel.getStat() == 100) { - CallerDevaToolsManager.INSTANCE.onReceiveBadCaseRecord(recordPanel); - } +// if (!HmiBuildConfig.isShowBadCaseView && recordPanel != null && recordPanel.getType() == 1 && recordPanel.getStat() == 100) { +// CallerDevaToolsManager.INSTANCE.onReceiveBadCaseRecord(recordPanel); +// } + } + + @Override + public void onAutopilotRecordConfig(@NonNull MessagePad.RecordDataConfig config) { } @@ -479,9 +488,9 @@ public abstract class BaseBusTabFragment */ public void updateSpeedView(float newSpeed) { int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值 - mouduleArc.setArcColor(Color.parseColor(speed > 60 ? "#DB3137" : "#3E77F6")); - mouduleArc.setValues(speed); - flSpeed.setBackgroundResource(speed > 60 ? R.drawable.bus_yi_biao_pan_bg_speeding : R.drawable.bus_yi_biao_pan_bg_nor); + if (mTrafficDataView != null){ + mTrafficDataView.updateSpeedWithValue(speed); + } } @Override @@ -521,6 +530,8 @@ public abstract class BaseBusTabFragment private TextView lineIdTV; private TextView trajMd5TV; private TextView stopMd5TV; + private TextView trajMd5DPQPTV; + private TextView stopMd5DPQPTV; public void showHideTestBar() { if (busTestBar == null) { @@ -528,6 +539,8 @@ public abstract class BaseBusTabFragment lineIdTV = findViewById(R.id.bus_test_bar_current_line_id); trajMd5TV = findViewById(R.id.bus_test_bar_current_traj_md5); stopMd5TV = findViewById(R.id.bus_test_bar_current_stop_md5); + trajMd5DPQPTV = findViewById(R.id.bus_test_bar_current_traj_md5_dpqp); + stopMd5DPQPTV = findViewById(R.id.bus_test_bar_current_stop_md5_dpqp); } if (busTestBar.getVisibility() == View.VISIBLE) { @@ -537,6 +550,8 @@ public abstract class BaseBusTabFragment lineIdTV.setText("lineId:" + (routesResult == null ? "" : String.valueOf(routesResult.getLineId()))); trajMd5TV.setText("TMd5:" + (routesResult == null ? "" : routesResult.csvFileMd5)); stopMd5TV.setText("SMd5:" + (routesResult == null ? "" : routesResult.txtFileMd5)); + trajMd5DPQPTV.setText("TMd5DPQP:" + (routesResult == null ? "" : routesResult.csvFileMd5DPQP)); + stopMd5DPQPTV.setText("SMd5DPQP:" + (routesResult == null ? "" : routesResult.txtFileMd5DPQP)); busTestBar.setVisibility(View.VISIBLE); } } @@ -547,6 +562,8 @@ public abstract class BaseBusTabFragment lineIdTV.setText("lineId:" + (routesResult == null ? "" : String.valueOf(routesResult.getLineId()))); trajMd5TV.setText("TMd5:" + (routesResult == null ? "" : routesResult.csvFileMd5)); stopMd5TV.setText("SMd5:" + (routesResult == null ? "" : routesResult.txtFileMd5)); + trajMd5DPQPTV.setText("TMd5DPQP:" + (routesResult == null ? "" : routesResult.csvFileMd5DPQP)); + stopMd5DPQPTV.setText("SMd5DPQP:" + (routesResult == null ? "" : routesResult.txtFileMd5DPQP)); } } /** diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java index 8b753cb167..ff6d6b5d2c 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -26,6 +26,7 @@ import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.presenter.BusPresenter; import com.mogo.och.bus.ui.BusSwitchLineActivity; import com.mogo.och.bus.view.SlidePanelView; +import com.mogo.och.common.module.utils.OCHThreadPoolManager; import java.util.List; @@ -42,11 +43,11 @@ public class BusFragment extends BaseBusTabFragment private static final String TAG = "BusFragment"; private TextView mCurrentStationName; - private TextView mStartStationFlag; private TextView mNextStationName; - private TextView mEndStationFlag; - // private TextView mDebugArrive; + private TextView mCurrentTag; + private TextView mNextTag; private TextView mSwitchLine; //切换路线 + private TextView mLineName; private int mCurrentStation = 0; private View mBus; @@ -64,11 +65,11 @@ public class BusFragment extends BaseBusTabFragment super.initViews(); mBus = findViewById(R.id.module_och_bus_tag); mCurrentStationName = findViewById(R.id.module_och_bus_current_station); - mStartStationFlag = findViewById(R.id.module_och_bus_start_station_tag); + mCurrentTag = findViewById(R.id.module_och_bus_current_station_anchor); mNextStationName = findViewById(R.id.module_och_bus_order_end_station); - mEndStationFlag = findViewById(R.id.module_och_bus_end_station_tag); + mNextTag = findViewById(R.id.module_och_bus_next_station_anchor); mSwitchLine = findViewById(R.id.switch_line_btn); -// mDebugArrive = findViewById(R.id.module_och_bus_arrive_station); + mLineName = findViewById(R.id.module_och_bus_line_name); if (DebugConfig.isDebug()) { mBus.setOnClickListener(view -> { @@ -76,10 +77,6 @@ public class BusFragment extends BaseBusTabFragment mPresenter.queryBusRoutes(); }); -// mBus.setOnLongClickListener(view -> { -// getActivity().finish(); -// return true; -// }); //debug下调用测试面板 mCurrentStationName.setOnLongClickListener(v -> { debugTestBar(); @@ -132,7 +129,8 @@ public class BusFragment extends BaseBusTabFragment * @param nextStation 下个站点 * @param isArrived 是否都站 */ - public void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived) { + public void refreshBusStations(String lineName,List stationList + , int currentStation, int nextStation, boolean isArrived) { mCurrentStation = currentStation; if (getActivity() == null) { return; @@ -144,25 +142,25 @@ public class BusFragment extends BaseBusTabFragment } // 渲染小巴路线数据 - renderCurrentStationStatus(stationList, currentStation, nextStation, isArrived); + renderCurrentStationStatus(lineName,stationList, currentStation, nextStation, isArrived); }); } /** * 重新刷新站点信息 isArrived 是否到站 */ - private void renderCurrentStationStatus(List stationList, int currentStation + private void renderCurrentStationStatus(String lineName,List stationList, int currentStation , int nextStation, boolean isArrived) { CallerLogger.INSTANCE.d(M_BUS + "MapMaker ", "currentStation=" + currentStation + ",nextStation=" + nextStation + "isArrived=" + isArrived); String currentStationName = null; String nextStationName = null; - int startStationFlagVisibility = View.INVISIBLE; - int endStationFlagVisibility = View.INVISIBLE; boolean isArriveEndStation = false; boolean isArriveAtStation = false; boolean isArriveAtStartStation = false; + mLineName.setText(lineName); + // 获取当前站点的名称 currentStationName = stationList.get(currentStation).getName(); @@ -171,9 +169,8 @@ public class BusFragment extends BaseBusTabFragment // 是否到达起点 if (currentStation == 0) { - startStationFlagVisibility = View.VISIBLE; isArriveAtStartStation = true; - mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_start)); + mCurrentTag.setText(getResources().getString(R.string.bus_arrive_to_end_start)); setOrRemoveMapMaker(true, BusConst.BUS_START_MAP_MAKER, startStation.getLat() , startStation.getLon(),R.raw.star_marker); @@ -181,6 +178,8 @@ public class BusFragment extends BaseBusTabFragment , endStation.getLon(),R.raw.end_marker); } else if (currentStation > 0 && currentStation < stationList.size() - 1) {// 是否到达站点 isArriveAtStation = true; + mCurrentTag.setText(getResources().getString(R.string.bus_arrive_to_current_tag)); + mNextTag.setText(getResources().getString(R.string.bus_arrive_to_next_tag)); setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() , startStation.getLon(),R.raw.star_marker); @@ -189,9 +188,7 @@ public class BusFragment extends BaseBusTabFragment } else if (currentStation == stationList.size() - 1) {// 是否到达终点 isArriveEndStation = true; nextStationName = "--"; - mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); - startStationFlagVisibility = View.VISIBLE; - endStationFlagVisibility = View.INVISIBLE; + mNextTag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() , startStation.getLon(),R.raw.star_marker); @@ -211,8 +208,16 @@ public class BusFragment extends BaseBusTabFragment } // 是否到达终点 - if (nextStation == stationList.size() - 1) { - endStationFlagVisibility = View.VISIBLE; + if ( nextStation == stationList.size() - 1 || nextStation == -1) { + mNextTag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); + }else { + mNextTag.setText(getResources().getString(R.string.bus_arrive_to_next_tag)); + } + + if (currentStation == 0 && isArrived){ + showOrHideSwitchLineBtn(true); + }else { + showOrHideSwitchLineBtn(false); } // 重置滑动按钮文字 @@ -226,12 +231,17 @@ public class BusFragment extends BaseBusTabFragment mCurrentStationName.setText(currentStationName); mNextStationName.setText(nextStationName); - mStartStationFlag.setVisibility(startStationFlagVisibility); - mEndStationFlag.setVisibility(endStationFlagVisibility); - updateBusTestBarInfo(); } + private void showOrHideSwitchLineBtn(boolean isShow) { + if (isShow){ + mSwitchLine.setVisibility(View.VISIBLE); + }else { + mSwitchLine.setVisibility(View.GONE); + } + } + public void hideOchBus() { // tvNotice.setVisibility(View.GONE); } @@ -328,27 +338,43 @@ public class BusFragment extends BaseBusTabFragment */ private void setOrRemoveMapMaker(boolean isAdd, String uuid, double lat, double longi,int resourceId) { if (isAdd) { - CallerLogger.INSTANCE.d(M_BUS + "setMapMaker= ", uuid + "=latitude=" + lat + ",longitude=" + longi); + Runnable setMapMarkerRunnable = new Runnable() { + @Override + public void run() { + CallerLogger.INSTANCE.d(M_BUS + "setMapMaker= "+Thread.currentThread().getName(), + uuid + "=latitude=" + lat + ",longitude=" + longi); - MogoMarkerOptions options = new MogoMarkerOptions() - .owner(BusConst.TYPE_MARKER_BUS_ORDER) - .anchor(0.5f, 0.5f) - .set3DMode(true) - .gps(true) - .controlAngle(true) - .icon3DRes(resourceId) - .latitude(lat) - .longitude(longi); - IMogoMarker marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .addMarker(uuid, options); - CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo( - longi,lat,-1); - if (null != centerLine){ // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 - marker.setRotateAngle(centerLine.getAngle().floatValue()); - } + MogoMarkerOptions options = new MogoMarkerOptions() + .owner(BusConst.TYPE_MARKER_BUS_ORDER) + .anchor(0.5f, 0.5f) + .set3DMode(true) + .gps(true) + .controlAngle(true) + .icon3DRes(resourceId) + .latitude(lat) + .longitude(longi); + IMogoMarker marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .addMarker(uuid, options); + CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo( + longi,lat,-1); + if (null != centerLine){ // 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 + marker.setRotateAngle(centerLine.getAngle().floatValue()); + } + } + }; + + OCHThreadPoolManager.getsInstance().execute(setMapMarkerRunnable); }else { - CallerLogger.INSTANCE.d(M_BUS + "RemoveMapMaker=",uuid+"=latitude="+lat+",longitude="+longi); - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(uuid); + Runnable removeMapMarkerRunnable = new Runnable() { + @Override + public void run() { + CallerLogger.INSTANCE.d(M_BUS + "RemoveMapMaker="+Thread.currentThread().getName(), + uuid+"=latitude="+lat+",longitude="+longi); + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(uuid); + } + }; + + OCHThreadPoolManager.getsInstance().execute(removeMapMarkerRunnable); } } @@ -374,5 +400,4 @@ public class BusFragment extends BaseBusTabFragment startActivity(intent); } } - } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index dfefe1f3bf..d875ea8929 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -11,11 +11,13 @@ import android.location.Location; import android.os.Handler; import android.os.Message; import android.text.TextUtils; +import android.util.Log; import androidx.annotation.NonNull; import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; +import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.voice.AIAssist; @@ -24,8 +26,10 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; @@ -79,7 +83,6 @@ import mogo.telematics.pad.MessagePad; public class BusOrderModel { private final String TAG = BusOrderModel.class.getSimpleName(); private int currentLineId = -1; - private int currentStationIndex = 0; //因为服务端和前台对于当前站不一致,所以设置两个current index, 一个用于前台展示, 一个用于服务端接口请求 private int backgroundCurrentStationIndex = 0;//A->B 此处值是A站点索引 /** * 运营状态、后端更具运营状态来判断车辆是否派单 @@ -111,6 +114,8 @@ public class BusOrderModel { private boolean hadQueryLeaveAwayPassager = false; + private volatile boolean isArrivedStation = false; + private final Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { @@ -246,12 +251,12 @@ public class BusOrderModel { * 上报订单全路径规划数据 */ public void updateOrderRoute() { - if (!isGoingToNextStation || currentStationIndex >= stationList.size() || currentStationIndex-1 < 0 || points.size() == 0){ + if (!isGoingToNextStation || backgroundCurrentStationIndex+1 >= stationList.size() || points.size() == 0){ return; } - BusStationBean currentStation = stationList.get( currentStationIndex -1); - BusStationBean nextStation = stationList.get( currentStationIndex); + BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); + BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex +1); BusServiceManager.getInstance().updateOrderRoute(mContext, currentLineId, currentStation.getSiteId() , nextStation.getSiteId(), points, new IBusServiceCallback() { @@ -376,9 +381,42 @@ public class BusOrderModel { if (mControllerStatusCallback != null) { mControllerStatusCallback.onCarLocationChanged(location); } + + //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 + if (isGoingToNextStation && !isArrivedStation){ + judgeStartStation(location); + } } }; + //根据围栏判断,是否到达起点 + private void judgeStartStation(Location location) { + + if (backgroundCurrentStationIndex +1 > stationList.size() - 1 ){ + return; + } + BusStationBean upcomingStation = stationList.get( backgroundCurrentStationIndex +1); + + double startLon = upcomingStation.getGcjLon(); + double startLat = upcomingStation.getGcjLat(); + double distance = CoordinateUtils.calculateLineDistance( + startLon, startLat, + location.getLongitude(), location.getLatitude() ); + + Logger.i(TAG, "judgeStartStation() distance = " + distance); + + if ( distance > BusConst.ARRIVE_AT_END_STATION_DISTANCE ) { + distance = CoordinateUtils.calculateLineDistance(startLon, startLat, + CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lon(), + CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lat()); + } + + if ( distance <= BusConst.ARRIVE_AT_END_STATION_DISTANCE ) { + onArriveAt(null); //无自动驾驶到站信息传null + return; + } + } + /** * 查询小巴路线 */ @@ -443,14 +481,14 @@ public class BusOrderModel { if ( o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty() ) { return; } + isArrivedStation = false; if (!isOneWayOver){ CallerLogger.INSTANCE.d( M_BUS + TAG, "自动驾驶开启开往下一站====" ); //需要更改当前站和下一站的状态 然后渲染 - RenderLeaveStationSuccess(o.getResult(),isRestart); + leaveStationSuccess(o.getResult(),isRestart); }else { CallerLogger.INSTANCE.d( M_BUS + TAG, "单程真的结束了====" ); isGoingToNextStation = false; - currentStationIndex = 0; backgroundCurrentStationIndex = 0; CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); queryBusRoutes(); @@ -480,7 +518,7 @@ public class BusOrderModel { paramIndexes = {0}, clientPkFileName = "sn" ) - private void RenderLeaveStationSuccess(BusRoutesResult result, boolean isRestart) { + private void leaveStationSuccess(BusRoutesResult result, boolean isRestart) { renderBusStationsStatus(result); if (slidePannelHideCallback != null) { slidePannelHideCallback.hideSlidePanel(); @@ -500,8 +538,12 @@ public class BusOrderModel { * @param isRestart */ private void startAutopilot(boolean isRestart) { - BusStationBean currentStation = stationList.get( currentStationIndex -1); - BusStationBean nextStation = stationList.get( currentStationIndex); + + triggerStartServiceEvent(isRestart, false); + + isArrivedStation = false; + BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); + BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex + 1); // if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE // == CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()) { @@ -523,14 +565,15 @@ public class BusOrderModel { busRoutesResult.getLineId(), busRoutesResult.csvFileUrl, busRoutesResult.csvFileMd5, busRoutesResult.txtFileUrl, busRoutesResult.txtFileMd5, - busRoutesResult.contrailSaveTime, busRoutesResult.carModel); + busRoutesResult.contrailSaveTime, busRoutesResult.carModel, + busRoutesResult.csvFileUrlDPQP, busRoutesResult.csvFileMd5DPQP, + busRoutesResult.txtFileUrlDPQP, busRoutesResult.txtFileMd5DPQP, + busRoutesResult.contrailSaveTimeDPQP); } CallerLogger.INSTANCE.d( M_BUS + TAG, "开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) +" startLatLon="+currentStation.getName()+",endLatLon="+nextStation.getName()); CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters); - triggerStartServiceEvent(isRestart, false); - if (mControllerStatusCallback != null) { mControllerStatusCallback.startOpenAutopilot(); } @@ -540,9 +583,18 @@ public class BusOrderModel { * 到站后重置站点状态 */ private void arriveSiteStation(boolean isRestart) { - CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation-currentStationIndex = "+currentStationIndex); + if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { //到站短时间内调用多次 + CallerLogger.INSTANCE.e( M_BUS + TAG, "数组越界" ); + return; + } + int arrivedStationIndex = 0; + if (!isRestart){ + arrivedStationIndex = backgroundCurrentStationIndex + 1; + } + CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation-currentStationIndex = "+ arrivedStationIndex); + BusServiceManager.getInstance().arriveSiteStation(mContext - , stationList.get(currentStationIndex).getSeq(), stationList.get(currentStationIndex).getSiteId() + , stationList.get(arrivedStationIndex).getSeq(), stationList.get(arrivedStationIndex).getSiteId() , new IBusServiceCallback() { @Override public void onSuccess(BaseData o) { @@ -567,9 +619,9 @@ public class BusOrderModel { private void renderArriveBusStation() { List site = busRoutesResult.getSites(); if (site != null && site.size() > 0){ - backgroundCurrentStationIndex = currentStationIndex; + backgroundCurrentStationIndex ++; if (refreshBusStationsCallback != null){ - refreshBusStationsCallback.refreshBusStations(stationList, currentStationIndex + refreshBusStationsCallback.refreshBusStations(busRoutesResult.getName(),stationList, backgroundCurrentStationIndex , getNextStopStation(),true); } } @@ -582,7 +634,7 @@ public class BusOrderModel { CallerLogger.INSTANCE.d( M_BUS + TAG, "查询到站下车乘客"); BusServiceManager.getInstance().queryStationLeaveAwayPassengers(mContext - , stationList.get(currentStationIndex).getSeq(), stationList.get(currentStationIndex).getSiteId() + , stationList.get(backgroundCurrentStationIndex +1).getSeq(), stationList.get(backgroundCurrentStationIndex+1).getSiteId() , new IBusServiceCallback() { @Override public void onSuccess(QueryLeaveAwayPassengersResponse o) { @@ -608,6 +660,7 @@ public class BusOrderModel { @Override public void onSuccess(BaseData o) { mIsWorking = !mIsWorking; + closeBeautificationMode(); carOperationStatusCallback.changeOperationStatus(isWorking()); startOrStopOrderLoop(mIsWorking); BusTrajectoryManager.getInstance().stopTrajReqLoop(); @@ -623,6 +676,17 @@ public class BusOrderModel { }); } + /** + * 关闭美化模式 + */ + private void closeBeautificationMode() { + if (FunctionBuildConfig.isDemoMode) {//收车结束美化 + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); + CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为false(收车)"); + } + } + /** * 出车 */ @@ -634,7 +698,7 @@ public class BusOrderModel { startOrStopOrderLoop(mIsWorking); if ( stationList != null && stationList.size() > 0 ) { AIAssist.getInstance( mContext ).speakTTSVoice( "车辆已整备完毕,请前往" - + stationList.get( currentStationIndex ).getName() + "站点" ); + + stationList.get( backgroundCurrentStationIndex ).getName() + "站点" ); } carOperationStatusCallback.changeOperationStatus(isWorking()); queryBusRoutes(); @@ -693,7 +757,7 @@ public class BusOrderModel { /** * 渲染站点信息 * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, - * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理current index,不能直接渲染 + * 车机端展示 离开站为当前站点,前往站为下一站, 下一站到站后在置为当前站 * @param result */ private void renderBusStationsStatus(BusRoutesResult result) { @@ -705,42 +769,47 @@ public class BusOrderModel { stationList.addAll( site ); for ( int i = 0; i < stationList.size(); i++ ) { BusStationBean s = stationList.get( i ); + + CallerLogger.INSTANCE.d( M_BUS + "renderBusStationsStatus--", + "Index="+ i+" ,name = "+s.getName()+" ,"+s.isLeaving()+","+s.getDrivingStatus()); + // 是否正在开往下一站 if ( s.isLeaving()) { isGoingToNextStation = true; } // 当前站点信息 if (s.getDrivingStatus() == STATION_STATUS_STOPPED ) { - currentStationIndex = i; + backgroundCurrentStationIndex = i; break; } } - backgroundCurrentStationIndex = currentStationIndex; - BusStationBean currentStation = stationList.get(currentStationIndex); - CallerLogger.INSTANCE.d( M_BUS + TAG, "渲染站点信息服务端currentStationIndex="+currentStationIndex + + BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); + + CallerLogger.INSTANCE.d( M_BUS + TAG, + "渲染站点信息服务端currentStationIndex="+backgroundCurrentStationIndex +" isLeaving()="+currentStation.isLeaving()); + //当前站点是始发站,告诉服务端到达始发站。 如果没有这个节点, 服务器不知道始发站到达状态 // ,订单开始站下在始发站的状态流转有问题 - if (currentStationIndex == 0 && !currentStation.isLeaving()){ + if (backgroundCurrentStationIndex == 0 && !currentStation.isLeaving()){ arriveSiteStation(true); } + // 美化是否开始 - if (FunctionBuildConfig.isDemoMode && ((currentStationIndex > 0 - && currentStationIndex < stationList.size()-1) - || (stationList.get(0).isLeaving() || stationList.get(stationList.size() -1).isLeaving()))){//行驶过程中设置美化 + if (FunctionBuildConfig.isDemoMode && (backgroundCurrentStationIndex >= 0 + && backgroundCurrentStationIndex <= stationList.size()-1) + && stationList.get(backgroundCurrentStationIndex).isLeaving()){//行驶过程中设置美化 FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(true); CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为true(每次滑动出发)"); } + if (refreshBusStationsCallback != null){ - if (currentStation.isLeaving()){//如果服务端的当前站是leaving状态,展示当前站需要+1 - currentStationIndex ++; - refreshBusStationsCallback.refreshBusStations(stationList - , currentStationIndex, getNextStopStation(),false); - }else{ - refreshBusStationsCallback.refreshBusStations(stationList - , currentStationIndex, getNextStopStation(),true); - } + refreshBusStationsCallback.refreshBusStations(result.getName(),stationList + , backgroundCurrentStationIndex, getNextStopStation(),!currentStation.isLeaving()); } + if ( currentStation.isLeaving() && slidePannelHideCallback != null) { slidePannelHideCallback.hideSlidePanel(); } @@ -755,10 +824,10 @@ public class BusOrderModel { * @return -1 当前已是最后一个站点 */ private int getNextStopStation() { - if ( currentStationIndex >= stationList.size() - 1 ) { + if ( backgroundCurrentStationIndex >= stationList.size() - 1 ) { return -1; } - int nextStationIndex = currentStationIndex + 1; + int nextStationIndex = backgroundCurrentStationIndex + 1; for ( ; nextStationIndex < stationList.size() - 1; nextStationIndex++ ) { if ( stationList.get( nextStationIndex ).getIfStop() == 1 ) { break; @@ -789,12 +858,13 @@ public class BusOrderModel { * @param awayPassengersResponse */ private void playLeavePassengersMsg( QueryLeaveAwayPassengersResponse awayPassengersResponse ) { - CallerLogger.INSTANCE.d( M_BUS + TAG, "播报下车乘客信息currentStationIndex="+currentStationIndex); + CallerLogger.INSTANCE.d( M_BUS + TAG, "播报下车乘客信息currentStationIndex=" + + String.valueOf(backgroundCurrentStationIndex + 1)); - if ( currentStationIndex > stationList.size() - 1 ) { + if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { return; } - String station = stationList.get( currentStationIndex ).getName(); + String station = stationList.get( backgroundCurrentStationIndex+1 ).getName(); StringBuilder builder = new StringBuilder( "已到达" ); builder.append( station ); if ( !station.endsWith( "站" ) ) { @@ -841,9 +911,8 @@ public class BusOrderModel { * 行程结束 */ private void travelOver() { -// CallerLogger.INSTANCE.d( M_BUS + TAG, "行程结束"); - if ( currentStationIndex >= stationList.size() ) { + if ( backgroundCurrentStationIndex >= stationList.size() ) { CallerLogger.INSTANCE.e( M_BUS + TAG, "travel over index out of station list" ); return; } @@ -862,18 +931,22 @@ public class BusOrderModel { * @param data */ public void onArriveAt( MessagePad.ArrivalNotification data){ - if ( currentStationIndex > stationList.size() - 1 ) { + if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { CallerLogger.INSTANCE.e( M_BUS + TAG, "到站异常,取消后续操作结束" ); return; } - if (FunctionBuildConfig.isDemoMode && currentStationIndex == stationList.size() - 1) {//到达最后一站结束美化 + + if (isArrivedStation) return; + isArrivedStation = true; + + if (FunctionBuildConfig.isDemoMode && backgroundCurrentStationIndex <= stationList.size() - 1) {//到达一站结束美化 FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为false(到最后一站)"); } - CallerLogger.INSTANCE.d( M_BUS + TAG, "到站====currentStationIndex=" + currentStationIndex); + CallerLogger.INSTANCE.d( M_BUS + TAG, "到站====currentStationIndex=" + backgroundCurrentStationIndex); isGoingToNextStation = false; - // 到达站点后,更新站点状态 -// currentStationIndex = getNextStopStation(); + queryStationLeaveAwayPassengers(); UiThreadHandler.postDelayed(new Runnable() {// 先查询下车乘客,再上报到站,便于后台筛查下车订单 @Override @@ -916,11 +989,11 @@ public class BusOrderModel { } public void triggerStartServiceEvent(boolean isRestart, boolean send) { - if (stationList == null || currentStationIndex >= stationList.size() || currentStationIndex == 0) { + if (stationList == null || backgroundCurrentStationIndex >= stationList.size()-1) { return; } - BusStationBean currentStation = stationList.get( currentStationIndex -1); - BusStationBean nextStation = stationList.get( currentStationIndex); + BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); + BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex +1); BusAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, send, currentStation.getName(), nextStation.getName(), currentLineId); } @@ -930,6 +1003,6 @@ public class BusOrderModel { } public int getCurrentStationIndex() { - return currentStationIndex; + return backgroundCurrentStationIndex; } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java index dd0b333e67..c2f6fb57da 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java @@ -64,6 +64,10 @@ public class BusLinePresenter extends Presenter implements IB BusLineModel.getInstance().commitSwitchLineId(lineId); } + public void removeListener(){ + BusLineModel.getInstance().setBusLinesCallback(null); + } + public void queryBusRoutes(){ BusOrderModel.getInstance().queryBusRoutes(); } @@ -71,6 +75,5 @@ public class BusLinePresenter extends Presenter implements IB @Override public void onDestroy(@NonNull LifecycleOwner owner) { super.onDestroy(owner); - BusLineModel.getInstance().setBusLinesCallback(null); } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 50d19341f9..fadc4ad8d1 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -32,6 +32,7 @@ import java.util.List; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; +import system_master.SystemStatusInfo; /** * 网约车小巴 @@ -47,6 +48,7 @@ public class BusPresenter extends Presenter private int currentAutopilotStatus = -1; private List mStationList = new ArrayList<>(); private int mCurrentStation = 0; + private boolean isRestartAutopilot = false; public BusPresenter(BusFragment view) { super(view); @@ -84,14 +86,6 @@ public class BusPresenter extends Presenter BusOrderModel.getInstance().setControllerStatusCallback(null); } -// public void setIsAnimateRunning(boolean isAnimateRunning){ -// this.isAnimateRunning = isAnimateRunning; -// } - -// public boolean getIsAnimateRunning(){ -// return isAnimateRunning; -// } - public void queryBusRoutes() { BusOrderModel.getInstance().queryBusRoutes(); } @@ -103,12 +97,14 @@ public class BusPresenter extends Presenter public void autoDriveToNextStation(boolean isRestart) { currentAutopilotStatus = -1; BusOrderModel.getInstance().autoDriveToNextStation(isRestart); + isRestartAutopilot = false; } public void restartAutopilot() { if (BusOrderModel.getInstance().isGoingToNextStation()){ currentAutopilotStatus = -1; BusOrderModel.getInstance().restartAutopilot(); + isRestartAutopilot = true; } } @@ -124,14 +120,15 @@ public class BusPresenter extends Presenter } @Override - public void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived) { + public void refreshBusStations(String lineName,List stationList + , int currentStation, int nextStation, boolean isArrived) { mStationList.clear(); mStationList.addAll(stationList); mCurrentStation = currentStation; // functionDemoModeChange(); CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel =", " mCurrentStation =" + mCurrentStation); if (mView != null) { - runOnUIThread(() -> mView.refreshBusStations( + runOnUIThread(() -> mView.refreshBusStations(lineName, stationList, currentStation, nextStation, isArrived)); } } @@ -168,7 +165,7 @@ public class BusPresenter extends Presenter public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; int state = autopilotStatusInfo.getState(); - CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChange: " + state + "currentAutopilotStatus = " + currentAutopilotStatus); +// CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChange: " + state + "currentAutopilotStatus = " + currentAutopilotStatus); switch (state) { case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE: if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { @@ -203,7 +200,7 @@ public class BusPresenter extends Presenter // 改变UI自动驾驶状态 runOnUIThread(() -> mView.onAutopilotStatusChanged(currentAutopilotStatus)); BusOrderModel.getInstance().triggerStartServiceEvent( - BusOrderModel.getInstance().isGoingToNextStation(), true); + isRestartAutopilot, true); } break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE: @@ -283,4 +280,9 @@ public class BusPresenter extends Presenter @Override public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { } + + @Override + public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + + } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java index d79dac12d9..847071ba49 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java @@ -79,7 +79,7 @@ public class BusSwitchLineActivity extends MvpActivity { // 15s内未开启,上报失败埋点 - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_RESULT, false); + mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_RESULT + , CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); AnalyticsManager.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); }; diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java index 430909a7b4..85654e2853 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java @@ -40,9 +40,9 @@ public class BusTrajectoryManager { private Disposable mSendReqDisposable = null; public BusTrajectoryManager() { - mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine( - -1, "", "", "", "", - 0, ""); + mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(-1, + "", "", "", "", 0, "", + "", "", "", "", 0); } /** @@ -106,7 +106,10 @@ public class BusTrajectoryManager { mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(routesResult.getLineId(), routesResult.csvFileUrl, routesResult.csvFileMd5, routesResult.txtFileUrl, routesResult.txtFileMd5, - routesResult.contrailSaveTime, routesResult.carModel); + routesResult.contrailSaveTime, routesResult.carModel, + routesResult.csvFileUrlDPQP, routesResult.csvFileMd5DPQP, + routesResult.txtFileUrlDPQP, routesResult.txtFileMd5DPQP, + routesResult.contrailSaveTimeDPQP); } else { mAutoPilotLine.setLineId(routesResult.getLineId()); mAutoPilotLine.setTrajUrl(routesResult.csvFileUrl); @@ -115,6 +118,11 @@ public class BusTrajectoryManager { mAutoPilotLine.setStopMd5(routesResult.txtFileMd5); mAutoPilotLine.setTimestamp(routesResult.contrailSaveTime); mAutoPilotLine.setVehicleModel(routesResult.carModel); + mAutoPilotLine.setTrajUrl_dpqp(routesResult.csvFileUrlDPQP); + mAutoPilotLine.setTrajMd5_dpqp(routesResult.csvFileMd5DPQP); + mAutoPilotLine.setStopUrl_dpqp(routesResult.txtFileUrlDPQP); + mAutoPilotLine.setStopMd5_dpqp(routesResult.txtFileMd5DPQP); + mAutoPilotLine.setTimestamp_dpqp(routesResult.contrailSaveTimeDPQP); } } } @@ -128,6 +136,11 @@ public class BusTrajectoryManager { mAutoPilotLine.setStopMd5(""); mAutoPilotLine.setTimestamp(0); mAutoPilotLine.setVehicleModel(""); + mAutoPilotLine.setTrajUrl_dpqp(""); + mAutoPilotLine.setTrajMd5_dpqp(""); + mAutoPilotLine.setStopUrl_dpqp(""); + mAutoPilotLine.setStopMd5_dpqp(""); + mAutoPilotLine.setTimestamp_dpqp(0); } private void startTrajReqLoop() { diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java index 53d27b181b..b9bb0b0c18 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/SlidePanelView.java @@ -112,6 +112,7 @@ public class SlidePanelView extends View { } private void init() { + bgRectF = new RectF(0, 0, 0, 0); bgPaint.setColor(Color.parseColor("#CC0F1325")); bgPaint.setStyle(Paint.Style.FILL); @@ -160,7 +161,12 @@ public class SlidePanelView extends View { @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); - bgRectF = new RectF(0, 0, w, h); + if (bgRectF != null){ + bgRectF.left = 0; + bgRectF.top = 0; + bgRectF.right = w; + bgRectF.bottom = h; + } if (matrixAnim != null) { matrixAnim.cancel(); @@ -233,10 +239,10 @@ public class SlidePanelView extends View { } private void startBlockBackAnim() { - ObjectAnimator animator = ObjectAnimator.ofInt(this, "blockOffset", blockOffset, 0); - animator.setInterpolator(new DecelerateInterpolator()); - animator.setDuration(1000 * blockOffset / getWidth()); - animator.start(); + ObjectAnimator blockBackanimator = ObjectAnimator.ofInt(this, "blockOffset", blockOffset, 0); + blockBackanimator.setInterpolator(new DecelerateInterpolator()); + blockBackanimator.setDuration(1000 * blockOffset / getWidth()); + blockBackanimator.start(); lastX = 0; } diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_line_panel_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_line_panel_bg.png new file mode 100755 index 0000000000..3166d20e37 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_line_panel_bg.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_line_panel_bg_1.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_line_panel_bg_1.png new file mode 100755 index 0000000000..09a9c252da Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_line_panel_bg_1.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_ai_normal.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_ai_normal.png new file mode 100755 index 0000000000..e98738b192 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_ai_normal.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_ai_select.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_ai_select.png new file mode 100755 index 0000000000..d3e0107c02 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_ai_select.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_bad_case_normal.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_bad_case_normal.png new file mode 100755 index 0000000000..c0a978fc2b Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_bad_case_normal.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_bad_case_select.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_bad_case_select.png new file mode 100755 index 0000000000..ebacf3a11a Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_bad_case_select.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/press_start_status.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/press_start_status.png new file mode 100755 index 0000000000..af32c20cb5 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/press_start_status.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_failure.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_failure.png new file mode 100755 index 0000000000..5737f93ad8 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_failure.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_success.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_success.png new file mode 100755 index 0000000000..84246fd323 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_success.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_badcase_btn_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_badcase_btn_bg.png deleted file mode 100644 index 89a6eaa5dc..0000000000 Binary files a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_badcase_btn_bg.png and /dev/null differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_line_panel_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_line_panel_bg.png new file mode 100755 index 0000000000..3166d20e37 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_line_panel_bg.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_line_panel_bg_1.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_line_panel_bg_1.png new file mode 100755 index 0000000000..09a9c252da Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_line_panel_bg_1.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_ai_normal.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_ai_normal.png new file mode 100755 index 0000000000..e98738b192 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_ai_normal.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_ai_select.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_ai_select.png new file mode 100755 index 0000000000..d3e0107c02 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_ai_select.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_bad_case_normal.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_bad_case_normal.png new file mode 100755 index 0000000000..c0a978fc2b Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_bad_case_normal.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_bad_case_select.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_bad_case_select.png new file mode 100755 index 0000000000..ebacf3a11a Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_bad_case_select.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/press_start_status.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/press_start_status.png new file mode 100755 index 0000000000..af32c20cb5 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/press_start_status.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/start_failure.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/start_failure.png new file mode 100755 index 0000000000..5737f93ad8 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/start_failure.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/start_success.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/start_success.png new file mode 100755 index 0000000000..84246fd323 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/start_success.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_badcase_btn_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_badcase_btn_bg.png deleted file mode 100644 index 89a6eaa5dc..0000000000 Binary files a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_badcase_btn_bg.png and /dev/null differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_panel_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_panel_bg.png new file mode 100755 index 0000000000..3166d20e37 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_panel_bg.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_panel_bg_1.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_panel_bg_1.png new file mode 100755 index 0000000000..09a9c252da Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_line_panel_bg_1.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_ai_normal.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_ai_normal.png new file mode 100755 index 0000000000..e98738b192 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_ai_normal.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_ai_select.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_ai_select.png new file mode 100755 index 0000000000..d3e0107c02 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_ai_select.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_bad_case_normal.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_bad_case_normal.png new file mode 100755 index 0000000000..c0a978fc2b Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_bad_case_normal.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_bad_case_select.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_bad_case_select.png new file mode 100755 index 0000000000..ebacf3a11a Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_bad_case_select.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/press_start_status.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/press_start_status.png new file mode 100755 index 0000000000..af32c20cb5 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/press_start_status.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_failure.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_failure.png new file mode 100755 index 0000000000..5737f93ad8 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_failure.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_success.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_success.png new file mode 100755 index 0000000000..84246fd323 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_success.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable/ai_collect_selector.xml b/OCH/mogo-och-bus/src/main/res/drawable/ai_collect_selector.xml new file mode 100755 index 0000000000..879be14e27 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/ai_collect_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bad_case_selector.xml b/OCH/mogo-och-bus/src/main/res/drawable/bad_case_selector.xml new file mode 100755 index 0000000000..b0e7932bd4 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bad_case_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_autopilot_status_bg.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_autopilot_status_bg.xml index 9a276b035d..ad57da1c3a 100644 --- a/OCH/mogo-och-bus/src/main/res/drawable/bus_autopilot_status_bg.xml +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_autopilot_status_bg.xml @@ -1,46 +1,17 @@ - - - - - + - - - - - - - - - - - + + - - - - - + - - - - - + - - - - - + - - - - - + diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_line_dividing_line1_selector.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_line_dividing_line1_selector.xml new file mode 100644 index 0000000000..b00fbd8bd6 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_line_dividing_line1_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_line_dividing_line2_selector.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_line_dividing_line2_selector.xml new file mode 100644 index 0000000000..ee555aae15 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_line_dividing_line2_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_operation_status_bg_selector.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_operation_status_bg_selector.xml new file mode 100755 index 0000000000..3a3dc6a292 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_operation_status_bg_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_operation_status_select_bg.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_operation_status_select_bg.xml new file mode 100644 index 0000000000..835c1fbaff --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_operation_status_select_bg.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn.xml index 8062bcf093..be0bd24850 100644 --- a/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn.xml +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_switch_line_btn.xml @@ -3,10 +3,9 @@ - - - + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml index 461842718e..4bd073fff0 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml @@ -5,67 +5,60 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="@dimen/dp_72"> - + - + android:layout_width="match_parent" + android:layout_height="match_parent"/> + + android:textStyle="bold" /> @@ -127,41 +120,56 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toRightOf="@id/bus_switch_model_layout"> - - + app:layout_constraintLeft_toRightOf="@id/module_mogo_och_setting_layout"> + + + + + + + - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_test_bar_view.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_test_bar_view.xml index 1c5d8bdf33..f71b6208a6 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/bus_test_bar_view.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_test_bar_view.xml @@ -22,4 +22,16 @@ android:layout_height="wrap_content" android:textColor="@android:color/white"/> + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml index 0c307b9d24..c9e7d8a07b 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml @@ -2,188 +2,175 @@ + android:layout_height="wrap_content" + android:paddingBottom="@dimen/dp_28" + android:background="@drawable/bus_line_panel_bg" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toTopOf="parent"> - - - - - - - - - - - - - - - - - - - - - - - + + app:layout_constraintBottom_toBottomOf="@+id/module_och_bus_line_name" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="@id/module_och_bus_line_name" /> - - + + + + + android:layout_marginLeft="14px" + android:layout_marginTop="@dimen/dp_24" + android:text="当前站点:" + android:textColor="#CAD6FF" + android:textSize="@dimen/module_och_bus_order_start_station_anchor_textSize" + android:textStyle="bold" + app:layout_constraintLeft_toRightOf="@+id/greenDot" + app:layout_constraintTop_toBottomOf="@+id/line2" /> - + - + - + - + - + - + - - - - - - + app:layout_constraintLeft_toLeftOf="parent" /> + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml index a27b69ae1d..c1a04c1abc 100644 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml @@ -13,8 +13,8 @@ 32px 20px - 42px - 32px + 40px + 42px 15px @@ -44,20 +44,20 @@ 30px 23px 26px - 32px + 34px 20px 80px 3px - 44.5px + 34px 20px 28px 27px - 25.6px + 28px 20px 20px - 16px + 64px 16px 40px @@ -77,8 +77,8 @@ 70px 24px - 460px - 140px + 616px + 180px 112px 112px @@ -86,11 +86,11 @@ 92px 30px - 466px - 446px + 616px + 754px - 36px + 40px 13px 12px 350px @@ -104,9 +104,9 @@ 20px 40px 320px - 460px + 320px 70px - 460px + 616px 130px 30px 279px @@ -120,7 +120,8 @@ 46px 700px 120px - 86px + 560px + 116px 20px diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml index 9c23585e71..db56121992 100644 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml @@ -13,8 +13,8 @@ 32px 20px - 42px - 32px + 40px + 42px 15px @@ -44,11 +44,11 @@ 30px 23px 26px - 32px + 34px 20px 80px 3px - 44.5px + 34px 20px 28px 27px @@ -57,7 +57,7 @@ 25.6px 20px 20px - 16px + 64px 16px 40px @@ -77,8 +77,8 @@ 70px 24px - 460px - 140px + 616px + 180px 112px 112px @@ -86,11 +86,11 @@ 92px 30px - 466px - 446px + 616px + 754px - 36px + 40px 13px 12px 350px @@ -119,7 +119,8 @@ 46px 700px 120px - 86px + 560px + 116px 50px 225px diff --git a/OCH/mogo-och-bus/src/main/res/values/dimens.xml b/OCH/mogo-och-bus/src/main/res/values/dimens.xml index 51d39b3e5c..85e4768fcc 100644 --- a/OCH/mogo-och-bus/src/main/res/values/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values/dimens.xml @@ -135,7 +135,8 @@ 30px 450px 72px - 52px + 280px + 58px 20px 225px diff --git a/OCH/mogo-och-bus/src/main/res/values/strings.xml b/OCH/mogo-och-bus/src/main/res/values/strings.xml index 0e7050b014..fdbca6ea6b 100644 --- a/OCH/mogo-och-bus/src/main/res/values/strings.xml +++ b/OCH/mogo-och-bus/src/main/res/values/strings.xml @@ -19,9 +19,9 @@ 更换路线成功 更换路线失败 - - - - + 起点: + 终点: + 当前站点: + 下一站: 自动驾驶状态为0不可用 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/AnimatorDrawableUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/AnimatorDrawableUtil.java new file mode 100644 index 0000000000..bbf9d779eb --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/AnimatorDrawableUtil.java @@ -0,0 +1,261 @@ +package com.mogo.och.common.module.utils; + +import android.content.Context; +import android.content.res.XmlResourceParser; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.Message; +import android.widget.ImageView; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +/** + * @author: wangmingjun + * @date: 2022/7/20 + */ +public class AnimatorDrawableUtil { + private static final int MSG_START = 0xf1; + private static final int MSG_STOP = 0xf2; + private static final int STATE_STOP = 0xf3; + private static final int STATE_RUNNING = 0xf4; + + //运行状态 + private int mState = STATE_RUNNING; + //显示图片的View + private ImageView mImageView = null; + //图片资源的ID列表 + private List mResourceIdList = null; + //定时任务器 + private Timer mTimer = null; + //定时任务 + private AnimTimerTask mTimeTask = null; + //记录播放位置 + private int mFrameIndex = 0; + //播放形式 + private boolean isLooping = false; + + public AnimatorDrawableUtil() { + mTimer = new Timer(); + } + + /** + * 设置动画播放资源 + */ + public void setAnimation(ImageView imageview, List resourceIdList) { + mImageView = imageview; + if(mResourceIdList==null){ + mResourceIdList = new ArrayList(); + }else{ + mResourceIdList.clear(); + } + mResourceIdList.addAll(resourceIdList); + } + + /** + * 设置动画播放资源 + */ + public void setAnimation(Context context, int resourceId, ImageView imageview) { + this.mImageView = imageview; + if(mResourceIdList==null){ + mResourceIdList = new ArrayList(); + }else{ + mResourceIdList.clear(); + } + + loadFromXml(context, resourceId, new OnParseListener() { + @Override + public void onParse(List res) { + mResourceIdList.addAll(res); + } + }); + } + + /** + * 解析xml + * + * @param context + * @param resourceId 资源id + */ + private void loadFromXml(final Context context, final int resourceId, + final OnParseListener onParseListener) { + if (context == null) { + return; + } + + final List res = new ArrayList(); + XmlResourceParser parser = context.getResources().getXml(resourceId); + + try { + int eventType = parser.getEventType(); + while (eventType != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_DOCUMENT) { + } else if (eventType == XmlPullParser.START_TAG) { + if (parser.getName().equals("item")) { + for (int i = 0; i < parser.getAttributeCount(); i++) { + if (parser.getAttributeName(i).equals("drawable")) { + int resId = Integer.parseInt(parser.getAttributeValue(i).substring(1)); + res.add(resId); + } + } + } + } else if (eventType == XmlPullParser.END_TAG) { + } else if (eventType == XmlPullParser.TEXT) { + } + + eventType = parser.next(); + } + } catch (IOException e) { + // TODO: handle exception + e.printStackTrace(); + } catch (XmlPullParserException e2) { + // TODO: handle exception + e2.printStackTrace(); + } finally { + parser.close(); + } + + if (onParseListener != null) { + onParseListener.onParse(res); + } + } + + private AnimationLisenter lisenter; + + + /** + * 开始播放动画 + * + * @param loop 是否循环播放 + * @param duration 动画播放时间间隔 + */ + public void start(boolean loop, int duration, AnimationLisenter lisenter) { + this.lisenter = lisenter; + stop(); + if (mResourceIdList == null || mResourceIdList.size() == 0) { + return; + } + if (mTimer == null) { + mTimer = new Timer(); + } + isLooping = loop; + mFrameIndex = 0; + mState = STATE_RUNNING; + mTimeTask = new AnimTimerTask(); + mTimer.schedule(mTimeTask, 0, duration); + if (lisenter != null){ + lisenter.startAnimation(); + } + } + + /** + * 停止动画播放 + */ + public void stop() { + if (mTimer != null) { + mTimer.purge(); + mTimer.cancel(); + mTimer = null; + } + if (mTimeTask != null) { + mFrameIndex = 0; + mState = STATE_STOP; + mTimeTask.cancel(); + mTimeTask = null; + } + //移除Handler消息 + if (AnimHandler != null) { + AnimHandler.removeMessages(MSG_START); + AnimHandler.removeMessages(MSG_STOP); + AnimHandler.removeCallbacksAndMessages(null); + } + } + + /** + * 定时器任务 + */ + class AnimTimerTask extends TimerTask { + + @Override + public void run() { + if (mFrameIndex < 0 || mState == STATE_STOP) { + return; + } + + if (mFrameIndex < mResourceIdList.size()) { + Message msg = AnimHandler.obtainMessage(MSG_START, 0, 0, null); + msg.sendToTarget(); + } else { + mFrameIndex = 0; + if (!isLooping) { + Message msg = AnimHandler.obtainMessage(MSG_STOP, 0, 0, null); + msg.sendToTarget(); + } + } + } + } + + /** + * Handler + */ + private Handler AnimHandler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_START: { + if (mFrameIndex >= 0 && mFrameIndex < mResourceIdList.size() && mState == STATE_RUNNING) { + //这里不能使用image.setImageResource 因为源码中也是创建了bitmap 所以这里我们自己创建 + Bitmap bitmap=readBitMap(mImageView.getContext(),mResourceIdList.get(mFrameIndex)); + mImageView.setImageBitmap(bitmap); + mFrameIndex++; + } + } + break; + case MSG_STOP: { + if (mTimeTask != null) { + mFrameIndex = 0; + mTimer.purge(); + mTimeTask.cancel(); + mState = STATE_STOP; + mTimeTask = null; + if (lisenter !=null){ + lisenter.endAnimation(); + } + if (isLooping) { + mImageView.setImageResource(0); + } + } + } + break; + default: + break; + } + } + }; + + public static Bitmap readBitMap(Context context, int resId) { + BitmapFactory.Options opt = new BitmapFactory.Options(); + opt.inPreferredConfig = Bitmap.Config.RGB_565; + opt.inPurgeable = true; + opt.inInputShareable = true; + InputStream is = context.getResources().openRawResource(resId); + return BitmapFactory.decodeStream(is, null, opt); + } + + public interface OnParseListener { + void onParse(List res); + } + + public interface AnimationLisenter { + void startAnimation(); + + void endAnimation(); + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java index fdaa18be0b..01ec888715 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java @@ -167,4 +167,34 @@ public class CoordinateCalculateRouteUtil { } return latePoints; } + + /** + * 简单粗暴 直接比较 todo 需要优化 + * @param mRoutePoints + * @param realLon + * @param realLat + * @return 返回已经到达点的index + */ + public static int getArrivedPointIndex(List mRoutePoints,double realLon,double realLat) { + int currentIndex = 0; //记录疑似点 + if (mRoutePoints.size() > 0){ + //基础点 + LatLng baseLatLng = mRoutePoints.get(0); + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat + ,baseLatLng.longitude,baseLatLng.latitude);// lon,lat, prelon, prelat + + for (int i= 1; i < mRoutePoints.size(); i++){ + LatLng latLng = mRoutePoints.get(i); + float diff = CoordinateUtils.calculateLineDistance(realLon,realLat + ,latLng.longitude,latLng.latitude); + if (baseDiffDis > diff){ +// Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); + baseDiffDis = diff; + currentIndex = i; + } + } + return currentIndex; + } + return currentIndex; + } } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java index 984d132feb..4c626a4659 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java @@ -9,7 +9,7 @@ import java.math.RoundingMode; */ public class NumberFormatUtil { /** - * 有小数两位, 没有小数保留整数 + * 有小数1位, 没有小数保留整数 * @param d * @return */ diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java new file mode 100644 index 0000000000..02a08f49b2 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java @@ -0,0 +1,152 @@ +package com.mogo.och.common.module.utils; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author: wangmingjun + * @date: 2022/7/19 + */ + +public class OCHThreadPoolManager { + + /** + * 根据cpu的数量动态的配置核心线程数和最大线程数 + */ + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + /** + * 核心线程数 = CPU核心数 + 1 + */ + private static final int CORE_POOL_SIZE = CPU_COUNT + 1; + /** + * 线程池最大线程数 = CPU核心数 * 2 + 1 + */ + private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; + /** + * 非核心线程闲置时超时1s + */ + private static final int KEEP_ALIVE = 1; + /** + * 线程池的对象 + */ + private ThreadPoolExecutor executor; + + /** + * 要确保该类只有一个实例对象,避免产生过多对象消费资源,所以采用单例模式 + */ + private OCHThreadPoolManager() { + } + + private volatile static OCHThreadPoolManager INSTANCE; + + public static OCHThreadPoolManager getsInstance() { + if (INSTANCE == null) { + synchronized (OCHThreadPoolManager.class) { + if (INSTANCE == null) { + INSTANCE = new OCHThreadPoolManager(); + } + } + + } + return INSTANCE; + } + + /** + * 开启一个无返回结果的线程 + * + * @param r + */ + public void execute(Runnable r) { + if (executor == null) { + /** + * corePoolSize:核心线程数 + * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启) + * keepAliveTime:非核心线程闲置时间超时时长 + * unit:keepAliveTime的单位 + * workQueue:等待队列,存储还未执行的任务 + * threadFactory:线程创建的工厂 + * handler:异常处理机制 + * + */ + executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, + KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue(200), + Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); + } + // 把一个任务丢到了线程池中 + try { + executor.execute(r); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * 开启一个有返回结果的线程 + * + * @param r + * @return + */ + public Future submit(Callable r) { + if (executor == null) { + /** + * corePoolSize:核心线程数 + * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启) + * keepAliveTime:非核心线程闲置时间超时时长 + * unit:keepAliveTime的单位 + * workQueue:等待队列,存储还未执行的任务 + * threadFactory:线程创建的工厂 + * handler:异常处理机制 + * + */ + executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, + KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue(20), + Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); + } + // 把一个任务丢到了线程池中 + return executor.submit(r); + } + + /** + * 开启一个无返回结果的线程 + * + * @param r + */ + public Future submit(Runnable r) { + if (executor == null) { + /** + * corePoolSize:核心线程数 + * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启) + * keepAliveTime:非核心线程闲置时间超时时长 + * unit:keepAliveTime的单位 + * workQueue:等待队列,存储还未执行的任务 + * threadFactory:线程创建的工厂 + * handler:异常处理机制 + * + */ + executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, + KEEP_ALIVE, TimeUnit.SECONDS, new ArrayBlockingQueue(200), + Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); + } + return executor.submit(r); + + } + + /** + * 把任务移除等待队列 + * + * @param r + */ + public void cancel(Runnable r) { + if (r != null) { + executor.getQueue().remove(r); + } + } + +} + + diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/sfv/BaseSurfaceView.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/sfv/BaseSurfaceView.java index a53cdfbce8..1ece70606f 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/sfv/BaseSurfaceView.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/sfv/BaseSurfaceView.java @@ -149,8 +149,10 @@ public abstract class BaseSurfaceView extends SurfaceView implements SurfaceHold getHolder().unlockCanvasAndPost(canvas); onFrameDrawFinish(); } - - handler.postDelayed(this, frameDuration); + + if (handler != null){ + handler.postDelayed(this, frameDuration); + } } } diff --git a/OCH/mogo-och-taxi-passenger/build.gradle b/OCH/mogo-och-taxi-passenger/build.gradle index d3b586a5ed..cd67326bc9 100644 --- a/OCH/mogo-och-taxi-passenger/build.gradle +++ b/OCH/mogo-och-taxi-passenger/build.gradle @@ -29,15 +29,13 @@ android { } buildTypes { - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - debug { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + debug { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml index 8b529701ba..84947cad22 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml @@ -1,5 +1,21 @@ + - / + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ICallback.aidl b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ICallback.aidl new file mode 100644 index 0000000000..a3a46acde7 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ICallback.aidl @@ -0,0 +1,12 @@ +// ICallback.aidl +package com.mogo.och.taxi.passenger.mulprocess; + +// Declare any non-default types here with import statements + +interface ICallback { + + void onResult(long meters, long timeInSecond,float speed); + + void postEvent(int type); + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl new file mode 100644 index 0000000000..0e0aa676e9 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl @@ -0,0 +1,19 @@ +// ILeftMenuService.aidl +package com.mogo.och.taxi.passenger.mulprocess; + +import com.mogo.och.taxi.passenger.mulprocess.ICallback; + +// Declare any non-default types here with import statements + +interface ILeftMenuService { + + /** + * 向主进程传选中的item + */ + void transmissionIndex(int index); + + void registerCallback(in ICallback cb); + + void unRegisterCallback(in ICallback cb); + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data old mode 100755 new mode 100644 index 0e9e36690e..b200669659 Binary files a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data and b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data old mode 100755 new mode 100644 diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java index 0ea164e3bf..27fef64839 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java @@ -57,6 +57,11 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData { public String txtFileMd5 = ""; //轨迹文件md5,默认“” public long contrailSaveTime; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 public String carModel = ""; //[optional] 车型号(如红旗H9),默认“”,暂不加入校验逻辑、用于人工排查问题 + public String csvFileUrlDPQP = ""; //轨迹文件下载的cos url,默认“” + public String csvFileMd5DPQP = ""; //轨迹文件md5,默认“” + public String txtFileUrlDPQP = ""; //打点文件下载的cos url,默认“” + public String txtFileMd5DPQP = ""; //轨迹文件md5,默认“” + public long contrailSaveTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 // !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km public double travelDistance; 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 c2c8fb1d6a..52ac14ed3f 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 @@ -12,5 +12,5 @@ import mogo.telematics.pad.MessagePad; */ public interface IOCHTaxiPassengerAutopilotPlanningCallback { void setLineMarker(List models); - void routeResultByServer(List models); + void routeResultByServer(List models,int haveArrivedIndex); } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/FinishActivity.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/FinishActivity.java new file mode 100644 index 0000000000..0e9120e02a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/FinishActivity.java @@ -0,0 +1,4 @@ +package com.mogo.och.taxi.passenger.event; + +public class FinishActivity { +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/UIStatus.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/UIStatus.java new file mode 100644 index 0000000000..83c06dfa6e --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/UIStatus.java @@ -0,0 +1,16 @@ +package com.mogo.och.taxi.passenger.event; + +public class UIStatus { + + public static final int LIVE = 0; + public static final int OVERVIEW = 1; + public static final int CONSULT = 2; + public static final int MOVIE = 3; + + public int status = LIVE; + + public UIStatus(int status) { + this.status = status; + } + +} 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 c166b66f81..06ce8ec0f4 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 @@ -73,6 +73,7 @@ import io.reactivex.functions.Consumer; import io.reactivex.plugins.RxJavaPlugins; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; +import system_master.SystemStatusInfo; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; @@ -193,7 +194,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } /** - * 订单轮询 + * 订单轮询 初始化主Fragment的Presenter init 调用 */ public void startOrStopOrderLoop(){ if (NetworkUtils.isConnected(mContext)) { @@ -201,6 +202,9 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } + /** + * 关闭订单轮训 页面摧毁时 + */ public void release() { startOrStopOrderLoop(false); startOrStopQueryOrderRemaining(false); @@ -254,6 +258,11 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback CallLimitingVelocityListenerManager.INSTANCE.removeListener(limitingVelocityListener); } + /** + * 订单轮训 + * @param start true 开启订单轮训 + * false 关闭订单轮训 + */ private void startOrStopOrderLoop(boolean start) { CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startOrStopOrderLoop() " + start); if (start) { @@ -504,12 +513,16 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; int state = autopilotStatusInfo.getState(); - CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "state = %s", state ); +// CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "state = %s", state ); if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); if (mCurrentOCHOrder != null && getCurOrderStatus() == TaxiPassengerOrderStatusEnum.UserArriveAtStart && state != mPrevAPStatus) { + + TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, true, + mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); + // 当高频返回autopilot 2时,不重复调用订单状态变更 mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态 startServicePilotDone(); @@ -566,6 +579,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } + @Override + public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + + } }; private final IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){ @@ -608,10 +625,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void loopRouteAndWipe() { if (mLocationsModels != null && mLocationsModels.size() > 0){ - List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mLocationsModels,mLongitude,mLatitude); + int haveArrivedIndex = CoordinateCalculateRouteUtil + .getArrivedPointIndex(mLocationsModels,mLongitude,mLatitude); if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routeResultByServer(lastPoints); + mAutopilotPlanningCallback.routeResultByServer(mLocationsModels,haveArrivedIndex); } } } @@ -662,6 +679,9 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } + /** + * 查询订单剩余里程和时间 + */ public void queryOrderRemaining(){ if (mCurrentOCHOrder == null) return; TaxiPassengerServiceManager.getInstance().queryOrderRemaining(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { @@ -863,9 +883,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback return; } - if (mCurrentOCHOrder.orderStatus != TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode()) { - ToastUtils.showShort("当前订单状态异常!"); - return; + if (mCurrentOCHOrder.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode()){ + startServicePilotDone(); } double startWgsLon = mCurrentOCHOrder.startSitePoint.get(0); @@ -885,7 +904,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback mCurrentOCHOrder.lineId, mCurrentOCHOrder.csvFileUrl, mCurrentOCHOrder.csvFileMd5, mCurrentOCHOrder.txtFileUrl, mCurrentOCHOrder.txtFileMd5, - mCurrentOCHOrder.contrailSaveTime, mCurrentOCHOrder.carModel); + mCurrentOCHOrder.contrailSaveTime, mCurrentOCHOrder.carModel, + mCurrentOCHOrder.csvFileUrlDPQP, mCurrentOCHOrder.csvFileMd5DPQP, + mCurrentOCHOrder.txtFileUrlDPQP, mCurrentOCHOrder.txtFileMd5DPQP, + mCurrentOCHOrder.contrailSaveTimeDPQP); } CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters); @@ -894,6 +916,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback + " ,startSiteName=" + mCurrentOCHOrder.startSiteAddr + " ,endSiteName=" + mCurrentOCHOrder.endSiteAddr); + TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, false, mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); } 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 30be0829b1..39611e8df7 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 @@ -8,8 +8,12 @@ import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** @@ -31,8 +35,8 @@ public class TaxiPassengerModelLoopManager { private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询 private Disposable mQueryOrderRemainingDisposable; //心跳轮询 - private Disposable mRouteWipeDisposable; //轨迹擦除 - private Disposable mReadyToAutopilotDisposable; //轨迹擦除 + private CompositeDisposable mRouteWipeDisposable; //轨迹擦除 + private Disposable mReadyToAutopilotDisposable; //轮询是否可开启自动驾驶 public void startReadyToAutopilot() { if (mReadyToAutopilotDisposable != null && !mReadyToAutopilotDisposable.isDisposed()) { @@ -56,16 +60,43 @@ public class TaxiPassengerModelLoopManager { } public void startRouteAndWipe() { - if (mRouteWipeDisposable != null && !mRouteWipeDisposable.isDisposed()) { - return; - } CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startRouteAndWipe()"); - mRouteWipeDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, - TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) + if (mRouteWipeDisposable != null) return; + if (mRouteWipeDisposable == null){ + 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(aLong -> TaxiPassengerModel.getInstance().loopRouteAndWipe()); + .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() { @@ -97,7 +128,9 @@ public class TaxiPassengerModelLoopManager { } } - + /** + * 轮训查下 查询订单剩余里程和时间 + */ public void startQueryOrderRemainingtLoop() { if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) { return; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java new file mode 100644 index 0000000000..c1d1c3c5bd --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java @@ -0,0 +1,64 @@ +package com.mogo.och.taxi.passenger.mulprocess; + +import android.database.MatrixCursor; +import android.os.Bundle; +import android.os.IBinder; +import android.os.Parcel; +import android.os.Parcelable; + +public class BinderCursor extends MatrixCursor { + + static final String KEY_BINDER = "binder"; + + Bundle mBinderExtra = new Bundle(); + + public static class BinderParcelable implements Parcelable { + + public IBinder mBinder; + + public static final Creator CREATOR = new Creator() { + @Override + public BinderParcelable createFromParcel(Parcel source) { + return new BinderParcelable(source); + } + + @Override + public BinderParcelable[] newArray(int size) { + return new BinderParcelable[size]; + } + }; + + BinderParcelable(IBinder binder) { + mBinder = binder; + } + + BinderParcelable(Parcel source) { + mBinder = source.readStrongBinder(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeStrongBinder(mBinder); + } + } + + public BinderCursor(String[] columnNames, IBinder binder) { + super(columnNames); + + if (binder != null) { + Parcelable value = new BinderParcelable(binder); + mBinderExtra.putParcelable(KEY_BINDER, value); + } + } + + @Override + public Bundle getExtras() { + return mBinderExtra; + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java new file mode 100644 index 0000000000..a5aedc83b1 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java @@ -0,0 +1,55 @@ +package com.mogo.och.taxi.passenger.mulprocess; + +import static android.os.Binder.getCallingUid; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.database.Cursor; +import android.net.Uri; +import android.os.IBinder; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + + +public class BinderProvider extends ContentProvider { + + public static final String TAG = BinderProvider.class.getSimpleName(); + + public static final String AUTHORITY = "com.mogo.och.taxi.passenger.leftmenu"; + public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/binder"); + public static final String SERVICE_LEFTMENU = "lefmenu"; + + @Override + public boolean onCreate() { + return true; + } + + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + getCallingUid(); + IBinder binder; + if (selectionArgs[0].equals(BinderProvider.SERVICE_LEFTMENU)) { + binder = new OrderServiceImpl(); + } else { + return null; + } + BinderCursor cursor = new BinderCursor(new String[]{"service"}, binder); + return cursor; + } + + + @Override + public String getType(Uri uri) {return null;} + + + @Override + public Uri insert(Uri uri, ContentValues values) {return null;} + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) {return 0;} + + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {return 0;} +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/EmptyService.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/EmptyService.kt new file mode 100644 index 0000000000..5d3a6ff53c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/EmptyService.kt @@ -0,0 +1,22 @@ +package com.mogo.och.taxi.passenger.mulprocess + +import android.app.Service +import android.content.Context +import android.content.Intent +import android.os.IBinder + +class EmptyService: Service() { + + companion object{ + fun startService(context: Context){ + //预加载视频进程 + val intent = Intent(context, EmptyService::class.java) + context.startService(intent) + } + } + + override fun onBind(intent: Intent?): IBinder? { + // 加载进程的空Service + return null + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java new file mode 100644 index 0000000000..006be38689 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java @@ -0,0 +1,35 @@ +package com.mogo.och.taxi.passenger.mulprocess; + +import android.os.RemoteException; + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen; +import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; + +public class OrderServiceImpl extends ILeftMenuService.Stub { + + public static final String TAG = "mulprocessOrderServiceImpl"; + + @Override + public void transmissionIndex(int index) throws RemoteException { + CallerLogger.INSTANCE.d(SceneConstant.M_TAXI_P + TAG, "跨进程 transmissionIndex"+index); + UiThreadHandler.getsUiHandler().post(() -> { + OverlayLeftViewUtils.INSTANCE.transmissionIndexGet(index); + }); + } + + @Override + public void registerCallback(ICallback cb) throws RemoteException { + CallerLogger.INSTANCE.d(SceneConstant.M_TAXI_P + TAG, "跨进程 registerCallback"); + LeftMenuOpen.INSTANCE.registerCallbackHost(cb); + } + + @Override + public void unRegisterCallback(ICallback cb) throws RemoteException { + CallerLogger.INSTANCE.d(SceneConstant.M_TAXI_P + TAG, "跨进程 unRegisterCallback"); + LeftMenuOpen.INSTANCE.unregisterCallbackHost(cb); + } + +} \ No newline at end of file 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 7522010791..056b46c0ff 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 @@ -23,6 +23,7 @@ import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel; import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; +import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen; /** * @author: wangmingjun @@ -118,6 +119,8 @@ public class BaseTaxiPassengerPresenter extends Presenter { - mView.showOrHideServingOrderFragment(false); + mView.showOrHideServingOrderFragment(false,true); mView.showOrHideStartAutopilotView(false,false); mView.showOrHidePressengerCheckPager(false, "", "", "", "", ""); @@ -189,7 +192,7 @@ public class BaseTaxiPassengerPresenter extends Presenter{ mView.showOrHideStartAutopilotView(false,false); - mView.showOrHideServingOrderFragment(true); + mView.showOrHideServingOrderFragment(true,true); }); TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotoop(false); } @@ -210,7 +213,7 @@ public class BaseTaxiPassengerPresenter extends Presenter { - mView.showOrHideServingOrderFragment(false); + mView.showOrHideServingOrderFragment(false,true); mView.showOrHideArrivedEndLayout(true, order.endSiteAddr,order.orderNo); }); return; diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java index 28bc751b01..48cb45f36e 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java @@ -74,13 +74,15 @@ public class TaxiPassengerServingOrderPresenter extends Presenter mView.setLineMarker(models)); } - @Override - public void routeResultByServer(List models) { + public void routeResultByServer(List models, int haveArrivedIndex) { if (models == null) return; - runOnUIThread(() -> mView.routeResultByServer(models)); + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResultByServer:" + models.size() + + " haveArrivedIndex = " + haveArrivedIndex); + runOnUIThread(() ->mView.routeResultByServer(models,haveArrivedIndex)); } + @Override public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order)); @@ -92,9 +94,9 @@ public class TaxiPassengerServingOrderPresenter extends PresentermView.updateOrderStatusView(order)); }else if (mCurrentPassengerOrder.orderStatus != order.orderStatus) { - mView.updateOrderStatusView(order); + runOnUIThread(() ->mView.updateOrderStatusView(order)); if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "-----OnTheWayToEndStation----"); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index 945a3d7aa7..b98ff00c16 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -1,18 +1,22 @@ package com.mogo.och.taxi.passenger.ui; -import android.os.Build; +import android.os.Bundle; import android.os.Handler; import android.os.Looper; +import android.view.LayoutInflater; import android.view.View; -import android.widget.FrameLayout; +import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.FragmentTransaction; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy; +import com.mogo.eagle.core.function.api.hmi.view.IViewNotification; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerSmpManager; @@ -26,9 +30,15 @@ import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.constants.DataTypes; import com.mogo.och.taxi.passenger.R; import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback; +import com.mogo.och.taxi.passenger.event.UIStatus; import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter; import com.mogo.och.taxi.passenger.ui.comment.TaxiPassengerArrivedView; import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; +import com.mogo.och.taxi.passenger.mulprocess.EmptyService; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; import java.lang.ref.WeakReference; @@ -41,26 +51,28 @@ import java.lang.ref.WeakReference; * @author tongchenfei */ public class TaxiPassengerBaseFragment extends MvpFragment - implements IMogoMapListener, TaxiPassengerTaxiView, ITPClickStartAutopilotCallback { + implements IMogoMapListener, TaxiPassengerTaxiView, ITPClickStartAutopilotCallback, IMoGoHmiViewProxy.IViewNotificationProvider { static final String TAG = "TaxiPassengerBaseFragment"; - private FrameLayout flNaviPanelContainer; private ImageView mAutopilotImage; private ImageView mMapswitchBtn; private TaxiPassengerTrafficLightView mTrafficLightView; - private TaxiPassengerV2XNotificationView mV2XNotificationView; private WeakReference mArrivedEndView; private WeakReference mArrivedCheckView; private WeakReference mStartAutopilotView; - - private View vOpenLeft; - protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null; private Handler mHandler = new Handler(Looper.getMainLooper()); + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + EventBus.getDefault().register(this); + return super.onCreateView(inflater, container, savedInstanceState); + } + @Override protected int getLayoutId() { return R.layout.taxi_p_base_fragment; @@ -77,16 +89,13 @@ public class TaxiPassengerBaseFragment extends MvpFragment { -// OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity()); -// OverlayLeftViewUtils.INSTANCE.dragTarget(vOpenLeft); + OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity(),0,true,-1,true); //showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728"); //showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480"); //OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext()); - //OverlayViewUtils.showOverlayView(getActivity(),new TaxiPassengerMogoConsultView(getContext())); }); - - vOpenLeft.setOnClickListener(v -> OverlayLeftViewUtils.INSTANCE.open()); } private void initArrivedView(){ @@ -161,7 +174,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment colorList = new ArrayList<>(); + List textureList = new ArrayList<>(); + List texIndexList = new ArrayList<>(); + + private BitmapDescriptor mArrivedRes; + private BitmapDescriptor mUnArrivedRes; private ITaxiPassengerMapViewCallback mITaxiPassengerMapViewCallback; @@ -127,6 +132,9 @@ public class TaxiPassengerMapDirectionView 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) @@ -187,7 +195,7 @@ public class TaxiPassengerMapDirectionView 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()); +// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--moveCamera :" + location.getLatitude()+", "+location.getLongitude()); } else { //设置希望展示的地图缩放级别 @@ -238,12 +246,12 @@ public class TaxiPassengerMapDirectionView //设置线段纹理 PolylineOptions polylineOptions = new PolylineOptions(); polylineOptions.addAll(mCoordinatesLatLng); - //polylineOptions.colorValues(colorList); // 1FC3FF -> 57ABFF - //加上这个属性,表示使用渐变线 - //polylineOptions.useGradient(true); + polylineOptions.setUseTexture(true); polylineOptions.width(15); polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); - polylineOptions.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow)); + polylineOptions.setCustomTextureList(textureList); + polylineOptions.setCustomTextureIndex(texIndexList); +// polylineOptions.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_un_arrive)); // 绘制线 mPolyline = mAMap.addPolyline(polylineOptions); @@ -256,12 +264,15 @@ public class TaxiPassengerMapDirectionView * 添加画线颜色值 */ private void addRouteColorList() { + textureList.clear(); + texIndexList.clear(); for (int i = 0; i < mCoordinatesLatLng.size(); i++){ - if (i <= mCoordinatesLatLng.size()/2){ - colorList.add(Color.argb(255, 31, 195, 255));//start + if (i <= mHaveArrivedIndex){ + textureList.add(mArrivedRes); }else { - colorList.add(Color.argb(255, 87, 171, 255));//end + textureList.add(mUnArrivedRes); } + texIndexList.add(i); } } @@ -344,6 +355,12 @@ public class TaxiPassengerMapDirectionView 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); 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 index bb03a1055a..e15ffbf4b0 100644 --- 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 @@ -2,6 +2,8 @@ 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.location.Location; import android.os.Build; import android.os.Bundle; @@ -13,12 +15,13 @@ 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.MogoLatLng; 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; @@ -224,18 +227,17 @@ public class TaxiPassengerServingOrderFragment extends } } - public void routeResultByServer(List latLngList) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResultByServer:" + latLngList.size()); + public void routeResultByServer(List latLngList,int haveArrivedIndex) { if (latLngList.size() > 0) { - drawablePolylineByServerRoute(latLngList); + drawablePolylineByServerRoute(latLngList,haveArrivedIndex); } else { clearPolyline(); } } - public void drawablePolylineByServerRoute(List mCoordinatesLatLng){ + public void drawablePolylineByServerRoute(List mCoordinatesLatLng,int haveArrivedIndex){ if (mMapDirectionView != null){ - mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng); + mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng,haveArrivedIndex); UiThreadHandler.post(new Runnable() { @Override public void run() { @@ -379,4 +381,22 @@ public class TaxiPassengerServingOrderFragment extends 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/TaxiPassengerStartAutopilotView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java index 4773358920..5d8aba7836 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java @@ -4,7 +4,6 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAX import android.annotation.SuppressLint; import android.content.Context; -import android.graphics.drawable.AnimationDrawable; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; @@ -15,10 +14,10 @@ import com.elegant.utils.UiThreadHandler; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.OverlayViewUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.och.common.module.utils.AnimatorDrawableUtil; import com.mogo.och.common.module.wigets.sfv.FrameSurfaceView; import com.mogo.och.taxi.passenger.R; import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback; -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; import java.util.Arrays; @@ -35,11 +34,12 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V private ImageView mCloseIV; private ITPClickStartAutopilotCallback mClickCallback; public boolean isStarting = false; - private AnimationDrawable mAnimationBtnDrawable; - private static final long TIMER_START_AUTOPILOT_INTERVAL = 10 * 1000L; + private static final long TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L; private Context mContext; private View view; - private FrameSurfaceView svCarStartingFrame; + private AnimatorDrawableUtil mAnimationDrawable ; + private AnimatorDrawableUtil mCarAnimationDrawable ; + private ImageView mCarIv; private Integer[] startingAnimIds = new Integer[]{ R.drawable.light_00000, R.drawable.light_00001, @@ -56,6 +56,33 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V R.drawable.light_00012, R.drawable.light_00013 }; + private Integer[] startBtnBgAnimIds = new Integer[]{ + R.drawable.image_00000, R.drawable.image_00001, R.drawable.image_00002, R.drawable.image_00003, + R.drawable.image_00004, R.drawable.image_00005, R.drawable.image_00006, R.drawable.image_00007, + R.drawable.image_00008, R.drawable.image_00009, R.drawable.image_00010, R.drawable.image_00011, + R.drawable.image_00012, R.drawable.image_00013,R.drawable.image_00014,R.drawable.image_00015, + R.drawable.image_00016, R.drawable.image_00017,R.drawable.image_00018,R.drawable.image_00019, + R.drawable.image_00020, R.drawable.image_00021,R.drawable.image_00022,R.drawable.image_00023, + R.drawable.image_00024, R.drawable.image_00025,R.drawable.image_00026,R.drawable.image_00027, + R.drawable.image_00028, R.drawable.image_00029,R.drawable.image_00030,R.drawable.image_00031, + R.drawable.image_00032, R.drawable.image_00033,R.drawable.image_00034,R.drawable.image_00035, + R.drawable.image_00036, R.drawable.image_00037,R.drawable.image_00038,R.drawable.image_00039, + R.drawable.image_00040, R.drawable.image_00041,R.drawable.image_00042,R.drawable.image_00043, + R.drawable.image_00044, R.drawable.image_00045,R.drawable.image_00046,R.drawable.image_00047, + R.drawable.image_00048, R.drawable.image_00049,R.drawable.image_00050,R.drawable.image_00051, + R.drawable.image_00052, R.drawable.image_00053,R.drawable.image_00054,R.drawable.image_00055, + R.drawable.image_00056, R.drawable.image_00057,R.drawable.image_00058,R.drawable.image_00059, + R.drawable.image_00060, R.drawable.image_00061,R.drawable.image_00062,R.drawable.image_00063, + R.drawable.image_00064, R.drawable.image_00065,R.drawable.image_00066,R.drawable.image_00067, + R.drawable.image_00068,R.drawable.image_00069,R.drawable.image_00070, R.drawable.image_00071, + R.drawable.image_00072,R.drawable.image_00073, R.drawable.image_00074, R.drawable.image_00075, + R.drawable.image_00076,R.drawable.image_00077,R.drawable.image_00078,R.drawable.image_00079, + R.drawable.image_00080, R.drawable.image_00081, R.drawable.image_00082,R.drawable.image_00083, + R.drawable.image_00084, R.drawable.image_00085, R.drawable.image_00086,R.drawable.image_00087, + R.drawable.image_00088, R.drawable.image_00089, R.drawable.image_00090,R.drawable.image_00091, + R.drawable.image_00092, R.drawable.image_00093, R.drawable.image_00094,R.drawable.image_00095, + R.drawable.image_00096, R.drawable.image_00097, R.drawable.image_00098,R.drawable.image_00099, + }; public TaxiPassengerStartAutopilotView(Context context) { super(context); @@ -72,17 +99,21 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V mCloseIV.setOnClickListener(this); mAutopilotBtnBg = view.findViewById(R.id.taxi_p_autopilot_btn_bg); + mCarIv = view.findViewById(R.id.taxi_p_autopilot_starting); - svCarStartingFrame = view.findViewById(R.id.taxi_p_autopilot_starting); - svCarStartingFrame.setBitmapIds(Arrays.asList(startingAnimIds)); - svCarStartingFrame.setDuration(1300); -// svCarStartingFrame.setOnLongClickListener(new OnLongClickListener() { -// @Override -// public boolean onLongClick(View v) { -// TaxiPassengerModel.getInstance().startServicePilotDone(); -// return false; -// } -// }); + initBtnAnimatonDrawable(); + + initCarStartingFrame(); + } + + private void initCarStartingFrame() { + mCarAnimationDrawable = new AnimatorDrawableUtil(); + mCarAnimationDrawable.setAnimation(mCarIv,Arrays.asList(startingAnimIds)); + } + + private void initBtnAnimatonDrawable() { + mAnimationDrawable = new AnimatorDrawableUtil(); + mAnimationDrawable.setAnimation(mAutopilotBtnBg,Arrays.asList(startBtnBgAnimIds)); } public void setOnClickStartAutopilotBtnCallback(ITPClickStartAutopilotCallback clickCallback){ @@ -113,8 +144,8 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V @SuppressLint("UseCompatLoadingForDrawables") public void handleStartAutopilotBtnStatus(boolean isClickable){ - if (svCarStartingFrame != null){ - svCarStartingFrame.setBackgroundResource(R.drawable.light_00000); + if (mCarIv != null){ + mCarIv.setBackgroundResource(R.drawable.light_00000); } if (mStartAutopilotBtn == null) return; @@ -132,7 +163,6 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V mStartAutopilotBtn.setTextColor( mContext.getResources().getColor(R.color.taxi_p_start_autopilot_txt_color)); mStartAutopilotBtn.setBackground(null); - mAutopilotBtnBg.setBackground(mContext.getResources().getDrawable(R.drawable.anmi_flow)); }else { mStartAutopilotBtn.setBackground( mContext.getResources().getDrawable(R.drawable.taxi_p_start_autopilot_txt_btn_bg)); @@ -148,32 +178,30 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V public void startAutopilotBgAnimatorDrawable(boolean isStart){ if (isStart){ - if (mAnimationBtnDrawable == null) { - mAnimationBtnDrawable = (AnimationDrawable) mAutopilotBtnBg.getBackground(); + if (mAnimationDrawable == null){ + initBtnAnimatonDrawable(); } - if (mAnimationBtnDrawable.isRunning()) { - CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"mAnimationBtnDrawable.isRunning() = true"); - return; + if (mAnimationDrawable != null){ + mAnimationDrawable.start(true, 30, null); } - mAnimationBtnDrawable.selectDrawable(-1); - mAnimationBtnDrawable.start(); }else { clearBgAnimDrawable(); } } private void startingCarBgAnimatorDrawable(boolean isStart){ - if (isStart && svCarStartingFrame != null){ - svCarStartingFrame.setRepeatTimes(-1); - svCarStartingFrame.setBackground(null); - svCarStartingFrame.start(); - }else { - if (svCarStartingFrame != null){ - svCarStartingFrame.reset(); - svCarStartingFrame.setBackgroundResource(R.drawable.light_00000); + if (isStart){ + if (mCarAnimationDrawable == null){ + initCarStartingFrame(); } + mCarIv.setBackgroundResource(0); + mCarAnimationDrawable.start(true,40, null); + }else { + if (mCarAnimationDrawable != null){ + mCarAnimationDrawable.stop(); + } + mCarIv.setBackgroundResource(R.drawable.light_00000); } - } public void startOrStopLoadingAnim(boolean start) { @@ -194,10 +222,9 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V } public void clearBgAnimDrawable() { - if (mAnimationBtnDrawable != null) { - mAnimationBtnDrawable.stop(); + if (mAnimationDrawable != null){ + mAnimationDrawable.stop(); } - mAnimationBtnDrawable = null; } public void closeAllAnimsAndView(){ @@ -209,10 +236,9 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V } public void clearStartingAnimFrame(){ - if (svCarStartingFrame != null){ - svCarStartingFrame.destroy(); + if (mCarAnimationDrawable != null){ + mCarAnimationDrawable.stop(); } - svCarStartingFrame = null; } public void onAutopilotStatusSuccess(){ startOrStopLoadingAnim(false); @@ -221,7 +247,7 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V private void startingAutopilotCountDown() { UiThreadHandler.postDelayed(new Runnable() { @Override - public void run() { //未启动成功10s后做处理 + public void run() { //未启动成功20s后做处理 if (isStarting){ //判断动画是否在进行 ToastUtils.showLong(R.string.taxi_p_start_autopilot_fail_10s_tip); // startOrStopLoadingAnim(false); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java index bebbb2625c..c05c0d4fad 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java @@ -48,12 +48,15 @@ public class TaxiPassengerV2XNotificationView extends IViewNotification { // 设置View的出场位置 setSidePattern(SidePattern.LEFT); - setLayoutGravity(Gravity.LEFT); + setLayoutGravity(Gravity.LEFT | Gravity.TOP); // 设置View的停留位置:相对屏幕左上角的位置 - setOffsetX(getResources(). - getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left)); - setOffsetY(getResources(). - getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top)); +// setOffsetX(getResources(). +// getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left)); +// setOffsetY(getResources(). +// getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top)); + setPadding(getResources(). + getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left), getResources(). + getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top), 0, 0); } @Override diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt index 94f061f359..b3335b40ee 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt @@ -217,6 +217,9 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { private fun commitAndStartAnimation(fraction: Int,title:String) { resetStar() + allStartOrdered.forEach { + it.isEnabled = false + } currentFraction = fraction tvFeel.text = title if(allStarWithWorld!=null&&allStarWithWorld!!.data!=null&&allStarWithWorld!!.data!!.size>0){ @@ -232,10 +235,6 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { // 总量请求失败 单独去取 requestStarWordByStar(fraction) } - -// allStartOrdered.forEach { -// it.isEnabled = false -// } } private var currentAnimarion = 0 private var maxIndex = 0 @@ -315,7 +314,9 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { } override fun onAnimationEnd(animation: Animation?) { - + allStartOrdered.forEach { + it.isEnabled = true + } } override fun onAnimationRepeat(animation: Animation?) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt index a45e01036c..1aa1e9afa3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt @@ -1,74 +1,33 @@ package com.mogo.och.taxi.passenger.ui.leftmenu +import android.annotation.SuppressLint import android.view.MotionEvent import android.view.View -import android.view.WindowManager -class ItemViewTouchListener( - private val windowView: View, - private val wl: WindowManager.LayoutParams, - private val windowManager: WindowManager?, - private val close: (view:View,windowManager: WindowManager?) -> Unit, - private val open : (view:View,windowManager: WindowManager?) -> Unit -) : +class ItemViewTouchListener : View.OnTouchListener { - private var x = 0 // 判断并放跑点击事件 private var dragTime = 0L - private val DEVIATION = 10 - private val NEGATIVEDEVIATION = -10 + @SuppressLint("ClickableViewAccessibility") override fun onTouch(view: View, motionEvent: MotionEvent): Boolean { when (motionEvent.action) { MotionEvent.ACTION_DOWN -> { - x = motionEvent.rawX.toInt() + LeftMenuOpen.dragAndOpen(motionEvent.rawX.toInt(),motionEvent.action) dragTime = System.currentTimeMillis() } MotionEvent.ACTION_MOVE -> { - val nowX = motionEvent.rawX.toInt() - val movedX = nowX - x - x = nowX - wl.apply { - x += movedX - } - if (wl.x > 0 || wl.x < OverlayLeftViewUtils.DEVIATION_WIDTH) { - wl.apply { - x -= movedX - } + if (LeftMenuOpen.dragAndOpen(motionEvent.rawX.toInt(),motionEvent.action)) { return false } - - if (wl.x > NEGATIVEDEVIATION && movedX > 0) { - open(windowView,windowManager) - }else{ - //更新悬浮球控件位置 - windowManager?.updateViewLayout(windowView, wl) - } - if (wl.x < OverlayLeftViewUtils.DEVIATION_WIDTH +DEVIATION && movedX < 0) { - close(windowView,windowManager) - }else{ - //更新悬浮球控件位置 - windowManager?.updateViewLayout(windowView, wl) - } - - } MotionEvent.ACTION_UP -> { - val startX = wl.x - if (startX > OverlayLeftViewUtils.DEVIATION_WIDTH /2 && startX < 0) { - //拖动距离大于一半 自动打开 - open(windowView,windowManager) - } else if (startX < OverlayLeftViewUtils.DEVIATION_WIDTH /2 && startX >= OverlayLeftViewUtils.DEVIATION_WIDTH) { - // 拖动距离小于一半自动关闭 - close(windowView,windowManager) - } + LeftMenuOpen.dragAndOpen(motionEvent.rawX.toInt(),motionEvent.action) if (System.currentTimeMillis() - dragTime > 500) { dragTime = 0 return true } } - else -> { - - } + else -> {} } return false } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt new file mode 100644 index 0000000000..bc5bf31413 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt @@ -0,0 +1,417 @@ +package com.mogo.och.taxi.passenger.ui.leftmenu + +import android.annotation.SuppressLint +import android.content.ContentResolver +import android.database.Cursor +import android.os.IBinder +import android.os.RemoteCallbackList +import android.os.RemoteException +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.eagle.core.utilcode.util.Utils +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.NumberFormatUtil +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.event.FinishActivity +import com.mogo.och.taxi.passenger.mulprocess.BinderCursor +import com.mogo.och.taxi.passenger.mulprocess.BinderProvider +import com.mogo.och.taxi.passenger.mulprocess.ICallback +import com.mogo.och.taxi.passenger.mulprocess.ILeftMenuService +import com.mogo.och.taxi.passenger.ui.video.FloatingDistanceInfoUtils +import com.mogo.och.taxi.passenger.ui.video.VideoActivity +import org.greenrobot.eventbus.EventBus +import rx.Observable +import rx.Observer +import rx.schedulers.Schedulers +import java.util.* + + +@SuppressLint("StaticFieldLeak") +object LeftMenuOpen { + + const val TAG = "mulprocessLeftMenuOpen" + + private var windowView: View? = null + private var wl: WindowManager.LayoutParams? = null + private var windowManager: WindowManager? = null + private var close: ((view: View, windowManager: WindowManager?) -> Unit)? = null + private var open: ((view: View, windowManager: WindowManager?) -> Unit)? = null + + + private var cu: Cursor? = null + + // 两部分主进程和子进程 + private var dragList = mutableSetOf() + + private var orderService: ILeftMenuService? = null + + private var icallbacks: RemoteCallbackList? = null + + var checkIndex = OverlayLeftViewUtils.LIVE + private var lastClickTime = 0L + private const val FAST_CLICK_DELAY_TIME = 1300 // 防止事件发送过快 + + + fun setValue( + windowView: View, + wl: WindowManager.LayoutParams?, + windowManager: WindowManager?, + close: (view: View, windowManager: WindowManager?) -> Unit, + open: (view: View, windowManager: WindowManager?) -> Unit, + isMainProcess: Boolean + ) { + this.open = open + this.close = close + this.windowView = windowView + this.windowManager = windowManager + this.wl = wl + dragList.forEach { + registerDragView(it) + } + if(!isMainProcess) { + registerC() + } + } + + fun clearValue() { + this.open = null + this.close = null + this.windowView = null + this.windowManager = null + this.wl = null + + cu?.let { + it.close() + cu = null + orderService = null + } + val iterator = dragList.iterator() + while (iterator.hasNext()) { + val next = iterator.next() + unRegisterDragView(next,false) + iterator.remove() + } + } + + + private var x = 0 + + // 判断并放跑点击事件 + private const val DEVIATION = 10 + private const val NEGATIVEDEVIATION = -10 + + fun dragAndOpen(newX: Int, action: Int): Boolean { + when (action) { + MotionEvent.ACTION_DOWN -> { + x = newX + } + MotionEvent.ACTION_MOVE -> { + val nowX = newX + val movedX = nowX - x + x = nowX + wl?.let { it -> + it.x += movedX + if (it.x > 0 || it.x < OverlayLeftViewUtils.DEVIATION_WIDTH) { + it.apply { + x -= movedX + } + return true + } + windowView?.let { windowView -> + windowManager?.let { windowManager -> + if (it.x > NEGATIVEDEVIATION && movedX > 0) { + open?.let { it1 -> + UiThreadHandler.getsUiHandler().post { + it1(windowView, windowManager) + } + } + } else { + //更新悬浮球控件位置 + UiThreadHandler.getsUiHandler().post { + windowManager.updateViewLayout(windowView, it) + } + } + if (it.x < OverlayLeftViewUtils.DEVIATION_WIDTH + DEVIATION && movedX < 0) { + close?.let { it1 -> + UiThreadHandler.getsUiHandler().post { + it1(windowView, windowManager) + } + } + } else { + //更新悬浮球控件位置 + UiThreadHandler.getsUiHandler().post { + windowManager.updateViewLayout(windowView, it) + } + } + } + + } + + } + } + MotionEvent.ACTION_UP -> { + wl?.let { wl -> + val startX = wl.x + if (startX > OverlayLeftViewUtils.DEVIATION_WIDTH / 2 && startX < 0) { + //拖动距离大于一半 自动打开 + open?.let { + UiThreadHandler.getsUiHandler().post { + it(windowView!!, windowManager) + } + } + } else if (startX < OverlayLeftViewUtils.DEVIATION_WIDTH / 2 && startX >= OverlayLeftViewUtils.DEVIATION_WIDTH) { + // 拖动距离小于一半自动关闭 + close?.let { + UiThreadHandler.getsUiHandler().post { + it(windowView!!, windowManager) + } + } + } else { + + } + } + } + } + return false + } + + fun registerDragView(view: View?) { + if (view != null) { + dragList.add(view) + view.setOnTouchListener(ItemViewTouchListener()) + view.setOnClickListener { + open?.let { it1 -> it1(windowView!!, windowManager) } + } + } + } + + fun unRegisterDragView(view: View?,remove:Boolean) { + if(remove) { + dragList.remove(view) + } + view?.let { + it.setOnTouchListener(null) + it.setOnClickListener(null) + if(it.id==R.id.ids_video_anchor){ + val parent = it.parent as ViewGroup + parent.removeView(it) + } + } + } + + fun transmissionIndex(index:Int){ + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "tran--transmissionIndex---$index") + if (orderService == null) { + registerC() + } + orderService?.transmissionIndex(index) + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) + } + + /** + * 主进程调用 + */ + fun registerCallbackHost(cb:ICallback?){ + if(icallbacks==null){ + icallbacks = RemoteCallbackList() + } + cb?.let { + icallbacks?.register(it) + } + } + + /** + * 主进程调用 反注册 + */ + fun unregisterCallbackHost(cb:ICallback?){ + cb?.let { + icallbacks?.unregister(it) + } + icallbacks?.kill() + icallbacks = null + } + + /** + * 子进程调用 注册回调 主进程中调用 + * 方便主进程传递到子进程 速度、剩余公里、剩余时间、到达时间 + */ + fun registerCallback(cb:ICallback?){ + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "tran--registerCallback--注册") + if (orderService == null) { + registerC() + } + cb?.let { + orderService?.registerCallback(it) + } + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) + } + + /** + * 子进程调用 反注册 + */ + fun unregisterCallback(cb:ICallback?){ + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "tran--unregisterCallback--反注册") + cb?.let { + orderService?.unRegisterCallback(it) + } + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) + } + + /** + * 主进程调用 向子进程传输 剩余距离、剩余时间、和速度 + */ + fun callCallBack(meters: Long,timeInSecond: Long,speed:Float){ + if(checkIndex == OverlayLeftViewUtils.CONSULT||checkIndex == OverlayLeftViewUtils.MOVIE) { + if (System.currentTimeMillis() - lastClickTime < FAST_CLICK_DELAY_TIME){ + return + } + lastClickTime = System.currentTimeMillis() + + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + CallerLogger.d(M_TAXI_P + TAG, "callCallBack$meters--$timeInSecond--$speed") + try { + val len = icallbacks?.beginBroadcast() + len?.let { + for (i in 0 until len) { + try { + icallbacks?.getBroadcastItem(i)?.onResult(meters, timeInSecond, speed) + } catch (e: RemoteException) { + e.printStackTrace() + } + } + } + icallbacks?.finishBroadcast() + }catch (e:Exception){ + CallerLogger.e(M_TAXI_P + TAG, "callCallBack${e.message}") + } + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) + } + } + + fun invoKeyByEventType(typeID:Int){ + Observable.empty().subscribeOn(Schedulers.io()) + .subscribe(object : Observer { + override fun onCompleted() { + val len = icallbacks?.beginBroadcast() + len?.let { + for (i in 0 until it) { + try { + icallbacks?.getBroadcastItem(i)?.postEvent(typeID) + } catch (e: RemoteException) { + e.printStackTrace() + } + } + } + icallbacks?.finishBroadcast() + } + override fun onError(e: Throwable?) {} + override fun onNext(t: String?) {} + }) + } + + /** + * 主进程、video进程都得调用 + * 主进程在显示是主动调用 + * video进程在天津View是判断是否调用了 + */ + @Synchronized + private fun registerC() { + if(orderService!=null){ + return + } + CallerLogger.d(M_TAXI_P + TAG, "tran--registerC--获取jni") + val resolver: ContentResolver = Utils.getApp().contentResolver + + cu = resolver.query( + BinderProvider.CONTENT_URI, + null, + null, + arrayOf(BinderProvider.SERVICE_LEFTMENU), + null + ) ?: return + + val binder: IBinder = getBinder(cu!!) + try { + orderService = ILeftMenuService.Stub.asInterface(binder) + } catch (e: RemoteException) { + e.printStackTrace() + cu?.close() + cu = null + } + } + + private fun getBinder(cursor: Cursor): IBinder { + val extras = cursor.extras + extras.classLoader = BinderCursor.BinderParcelable::class.java.classLoader + val w = extras.getParcelable("binder") + return w!!.mBinder + } + + val callBack = object : ICallback.Stub() { + override fun onResult(meters :Long, timeInSecond:Long,speed:Float) { + if(speed<0){ + // 距离单位 + var disUnit = "公里" + // 距离 + var remainDis: String? = "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(timeInSecond.toDouble() / 60f).toInt() + + val beforeTime = Calendar.getInstance() + beforeTime.add(Calendar.MINUTE, time) + //到达时间 + val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.TAXI_HH_mm) + FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime) + }else{ + FloatingDistanceInfoUtils.setSpeed(speed) + } + } + + override fun postEvent(type: Int) { + when (type) { + VideoActivity.EVENT_FINISH -> { + EventBus.getDefault().post(FinishActivity()) + } + else -> {} + } + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt index d27143ba02..93b2aa0ed1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt @@ -30,26 +30,29 @@ class ListAdapter(private val context: Context,val list: MutableList() /** * 添加覆盖View在Activity上面 */ @JvmOverloads - fun showOverlayView(context: Activity, ani: Int = -1) { + fun showOverlayView(context: Activity,checkIndex:Int = LIVE,isOpen: Boolean=true, ani: Int = -1,isMainProcess: Boolean = false) { if (isShowing) { return } - if (applicationContext == null) { - applicationContext = context.applicationContext - } if (windowManager == null) { - windowManager = context.windowManager + windowManager = context.getSystemService(WINDOW_SERVICE) as WindowManager } overlayView = LayoutInflater.from(context) @@ -77,20 +83,14 @@ object OverlayLeftViewUtils { or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) - layoutParams(ani,view) + layoutParams(ani,view, isOpen) // 如果正在展示中,并且lastOverlayView不为null,先做移除操作,保证覆盖在最上面的View只有一个,防止叠加导致无法移除 - dismissOverlayView() + dismissOverlayView(false) val vDragField = view.findViewById(R.id.v_drag_field) acivOpenClose = view.findViewById(R.id.aciv_open_close) - dragList.forEach { - it.setOnTouchListener(ItemViewTouchListener( - overlayView!!,params!!, windowManager, ::close, - ::open)) - } - vDragField.setOnTouchListener(ItemViewTouchListener(overlayView!!,params!!, windowManager, ::close, - ::open)) + vDragField.setOnTouchListener(ItemViewTouchListener()) vDragField.setOnClickListener { val start: Int = params!!.x if (start > DEVIATION_WIDTH /2 && start < 10) { @@ -104,51 +104,117 @@ object OverlayLeftViewUtils { val integers = mutableListOf() val liveSelected = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(v: View?) { - close(view, windowManager) - FullVideoUtils.dismissOverlayView(true) - closeConsult() - closeMovice() + override fun onSelect(isCurrentProcess:Boolean) { + LeftMenuOpen.checkIndex = LIVE + if(isCurrentProcess) { + close(view, windowManager) + }else { + LeftMenuOpen.invoKeyByEventType(VideoActivity.EVENT_FINISH) + } + if(isMainProcess){ + //主进程 建议Eventbus实现 + subscribeLive = Observable.timer(300, TimeUnit.MILLISECONDS) + .subscribe { + EventBus.getDefault().post(UIStatus(UIStatus.LIVE)) + } + }else{ + EventBus.getDefault().post(FinishActivity()) + } + } + } + + val overViewSelected = object :ListAdapter.OnTabSelectListener{ + override fun onSelect(isCurrentProcess:Boolean) { + LeftMenuOpen.checkIndex = OVERVIEW + if(isCurrentProcess) { + close(view, windowManager) + }else { + LeftMenuOpen.invoKeyByEventType(VideoActivity.EVENT_FINISH) + } + if(isMainProcess){ + //主进程 建议Eventbus实现 + subscribeOVERVIEW = Observable.timer(300, TimeUnit.MILLISECONDS) + .subscribe { + EventBus.getDefault().post(UIStatus(UIStatus.OVERVIEW)) + } + }else{ + EventBus.getDefault().post(FinishActivity()) + } } } val consultSelect = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(v: View?) { - close(view, windowManager) - FullVideoUtils.dismissOverlayView(true) - closeMovice() - taxiPassengerMogoConsultView = TaxiPassengerMogoConsultView(context) - OverlayViewUtils.showOverlayView(context,taxiPassengerMogoConsultView) + override fun onSelect(isCurrentProcess:Boolean) { + LeftMenuOpen.checkIndex = CONSULT + if(isCurrentProcess) { + close(view, windowManager) + //计算订单起点和终点距离 + val sumDis = SharedPrefsMgr.getInstance(context).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) + VideoActivity.startActivity(context, VideoActivity.VIDEOTYPE_CONSULT,sumDis) + } } } val entertainmentSelect = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(v: View?) { - close(view, windowManager) - FullVideoUtils.dismissOverlayView(true) - closeConsult() - taxiPassengerMogoMoviesView = TaxiPassengerMogoMoviesView(context) - OverlayViewUtils.showOverlayView(context,taxiPassengerMogoMoviesView) + override fun onSelect(isCurrentProcess:Boolean) { + LeftMenuOpen.checkIndex = MOVIE + if(isCurrentProcess) { + close(view, windowManager) + val sumDis = SharedPrefsMgr.getInstance(context).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) + VideoActivity.startActivity(context, VideoActivity.VIDEOTYPE_MOIES,sumDis) + } } } - integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_live_select,R.drawable.taxi_p_mogo_live_selected,true,liveSelected)) + integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_live_select,R.drawable.taxi_p_mogo_live_selected,false,liveSelected)) + integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_overview_select,R.drawable.taxi_p_mogo_overview_selected,false,overViewSelected)) integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_consult_select,R.drawable.taxi_p_mogo_consult_selected,false,consultSelect)) integers.add(LeftMenuModel(R.drawable.taxi_p_mogo_entertainment_select,R.drawable.taxi_p_mogo_entertainment_selected,false,entertainmentSelect)) + integers.forEachIndexed { index, leftMenuModel -> + leftMenuModel.isChecked = index == checkIndex + } lvSelectItem.adapter = ListAdapter(context, integers) + + addTarget(context) + + LeftMenuOpen.setValue(view, params, windowManager,::close,::open,isMainProcess) try { windowManager!!.addView(overlayView, params) + checkProcess() isShowing = true + } catch (e: WindowManager.BadTokenException) { + isShowing = true; + dismissOverlayView(false) } catch (e: Exception) { e.printStackTrace() } } } + private fun addTarget(context: Activity) { + try { + val content = + context.window.decorView.findViewById(android.R.id.content) + val textView = View(context) + textView.id = R.id.ids_video_anchor + addDragTarget(textView) + val param: FrameLayout.LayoutParams = + FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT) + param.gravity = Gravity.CENTER_VERTICAL + param.width = 143 + param.height = 308 + textView.layoutParams = param + content.addView(textView) + } catch (e: java.lang.Exception) { + e.printStackTrace() + } + } + /** * 打开状态栏 */ private fun open(overlayView: View,windowManager: WindowManager?) { + checkProcess() val valueAnimator = ValueAnimator.ofInt(params!!.x, 0) valueAnimator.duration = 100 valueAnimator.interpolator = LinearInterpolator() @@ -176,28 +242,50 @@ object OverlayLeftViewUtils { valueAnimator.start() } - fun open(){ - if(isShowing) { - overlayView?.let { open(it, windowManager) } - } - } - - fun dragTarget(view :View){ - if(view!=null) { - dragList.add(view) - params?.let { - view.setOnTouchListener( - ItemViewTouchListener( - overlayView!!, params!!, windowManager, ::close, - ::open - ) - ) + private fun checkProcess() { + ThreadPoolService.execute { + val currentProcessName = ProcessUtils.getCurrentProcessName() + if (currentProcessName.contains(":video")) { + return@execute + } + val allBackgroundProcesses = ProcessUtils.getAllBackgroundProcesses() + var haveProcess = false + allBackgroundProcesses.forEach { + if (it.contains(":video")) { + haveProcess = true + return@forEach + } + } + if (!haveProcess) { + EmptyService.startService(Utils.getApp()) } } } - fun removeDragTarget(view: View){ - dragList.remove(view) + fun addDragTarget(view :View?){ + LeftMenuOpen.registerDragView(view) + } + + fun removeDragTarget(view: View?){ + LeftMenuOpen.unRegisterDragView(view,true) + } + + /** + * + */ + fun transmissionIndex(index:Int){ + if(!ProcessUtils.isMainProcess(Utils.getApp())) { + LeftMenuOpen.transmissionIndex(index) + } + } + + fun transmissionIndexGet(index: Int){ + overlayView?.let { + val lvSelectItem = it.findViewById(R.id.lv_select_item) + val listAdapter = lvSelectItem.adapter as ListAdapter + listAdapter.setSelectIndex(index,false) + } + } private fun closeByTime( @@ -226,8 +314,10 @@ object OverlayLeftViewUtils { valueAnimator.duration = 100 valueAnimator.interpolator = LinearInterpolator() valueAnimator.addUpdateListener { - params?.x = it.animatedValue as Int - windowManager?.updateViewLayout(overlayView, params) + params?.let { paramsIn-> + paramsIn.x = it.animatedValue as Int + windowManager?.updateViewLayout(overlayView, paramsIn) + } } valueAnimator.addListener(object : Animator.AnimatorListener { override fun onAnimationStart(animation: Animator?) {} @@ -237,11 +327,14 @@ object OverlayLeftViewUtils { pivotY = (height /2).toFloat() rotation = 180f } - params?.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or - WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or - WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - windowManager?.updateViewLayout(overlayView, params) + params?.let { + it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + windowManager?.updateViewLayout(overlayView, it) + } + } override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationRepeat(animation: Animator?) {} @@ -249,16 +342,21 @@ object OverlayLeftViewUtils { valueAnimator.start() } - private fun layoutParams(ani: Int,view :View) { + private fun layoutParams(ani: Int,view :View,isOpen: Boolean) { if(params ==null) { params = WindowManager.LayoutParams() } + params = WindowManager.LayoutParams() params?.let { it.width = WIDTH it.height = WindowManager.LayoutParams.MATCH_PARENT it.alpha = 1.0f it.gravity = Gravity.START or Gravity.CENTER_HORIZONTAL - it.x = 0 + if(isOpen) { + it.x = 0 + }else{ + it.x = DEVIATION_WIDTH + } it.y = 0 it.format = PixelFormat.RGBA_8888 // 设置窗口类型为应用子窗口,和PopupWindow同类型 @@ -274,30 +372,39 @@ object OverlayLeftViewUtils { } } + fun getStatus():Boolean{ + return isShowing + } + /** * 移除覆盖View在Activity上面 */ - fun dismissOverlayView() { + fun dismissOverlayView(isMain:Boolean) { if (!isShowing) { return } - subscribe?.let { - if (!it.isDisposed) { - it.dispose() - } - } - FullVideoUtils.dismissOverlayView(true) - // 管理的要关闭都得关闭 - dragList.forEach { - it.setOnTouchListener(null) - } - dragList.clear() - closeConsult() - closeMovice() + releaseDelay(subscribe) + releaseDelay(subscribeLive) + releaseDelay(subscribeOVERVIEW) subscribe = null + subscribeLive = null + subscribeOVERVIEW = null + // 管理的要关闭都得关闭 + if(isMain) { + LeftMenuOpen.invoKeyByEventType(VideoActivity.EVENT_FINISH) + } + + LeftMenuOpen.clearValue() try { if (windowManager != null && overlayView != null) { - windowManager!!.removeView(overlayView) + windowManager!!.removeViewImmediate(overlayView) + params = null + } + if(windowManager!=null){ + windowManager = null + } + if(params!=null){ + params = null } if (overlayView!=null) { overlayView = null @@ -311,19 +418,11 @@ object OverlayLeftViewUtils { } } - private fun closeMovice() { - OverlayViewUtils.dismissOverlayView(taxiPassengerMogoMoviesView) - taxiPassengerMogoMoviesView= null - System.gc() - } - - private fun closeConsult() { - OverlayViewUtils.dismissOverlayView(taxiPassengerMogoConsultView) - taxiPassengerMogoConsultView = null - System.gc() - } - - private fun getViewBounds(view: View): Rect { - return Rect(view.left, view.top, view.right, view.bottom) + private fun releaseDelay(subscribe: Disposable?) { + subscribe?.let { + if (!it.isDisposed) { + it.dispose() + } + } } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt new file mode 100644 index 0000000000..5122739983 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FloatingDistanceInfoUtils.kt @@ -0,0 +1,251 @@ +package com.mogo.och.taxi.passenger.ui.video + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.graphics.PixelFormat +import android.os.Build +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.WindowManager +import android.widget.SeekBar +import androidx.appcompat.widget.AppCompatTextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.wigets.OCHGradientTextView +import com.mogo.och.taxi.passenger.R + +/** + * 视频全屏播放 + * + * @author yangyakun + */ +@SuppressLint("StaticFieldLeak") +object FloatingDistanceInfoUtils { + private const val TAG = "OverlayViewUtils" + private var windowManager: WindowManager? = null + + @Volatile + private var isShowing = false + + private var params:WindowManager.LayoutParams?=null + private var paramsBottom:WindowManager.LayoutParams?=null + + + private var orderInfoView: View?=null + private var processView: SeekBar?=null + + // 距离 + private var actvDistancew: OCHGradientTextView?=null + // 距离单位 + private var actvDistancewUnit: AppCompatTextView?=null + // 剩余时间 + private var actvSurplusTime: OCHGradientTextView?=null + // 到达时间 + private var actvArrivedTime: OCHGradientTextView?=null + + private var actvSpeed: OCHGradientTextView?=null + + + /** + * 添加覆盖View在Activity上面 + */ + @JvmOverloads + fun showOverlayView(context: Activity,ani: Int = -1,sumDis:Int) { + if (isShowing) { + return + } + if (windowManager == null) { + windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager + } + + orderInfoView = LayoutInflater.from(context) + .inflate(R.layout.taxi_p_window_float_distance_info, null) as ConstraintLayout + orderInfoView?.let { view -> + // 设置View显示模式,沉浸式的侵入到状态栏,导航栏 + view.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_LAYOUT_STABLE + or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) + layoutParams(ani) + actvSpeed = view.findViewById(R.id.actv_speed) + actvDistancew = view.findViewById(R.id.actv_distancew) + actvDistancewUnit = view.findViewById(R.id.actv_distancew_unit) + actvSurplusTime = view.findViewById(R.id.actv_surplus_time) + actvArrivedTime = view.findViewById(R.id.actv_arrived_time) + + val intArrayOf = intArrayOf( + context.resources.getColor(R.color.taxi_p_video_gradient_end), + context.resources.getColor(R.color.taxi_p_video_gradient_start) + ) + + actvSpeed?.setVertrial(true) + actvSpeed?.setmColorList(intArrayOf) + + actvDistancew?.setVertrial(true) + actvDistancew?.setmColorList(intArrayOf) + + actvSurplusTime?.setVertrial(true) + actvSurplusTime?.setmColorList(intArrayOf) + + actvArrivedTime?.setVertrial(true) + actvArrivedTime?.setmColorList(intArrayOf) + + processView = SeekBar(context) + processView?.let { + it.max = sumDis + layoutParamsBottom(-1) + it.setPadding(0,0,0,0) + it.progressDrawable = ContextCompat.getDrawable(context,R.drawable.taxi_video_order_process) + it.thumb = null + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + it.maxHeight = 14 + it.minHeight = 14 + } + } + + + // 如果正在展示中,并且lastOverlayView不为null,先做移除操作,保证覆盖在最上面的View只有一个,防止叠加导致无法移除 + dismissOverlayView() + + try { + windowManager!!.addView(orderInfoView, params) + windowManager!!.addView(processView, paramsBottom) + isShowing = true + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + + private fun layoutParams(ani: Int) { + if(params ==null) { + params = WindowManager.LayoutParams() + } + params = WindowManager.LayoutParams() + params?.let { + it.width = WindowManager.LayoutParams.WRAP_CONTENT + it.height = WindowManager.LayoutParams.WRAP_CONTENT + it.alpha = 1.0f + it.gravity = Gravity.END or Gravity.TOP + it.x = 0 + it.y = 199 + it.format = PixelFormat.RGBA_8888 + // 设置窗口类型为应用子窗口,和PopupWindow同类型 + it.type = WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL + // 没有边界限制,允许窗口扩展到屏幕外 + it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + if (ani != -1) { + it.windowAnimations = ani + } + } + } + + private fun layoutParamsBottom(ani: Int) { + if(paramsBottom ==null) { + paramsBottom = WindowManager.LayoutParams() + } + paramsBottom = WindowManager.LayoutParams() + paramsBottom?.let { + it.width = WindowManager.LayoutParams.MATCH_PARENT + it.height = WindowManager.LayoutParams.WRAP_CONTENT + it.alpha = 1.0f + it.gravity = Gravity.START or Gravity.BOTTOM + it.x = 0 + it.y = 0 + it.format = PixelFormat.RGBA_8888 + // 设置窗口类型为应用子窗口,和PopupWindow同类型 + it.type = WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL + // 没有边界限制,允许窗口扩展到屏幕外 + it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or + WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + if (ani != -1) { + it.windowAnimations = ani + } + } + } + + fun setSpeed(speed: Float) { + val newSpeed: Int = (Math.abs(speed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值 + + UiThreadHandler.getsUiHandler().post { + actvSpeed?.text = "$newSpeed" + } + } + + fun setDistance(meters:Long,remainDis: String?, disUnit: String, time: Int, arriveTime: String) { + UiThreadHandler.getsUiHandler().post { + actvDistancew?.text = "$remainDis" + actvDistancewUnit?.text = "距离($disUnit)" + actvSurplusTime?.text = "$time" + actvArrivedTime?.text = arriveTime + + processView?.let { + val process = it.max - meters + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + it.setProgress(process.toInt(), true) + }else{ + it.progress = process.toInt() + } + it.jumpDrawablesToCurrentState() + } + + } + } + + /** + * 移除覆盖View在Activity上面 + */ + fun dismissOverlayView() { + if (!isShowing) { + return + } + try { + if (windowManager != null && orderInfoView != null) { + windowManager!!.removeViewImmediate(orderInfoView) + params = null + } + if (windowManager != null && processView != null) { + windowManager!!.removeViewImmediate(processView) + paramsBottom = null + } + if(windowManager!=null){ + windowManager = null + } + if (orderInfoView!=null) { + orderInfoView = null + } + if(processView!=null){ + processView = null + } + actvDistancew?.let { + actvDistancew = null + } + actvDistancewUnit?.let { + actvDistancewUnit = null + } + actvSurplusTime?.let { + actvSurplusTime = null + } + actvArrivedTime?.let { + actvArrivedTime = null + } + actvSpeed?.let { + actvSpeed = null + } + + isShowing = false + } catch (e: Exception) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt index 262849a027..8691df08b1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/FullVideoUtils.kt @@ -10,15 +10,14 @@ import com.shuyu.gsyvideoplayer.GSYVideoManager import java.lang.Exception /** - * 遮罩层工具类 + * 视频全屏播放 * - * @author mogoauto + * @author yangyakun */ @SuppressLint("StaticFieldLeak") object FullVideoUtils { private const val TAG = "OverlayViewUtils" private var windowManager: WindowManager? = null - private var applicationContext: Context? = null @Volatile private var isShowing = false @@ -33,9 +32,6 @@ object FullVideoUtils { */ @JvmOverloads fun showOverlayView(context: Activity, overlayView: View, ani: Int = -1) { - if (applicationContext == null) { - applicationContext = context.applicationContext - } if (windowManager == null) { windowManager = context.windowManager } @@ -86,7 +82,8 @@ object FullVideoUtils { } try { if (windowManager != null) { - windowManager!!.removeView(lastOverlayView) + windowManager!!.removeViewImmediate(lastOverlayView) + windowManager = null } if (lastOverlayView != null) { lastOverlayView = null diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java index 0798eaf0a6..4e01541cd3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java @@ -14,6 +14,7 @@ import com.bumptech.glide.request.RequestOptions; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.och.taxi.passenger.R; import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay; +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack; import java.util.List; @@ -23,6 +24,7 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter itemDataList = null; private Context context = null; private OnThumbImageClilckListener onThumbImageClilckListener; + private RecyclerView recyclerView; public OnThumbImageClilckListener getOnThumbImageClilckListener() { return onThumbImageClilckListener; @@ -32,9 +34,10 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter itemDataList) { + public RecyclerVideoAdapter(Context context, List itemDataList,RecyclerView recyclerView) { this.itemDataList = itemDataList; this.context = context; + this.recyclerView = recyclerView; } public TaxiPassengerVideoPlay getItemByPosition(int position){ @@ -53,6 +56,8 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter() - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png","蘑菇车联覆盖生活的方方面面")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png","蘑菇车联之红旗车队")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png","蘑菇车联牵手成都大运会")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v","https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png","多视角体验蘑菇车联自动驾驶")) - val recyclerVideoAdapter = RecyclerVideoAdapter(context, arrayListOf) - val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) - carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener ()) - carouselLayoutManager.maxVisibleItems = 1 - indicatorView.notifyDataChanged(arrayListOf.size) - indicatorView.setSlideMode(IndicatorSlideMode.SCALE) - indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) - indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) - indicatorView.setSliderColor(Color.parseColor("#80FFFFFF"), Color.parseColor("#2972FF"),Color.parseColor("#27C8FF")) - indicatorView.setSliderWidth(16f, 101f) - indicatorView.setSliderHeight(16f) - indicatorView.setSliderGap(30f) - rvVideoPlaylist.addOnScrollListener(object: CenterScrollListener() { - var prePlayerPosition = 0 - override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { - //播放视频 - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - indicatorView.onPageSelected(centerItemPosition) - if(player is ConsultVideoPlayer){ - if(prePlayerPosition!=centerItemPosition) { - if(player.currentState==GSYVideoView.CURRENT_STATE_PAUSE){ - player.onVideoReset() - }else{ - } - val playerHolder = carouselLayoutManager.findViewByPosition(prePlayerPosition) - val prePlayer = playerHolder?.findViewById(R.id.video_item_player) - prePlayer?.let { - if(it is ConsultVideoPlayer){ - it.onVideoReset() - } - } - val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] - setBackageAndPlayNext(taxiPassengerVideoPlay, player, centerItemPosition) - }else{ - player.onVideoResume(false) - } - } - prePlayerPosition = centerItemPosition - } - - override fun pageStop() { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer){ - player.onVideoPause() - } - } - - }) - carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> - val fl = adapterPosition - floor(adapterPosition) - var currentIndex = currentPosition - if(fl>0.5){ - if(currentPosition==0){ - currentIndex = rvVideoPlaylist.adapter!!.itemCount-1 - }else { - currentIndex -= 1 - } - } - indicatorView.onPageScrolled(currentIndex, fl, 0) - } - recyclerVideoAdapter.setOnThumbImageClilckListener { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer) { - player.onVideoReset() - player.thumbImageViewLayout.visibility = View.VISIBLE - } - rvVideoPlaylist.smoothScrollToPosition(it) - } - rvVideoPlaylist.layoutManager = carouselLayoutManager - rvVideoPlaylist.setHasFixedSize(true) - rvVideoPlaylist.adapter = recyclerVideoAdapter - } - - private fun setBackageAndPlayNext( - taxiPassengerVideoPlay: TaxiPassengerVideoPlay, - player: ConsultVideoPlayer, - centerItemPosition: Int, - ) { - // 设置背景图片 - Glide.with(context).asBitmap() - .load(taxiPassengerVideoPlay.imageUrl) - .apply( - RequestOptions().transform( - GlideBlurTransform(context, taxiPassengerVideoPlay.imageUrl, 100) - ) - ) - .into(object : SimpleTarget() { - override fun onResourceReady( - resource: Bitmap, - transition: Transition? - ) { - clContain.background = BitmapDrawable(context.resources, resource) - } - }) - if(player.getVideoAllCallBack()==null) { - player.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - player.onVideoReset() - val itemCount = rvVideoPlaylist.adapter?.itemCount - itemCount?.let { - if (centerItemPosition == itemCount - 1) { - rvVideoPlaylist.smoothScrollToPosition(0) - } else { - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition + 1) - } - } - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - super.onClickBlank(url, *objects) - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition) - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - super.onPlayError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - super.onClickStartError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - }) - } - } - - - override fun onWindowFocusChanged(hasWindowFocus: Boolean) { - super.onWindowFocusChanged(hasWindowFocus) - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if (player is ConsultVideoPlayer) { - if(hasWindowFocus){// 获取焦点两种情况 - // 恢复播放和开始播放 - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - when (player.currentState) { - GSYVideoView.CURRENT_STATE_PAUSE -> { - player.onVideoResume(false) - } - GSYVideoView.CURRENT_STATE_PLAYING -> { - } - else -> { - val recyclerVideoAdapter = - rvVideoPlaylist.adapter as RecyclerVideoAdapter - setBackageAndPlayNext( - recyclerVideoAdapter.getItemByPosition(centerItemPosition), - player, centerItemPosition - ) - //player.startPlayLogic() - } - } - } - }else { - // 离开应用 暂停视频 - // 关闭 onDetachedFromWindow 会reset - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - player.onVideoPause() - } - } - } - - } - - } - - private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { - val centerItemPosition: Int = carouselLayoutManager.centerItemPosition - val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) - val player = playerHolder?.findViewById(R.id.video_item_player) - return Pair(centerItemPosition, player) - } - - - override fun onDetachedFromWindow() { - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (_: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if(player is ConsultVideoPlayer){ - player.currentPlayer.release() - player.onVideoReset() - } - } - OverlayLeftViewUtils.removeDragTarget(vOpenLeft) - super.onDetachedFromWindow() - } - - init { - try { - initView(context) - } catch (e: Exception) { - e.printStackTrace() - } - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt deleted file mode 100644 index 2693764339..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/TaxiPassengerMogoMoviesView.kt +++ /dev/null @@ -1,272 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.video - -import android.content.Context -import android.graphics.Bitmap -import android.graphics.Color -import android.graphics.drawable.BitmapDrawable -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.RelativeLayout -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import com.bumptech.glide.request.RequestOptions -import com.bumptech.glide.request.target.SimpleTarget -import com.bumptech.glide.request.transition.Transition -import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay -import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils -import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager -import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselZoomPostLayoutListener -import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CenterScrollListener -import com.mogo.och.taxi.passenger.utils.blur.GlideBlurTransform -import com.mogo.och.taxi.passenger.widget.ConsultVideoPlayer -import com.mogo.och.taxi.passenger.widget.indicator.IndicatorView -import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorOrientation -import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorSlideMode -import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorStyle -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import com.shuyu.gsyvideoplayer.video.base.GSYVideoView -import java.util.* -import kotlin.math.floor - - -/** - * - * 蘑菇咨询 - * Created on 2022/5/16 - */ -class TaxiPassengerMogoMoviesView :RelativeLayout { - - constructor(context: Context?) : super(context) - - constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet) - - constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) - - constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) - - private lateinit var rvVideoPlaylist: RecyclerView - private lateinit var indicatorView: IndicatorView - private lateinit var clContain: ConstraintLayout - private lateinit var vOpenLeft: View - - private fun initView(context: Context) { - LayoutInflater.from(context).inflate(R.layout.taxi_p_mogo_movies, this, true) - rvVideoPlaylist = findViewById(R.id.rv_video_playlist) - indicatorView = findViewById(R.id.indicatorView) - clContain = findViewById(R.id.cl_contain) - - vOpenLeft = findViewById(R.id.v_open_left) - vOpenLeft.setOnClickListener { - OverlayLeftViewUtils.open() - } - OverlayLeftViewUtils.dragTarget(vOpenLeft) - - val arrayListOf = ArrayList() - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png","小宝宝")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png","小猫")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558730074/星空.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559406169/4.png","星空")) - arrayListOf.add(TaxiPassengerVideoPlay("https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558644708/海浪.mp4","https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559384635/3.png","星空")) - val recyclerVideoAdapter = RecyclerVideoAdapter(context, arrayListOf) - val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) - carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener ()) - carouselLayoutManager.maxVisibleItems = 1 - indicatorView.notifyDataChanged(arrayListOf.size) - indicatorView.setSlideMode(IndicatorSlideMode.SCALE) - indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) - indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) - indicatorView.setSliderColor(Color.parseColor("#80FFFFFF"), Color.parseColor("#2972FF"),Color.parseColor("#27C8FF")) - indicatorView.setSliderWidth(16f, 101f) - indicatorView.setSliderHeight(16f) - indicatorView.setSliderGap(30f) - rvVideoPlaylist.addOnScrollListener(object: CenterScrollListener() { - var prePlayerPosition = 0 - override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { - //播放视频 - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - indicatorView.onPageSelected(centerItemPosition) - if(player is ConsultVideoPlayer){ - if(prePlayerPosition!=centerItemPosition) { - if(player.currentState==GSYVideoView.CURRENT_STATE_PAUSE){ - player.onVideoReset() - }else{ - } - val playerHolder = carouselLayoutManager.findViewByPosition(prePlayerPosition) - val prePlayer = playerHolder?.findViewById(R.id.video_item_player) - prePlayer?.let { - if(it is ConsultVideoPlayer){ - it.onVideoReset() - } - } - val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] - setBackageAndPlayNext(taxiPassengerVideoPlay, player, centerItemPosition) - }else{ - player.onVideoResume(false) - } - } - prePlayerPosition = centerItemPosition - } - - override fun pageStop() { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer){ - player.onVideoPause() - } - } - - }) - carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> - val fl = adapterPosition - floor(adapterPosition) - var currentIndex = currentPosition - if(fl>0.5){ - if(currentPosition==0){ - currentIndex = rvVideoPlaylist.adapter!!.itemCount-1 - }else { - currentIndex -= 1 - } - } - indicatorView.onPageScrolled(currentIndex, fl, 0) - } - recyclerVideoAdapter.setOnThumbImageClilckListener { - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(player is ConsultVideoPlayer) { - player.onVideoReset() - player.thumbImageViewLayout.visibility = View.VISIBLE - } - rvVideoPlaylist.smoothScrollToPosition(it) - } - rvVideoPlaylist.layoutManager = carouselLayoutManager - rvVideoPlaylist.setHasFixedSize(true) - rvVideoPlaylist.adapter = recyclerVideoAdapter - } - - private fun setBackageAndPlayNext( - taxiPassengerVideoPlay: TaxiPassengerVideoPlay, - player: ConsultVideoPlayer, - centerItemPosition: Int, - ) { - // 设置背景图片 - Glide.with(context).asBitmap() - .load(taxiPassengerVideoPlay.imageUrl) - .apply( - RequestOptions().transform( - GlideBlurTransform(context, taxiPassengerVideoPlay.imageUrl, 85) - ) - ) - .into(object : SimpleTarget() { - override fun onResourceReady( - resource: Bitmap, - transition: Transition? - ) { - clContain.background = BitmapDrawable(context.resources, resource) - } - }) - if(player.getVideoAllCallBack()==null) { - player.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - player.onVideoReset() - val itemCount = rvVideoPlaylist.adapter?.itemCount - itemCount?.let { - if (centerItemPosition == itemCount - 1) { - rvVideoPlaylist.smoothScrollToPosition(0) - } else { - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition + 1) - } - } - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - super.onClickBlank(url, *objects) - rvVideoPlaylist.smoothScrollToPosition(centerItemPosition) - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - super.onPlayError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - super.onClickStartError(url, *objects) - ToastUtils.showLong("哎呀,出错了,看看其他视频吧") - } - }) - } - } - - - override fun onWindowFocusChanged(hasWindowFocus: Boolean) { - super.onWindowFocusChanged(hasWindowFocus) - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if (player is ConsultVideoPlayer) { - if(hasWindowFocus){// 获取焦点两种情况 - // 恢复播放和开始播放 - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - when (player.currentState) { - GSYVideoView.CURRENT_STATE_PAUSE -> { - player.onVideoResume(false) - } - GSYVideoView.CURRENT_STATE_PLAYING -> { - } - else -> { - val recyclerVideoAdapter = - rvVideoPlaylist.adapter as RecyclerVideoAdapter - setBackageAndPlayNext( - recyclerVideoAdapter.getItemByPosition(centerItemPosition), - player, centerItemPosition - ) - //player.startPlayLogic() - } - } - } - }else { - // 离开应用 暂停视频 - // 关闭 onDetachedFromWindow 会reset - if(player.isIfCurrentIsFullscreen){// 全屏了 - - }else { - player.onVideoPause() - } - } - } - - } - - } - - private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { - val centerItemPosition: Int = carouselLayoutManager.centerItemPosition - val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) - val player = playerHolder?.findViewById(R.id.video_item_player) - return Pair(centerItemPosition, player) - } - - - override fun onDetachedFromWindow() { - val carouselLayoutManager = rvVideoPlaylist.layoutManager as CarouselLayoutManager - val (_: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if(player is ConsultVideoPlayer){ - player.currentPlayer.release() - player.onVideoReset() - } - } - OverlayLeftViewUtils.removeDragTarget(vOpenLeft) - super.onDetachedFromWindow() - } - - init { - try { - initView(context) - } catch (e: Exception) { - e.printStackTrace() - } - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt new file mode 100644 index 0000000000..d743fd517a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt @@ -0,0 +1,402 @@ +package com.mogo.och.taxi.passenger.ui.video + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.net.Uri +import android.os.Bundle +import android.view.View +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.AppCompatImageView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.NumberFormatUtil +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst +import com.mogo.och.taxi.passenger.event.FinishActivity +import com.mogo.och.taxi.passenger.mulprocess.ICallback +import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen +import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils +import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager +import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselZoomPostLayoutListener +import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CenterScrollListener +import com.mogo.och.taxi.passenger.utils.FixMemoryLeak +import com.mogo.och.taxi.passenger.widget.ConsultVideoPlayer +import com.mogo.och.taxi.passenger.widget.indicator.IndicatorView +import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorOrientation +import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorSlideMode +import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorStyle +import com.shuyu.gsyvideoplayer.video.base.GSYVideoView +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode +import rx.Observable +import rx.Observer +import rx.Subscription +import rx.android.schedulers.AndroidSchedulers +import rx.schedulers.Schedulers +import java.util.Calendar +import java.util.concurrent.TimeUnit +import kotlin.collections.ArrayList +import kotlin.math.floor + + +class VideoActivity : AppCompatActivity() { + + private var rvVideoPlaylist: RecyclerView?=null + private lateinit var indicatorView: IndicatorView + private lateinit var clContain: ConstraintLayout + private lateinit var acivTitleIcon: AppCompatImageView + private lateinit var tvTitle: TextView + private var subscribe: Subscription?=null + private val TAG = "mulprocessVideoActivity" + + private val arrayListOf = ArrayList() + + + companion object{ + const val VIDEOTYPE = "VIDEOTYPE" + const val VIDEOTYPE_CONSULT = 0 + const val VIDEOTYPE_MOIES = 1 + const val VIDEOTYPE_CLOSE = 2 + + const val EVENT_FINISH = 0 + + fun startActivity(context:Context,videoType:Int,sumDis:Int){ + val intent = Intent(context, VideoActivity::class.java) + intent.putExtra(VIDEOTYPE, videoType) + intent.putExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,sumDis) + context.startActivity(intent) + } + } + + private var videotype = VIDEOTYPE_CONSULT + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EventBus.getDefault().register(this) + setContentView(R.layout.taxi_p_arrived_mogo_consult) + initView() + configPage() + } + + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + setIntent(intent) + configPage() + } + + private fun configPage() { + FullVideoUtils.dismissOverlayView(true) + releaseOnNewInstance() + when (intent.getIntExtra(VIDEOTYPE, VIDEOTYPE_CONSULT)) { + VIDEOTYPE_CONSULT -> { + videotype = VIDEOTYPE_CONSULT + acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_consult_title_icon) + tvTitle.text = "蘑菇资讯" + initConsultData() + } + VIDEOTYPE_MOIES -> { + videotype = VIDEOTYPE_MOIES + acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_movies_title_icon) + tvTitle.text = "影视娱乐" + initMoviesData() + } + } + initListener() + initData() + LeftMenuOpen.registerCallback(LeftMenuOpen.callBack) + } + + private fun initConsultData(){ + arrayListOf.clear() + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png", + "蘑菇车联覆盖生活的方方面面" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "蘑菇车联之红旗车队" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "蘑菇车联牵手成都大运会" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "多视角体验蘑菇车联自动驾驶" + ) + ) + } + + private fun initMoviesData() { + arrayListOf.clear() + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png", + "小宝宝" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png", + "小猫" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558730074/星空.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559406169/4.png", + "星空" + ) + ) + arrayListOf.add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558644708/海浪.mp4", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559384635/3.png", + "星空" + ) + ) + } + + private fun initData() { + val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) + carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener()) + carouselLayoutManager.maxVisibleItems = 1 + indicatorView.notifyDataChanged(arrayListOf.size) + indicatorView.setSlideMode(IndicatorSlideMode.SCALE) + indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) + indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) + indicatorView.setSliderColor( + Color.parseColor("#FFFFFF"), Color.parseColor("#26C5FD"), + Color.parseColor("#26C5FD") + ) + indicatorView.setSliderWidth(9f, 54f) + indicatorView.setSliderHeight(9f) + indicatorView.setSliderGap(36f) + rvVideoPlaylist?.addOnScrollListener(object : CenterScrollListener() { + var prePlayerPosition = 0 + override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { + //播放视频 + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + indicatorView.onPageSelected(centerItemPosition) + if (player is ConsultVideoPlayer) { + if (prePlayerPosition != centerItemPosition) { + if (player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) { + player.onVideoReset() + } + val playerHolder = + carouselLayoutManager.findViewByPosition(prePlayerPosition) + val prePlayer = + playerHolder?.findViewById(R.id.video_item_player) + prePlayer?.onVideoReset() + val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] + setBackageAndPlayNext(taxiPassengerVideoPlay) + } else { + player.onVideoResume(false) + } + } + prePlayerPosition = centerItemPosition + } + + override fun pageStop() { + val (_: Int, player) = getPlayer(carouselLayoutManager) + if (player is ConsultVideoPlayer) { + player.onVideoPause() + } + } + + }) + carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> + val fl = adapterPosition - floor(adapterPosition) + var currentIndex = currentPosition + if (fl > 0.5) { + if (currentPosition == 0) { + currentIndex = rvVideoPlaylist?.adapter!!.itemCount - 1 + } else { + currentIndex -= 1 + } + } + indicatorView.onPageScrolled(currentIndex, fl, 0) + } + val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf,rvVideoPlaylist) + recyclerVideoAdapter.setOnThumbImageClilckListener { + val (_: Int, player) = getPlayer(carouselLayoutManager) + if (player is ConsultVideoPlayer) { + player.onVideoReset() + player.thumbImageViewLayout.visibility = View.VISIBLE + } + rvVideoPlaylist?.smoothScrollToPosition(it) + } + rvVideoPlaylist?.layoutManager = carouselLayoutManager + rvVideoPlaylist?.setHasFixedSize(true) + rvVideoPlaylist?.adapter = recyclerVideoAdapter + } + + private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { + val centerItemPosition: Int = carouselLayoutManager.centerItemPosition + val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) + val player = playerHolder?.findViewById(R.id.video_item_player) + return Pair(centerItemPosition, player) + } + + private fun initListener() { + } + + private fun initView() { + rvVideoPlaylist = findViewById(R.id.rv_video_playlist) + indicatorView = findViewById(R.id.indicatorView) + clContain = findViewById(R.id.cl_contain) + acivTitleIcon = findViewById(R.id.aciv_title_icon) + tvTitle = findViewById(R.id.tv_mogo_consult) + acivTitleIcon.setOnClickListener { + //finish() + } + } + + + private fun setBackageAndPlayNext(taxiPassengerVideoPlay: TaxiPassengerVideoPlay) { + // 设置背景图片 + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + when (videotype){ + VIDEOTYPE_CONSULT -> { + OverlayLeftViewUtils.showOverlayView(this,isOpen = false, checkIndex = OverlayLeftViewUtils.CONSULT) + } + VIDEOTYPE_MOIES -> { + OverlayLeftViewUtils.showOverlayView(this,isOpen = false, checkIndex = OverlayLeftViewUtils.MOVIE) + } + } + val sumDis = intent.getIntExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) + FloatingDistanceInfoUtils.showOverlayView(this,sumDis=sumDis) + } + + override fun onResume() { + super.onResume() + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + if(centerItemPosition<0){ + setBackageAndPlayNext(arrayListOf[0]) + } + player?.let { + if (player.isIfCurrentIsFullscreen) {// 全屏了 + + } else { + when (player.currentState) { + GSYVideoView.CURRENT_STATE_PAUSE -> { + player.onVideoResume(false) + } + GSYVideoView.CURRENT_STATE_PLAYING -> { + } + else -> { + + } + } + } + + } + subscribe = Observable.interval(2, 8, TimeUnit.SECONDS) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Observer { + override fun onCompleted() {} + override fun onError(e: Throwable?) {} + override fun onNext(t: Long?) { + if (!OverlayLeftViewUtils.getStatus()) { + when (videotype){ + VIDEOTYPE_CONSULT -> { + OverlayLeftViewUtils.showOverlayView(this@VideoActivity,isOpen = false, checkIndex = OverlayLeftViewUtils.CONSULT) + } + VIDEOTYPE_MOIES -> { + OverlayLeftViewUtils.showOverlayView(this@VideoActivity,isOpen = false, checkIndex = OverlayLeftViewUtils.MOVIE) + } + } + } + } + }) + } + + override fun onPause() { + super.onPause() + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + player?.let { + if (player is ConsultVideoPlayer) { + // 离开应用 暂停视频 + // 关闭 onDetachedFromWindow 会reset + if (player.isIfCurrentIsFullscreen) {// 全屏了 + } else { + player.onVideoPause() + } + } + } + cancleSubscribe() + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun finishActivity(event: FinishActivity){ + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "finishActivity(event)") + cancleSubscribe() + val intent = Intent() + val parse = Uri.parse("mogo://launcher/main/switch2?type=launch") + intent.data = parse + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + startActivity(intent) + finish() + } + + override fun onDestroy() { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDestroy()") + super.onDestroy() + EventBus.getDefault().unregister(this) + LeftMenuOpen.unregisterCallback(LeftMenuOpen.callBack) + releaseOnNewInstance() + OverlayLeftViewUtils.dismissOverlayView(false) + FloatingDistanceInfoUtils.dismissOverlayView() + FixMemoryLeak.fixLeak(this) + cancleSubscribe() + } + + private fun cancleSubscribe(){ + subscribe?.let { + if(!it.isUnsubscribed){ + it.unsubscribe() + } + } + } + + private fun releaseOnNewInstance() { + if (rvVideoPlaylist!=null&&rvVideoPlaylist?.layoutManager != null) { + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager + val (_: Int, player) = getPlayer(carouselLayoutManager) + player?.let { + player.currentPlayer.release() + player.onVideoReset() + } + } + FullVideoUtils.dismissOverlayView(true) + } + + override fun onBackPressed() {} + +} \ 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/CarouselZoomPostLayoutListener.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselZoomPostLayoutListener.java index c07919ed5e..1cc637c37e 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselZoomPostLayoutListener.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/layoutmanage/CarouselZoomPostLayoutListener.java @@ -33,10 +33,10 @@ public class CarouselZoomPostLayoutListener extends CarouselLayoutManager.PostLa translateY = Math.signum(itemPositionToCenterDiff) * translateYGeneral; translateX = 0; } else { - final float translateXGeneral = (child.getMeasuredWidth()*0.9f) * (1 - scale) / 2f; + final float translateXGeneral = child.getMeasuredWidth() * (1 - scale)/8; translateX = Math.signum(itemPositionToCenterDiff) * translateXGeneral; translateY = 0; } - return new ItemTransformation(scale,scale, scale, translateX, translateY); + return new ItemTransformation(scale,scale, scale, 0, translateY); } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java new file mode 100644 index 0000000000..f6e57ae403 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java @@ -0,0 +1,42 @@ +package com.mogo.och.taxi.passenger.utils; + +import android.content.Context; +import android.view.inputmethod.InputMethodManager; + +import java.lang.reflect.Field; + +/** + * memory leak fix: + *

+ * InputMethodManager#mLastSrvView reference Last Page Activity. + */ +public class FixMemoryLeak { + + private static Field field; + private static boolean hasField = true; + + public static void fixLeak(Context context) { + if (!hasField) { + return; + } + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm == null) { + return; + } + + try { + if (field == null) { + field = imm.getClass().getDeclaredField("mCurRootView"); + } + if (field == null) { + hasField = false; + } + if (field != null) { + field.setAccessible(true); + field.set(imm, null); + } + } catch (Throwable t) { + hasField = false; + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java index f813fe3f7f..7c6c8c22ae 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java @@ -1,5 +1,6 @@ package com.mogo.och.taxi.passenger.utils; +import android.app.ActivityManager; import android.app.AppOpsManager; import android.content.Context; import android.content.pm.PackageManager; @@ -8,6 +9,9 @@ import android.os.Build; import androidx.core.content.ContextCompat; +import com.mogo.eagle.core.network.utils.Util; +import com.mogo.eagle.core.utilcode.util.Utils; + /** * @author: wangmingjun * @date: 2021/12/7 @@ -34,4 +38,25 @@ public class PermissionUtil { } return false; } + + private static String processName = ""; + public static String getCurProcessName() { + if(!processName.isEmpty()){ + return processName; + } + // 获取此进程的标识符 + int pid = android.os.Process.myPid(); + // 获取活动管理器 + ActivityManager activityManager = (ActivityManager) + Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE); + // 从应用程序进程列表找到当前进程,是:返回当前进程名 + for (ActivityManager.RunningAppProcessInfo appProcess : + activityManager.getRunningAppProcesses()) { + if (appProcess.pid == pid) { + + return appProcess.processName; + } + } + return null; + } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerAnalyticsManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerAnalyticsManager.java index 15a314b76e..8d2aedf521 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerAnalyticsManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerAnalyticsManager.java @@ -63,13 +63,13 @@ public class TaxiPassengerAnalyticsManager { mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_ORDER_NUMBER, orderNo); if (send) { - // 开启成功,上报埋点 + // 开启成功,取消失败定时任务 if (startAutopilotRunnable != null && UiThreadHandler.getsUiHandler().hasCallbacks(startAutopilotRunnable)) { UiThreadHandler.removeCallbacks(startAutopilotRunnable); } mStartAutopilotParams.put(TaxiPassengerConst.EVENT_PARAM_START_RESULT, true); - AnalyticsManager.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); +// AnalyticsManager.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); } else { UiThreadHandler.postDelayed(startAutopilotRunnable, TaxiPassengerConst.LOOP_PERIOD_15S); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java index 6605ec413a..9c3eea52f9 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java @@ -16,7 +16,7 @@ public class TaxiPassengerMapAssetStyleUtil { byte[] buffer1 = null; InputStream is1 = null; try { - is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style.data + is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style.data int lenght1 = is1.available(); buffer1 = new byte[lenght1]; is1.read(buffer1); @@ -39,7 +39,7 @@ public class TaxiPassengerMapAssetStyleUtil { byte[] buffer1 = null; InputStream is1 = null; try { - is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style_extra.data + is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style_extra.data int lenght1 = is1.available(); buffer1 = new byte[lenght1]; is1.read(buffer1); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/ZoomDrawable.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/ZoomDrawable.kt new file mode 100644 index 0000000000..12776a6d7f --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/ZoomDrawable.kt @@ -0,0 +1,21 @@ +package com.mogo.och.taxi.passenger.utils + +import android.content.Context +import android.graphics.* +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import androidx.annotation.DrawableRes + +object ZoomDrawable { + fun zoomDrawableImage(context: Context,@DrawableRes id:Int,scaleX:Float,scaleY:Float):Drawable{ + + val bitmap: Bitmap = BitmapFactory.decodeResource(context.resources, id) + val bitmapWidth = bitmap.width + val bitmapHeight = bitmap.height + val matrix = Matrix() + matrix.postScale(scaleX, scaleY) + // 产生缩放后的Bitmap对象 + val resizeBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmapWidth, bitmapHeight, matrix, true) + return BitmapDrawable(context.resources,resizeBitmap) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java index 8338546d19..de5dd4d9e8 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/GlideBlurTransform.java @@ -4,38 +4,45 @@ import android.content.Context; import android.graphics.Bitmap; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; public class GlideBlurTransform extends BitmapTransformation { private String key; - private Context context; private int blurRadius; - public GlideBlurTransform(Context context, String key, int blurRadius ) { - this.context = context; + public GlideBlurTransform(String key, int blurRadius) { this.key = key; this.blurRadius = blurRadius; } @Override protected Bitmap transform( @NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight ) { - Bitmap lruBitmap = DiskLruCacheManager.getInstance(context).get(key); - if(lruBitmap!=null){ - return lruBitmap; - } Bitmap bitmap = FastBlurUtil.doBlur( toTransform, 1, blurRadius ); - // 缓存高斯模糊图片 - DiskLruCacheManager.getInstance( context ).put( key, bitmap ); return bitmap; } @Override - public void updateDiskCacheKey( MessageDigest messageDigest ) { + public boolean equals(@Nullable Object obj) { + if (obj instanceof GlideBlurTransform) { + return ((GlideBlurTransform) obj).key.equals(key); + } + return false; + } + @Override + public int hashCode() { + return key.hashCode(); + } + + @Override + public void updateDiskCacheKey( MessageDigest messageDigest ) { + messageDigest.update(key.getBytes(StandardCharsets.UTF_8)); } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java new file mode 100644 index 0000000000..6fd67ae232 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java @@ -0,0 +1,55 @@ +package com.mogo.och.taxi.passenger.utils.windowdispatch; + +import android.graphics.Region; +import android.inputmethodservice.InputMethodService; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +public class OnComputeInternalInsetsListener implements InvocationHandler { + + private Region touchRegion = null; + public Object getListener() { + Object target = null; + try { + Class class1 = Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener"); + target = Proxy.newProxyInstance(OnComputeInternalInsetsListener.class.getClassLoader(), + new Class[]{class1}, this); + } catch (Exception e) { + e.printStackTrace(); + } + return target; + } + + public Region getTouchRegion() { + return touchRegion; + } + + public void setTouchRegion(Region touchRegion) { + this.touchRegion = touchRegion; + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + try { + Field regionField = args[0].getClass() + .getDeclaredField("touchableRegion"); + regionField.setAccessible(true); + Field insetField = args[0].getClass() + .getDeclaredField("mTouchableInsets"); + insetField.setAccessible(true); + if (touchRegion != null) { + Region region = (Region) regionField.get(args[0]); + region.set(touchRegion); + insetField.set(args[0], InputMethodService.Insets.TOUCHABLE_INSETS_REGION); + } else { + insetField.set(args[0], InputMethodService.Insets.TOUCHABLE_INSETS_FRAME); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java new file mode 100644 index 0000000000..1ade41a62d --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java @@ -0,0 +1,51 @@ +package com.mogo.och.taxi.passenger.utils.windowdispatch; + +import android.view.ViewTreeObserver; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; + +public class ReflectionUtils { + + private ReflectionUtils() { + + } + + public static void removeOnComputeInternalInsetsListener(ViewTreeObserver viewTree) { + if (viewTree == null) { + return; + } + try { + Class clazz = Class.forName("android.view.ViewTreeObserver"); + Field field = viewTree.getClass().getDeclaredField("mOnComputeInternalInsetsListeners"); + field.setAccessible(true); + Object listenerList = field.get(viewTree); + Method method = listenerList.getClass().getDeclaredMethod("getArray"); + method.setAccessible(true); + ArrayList list = (ArrayList) method.invoke(listenerList); + Class classes[] = {Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener")}; + if (list != null && list.size() > 0) { + clazz.getDeclaredMethod("removeOnComputeInternalInsetsListener", classes).invoke(viewTree, + list.get(0)); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void addOnComputeInternalInsetsListener(ViewTreeObserver viewTree, Object object) { + if (viewTree == null) { + return; + } + try { + Class classes[] = {Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener")}; + Class clazz = Class.forName("android.view.ViewTreeObserver"); + clazz.getDeclaredMethod("addOnComputeInternalInsetsListener", classes).invoke(viewTree, + object); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 797e69c1a1..4b46f036bf 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -3,6 +3,7 @@ package com.mogo.och.taxi.passenger.widget import android.app.Activity import android.content.Context import android.graphics.Color +import android.graphics.drawable.GradientDrawable import android.os.Build import android.util.AttributeSet import android.util.TypedValue @@ -15,13 +16,14 @@ import android.widget.ImageView import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView import androidx.constraintlayout.widget.ConstraintLayout -import androidx.core.view.marginTop +import androidx.core.app.ActivityCompat import com.mogo.eagle.core.utilcode.util.TimeTransformUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils +import com.mogo.och.taxi.passenger.utils.ZoomDrawable import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack import com.shuyu.gsyvideoplayer.utils.GSYVideoType import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer @@ -44,7 +46,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { private lateinit var totalTimeTextView: TextView private lateinit var aivStartPlay: AppCompatImageView private lateinit var layoutBottom: ConstraintLayout - lateinit var vPpenLeft: View + private lateinit var vPpenLeft: View private var fullVideoPlayer:ConsultVideoPlayer?=null var smalllPlayer:ConsultVideoPlayer?=null @@ -64,6 +66,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { totalTimeTextView = findViewById(R.id.total) aivStartPlay = findViewById(R.id.aiv_start_play) layoutBottom = findViewById(R.id.layout_bottom) + vPpenLeft = findViewById(R.id.v_open_left) fullscreenButton.setOnClickListener(this) aivStartPlay.setOnClickListener(this) if (mThumbImageViewLayout != null @@ -74,12 +77,44 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL) aivStartPlay.scaleX = 0.8f aivStartPlay.scaleY = 0.8f - vPpenLeft = findViewById(R.id.v_open_left) - vPpenLeft.setOnClickListener { - OverlayLeftViewUtils.open() + mProgressBar.thumb = ZoomDrawable.zoomDrawableImage(context,R.drawable.bg_taxi_p_video_index,0.66f,0.66f) + } + + private fun addDrageAnchor(){ + vPpenLeft.visibility = VISIBLE + OverlayLeftViewUtils.addDragTarget(vPpenLeft) + layoutBottom.post { + val layoutParams = layoutBottom.layoutParams as ConstraintLayout.LayoutParams + layoutParams.setMargins(333,0,333,90) + layoutParams.height = 148 + layoutBottom.layoutParams = layoutParams } - OverlayLeftViewUtils.dragTarget(vPpenLeft) + + mTopContainer.post { + val layoutParams = mTopContainer.layoutParams as ConstraintLayout.LayoutParams + layoutParams.height = 320 + mTopContainer.layoutParams = layoutParams + val background = layoutBottom.background as GradientDrawable + val x = arrayOf(12f, 12f,12f, 12f,12f, 12f,12f, 12f) + background.cornerRadii = x.toFloatArray() + layoutBottom.background = background + + fullscreenButton.setPadding(92,0,92,0) + titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 50f) + val layoutParams1 = titleTextView.layoutParams as ConstraintLayout.LayoutParams + layoutParams1.marginStart = 80 + titleTextView.layoutParams = layoutParams1 + aivStartPlay.scaleX = 1f + aivStartPlay.scaleY = 1f + val drawable = ActivityCompat.getDrawable(context, R.drawable.bg_taxi_p_video_index) + mProgressBar.thumb = drawable + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + mProgressBar.maxHeight = 6 + mProgressBar.minHeight = 6 + } + } + } override fun getLayoutId(): Int { @@ -181,6 +216,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { when (v?.id) { R.id.fullscreen -> { startWindowFullscreenOwn(context) +// startWindowFullscreen(context) } R.id.aiv_start_play -> { if(currentState==GSYVideoView.CURRENT_STATE_PAUSE){ @@ -235,21 +271,6 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } } - fun fullMarainTop(){ - if(mIfCurrentIsFullscreen&&smalllPlayer!=null) { - if(mTopContainer.marginTop==0) { - val layoutParams = mTopContainer.layoutParams as ConstraintLayout.LayoutParams - layoutParams.height = 336 - mTopContainer.layoutParams = layoutParams - fullscreenButton.setPadding(80,0,80,0) - titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 50f) - titleTextView.setPadding(30,0,0,0) - aivStartPlay.scaleX = 1f - aivStartPlay.scaleY = 1f - } - } - } - override fun setViewShowState(view: View?, visibility: Int) { if (view === mThumbImageViewLayout && visibility != View.VISIBLE) { return @@ -259,7 +280,6 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onSurfaceAvailable(surface: Surface) { super.onSurfaceAvailable(surface) - fullMarainTop() if (GSYVideoType.getRenderType() != GSYVideoType.TEXTURE) { if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) { mThumbImageViewLayout.visibility = View.INVISIBLE @@ -354,6 +374,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { gsyVideoPlayer.id = fullId gsyVideoPlayer.isIfCurrentIsFullscreen = true gsyVideoPlayer.setVideoAllCallBack(mVideoAllCallBack) + gsyVideoPlayer.addDrageAnchor() cloneParams(this, gsyVideoPlayer) val frameLayout = FrameLayout(context) if (gsyVideoPlayer.fullscreenButton != null) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/animator/alpha_hide_hide_f.xml b/OCH/mogo-och-taxi-passenger/src/main/res/animator/alpha_hide_hide_f.xml new file mode 100644 index 0000000000..599149e9a7 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/animator/alpha_hide_hide_f.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/animator/alpha_hide_show_f.xml b/OCH/mogo-och-taxi-passenger/src/main/res/animator/alpha_hide_show_f.xml new file mode 100644 index 0000000000..8c6acc7439 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/animator/alpha_hide_show_f.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-v29/taxi_video_order_process.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-v29/taxi_video_order_process.xml new file mode 100644 index 0000000000..7575e2073b --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-v29/taxi_video_order_process.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-v29/taxi_video_seekbar_style.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-v29/taxi_video_seekbar_style.xml new file mode 100644 index 0000000000..aa3e77ed6e --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-v29/taxi_video_seekbar_style.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_arrived_info_floating.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_arrived_info_floating.png new file mode 100644 index 0000000000..ebe94ecd52 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_arrived_info_floating.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_video_index.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_video_index.png new file mode 100644 index 0000000000..61f22d3bf0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_taxi_p_video_index.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png index 0762a845e9..a70be0cdd8 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_full.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png index 24fee28781..b3ceb81fb6 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_change_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_left_flow_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_left_flow_bg.png index 064763057f..232b525cc9 100755 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_left_flow_bg.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_left_flow_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow_arrived.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow_arrived.png new file mode 100644 index 0000000000..36ef2e88d3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow_arrived.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow_un_arrive.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow.png rename to OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_arrow_un_arrive.png diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_consult_title_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_consult_title_icon.png index b188a5c0d6..1efa8c1b03 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_consult_title_icon.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogo_consult_title_icon.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg.png new file mode 100755 index 0000000000..dbfb370906 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg_bottom.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg_bottom.png new file mode 100644 index 0000000000..4192d9cbd7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg_bottom.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg_top.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg_top.png new file mode 100644 index 0000000000..f9b70e6888 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_video_bg_top.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_arrived_info_floating.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_arrived_info_floating.png new file mode 100644 index 0000000000..ebe94ecd52 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_arrived_info_floating.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_video_index.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_video_index.png new file mode 100644 index 0000000000..61f22d3bf0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_taxi_p_video_index.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png index 0762a845e9..a70be0cdd8 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png index 24fee28781..b3ceb81fb6 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png index 064763057f..232b525cc9 100755 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow_arrived.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow_arrived.png new file mode 100644 index 0000000000..36ef2e88d3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow_arrived.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow_un_arrive.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow.png rename to OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_arrow_un_arrive.png diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_title_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_title_icon.png index b188a5c0d6..1efa8c1b03 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_title_icon.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_title_icon.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg.png new file mode 100755 index 0000000000..dbfb370906 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg_bottom.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg_bottom.png new file mode 100644 index 0000000000..4192d9cbd7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg_bottom.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg_top.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg_top.png new file mode 100644 index 0000000000..f9b70e6888 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_bg_top.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml index 4bed9867fd..e97ad25151 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml @@ -1,5 +1,6 @@ - + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_shape.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_shape.xml new file mode 100644 index 0000000000..d4125c5071 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_shape.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_top.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_top.xml index 225e6361dd..843c2658d2 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_top.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg_top.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_index.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_index.xml deleted file mode 100644 index 98435cd0f6..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_index.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_order_process.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_order_process.xml new file mode 100644 index 0000000000..44c6941d9c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_order_process.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml index 8aba3ae55c..203d9a5332 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml @@ -17,9 +17,9 @@ - + - + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_normal.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_normal.xml index 111239bbfe..c69b23bfc8 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_normal.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_normal.xml @@ -1,14 +1,25 @@ + android:background="@drawable/bg_taxi_p_video_bg_shape" + android:layout_width="1620px" + android:layout_height="940px"> + + + + + android:layout_gravity="center" + android:layout_width="1560px" + android:layout_height="876px" /> diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml index 6d7db62b32..2e59db6a7f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml @@ -5,21 +5,16 @@ android:id="@+id/cl_contain" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/cardview_dark_background" + android:background="@drawable/taxi_p_video_bg" tools:ignore="MissingDefaultResource"> - - @@ -29,8 +24,8 @@ app:layout_constraintBottom_toBottomOf="@+id/aciv_title_icon" app:layout_constraintStart_toEndOf="@+id/aciv_title_icon" android:text="蘑菇资讯" - android:textStyle="bold" - android:textSize="60px" + android:textSize="48px" + android:layout_marginStart="34px" android:includeFontPadding="false" android:textColor="@color/taxi_order_status_textColor" android:layout_width="wrap_content" @@ -39,9 +34,10 @@ @@ -52,8 +48,8 @@ android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginBottom="172px" + app:layout_constraintTop_toBottomOf="@+id/rv_video_playlist" + android:layout_marginTop="67px" app:vpi_orientation="horizontal" app:vpi_slide_mode="scale" app:vpi_slider_checked_color="@color/taxi_p_traffic_light_red_color_up" @@ -61,14 +57,6 @@ app:vpi_slider_radius="@dimen/dp_20" app:vpi_style="round_rect" /> - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml index 7603c18a21..0cfb6db266 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml @@ -28,15 +28,6 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - - @@ -55,21 +55,26 @@ android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:layout_constraintTop_toTopOf="@+id/fullscreen" - app:layout_constraintBottom_toBottomOf="@+id/fullscreen" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" - android:layout_marginStart="50px" + android:layout_marginStart="40px" android:textColor="@android:color/white" - android:textSize="46px" /> + android:textSize="38px" /> @@ -129,6 +135,7 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" + android:visibility="gone" android:layout_width="143px" android:layout_height="308px"/> diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_window_float_distance_info.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_window_float_distance_info.xml new file mode 100644 index 0000000000..30067d11e4 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_window_float_distance_info.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml index 0627d9585c..f69881eed0 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/colors.xml @@ -53,5 +53,7 @@ #4DFFFFFF #FFFFFF - + #8FB3EF + #E1F3FE + #FFFFFF \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/ids.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/ids.xml new file mode 100644 index 0000000000..b8fc90429e --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml index d32780d49a..7529f670e4 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/strings.xml @@ -28,7 +28,7 @@ 欢迎体验MOGO自动驾驶出租车 Hello,您好 - 请输出手机号后4位: + 请输入手机号后4位: 小蘑菇 删除 diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml index 732e7c8a20..e50749e0fd 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml @@ -40,4 +40,22 @@ @anim/alpha_hide_show + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/build.gradle b/OCH/mogo-och-taxi/build.gradle index 11d63d9a60..307d440922 100644 --- a/OCH/mogo-och-taxi/build.gradle +++ b/OCH/mogo-och-taxi/build.gradle @@ -29,15 +29,13 @@ android { } buildTypes { - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - debug { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + debug { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/OrderQueryRespBean.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/OrderQueryRespBean.java index 0c164b143a..3a0a60ccd0 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/OrderQueryRespBean.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/bean/OrderQueryRespBean.java @@ -58,6 +58,11 @@ public class OrderQueryRespBean extends BaseData { public String txtFileMd5 = ""; //轨迹文件md5,默认“” public long contrailSaveTime; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 public String carModel = ""; //[optional] 车型号(如红旗H9),默认“”,暂不加入校验逻辑、用于人工排查问题 + public String csvFileUrlDPQP = ""; //轨迹文件下载的cos url,默认“” + public String csvFileMd5DPQP = ""; //轨迹文件md5,默认“” + public String txtFileUrlDPQP = ""; //打点文件下载的cos url,默认“” + public String txtFileMd5DPQP = ""; //轨迹文件md5,默认“” + public long contrailSaveTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 // !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km public double travelDistance; diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiADASStatusCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiADASStatusCallback.java index 278b1ac9dc..7d89fd4718 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiADASStatusCallback.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiADASStatusCallback.java @@ -17,4 +17,7 @@ public interface ITaxiADASStatusCallback { // 自动驾驶运行中 void onAutopilotRunning(); + + //人机共驾 + void onManMachineCoDriving(); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt index 845e5bb961..cd34ecc455 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/TaxiConst.kt @@ -79,6 +79,6 @@ class TaxiConst { */ const val TYPE_MARKER_TAXI_ORDER = "TYPE_MARKER_TAXI_ORDER" - const val TIMER_START_AUTOPILOT_INTERVAL = 10 * 1000L + const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java index e4e3a0f113..84a387ead4 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java @@ -14,7 +14,6 @@ import com.amap.api.navi.model.AMapLaneInfo; import com.amap.api.navi.model.AMapModelCross; import com.amap.api.navi.model.AMapNaviCameraInfo; import com.amap.api.navi.model.AMapNaviCross; -import com.amap.api.navi.model.AMapNaviInfo; import com.amap.api.navi.model.AMapNaviLocation; import com.amap.api.navi.model.AMapNaviRouteNotifyData; import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo; @@ -23,7 +22,6 @@ import com.amap.api.navi.model.AimLessModeCongestionInfo; import com.amap.api.navi.model.AimLessModeStat; import com.amap.api.navi.model.NaviInfo; import com.amap.api.navi.model.NaviLatLng; -import com.autonavi.tbt.TrafficFacilityInfo; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; @@ -279,6 +277,11 @@ public class NaviToDestinationModel implements AMapNaviListener { } + @Override + public void onGpsSignalWeak(boolean b) { + + } + @Override public void updateCameraInfo(AMapNaviCameraInfo[] aMapCameraInfos) { @@ -289,21 +292,11 @@ public class NaviToDestinationModel implements AMapNaviListener { } - @Override - public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) { - - } - @Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) { //已过时 } - @Override - public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) { - - } - @Override public void showCross(AMapNaviCross aMapNaviCross) { //显示放大图回调 diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index f267c8125d..0e2c7f5ea3 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -82,6 +82,7 @@ import io.reactivex.functions.Consumer; import io.reactivex.plugins.RxJavaPlugins; import mogo.telematics.pad.MessagePad; import mogo_msg.MogoReportMsg; +import system_master.SystemStatusInfo; /** * Created by pangfan on 2021/8/19 @@ -114,6 +115,8 @@ public class TaxiModel { private ITaxiControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 private ITaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更 + private volatile boolean isRestartAutopilot = false; + private List mRoutePoints = new ArrayList<>(); private double mLongitude, mLatitude; @@ -786,7 +789,7 @@ public class TaxiModel { new TaxiServiceCallback() { @Override public void onSuccess(TaxiDataBaseRespBean data) { - if (data != null && data.code == 0 && data.data.equals(true)) + if (data != null && data.code == 0) updateAutopilotStatus(data.data.equals(true)); } @@ -829,6 +832,7 @@ public class TaxiModel { && mCurrentOCHOrder.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.getCode()) { // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(true); CallerLogger.INSTANCE.d(M_TAXI + TAG, "美化模式-ignore:置为true(更新本地order信息)"); } } @@ -838,9 +842,11 @@ public class TaxiModel { mCurrentOCHOrder = null; TaxiTrajectoryManager.getInstance().syncTrajectoryInfo(); SharedPrefsMgr.getInstance(mContext).remove(TaxiConst.SP_KEY_OCH_TAXI_ORDER); + isRestartAutopilot = false; if (FunctionBuildConfig.isDemoMode) { // 当美化模式(演示模式)开启时: 取消或订单已完成时,置false FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); CallerLogger.INSTANCE.d(M_TAXI + TAG, "美化模式-ignore:置为false(已完成or清除当前订单)"); } } @@ -857,9 +863,7 @@ public class TaxiModel { /** * 以当前订单为基础,开启自动驾驶 - * - * @param isRestart 开启自动驾驶 - */ + **/ @ChainLog( linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT, linkCode = CHAIN_LINK_ADAS, @@ -868,20 +872,27 @@ public class TaxiModel { paramIndexes = {-1}, // clientPkFileName = "sn" ) - public void startAutoPilot(boolean isRestart) { + public void startAutoPilot() { if (!checkCurrentOCHOrder()) { CallerLogger.INSTANCE.e(M_TAXI + TAG, "no order or order is empty."); ToastUtils.showShort("当前订单不存在或异常!"); return; } - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE == CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()) { // TODO: 2021/11/28 工控机存在刚开始状态为0,但是可以开启变为2,工控机解决前不显示此toast // ToastUtils.showShort("自动驾驶状态为不可用!"); } + //点击开始自动驾驶按钮订单状态去流转, 不再与自动驾驶是否启动成功挂钩 + if (mCurrentOCHOrder.orderStatus == TaxiOrderStatusEnum.UserArriveAtStart.getCode()){ + startServicePilotDone(); + isRestartAutopilot = false; + }else { + isRestartAutopilot = true; + } + double startWgsLon = mCurrentOCHOrder.startSitePoint.get(0); double startWgsLat = mCurrentOCHOrder.startSitePoint.get(1); double endWgsLon = mCurrentOCHOrder.endSitePoint.get(0); @@ -898,19 +909,18 @@ public class TaxiModel { mCurrentOCHOrder.lineId, mCurrentOCHOrder.csvFileUrl, mCurrentOCHOrder.csvFileMd5, mCurrentOCHOrder.txtFileUrl, mCurrentOCHOrder.txtFileMd5, - mCurrentOCHOrder.contrailSaveTime, mCurrentOCHOrder.carModel); + mCurrentOCHOrder.contrailSaveTime, mCurrentOCHOrder.carModel, + mCurrentOCHOrder.csvFileUrlDPQP, mCurrentOCHOrder.csvFileMd5DPQP, + mCurrentOCHOrder.txtFileUrlDPQP, mCurrentOCHOrder.txtFileMd5DPQP, + mCurrentOCHOrder.contrailSaveTimeDPQP); } CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters); CallerLogger.INSTANCE.d(M_TAXI + TAG, "start autopilot with parameter: %s", GsonUtil.jsonFromObject(parameters) + " ,startSiteName=" + mCurrentOCHOrder.startSiteAddr + " ,endSiteName=" + mCurrentOCHOrder.endSiteAddr); - TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, false, + TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestartAutopilot, false, mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); - if (DebugConfig.isDebug()) { - // ToastUtils.showShort("Start autopilot!"); - } - // TODO: 2021/8/20 无工控机环境, 手动调起自动驾驶开启返回结果,有工控机环境要删除 // OCHTaxiUiController.getInstance().onAutoPilotStatusChanged( IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING, "开启自动驾驶" ); } @@ -1008,7 +1018,12 @@ public class TaxiModel { if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToStart) { judgeStartStation(location); } + if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd && + mPrevAPStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ + judgeEndStation(location); + } } + mLongitude = location.getLongitude(); mLatitude = location.getLatitude(); if (mControllerStatusCallback != null) { @@ -1017,6 +1032,37 @@ public class TaxiModel { } }; + private void judgeEndStation(Location location) { + if (mCurrentOCHOrder == null || mCurrentOCHOrder.endSiteGcjPoint == null + || mCurrentOCHOrder.endSiteGcjPoint.size() < 2) { + return; + } + double startLon = mCurrentOCHOrder.endSiteGcjPoint.get(0); + double startLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); + double distance = CoordinateUtils.calculateLineDistance( + startLon, startLat, + location.getLongitude(), location.getLatitude()); + + CallerLogger.INSTANCE.i(M_TAXI + TAG, "judgeEndStation() distance = " + distance); + + if (distance > TaxiConst.ARRIVE_AT_START_STATION_DISTANCE) { + distance = CoordinateUtils.calculateLineDistance(startLon, startLat, + CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lon(), + CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lat()); + } + + if (distance <= TaxiConst.ARRIVE_AT_START_STATION_DISTANCE) { + if (!checkCurrentOCHOrder() + || (getCurOrderStatus() == TaxiOrderStatusEnum.ArriveAtEnd)) { + CallerLogger.INSTANCE.i(M_TAXI + TAG, "order exception or order ArriveAtEnd"); + return; + } + arriveTerminal(); + return; + } + + } + /** * 订单流转debug START */ @@ -1073,51 +1119,64 @@ public class TaxiModel { public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; int state = autopilotStatusInfo.getState(); - CallerLogger.INSTANCE.d(M_TAXI + TAG, "state = %s", state); if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); + if (state != mPrevAPStatus && mADASStatusCallback != null){ + mADASStatusCallback.onAutopilotRunning(); + } if (mCurrentOCHOrder != null - && getCurOrderStatus() == TaxiOrderStatusEnum.UserArriveAtStart - && state != mPrevAPStatus) { - // 当高频返回autopilot 2时,不重复调用订单状态变更 - mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态 + && TaxiOrderStatusEnum.OnTheWayToEnd.getCode() == mCurrentOCHOrder.orderStatus){ + if (state != mPrevAPStatus) { + // 当高频返回autopilot 2时,不重复调用订单状态变更 + mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态 - startServicePilotDone(); + TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestartAutopilot, true, + mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); - TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, true, - mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); - - if (FunctionBuildConfig.isDemoMode) { - // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; - CallerLogger.INSTANCE.d(M_TAXI + TAG, "美化模式-ignore:置为true(到达出发点且已开启自动驾驶)"); + if (FunctionBuildConfig.isDemoMode) { + // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(true); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "美化模式-ignore:置为true(到达出发点且已开启自动驾驶)"); + } } - } else if (mCurrentOCHOrder != null - && getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd - && state != mPrevAPStatus) { - mPrevAPStatus = state; - // 接管后再次启动成功埋点 - TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(true, true, - mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); } } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - mPrevAPStatus = state; if (FunctionBuildConfig.isDemoMode && checkCurrentOCHOrder() - && getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd) { + && (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd + || getCurOrderStatus() == TaxiOrderStatusEnum.ArriveAtEnd)) { // 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态 return; } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); + if (state != mPrevAPStatus && mADASStatusCallback != null){ + mADASStatusCallback.onAutopilotEnable(); + } + mPrevAPStatus = state; } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - mPrevAPStatus = state; if (FunctionBuildConfig.isDemoMode && checkCurrentOCHOrder() - && getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd) { + && (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd + || getCurOrderStatus() == TaxiOrderStatusEnum.ArriveAtEnd)) { // 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态 return; } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + if (state != mPrevAPStatus && mADASStatusCallback != null){ + mADASStatusCallback.onAutopilotDisable(); + } + mPrevAPStatus = state; + + }else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){ + if (FunctionBuildConfig.isDemoMode + && checkCurrentOCHOrder() + && (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd + || getCurOrderStatus() == TaxiOrderStatusEnum.ArriveAtEnd)) { + // 当美化模式(演示模式)开启时:且有订单、且为去往目的地状态,维持自动驾驶icon开启状态 + return; + } + if (state != mPrevAPStatus && mADASStatusCallback != null){ + mADASStatusCallback.onManMachineCoDriving(); + } + mPrevAPStatus = state; } } @@ -1134,16 +1193,19 @@ public class TaxiModel { || (getCurOrderStatus() == TaxiOrderStatusEnum.ArriveAtEnd)) { return; } - if (DebugConfig.isDebug()) { - // ToastUtils.showShort("到达目的地"); - } arriveTerminal(); + if (FunctionBuildConfig.isDemoMode) { // 当美化模式(演示模式)开启时: 到达目的地,置false FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); CallerLogger.INSTANCE.d(M_TAXI + TAG, "美化模式-ignore:置为false(到达目的地)"); } } + + @Override + public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + } }; private final IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener() { @@ -1154,6 +1216,10 @@ public class TaxiModel { @Override public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) { + if (null != routeList && routeList.getWayPointsList() != null){ + CallerLogger.INSTANCE.d(M_TAXI + TAG, "getWayPointsList = " + + routeList.getWayPointsList().size()); + } if (null != routeList && routeList.getWayPointsList().size() > 0) { updateOrderRoute(routeList.getWayPointsList()); updateOrderRouteInfo(routeList.getWayPointsList()); @@ -1212,7 +1278,10 @@ public class TaxiModel { Logger.d(M_TAXI + TAG, "--------计算出sumLength开始---------- "); //转换成高德坐标系 - mRoutePoints = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext, models); + if (mRoutePoints.size() > 0){ + mRoutePoints.clear(); + } + mRoutePoints.addAll(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext, models)); startDynamicCalculateRouteInfo(); } @@ -1222,7 +1291,7 @@ public class TaxiModel { if (mCurrentOCHOrder != null && mRoutePoints.size() == 0) {//根据orderNo去查询 queryOrderRouteList(mCurrentOCHOrder.orderNo); } - + Logger.d(M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints.size()); //开启实时计算剩余距离,剩余时间,预计时间 startOrStopCalculateRouteInfo(true); } @@ -1231,29 +1300,32 @@ public class TaxiModel { * 实时计算当前剩余里程和时间 */ public void dynamicCalculateRouteInfo() { - List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mRoutePoints, mLongitude, mLatitude); + if (mRoutePoints.size() > 0){ + List lastPoints = CoordinateCalculateRouteUtil + .getRemainPointListByCompare(mRoutePoints, mLongitude, mLatitude); - float lastSumLength = 0; + float lastSumLength = 0; - if (lastPoints.size() == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 - lastSumLength = CoordinateUtils.calculateLineDistance( - lastPoints.get(0).longitude, lastPoints.get(0).latitude, - mLongitude, mLatitude); - } else { - lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + if (lastPoints.size() == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 + lastSumLength = CoordinateUtils.calculateLineDistance( + lastPoints.get(0).longitude, lastPoints.get(0).latitude, + mLongitude, mLatitude); + } else { + lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + } + + double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6; //秒 + Logger.d(M_TAXI + "dynamicCalculateRouteInfo" + , "---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime + + " thread = "+ Thread.currentThread().getName()); + + mCurrentOCHOrder.decreaseTravelDistance(lastSumLength); + if (mOrderStatusCallback != null) { + mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) lastSumLength, (long) lastTime); + } + + reportOrderRemain((long) lastSumLength, (long) lastTime); } - - double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6; //秒 - Logger.d(M_TAXI + "dynamicCalculateRouteInfo" - , "---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime); - - mCurrentOCHOrder.decreaseTravelDistance(lastSumLength); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) lastSumLength, (long) lastTime); - } - - reportOrderRemain((long) lastSumLength, (long) lastTime); } /** @@ -1265,7 +1337,7 @@ public class TaxiModel { new TaxiServiceCallback() { @Override public void onSuccess(QueryOrderRouteResp data) { - if (data != null && data.data != null) { + if (data != null && data.data != null && mRoutePoints.size() == 0) { mRoutePoints.clear(); mRoutePoints.addAll(data.data); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java index 32b07a27bc..63f281cacf 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java @@ -9,8 +9,12 @@ import com.mogo.och.taxi.constant.TaxiConst; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** @@ -34,7 +38,7 @@ public class TaxiModelLoopManager { private Disposable mNewBookingOrderDisposable; //新到待抢预约单轮询 private Disposable mGrabResultDisposable; //抢单结果轮询 private Disposable mHeartbeatDisposable; //心跳轮询 - private Disposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 + private CompositeDisposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 public void startInAndWaitOrdersLoop() { if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { @@ -121,21 +125,50 @@ public class TaxiModelLoopManager { } public void startCalculateRouteInfoLoop() { - if (mCalculateRouteDisposable != null && !mCalculateRouteDisposable.isDisposed()) { - return; + + CallerLogger.INSTANCE.i(M_TAXI + TAG, "startCalculateRouteInfoLoop()"); + if (mCalculateRouteDisposable != null) return; + if (mCalculateRouteDisposable == null){ + mCalculateRouteDisposable = new CompositeDisposable(); } - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startCalculateRouteInfoLoop()"); - mCalculateRouteDisposable = Observable.interval(TaxiConst.LOOP_DELAY, - TaxiConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) + Disposable disposable = loopDynamicCalculateRouteInfo() + .doOnSubscribe(new Consumer() { + @Override + public void accept(Disposable disposable) throws Exception { + + } + }).doOnError(new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + } + }) + .delay(TaxiConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 .subscribeOn(Schedulers.io()) + .repeat() // repeat保证请求成功后能够重新订阅。 + .retry() // retry保证请求失败后能重新订阅 .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> TaxiModel.getInstance().dynamicCalculateRouteInfo()); + .subscribe(new Consumer() { + @Override + public void accept(Integer integer) throws Exception { + } + }); + mCalculateRouteDisposable.add(disposable); + } + + private Observable loopDynamicCalculateRouteInfo(){ + return Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + if (emitter.isDisposed()) return; + TaxiModel.getInstance().dynamicCalculateRouteInfo(); + emitter.onComplete(); + } + }); } public void stopCalculateRouteInfLoop() { if (mCalculateRouteDisposable != null) { - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopCalculateRouteInfLoop()"); + CallerLogger.INSTANCE.i(M_TAXI + TAG, "stopCalculateRouteInfLoop()"); mCalculateRouteDisposable.dispose(); mCalculateRouteDisposable = null; } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java index ce93f197b6..279623f531 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/network/TaxiServiceManager.java @@ -442,7 +442,7 @@ public class TaxiServiceManager { @Override public void onSuccess(T o) { super.onSuccess(o); - CallerLogger.INSTANCE.e(M_TAXI + TAG,apiName + ": onSuccess() " + o.msg); + CallerLogger.INSTANCE.d(M_TAXI + TAG,apiName + ": onSuccess() " + o.msg); if (callback != null) { callback.onSuccess(o); } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java index f40200dc4c..add02f86c8 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java @@ -15,6 +15,7 @@ import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.constant.TaxiConst; import com.mogo.och.taxi.constant.TaxiOrderStatusEnum; import com.mogo.och.taxi.bean.OrderQueryRespBean; import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean; @@ -87,10 +88,9 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS /** * 开启自动驾驶 - * @param isRestart 是否是接管后重启自动驾驶 */ - public void startAutoPilot(boolean isRestart) { - TaxiModel.getInstance().startAutoPilot(isRestart); + public void startAutoPilot() { + TaxiModel.getInstance().startAutoPilot(); } /** @@ -181,6 +181,12 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)); } + + @Override + public void onManMachineCoDriving() { + runOnUIThread(() -> mView.onManMachineCoDriving(IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING)); + } + @Override public void onCarStatusChanged(boolean inOperation, String role) { runOnUIThread(() -> mView.updateOperationStatus(inOperation,role)); diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index c033d594e5..e1f8da1bc8 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -3,7 +3,6 @@ package com.mogo.och.taxi.ui; import static com.mogo.och.taxi.constant.TaxiConst.TIMER_START_AUTOPILOT_INTERVAL; import android.animation.ObjectAnimator; -import android.graphics.drawable.AnimationDrawable; import android.os.Handler; import android.os.Looper; import android.view.LayoutInflater; @@ -15,6 +14,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.Group; import androidx.fragment.app.FragmentTransaction; @@ -41,9 +41,13 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.module.common.constants.DataTypes; import com.mogo.module.common.view.OnPreventFastClickListener; +import com.mogo.och.common.module.utils.AnimatorDrawableUtil; import com.mogo.och.taxi.R; import com.mogo.och.taxi.constant.TaxiConst; +import java.util.Arrays; + +import mogo.telematics.pad.MessagePad; import record_cache.RecordPanelOuterClass; @@ -57,7 +61,8 @@ import record_cache.RecordPanelOuterClass; public abstract class BaseTaxiTabFragment> extends MvpFragment implements IMogoMapListener, IMoGoAutopilotRecordListener { private static final String TAG = "BaseOchFragment"; - private LinearLayout ctvAutopilotStatus; + private RelativeLayout ctvAutopilotStatusRL; + private ImageView mAnimFlowIv; protected TextView tvOperationStatus; protected TextView mDriverRole; public boolean isOperationStatus;//false-收车,true-出车 @@ -72,13 +77,69 @@ public abstract class BaseTaxiTabFragment mUpgradeTipIv); + mAICollectBtn = findViewById(R.id.module_och_taxi_ai_collect_ll); + if (mAICollectBtn != null){ + CallerDevaToolsManager.INSTANCE.initAiCollect(mAICollectBtn); + } panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); - ctvAutopilotStatus.setOnClickListener(new OnPreventFastClickListener() { + ctvAutopilotStatusRL.setOnClickListener(new OnPreventFastClickListener() { @Override public void onClickImpl(View v) { // 如果能自动驾驶,就自动驾驶,不能就提示 if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){ + return; //远程代驾状态下不可开启自动驾驶,只能等远程代驾主动退出 + }else if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE){ ToastUtils.showShort(getResources().getString(R.string.module_och_taxi_auto_disable_tip)); - }else if (!(boolean)ctvAutopilotStatus.getTag()){ + }else if (!(boolean)ctvAutopilotStatusRL.getTag()){ ToastUtils.showShort(getResources().getString(R.string.module_och_taxi_auto_disable_tip1)); }else { restartAutopilot(); @@ -214,6 +280,9 @@ public abstract class BaseTaxiTabFragment + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING)); + tvOperationStatus.setOnClickListener(view -> { onChangeOperationStatus(); }); @@ -250,9 +319,13 @@ public abstract class BaseTaxiTabFragment1 @@ -296,8 +369,15 @@ public abstract class BaseTaxiTabFragment已于
" - + "" + currentHM + "" - + "" + " " + "到达乘客上车地点"; - mArrivedStartTimeTv32.setLineHeight(60); - mArrivedStartTimeTv32.setText(Html.fromHtml(strHtml11)); - - mArrivedStationTitleTv32.setText("送乘客至"); - mStationTv32.setText(order.endSiteAddr); - currentCale.add(Calendar.MINUTE, 10); - String strHtml13 = ""; - if (currentDay.equals(DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd))) { - strHtml13 = "免费等待至 " - + "" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_HH_mm) + ""; - - } else { - strHtml13 = "免费等待至" - + "" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_MM_dd_HH_mm) + ""; + try { + if (order == null) return; + if (order.orderStatus == TaxiOrderStatusEnum.JourneyCompleted.getCode()) { + mCurrentOrder = null; + isHaveBeingOrder(false); + mDistanceAndTime2.setText("距离 - - 公里,用时 - - 分"); + mDistanceAndTime3.setText("距离 - - 公里,用时 - - 分"); + return; } - mDistanceAndTime3.setText(Html.fromHtml(strHtml13)); + mOrderNo = order.orderNo; + onOrderStatusChanged(order); + if (TaxiOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus) { + mTaxiFragment.queryCurOrderRouteInfo(); + mContentModule3.setVisibility(View.GONE); + mContentModule2.setVisibility(View.VISIBLE); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "已经达到终点"); + mOrderStatus.setText(R.string.module_och_taxi_arrive_at_end_station2); + mOrderServerStatus.setText(R.string.module_och_taxi_order_server_end); + mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); + GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 + background.setColor(Color.parseColor("#FF1D5EF3")); + mOrderServerStatus.setClickable(true); + mTitleTV2.setText("送乘客至"); + mStationTv2.setText(order.endSiteAddr); + } else if (TaxiOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus) { + CallerLogger.INSTANCE.d(M_TAXI + TAG, "已经去往终点"); - if (TaxiOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus){ - CallerLogger.INSTANCE.d(M_TAXI + TAG, "车辆已经达到起点"); + mContentModule3.setVisibility(View.GONE); + mContentModule2.setVisibility(View.VISIBLE); + mOrderStatus.setText(R.string.module_och_taxi_on_the_way_2_end_station); + mOrderServerStatus.setText(R.string.module_och_taxi_order_server_end); + mOrderServerStatus.setTextColor(Color.parseColor("#4DFFFFFF")); + GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 + background.setColor(Color.parseColor("#4D1D5EF3")); + mOrderServerStatus.setClickable(false); + + mTitleTV2.setText("送乘客至"); + mStationTv2.setText(order.endSiteAddr); + } else if (TaxiOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus + || TaxiOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus){ + + mContentModule2.setVisibility(View.GONE); + mContentModule3.setVisibility(View.VISIBLE); + mArrivedStartTimeTv32.setVisibility(View.VISIBLE); + mContentModule32.setVisibility(View.VISIBLE); + mContentModule31.setVisibility(View.GONE); + mOrderOtherContent3.setVisibility(View.GONE); + + Calendar currentCale = DateTimeUtils.getCurrentDateTime(); + String currentHM = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_HH_mm); + String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd); + String strHtml11 = "已于
" + + "" + currentHM + "" + + "" + " " + "到达乘客上车地点"; + mArrivedStartTimeTv32.setLineHeight(60); + mArrivedStartTimeTv32.setText(Html.fromHtml(strHtml11)); + + mArrivedStationTitleTv32.setText("送乘客至"); + mStationTv32.setText(order.endSiteAddr); + currentCale.add(Calendar.MINUTE, 10); + String strHtml13 = ""; + if (currentDay.equals(DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd))) { + strHtml13 = "免费等待至 " + + "" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_HH_mm) + ""; + + } else { + strHtml13 = "免费等待至" + + "" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_MM_dd_HH_mm) + ""; + } + mDistanceAndTime3.setText(Html.fromHtml(strHtml13)); + + if (TaxiOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus){ + CallerLogger.INSTANCE.d(M_TAXI + TAG, "车辆已经达到起点"); + mPassengerInfoLayout.setVisibility(View.VISIBLE); + mPassengerNum.setText(order.passengerNum + "人"); + mPassengerPhone.setText(order.passengerPhone); + mOrderStatus.setText(R.string.module_och_taxi_waiting); + mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start_wait_check); + mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); + GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 + background.setColor(Color.parseColor("#FF1D5EF3")); + mOrderServerStatus.setClickable(true); + }else if (TaxiOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus ){ + CallerLogger.INSTANCE.d(M_TAXI + TAG, "乘客已上车验证成功"); + + mPassengerInfoLayout.setVisibility(View.GONE); + mOrderStatus.setText(R.string.module_och_taxi_user_check_success); + mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start); + GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 + background.setColor(Color.parseColor("#FF1D5EF3")); + mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); + mOrderServerStatus.setClickable(true); + } + + }else if (TaxiModel.getInstance().checkCurrentOCHOrder()) { + CallerLogger.INSTANCE.d(M_TAXI + TAG, "前往乘客上车地点"); + mContentModule2.setVisibility(View.GONE); + mContentModule3.setVisibility(View.VISIBLE); + mContentModule31.setVisibility(View.VISIBLE); + mArrivedStartTimeTv32.setVisibility(View.GONE); + mContentModule32.setVisibility(View.GONE); + mOrderOtherContent3.setVisibility(View.VISIBLE); + mDistanceAndTime3.setVisibility(View.VISIBLE); mPassengerInfoLayout.setVisibility(View.VISIBLE); mPassengerNum.setText(order.passengerNum + "人"); mPassengerPhone.setText(order.passengerPhone); - mOrderStatus.setText(R.string.module_och_taxi_waiting); - mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start_wait_check); - mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); - GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#FF1D5EF3")); - mOrderServerStatus.setClickable(true); - }else if (TaxiOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus ){ - CallerLogger.INSTANCE.d(M_TAXI + TAG, "乘客已上车验证成功"); - - mPassengerInfoLayout.setVisibility(View.GONE); - mOrderStatus.setText(R.string.module_och_taxi_user_check_success); + mOrderStatus.setText(R.string.module_och_taxi_new_order); mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start); + mOrderServerStatus.setTextColor(Color.parseColor("#4DFFFFFF")); GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#FF1D5EF3")); - mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); - mOrderServerStatus.setClickable(true); - } + background.setColor(Color.parseColor("#4D1D5EF3")); + mOrderServerStatus.setClickable(false); + mGoAheadStationTitleTv31.setText("前往"); + mCatchStationTitleTv31.setText("接乘客"); + mStationTv31.setText(order.startSiteAddr); - }else if (TaxiModel.getInstance().checkCurrentOCHOrder()) { - CallerLogger.INSTANCE.d(M_TAXI + TAG, "前往乘客上车地点"); - mContentModule2.setVisibility(View.GONE); - mContentModule3.setVisibility(View.VISIBLE); - mContentModule31.setVisibility(View.VISIBLE); - mArrivedStartTimeTv32.setVisibility(View.GONE); - mContentModule32.setVisibility(View.GONE); - mOrderOtherContent3.setVisibility(View.VISIBLE); - mDistanceAndTime3.setVisibility(View.VISIBLE); - mPassengerInfoLayout.setVisibility(View.VISIBLE); - mPassengerNum.setText(order.passengerNum + "人"); - mPassengerPhone.setText(order.passengerPhone); - mOrderStatus.setText(R.string.module_och_taxi_new_order); - mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start); - mOrderServerStatus.setTextColor(Color.parseColor("#4DFFFFFF")); - GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#4D1D5EF3")); - mOrderServerStatus.setClickable(false); - mGoAheadStationTitleTv31.setText("前往"); - mCatchStationTitleTv31.setText("接乘客"); - mStationTv31.setText(order.startSiteAddr); - - Calendar currentCale = DateTimeUtils.getCurrentDateTime(); - Calendar startCale = DateTimeUtil.formatLongToCalendar(order.bookingTime); - String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd); - String startDay = DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_yyyy_MM_dd); - String strHtml1 = ""; - if (currentDay.equals(startDay)) { - strHtml1 = "乘客将于
" - + "" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_HH_mm) + "" - + " 用车"; - } else { - strHtml1 = "乘客将于
" - + "" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_MM_dd_HH_mm) + "" - + " 用车"; + Calendar currentCale = DateTimeUtils.getCurrentDateTime(); + Calendar startCale = DateTimeUtil.formatLongToCalendar(order.bookingTime); + String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd); + String startDay = DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_yyyy_MM_dd); + String strHtml1 = ""; + if (currentDay.equals(startDay)) { + strHtml1 = "乘客将于
" + + "" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_HH_mm) + "" + + " 用车"; + } else { + strHtml1 = "乘客将于
" + + "" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_MM_dd_HH_mm) + "" + + " 用车"; + } + mOrderOtherContent3.setText(Html.fromHtml(strHtml1)); + mOrderStartStationLat = order.startSiteGcjPoint.get(1); + mOrderStartStationLng = order.startSiteGcjPoint.get(0); } - mOrderOtherContent3.setText(Html.fromHtml(strHtml1)); - mOrderStartStationLat = order.startSiteGcjPoint.get(1); - mOrderStartStationLng = order.startSiteGcjPoint.get(0); + }catch (NullPointerException e){ //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况 + TaxiModel.getInstance().clearCurrentOCHOrder(); } } @@ -406,6 +413,8 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement if (status == TaxiOrderStatusEnum.None.getCode() || status == TaxiOrderStatusEnum.Cancel.getCode() || status == TaxiOrderStatusEnum.JourneyCompleted.getCode()) { isHaveBeingOrder(false); mCurrentOrder = null; + mDistanceAndTime2.setText("距离 - - 公里,用时 - - 分"); + mDistanceAndTime3.setText("距离 - - 公里,用时 - - 分"); } else { isHaveBeingOrder(true); } @@ -602,28 +611,42 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implement */ private void setOrRemoveMapMaker(boolean isAdd, String uuid, List station,int resourceId){ if (isAdd){ - CallerLogger.INSTANCE.d(M_TAXI + "setMapMaker= ",uuid+"=latitude=" - +station.get(1)+",longitude="+station.get(0)); - - MogoMarkerOptions options = new MogoMarkerOptions() - .owner(TaxiConst.TYPE_MARKER_TAXI_ORDER) - .anchor(0.5f, 0.5f) - .set3DMode(true) - .gps(true) - .controlAngle(true) - .icon3DRes(resourceId) - .latitude(station.get(1)) - .longitude(station.get(0)); - IMogoMarker marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).addMarker(uuid, options); - CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo(station.get(0) - ,station.get(1),-1); - if (null != centerLine){// 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 - marker.setRotateAngle(centerLine.getAngle().floatValue()); - } + //开启线程执行起终点marker设置 + Runnable setMapMarkerRunnable = new Runnable() { + @Override + public void run() { + CallerLogger.INSTANCE.d(M_TAXI + "setMapMaker= " + Thread.currentThread().getName(), + uuid + "=latitude=" + station.get(1) + ",longitude=" + station.get(0)); + MogoMarkerOptions options = new MogoMarkerOptions() + .owner(TaxiConst.TYPE_MARKER_TAXI_ORDER) + .anchor(0.5f, 0.5f) + .set3DMode(true) + .gps(true) + .controlAngle(true) + .icon3DRes(resourceId) + .latitude(station.get(1)) + .longitude(station.get(0)); + IMogoMarker marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).addMarker(uuid, options); + CenterLine centerLine = CallerHDMapManager.INSTANCE.getCenterLineInfo(station.get(0) + , station.get(1), -1); + if (null != centerLine) {// 有可能鹰眼map为空没有角度。判空使用后可能造成maker角度跟道路角度不一致 + marker.setRotateAngle(centerLine.getAngle().floatValue()); + } + } + }; + OCHThreadPoolManager.getsInstance().execute(setMapMarkerRunnable); }else { - CallerLogger.INSTANCE.d(M_TAXI + "RemoveMapMaker=",uuid+"=latitude="+station.get(1)+",longitude="+station.get(0)); - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .removeMarkers(uuid); + //开启线程移除起终点marker设置 + Runnable removeMapMarkerRunnable = new Runnable() { + @Override + public void run() { + CallerLogger.INSTANCE.d(M_TAXI + "RemoveMapMaker=" + Thread.currentThread().getName(), + uuid + "=latitude=" + station.get(1) + ",longitude=" + station.get(0)); + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(uuid); + } + }; + OCHThreadPoolManager.getsInstance().execute(removeMapMarkerRunnable); } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java index e7c81a0a9d..631db5510b 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.java @@ -63,7 +63,7 @@ public class TaxiFragment extends BaseTaxiTabFragment { if (!isStarting){ - mPresenter.startAutoPilot(false); + mPresenter.startAutoPilot(); startOrStopLoadingAnim(true); } TaxiModel.getInstance().setOnTheWayToEndStation(); @@ -383,6 +383,8 @@ public class TaxiFragment extends BaseTaxiTabFragment + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00000.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00000.png new file mode 100755 index 0000000000..22ba4eaf3b Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00000.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00001.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00001.png new file mode 100755 index 0000000000..ce611901b2 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00001.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00002.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00002.png new file mode 100755 index 0000000000..244c3e0517 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00002.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00003.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00003.png new file mode 100755 index 0000000000..c51f8ac566 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00003.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00004.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00004.png new file mode 100755 index 0000000000..ea16dfd223 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00004.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00005.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00005.png new file mode 100755 index 0000000000..087438db35 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00005.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00006.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00006.png new file mode 100755 index 0000000000..297b485e1b Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00006.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00007.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00007.png new file mode 100755 index 0000000000..c916ef48f9 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00007.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00008.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00008.png new file mode 100755 index 0000000000..d73767b6f5 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00008.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00009.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00009.png new file mode 100755 index 0000000000..5f6ce673db Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00009.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00010.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00010.png new file mode 100755 index 0000000000..690bf7df44 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00010.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00011.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00011.png new file mode 100755 index 0000000000..8aa7b996b6 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00011.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00012.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00012.png new file mode 100755 index 0000000000..9ca8dbe784 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00012.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00013.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00013.png new file mode 100755 index 0000000000..388db958a9 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00013.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00014.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00014.png new file mode 100755 index 0000000000..e97f052fb1 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00014.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00015.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00015.png new file mode 100755 index 0000000000..08681b174c Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00015.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00016.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00016.png new file mode 100755 index 0000000000..feb9460dd5 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00016.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00017.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00017.png new file mode 100755 index 0000000000..7a057db668 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00017.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00018.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00018.png new file mode 100755 index 0000000000..27ff3cc600 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00018.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00019.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00019.png new file mode 100755 index 0000000000..2c99dd5dc9 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00019.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00020.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00020.png new file mode 100755 index 0000000000..16cdb4bfab Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00020.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00021.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00021.png new file mode 100755 index 0000000000..b784e1e4c6 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00021.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00022.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00022.png new file mode 100755 index 0000000000..627f4c9d06 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00022.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00023.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00023.png new file mode 100755 index 0000000000..46da8e7b5f Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00023.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00024.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00024.png new file mode 100755 index 0000000000..bcdd8963a8 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00024.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00025.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00025.png new file mode 100755 index 0000000000..4950874cc5 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00025.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00026.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00026.png new file mode 100755 index 0000000000..db24fdd89e Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00026.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00027.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00027.png new file mode 100755 index 0000000000..b3b3358577 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00027.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00028.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00028.png new file mode 100755 index 0000000000..fc79d79547 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00028.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00029.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00029.png new file mode 100755 index 0000000000..584e0725f0 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00029.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00030.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00030.png new file mode 100755 index 0000000000..e2027cfc7c Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00030.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00031.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00031.png new file mode 100755 index 0000000000..ff69d8e339 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00031.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00032.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00032.png new file mode 100755 index 0000000000..c13fe25962 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00032.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00033.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00033.png new file mode 100755 index 0000000000..02036b0e57 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00033.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00034.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00034.png new file mode 100755 index 0000000000..e29d990854 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00034.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00035.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00035.png new file mode 100755 index 0000000000..114d54e626 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00035.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00036.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00036.png new file mode 100755 index 0000000000..e44f7aba6a Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00036.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00037.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00037.png new file mode 100755 index 0000000000..4a718e8b89 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00037.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00038.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00038.png new file mode 100755 index 0000000000..43c70793e4 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00038.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00039.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00039.png new file mode 100755 index 0000000000..5f909f1271 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00039.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00040.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00040.png new file mode 100755 index 0000000000..de2b95946b Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00040.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00041.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00041.png new file mode 100755 index 0000000000..be65eb18bd Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00041.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00042.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00042.png new file mode 100755 index 0000000000..b74820d9ab Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00042.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00043.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00043.png new file mode 100755 index 0000000000..d751c5a8f6 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00043.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00044.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00044.png new file mode 100755 index 0000000000..c8c3fe019a Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00044.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00045.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00045.png new file mode 100755 index 0000000000..79b1f778b9 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00045.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00046.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00046.png new file mode 100755 index 0000000000..66cbb1a8bf Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00046.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00047.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00047.png new file mode 100755 index 0000000000..e75559ba2b Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00047.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00048.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00048.png new file mode 100755 index 0000000000..0fa9cf95f3 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00048.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00049.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00049.png new file mode 100755 index 0000000000..7445350b68 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00049.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00050.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00050.png new file mode 100755 index 0000000000..0e4c83c1b3 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00050.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00051.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00051.png new file mode 100755 index 0000000000..1b05dfb2c4 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00051.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00052.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00052.png new file mode 100755 index 0000000000..64f3974bb3 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00052.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00053.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00053.png new file mode 100755 index 0000000000..9199dda1df Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00053.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00054.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00054.png new file mode 100755 index 0000000000..fcc0fa446c Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00054.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00055.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00055.png new file mode 100755 index 0000000000..a0ac37b605 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00055.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00056.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00056.png new file mode 100755 index 0000000000..4879de18eb Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00056.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00057.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00057.png new file mode 100755 index 0000000000..b60bc68114 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00057.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00058.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00058.png new file mode 100755 index 0000000000..5dc3945a0c Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00058.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00059.png b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00059.png new file mode 100755 index 0000000000..626c936ee2 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable/anim_flow_man_co_00059.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/anmi_flow.xml b/OCH/mogo-och-taxi/src/main/res/drawable/anmi_flow.xml deleted file mode 100644 index 611cde2035..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/drawable/anmi_flow.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/bad_case_selector.xml b/OCH/mogo-och-taxi/src/main/res/drawable/bad_case_selector.xml new file mode 100755 index 0000000000..b0e7932bd4 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/res/drawable/bad_case_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/taxi_operation_status_bg_selector.xml b/OCH/mogo-och-taxi/src/main/res/drawable/taxi_operation_status_bg_selector.xml new file mode 100755 index 0000000000..15d6e4cec9 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/res/drawable/taxi_operation_status_bg_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/taxi_operation_status_select_bg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/taxi_operation_status_select_bg.xml new file mode 100644 index 0000000000..835c1fbaff --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/res/drawable/taxi_operation_status_select_bg.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/layout/taxi_base_fragment.xml b/OCH/mogo-och-taxi/src/main/res/layout/taxi_base_fragment.xml index 1b1b51a117..58ca3d2735 100644 --- a/OCH/mogo-och-taxi/src/main/res/layout/taxi_base_fragment.xml +++ b/OCH/mogo-och-taxi/src/main/res/layout/taxi_base_fragment.xml @@ -22,7 +22,7 @@ - + app:layout_constraintTop_toTopOf="parent"> + + + - + - @@ -182,18 +179,42 @@ android:layout_height="wrap_content" android:layout_gravity="center" /> - - + app:layout_constraintLeft_toRightOf="@id/module_och_taxi_swich_map_layout"> + + + + + +