Merge branch 'dev_robotaxi-d_230612_3.4.0' into dev_robotaxi-d_230711_3.4.0
# Conflicts: # OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java # OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OverviewFragment.kt
This commit is contained in:
@@ -30,7 +30,7 @@ import com.mogo.och.common.module.manager.loopmanager.LoopInfo
|
||||
import com.mogo.och.bus.passenger.bean.response.*
|
||||
import com.mogo.och.bus.passenger.callback.*
|
||||
import com.mogo.och.bus.passenger.constant.CharterPassengerConst
|
||||
import com.mogo.och.common.module.manager.loopmanager.BusPassengerModelLoopManager
|
||||
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
|
||||
import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
|
||||
import com.mogo.och.bus.passenger.utils.ToastCharterUtils
|
||||
import com.mogo.och.bus.passenger.utils.VoiceFocusManager
|
||||
@@ -186,12 +186,12 @@ object CharterPassengerModel {
|
||||
// 2 、打开空调暖风机灯设置页面
|
||||
// 3、车控页面、
|
||||
// 4、打开选择线路页面
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGLOGIN)
|
||||
BizLoopManager.removeLoopFunction(TAGLOGIN)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束登录状态轮询")
|
||||
// 启动订单轮
|
||||
startOrderLoop()
|
||||
} else {
|
||||
BusPassengerModelLoopManager.setLoopFunction(
|
||||
BizLoopManager.setLoopFunction(
|
||||
TAGLOGIN,
|
||||
LoopInfo(3, ::queryLoginStatus)
|
||||
)
|
||||
@@ -337,7 +337,7 @@ object CharterPassengerModel {
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun startOrderLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(
|
||||
BizLoopManager.setLoopFunction(
|
||||
TAGORDER,
|
||||
LoopInfo(3, ::queryOrder)
|
||||
)
|
||||
@@ -348,7 +348,7 @@ object CharterPassengerModel {
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun endOrderLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGORDER)
|
||||
BizLoopManager.removeLoopFunction(TAGORDER)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束订单轮询")
|
||||
}
|
||||
|
||||
@@ -489,7 +489,7 @@ object CharterPassengerModel {
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun startCarStatusLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus))
|
||||
BizLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus))
|
||||
CallerLogger.d(M_BUS_P + TAG, "启动车态轮询")
|
||||
}
|
||||
|
||||
@@ -497,7 +497,7 @@ object CharterPassengerModel {
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun endCarStatusLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGCARSTATUS)
|
||||
BizLoopManager.removeLoopFunction(TAGCARSTATUS)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束车态轮询")
|
||||
}
|
||||
|
||||
@@ -548,7 +548,7 @@ object CharterPassengerModel {
|
||||
* 启动时间校准轮训
|
||||
*/
|
||||
private fun startCalibrationLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(
|
||||
BizLoopManager.setLoopFunction(
|
||||
TAGCALIBRATION,
|
||||
LoopInfo(120, ::queryBusinessTime, immediately = true)
|
||||
)
|
||||
@@ -559,7 +559,7 @@ object CharterPassengerModel {
|
||||
* 停止时间校准轮训
|
||||
*/
|
||||
private fun endCalibrationLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGCALIBRATION)
|
||||
BizLoopManager.removeLoopFunction(TAGCALIBRATION)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束时间校准轮询")
|
||||
}
|
||||
|
||||
@@ -656,7 +656,7 @@ object CharterPassengerModel {
|
||||
* 启动路距计算
|
||||
*/
|
||||
private fun startCalculateDistanceLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance))
|
||||
BizLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance))
|
||||
CallerLogger.d(M_BUS_P + TAG, "开始路距计算")
|
||||
}
|
||||
|
||||
@@ -667,7 +667,7 @@ object CharterPassengerModel {
|
||||
* ③ 到站成功后
|
||||
*/
|
||||
private fun endCalculateDistanceLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGDISTANCE)
|
||||
BizLoopManager.removeLoopFunction(TAGDISTANCE)
|
||||
CallerLogger.d(M_BUS_P + TAG, "结束路距计算")
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse
|
||||
import com.mogo.och.bus.passenger.model.CharterPassengerModel
|
||||
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
|
||||
import com.mogo.och.bus.passenger.model.OrderStatusEnum
|
||||
import com.mogo.och.common.module.manager.loopmanager.BusPassengerModelLoopManager
|
||||
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
|
||||
import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
|
||||
import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1OrderLineFragment
|
||||
import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg
|
||||
@@ -187,7 +187,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
|
||||
CallerLogger.d(M_BUS_P + TAG, "onDestroy")
|
||||
RxUtils.disposeSubscribe(subscribeSelectLine)
|
||||
RxUtils.disposeSubscribe(subscribeSelectSite)
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
BizLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
CharterPassengerModel.setStatusChangeListener(TAG,null)
|
||||
CallerTelematicListenerManager.removeListener(TAG)
|
||||
}
|
||||
@@ -230,7 +230,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
|
||||
mView?.hideDataDriverRefuse()
|
||||
}
|
||||
RxUtils.disposeSubscribe(subscribeSelectSite)
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
BizLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -270,7 +270,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
|
||||
}
|
||||
mView?.hideDataWaitDriverMsg()
|
||||
// 启动查看和司机端链接
|
||||
BusPassengerModelLoopManager.setLoopFunction(
|
||||
BizLoopManager.setLoopFunction(
|
||||
TAGLINELOOP,
|
||||
LoopInfo(3, ::checkServerStatus)
|
||||
)
|
||||
@@ -284,7 +284,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) :
|
||||
private fun checkServerStatus() {
|
||||
if (!CallerTelematicManager.getClientConnStatus()) {
|
||||
ToastCharterUtils.showShort("断开和司机端连接、请联系安全员")
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
BizLoopManager.removeLoopFunction(TAGLINELOOP)
|
||||
mView?.hideDataDriverRefuse()
|
||||
CallerLogger.d(M_BUS_P + TAG, "endAni666")
|
||||
}
|
||||
|
||||
@@ -12,10 +12,11 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
|
||||
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
|
||||
import com.mogo.och.common.module.manager.loopmanager.BusPassengerModelLoopManager
|
||||
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
@@ -214,7 +215,9 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
|
||||
* 启动路距计算
|
||||
*/
|
||||
private fun startCalculateDistanceLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance))
|
||||
BizLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance,
|
||||
scheduler = Schedulers.computation()
|
||||
))
|
||||
d(SceneConstant.M_BUS_P + TAG, "开始路距计算")
|
||||
}
|
||||
|
||||
@@ -222,7 +225,7 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{
|
||||
* 结束启动路距计算
|
||||
*/
|
||||
private fun endCalculateDistanceLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGDISTANCE)
|
||||
BizLoopManager.removeLoopFunction(TAGDISTANCE)
|
||||
d(SceneConstant.M_BUS_P + TAG, "结束路距计算")
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.Observer
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
@@ -14,7 +15,7 @@ import java.util.concurrent.TimeUnit
|
||||
*
|
||||
* 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等)
|
||||
*/
|
||||
object BusPassengerModelLoopManager {
|
||||
object BizLoopManager {
|
||||
|
||||
private val TAG = "BusPassengerModelLoopManager"
|
||||
|
||||
@@ -66,8 +67,21 @@ object BusPassengerModelLoopManager {
|
||||
aLong?.let {
|
||||
if (it % loopInfo.interval == 0L) {
|
||||
try {
|
||||
loopInfo.function.invoke()
|
||||
CallerLogger.d(TAG, "${aLong}对象${loopInfo}正在执行方法${tag}")
|
||||
if(loopInfo.scheduler!=null) {
|
||||
Observable.just(tag).observeOn(loopInfo.scheduler)
|
||||
.subscribe(object :Observer<String>{
|
||||
override fun onSubscribe(d: Disposable) {}
|
||||
override fun onError(e: Throwable) {}
|
||||
override fun onComplete() {
|
||||
loopInfo.function.invoke()
|
||||
CallerLogger.d(TAG, "${aLong}正在执行方法${tag}_${Thread.currentThread().name}")
|
||||
}
|
||||
override fun onNext(t: String) {}
|
||||
})
|
||||
}else{
|
||||
loopInfo.function.invoke()
|
||||
CallerLogger.d(TAG, "${aLong}正在执行方法${tag}_${Thread.currentThread().name}")
|
||||
}
|
||||
}catch (e:Throwable){
|
||||
e.printStackTrace()
|
||||
CallerLogger.e(TAG,"$tag:--$e")
|
||||
@@ -1,3 +1,11 @@
|
||||
package com.mogo.och.common.module.manager.loopmanager
|
||||
|
||||
data class LoopInfo(val interval:Long,val function: () -> Unit,val immediately:Boolean=false)
|
||||
import io.reactivex.Scheduler
|
||||
|
||||
/**
|
||||
* interval 轮训间隔
|
||||
* function 轮询执行的方法
|
||||
* immediately 是否立刻执行
|
||||
* scheduler 轮训执行的线程
|
||||
*/
|
||||
data class LoopInfo(val interval:Long,val function: () -> Unit,val immediately:Boolean=false,var scheduler: Scheduler? = null)
|
||||
@@ -63,19 +63,6 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData {
|
||||
public String txtFileMd5DPQP = ""; //轨迹文件md5,默认“”
|
||||
public long contrailSaveTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖
|
||||
|
||||
// !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km
|
||||
public double travelDistance;
|
||||
|
||||
/**
|
||||
* @param distance
|
||||
*/
|
||||
public void decreaseTravelDistance( double distance ) {
|
||||
travelDistance = ( ( float ) distance / 1000f );
|
||||
if ( travelDistance < 0 ) {
|
||||
travelDistance = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Result o) {
|
||||
boolean isEqual = this.orderNo.equals(o.orderNo);
|
||||
@@ -97,7 +84,7 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData {
|
||||
public int hashCode() {
|
||||
return Objects.hash(orderNo, orderType, orderStatus, businessType, startSiteId,
|
||||
startSiteAddr, startSitePoint, startSiteGcjPoint, endSiteId, endSiteAddr,
|
||||
endSitePoint, endSiteGcjPoint, carNumber, createTime, startTime, travelDistance);
|
||||
endSitePoint, endSiteGcjPoint, carNumber, createTime, startTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package com.mogo.och.taxi.passenger.callback;
|
||||
|
||||
import com.mogo.eagle.core.data.map.MogoLocation;
|
||||
|
||||
/**
|
||||
* Created on 2021/9/10
|
||||
*
|
||||
* Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等)
|
||||
*/
|
||||
public interface IOCHTaxiPassengerControllerStatusCallback {
|
||||
// 是否vr map模式
|
||||
void onVRModeChanged(boolean isVRMode);
|
||||
// 自车定位
|
||||
void onCarLocationChanged(MogoLocation location);
|
||||
}
|
||||
@@ -15,9 +15,6 @@ public interface IOCHTaxiPassengerOrderStatusCallback {
|
||||
// 当前位置距离上车点的距离(米)、预估时间(秒)
|
||||
void onCurrentOrderDistToEndChanged(long meters, long timeInSecond);
|
||||
|
||||
//当前路名字
|
||||
void onCurrentRoadName(String currentRoadName);
|
||||
|
||||
// 司机已确认开启自动驾驶环境
|
||||
void onDriverHasCheckedPilotCondition(boolean isBoarded);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ enum class TaxiPassengerOrderStatusEnum(val code: Int) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun valueOf(code: Int): TaxiPassengerOrderStatusEnum? {
|
||||
fun valueOf(code: Int): TaxiPassengerOrderStatusEnum {
|
||||
for (value in values()) {
|
||||
if (value.code == code) {
|
||||
return value
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
package com.mogo.och.taxi.passenger.model;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.amap.api.services.core.AMapException;
|
||||
import com.amap.api.services.core.LatLonPoint;
|
||||
import com.amap.api.services.geocoder.GeocodeResult;
|
||||
import com.amap.api.services.geocoder.GeocodeSearch;
|
||||
import com.amap.api.services.geocoder.RegeocodeQuery;
|
||||
import com.amap.api.services.geocoder.RegeocodeResult;
|
||||
import com.amap.api.services.geocoder.RegeocodeRoad;
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil;
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2021/12/6
|
||||
*/
|
||||
public class TaxiPassengerGeocodeSearchModel implements GeocodeSearch.OnGeocodeSearchListener {
|
||||
|
||||
private final String TAG = TaxiPassengerGeocodeSearchModel.class.getSimpleName();
|
||||
|
||||
private static Context mContext;
|
||||
|
||||
private IOCHTaxiPassengerNaviChangedCallback mNaviChangedCallback;
|
||||
|
||||
GeocodeSearch mGeocodeSearch = null;
|
||||
|
||||
private String roadName = "";
|
||||
|
||||
private Timer timer ;
|
||||
|
||||
TimerTask timerTask;
|
||||
|
||||
public static TaxiPassengerGeocodeSearchModel getInstance(Context context) {
|
||||
mContext = context;
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static final class SingletonHolder {
|
||||
private static final TaxiPassengerGeocodeSearchModel INSTANCE = new TaxiPassengerGeocodeSearchModel();
|
||||
}
|
||||
|
||||
private TaxiPassengerGeocodeSearchModel(){
|
||||
}
|
||||
|
||||
public void initGeocodeSearch(){
|
||||
//通过经纬度逆地理编码得到位置
|
||||
try {
|
||||
mGeocodeSearch = new GeocodeSearch(mContext);
|
||||
mGeocodeSearch.setOnGeocodeSearchListener(this);
|
||||
} catch (AMapException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
timer = new Timer();
|
||||
timerTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mNaviChangedCallback != null){
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "roadName道路名称: " + roadName);
|
||||
mNaviChangedCallback.onCurrentRoadName(roadName);
|
||||
}
|
||||
}
|
||||
};
|
||||
try{
|
||||
timer.schedule(timerTask,500,2000);
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void searchLocationInfo(double lat, double lon){
|
||||
if (null != mGeocodeSearch){
|
||||
LatLonPoint latLng = new LatLonPoint(lat, lon);
|
||||
//第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
|
||||
RegeocodeQuery query = new RegeocodeQuery(latLng, 200, GeocodeSearch.AMAP);
|
||||
mGeocodeSearch.getFromLocationAsyn(query);
|
||||
}
|
||||
}
|
||||
|
||||
public void destroyGeocodeSearch(){
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "destroyGeocodeSearch");
|
||||
if (mGeocodeSearch != null){
|
||||
mGeocodeSearch = null;
|
||||
}
|
||||
if (mNaviChangedCallback != null){
|
||||
mNaviChangedCallback = null;
|
||||
}
|
||||
if (null != timer){
|
||||
timer.cancel();
|
||||
}
|
||||
if (null != timerTask){
|
||||
timerTask = null;
|
||||
}
|
||||
roadName = "";
|
||||
}
|
||||
|
||||
public void setOCHTaciNaviChangedCallback(IOCHTaxiPassengerNaviChangedCallback callback){
|
||||
this.mNaviChangedCallback = callback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {//更新频率几十 ms, 暂定更新UI为2s一次
|
||||
if (regeocodeResult != null) {
|
||||
List<RegeocodeRoad> roads = regeocodeResult.getRegeocodeAddress().getRoads();
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "位置roads:" + GsonUtil.jsonFromObject(roads));
|
||||
if (roads != null && roads.size() > 0){
|
||||
roadName = roads.get(0).getName();//当前路的名字
|
||||
// mNaviChangedCallback.onCurrentRoadName(roads.get(0).getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
|
||||
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,837 @@
|
||||
package com.mogo.och.taxi.passenger.model
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.net.ConnectivityManager
|
||||
import com.amap.api.maps.model.LatLng
|
||||
import com.amap.api.navi.model.NaviLatLng
|
||||
import com.elegant.network.utils.GsonUtil
|
||||
import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
|
||||
import com.mogo.commons.module.intent.IMogoIntentListener
|
||||
import com.mogo.commons.module.intent.IntentManager
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLine
|
||||
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters.AutoPilotLonLat
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.startAutoPilot
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
|
||||
import com.mogo.och.common.module.callback.OchAdasStartFailureCallback
|
||||
import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager.startLoopAbnormalFactors
|
||||
import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager.stopLoopAbnormalFactors
|
||||
import com.mogo.och.common.module.manager.OCHAdasAbilityManager
|
||||
import com.mogo.och.common.module.manager.distancemamager.IDistanceListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addDistanceListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addTrajectoryListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.removeListener
|
||||
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint
|
||||
import com.mogo.och.common.module.manager.loopmanager.BizLoopManager
|
||||
import com.mogo.och.common.module.manager.loopmanager.LoopInfo
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.calculateRouteSumLength
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon
|
||||
import com.mogo.och.common.module.utils.PinYinUtil
|
||||
import com.mogo.och.common.module.utils.RxUtils
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum
|
||||
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum.Companion.valueOf
|
||||
import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager
|
||||
import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils
|
||||
import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils.transmissionIndexGet
|
||||
import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.exceptions.UndeliverableException
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.plugins.RxJavaPlugins
|
||||
import mogo.telematics.pad.MessagePad.ArrivalNotification
|
||||
import mogo.telematics.pad.MessagePad.GlobalPathResp
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
/**
|
||||
* Created by pangfan on 2021/8/19
|
||||
*
|
||||
* 网约车 - 出租车业务逻辑处理
|
||||
*/
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
object TaxiPassengerModel {
|
||||
|
||||
private var mContext: Context? = null
|
||||
|
||||
private val TAG = TaxiPassengerModel::class.java.simpleName
|
||||
|
||||
private val STARTREADYTOAUTOPILOT = "startReadyToAutopilot"
|
||||
private val MINANDWAITSERVICE = "mInAndWaitService"
|
||||
private val MQUERYORDERREMAINING = "mQueryOrderRemaining"
|
||||
|
||||
// 获取当前订单
|
||||
@Volatile
|
||||
var currentOCHOrder: TaxiPassengerOrderQueryRespBean.Result? = null//当前订单
|
||||
|
||||
@Volatile
|
||||
private var mInServiceList = emptyList<TaxiPassengerOrderQueryRespBean.Result>() //进行中订单
|
||||
|
||||
private var mADASStatusCallback: IOCHTaxiPassengerADASStatusCallback? = null//Model->Presenter:自动驾驶状态相关
|
||||
private var mAutopilotPlanningCallback: IOCHTaxiPassengerAutopilotPlanningCallback? = null//Model->Presenter:自动驾驶线路规划
|
||||
private val mOrderStatusCallbackMap: MutableMap<String, IOCHTaxiPassengerOrderStatusCallback> = ConcurrentHashMap()
|
||||
private var subscribe: Disposable? = null
|
||||
|
||||
fun setMoGoAutopilotPlanningListener(moGoAutopilotPlanningCallback: IOCHTaxiPassengerAutopilotPlanningCallback?) {
|
||||
mAutopilotPlanningCallback = moGoAutopilotPlanningCallback
|
||||
}
|
||||
|
||||
fun setADASStatusCallback(callback: IOCHTaxiPassengerADASStatusCallback?) {
|
||||
mADASStatusCallback = callback
|
||||
}
|
||||
|
||||
fun setOrderStatusCallback(tag: String?, callback: IOCHTaxiPassengerOrderStatusCallback?) {
|
||||
if (tag == null || "" == tag) return
|
||||
if (callback == null) {
|
||||
mOrderStatusCallbackMap.remove(tag)
|
||||
return
|
||||
}
|
||||
mOrderStatusCallbackMap[tag] = callback
|
||||
}
|
||||
|
||||
fun init(context: Context) {
|
||||
mContext = context.applicationContext
|
||||
initListeners()
|
||||
|
||||
// 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃
|
||||
// The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with
|
||||
RxJavaPlugins.setErrorHandler(Consumer { e ->
|
||||
if (e is UndeliverableException) {
|
||||
d(M_TAXI_P + TAG, "UndeliverableException")
|
||||
return@Consumer
|
||||
}
|
||||
if (e is IOException) { //
|
||||
// fine, irrelevant network problem or API that throws on cancellation
|
||||
d(M_TAXI_P + TAG, "IOException")
|
||||
return@Consumer
|
||||
}
|
||||
if (e is InterruptedException) {
|
||||
// fine, some blocking code was interrupted by a dispose call
|
||||
d(M_TAXI_P + TAG, "InterruptedException")
|
||||
return@Consumer
|
||||
}
|
||||
if (e is NullPointerException || e is IllegalArgumentException) {
|
||||
// that's likely a bug in the application
|
||||
d(M_TAXI_P + TAG, "NullPointerException or IllegalArgumentException")
|
||||
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
|
||||
return@Consumer
|
||||
}
|
||||
if (e is IllegalStateException) {
|
||||
// that's a bug in RxJava or in a custom operator
|
||||
d(M_TAXI_P + TAG, "IllegalStateException")
|
||||
Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e)
|
||||
return@Consumer
|
||||
}
|
||||
d(M_TAXI_P + TAG, "Undeliverable exception")
|
||||
})
|
||||
startOrStopOrderLoop()
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单轮询 初始化主Fragment的Presenter init 调用
|
||||
*/
|
||||
fun startOrStopOrderLoop() {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
startOrStopOrderLoop(true)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭订单轮训 页面摧毁时
|
||||
*/
|
||||
fun release() {
|
||||
startOrStopOrderLoop(false)
|
||||
startOrStopQueryOrderRemaining(false)
|
||||
releaseListeners()
|
||||
RxUtils.disposeSubscribe(subscribe)
|
||||
}
|
||||
|
||||
private fun initListeners() {
|
||||
|
||||
// 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, mGoAutopilotStatusListener)
|
||||
IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener)
|
||||
|
||||
//2021.11.1 自动驾驶路线规划接口
|
||||
CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener)
|
||||
|
||||
startLoopAbnormalFactors(mContext!!)
|
||||
|
||||
//开启自驾后 异常信息返回
|
||||
OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener)
|
||||
CallerMsgBoxEventListenerManager.addListener(TAG, iMsgBoxEventListener)
|
||||
addDistanceListener(TAG, distanceListener)
|
||||
addTrajectoryListener(TAG, trajectoryListener)
|
||||
}
|
||||
|
||||
private fun releaseListeners() {
|
||||
MogoAiCloudSocketManager.getInstance(mContext)
|
||||
.unregisterLifecycleListener(10010)
|
||||
CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener)
|
||||
CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener)
|
||||
stopLoopAbnormalFactors()
|
||||
OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null)
|
||||
CallerMsgBoxEventListenerManager.removeListener(iMsgBoxEventListener)
|
||||
removeListener(TAG)
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单轮训
|
||||
* @param start true 开启订单轮训
|
||||
* false 关闭订单轮训
|
||||
*/
|
||||
private fun startOrStopOrderLoop(start: Boolean) {
|
||||
d(M_TAXI_P + TAG, "startOrStopOrderLoop() $start")
|
||||
if (start) {
|
||||
BizLoopManager.setLoopFunction(MINANDWAITSERVICE,LoopInfo(2, TaxiPassengerModel::queryInAndWaitOrders))
|
||||
} else {
|
||||
BizLoopManager.removeLoopFunction(MINANDWAITSERVICE)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单状态:进行中/待服务(轮询防止因crash导致应用重启、断网没收到推送等)
|
||||
*
|
||||
* 注:只有在本地缓存mCurrentOCHOrder为null时(已完成or已取消有明确结果)或id相同且status不同时,
|
||||
* 才更新最新进行中单到本地
|
||||
*/
|
||||
fun queryInAndWaitOrders() {
|
||||
TaxiPassengerServiceManager.queryOrdersInAndWaitService(
|
||||
mContext!!,
|
||||
object : OchCommonServiceCallback<TaxiPassengerOrdersInServiceQueryRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerOrdersInServiceQueryRespBean) {
|
||||
if (data.data == null) {
|
||||
return
|
||||
}
|
||||
|
||||
//1. 处理进行中订单
|
||||
mInServiceList = data.data.servicing
|
||||
if (data.data.servicing != null && data.data.servicing.isNotEmpty()) {
|
||||
// 1.1. 当存在进行中单时:对本地currentOrder进行更新
|
||||
if (currentOCHOrder == null) {
|
||||
//1.1.1. 当本地无currentOrder(已经完成or取消),则更新currentOrder,并通知ui更新
|
||||
updateNativeCurrentOrder(data.data.servicing[0])
|
||||
if (mOrderStatusCallbackMap.isNotEmpty()) {
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onCurrentOrderStatusChanged(currentOCHOrder)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//1.1.2. 当本地有currentOrder:
|
||||
//orderId不一致时:通过currentOrder.orderId查询订单状态,并通知ui更新
|
||||
//orderId一致且orderStatus不一致时:则更新currentOrder,并通知ui更新
|
||||
if (currentOCHOrder!!.orderNo != data.data.servicing[0].orderNo) {
|
||||
queryCurOrderStatus()
|
||||
// } else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) {
|
||||
} else { //todo 订单拦截放到各自实现去做
|
||||
updateNativeCurrentOrder(data.data.servicing[0])
|
||||
if (mOrderStatusCallbackMap.isNotEmpty()) {
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onCurrentOrderStatusChanged(currentOCHOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 1.2. 当无进行中订单时:如果本地也无则跳过;如果本地仍存在currentOrder,查询此单(完成or取消)并通知ui更
|
||||
if (currentOCHOrder != null) {
|
||||
queryCurOrderStatus()
|
||||
}
|
||||
recoverNaviInfo()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError() {}
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
e(M_TAXI_P + TAG, "queryInAndWaitOrders$code$msg")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder
|
||||
private fun queryCurOrderStatus() {
|
||||
if (currentOCHOrder == null) {
|
||||
return
|
||||
}
|
||||
val orderNo = currentOCHOrder!!.orderNo
|
||||
TaxiPassengerServiceManager.queryOrderById(
|
||||
mContext!!, orderNo,
|
||||
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerOrderQueryRespBean) {
|
||||
if (data.data != null && currentOCHOrder != null && currentOCHOrder!!.orderNo == data.data.orderNo) {
|
||||
if (data.data.orderStatus == TaxiPassengerOrderStatusEnum.Cancel.code || data.data.orderStatus == TaxiPassengerOrderStatusEnum.JourneyCompleted.code || data.data.orderStatus == TaxiPassengerOrderStatusEnum.None.code) {
|
||||
if (mOrderStatusCallbackMap.isNotEmpty()) {
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onCurrentOrderStatusChanged(data.data)
|
||||
}
|
||||
}
|
||||
clearCurrentOCHOrder()
|
||||
} else {
|
||||
updateNativeCurrentOrder(data.data)
|
||||
if (mOrderStatusCallbackMap.isNotEmpty()) {
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onCurrentOrderStatusChanged(currentOCHOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取当前订单状态
|
||||
val curOrderStatus: TaxiPassengerOrderStatusEnum
|
||||
get() {
|
||||
val order: TaxiPassengerOrderQueryRespBean.Result =
|
||||
currentOCHOrder
|
||||
?: return TaxiPassengerOrderStatusEnum.None
|
||||
return valueOf(order.orderStatus)
|
||||
}
|
||||
|
||||
//更新本地currentOrder信息,并保存订单到本地避免车机重启丢失数据
|
||||
private fun updateNativeCurrentOrder(data: TaxiPassengerOrderQueryRespBean.Result?) {
|
||||
if (data == null) {
|
||||
return
|
||||
}
|
||||
currentOCHOrder = data
|
||||
SharedPrefsMgr.getInstance(mContext!!).putString(
|
||||
TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER,
|
||||
GsonUtil.jsonFromObject(data)
|
||||
)
|
||||
}
|
||||
|
||||
//清除订单信息
|
||||
fun clearCurrentOCHOrder() {
|
||||
currentOCHOrder = null
|
||||
clearAutopilotControlParameters()
|
||||
SharedPrefsMgr.getInstance(mContext!!).remove(TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER)
|
||||
}
|
||||
|
||||
//检测当前订单
|
||||
fun checkCurrentOCHOrder(): Boolean {
|
||||
return currentOCHOrder != null && currentOCHOrder!!.startSiteGcjPoint != null && currentOCHOrder!!.endSiteGcjPoint != null
|
||||
}
|
||||
|
||||
|
||||
//监听网络变化,避免启动机器时无网导致无法更新订单信息
|
||||
private val distanceListener: IDistanceListener = object : IDistanceListener {
|
||||
override fun distanceCallback(distance: Float) {
|
||||
|
||||
}
|
||||
}
|
||||
private val trajectoryListener: ITrajectoryListener =
|
||||
object : ITrajectoryListener {
|
||||
override fun trajectoryCallback(
|
||||
routeArrivied: MutableList<MogoLocation>,
|
||||
routeArriving: MutableList<MogoLocation>,
|
||||
location: MogoLocation
|
||||
) {
|
||||
val routeArriviedTemp: MutableList<LatLng> = ArrayList()
|
||||
val routeArrivingTemp: MutableList<LatLng> = ArrayList()
|
||||
var temp: LatLng
|
||||
for (mogoLocation in routeArrivied) {
|
||||
temp = LatLng(mogoLocation.latitude, mogoLocation.longitude)
|
||||
routeArriviedTemp.add(temp)
|
||||
}
|
||||
for (mogoLocation in routeArriving) {
|
||||
temp = LatLng(mogoLocation.latitude, mogoLocation.longitude)
|
||||
routeArrivingTemp.add(temp)
|
||||
}
|
||||
mAutopilotPlanningCallback!!.routeResultByServer(
|
||||
routeArriviedTemp,
|
||||
routeArrivingTemp,
|
||||
location
|
||||
)
|
||||
setRouteLineMarker()
|
||||
}
|
||||
}
|
||||
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
|
||||
d(M_TAXI_P + TAG, "onIntentReceived = %s", intentStr)
|
||||
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
startOrStopOrderLoop(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val mGoAutopilotStatusListener: IMoGoAutopilotStatusListener =
|
||||
object : IMoGoAutopilotStatusListener {
|
||||
private var arriveAtEnd = false //乘客app专用字段
|
||||
override fun onAutopilotStatusResponse(state: Int) {
|
||||
if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
|
||||
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotRunning()
|
||||
if (currentOCHOrder != null
|
||||
&& curOrderStatus === TaxiPassengerOrderStatusEnum.UserArriveAtStart
|
||||
) {
|
||||
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(
|
||||
false,
|
||||
true,
|
||||
currentOCHOrder!!.startSiteAddr,
|
||||
currentOCHOrder!!.endSiteAddr,
|
||||
currentOCHOrder!!.orderNo
|
||||
)
|
||||
startServicePilotDone()
|
||||
}
|
||||
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
|
||||
if (FunctionBuildConfig.isDemoMode
|
||||
&& isPassenger(FunctionBuildConfig.appIdentityMode)
|
||||
) {
|
||||
// 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态
|
||||
arriveAtEnd = if (!arriveAtEnd) {
|
||||
return
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotEnable()
|
||||
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
|
||||
if (FunctionBuildConfig.isDemoMode
|
||||
&& isPassenger(FunctionBuildConfig.appIdentityMode)
|
||||
) {
|
||||
// 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态
|
||||
arriveAtEnd = if (!arriveAtEnd) {
|
||||
return
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
if (mADASStatusCallback != null) mADASStatusCallback!!.onAutopilotDisable()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) {
|
||||
if (FunctionBuildConfig.isDemoMode
|
||||
&& isPassenger(FunctionBuildConfig.appIdentityMode)
|
||||
) {
|
||||
arriveAtEnd = true
|
||||
}
|
||||
if (arrivalNotification == null || !checkCurrentOCHOrder() || curOrderStatus === TaxiPassengerOrderStatusEnum.ArriveAtEnd) {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
private val moGoAutopilotPlanningListener: IMoGoPlanningRottingListener =
|
||||
object : IMoGoPlanningRottingListener {
|
||||
override fun onAutopilotRotting(globalPathResp: GlobalPathResp?) {
|
||||
if (null != globalPathResp && globalPathResp.wayPointsList.size > 0) {
|
||||
calculateRouteLineSum(
|
||||
coordinateConverterWgsToGcjListCommon(mContext, globalPathResp.wayPointsList)
|
||||
)
|
||||
startToRouteAndWipe()
|
||||
}
|
||||
}
|
||||
}
|
||||
private val mAdasStartFailureListener: OchAdasStartFailureCallback = object : OchAdasStartFailureCallback {
|
||||
override fun onStartAutopilotFailure(startFailedCode: String, startFailedMessage: String) {
|
||||
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage)
|
||||
}
|
||||
}
|
||||
private val iMsgBoxEventListener: IMsgBoxEventListener = object : IMsgBoxEventListener {
|
||||
override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) {}
|
||||
override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) {}
|
||||
override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) {}
|
||||
override fun onUpdateTipEvent(isShow: Boolean) {}
|
||||
override fun onSummaryClickEvent() {
|
||||
if (currentOCHOrder == null) {
|
||||
ToastUtils.showLong("行程已结束")
|
||||
} else {
|
||||
transmissionIndexGet(OverlayLeftViewUtils.OVERVIEW)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun startToRouteAndWipe() {
|
||||
showRottingMapView()
|
||||
}
|
||||
|
||||
private fun showRottingMapView() {
|
||||
AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi()
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
mAutopilotPlanningCallback!!.showRottingMapView()
|
||||
}
|
||||
}
|
||||
|
||||
fun startNaviByAmap() {
|
||||
if (currentOCHOrder != null &&
|
||||
currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.OnTheWayToEnd.code
|
||||
) {
|
||||
AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi()
|
||||
val orderEndStationLat = currentOCHOrder!!.endSiteGcjPoint[1]
|
||||
val orderEndStationLng = currentOCHOrder!!.endSiteGcjPoint[0]
|
||||
val currentLocation = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
|
||||
val startNaviLatLng = NaviLatLng(currentLocation.latitude, currentLocation.longitude)
|
||||
val endNaviLatLng = NaviLatLng(orderEndStationLat, orderEndStationLng)
|
||||
AmapNaviToDestinationModel.getInstance(mContext)
|
||||
.initAMapNavi(startNaviLatLng, endNaviLatLng)
|
||||
AmapNaviToDestinationModel.getInstance(mContext).setVoiceIsMute(false)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置小地图路径的起终点marker
|
||||
*/
|
||||
fun setRouteLineMarker() {
|
||||
if (currentOCHOrder!!.startSiteGcjPoint == null || currentOCHOrder!!.startSiteGcjPoint.isEmpty() || currentOCHOrder!!.startSiteGcjPoint.size < 2 || currentOCHOrder!!.endSiteGcjPoint == null || currentOCHOrder!!.endSiteGcjPoint.isEmpty() || currentOCHOrder!!.endSiteGcjPoint.size < 2) {
|
||||
setMarker(null, null)
|
||||
return
|
||||
}
|
||||
val startStation = LatLng(
|
||||
currentOCHOrder!!.startSiteGcjPoint[1], currentOCHOrder!!.startSiteGcjPoint[0]
|
||||
)
|
||||
val endStation = LatLng(
|
||||
currentOCHOrder!!.endSiteGcjPoint[1], currentOCHOrder!!.endSiteGcjPoint[0]
|
||||
)
|
||||
setMarker(startStation, endStation)
|
||||
}
|
||||
|
||||
private fun setMarker(startStation: LatLng?, endStation: LatLng?) {
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation)
|
||||
}
|
||||
}
|
||||
|
||||
fun startOrStopQueryOrderRemaining(isStart: Boolean) {
|
||||
if (isStart) {
|
||||
BizLoopManager.setLoopFunction(MQUERYORDERREMAINING,LoopInfo(2, TaxiPassengerModel::queryOrderRemaining))
|
||||
} else {
|
||||
BizLoopManager.removeLoopFunction(MQUERYORDERREMAINING)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单剩余里程和时间
|
||||
*/
|
||||
fun queryOrderRemaining() {
|
||||
if (currentOCHOrder == null) return
|
||||
TaxiPassengerServiceManager.queryOrderRemaining(
|
||||
mContext!!,
|
||||
currentOCHOrder!!.orderNo,
|
||||
object : OchCommonServiceCallback<TaxiPassengerOrderQueryRemainingResp> {
|
||||
override fun onSuccess(data: TaxiPassengerOrderQueryRemainingResp) {
|
||||
if (data.data != null) {
|
||||
e(M_TAXI_P + TAG, "distance = " + data.data.distance + " ,duration = " + data.data.duration)
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onCurrentOrderDistToEndChanged(
|
||||
data.data.distance,
|
||||
data.data.duration
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
|
||||
fun queryOrderRouteList() {
|
||||
if (currentOCHOrder == null) return
|
||||
d(M_TAXI_P + TAG, "--route--- queryOrderRouteList")
|
||||
TaxiPassengerServiceManager.queryOrderRouteList(
|
||||
mContext!!,
|
||||
currentOCHOrder!!.orderNo,
|
||||
object : OchCommonServiceCallback<TaxiPassengerQueryOrderRouteResp> {
|
||||
override fun onSuccess(data: TaxiPassengerQueryOrderRouteResp) {
|
||||
d(M_TAXI_P + TAG, "--route---" + GsonUtil.jsonFromObject(data))
|
||||
if (data.data != null && data.data != null && data.data.size > 0) {
|
||||
if (mAutopilotPlanningCallback != null) {
|
||||
calculateRouteLineSum(data.data)
|
||||
}
|
||||
} else {
|
||||
RxUtils.disposeSubscribe(subscribe)
|
||||
subscribe = RxUtils.createSubscribe {
|
||||
queryOrderRouteList()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
RxUtils.disposeSubscribe(subscribe)
|
||||
subscribe = RxUtils.createSubscribe {
|
||||
queryOrderRouteList()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单结束或者取消的时候, 刷新导航标识位以及缓存的数据
|
||||
*/
|
||||
fun recoverNaviInfo() {
|
||||
SharedPrefsMgr.getInstance(mContext!!).remove(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS)
|
||||
}
|
||||
|
||||
fun calculateRouteLineSum(points: List<LatLng>?) {
|
||||
val sumLength = calculateRouteSumLength(points)
|
||||
SharedPrefsMgr.getInstance(mContext!!)
|
||||
.putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, sumLength.toInt())
|
||||
}
|
||||
|
||||
fun checkPhoneAndUpdateStatus(
|
||||
phoneTail: String?,
|
||||
commonCallback: ITaxiPassengerCommonCallback?
|
||||
) {
|
||||
if (currentOCHOrder == null) return
|
||||
TaxiPassengerServiceManager.checkPhoneAndUpdateOrderStatus(
|
||||
mContext!!, currentOCHOrder!!.orderNo,
|
||||
phoneTail, object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
|
||||
if (data.code == 0 && currentOCHOrder != null) {
|
||||
//乘客验证成功,更新订单状态为 "乘客已上车", 立马弹出乘客开始行程页面,不再等待轮询
|
||||
currentOCHOrder!!.orderStatus =
|
||||
TaxiPassengerOrderStatusEnum.UserArriveAtStart.code
|
||||
if (mOrderStatusCallbackMap.isNotEmpty()) {
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onCurrentOrderStatusChanged(currentOCHOrder)
|
||||
}
|
||||
}
|
||||
}
|
||||
commonCallback?.onCommonCallback()
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!")
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!")
|
||||
e(
|
||||
M_TAXI_P + TAG,
|
||||
"提交用户输入的手机后4位、并进行状态扭转 后台结果错误$code$msg"
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun arrivedAndScore(
|
||||
taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean,
|
||||
commonCallback: ITaxiPassengerCommonValueCallback<Boolean?>?
|
||||
) {
|
||||
if (taxiPassengerScoreUpdateOrderReqBean.orderNo == null) return
|
||||
TaxiPassengerServiceManager.arrivedAndScore(
|
||||
mContext!!, taxiPassengerScoreUpdateOrderReqBean,
|
||||
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
|
||||
commonCallback?.onCommonCallback(true)
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
ToastUtils.showLong("网络错误请稍后再试")
|
||||
e(M_TAXI_P + TAG, "对订单进行打分 1-5分 网络错误")
|
||||
commonCallback?.onCommonCallback(false)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
e(M_TAXI_P + TAG, "对订单进行打分 1-5分 后台结果错误$code$msg")
|
||||
commonCallback?.onCommonCallback(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun loopQueryPilotStatus() {
|
||||
if (currentOCHOrder == null) return
|
||||
TaxiPassengerServiceManager.queryPilotStatus(
|
||||
mContext!!, currentOCHOrder!!.orderNo,
|
||||
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
|
||||
if (data.code == 0 && data.data == true) {
|
||||
updateAutopilotStatus(true)
|
||||
startOrStopReadyToAutopilotLoop(false)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
updateAutopilotStatus(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun updateAutopilotStatus(isBoarded: Boolean) {
|
||||
if (mOrderStatusCallbackMap.isNotEmpty()) {
|
||||
for (callback in mOrderStatusCallbackMap.values) {
|
||||
callback.onDriverHasCheckedPilotCondition(isBoarded)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun startDriverReadyToAutopilotLoop() {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
startOrStopReadyToAutopilotLoop(true)
|
||||
}
|
||||
}
|
||||
|
||||
fun startOrStopReadyToAutopilotLoop(isStart: Boolean) {
|
||||
if (isStart) {
|
||||
BizLoopManager.setLoopFunction(STARTREADYTOAUTOPILOT, LoopInfo(1, TaxiPassengerModel::loopQueryPilotStatus))
|
||||
CallerLogger.i(M_TAXI_P + TAG, "startReadyToAutopilot()")
|
||||
} else {
|
||||
BizLoopManager.removeLoopFunction(STARTREADYTOAUTOPILOT)
|
||||
CallerLogger.i(M_TAXI_P + TAG, "stopReadyToAutopilot()")
|
||||
}
|
||||
}
|
||||
|
||||
fun startServicePilotDone() {
|
||||
if (currentOCHOrder == null) return
|
||||
val result = TaxiPassengerStartReqBean.Result()
|
||||
val currentLocation = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
|
||||
result.lat = currentLocation.latitude
|
||||
result.lon = currentLocation.longitude
|
||||
TaxiPassengerServiceManager.startServicePilotDone(
|
||||
mContext!!,
|
||||
currentOCHOrder!!.orderNo, result,
|
||||
object : OchCommonServiceCallback<TaxiPassengerBaseRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerBaseRespBean) {}
|
||||
override fun onFail(code: Int, msg: String) {
|
||||
// ToastUtils.showShort(msg);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fun startAutopilot() {
|
||||
if (!checkCurrentOCHOrder()) {
|
||||
e(M_TAXI_P + TAG, "no order or order is empty.")
|
||||
ToastUtils.showShort("当前订单不存在或异常!")
|
||||
return
|
||||
}
|
||||
if (currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.code) {
|
||||
startServicePilotDone()
|
||||
}
|
||||
if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().autopilotAbilityStatus) {
|
||||
ToastUtils.showLong(
|
||||
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason +
|
||||
", 请稍候重试"
|
||||
)
|
||||
TaxiPassengerAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent(
|
||||
currentOCHOrder!!.startSiteAddr,
|
||||
currentOCHOrder!!.endSiteAddr,
|
||||
currentOCHOrder!!.orderNo,
|
||||
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason
|
||||
)
|
||||
return
|
||||
}
|
||||
val parameters = initAutopilotControlParameters()
|
||||
if (parameters == null) {
|
||||
d(M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
|
||||
return
|
||||
}
|
||||
startAutoPilot(parameters)
|
||||
d(
|
||||
M_TAXI_P + TAG,
|
||||
"start autopilot with parameter: %s",
|
||||
GsonUtil.jsonFromObject(parameters)
|
||||
+ " ,startSiteName=" + currentOCHOrder!!.startSiteAddr
|
||||
+ " ,endSiteName=" + currentOCHOrder!!.endSiteAddr
|
||||
)
|
||||
TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(
|
||||
false,
|
||||
false,
|
||||
currentOCHOrder!!.startSiteAddr,
|
||||
currentOCHOrder!!.endSiteAddr,
|
||||
currentOCHOrder!!.orderNo
|
||||
)
|
||||
}
|
||||
|
||||
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
|
||||
if (!checkCurrentOCHOrder()) {
|
||||
e(M_TAXI_P + TAG, "no order or order is empty.")
|
||||
ToastUtils.showShort("当前订单不存在或异常!")
|
||||
return null
|
||||
}
|
||||
val parameters = AutopilotControlParameters()
|
||||
val startWgsLon = currentOCHOrder!!.startSitePoint[0]
|
||||
val startWgsLat = currentOCHOrder!!.startSitePoint[1]
|
||||
val endWgsLon = currentOCHOrder!!.endSitePoint[0]
|
||||
val endWgsLat = currentOCHOrder!!.endSitePoint[1]
|
||||
parameters.vehicleType = currentOCHOrder!!.businessType
|
||||
parameters.startName =
|
||||
PinYinUtil.getPinYinHeadChar(currentOCHOrder!!.startSiteAddr) // 起点名称拼音首字母大写:科学城B区2号门(KXCBQ2HM)
|
||||
parameters.endName =
|
||||
PinYinUtil.getPinYinHeadChar(currentOCHOrder!!.endSiteAddr) // 终点名称拼音首字母大写:科学城C区三号门(KXCCQSHM)
|
||||
parameters.startLatLon = AutoPilotLonLat(startWgsLat, startWgsLon)
|
||||
parameters.endLatLon = AutoPilotLonLat(endWgsLat, endWgsLon)
|
||||
if (parameters.autoPilotLine == null) {
|
||||
parameters.autoPilotLine = AutoPilotLine(
|
||||
currentOCHOrder!!.lineId,
|
||||
currentOCHOrder!!.csvFileUrl, currentOCHOrder!!.csvFileMd5,
|
||||
currentOCHOrder!!.txtFileUrl, currentOCHOrder!!.txtFileMd5,
|
||||
currentOCHOrder!!.contrailSaveTime, currentOCHOrder!!.carModel,
|
||||
currentOCHOrder!!.csvFileUrlDPQP, currentOCHOrder!!.csvFileMd5DPQP,
|
||||
currentOCHOrder!!.txtFileUrlDPQP, currentOCHOrder!!.txtFileMd5DPQP,
|
||||
currentOCHOrder!!.contrailSaveTimeDPQP
|
||||
)
|
||||
}
|
||||
return parameters
|
||||
}
|
||||
|
||||
/**
|
||||
* 将业务订单信息保存,鹰眼可取用
|
||||
*/
|
||||
fun updateAutopilotControlParameters() {
|
||||
val parameters = initAutopilotControlParameters()
|
||||
if (null == parameters) {
|
||||
e(M_TAXI_P + TAG, "AutopilotControlParameters is empty.")
|
||||
return
|
||||
}
|
||||
d(M_TAXI_P + TAG, "AutopilotControlParameters is update.")
|
||||
updateAutopilotControlParameters(parameters)
|
||||
}
|
||||
|
||||
fun clearAutopilotControlParameters() {
|
||||
d(M_TAXI_P + TAG, "AutopilotControlParameters is clear.")
|
||||
updateAutopilotControlParameters(null)
|
||||
}
|
||||
|
||||
fun setStation() {
|
||||
if (currentOCHOrder != null) {
|
||||
val startStation = MogoLocation()
|
||||
startStation.longitude = currentOCHOrder!!.startSiteGcjPoint[0]
|
||||
startStation.latitude = currentOCHOrder!!.startSiteGcjPoint[1]
|
||||
val endStation = MogoLocation()
|
||||
endStation.longitude = currentOCHOrder!!.endSiteGcjPoint[0]
|
||||
endStation.latitude = currentOCHOrder!!.endSiteGcjPoint[1]
|
||||
setStationPoint(startStation, endStation, currentOCHOrder!!.lineId)
|
||||
}
|
||||
}
|
||||
|
||||
fun cleanStation() {
|
||||
setStationPoint(null, null, -1L)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
package com.mogo.och.taxi.passenger.model;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P;
|
||||
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Created on 2021/9/10
|
||||
*
|
||||
* 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等)
|
||||
*/
|
||||
public class TaxiPassengerModelLoopManager {
|
||||
|
||||
private static final String TAG = TaxiPassengerModelLoopManager.class.getSimpleName();
|
||||
|
||||
private static final class SingletonHolder {
|
||||
private static final TaxiPassengerModelLoopManager INSTANCE = new TaxiPassengerModelLoopManager();
|
||||
}
|
||||
|
||||
public static TaxiPassengerModelLoopManager getInstance() {
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询
|
||||
private Disposable mQueryOrderRemainingDisposable; //心跳轮询
|
||||
private CompositeDisposable mRouteWipeDisposable; //轨迹擦除
|
||||
private Disposable mReadyToAutopilotDisposable; //轮询是否可开启自动驾驶
|
||||
|
||||
public void startReadyToAutopilot() {
|
||||
if (mReadyToAutopilotDisposable != null && !mReadyToAutopilotDisposable.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startReadyToAutopilot()");
|
||||
mReadyToAutopilotDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
|
||||
TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS)
|
||||
.map((aLong -> aLong + 1))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(aLong -> TaxiPassengerModel.getInstance().loopQueryPilotStatus());
|
||||
}
|
||||
|
||||
public void stopReadyToAutopilot() {
|
||||
if (mReadyToAutopilotDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopReadyToAutopilot()");
|
||||
mReadyToAutopilotDisposable.dispose();
|
||||
mReadyToAutopilotDisposable = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void stopRouteAndWipe() {
|
||||
if (mRouteWipeDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopRouteAndWipe()");
|
||||
mRouteWipeDisposable.dispose();
|
||||
mRouteWipeDisposable = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void startInAndWaitOrdersLoop() {
|
||||
if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startInAndWaitOrdersLoop()");
|
||||
mInAndWaitServiceDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
|
||||
TaxiPassengerConst.LOOP_PERIOD_2S, TimeUnit.MILLISECONDS)
|
||||
.map((aLong -> aLong + 1))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(aLong -> TaxiPassengerModel.getInstance().queryInAndWaitOrders());
|
||||
}
|
||||
|
||||
public void stopInAndWaitOrdersLoop() {
|
||||
if (mInAndWaitServiceDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopInAndWaitOrdersLoop()");
|
||||
mInAndWaitServiceDisposable.dispose();
|
||||
mInAndWaitServiceDisposable = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 轮训查下 查询订单剩余里程和时间
|
||||
*/
|
||||
public void startQueryOrderRemainingLoop() {
|
||||
if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingLoop()");
|
||||
mQueryOrderRemainingDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY,
|
||||
TaxiPassengerConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS)
|
||||
.map((aLong -> aLong + 1))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(aLong -> TaxiPassengerModel.getInstance().queryOrderRemaining());
|
||||
}
|
||||
|
||||
public void stopQueryOrderRemainingLoop() {
|
||||
if (mQueryOrderRemainingDisposable != null) {
|
||||
CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopQueryOrderRemainingLoop()");
|
||||
mQueryOrderRemainingDisposable.dispose();
|
||||
mQueryOrderRemainingDisposable = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,11 +18,9 @@ import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback;
|
||||
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;
|
||||
@@ -32,7 +30,7 @@ import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen;
|
||||
* @date: 2022/3/4
|
||||
*/
|
||||
public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragment> implements
|
||||
IOCHTaxiPassengerADASStatusCallback, IOCHTaxiPassengerControllerStatusCallback,
|
||||
IOCHTaxiPassengerADASStatusCallback,
|
||||
IOCHTaxiPassengerOrderStatusCallback {
|
||||
|
||||
private static final String TAG = BaseTaxiPassengerPresenter.class.getSimpleName();
|
||||
@@ -41,7 +39,7 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
|
||||
public BaseTaxiPassengerPresenter(TaxiPassengerBaseFragment view) {
|
||||
super(view);
|
||||
TaxiPassengerModel.getInstance().init(AbsMogoApplication.getApp());
|
||||
TaxiPassengerModel.INSTANCE.init(AbsMogoApplication.getApp());
|
||||
OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp());
|
||||
initListeners();
|
||||
}
|
||||
@@ -57,20 +55,18 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
super.onDestroy( owner );
|
||||
|
||||
releaseListeners();
|
||||
TaxiPassengerModel.getInstance().release();
|
||||
TaxiPassengerModel.INSTANCE.release();
|
||||
OCHAdasAbilityManager.getInstance().release();
|
||||
}
|
||||
|
||||
private void initListeners() {
|
||||
TaxiPassengerModel.getInstance().setADASStatusCallback(this);
|
||||
TaxiPassengerModel.getInstance().setOrderStatusCallback("BaseTaxiPassengerPresenter",this);
|
||||
TaxiPassengerModel.getInstance().setControllerStatusCallback("BaseTaxiPassengerPresenter",this);
|
||||
TaxiPassengerModel.INSTANCE.setADASStatusCallback(this);
|
||||
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("BaseTaxiPassengerPresenter",this);
|
||||
}
|
||||
|
||||
private void releaseListeners() {
|
||||
TaxiPassengerModel.getInstance().setADASStatusCallback(null);
|
||||
TaxiPassengerModel.getInstance().setOrderStatusCallback("BaseTaxiPassengerPresenter",null);
|
||||
TaxiPassengerModel.getInstance().setControllerStatusCallback("BaseTaxiPassengerPresenter",null);
|
||||
TaxiPassengerModel.INSTANCE.setADASStatusCallback(null);
|
||||
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("BaseTaxiPassengerPresenter",null);
|
||||
}
|
||||
|
||||
private void runOnUIThread( Runnable executor ) {
|
||||
@@ -86,11 +82,11 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
|
||||
// 获取当前订单状态
|
||||
public TaxiPassengerOrderStatusEnum getCurOrderStatus() {
|
||||
return TaxiPassengerModel.getInstance().getCurOrderStatus();
|
||||
return TaxiPassengerModel.INSTANCE.getCurOrderStatus();
|
||||
}
|
||||
|
||||
public void startOrStopOrderLoop(){
|
||||
TaxiPassengerModel.getInstance().startOrStopOrderLoop();
|
||||
TaxiPassengerModel.INSTANCE.startOrStopOrderLoop();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -116,17 +112,6 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVRModeChanged(boolean isVRMode) {
|
||||
runOnUIThread(() -> mView.switchVRFlatMode(isVRMode));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCarLocationChanged(MogoLocation location) {
|
||||
// 速度不用展示
|
||||
// LeftMenuOpen.INSTANCE.callCallBack(-1,-1,location.getSpeed());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) {
|
||||
// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order));
|
||||
@@ -144,11 +129,6 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
LeftMenuOpen.INSTANCE.callCallBack(meters,timeInSecond,-1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCurrentRoadName(String currentRoadName) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDriverHasCheckedPilotCondition(boolean isBoarded) {
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"isBoarded = "+isBoarded);
|
||||
@@ -169,10 +149,10 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
"", "", "", "");
|
||||
mView.showOrHideArrivedEndLayout(false,"","");
|
||||
});
|
||||
TaxiPassengerModel.getInstance().recoverNaviInfo();
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotLoop(false);
|
||||
TaxiPassengerModel.getInstance().cleanStation();
|
||||
TaxiPassengerModel.INSTANCE.recoverNaviInfo();
|
||||
TaxiPassengerModel.INSTANCE.startOrStopReadyToAutopilotLoop(false);
|
||||
clearV2XMarkers();
|
||||
TaxiPassengerModel.INSTANCE.cleanStation();
|
||||
return;
|
||||
}
|
||||
// 20 司机到达上车点
|
||||
@@ -193,16 +173,16 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
mView.showOrHideStartAutopilotView(true,false);
|
||||
});
|
||||
//开启轮询司机是否已准备好开启自动驾驶的环境
|
||||
TaxiPassengerModel.getInstance().startDriverReadyToAutopilotLoop();
|
||||
TaxiPassengerModel.getInstance().setStation();
|
||||
TaxiPassengerModel.INSTANCE.startDriverReadyToAutopilotLoop();
|
||||
TaxiPassengerModel.INSTANCE.setStation();
|
||||
}
|
||||
if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){
|
||||
runOnUIThread(() ->{
|
||||
mView.showOrHideStartAutopilotView(false,false);
|
||||
mView.showOrHideServingOrderFragment(true,true);
|
||||
});
|
||||
TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotLoop(false);
|
||||
TaxiPassengerModel.getInstance().setStation();
|
||||
TaxiPassengerModel.INSTANCE.startOrStopReadyToAutopilotLoop(false);
|
||||
TaxiPassengerModel.INSTANCE.setStation();
|
||||
}
|
||||
// 30 用户到达上车点 并通过了手机号后四位验证
|
||||
// 40 服务中
|
||||
@@ -221,29 +201,26 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
|
||||
// 50 到达终点 乘客可以评价
|
||||
if (TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus){
|
||||
TaxiPassengerModel.getInstance().recoverNaviInfo();
|
||||
TaxiPassengerModel.getInstance().startOrStopRouteAndWipe(false);
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
TaxiPassengerModel.INSTANCE.recoverNaviInfo();
|
||||
mView.showOrHideOverMapViewFragment(false);
|
||||
runOnUIThread(() -> {
|
||||
mView.showOrHideServingOrderFragment(false,true);
|
||||
mView.showOrHideArrivedEndLayout(true, order.endSiteAddr,order.orderNo);
|
||||
CallerOrderListenerManager.INSTANCE.invokeOrderStatus(false);
|
||||
});
|
||||
TaxiPassengerModel.getInstance().cleanStation();
|
||||
TaxiPassengerModel.INSTANCE.cleanStation();
|
||||
return;
|
||||
}
|
||||
// 60 服务完成 页面
|
||||
if (TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch();
|
||||
mCurrentPassengerOrder = null;
|
||||
TaxiPassengerModel.getInstance().cleanStation();
|
||||
TaxiPassengerModel.INSTANCE.cleanStation();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void checkAndUpdateStatus(String phone){
|
||||
TaxiPassengerModel.getInstance().checkPhoneAndUpdateStatus(phone, new ITaxiPassengerCommonCallback() {
|
||||
TaxiPassengerModel.INSTANCE.checkPhoneAndUpdateStatus(phone, new ITaxiPassengerCommonCallback() {
|
||||
@Override
|
||||
public void onCommonCallback() {
|
||||
mView.showOrHidePressengerCheckPager(false,"","","","","");
|
||||
@@ -255,14 +232,14 @@ public class BaseTaxiPassengerPresenter extends Presenter<TaxiPassengerBaseFragm
|
||||
* 封装请求
|
||||
*/
|
||||
public void arrivedAndScore(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean){
|
||||
TaxiPassengerModel.getInstance().arrivedAndScore(taxiPassengerScoreUpdateOrderReqBean,aBoolean -> mView.showArrivedEndLayout2Thank(aBoolean));
|
||||
TaxiPassengerModel.INSTANCE.arrivedAndScore(taxiPassengerScoreUpdateOrderReqBean,aBoolean -> mView.showArrivedEndLayout2Thank(aBoolean));
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启自动驾驶
|
||||
*/
|
||||
public void startAutopilot(){
|
||||
TaxiPassengerModel.getInstance().startAutopilot();
|
||||
TaxiPassengerModel.INSTANCE.startAutopilot();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,25 +18,19 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
|
||||
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback;
|
||||
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.TaxiPassengerServingOrderFragment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
|
||||
/**
|
||||
* @author: wangmingjun
|
||||
* @date: 2022/3/14
|
||||
*/
|
||||
public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerServingOrderFragment>
|
||||
implements IOCHTaxiPassengerAutopilotPlanningCallback, IOCHTaxiPassengerOrderStatusCallback
|
||||
, IOCHTaxiPassengerControllerStatusCallback, ITaxiPassengerVeloctityCallback {
|
||||
implements IOCHTaxiPassengerAutopilotPlanningCallback, IOCHTaxiPassengerOrderStatusCallback{
|
||||
|
||||
private static final String TAG = TaxiPassengerServingOrderPresenter.class.getSimpleName();
|
||||
|
||||
@@ -54,18 +48,13 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
|
||||
|
||||
private void initListener() {
|
||||
// 设置起点和终点marker和实时车辆位置
|
||||
TaxiPassengerModel.getInstance().setMoGoAutopilotPlanningListener(this);
|
||||
TaxiPassengerModel.getInstance().setOrderStatusCallback("TaxiPassengerServingOrderPresenter",this);
|
||||
TaxiPassengerModel.getInstance().setControllerStatusCallback("TaxiPassengerServingOrderPresenter",this);
|
||||
// 获取道路限速
|
||||
TaxiPassengerModel.getInstance().setVeloctityCallback(this);
|
||||
TaxiPassengerModel.INSTANCE.setMoGoAutopilotPlanningListener(this);
|
||||
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("TaxiPassengerServingOrderPresenter",this);
|
||||
}
|
||||
|
||||
public void releaseListener(){
|
||||
TaxiPassengerModel.getInstance().setMoGoAutopilotPlanningListener(null);
|
||||
TaxiPassengerModel.getInstance().setOrderStatusCallback("TaxiPassengerServingOrderPresenter",null);
|
||||
TaxiPassengerModel.getInstance().setControllerStatusCallback("TaxiPassengerServingOrderPresenter",null);
|
||||
TaxiPassengerModel.getInstance().setVeloctityCallback(null);
|
||||
TaxiPassengerModel.INSTANCE.setMoGoAutopilotPlanningListener(null);
|
||||
TaxiPassengerModel.INSTANCE.setOrderStatusCallback("TaxiPassengerServingOrderPresenter",null);
|
||||
|
||||
}
|
||||
|
||||
@@ -92,11 +81,11 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
|
||||
|
||||
if (mCurrentPassengerOrder == null || mCurrentPassengerOrder.orderStatus != order.orderStatus){
|
||||
if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){
|
||||
TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(true);
|
||||
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(true);
|
||||
if (mCurrentPassengerOrder == null){
|
||||
TaxiPassengerModel.getInstance().queryOrderRouteList();
|
||||
TaxiPassengerModel.INSTANCE.queryOrderRouteList();
|
||||
}
|
||||
TaxiPassengerModel.getInstance().updateAutopilotControlParameters();
|
||||
TaxiPassengerModel.INSTANCE.updateAutopilotControlParameters();
|
||||
CallerFuncBizManager.getBizProvider().queryV2XEvents();//全览模式的V2X事件轮询开始
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "OnTheWayToEnd");
|
||||
}
|
||||
@@ -104,8 +93,8 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
|
||||
if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus
|
||||
|| TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus
|
||||
|| TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){
|
||||
TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(false);
|
||||
TaxiPassengerModel.getInstance().clearAutopilotControlParameters();
|
||||
TaxiPassengerModel.INSTANCE.startOrStopQueryOrderRemaining(false);
|
||||
TaxiPassengerModel.INSTANCE.clearAutopilotControlParameters();
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "Cancel or ArriveAtEnd or JourneyCompleted");
|
||||
}
|
||||
|
||||
@@ -120,43 +109,11 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
|
||||
runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters, timeInSecond));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCurrentRoadName(String currentRoadName) {
|
||||
runOnUIThread(() -> mView.onCurrentRoadName(currentRoadName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDriverHasCheckedPilotCondition(boolean isBoarded) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVRModeChanged(boolean isVRMode) {
|
||||
|
||||
}
|
||||
|
||||
private long startTime = 0;
|
||||
private static final long TIMEINTERVAL = 4000;
|
||||
|
||||
@Override
|
||||
public void onCarLocationChanged(MogoLocation location) {
|
||||
if (location != null){
|
||||
runOnUIThread(() -> mView.onCarLocationChanged(location));
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
if(currentTimeMillis-startTime<TIMEINTERVAL){
|
||||
return;
|
||||
}
|
||||
CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"onCarLocationChanged 获取当前路的信息");
|
||||
startTime = currentTimeMillis;
|
||||
TaxiPassengerGeocodeSearchModel.getInstance(getContext()).searchLocationInfo(location.getLatitude(),location.getLongitude());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLimitingVelocityChange(int limitingVelocity) {
|
||||
mView.onLimitingVelocityChange(limitingVelocity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy(@NonNull LifecycleOwner owner) {
|
||||
super.onDestroy(owner);
|
||||
|
||||
@@ -57,7 +57,7 @@ class OverviewFragment : BaseFragment() {
|
||||
if(!finalVisable2User){
|
||||
CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"正在展示")
|
||||
finalVisable2User = true
|
||||
statusChange(TaxiPassengerModel.getInstance().curOrderStatus)
|
||||
statusChange(TaxiPassengerModel.curOrderStatus)
|
||||
}
|
||||
|
||||
}else{//没有展示
|
||||
@@ -117,7 +117,7 @@ class OverviewFragment : BaseFragment() {
|
||||
overmapview?.onCreateView(savedInstanceState)
|
||||
|
||||
CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"onCreateView")
|
||||
statusChange(TaxiPassengerModel.getInstance().curOrderStatus)
|
||||
statusChange(TaxiPassengerModel.curOrderStatus)
|
||||
}
|
||||
|
||||
companion object{
|
||||
|
||||
@@ -58,8 +58,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
public static final String TAG = "TaxiPassengerBaseFragment";
|
||||
|
||||
private MapBizView mapBizView;
|
||||
private ImageView mAutopilotImage;
|
||||
private ImageView mMapswitchBtn;
|
||||
private RomaPassengerView romaPView;
|
||||
|
||||
private WeakReference<TaxiPassengerArrivedView> mArrivedEndView;
|
||||
@@ -68,12 +66,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null;
|
||||
|
||||
protected OverviewFragment overviewFragment = null;
|
||||
//消息盒子
|
||||
private PassengerMsgBoxButtonView viewPassengerMsgBoxButton;
|
||||
private PassengerMsgBoxBubbleView viewPassengerMsgBoxBubble;
|
||||
private PassengerMsgBoxListView viewPassengerMsgBoxList;
|
||||
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -95,8 +87,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
@Override
|
||||
protected void initViews() {
|
||||
mapBizView = findViewById(R.id.mapBizView);
|
||||
mAutopilotImage = findViewById(R.id.module_och_autopilot_iv);
|
||||
mMapswitchBtn = findViewById(R.id.module_och_taxi_swich_map_iv);
|
||||
romaPView = findViewById(R.id.romaPView);
|
||||
if(DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()){
|
||||
romaPView.setVisibility(View.VISIBLE);
|
||||
@@ -104,7 +94,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
romaPView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
updateSwitchMapIcon();
|
||||
initListener();
|
||||
|
||||
onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState());
|
||||
@@ -112,22 +101,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
switchVRFlatMode(MogoStatusManager.getInstance().isVrMode());
|
||||
//预加载视频进程
|
||||
EmptyService.Companion.startService(getContext());
|
||||
|
||||
//消息盒子
|
||||
viewPassengerMsgBoxButton = findViewById(R.id.viewPassengerMsgBoxButton);
|
||||
viewPassengerMsgBoxBubble = findViewById(R.id.viewPassengerMsgBoxBubble);
|
||||
viewPassengerMsgBoxList = findViewById(R.id.viewPassengerMsgBoxList);
|
||||
viewPassengerMsgBoxButton.setClickListener(show -> {
|
||||
if (show) {
|
||||
viewPassengerMsgBoxList.setVisibility(View.VISIBLE);
|
||||
viewPassengerMsgBoxBubble.setVisibility(View.GONE);
|
||||
viewPassengerMsgBoxBubble.isShowData(false);
|
||||
} else {
|
||||
viewPassengerMsgBoxList.setVisibility(View.GONE);
|
||||
viewPassengerMsgBoxBubble.setVisibility(View.VISIBLE);
|
||||
viewPassengerMsgBoxBubble.isShowData(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -136,45 +109,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
mapBizView.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
private void updateSwitchMapIcon() {
|
||||
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
|
||||
if (controller != null) {
|
||||
if (controller.getCurrentMapVisualAngle().isLongSight()) {
|
||||
mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_long);
|
||||
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
|
||||
mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium);
|
||||
} else {
|
||||
mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initListener() {
|
||||
mMapswitchBtn.setOnClickListener(v -> {
|
||||
IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController();
|
||||
if (controller != null) {
|
||||
//切换地图的远近视图
|
||||
if (controller.getCurrentMapVisualAngle().isLongSight()) {
|
||||
Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true);
|
||||
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
|
||||
mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium);
|
||||
} else if (controller.getCurrentMapVisualAngle().isMediumSight()) {
|
||||
Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false);
|
||||
controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
|
||||
mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_long);
|
||||
} else {
|
||||
controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
|
||||
mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium);
|
||||
}
|
||||
}
|
||||
//OverlayLeftViewUtils.INSTANCE.dismissOverlayView();
|
||||
});
|
||||
findViewById(R.id.iv_temp).setOnClickListener(view -> {
|
||||
OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity(), 0, true, -1, true);
|
||||
//showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728");
|
||||
//showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480");
|
||||
//OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext());
|
||||
});
|
||||
}
|
||||
|
||||
private void initArrivedView() {
|
||||
@@ -191,9 +126,6 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mapBizView.onResume();
|
||||
// mPresenter.startOrStopOrderLoop();
|
||||
// showOrHideServingOrderFragment(true,false);
|
||||
// showOrHideStartAutopilotView(true,true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,30 +157,10 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
|
||||
// 2. 主动开启自动驾驶中,为2则停止loading,并isStarting = false
|
||||
onAutopilotStatusSuccessDone();
|
||||
}
|
||||
// 3. 其他过程直接更新
|
||||
if (mPrevAPStatus != status) {
|
||||
autopilotStatusAnimchanged(status);
|
||||
}
|
||||
mPrevAPStatus = status;
|
||||
});
|
||||
}
|
||||
|
||||
public void autopilotStatusAnimchanged(int status) {
|
||||
// mAutopilotTv.setText(isInAutopilot?"自动驾驶":"开启自动驾驶");
|
||||
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) {
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_p_auto_nor);
|
||||
} else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) {
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_p_un_auto_nor);
|
||||
} else {
|
||||
mAutopilotImage.setImageResource(R.drawable.taxi_p_un_auto_nor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void startAutopilotDone(boolean success) {
|
||||
mHandler.postDelayed(() -> onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState()), 1000L);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected BaseTaxiPassengerPresenter createPresenter() {
|
||||
|
||||
@@ -61,8 +61,6 @@ class TaxiPassengerServingOrderFragment :
|
||||
private var mProgressSeekBar: AppCompatSeekBar? = null
|
||||
private var mProgessDes: TextView? = null
|
||||
private var mSpeedLayoutBg: OCHRadiusImageView? = null
|
||||
@Volatile
|
||||
private var mLimitingVelocity = 0 // 返回的道路限速值
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.taxi_p_activity_serving_order_view
|
||||
}
|
||||
@@ -110,7 +108,7 @@ class TaxiPassengerServingOrderFragment :
|
||||
private fun initAmapNaviView(savedInstanceState: Bundle?) {
|
||||
mAmapNaviVIew = findViewById(R.id.taxi_p_order_amap_navi_view)
|
||||
mAmapNaviVIew?.onCreate(savedInstanceState)
|
||||
TaxiPassengerModel.getInstance().startNaviByAmap()
|
||||
TaxiPassengerModel.startNaviByAmap()
|
||||
}
|
||||
|
||||
private fun initRouteNaviView(savedInstanceState: Bundle?) {
|
||||
@@ -146,25 +144,18 @@ class TaxiPassengerServingOrderFragment :
|
||||
mProgressSeekBar?.jumpDrawablesToCurrentState()
|
||||
}
|
||||
|
||||
private fun updateDriveRoadName(currentRoadName: String) {
|
||||
mProgessDes?.text = currentRoadName
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
mMapRottingView?.onResume()
|
||||
mAmapNaviVIew?.onResume()
|
||||
TaxiPassengerModel.getInstance().initGeocodeSearch()
|
||||
}
|
||||
|
||||
override fun onHiddenChanged(hidden: Boolean) {
|
||||
super.onHiddenChanged(hidden)
|
||||
if (hidden) { //fragment 隐藏, 导航取消c
|
||||
clearPolyline()
|
||||
TaxiPassengerModel.getInstance().destoryGeocodeSearch()
|
||||
} else { //fragment 显示, 导航开始
|
||||
e(SceneConstant.M_TAXI_P + "TaxiPassengerNaviTo", "initGeocodeSearch")
|
||||
TaxiPassengerModel.getInstance().initGeocodeSearch()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +170,6 @@ class TaxiPassengerServingOrderFragment :
|
||||
mMapRottingView?.onDestroy()
|
||||
mAmapNaviVIew?.onDestroy()
|
||||
AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi()
|
||||
TaxiPassengerModel.getInstance().destoryGeocodeSearch()
|
||||
}
|
||||
|
||||
fun showRottingMapView() {
|
||||
@@ -266,10 +256,6 @@ class TaxiPassengerServingOrderFragment :
|
||||
updateDriveProcessLoading(meters.toInt())
|
||||
}
|
||||
|
||||
fun onCurrentRoadName(roadName: String) {
|
||||
updateDriveRoadName(roadName)
|
||||
}
|
||||
|
||||
private fun updateOrderDisAndTimeView(
|
||||
remainDis: String,
|
||||
remainDisUnit: String,
|
||||
@@ -286,10 +272,6 @@ class TaxiPassengerServingOrderFragment :
|
||||
updateSpeedView(location.gnssSpeed)
|
||||
}
|
||||
|
||||
fun onLimitingVelocityChange(limitingVelocity: Int) {
|
||||
mLimitingVelocity = limitingVelocity
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新速度
|
||||
*
|
||||
@@ -297,7 +279,6 @@ class TaxiPassengerServingOrderFragment :
|
||||
*/
|
||||
private fun updateSpeedView(newSpeed: Float) {
|
||||
val speed = (Math.abs(newSpeed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值
|
||||
d(SceneConstant.M_TAXI_P + TAG, "mLimitingVelocity = $mLimitingVelocity")
|
||||
mTPSpeedTv?.setmColorList(
|
||||
intArrayOf(
|
||||
resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor(
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.mogo.och.taxi.passenger.ui.bottom
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.och.taxi.passenger.R
|
||||
import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_overmapview
|
||||
import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_roma
|
||||
import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_setting
|
||||
import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_video
|
||||
|
||||
class BottomBar @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private var checkIndex = SelectView.None
|
||||
private var overMapViewApply:ApplyClickLintener?=null
|
||||
private var videoApply:ApplyClickLintener?=null
|
||||
private var romaApply:ApplyClickLintener?=null
|
||||
private var settingApply:ApplyClickLintener?=null
|
||||
init {
|
||||
isClickable = true
|
||||
LayoutInflater.from(context).inflate(R.layout.taxi_p_bottom_bar, this, true)
|
||||
setBackgroundResource(R.drawable.taxi_p_bottom_bar_bg)
|
||||
actv_overmapview.setOnClickListener {
|
||||
setCheckIndex(SelectView.OVERMAPVIEW)
|
||||
overMapViewApply?.onApplyClick()
|
||||
}
|
||||
actv_video.setOnClickListener {
|
||||
setCheckIndex(SelectView.VIDEO)
|
||||
videoApply?.onApplyClick()
|
||||
}
|
||||
actv_roma.setOnClickListener {
|
||||
setCheckIndex(SelectView.ROMA)
|
||||
romaApply?.onApplyClick()
|
||||
}
|
||||
actv_setting.setOnClickListener {
|
||||
setCheckIndex(SelectView.SETTING)
|
||||
settingApply?.onApplyClick()
|
||||
}
|
||||
}
|
||||
|
||||
fun setOverMapApplyClick(overMapViewApply:ApplyClickLintener){
|
||||
this.overMapViewApply = overMapViewApply
|
||||
}
|
||||
fun setVideoApplyClick(overMapViewApply:ApplyClickLintener){
|
||||
this.videoApply = overMapViewApply
|
||||
}
|
||||
fun setRomaApplyClick(overMapViewApply:ApplyClickLintener){
|
||||
this.romaApply = overMapViewApply
|
||||
}
|
||||
fun setSettingApplyClick(overMapViewApply:ApplyClickLintener){
|
||||
this.settingApply = overMapViewApply
|
||||
}
|
||||
|
||||
fun setCheckIndex(index: SelectView){
|
||||
if(checkIndex==index){
|
||||
checkIndex = SelectView.None
|
||||
}else{
|
||||
checkIndex = index
|
||||
}
|
||||
if(checkIndex == SelectView.OVERMAPVIEW){
|
||||
actv_overmapview.setCheckItem(true)
|
||||
}else{
|
||||
actv_overmapview.setCheckItem(false)
|
||||
}
|
||||
if(checkIndex == SelectView.VIDEO){
|
||||
actv_video.setCheckItem(true)
|
||||
}else{
|
||||
actv_video.setCheckItem(false)
|
||||
}
|
||||
if(checkIndex == SelectView.ROMA){
|
||||
actv_roma.setCheckItem(true)
|
||||
}else{
|
||||
actv_roma.setCheckItem(false)
|
||||
}
|
||||
if(checkIndex == SelectView.SETTING){
|
||||
actv_setting.setCheckItem(true)
|
||||
}else{
|
||||
actv_setting.setCheckItem(false)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum class SelectView{
|
||||
None,OVERMAPVIEW,VIDEO,ROMA,SETTING
|
||||
}
|
||||
|
||||
interface ApplyClickLintener{
|
||||
fun onApplyClick()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.mogo.och.bus.passenger.ui.view.bottom
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.mogo.och.taxi.passenger.R
|
||||
import kotlinx.android.synthetic.main.m1_bottom_check.view.aciv_center_image
|
||||
import kotlinx.android.synthetic.main.m1_bottom_check.view.actv_title
|
||||
|
||||
open class BottomCheckView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "StopSiteView"
|
||||
}
|
||||
|
||||
private var backageViewId: Int = -1
|
||||
private var bottomTitle: String = ""
|
||||
private var selectedDrawable: Int = -1
|
||||
private var normalDrawable: Int = -1
|
||||
private var bottomTitleNormalColor:Int = -1
|
||||
private var bottomTitleCheckedColor:Int = -1
|
||||
private var backageView: View? = null
|
||||
|
||||
private var isCheck = false
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.m1_bottom_check, this, true)
|
||||
try {
|
||||
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.BottomSelectView)
|
||||
backageViewId = typedArray.getResourceId(R.styleable.BottomSelectView_backageViewId, -1)
|
||||
bottomTitle = typedArray.getString(R.styleable.BottomSelectView_bottomTitle) ?: ""
|
||||
selectedDrawable = typedArray.getResourceId(R.styleable.BottomSelectView_selectedDrawable, -1)
|
||||
normalDrawable = typedArray.getResourceId(R.styleable.BottomSelectView_normalDrawable, -1)
|
||||
bottomTitleNormalColor = typedArray.getColor(R.styleable.BottomSelectView_bottomTitleNormalColor,
|
||||
ContextCompat.getColor(context,R.color.white))
|
||||
bottomTitleCheckedColor = typedArray.getColor(R.styleable.BottomSelectView_bottomTitleCheckedColor,
|
||||
ContextCompat.getColor(context,R.color.white))
|
||||
typedArray.recycle()
|
||||
initView(context)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun initView(context: Context) {
|
||||
if (selectedDrawable > 0) {
|
||||
aciv_center_image.setImageResource(normalDrawable)
|
||||
}
|
||||
actv_title.text = bottomTitle
|
||||
}
|
||||
|
||||
fun setCheckItem(isCheck: Boolean) {
|
||||
if (isCheck != this.isCheck) {
|
||||
this.isCheck = isCheck
|
||||
notifiBackageView()
|
||||
}
|
||||
}
|
||||
|
||||
private fun notifiBackageView() {
|
||||
if (isCheck) {
|
||||
backageView?.visibility = View.VISIBLE
|
||||
aciv_center_image.setImageResource(selectedDrawable)
|
||||
actv_title.setTextColor(bottomTitleNormalColor)
|
||||
} else {
|
||||
backageView?.visibility = View.GONE
|
||||
aciv_center_image.setImageResource(normalDrawable)
|
||||
actv_title.setTextColor(bottomTitleCheckedColor)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
parent?.let {
|
||||
if (parent is ConstraintLayout) {
|
||||
if (backageViewId > 0) {
|
||||
backageView = (parent as ConstraintLayout).findViewById(backageViewId)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isCheck) {
|
||||
backageView?.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.mogo.och.taxi.passenger.ui.orderinfo
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.och.taxi.passenger.R
|
||||
|
||||
class ItineraryView(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int) :
|
||||
ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) {
|
||||
|
||||
// 速度
|
||||
lateinit var actvSpeedValue: AppCompatTextView
|
||||
// 速度单位
|
||||
lateinit var actvSpeedUnit: AppCompatTextView
|
||||
// 终点站
|
||||
lateinit var actvEndstation: AppCompatTextView
|
||||
// 距离终点距离
|
||||
lateinit var actvDistance: AppCompatTextView
|
||||
// 距离终点距离单位
|
||||
lateinit var actvDistanceUnit: AppCompatTextView
|
||||
// 剩余时间
|
||||
lateinit var actvSurplusTime: AppCompatTextView
|
||||
// 剩余时间单位
|
||||
lateinit var actvSurplusTimeUnit: AppCompatTextView
|
||||
// 到达时间
|
||||
lateinit var actvArrivedTime: AppCompatTextView
|
||||
|
||||
private fun initView(context: Context?) {
|
||||
LayoutInflater.from(context).inflate(R.layout.taxi_p_itinerary, this, true)
|
||||
actvSpeedValue = findViewById(R.id.actv_speed_value)
|
||||
actvSpeedUnit = findViewById(R.id.actv_speed_unit)
|
||||
actvEndstation = findViewById(R.id.actv_endstation)
|
||||
actvDistance = findViewById(R.id.actv_distance)
|
||||
actvDistanceUnit = findViewById(R.id.actv_distance_unit)
|
||||
actvSurplusTime = findViewById(R.id.actv_surplus_time)
|
||||
actvSurplusTimeUnit = findViewById(R.id.actv_surplus_time_unit)
|
||||
actvArrivedTime = findViewById(R.id.actv_arrived_time)
|
||||
}
|
||||
|
||||
fun setSpeed(speedValue:String,speedUnit:String){
|
||||
actvSpeedValue.text = speedValue
|
||||
actvSpeedUnit.text = speedUnit
|
||||
}
|
||||
fun setEndStation(endStation:String){
|
||||
actvEndstation.text = endStation
|
||||
}
|
||||
|
||||
fun setDistanceInfo(distance:String,distanceUnit:String,
|
||||
surplusTime:String,surplusTimeUnit:String,
|
||||
arrivedTime:String
|
||||
){
|
||||
actvDistance.text = distance
|
||||
actvDistanceUnit.text = distanceUnit
|
||||
actvSurplusTime .text= surplusTime
|
||||
actvSurplusTimeUnit.text = surplusTimeUnit
|
||||
actvArrivedTime .text= arrivedTime
|
||||
}
|
||||
|
||||
init {
|
||||
try {
|
||||
initView(context)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class TPRouteDataTestUtils {
|
||||
builder.setLongitude(s.getDouble("lon"));
|
||||
list.add(builder.build());
|
||||
}
|
||||
TaxiPassengerModel.getInstance().startToRouteAndWipe(list);
|
||||
TaxiPassengerModel.INSTANCE.startToRouteAndWipe();
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_107"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/aciv_center_image"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_width="@dimen/dp_90"
|
||||
android:layout_height="@dimen/dp_90"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_title"
|
||||
app:layout_constraintStart_toStartOf="@+id/aciv_center_image"
|
||||
app:layout_constraintEnd_toEndOf="@+id/aciv_center_image"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginBottom="@dimen/dp_4_5"
|
||||
android:textSize="@dimen/dp_20"
|
||||
android:text="靠边停车"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</merge>
|
||||
@@ -18,28 +18,6 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.widget.SteeringWheelView
|
||||
android:id="@+id/steering_wheel"
|
||||
android:layout_width="@dimen/dp_630"
|
||||
android:layout_height="@dimen/dp_630"
|
||||
android:layout_marginLeft="-59dp"
|
||||
android:layout_marginTop="@dimen/dp_32"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/module_och_autopilot_iv"
|
||||
android:layout_width="@dimen/module_mogo_och_operation_status_bg_width"
|
||||
android:layout_height="@dimen/module_mogo_och_operation_status_bg_height"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginLeft="40dp"
|
||||
android:layout_marginTop="@dimen/dp_120"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/taxi_p_un_auto_nor"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<!--pnc行为决策-->
|
||||
<com.mogo.eagle.core.function.hmi.ui.vehicle.PncActionsView
|
||||
android:layout_width="wrap_content"
|
||||
@@ -61,60 +39,6 @@
|
||||
app:roma_open="@drawable/iv_roma_taxi_passenger_press_bg"
|
||||
app:layout_constraintLeft_toLeftOf="parent" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/module_och_taxi_swich_map_iv"
|
||||
android:layout_width="@dimen/module_mogo_och_operation_status_bg_width"
|
||||
android:layout_height="@dimen/module_mogo_och_operation_status_bg_height"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="40dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginBottom="@dimen/dp_50"
|
||||
android:background="@drawable/taxi_p_switch_map_medium"
|
||||
android:scaleType="fitXY"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent" />
|
||||
|
||||
<!--消息盒子-->
|
||||
<com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxButtonView
|
||||
android:id="@+id/viewPassengerMsgBoxButton"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="100dp"
|
||||
android:layout_marginStart="320dp"
|
||||
android:layout_marginBottom="50dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
/>
|
||||
<com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView
|
||||
android:id="@+id/viewPassengerMsgBoxBubble"
|
||||
android:layout_width="650dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="20dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/viewPassengerMsgBoxButton"
|
||||
app:layout_constraintLeft_toLeftOf="@id/viewPassengerMsgBoxButton"
|
||||
app:layout_constraintRight_toRightOf="@id/viewPassengerMsgBoxButton" />
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxListView
|
||||
android:id="@+id/viewPassengerMsgBoxList"
|
||||
android:layout_width="650dp"
|
||||
android:layout_height="750dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toTopOf="@id/viewPassengerMsgBoxButton"
|
||||
app:layout_constraintLeft_toLeftOf="@id/viewPassengerMsgBoxButton"
|
||||
app:layout_constraintRight_toRightOf="@id/viewPassengerMsgBoxButton" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_temp"
|
||||
android:layout_width="300dp"
|
||||
android:layout_height="76dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginRight="@dimen/dp_40"
|
||||
android:layout_marginBottom="@dimen/dp_50"
|
||||
android:background="@drawable/taxi_p_mogologo_nor"
|
||||
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btnAutopilotDisable"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -198,4 +122,9 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<com.mogo.och.taxi.passenger.ui.bottom.BottomBar
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_107"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
|
||||
tools:ignore="MissingDefaultResource">
|
||||
|
||||
<TextClock
|
||||
android:id="@+id/cl_order_time"
|
||||
android:format12Hour="HH:mm MM月dd日 EEEE"
|
||||
android:format24Hour="HH:mm MM月dd日 EEEE"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/actv_overmapview_press"
|
||||
android:visibility="gone"
|
||||
android:src="@drawable/taxi_p_bottom_bar_select_bg"
|
||||
app:layout_constraintStart_toStartOf="@+id/actv_overmapview"
|
||||
app:layout_constraintEnd_toEndOf="@+id/actv_overmapview"
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomCheckView
|
||||
android:id="@+id/actv_overmapview"
|
||||
app:backageViewId="@+id/actv_overmapview_press"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_softsettiing_press"
|
||||
app:normalDrawable="@drawable/charter_p_bottom_softsettiing_normal"
|
||||
app:bottomTitle="全局概览"
|
||||
app:layout_constraintEnd_toStartOf="@+id/actv_video"
|
||||
app:layout_constraintStart_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/actv_video_press"
|
||||
android:visibility="gone"
|
||||
android:src="@drawable/taxi_p_bottom_bar_select_bg"
|
||||
app:layout_constraintStart_toStartOf="@+id/actv_video"
|
||||
app:layout_constraintEnd_toEndOf="@+id/actv_video"
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomCheckView
|
||||
android:id="@+id/actv_video"
|
||||
app:backageViewId="@+id/actv_video_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_softsettiing_press"
|
||||
app:normalDrawable="@drawable/charter_p_bottom_softsettiing_normal"
|
||||
app:bottomTitle="蘑菇咨询"
|
||||
app:layout_constraintStart_toEndOf="@+id/actv_overmapview"
|
||||
app:layout_constraintEnd_toStartOf="@+id/actv_roma"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/actv_roma_press"
|
||||
android:visibility="gone"
|
||||
android:src="@drawable/taxi_p_bottom_bar_select_bg"
|
||||
app:layout_constraintStart_toStartOf="@+id/actv_roma"
|
||||
app:layout_constraintEnd_toEndOf="@+id/actv_roma"
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomCheckView
|
||||
android:id="@+id/actv_roma"
|
||||
app:backageViewId="@+id/actv_roma_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_softsettiing_press"
|
||||
app:normalDrawable="@drawable/charter_p_bottom_softsettiing_normal"
|
||||
app:bottomTitle="漫游"
|
||||
app:layout_constraintStart_toEndOf="@+id/actv_video"
|
||||
app:layout_constraintEnd_toStartOf="@+id/actv_setting"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/actv_setting_press"
|
||||
android:visibility="gone"
|
||||
android:src="@drawable/taxi_p_bottom_bar_select_bg"
|
||||
app:layout_constraintStart_toStartOf="@+id/actv_setting"
|
||||
app:layout_constraintEnd_toEndOf="@+id/actv_setting"
|
||||
android:layout_width="@dimen/dp_359"
|
||||
android:layout_height="@dimen/dp_107"/>
|
||||
|
||||
<com.mogo.och.bus.passenger.ui.view.bottom.BottomCheckView
|
||||
android:id="@+id/actv_setting"
|
||||
app:backageViewId="@+id/actv_setting_press"
|
||||
app:selectedDrawable="@drawable/charter_p_bottom_softsettiing_press"
|
||||
app:normalDrawable="@drawable/charter_p_bottom_softsettiing_normal"
|
||||
app:bottomTitle="线路"
|
||||
app:layout_constraintStart_toEndOf="@+id/actv_roma"
|
||||
app:layout_constraintEnd_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</merge>
|
||||
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
|
||||
tools:layout_width="wrap_content"
|
||||
tools:layout_height="wrap_content">
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_speed_value"
|
||||
tools:text="速度"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_speed_unit"
|
||||
tools:text="速度单位"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_endstation"
|
||||
tools:text="目的地"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_distance"
|
||||
tools:text="剩余距离"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_distance_unit"
|
||||
tools:text="剩余距离单位"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_surplus_time"
|
||||
tools:text="剩余时间"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_surplus_time_unit"
|
||||
android:text="剩余时间单位"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/actv_arrived_time"
|
||||
android:text="到达时间"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
</merge>
|
||||
@@ -28,4 +28,19 @@
|
||||
</attr>
|
||||
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="BottomSelectView">
|
||||
<!-- 默认图片 -->
|
||||
<attr name="normalDrawable" format="reference" />
|
||||
<!-- 点击图片 -->
|
||||
<attr name="selectedDrawable" format="reference" />
|
||||
<!-- 显示背景view -->
|
||||
<attr name="backageViewId" format="reference" />
|
||||
|
||||
<attr name="bottomTitle" format="string"/>
|
||||
|
||||
<attr name="bottomTitleNormalColor" format="color"/>
|
||||
<attr name="bottomTitleCheckedColor" format="color"/>
|
||||
</declare-styleable>
|
||||
|
||||
</resources>
|
||||
@@ -95,12 +95,12 @@ public class TaxiGrabOrderFragment extends BaseTaxiUIFragment implements View.On
|
||||
Calendar calendar = DateTimeUtil.formatLongToCalendar(order.bookingTime);
|
||||
if (DateTimeUtil.compareDateIsCurrentDay(calendar)){
|
||||
mOrderReserverTime.setText("用车时间:今天 "+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm));
|
||||
VoiceNotice.showNotice("预约单,今天"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm)+"从"
|
||||
+order.startSiteAddr+"到"+order.endSiteAddr);
|
||||
// VoiceNotice.showNotice("预约单,今天"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm)+"从"
|
||||
// +order.startSiteAddr+"到"+order.endSiteAddr);
|
||||
}else {
|
||||
mOrderReserverTime.setText("用车时间:"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd_HH_mm));
|
||||
VoiceNotice.showNotice("预约单,"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd)+"从"
|
||||
+order.startSiteAddr+"到"+order.endSiteAddr);
|
||||
// VoiceNotice.showNotice("预约单,"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd)+"从"
|
||||
// +order.startSiteAddr+"到"+order.endSiteAddr);
|
||||
}
|
||||
mOrderStartStation.setText(order.startSiteAddr);
|
||||
mOrderEndStation.setText(order.endSiteAddr);
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
},
|
||||
"taxi" :{
|
||||
"driver": ["ochDFHQ"],
|
||||
"driverpassenger": ["ochDFHQ"],
|
||||
"driverPassenger": ["ochDFHQ"],
|
||||
"passenger": ["ochDFHQ"]
|
||||
},
|
||||
"bus" :{
|
||||
"driver": ["ochJL"],
|
||||
"driverpassenger": ["ochJL"],
|
||||
"driverPassenger": ["ochJL"],
|
||||
"passenger": ["ochJL"]
|
||||
},
|
||||
"charter" :{
|
||||
@@ -58,7 +58,7 @@
|
||||
},
|
||||
"bus" :{
|
||||
"driver": ["ochJL"],
|
||||
"driverpassenger": ["ochJL"],
|
||||
"driverPassenger": ["ochJL"],
|
||||
"passenger": ["ochJL"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
project.android.productFlavors {
|
||||
driverpassenger {
|
||||
driverPassenger {
|
||||
dimension "role"
|
||||
externalNativeBuild {
|
||||
ndk {
|
||||
|
||||
Reference in New Issue
Block a user