diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java index 081d51b701..e015160501 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -24,6 +24,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant; +import com.mogo.eagle.core.utilcode.util.ActivityUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.map.overlay.IMoGoOverlayManager; import com.mogo.map.overlay.core.Level; @@ -150,12 +151,12 @@ public class BusFragment extends BaseBusTabFragment @Override protected void onArriveStation() { - mPresenter.onAutopilotArriveAtStation(null); + mPresenter.arriveStation(null,"点击进站触发进站操作"); } @Override protected void debugArrivedStation() { - mPresenter.onAutopilotArriveAtStation(null); + mPresenter.arriveStation(null,"点击debug进站按钮触发进站操作"); } @NonNull @@ -529,7 +530,7 @@ public class BusFragment extends BaseBusTabFragment } if ((int)mSwitchLine.getTag() == 0){//切换路线 Intent intent = new Intent(getContext(), BusSwitchLineActivity.class); - startActivity(intent); + ActivityUtils.startActivity(intent); }else {//结束任务 OCHCommitDialog.Builder builder = new OCHCommitDialog.Builder(); OCHCommitDialog closeLineConfirmDialog = builder diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/BusLineModel.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/BusLineModel.java index e7418f4d37..ff9f265fa9 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/BusLineModel.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/BusLineModel.java @@ -14,6 +14,7 @@ import com.mogo.och.bus.callback.IBusLinesCallback; import com.mogo.och.bus.net.OrderServiceManager; import com.mogo.och.bus.ui.BusSwitchLineActivity; import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; /** * @author: wangmingjun @@ -118,9 +119,11 @@ public class BusLineModel { } public void commitSwitchLineId(int taskId,int lineId){ + OchChainLogManager.writeChainLog("选择线路","taskId:"+taskId+"--lineId:"+lineId,true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); OrderServiceManager.switchLine(mContext,taskId, new OchCommonServiceCallback() { @Override public void onSuccess(BusRoutesResponse o) { + OchChainLogManager.writeChainLog("选择线路成功","taskId:"+taskId+"--lineId:"+lineId,true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); SharedPrefsMgr.getInstance().putInt(BusSwitchLineActivity.LASTCOMMITLINEID,lineId); if (mBusLinesCallback != null){ mBusLinesCallback.onChangeLineIdSuccess(); @@ -130,6 +133,7 @@ public class BusLineModel { @Override public void onError() { if (!NetworkUtils.isConnected(mContext)) { + OchChainLogManager.writeChainLog("选择线路失败","taskId:"+taskId+"--lineId:"+lineId,true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); } else { ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java index 3a89eaa247..fabef08b13 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java @@ -13,7 +13,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.alibaba.android.arouter.launcher.ARouter; -import com.amap.api.maps.model.LatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.aicloud.services.socket.IMogoOnMessageListener; import com.mogo.commons.AbsMogoApplication; @@ -26,20 +25,20 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLocation; 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.call.autopilot.CallerAutoPilotControlManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; 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.telematic.CallerTelematicManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.CoordinateUtils; import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils; +import com.mogo.eagle.core.utilcode.util.GsonUtils; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.StringUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.bean.BusRoutesResult; import com.mogo.och.bus.bean.BusStationBean; @@ -55,6 +54,8 @@ import com.mogo.och.bus.presenter.BusModelLoopManager; import com.mogo.och.bus.util.BusAnalyticsManager; import com.mogo.och.bus.util.BusSendTripInfoManager; import com.mogo.och.bus.util.BusTrajectoryManager; +import com.mogo.och.bus.util.BusVoiceManager; +import com.mogo.och.common.module.bean.dpmsg.AppConnectMsg; import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager; import com.mogo.och.common.module.biz.common.socketmessage.data.OCHOperationalMessage; import com.mogo.och.common.module.biz.constant.OchCommonConst; @@ -63,15 +64,18 @@ import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager; import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.ArrivedStation; +import com.mogo.och.common.module.manager.autopilotmanager.trajectory.ITrajectoryListListener; +import com.mogo.och.common.module.manager.autopilotmanager.trajectory.TrajectoryManager; import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener; import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager; -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; import com.mogo.och.common.module.utils.DateTimeUtil; +import com.mogo.och.common.module.utils.MultiRequestLimitChecker; import com.mogo.och.common.module.utils.NumberFormatUtil; +import com.mogo.och.common.module.utils.OCHThreadPoolManager; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.och.common.module.utils.ToastUtilsOch; -import com.mogo.och.common.module.voice.VoiceManager; -import com.mogo.och.common.module.voice.VoiceNotice; import org.jetbrains.annotations.NotNull; @@ -81,7 +85,6 @@ import java.util.List; import io.reactivex.exceptions.UndeliverableException; import io.reactivex.plugins.RxJavaPlugins; -import mogo.telematics.pad.MessagePad; /** * @author congtaowang @@ -115,8 +118,6 @@ public class OrderModel { private IPassengerCallback mPassengerCallback; //乘客核销回调 private IBusADASStatusCallback mADASStatusCallback; - List points = new ArrayList<>();//全路径信息 - private volatile boolean isArrivedStation = false; //0: 代表没有启动过 1代表是启动第一次,当>=1 代表是重试 每次到站/路线结束清空置为0 @@ -150,12 +151,11 @@ public class OrderModel { mContext = AbsMogoApplication.getApp(); loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation(); // 定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,10, mMapLocationListener); + CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,5, mMapLocationListener); MogoStatusManager.getInstance().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - //自动驾驶路线规划接口 - CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); + TrajectoryManager.INSTANCE.addTrajectoryListListenerr(TAG,iTrajectoryListener); //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); @@ -267,36 +267,22 @@ public class OrderModel { private final ITrajectoryListener trajectoryListener = (routeArrivied, routeArriving, location) -> { }; - private final IMoGoPlanningRottingListener moGoAutopilotPlanningListener = new IMoGoPlanningRottingListener() { + + + private final ITrajectoryListListener iTrajectoryListener = new ITrajectoryListListener() { @Override - public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) { - if (null != routeList && routeList.getWayPointsList().size() > 0) { - points.clear(); - points.addAll(coordinateConverterWgsToGcjList(mContext, routeList.getWayPointsList())); - updateOrderRoute(); - } + public void trajectoryCallback(@NonNull List trajectoryList) { + updateOrderRoute(trajectoryList); } - }; - public static List coordinateConverterWgsToGcjList(Context mContext, List mogoLatLngList) { - List points = new ArrayList<>(); - for (MessagePad.Location m : mogoLatLngList) { - LatLng mogoLatLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(mContext, m); - BusRoutePlanningUpdateReqBean.Result result = new BusRoutePlanningUpdateReqBean.Result(); - result.latitude = mogoLatLng.latitude; - result.longitude = mogoLatLng.longitude; - points.add(result); - } - return points; - } /** * 上报订单全路径规划数据 */ - public void updateOrderRoute() { - if (!isGoingToNextStation || backgroundCurrentStationIndex + 1 >= stationList.size() || points.size() == 0) { + public void updateOrderRoute(List trajectoryList) { + if (!isGoingToNextStation || backgroundCurrentStationIndex + 1 >= stationList.size() || trajectoryList.size() == 0) { return; } @@ -304,7 +290,7 @@ public class OrderModel { BusStationBean nextStation = stationList.get(backgroundCurrentStationIndex + 1); OrderServiceManager.updateOrderRoute(mContext, currentLineId, currentStation.getSiteId() - , nextStation.getSiteId(), points, new OchCommonServiceCallback() { + , nextStation.getSiteId(), trajectoryList, new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { @@ -313,18 +299,12 @@ public class OrderModel { @Override public void onFail(int code, String failMsg) { if (isGoingToNextStation) {//重试 - updateOrderRoute(); + updateOrderRoute(trajectoryList); } } }); } - public void debugUpdateOrderRoute(List list) { - points.clear(); - points.addAll(coordinateConverterWgsToGcjList(mContext, list)); - updateOrderRoute(); - } - public void release() { startOrStopOrderLoop(false); @@ -334,8 +314,7 @@ public class OrderModel { // 注销定位监听 CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG); - //自动驾驶路线规划接口 - CallerPlanningRottingListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); + TrajectoryManager.INSTANCE.addTrajectoryListListenerr(TAG,null); loginService = null; OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null); @@ -383,13 +362,19 @@ public class OrderModel { @Override public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { if (null == gnssInfo) return; + Logger.d(TAG, "onChassisLocationGCJ02"); if (mControllerStatusCallback != null) { mControllerStatusCallback.onCarLocationChanged(gnssInfo); } //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 if (isGoingToNextStation && !isArrivedStation) { - judgeArrivedStation(gnssInfo); + OCHThreadPoolManager.getsInstance().locationExecute(new Runnable() { + @Override + public void run() { + judgeArrivedStation(gnssInfo); + } + }); } } }; @@ -426,7 +411,7 @@ public class OrderModel { //3、刚过站且过站距离在15m内, 提交到站 if (stationAngle > 90 && distance <= BusConst.ARRIVE_AT_END_STATION_DISTANCE){ CallerLogger.d(M_BUS + TAG, "judgeArrivedStation() = 刚过站且在15m内"); - onArriveAt(null); //无自动驾驶到站信息传null + onArriveAt(null,"兜底:根据定位计算到站"); //无自动驾驶到站信息传null } } } @@ -694,7 +679,9 @@ public class OrderModel { /** * 到站后重置站点状态 */ - private void arriveSiteStation() { + private void arriveSiteStation(String changeInfo) { + OchChainLogManager.writeChainLog("触发进站", changeInfo, + true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { //到站短时间内调用多次 CallerLogger.e( M_BUS + TAG, "数组越界" ); return; @@ -705,6 +692,13 @@ public class OrderModel { String departureStopName = stationList.get(backgroundCurrentStationIndex).getName(); CallerLogger.d(M_BUS + TAG, "arriveSiteStation-currentStationIndex = " + arrivedStationIndex); + String requestId = MultiRequestLimitChecker.Companion.generateRequestId(TAG + "-arriveSiteStation" + , String.valueOf(stationList.get(arrivedStationIndex).getSiteId()) + , String.valueOf(currentTaskId)); + if (!MultiRequestLimitChecker.Companion.getInstance().canMakeRequest(requestId, 5)) { + CallerLogger.d(M_BUS + TAG, "arriveSiteStation-MultiRequestLimitChecker: 超过最大请求数,本次请求return"); + return; + } OrderServiceManager.arriveSiteStation(mContext, stationList.get(arrivedStationIndex).getSeq(), stationList.get(arrivedStationIndex).getSiteId(), @@ -713,6 +707,7 @@ public class OrderModel { @Override public void onSuccess(BaseData o) { CallerLogger.d(M_BUS + TAG, "行程日志-arriveSiteStation success"); + MultiRequestLimitChecker.Companion.getInstance().decreaseRequestCount(requestId); if (o != null && o.code == 0){ queryBusRoutes(); isArrivedStation = true; @@ -726,6 +721,7 @@ public class OrderModel { @Override public void onError() { + MultiRequestLimitChecker.Companion.getInstance().decreaseRequestCount(requestId); if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); } else { @@ -735,6 +731,7 @@ public class OrderModel { @Override public void onFail(int code, String failMsg) { + MultiRequestLimitChecker.Companion.getInstance().decreaseRequestCount(requestId); if (ToastUtilsOch.isCustomFastClick(5000)) { if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort("网络异常,请稍后重试"); @@ -758,7 +755,7 @@ public class OrderModel { , arriveStation , isLastStop); } - VoiceManager.INSTANCE.arrivedStationBus(arriveStation,arriveStationKr); + BusVoiceManager.INSTANCE.arrivedStationBus(arriveStation,arriveStationKr); } /** @@ -783,6 +780,10 @@ public class OrderModel { MogoLocation currentStationPoint = new MogoLocation(); currentStationPoint.setLongitude(busStationBean.getGcjLon()); currentStationPoint.setLatitude(busStationBean.getGcjLat()); + String changeInfo = "taskId:" + currentTaskId + "--lineId:" + currentLineId + + "--currentStationName:"+currentStationName+"--finalNextStationName:"+finalNextStationName; + OchChainLogManager.writeChainLog("滑动出发", changeInfo, + true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); OrderServiceManager.leaveStation(mContext, busStationBean.getSeq(), busStationBean.getSiteId(), @@ -790,6 +791,8 @@ public class OrderModel { new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { + OchChainLogManager.writeChainLog("滑动出发成功", changeInfo, + true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); isArrivedStation = false; CallerLogger.d(M_BUS + TAG, "行程日志-离站成功开往下一站===="); //需要更改当前站和下一站的状态 然后渲染 @@ -824,7 +827,7 @@ public class OrderModel { //车站10s后播报 private void leaveTTSTips(String nextStation,String nextStationKr) { - UiThreadHandler.postDelayed(() -> VoiceManager.INSTANCE.leaveStationBus(nextStation,nextStationKr),DELAY_10S); + UiThreadHandler.postDelayed(() -> BusVoiceManager.INSTANCE.leaveStationBus(nextStation,nextStationKr),DELAY_10S); } /** @@ -971,8 +974,7 @@ public class OrderModel { OCHSocketMessageManager.INSTANCE.pushAppOperationalMsgBox( DateTimeUtil.getCurrentTimeStamp(), tips,OCHSocketMessageManager.OPERATION_SYSTEM); - //语音提示 - VoiceNotice.showNotice(tips); + BusVoiceManager.INSTANCE.leafTime(tips); } Runnable tip1Runnable = () -> { @@ -1084,7 +1086,7 @@ public class OrderModel { } private void ttsEndTask() { - VoiceManager.INSTANCE.endOrderBus(); + BusVoiceManager.INSTANCE.endOrderBus(); } /** @@ -1092,7 +1094,7 @@ public class OrderModel { * * @param data */ - public void onArriveAt(MessagePad.ArrivalNotification data) { + public void onArriveAt(ArrivedStation data,String type) { if (backgroundCurrentStationIndex + 1 > stationList.size() - 1) { CallerLogger.e(M_BUS + TAG, "行程日志-到站异常,取消后续操作结束"); return; @@ -1125,7 +1127,7 @@ public class OrderModel { CallerLogger.d(M_BUS + TAG, "行程日志-当前==backgroundCurrentStationIndex=" + backgroundCurrentStationIndex); - arriveSiteStation(); + arriveSiteStation(type); } public boolean isGoingToNextStation() { @@ -1133,6 +1135,10 @@ public class OrderModel { } public void sendWriteOffNumToClient(String msg){ + AppConnectMsg passengerMsg = new AppConnectMsg(false,true,msg,-1); + + CallerTelematicManager.INSTANCE.sendMsgToAllClients(OchCommonConst.BUSINESS_STRING, + GsonUtils.toJson(passengerMsg).getBytes()); } // 车机端上传心跳数据(只在出车状态时上传) @@ -1261,6 +1267,26 @@ public class OrderModel { return parameters; } + public void setStation(){ + BusStationBean busStationBean = stationList.get(backgroundCurrentStationIndex); + String nextStationName = ""; + String nextStationNameKr = ""; + MogoLocation nextStationPoint = new MogoLocation(); + if (backgroundCurrentStationIndex < stationList.size() - 1) { + BusStationBean nextStation = stationList.get(backgroundCurrentStationIndex + 1); + nextStationName = nextStation.getName(); + nextStationNameKr = nextStation.getNameKr(); + nextStationPoint.setLongitude(nextStation.getGcjLon()); + nextStationPoint.setLatitude(nextStation.getGcjLat()); + } + final String currentStationName = busStationBean.getName(); + String finalNextStationName = nextStationName; + String finalNextStationNameKr = nextStationNameKr; + MogoLocation currentStationPoint = new MogoLocation(); + currentStationPoint.setLongitude(busStationBean.getGcjLon()); + currentStationPoint.setLatitude(busStationBean.getGcjLat()); + } + public void setTrajectoryStation(MogoLocation startStation,MogoLocation endStation,Long lineId){ TrajectoryAndDistanceManager.INSTANCE.setStationPoint(startStation,endStation,lineId); } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt index bc6fc62a01..2cd34d2b6f 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt @@ -6,6 +6,7 @@ import com.mogo.commons.debug.DebugConfig import com.mogo.eagle.core.data.BaseData import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.och.bus.bean.* import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.network.OchCommonServiceCallback @@ -330,15 +331,22 @@ object OrderServiceManager { lineId: Int, startSiteId: Int, endSiteId: Int, - points: List?, + points: List, callback: OchCommonServiceCallback? ) { + val pointsResult = mutableListOf() + points.forEach { + val result = BusRoutePlanningUpdateReqBean.Result() + result.latitude = it.latitude; + result.longitude = it.longitude; + pointsResult.add(result); + } if (DebugConfig.getProjectFlavor().contains("saas")){ M_SAAS_SERVICE.updateOrderRoute( MoGoAiCloudClientConfig.getInstance().serviceAppId, SharedPrefsMgr.getInstance().token, BusRoutePlanningUpdateReqBean( - SharedPrefsMgr.getInstance().sn, lineId, startSiteId, endSiteId, points + SharedPrefsMgr.getInstance().sn, lineId, startSiteId, endSiteId, pointsResult ) ) .transformTry() @@ -348,7 +356,7 @@ object OrderServiceManager { MoGoAiCloudClientConfig.getInstance().serviceAppId, SharedPrefsMgr.getInstance().token, BusRoutePlanningUpdateReqBean( - SharedPrefsMgr.getInstance().sn, lineId, startSiteId, endSiteId, points + SharedPrefsMgr.getInstance().sn, lineId, startSiteId, endSiteId, pointsResult ) ) .transformTry() diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 076371db78..c3f484e46e 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -10,8 +10,6 @@ import androidx.lifecycle.LifecycleOwner; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; @@ -28,11 +26,15 @@ import com.mogo.och.bus.callback.ISlidePannelHideCallback; import com.mogo.och.bus.fragment.BusFragment; import com.mogo.och.bus.model.OrderModel; import com.mogo.och.bus.util.BusTrajectoryManager; +import com.mogo.och.bus.util.BusVoiceManager; import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; import com.mogo.och.common.module.biz.callback.ILoginCallback; import com.mogo.och.common.module.biz.constant.LoginStatusManager; import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager; -import com.mogo.och.common.module.voice.VoiceNotice; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.ArrivedStation; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.IOchAutopilotStatusListener; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.OchAutoPilotStatusListenerManager; +import com.zhjt.mogo.adas.data.AdasConstants; import java.util.ArrayList; import java.util.List; @@ -47,7 +49,7 @@ import system_master.SystemStatusInfo; */ public class BusPresenter extends Presenter implements IRefreshBusStationsCallback, ISlidePannelHideCallback - , IMoGoAutopilotStatusListener, IBusControllerStatusCallback, ILoginCallback, IPassengerCallback, IBusADASStatusCallback { + , IBusControllerStatusCallback, ILoginCallback, IPassengerCallback, IBusADASStatusCallback, IOchAutopilotStatusListener { private static final String TAG = "BusPresenter"; @@ -57,7 +59,7 @@ public class BusPresenter extends Presenter public BusPresenter(BusFragment view) { super(view); //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); + OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG,this); OrderModel.getInstance().init(); OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); } @@ -149,13 +151,17 @@ public class BusPresenter extends Presenter } @Override - public void onAutopilotArriveAtStation(MessagePad.ArrivalNotification arrivalNotification) { + public void onAutopilotArriveAtStation(ArrivedStation arrivedStation) { CallerLogger.e( M_BUS + TAG, "行程日志-onAutopilotArriveAtStation arrive"); - OrderModel.getInstance().onArriveAt(arrivalNotification); + arriveStation(arrivedStation,"底盘触发进站"); + } + + public void arriveStation(ArrivedStation arrivedStation,String type){ + OrderModel.getInstance().onArriveAt(arrivedStation,type); } @Override - public void onAutopilotSNRequest() { + public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { } @@ -242,7 +248,7 @@ public class BusPresenter extends Presenter } @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + public void onAutopilotIpcConnectStatusChanged(@NonNull AdasConstants.IpcConnectionStatus status, @Nullable String reason) { } @Override @@ -279,13 +285,12 @@ public class BusPresenter extends Presenter public void playPassenger(WriteOffPassenger passenger) { int passengerNum = passenger.passengerSize; if (passengerNum > 1){ //多人播报 "x人" ---》x人核验通过 - VoiceNotice.showNotice(passengerNum+"人核验通过", AIAssist.LEVEL3); OrderModel.getInstance().sendWriteOffNumToClient(passengerNum+"人核验通过"); }else { //是 1 播放 "滴" 2022.11.09 改为: "核验通过" // mView.playDI(); - VoiceNotice.showNotice("核验通过", AIAssist.LEVEL3); OrderModel.getInstance().sendWriteOffNumToClient("核验通过"); } + BusVoiceManager.INSTANCE.writeOffCount(passengerNum); } @Override @@ -297,4 +302,7 @@ public class BusPresenter extends Presenter public void onAutopilotDockerInfo(@NonNull String dockerVersion) { } + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { + } } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BDRouteDataTestUtils.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BDRouteDataTestUtils.java index a9ff4aad99..51e2992206 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BDRouteDataTestUtils.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BDRouteDataTestUtils.java @@ -37,7 +37,6 @@ public class BDRouteDataTestUtils { builder.setLongitude(s.getDouble("lon")); list.add(builder.build()); } - OrderModel.getInstance().debugUpdateOrderRoute(list); } catch (JSONException e) { e.printStackTrace(); } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BusVoiceManager.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BusVoiceManager.kt new file mode 100644 index 0000000000..71a562a555 --- /dev/null +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/util/BusVoiceManager.kt @@ -0,0 +1,91 @@ +package com.mogo.och.bus.util + +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.och.bus.R +import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.tts.base.LangTtsEntity +import com.mogo.tts.base.LanguageType +import java.util.ArrayList + +object BusVoiceManager { + + fun writeOffCount(successNum:Int){ + if(successNum<=1){ + VoiceNotice.showNotice("核验通过", AIAssist.LEVEL3); + }else{ + VoiceNotice.showNotice("$successNum 人核验通过", AIAssist.LEVEL3); + } + } + + fun arrivedStationBus(siteNameCN: String?, siteNameKR: String?) { + if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) { + return + } + val context = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + siteNameCN?.let { + val chineseTTS = LangTtsEntity( + context.getString(R.string.bus_arrived_station_tip, it), + LanguageType.CHINESE + ) + val engTTS = LangTtsEntity( + context.getString(R.string.bus_arrived_station_english_tip, it), + LanguageType.CHINESE + ) + val koreanTTS = LangTtsEntity( + context.getString(R.string.bus_arrived_station_korean_tip, siteNameKR?:it), + LanguageType.KOREAN + ) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + } + + VoiceNotice.showNotice(list, AIAssist.LEVEL1,null) + } + + fun leaveStationBus(siteNameCN: String?, siteNameKR: String?) { + val list: MutableList = ArrayList() + val context = AbsMogoApplication.getApp() + siteNameCN?.let { + val chineseTTS = LangTtsEntity( + context.getString(R.string.bus_leave_station_tip, it), + LanguageType.CHINESE + ) + val engTTS = LangTtsEntity( + context.getString(R.string.bus_leave_station_english_tip, it), + LanguageType.CHINESE + ) + list.add(chineseTTS) + list.add(engTTS) + + val koreanTTS = LangTtsEntity( + context.getString(R.string.bus_leave_station_korean_tip, siteNameKR ?: it), + LanguageType.KOREAN + ) + list.add(koreanTTS) + } + VoiceNotice.showNotice(list, AIAssist.LEVEL1,null) + } + + fun endOrderBus() { + val context = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + val chineseTTS = LangTtsEntity(context.getString(R.string.bus_end_task_tip), LanguageType.CHINESE) + val engTTS = LangTtsEntity(context.getString(R.string.bus_end_task_english_tip), LanguageType.ENGLISH) + val koreanTTS = LangTtsEntity(context.getString(R.string.bus_end_task_korean_tip), LanguageType.KOREAN) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + VoiceNotice.showNotice(list, AIAssist.LEVEL0,null) + } + + fun leafTime(tips: String) { + //语音提示 + VoiceNotice.showNotice(tips); + } + +} \ No newline at end of file diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java index b603c90458..6692778b2e 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java @@ -22,9 +22,12 @@ import android.view.animation.DecelerateInterpolator; import androidx.annotation.Nullable; import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.ConvertUtils; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; import me.jessyan.autosize.AutoSizeConfig; import me.jessyan.autosize.utils.AutoSizeUtils; @@ -130,9 +133,13 @@ public class SlidePanelView extends View { textGradient.setLocalMatrix(gradientMatrix); textPaint.setShader(textGradient); textPaint.getFontMetrics(blockTextMetrics); + decodeImage(); + } + + private void decodeImage(){ ThreadUtils.getCpuPool().execute(() -> { int size = AutoSizeUtils.dp2px(getContext(), 120); - BitmapFactory.Options opts = new BitmapFactory.Options(); //todo yakun 优化 + BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inDensity = (int) AutoSizeConfig.getInstance().getInitDensity(); bmBlock = BitmapFactory.decodeResource(getResources(), R.drawable.bus_base_slide_block,opts); bmBlock = Bitmap.createScaledBitmap(bmBlock, size, size, true); @@ -269,13 +276,24 @@ public class SlidePanelView extends View { // 画文字 gradientMatrix.setTranslate(matrixTranslate, 0); textGradient.setLocalMatrix(gradientMatrix); - if(bmBlock!=null) { canvas.save(); canvas.drawText(blockText, (float) (blockWidth + BLOCK_START_X + textMarginLeft), (float) textOffset, textPaint); canvas.restore(); - // 画滑块 - canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + if (bmBlock != null) { + if(bmBlock.getByteCount()>=5*1024*1024){ + OchChainLogManager.writeChainLog("崩溃兜底策略", + "图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount()),true,OchChainLogManager.EVENT_KEY_INFE_ERROR); + bmBlock.recycle(); + bmBlock = null; + blockWidth = 0; + decodeImage(); + }else { + // 画滑块 + canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + CallerLogger.d(TAG,"图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount())); + } } + } public interface OnSlidePanelMoveToEndListener { diff --git a/OCH/bus/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png b/OCH/bus/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png similarity index 100% rename from OCH/bus/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png rename to OCH/bus/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png diff --git a/OCH/bus/driver/src/main/res/values/strings.xml b/OCH/bus/driver/src/main/res/values/strings.xml index c9fc1117b7..331daed88b 100644 --- a/OCH/bus/driver/src/main/res/values/strings.xml +++ b/OCH/bus/driver/src/main/res/values/strings.xml @@ -40,8 +40,11 @@ 暂无任务 + 距离发车时间还有%1$s分钟 + + 平行驾驶 + - 已到达%1$s,带好随身物品,下车请注意安全。 We are arriving at %1$s ,get off with your belongings %1$s 역에 도착했습니다 , 소지품 챙겨서 내리세요 @@ -53,10 +56,6 @@ 感谢您体验\'蘑菇车联\'自动驾驶小巴车,我们下次再见。 Thank you for experiencing the self-driving minibus. See you next time 자율주행 버스를 체험해 주셔서 감사합니다. 다음에 또 뵙겠습니다 - - 距离发车时间还有%1$s分钟 - - 平行驾驶 diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java similarity index 100% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java rename to OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java similarity index 100% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java rename to OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2RoutesResponse.java b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/PM2RoutesResponse.java similarity index 92% rename from OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2RoutesResponse.java rename to OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/PM2RoutesResponse.java index 06d25677a8..32306a33c1 100644 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2RoutesResponse.java +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/bean/PM2RoutesResponse.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.passenger.bean; +package com.mogo.och.bus.passenger.bean; import com.mogo.eagle.core.data.BaseData; import com.mogo.och.data.bean.BusRoutesResult; diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt similarity index 95% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt rename to OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt index 8d92a70a56..626fe265ae 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt @@ -2,7 +2,7 @@ package com.mogo.och.bus.passenger.network import android.content.Context import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken -import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse +import com.mogo.och.bus.passenger.bean.PM2RoutesResponse import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.debug.DebugConfig import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest @@ -31,7 +31,7 @@ object BusPassengerServiceManager { * 获取Bus司机端的sn * @return */ - val driverAppSn: String + public val driverAppSn: String get() { val serverToken = getServerToken() if (serverToken != driverSnCache && serverToken.isNotEmpty()) { @@ -47,7 +47,7 @@ object BusPassengerServiceManager { */ @JvmStatic fun queryDriverSiteByCoordinate( - context: Context, callback: OchCommonServiceCallback? + context: Context, callback: OchCommonServiceCallback? ) { if (DebugConfig.getProjectFlavor().contains("saas")){ mBusPassengerSaasServiceApi.queryDriverSiteByCoordinate( diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java similarity index 82% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java rename to OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java index 1810e79298..577a72524c 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerSAASServiceApi.java @@ -2,7 +2,7 @@ package com.mogo.och.bus.passenger.network; import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse; import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest; -import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse; +import com.mogo.och.bus.passenger.bean.PM2RoutesResponse; import io.reactivex.Observable; import retrofit2.http.Body; @@ -17,7 +17,7 @@ import retrofit2.http.Query; * * Bus乘客端接口定义 */ -interface PassengerSAASServiceApi { +public interface PassengerSAASServiceApi { /** * 查询bus司机端绑定路线 * @return 接口返回数据 @@ -25,7 +25,7 @@ interface PassengerSAASServiceApi { @Headers( {"Content-Type:application/json;charset=UTF-8"} ) // @POST( "/autopilot-car-hailing/line/v2/driver/bus/passenger/lineDataWithDriver/query" ) @GET( "/och-bus-cabin/api/business/v1/driver/bus/lineDataWithDriver/query" ) - Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); /** * 查询司机端的登陆状态 diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/PassengerServiceApi.java b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerServiceApi.java similarity index 81% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/PassengerServiceApi.java rename to OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerServiceApi.java index b1c16037d0..00b312ee2d 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/PassengerServiceApi.java +++ b/OCH/bus/passenger/src/main/java/com/mogo/och/bus/passenger/network/PassengerServiceApi.java @@ -2,7 +2,7 @@ package com.mogo.och.bus.passenger.network; import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse; import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest; -import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse; +import com.mogo.och.bus.passenger.bean.PM2RoutesResponse; import io.reactivex.Observable; import retrofit2.http.Body; @@ -17,14 +17,14 @@ import retrofit2.http.Query; * * Bus乘客端接口定义 */ -interface PassengerServiceApi { +public interface PassengerServiceApi { /** * 查询bus司机端绑定路线 * @return 接口返回数据 */ @Headers( {"Content-Type:application/json;charset=UTF-8"} ) @POST( "/autopilot-car-hailing/line/v2/driver/bus/passenger/lineDataWithDriver/query" ) - Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Body BusPassengerQueryLineRequest request); + Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Body BusPassengerQueryLineRequest request); /** * 查询司机端的登陆状态 diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResponse.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResponse.java deleted file mode 100644 index 01163fd6c5..0000000000 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResponse.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.mogo.och.bus.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * 网约车小巴路线接口请求响应结果 返回的是对应司机屏的线路信息 - * - * @author tongchenfei - */ -public class BusPassengerRoutesResponse extends BaseData { - private BusPassengerRoutesResult data; - - public BusPassengerRoutesResult getResult() { - return data; - } - - public void setResult(BusPassengerRoutesResult data) { - this.data = data; - } - - @Override - public String toString() { - return "OchBusRoutesResponse{" + - "data=" + data + - '}'; - } - -} diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResult.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResult.java deleted file mode 100644 index fa4a2ae0be..0000000000 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResult.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.mogo.och.bus.passenger.bean; - -import java.util.List; -import java.util.Objects; - -/** - * 网约车小巴路线接口返回接口数据封装 - * - * @author tongchenfei - */ -public class BusPassengerRoutesResult { - private List sites; - private int lineId; - private String name; //线路名称 - private int lineType; //线路类型,0:环形 - private String description; - private int status; - private String runningDur; //运营时间 - private long taskTime; //线路时间班次 - - public List getSites() { - return sites; - } - - public int getLineId() { - return lineId; - } - - public String getName() { - return name; - } - - public int getLineType() { - return lineType; - } - - public String getDescription() { - return description; - } - - public int getStatus() { - return status; - } - - public String getRunningDur() { - return runningDur; - } - - public String csvFileUrl = ""; //轨迹文件下载的cos url,默认“” - public String csvFileMd5 = ""; //轨迹文件md5,默认“” - public String txtFileUrl = ""; //打点文件下载的cos url,默认“” - public String txtFileMd5 = ""; //轨迹文件md5,默认“” - public long contrailSaveTime; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 - public String carModel = ""; //[optional] 车型号(如红旗H9),默认“”,暂不加入校验逻辑、用于人工排查问题 - public String csvFileUrlDPQP = ""; //轨迹文件下载的cos url,默认“” - public String csvFileMd5DPQP = ""; //轨迹文件md5,默认“” - public String txtFileUrlDPQP = ""; //打点文件下载的cos url,默认“” - public String txtFileMd5DPQP = ""; //轨迹文件md5,默认“” - public long contrailSaveTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 - - @Override - public String toString() { - return "BusPassengerRoutesResult{" + - "sites=" + sites + - ", lineId=" + lineId + - ", name='" + name + '\'' + - ", lineType=" + lineType + - ", description='" + description + '\'' + - ", status=" + status + - ", runningDur='" + runningDur + '\'' + - ", taskTime=" + taskTime + - ", csvFileUrl='" + csvFileUrl + '\'' + - ", csvFileMd5='" + csvFileMd5 + '\'' + - ", txtFileUrl='" + txtFileUrl + '\'' + - ", txtFileMd5='" + txtFileMd5 + '\'' + - ", contrailSaveTime=" + contrailSaveTime + - ", carModel='" + carModel + '\'' + - ", csvFileUrlDPQP='" + csvFileUrlDPQP + '\'' + - ", csvFileMd5DPQP='" + csvFileMd5DPQP + '\'' + - ", txtFileUrlDPQP='" + txtFileUrlDPQP + '\'' + - ", txtFileMd5DPQP='" + txtFileMd5DPQP + '\'' + - ", contrailSaveTimeDPQP=" + contrailSaveTimeDPQP + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - BusPassengerRoutesResult that = (BusPassengerRoutesResult) o; - return lineId == that.lineId - && lineType == that.lineType - && status == that.status - && sites.equals(that.sites) - && name.equals(that.name) - && runningDur.equals(that.runningDur); - } - - @Override - public int hashCode() { - return Objects.hash(sites, lineId, name, lineType, description, status, runningDur); - } -} diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerStation.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerStation.java deleted file mode 100644 index 401bcd9dd1..0000000000 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/bean/BusPassengerStation.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.mogo.och.bus.passenger.bean; - -import java.util.Objects; - -/** - * 单个网约车小巴车站信息 - * - * @author wangmingjun - */ -public class BusPassengerStation { - - private String name; - private String description; - private String cityCode; - private double lon; //高精坐标 - private double lat; //高精坐标 - private double gcjLon; //高德坐标 - private double gcjLat; //高德坐标 - private int businessType; //站点类型,9:taxi,10:bus - private int status; - private int siteId; - private int seq; - private int drivingStatus;//行驶信息,0初始值;1已经过;2当前站;3未到站 - private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 - private boolean leaving; - - public void setName(String name) { - this.name = name; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCityCode(String cityCode) { - this.cityCode = cityCode; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public void setBusinessType(int businessType) { - this.businessType = businessType; - } - - public void setStatus(int status) { - this.status = status; - } - - public void setSiteId(int siteId) { - this.siteId = siteId; - } - - public void setSeq(int seq) { - this.seq = seq; - } - - public void setDrivingStatus(int drivingStatus) { - this.drivingStatus = drivingStatus; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public String getCityCode() { - return cityCode; - } - - public double getGcjLon() { - return gcjLon; - } - - public double getGcjLat() { - return gcjLat; - } - - public int getBusinessType() { - return businessType; - } - - public int getStatus() { - return status; - } - - public int getSiteId() { - return siteId; - } - - public int getSeq() { - return seq; - } - - public int getDrivingStatus() { - return drivingStatus; - } - - public double getLon() { - return lon; - } - - public double getLat() { - return lat; - } - - public void setIfStop(int ifStop) { - this.ifStop = ifStop; - } - - public int getIfStop() { - return ifStop; - } - - public void setLeaving(boolean leaving) { - this.leaving = leaving; - } - - public boolean isLeaving() { - return leaving; - } - - @Override - public String toString() { - return "OchBusStation{" + - "name='" + name + '\'' + - ", description='" + description + '\'' + - ", cityCode='" + cityCode + '\'' + - ", lon=" + lon + - ", lat=" + lat + - ", businessType=" + businessType + - ", status=" + status + - ", siteId=" + siteId + - ", seq=" + seq + - ", drivingStatus=" + drivingStatus + - ", ifStop=" + ifStop + - ", leaving=" + leaving + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - BusPassengerStation that = (BusPassengerStation) o; - return Double.compare(that.lon, lon) == 0 - && Double.compare(that.lat, lat) == 0 - && Double.compare(that.gcjLon, gcjLon) == 0 - && Double.compare(that.gcjLat, gcjLat) == 0 - && businessType == that.businessType - && status == that.status - && siteId == that.siteId - && seq == that.seq - && drivingStatus == that.drivingStatus - && ifStop == that.ifStop - && leaving == that.leaving - && Objects.equals(name, that.name) - && Objects.equals(cityCode, that.cityCode); - } - - @Override - public int hashCode() { - return Objects.hash(name, description, cityCode, lon, lat, gcjLon, gcjLat, businessType, status, siteId, seq, drivingStatus, ifStop, leaving); - } -} diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java index 4dbf53010c..ce58b08413 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java @@ -6,8 +6,6 @@ package com.mogo.och.bus.passenger.callback; * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) */ public interface IBusPassengerADASStatusCallback { - // 自动驾驶触发的已到达目的地:暂未用到 - void onAutopilotArriveEnd(); // 自动驾驶可用状态 void onAutopilotEnable(); diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java index 7f07057f98..3a09bc436d 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java @@ -11,5 +11,4 @@ import java.util.List; public interface IBusPassengerAutopilotPlanningCallback { void routeResult(List routeArrivied, List routeArriving, MogoLocation location); void routePlanningToNextStationChanged(long meters, long timeInSecond); - void updateTotalDistance(); } diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java index b7d348a2b2..caf252a64e 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java @@ -1,6 +1,6 @@ package com.mogo.och.bus.passenger.callback; -import com.mogo.och.bus.passenger.bean.BusPassengerStation; +import com.mogo.och.data.bean.BusStationBean; import java.util.List; @@ -10,7 +10,7 @@ import java.util.List; */ public interface IBusPassengerRouteLineInfoCallback { void updateLineInfo(String lineName, String lineDurTime); - void updateStationsInfo(List stations, int currentStationIndex, boolean isArrived); + void updateStationsInfo(List stations, int currentStationIndex, boolean isArrived); void showNoTaskView(); void hideNoTaskView(); } diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/model/BusPassengerModel.kt b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/model/BusPassengerModel.kt index 1e8c2ea0fa..ecd0dd6eaf 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/model/BusPassengerModel.kt +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/model/BusPassengerModel.kt @@ -38,12 +38,9 @@ import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse -import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse -import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResult -import com.mogo.och.bus.passenger.bean.BusPassengerStation +import com.mogo.och.bus.passenger.bean.PM2RoutesResponse import com.mogo.och.bus.passenger.callback.* import com.mogo.och.bus.passenger.constant.BusPassengerConst -import com.mogo.och.bus.passenger.network.BusPassengerModelLoopManager import com.mogo.och.bus.passenger.network.BusPassengerServiceManager import com.mogo.och.bus.passenger.network.BusPassengerServiceManager.driverAppSn import com.mogo.och.common.module.bean.dpmsg.AppConnectMsg @@ -61,14 +58,15 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addTrajectoryListener import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.suspendCalculate -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.calculateRouteSumLength -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.getArrivedPointIndexNew +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.DateTimeUtil +import com.mogo.och.common.module.utils.OCHThreadPoolManager import com.mogo.och.common.module.utils.PinYinUtil -import mogo.telematics.pad.MessagePad +import com.mogo.och.data.bean.BusRoutesResult +import com.mogo.och.data.bean.BusStationBean +import io.reactivex.schedulers.Schedulers import mogo.telematics.pad.MessagePad.ArrivalNotification -import mogo.telematics.pad.MessagePad.GlobalPathResp import java.util.concurrent.ConcurrentHashMap /** @@ -78,24 +76,21 @@ import java.util.concurrent.ConcurrentHashMap object BusPassengerModel { private val TAG = BusPassengerModel::class.java.simpleName + private val TAG_LOOP_QUERY_BIND_LINE = "${TAG}_TAG_LOOP_QUERY_BIND_LINE" private const val MSG_QUERY_BUS_P_STATION = 1001 - private val mRoutePoints: MutableList = ArrayList() - private var mContext: Context? = null - private var mADASStatusCallback //Model->Presenter:自动驾驶状态相关 - : IBusPassengerADASStatusCallback? = null - private var mAutopilotPlanningCallback //Model->Presenter:自动驾驶线路规划 - : IBusPassengerAutopilotPlanningCallback? = null + private var mADASStatusCallback: IBusPassengerADASStatusCallback? = + null//Model->Presenter:自动驾驶状态相关 + private var mAutopilotPlanningCallback: IBusPassengerAutopilotPlanningCallback? = + null//Model->Presenter:自动驾驶线路规划 private val mControllerStatusCallbackMap: MutableMap = ConcurrentHashMap() - private var mDriverStatusCallback //出车收车状态 - : IBusPassegerDriverStatusCallback? = null - private var mRouteLineInfoCallback // bus路线信息更新 - : IBusPassengerRouteLineInfoCallback? = null + private var mDriverStatusCallback: IBusPassegerDriverStatusCallback? = null//出车收车状态 + private var mRouteLineInfoCallback: IBusPassengerRouteLineInfoCallback? = null// bus路线信息更新 private var mLocation: MogoLocation? = null - private var routesResult: BusPassengerRoutesResult? = null - var mStations: MutableList = ArrayList() + private var routesResult: BusRoutesResult? = null + var mStations: MutableList = ArrayList() private var mNextStationIndex = 0 // 要到达站的index private val mTwoStationsRouts: MutableList = ArrayList() private val handler = Handler(Looper.getMainLooper(), Handler.Callback { msg -> @@ -113,7 +108,10 @@ object BusPassengerModel { mContext = context.applicationContext initListeners() queryDriverOperationStatus() - startOrStopOrderLoop(true) + BizLoopManager.setLoopFunction( + TAG_LOOP_QUERY_BIND_LINE, + LoopInfo(2, ::queryDriverSiteByCoordinate, scheduler = Schedulers.io()) + ) } fun setDriverStatusCallback(callback: IBusPassegerDriverStatusCallback?) { @@ -163,10 +161,10 @@ object BusPassengerModel { }) } - fun queryDriverSiteByCoordinate() { + private fun queryDriverSiteByCoordinate() { BusPassengerServiceManager.queryDriverSiteByCoordinate( - mContext!!, object : OchCommonServiceCallback { - override fun onSuccess(data: BusPassengerRoutesResponse) { + mContext!!, object : OchCommonServiceCallback { + override fun onSuccess(data: PM2RoutesResponse) { if (data.result == null) { d(M_BUS_P + TAG, "order = queryDriverSiteByCoordinate = null") if (routesResult != null) { @@ -175,7 +173,6 @@ object BusPassengerModel { } cleanStation("queryDriverSiteByCoordinate") mRouteLineInfoCallback?.showNoTaskView() - mRoutePoints.clear() return } if (routesResult != null && data.result.equals(routesResult)) { @@ -207,7 +204,7 @@ object BusPassengerModel { }) } - private fun updatePassengerRouteInfo(result: BusPassengerRoutesResult) { + private fun updatePassengerRouteInfo(result: BusRoutesResult) { if (mRouteLineInfoCallback != null) { d( M_BUS_P + TAG, @@ -255,7 +252,7 @@ object BusPassengerModel { } private fun updateAutopilotControlParameters( - busRoutesResult: BusPassengerRoutesResult, + busRoutesResult: BusRoutesResult, leaveIndex: Int ) { val parameters = initAutopilotControlParameters(busRoutesResult, leaveIndex) @@ -273,7 +270,7 @@ object BusPassengerModel { } private fun initAutopilotControlParameters( - busRoutesResult: BusPassengerRoutesResult, + busRoutesResult: BusRoutesResult, leaveIndex: Int ): AutopilotControlParameters? { if (busRoutesResult.sites == null) { @@ -311,7 +308,7 @@ object BusPassengerModel { fun release() { releaseListeners() cleanStation("release") - startOrStopOrderLoop(false) + BizLoopManager.removeLoopFunction(TAG_LOOP_QUERY_BIND_LINE) } fun setMoGoAutopilotPlanningListener(moGoAutopilotPlanningCallback: IBusPassengerAutopilotPlanningCallback?) { @@ -346,10 +343,7 @@ object BusPassengerModel { mMogoStatusChangedListener ) // 定位监听 - addListener(TAG, 10, mMapLocationListener) - - //2021.11.1 自动驾驶路线规划接口 - CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener) + addListener(TAG, 3, mMapLocationListener) //监听司机端消息 CallerTelematicListenerManager.addListener(TAG, mReceivedMsgListener) @@ -370,7 +364,6 @@ object BusPassengerModel { MogoAiCloudSocketManager.getInstance(mContext) .unregisterLifecycleListener(10010) CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener) - CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener) CallerTelematicListenerManager.removeListener(TAG) stopLoopAbnormalFactors() } @@ -474,8 +467,10 @@ object BusPassengerModel { override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { if (null == mogoLocation) return mLocation = mogoLocation - for (callback in mControllerStatusCallbackMap.values) { - callback.onCarLocationChanged(mogoLocation) + OCHThreadPoolManager.getsInstance().locationExecute { + for (callback in mControllerStatusCallbackMap.values) { + callback.onCarLocationChanged(mogoLocation) + } } } } @@ -513,86 +508,12 @@ object BusPassengerModel { ) { arriveAtEnd = true } - -// if (DebugConfig.isDebug()) { - // ToastUtils.showShort("到达目的地") -// } - mADASStatusCallback?.onAutopilotArriveEnd() } } - private val moGoAutopilotPlanningListener: IMoGoPlanningRottingListener = - object : IMoGoPlanningRottingListener { - override fun onAutopilotRotting(globalPathResp: GlobalPathResp?) { - globalPathResp?.wayPointsList?.let { - if (it.size > 0) { - d(M_BUS_P + TAG, "收到轨迹:${it.size}--第一个点${it[0]}--最后一个点:${it.last()}") - updateRoutePoints(it) - } - } - } - } - - fun updateRoutePoints(routePoints: List) { - mRoutePoints.clear() - val latLngModels: List = - coordinateConverterWgsToGcjLocations(mContext, routePoints) - mRoutePoints.addAll(latLngModels) - calculateTwoStationsRoute() - } - - private fun calculateTwoStationsRoute() { - //找出前往站对应的轨迹点,拿出两站点的集合 - d(M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size) - if (mRoutePoints.size > 0) { - if (mStations.size > 1) { //两个站点及以上要计算两个站点间的轨迹路线 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex - 1 >= 0) { - mTwoStationsRouts.clear() - val stationNext = mStations[mNextStationIndex] - val stationCur = mStations[mNextStationIndex - 1] - //当前站在轨迹中对应的点 - val currentRouteIndex = getArrivedPointIndexNew( - 0, mRoutePoints, stationCur.gcjLon, stationCur.gcjLat - ) - //要前往的站在轨迹中对应的点 - val nextRouteIndex = getArrivedPointIndexNew( - currentRouteIndex, mRoutePoints, stationNext.gcjLon, stationNext.gcjLat - ) - d( - M_BUS_P + TAG, - "轨迹排查==currentRouteIndex = " + currentRouteIndex - + ", nextRouteIndex = " + nextRouteIndex - ) - if (currentRouteIndex < nextRouteIndex) { //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 - mTwoStationsRouts.addAll( - mRoutePoints.subList( - currentRouteIndex, - nextRouteIndex + 1 - ) - ) - } - } - } - if (mTwoStationsRouts.size > 0) { - val sumLength = calculateRouteSumLength(mTwoStationsRouts) - SharedPrefsMgr.getInstance() - .putInt(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS, sumLength.toInt()) - mAutopilotPlanningCallback?.updateTotalDistance() - } - } - } - - private fun startOrStopOrderLoop(start: Boolean) { - d(M_BUS_P + TAG, "startOrStopOrderLoop() $start") - if (start) { - BusPassengerModelLoopManager.getInstance().startQueryDriverLineLoop() - } else { - BusPassengerModelLoopManager.getInstance().stopQueryDriverLineLoop() - } - } private fun setTrajectoryStation( - startStationInfo: BusPassengerStation, - endStationInfo: BusPassengerStation, + startStationInfo: BusStationBean, + endStationInfo: BusStationBean, lineId: Int ) { val startStation = MogoLocation() diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java deleted file mode 100644 index f10f9537c9..0000000000 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.mogo.och.bus.passenger.network; - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.bus.passenger.model.BusPassengerModel; - -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; -import io.reactivex.schedulers.Schedulers; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; -import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_DELAY; -import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_LINE_2S; -import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_LINE_1S; - -/** - * Created on 2021/11/22 - * - * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) - */ -public class BusPassengerModelLoopManager { - - private static final String TAG = BusPassengerModelLoopManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final BusPassengerModelLoopManager INSTANCE = new BusPassengerModelLoopManager(); - } - - public static BusPassengerModelLoopManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private Disposable mQueryLineDisposable; //心跳轮询 - - public void startQueryDriverLineLoop() { - if (mQueryLineDisposable != null && !mQueryLineDisposable.isDisposed()) { - return; - } - CallerLogger.i(M_BUS_P + TAG, "startQueryDriverLineLoop()"); - mQueryLineDisposable = Observable.interval(LOOP_DELAY, - LOOP_LINE_2S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> BusPassengerModel.INSTANCE.queryDriverSiteByCoordinate()); - } - - public void stopQueryDriverLineLoop() { - if (mQueryLineDisposable != null) { - CallerLogger.i(M_BUS_P + TAG, "stopQueryDriverLineLoop()"); - mQueryLineDisposable.dispose(); - mQueryLineDisposable = null; - } - } - -} diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java index f16f4c521d..e0b8add9a9 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java @@ -14,7 +14,6 @@ import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.bus.passenger.bean.BusPassengerStation; import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback; import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback; import com.mogo.och.bus.passenger.callback.IBusPassengerAutopilotPlanningCallback; @@ -80,12 +79,6 @@ public class BaseBusPassengerPresenter extends Presenter mView.onAutopilotStatusChanged( @@ -137,7 +130,7 @@ public class BaseBusPassengerPresenter extends Presenter stations, int currentStationIndex, boolean isArrived) { + public void updateStationsInfo(List stations, int currentStationIndex, boolean isArrived) { runOnUIThread(() -> mView.updateStationsInfo(stations,currentStationIndex, isArrived)); } @@ -161,8 +154,4 @@ public class BaseBusPassengerPresenter extends Presenter mView.updateRoutePlanningToNextStation(meters, timeInSecond)); } - @Override - public void updateTotalDistance() { -// runOnUIThread(() -> mView.setProgressBarMax()); - } } diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPStatusBarView.kt b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPStatusBarView.kt index 4bb0bd9403..0d99ce62ff 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPStatusBarView.kt +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPStatusBarView.kt @@ -2,22 +2,19 @@ package com.mogo.och.bus.passenger.ui import android.annotation.* import android.content.Context -import android.graphics.Color import android.util.AttributeSet import android.view.LayoutInflater import android.view.ViewGroup import androidx.constraintlayout.widget.ConstraintLayout -import chassis.ChassisStatesOuterClass -import com.mogo.eagle.core.function.api.autopilot.IMoGoBatteryManagementSystemListener import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener -import com.mogo.eagle.core.function.call.autopilot.CallerBatteryManagementSystemListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager import com.mogo.eagle.core.utilcode.kotlin.* -import com.mogo.eagle.core.utilcode.util.ClickUtils +import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.och.bus.passenger.R +import kotlinx.android.synthetic.main.p_bus_view_status_bar.view.tv_bus_b1_p_version import kotlinx.coroutines.* import me.jessyan.autosize.utils.AutoSizeUtils @@ -38,6 +35,8 @@ class BusPStatusBarView @JvmOverloads constructor( setBackgroundResource(R.drawable.bg_status_bar) isClickable = true isFocusable = true + + tv_bus_b1_p_version.text = "版本:${AppUtils.getAppVersionName()}" } diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt deleted file mode 100644 index 599b5bdfbc..0000000000 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.kt +++ /dev/null @@ -1,334 +0,0 @@ -package com.mogo.och.bus.passenger.ui - -import android.content.Context -import android.os.Bundle -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.widget.RelativeLayout -import com.amap.api.maps.AMap -import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.TextureMapView -import com.amap.api.maps.model.BitmapDescriptor -import com.amap.api.maps.model.BitmapDescriptorFactory -import com.amap.api.maps.model.CameraPosition -import com.amap.api.maps.model.CustomMapStyleOptions -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.Marker -import com.amap.api.maps.model.MarkerOptions -import com.amap.api.maps.model.Polyline -import com.amap.api.maps.model.PolylineOptions -import com.mogo.eagle.core.data.map.MogoLocation -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P -import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.utils.BusPassengerMapAssetStyleUtil - -/** - * 乘客屏小地图 - */ -class BusPassengerMapDirectionView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : RelativeLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, - IBusPassengerMapDirectionView, AMap.OnCameraChangeListener { - - companion object { - //小地图名称 - const val TAG = "BusPassengerMapDirectionView" - } - - private lateinit var mAMapNaviView: TextureMapView - private lateinit var mAMap: AMap - private var mPolyline: Polyline? = null - private val mLineMarkers: MutableList = ArrayList() - private lateinit var mCarMarker: Marker - - private val mLineStationLatLng: MutableList = ArrayList() //站点坐标数据 - var textureList: MutableList = ArrayList() - var texIndexList: MutableList = ArrayList() - private var mArrivedRes: BitmapDescriptor? = null - private var mUnArrivedRes: BitmapDescriptor? = null - - private val routeArrived: MutableList = ArrayList() - private val routeArriving: MutableList = ArrayList() - private var location: MogoLocation? = null - - init { - try { - initView(context) - } catch (e: Exception) { - e.printStackTrace() - } - } - - private fun initView(context: Context) { - d(M_BUS_P + TAG, "initView") - val smpView = LayoutInflater.from(context).inflate(R.layout.bus_p_map_view, this) - mAMapNaviView = smpView.findViewById(R.id.bus_p_line_amap_view) as TextureMapView - initAMapView() - - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) - } - - private fun initAMapView() { - mAMap = mAMapNaviView.map - // 设置导航地图模式,aMap是地图控制器对象。 - mAMap.mapType = AMap.MAP_TYPE_NIGHT - - // 关闭显示实时路况图层,aMap是地图控制器对象。 - mAMap.isTrafficEnabled = false - - // 设置 锚点 图标 - mCarMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_car)).anchor(0.5f, 0.5f)) - mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_arrived) - mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrow_un_arrive) - - // 加载自定义样式 - val customMapStyleOptions = CustomMapStyleOptions() - .setEnable(true) - .setStyleData( - BusPassengerMapAssetStyleUtil.getAssetsStyle( - context, "map_style.data" - ) - ) - .setStyleExtraData( - BusPassengerMapAssetStyleUtil.getAssetsExtraStyle( - context, "map_style_extra.data" - ) - ) - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions) - - // 设置地图的样式 - mAMap.uiSettings.apply { - isZoomControlsEnabled = false // 地图缩放级别的交换按钮 - setAllGesturesEnabled(true) // 所有手势 - isMyLocationButtonEnabled = false // 显示默认的定位按钮 - setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可 - } - - mAMap.setOnMapLoadedListener { - d(M_BUS_P + TAG, "smp---onMapLoaded") - // 加载自定义样式 - val options = CustomMapStyleOptions() - .setEnable(true) - .setStyleData( - BusPassengerMapAssetStyleUtil.getAssetsStyle( - context, "map_style.data" - ) - ) - .setStyleExtraData( - BusPassengerMapAssetStyleUtil.getAssetsExtraStyle( - context, "map_style_extra.data" - ) - ) - // 设置自定义样式 - mAMap.setCustomMapStyle(options) - mAMapNaviView.map.setPointToCenter( - mAMapNaviView.width / 2, - mAMapNaviView.height / 2 - ) - } - - //设置地图状态的监听接口 - mAMap.setOnCameraChangeListener(this) - } - -// override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { -// return true -// } - - override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { - if (mogoLocation == null) { - return - } - val currentLatLng = LatLng(mogoLocation.latitude, mogoLocation.longitude) - - //更新车辆位置 - mCarMarker.rotateAngle = (360 - mogoLocation.heading).toFloat() - mCarMarker.position = currentLatLng - mCarMarker.setToTop() - try { - //圈定地图显示范围 - val boundsBuilder = LatLngBounds.Builder() - routeArrived.forEach { - boundsBuilder.include(it) - } - routeArriving.forEach { - boundsBuilder.include(it) - } - mLineStationLatLng.forEach { - boundsBuilder.include(it) - } - boundsBuilder.include(currentLatLng) - mAMap.moveCamera( - CameraUpdateFactory.newLatLngBoundsRect( - boundsBuilder.build(), - 100, - 100, - 100, - 100 - ) - ) - } catch (e: Exception) { - e.printStackTrace() - } - } - - override fun drawablePolyline() { - if (routeArrived.isEmpty() && routeArriving.isEmpty()) { - d(SceneConstant.M_TAXI + TAG, "没有点") - return - } - try { - texIndexList.clear() - val allPoints = ArrayList(routeArrived) - for (i in routeArrived.indices) { - if (routeArrived.size > 1 && i < routeArrived.size - 1) { - texIndexList.add(0) - } - } - texIndexList.add(0) - location?.let { - allPoints.add(LatLng(it.latitude, it.longitude)) - } - allPoints.addAll(routeArriving) - for (ignored in routeArrived) { - texIndexList.add(1) - } - mPolyline?.let { - it.points = allPoints - it.options.customTextureIndex = texIndexList - return - } - if(textureList.isEmpty()) { - textureList.add(mArrivedRes) - textureList.add(mUnArrivedRes) - } - //设置线段纹理 - val polylineOptions = PolylineOptions().apply { - addAll(allPoints) - isUseTexture = true - width(15f) - lineCapType(PolylineOptions.LineCapType.LineCapRound) - customTextureList = textureList - customTextureIndex = texIndexList - } - - // 绘制线 - mPolyline = mAMap.addPolyline(polylineOptions) - } catch (e: Exception) { - e.printStackTrace() - } - } - - override fun clearPolyline() { - mPolyline?.remove() - mPolyline = null - } - - override fun setLineMarker() {} - - fun clearCoordinatesLatLng() { - textureList.clear() - texIndexList.clear() - routeArrived.clear() - routeArriving.clear() - mLineStationLatLng.clear() - d(M_BUS_P + TAG, " mCoordinatesLatLng.clear ") - } - - fun onCreateView(savedInstanceState: Bundle?) { - mAMapNaviView.onCreate(savedInstanceState) - } - - fun onResume() { - mAMapNaviView.onResume() - } - - fun onPause() { - mAMapNaviView.onPause() - } - - fun onDestroy() { - mAMapNaviView.onDestroy() - } - - fun setCoordinatesLatLng( - routeArrived: List, - routeArriving: List, - location: MogoLocation? - ) { - this.routeArrived.clear() - this.routeArrived.addAll(routeArrived) - this.routeArriving.clear() - this.routeArriving.addAll(routeArriving) - this.location = location - } - - fun clearLineMarkers() { - for (i in mLineMarkers.indices) { - mLineMarkers[i].isVisible = false - mLineMarkers[i].remove() - } - mLineMarkers.clear() - } - - fun setLinePointMarkerAndDraw(mLineStationsList: List, currentIndex: Int) { - clearLineMarkers() - mLineStationLatLng.clear() - mLineStationLatLng.addAll(mLineStationsList) - if (mLineStationsList.isNotEmpty()) { - // 起点marker, 终点marker, 过站marker, 未过站marker - val size = mLineStationsList.size - val mStartMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_start_point)) - ) - val mEndMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_end_point)) - ) - mStartMarker.position = mLineStationsList[0] - mLineMarkers.add(0, mStartMarker) - for (i in mLineStationsList.indices) { - if (currentIndex <= i && i < size - 1 && i > 0) { //未到达 - val unArrivedMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_unarrived_point)) - ) - unArrivedMarker.position = mLineStationsList[i] - mLineMarkers.add(i, unArrivedMarker) - } else if (i in 1 until currentIndex) { - val arrivedMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_arrived_point)) - ) - arrivedMarker.position = mLineStationsList[i] - mLineMarkers.add(i, arrivedMarker) - } - } - mEndMarker.position = mLineStationsList[size - 1] - mLineMarkers.add(size - 1, mEndMarker) - } - } - - override fun onCameraChange(cameraPosition: CameraPosition) { - } - - override fun onCameraChangeFinish(cameraPosition: CameraPosition) {} - -} \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index e576d70bc2..2c4f6750f7 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -16,21 +16,20 @@ import androidx.recyclerview.widget.RecyclerView; import com.amap.api.maps.model.LatLng; import com.elegant.utils.UiThreadHandler; -import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.hmi.ui.widget.DriverMonitorView; import com.mogo.commons.storage.SharedPrefsMgr; import com.mogo.och.bus.passenger.R; -import com.mogo.och.bus.passenger.adapter.BusPassengerLineStationsAdapter; -import com.mogo.och.bus.passenger.bean.BusPassengerStation; +import com.mogo.och.bus.passenger.ui.adapter.BusPassengerLineStationsAdapter; import com.mogo.och.bus.passenger.constant.BusPassengerConst; import com.mogo.och.bus.passenger.presenter.BaseBusPassengerPresenter; import com.mogo.och.bus.passenger.ui.layoutmanager.CenterLayoutManager; -import com.mogo.och.bus.passenger.utils.BPRouteDataTestUtils; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.wigets.MarqueeTextView; import com.mogo.och.common.module.wigets.OCHGradientTextView; +import com.mogo.och.data.bean.BusStationBean; +import com.mogo.och.common.module.wigets.mapdirectionview.MapDirectionView; import java.util.ArrayList; import java.util.List; @@ -44,14 +43,14 @@ public class BusPassengerRouteFragment extends public static final String TAG = "BusPassengerRouteFragment"; - private final List mStationsList = new ArrayList<>(); + private final List mStationsList = new ArrayList<>(); private OCHGradientTextView mSpeedTv; private ConstraintLayout mNoLineInfoView; private MarqueeTextView mLineName; private Group mRouteInfoView; private RecyclerView mStationsListRv; - private BusPassengerMapDirectionView mMapDirectionView; + private MapDirectionView mMapDirectionView; private BusPassengerLineStationsAdapter mAdapter; private TextView emptyTv; private AppCompatImageView mAutopilotIv; @@ -129,17 +128,6 @@ public class BusPassengerRouteFragment extends } }); - //测试 - if (DebugConfig.isDebug()){ - mSpeedTv.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - BPRouteDataTestUtils.converToRouteData(); - return false; - } - }); - } - mapAndLiveVideoView = findViewById(R.id.mapAndLiveVideoView); initLiveView(); @@ -324,7 +312,7 @@ public class BusPassengerRouteFragment extends * @param currentStationIndex * @param isArrived 是否到站并离开,true 到达当前站 currentStationIndex 未离开, false 正在前往此站 currentStationIndex */ - public void updateStationsInfo(List stations, int currentStationIndex, boolean isArrived) { + public void updateStationsInfo(List stations, int currentStationIndex, boolean isArrived) { updateArrivedStation(stations.get(currentStationIndex).getName(),currentStationIndex,isArrived); mStationsList.clear(); mStationsList.addAll(stations); @@ -345,7 +333,7 @@ public class BusPassengerRouteFragment extends } } - private void updateWayPointList(List stations,int currentStationIndex) { + private void updateWayPointList(List stations,int currentStationIndex) { List mLineStationsList = new ArrayList<>(); for (int i = 0; i< stations.size(); i++) {//站点集合 LatLng latLng = new LatLng(stations.get(i).getGcjLat(),stations.get(i).getGcjLon());// lat,lon diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/adapter/BusPassengerLineStationsAdapter.java similarity index 95% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java rename to OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/adapter/BusPassengerLineStationsAdapter.java index 2e50c6ddc0..cf4298c31a 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java +++ b/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/adapter/BusPassengerLineStationsAdapter.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.adapter; +package com.mogo.och.bus.passenger.ui.adapter; import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_ARRIVING; import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_LEAVING; @@ -16,9 +16,9 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.mogo.och.bus.passenger.R; -import com.mogo.och.bus.passenger.bean.BusPassengerStation; import com.mogo.och.common.module.utils.BlinkAnimationUtil; import com.mogo.och.common.module.wigets.MarqueeTextView; +import com.mogo.och.data.bean.BusStationBean; import java.util.List; @@ -29,9 +29,9 @@ import java.util.List; public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter { private Context mContext; - private List mStations; + private List mStations; - public BusPassengerLineStationsAdapter(Context context, List stations){ + public BusPassengerLineStationsAdapter(Context context, List stations){ this.mContext = context; this.mStations = stations; } @@ -46,7 +46,7 @@ public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter list = new ArrayList<>(); - - try { - JSONObject jsonObject = new JSONObject(jsonStr); - JSONArray jsonElements = jsonObject.getJSONArray("models"); - for (int i = 0; i < jsonElements.length(); i++) { - JSONObject s = jsonElements.getJSONObject(i); - MessagePad.Location.Builder builder = MessagePad.Location.newBuilder(); - builder.setLatitude(s.getDouble("latitude_")); - builder.setLongitude(s.getDouble("longitude_")); - list.add(builder.build()); - } - BusPassengerModel.INSTANCE.updateRoutePoints(list); - } catch (JSONException e) { - e.printStackTrace(); - } - } -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2OperationStatusResponse.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2OperationStatusResponse.java deleted file mode 100644 index 315ca0568e..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2OperationStatusResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态返回参数 - */ -public class PM2OperationStatusResponse extends BaseData { - - public Result data; - - public static class Result { - private String sn; //司机屏sn - private String phone; //司机手机号 - public String plateNumber; //车牌号 - public int driverStatus;//0:已收车,1:已出车 - } -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2QueryLineRequest.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2QueryLineRequest.java deleted file mode 100644 index ed7d4835c6..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2QueryLineRequest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.bean; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 根据车机行驶线路站点信息 - */ -class PM2QueryLineRequest { - - private String sn; - public PM2QueryLineRequest(String sn) { - this.sn = sn; - } -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2RoutesResult.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2RoutesResult.java deleted file mode 100644 index 89e77ee2f1..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2RoutesResult.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.bean; - -import java.util.List; -import java.util.Objects; - -/** - * 网约车小巴路线接口返回接口数据封装 - * - * @author tongchenfei - */ -public class PM2RoutesResult { - private List sites; - private int lineId; - private String name; //线路名称 - private int lineType; //线路类型,0:环形 - private String description; - private int status; - private String runningDur; //运营时间 - private long taskTime; //线路时间班次 - - public List getSites() { - return sites; - } - - public int getLineId() { - return lineId; - } - - public String getName() { - return name; - } - - public int getLineType() { - return lineType; - } - - public String getDescription() { - return description; - } - - public int getStatus() { - return status; - } - - public String getRunningDur() { - return runningDur; - } - - @Override - public String toString() { - return "BusPassengerRoutesResult{" + - "sites=" + sites + - ", lineId=" + lineId + - ", name='" + name + '\'' + - ", lineType=" + lineType + - ", description='" + description + '\'' + - ", status=" + status + - ", runningDur='" + runningDur + '\'' + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PM2RoutesResult that = (PM2RoutesResult) o; - return lineId == that.lineId - && lineType == that.lineType - && status == that.status - && sites.equals(that.sites) - && name.equals(that.name) - && runningDur.equals(that.runningDur); - } - - @Override - public int hashCode() { - return Objects.hash(sites, lineId, name, lineType, description, status, runningDur); - } -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2Station.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2Station.java deleted file mode 100644 index 78881be174..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/bean/PM2Station.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.bean; - -import java.util.Objects; - -/** - * 单个网约车小巴车站信息 - * - * @author wangmingjun - */ -public class PM2Station { - - private String name; - private String description; - private String cityCode; - private double lon; //高精坐标 - private double lat; //高精坐标 - private double gcjLon; //高德坐标 - private double gcjLat; //高德坐标 - private int businessType; //站点类型,9:taxi,10:bus - private int status; - private int siteId; - private int seq; - private int drivingStatus;//行驶信息,0初始值;1已经过;2当前站;3未到站 - private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 - private boolean leaving; - - public void setName(String name) { - this.name = name; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCityCode(String cityCode) { - this.cityCode = cityCode; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public void setBusinessType(int businessType) { - this.businessType = businessType; - } - - public void setStatus(int status) { - this.status = status; - } - - public void setSiteId(int siteId) { - this.siteId = siteId; - } - - public void setSeq(int seq) { - this.seq = seq; - } - - public void setDrivingStatus(int drivingStatus) { - this.drivingStatus = drivingStatus; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public String getCityCode() { - return cityCode; - } - - public double getGcjLon() { - return gcjLon; - } - - public double getGcjLat() { - return gcjLat; - } - - public int getBusinessType() { - return businessType; - } - - public int getStatus() { - return status; - } - - public int getSiteId() { - return siteId; - } - - public int getSeq() { - return seq; - } - - public int getDrivingStatus() { - return drivingStatus; - } - - public double getLon() { - return lon; - } - - public double getLat() { - return lat; - } - - public void setIfStop(int ifStop) { - this.ifStop = ifStop; - } - - public int getIfStop() { - return ifStop; - } - - public void setLeaving(boolean leaving) { - this.leaving = leaving; - } - - public boolean isLeaving() { - return leaving; - } - - @Override - public String toString() { - return "OchBusStation{" + - "name='" + name + '\'' + - ", description='" + description + '\'' + - ", cityCode='" + cityCode + '\'' + - ", lon=" + lon + - ", lat=" + lat + - ", businessType=" + businessType + - ", status=" + status + - ", siteId=" + siteId + - ", seq=" + seq + - ", drivingStatus=" + drivingStatus + - ", ifStop=" + ifStop + - ", leaving=" + leaving + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - PM2Station that = (PM2Station) o; - return Double.compare(that.lon, lon) == 0 - && Double.compare(that.lat, lat) == 0 - && Double.compare(that.gcjLon, gcjLon) == 0 - && Double.compare(that.gcjLat, gcjLat) == 0 - && businessType == that.businessType - && status == that.status - && siteId == that.siteId - && seq == that.seq - && drivingStatus == that.drivingStatus - && ifStop == that.ifStop - && leaving == that.leaving - && Objects.equals(name, that.name) - && Objects.equals(cityCode, that.cityCode); - } - - @Override - public int hashCode() { - return Objects.hash(name, description, cityCode, lon, lat, gcjLon, gcjLat, businessType, status, siteId, seq, drivingStatus, ifStop, leaving); - } -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2DrivingModel.kt b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2DrivingModel.kt index 3eff2a3f93..bedc3c1ed2 100644 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2DrivingModel.kt +++ b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2DrivingModel.kt @@ -16,40 +16,37 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.map.MogoLocation 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.telematic.IReceivedMsgListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager 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.telematic.CallerTelematicListenerManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.sendMsgToServer import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.Logger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.CoordinateUtils +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse import com.mogo.och.bus.passenger.constant.BusPassengerConst import com.mogo.och.bus.passenger.passenger.callback.AutoPilotStatusCallback import com.mogo.och.bus.passenger.passenger.callback.DrivingInfoCallback -import com.mogo.och.bus.passenger.passenger.model.PM2ServiceManager.driverAppSn -import com.mogo.och.bus.passenger.passenger.network.PM2ModelLoopManager import com.mogo.och.common.module.bean.dpmsg.* import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager.pushAppOperationalMsgBox import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.data.bean.BusRoutesResult import com.mogo.och.data.bean.BusStationBean import com.mogo.och.data.bean.BusTransferData -import io.reactivex.disposables.Disposable -import mogo.telematics.pad.MessagePad -import com.mogo.och.bus.passenger.passenger.bean.PM2OperationStatusResponse -import com.mogo.och.bus.passenger.passenger.bean.PM2RoutesResponse +import com.mogo.och.bus.passenger.bean.PM2RoutesResponse +import com.mogo.och.bus.passenger.network.BusPassengerServiceManager +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager +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.OCHThreadPoolManager import kotlin.math.abs /** @@ -64,23 +61,14 @@ class PM2DrivingModel private constructor() { private var mRoutePoints = mutableListOf() private var routesResult: BusRoutesResult? = null - private var mCurrentAutoStatus = -1 - var mStations = mutableListOf() private var mNextStationIndex = 0 // A-B要到达站的index private var isGoingToNextStation = false //是否前往下一站过程中 - private var mTwoStationsRouts = mutableListOf() - private var mPreRouteIndex = 0 - private var mWipePreIndex = 0 - private var mDrivingInfoCallback: DrivingInfoCallback? = null //行程信息 private var mAutoStatusCallback: AutoPilotStatusCallback? = null //自动驾驶状态 - private var operationStatus: PM2OperationStatusResponse.Result? = null - - @Volatile - private var globalPathTruncation: Disposable? = null + private var operationStatus: BusPassengerOperationStatusResponse.Result? = null private val handler = Handler(Handler.Callback { msg -> if (msg.what == MSG_QUERY_BUS_P_STATION) { @@ -92,18 +80,22 @@ class PM2DrivingModel private constructor() { companion object { val TAG = PM2DrivingModel::class.java.simpleName + val TAG_LOOP_QUERY_BIND_LINE = "${TAG}_TAG_LOOP_QUERY_BIND_LINE" const val MSG_QUERY_BUS_P_STATION = 1001 val INSTANCE: PM2DrivingModel by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { PM2DrivingModel() } } - fun init(context : Context){ + fun init(context: Context) { mContext = context initListener() queryDriverByLocalDriver() queryDriverOperationStatus() - startOrStopOrderLoop(true) + BizLoopManager.setLoopFunction( + TAG_LOOP_QUERY_BIND_LINE, + LoopInfo(2, ::queryDriverSiteByCoordinate) + ) } private fun queryDriverByLocalDriver() { @@ -117,17 +109,16 @@ class PM2DrivingModel private constructor() { CallerAutoPilotStatusListenerManager.addListener(TAG, mAutoPilotStatusListener) // 定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10,mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, mMapLocationListener) //司乘屏通信监听 - CallerTelematicListenerManager.addListener(TAG,mReceivedMsgListener) - - //自动驾驶轨迹监听 - CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener) + CallerTelematicListenerManager.addListener(TAG, mReceivedMsgListener) //网络监听 - IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + IntentManager.getInstance() + .registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + TrajectoryAndDistanceManager.addDistanceListener(TAG, trajectoryListener) } private fun sendMsgToServer(msg: String) { @@ -137,7 +128,7 @@ class PM2DrivingModel private constructor() { ) } - fun releaseListener(){ + fun releaseListener() { //自动驾驶状态监听 CallerAutoPilotStatusListenerManager.removeListener(TAG) @@ -146,64 +137,67 @@ class PM2DrivingModel private constructor() { CallerTelematicListenerManager.removeListener(TAG) - //自动驾驶轨迹监听 - CallerPlanningRottingListenerManager.removeListener(TAG) + TrajectoryAndDistanceManager.removeListener(TAG) + + BizLoopManager.removeLoopFunction(TAG_LOOP_QUERY_BIND_LINE) + + cleanStation("release") } - fun setDrivingInfoCallback(drivingInfoCallback : DrivingInfoCallback?){ + fun setDrivingInfoCallback(drivingInfoCallback: DrivingInfoCallback?) { mDrivingInfoCallback = drivingInfoCallback } - fun setAutoStatusCallback(autoPilotStatusCallback: AutoPilotStatusCallback?){ + fun setAutoStatusCallback(autoPilotStatusCallback: AutoPilotStatusCallback?) { mAutoStatusCallback = autoPilotStatusCallback } private val mNetWorkIntentListener = IMogoIntentListener { intentStr, _ -> - if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) { - if (NetworkUtils.isConnected(mContext)) { - queryDriverOperationStatus() - } + if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) { + if (NetworkUtils.isConnected(mContext)) { + queryDriverOperationStatus() } } + } private val mReceivedMsgListener: IReceivedMsgListener = - object : IReceivedMsgListener{ + object : IReceivedMsgListener { @RequiresApi(Build.VERSION_CODES.O) override fun onReceivedMsg(type: Int, byteArray: ByteArray) {//接收司机端发来的信息 - if (OchCommonConst.BUSINESS_STRING == type){ + if (OchCommonConst.BUSINESS_STRING == type) { val baseMsg = GsonUtils.fromJson(String(byteArray), BaseDPMsg::class.java) Logger.d( - SceneConstant.M_BUS_P + TAG, "onReceivedMsg = " + GsonUtils.toJson(baseMsg) + M_BUS_P + TAG, "onReceivedMsg = " + GsonUtils.toJson(baseMsg) ) if (baseMsg != null && baseMsg.type == DPMsgType.TYPE_COMMON.type) { val msg = GsonUtils.fromJson(String(byteArray), AppConnectMsg::class.java) - if (msg != null && msg.isPlay){ //播报 + if (msg != null && msg.isPlay) { //播报 speakTTS(msg.msg) } if (msg != null && msg.isViewShow) { //消息盒子显示内容 - pushAppOperationalMsgBox( - DateTimeUtil.getCurrentTimeStamp(),msg.msg) + pushAppOperationalMsgBox( + DateTimeUtil.getCurrentTimeStamp(), msg.msg + ) } - }else if (baseMsg != null && baseMsg.type == DPMsgType.TYPE_TASK_DETAILS.type) { + } else if (baseMsg != null && baseMsg.type == DPMsgType.TYPE_TASK_DETAILS.type) { val msg = GsonUtils.fromJson(String(byteArray), TaskDetailsMsg::class.java) - Logger.d( - SceneConstant.M_BUS_P + TAG, "onReceivedMsg = " + GsonUtils.toJson(msg) - ) + Logger.d(M_BUS_P + TAG, "onReceivedMsg = " + GsonUtils.toJson(msg)) if (msg == null || msg.msg?.isEmpty() == true) { updateLocalOrder() return } val result = GsonUtils.fromJson(msg.msg, BusTransferData::class.java) mDrivingInfoCallback?.changeOperationStatus(result.loginStatus == 1) - if (result != null && result.routesResult == null){ + if (result != null && result.routesResult == null) { updateLocalOrder() } if (routesResult == null || - (result != null && result.routesResult?.writeVersion!! > routesResult!!.writeVersion)) { + (result != null && result.routesResult?.writeVersion!! > routesResult!!.writeVersion) + ) { routesResult = result.routesResult updatePassengerRouteInfo(routesResult!!) } @@ -216,80 +210,60 @@ class PM2DrivingModel private constructor() { @RequiresApi(Build.VERSION_CODES.O) private fun speakTTS(msg: String) { - var mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager - var mAudioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) //设置声音的用途 - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //设置声音的类型 - .build() - var mAudioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 - .setAudioAttributes(mAudioAttributes) //设置声音属性 - .setAcceptsDelayedFocusGain(false) //设置接受延迟获取焦点,需要设置OnAudioFocusChangeListener来监听焦点的获取 + val mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager + val mAudioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) //设置声音的用途 + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //设置声音的类型 .build() + val mAudioFocusRequest = + AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 + .setAudioAttributes(mAudioAttributes) //设置声音属性 + .setAcceptsDelayedFocusGain(false) //设置接受延迟获取焦点,需要设置OnAudioFocusChangeListener来监听焦点的获取 + .build() mAudioManager.requestAudioFocus(mAudioFocusRequest) //抢占焦点 - AIAssist.getInstance(mContext).speakTTSVoiceWithLevel(msg,AIAssist.LEVEL0,object : IMogoVoiceCmdCallBack{ - override fun onSpeakEnd(speakText: String?) { - mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) - } + AIAssist.getInstance(mContext) + .speakTTSVoiceWithLevel(msg, AIAssist.LEVEL0, object : IMogoVoiceCmdCallBack { + override fun onSpeakEnd(speakText: String?) { + mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + } - override fun onSpeakError(speakText: String?, errorMsg: String?) { - mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) - } + override fun onSpeakError(speakText: String?, errorMsg: String?) { + mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + } - override fun onSpeakSelectTimeOut(speakText: String?) { - mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + override fun onSpeakSelectTimeOut(speakText: String?) { + mAudioManager.abandonAudioFocusRequest(mAudioFocusRequest) + } + }) + } + + private val trajectoryListener: IDistanceListener = object : IDistanceListener { + override fun distanceCallback(distance: Float) { + val lastTime = distance / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 //秒 + d(M_BUS_P + TAG, "轨迹排查==lastSumLength = $distance") + if (routesResult != null) { + for (site in routesResult!!.sites) { + if (site.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !site.isLeaving) { + return + } + } } - }) + mDrivingInfoCallback?.updateRemainMT(distance.toLong(), lastTime.toLong()) + } } private val mMapLocationListener: IMoGoChassisLocationGCJ02Listener = - object : IMoGoChassisLocationGCJ02Listener{ + object : IMoGoChassisLocationGCJ02Listener { override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { if (null == mogoLocation) return mLocation = mogoLocation - updateSpeed(mogoLocation) - } - } - - private val moGoAutopilotPlanningListener = object : IMoGoPlanningRottingListener{ - - @Synchronized - override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==globalPathResp = " + GsonUtils.toJson(globalPathResp)) - globalPathResp?.let { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==wayPointsSize = " + it.wayPointsList.size) - - if (globalPathTruncation != null && !globalPathTruncation!!.isDisposed) { - d(SceneConstant.M_BUS_P + TAG, "1s内不可以接受轨迹") - return@let - } - - globalPathTruncation = RxUtils.createSubscribe(1_000) { - d(SceneConstant.M_BUS_P + TAG, "可以接受轨迹") - } - d(SceneConstant.M_BUS_P + TAG, "接受轨迹中") - it.wayPointsList?.let {list-> - updateRoutePoints(list) + OCHThreadPoolManager.getsInstance().locationExecute { + updateSpeed(mogoLocation) } } } - } - - @Synchronized - fun updateRoutePoints(routePoints: List) { - mRoutePoints.clear() - val latLngModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjLocations(mContext, routePoints) - d(SceneConstant.M_BUS_P + TAG, "och-rotting==latLngModels = " + latLngModels.size) - mRoutePoints.addAll(latLngModels) - - if (isGoingToNextStation){ - mTwoStationsRouts.clear() - startRemainRouteInfo() - } - } - private fun updateSpeed(mogoLocation: MogoLocation) { // km/h val speedKM = (abs(mogoLocation.gnssSpeed) * 3.6f).toInt() @@ -302,17 +276,18 @@ class PM2DrivingModel private constructor() { override fun onAutopilotStatusResponse(state: Int) { super.onAutopilotStatusResponse(state) - d(SceneConstant.M_BUS_P+ TAG, "onAutopilotStatusResponse ===== $state") - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != state){ + d(M_BUS_P + TAG, "onAutopilotStatusResponse ===== $state") + if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != state) { //美化模式下且行程中 if (FunctionBuildConfig.isDemoMode && - mNextStationIndex>= 0 && mNextStationIndex <= mStations.size - 1 - && isGoingToNextStation){ + mNextStationIndex >= 0 && mNextStationIndex <= mStations.size - 1 + && isGoingToNextStation + ) { mAutoStatusCallback?.updateAutoStatus(true) - }else{//非美化模式下 + } else {//非美化模式下 mAutoStatusCallback?.updateAutoStatus(false) } - }else{//自驾状态 2 + } else {//自驾状态 2 mAutoStatusCallback?.updateAutoStatus(true) } } @@ -328,22 +303,21 @@ class PM2DrivingModel private constructor() { private fun queryDriverOperationStatus() { mContext?.let { - PM2ServiceManager.queryDriverOperationStatus( + BusPassengerServiceManager.queryDriverOperationStatus( it, - object : OchCommonServiceCallback { - override fun onSuccess(data: PM2OperationStatusResponse?) { + object : OchCommonServiceCallback { + override fun onSuccess(data: BusPassengerOperationStatusResponse?) { if (data?.data == null) return if (data.data.driverStatus != operationStatus?.driverStatus || data.data.plateNumber != operationStatus?.plateNumber ) { d( - SceneConstant.M_BUS_P + TAG, + M_BUS_P + TAG, "queryDriverOperationStatus ===== 车牌或者登陆状态有变更" ) mDrivingInfoCallback?.changeOperationStatus(data.data.driverStatus == 1) } - operationStatus = data.data as PM2OperationStatusResponse.Result -// mDrivingInfoCallback?.updatePlateNumber(data.data.plateNumber) + operationStatus = data.data as BusPassengerOperationStatusResponse.Result } override fun onError() { @@ -352,7 +326,6 @@ class PM2DrivingModel private constructor() { } else { ToastUtils.showShort(mContext!!.getString(R.string.request_error_tip)) } -// queryDriverOperationDelay() queryDriverByLocalDriver() } @@ -364,9 +337,9 @@ class PM2DrivingModel private constructor() { } } - fun queryDriverSiteByCoordinate(){ + private fun queryDriverSiteByCoordinate() { mContext?.let { - PM2ServiceManager.queryDriverSiteByCoordinate(it, + BusPassengerServiceManager.queryDriverSiteByCoordinate(it, object : OchCommonServiceCallback { override fun onSuccess(data: PM2RoutesResponse?) { @@ -374,19 +347,13 @@ class PM2DrivingModel private constructor() { if (routesResult != null) { routesResult = null updateLocalOrder() - d( - SceneConstant.M_BUS_P + TAG, - "queryDriverSiteByCoordinate= result is null" - ) + d(M_BUS_P + TAG, "queryDriverSiteByCoordinate= result is null") return } return } if (data.result != null && data.result.equals(routesResult)) { - d( - SceneConstant.M_BUS_P + TAG, - "queryDriverSiteByCoordinate= not update" - ) + d(M_BUS_P + TAG, "queryDriverSiteByCoordinate= not update") return } @@ -403,26 +370,22 @@ class PM2DrivingModel private constructor() { } override fun onError() { - d( - SceneConstant.M_BUS_P + TAG, - "queryDriverSiteByCoordinate = onError =" - + ", sn = " + driverAppSn - ) + d(M_BUS_P + TAG, "queryDriverSiteByCoordinate = onError = sn = " + BusPassengerServiceManager.driverAppSn) queryDriverByLocalDriver() } override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_BUS_P + TAG, "queryDriverSiteByCoordinate = %s", msg) + d(M_BUS_P + TAG, "queryDriverSiteByCoordinate = %s", msg) if (code == 1003) { queryDriverOperationDelay() + cleanStation("queryDriverSiteByCoordinate 1003") } - if (driverAppSn.isEmpty()) { + if (BusPassengerServiceManager.driverAppSn.isEmpty()) { return } if (code == 1003) { routesResult = null isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) return } } @@ -431,208 +394,91 @@ class PM2DrivingModel private constructor() { } } - private fun updateLocalOrder(){ + private fun updateLocalOrder() { mRoutePoints.clear() routesResult = null mNextStationIndex = 0 + cleanStation("queryDriverSiteByCoordinate") isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) mDrivingInfoCallback?.showNoTaskView(true) } - private fun updatePassengerRouteInfo(result: BusRoutesResult) { + private fun updatePassengerRouteInfo(result: BusRoutesResult?) { if (result == null) { updateLocalOrder() return } - if (routesResult != null && routesResult!!.lineId != result.lineId){ - d(SceneConstant.M_BUS_P+ TAG, "lineId change= clearCustomPolyline") + if (routesResult != null && routesResult!!.lineId != result.lineId) { + d(M_BUS_P + TAG, "lineId change= clearCustomPolyline") mDrivingInfoCallback?.clearCustomPolyline() } - d(SceneConstant.M_BUS_P+ TAG, "queryDriverSiteByCoordinate= update") + d(M_BUS_P + TAG, "queryDriverSiteByCoordinate= update") routesResult = result mDrivingInfoCallback?.updateLine(result.name, result.runningDur) - if (result.sites != null) { - mDrivingInfoCallback?.showNoTaskView(false) - val stations: List = result.sites - mStations.clear() - mStations.addAll(stations) - mDrivingInfoCallback?.updateLineStations(mStations) - for (i in stations.indices) { - val station: BusStationBean = stations[i] - if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED - && station.isLeaving && i + 1 < stations.size) { - mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i + 1, false) - d(SceneConstant.M_BUS_P+ TAG,"och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") -// if (mNextStationIndex != i + 1) { - d(SceneConstant.M_BUS_P+ TAG,"och-rotting--start ") - mTwoStationsRouts.clear() - startRemainRouteInfo() -// } - isGoingToNextStation = true - mNextStationIndex = i + 1 - return - } else if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) { - d(SceneConstant.M_BUS_P+ TAG,"och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") - d(SceneConstant.M_BUS_P+ TAG,"och-rotting--arrived ") - mPreRouteIndex = 0 - isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) - mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i, true) - return - }else{ -// d(SceneConstant.M_BUS_P+TAG,"och-rotting--BusStationBean = " + GsonUtils.toJson(station)) - } - } - } - - } - - fun loopRouteAndWipe(){ - if (mRoutePoints != null && mRoutePoints.size > 0 && mLocation != null) { - val haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndexNew( - mWipePreIndex, - mRoutePoints, - mLocation!! - ) - mWipePreIndex = haveArrivedIndex - d(SceneConstant.M_BUS_P + TAG, - "thread = " + Thread.currentThread().name + " haveArrivedIndex== " + haveArrivedIndex - ) -// if (mAutopilotPlanningCallback != null) { -// val routePoints = CoordinateCalculateRouteUtil -// .coordinateConverterLocationToLatLng(mContext, mRoutePoints) -// mAutopilotPlanningCallback.routeResult(routePoints, haveArrivedIndex) -// } - } - } - - private fun startRemainRouteInfo() { - //开启实时计算剩余距离,剩余时间,预计时间 - startOrStopCalculateRouteInfo(true) - } - - fun dynamicCalculateRouteInfo(){ - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - d(SceneConstant.M_BUS_P + TAG, "och-rotting==mTwoStationsRouts.size() = " + mTwoStationsRouts.size) - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - if (mTwoStationsRouts.size == 0) { - calculateTwoStationsRoute() - } - - if (mTwoStationsRouts.size > 0 && mLocation != null) { - val lastPointsMap = CoordinateCalculateRouteUtil - .getRemainPointListByCompareNew(mPreRouteIndex, mTwoStationsRouts, mLocation!!) - for (index in lastPointsMap.keys) { - mPreRouteIndex = index - break - } - for (lastPoints in lastPointsMap.values) { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastPoints.size() = " + lastPoints.size) - var lastSumLength = 0f - lastSumLength = if (lastPoints.size == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex >= 0) { - val stationNext: BusStationBean = mStations[mNextStationIndex] - CoordinateUtils.calculateLineDistance( - stationNext.gcjLon, stationNext.gcjLat, - mLocation!!.longitude, mLocation!!.latitude - ) - } else { - CoordinateUtils.calculateLineDistance( - lastPoints[0].longitude, lastPoints[0].latitude, - mLocation!!.longitude, mLocation!!.latitude - ) + if (result.sites != null) { + mDrivingInfoCallback?.showNoTaskView(false) + val stations: List = result.sites + mStations.clear() + mStations.addAll(stations) + mDrivingInfoCallback?.updateLineStations(mStations) + for (i in stations.indices) { + val station: BusStationBean = stations[i] + if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED + && station.isLeaving && i + 1 < stations.size + ) { + mDrivingInfoCallback?.updateStationsInfo( + stations as MutableList, + i + 1, + false + ) + d(M_BUS_P + TAG, "och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") + d(M_BUS_P + TAG, "och-rotting--start ") + isGoingToNextStation = true + mNextStationIndex = i + 1 + val startStation = mStations[i] + val endStation = mStations[i + 1] + setTrajectoryStation(startStation, endStation, result.lineId) + return + } else if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) { + d(M_BUS_P + TAG, "och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") + d(M_BUS_P + TAG, "och-rotting--arrived ") + if (i == stations.size - 1) { + cleanStation("updatePassengerRouteInfo最后一个站点") } + isGoingToNextStation = false + mDrivingInfoCallback?.updateStationsInfo( + stations as MutableList, + i, + true + ) + return } else { - CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints) - } - val lastTime = lastSumLength / BusPassengerConst.SHUTTLE_AVERAGE_SPEED * 3.6 //秒 - d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastSumLength = $lastSumLength") - mDrivingInfoCallback?.updateRemainMT( - lastSumLength.toLong(), - lastTime.toLong() - ) - } - } - } - - private fun calculateTwoStationsRoute() { - //找出前往站对应的轨迹点,拿出两站点的集合 - d(SceneConstant.M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size) - if (mRoutePoints.size > 0) { - if (mStations.size > 1) { //两个站点及以上要计算两个站点间的轨迹路线 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex - 1 >= 0) { - mTwoStationsRouts.clear() - val stationNext: BusStationBean = mStations[mNextStationIndex] - val stationCur: BusStationBean = mStations[mNextStationIndex - 1] - //当前站在轨迹中对应的点 - val currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( - 0, mRoutePoints, stationCur.gcjLon, stationCur.gcjLat - ) - //要前往的站在轨迹中对应的点 - val nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( - currentRouteIndex, - mRoutePoints, - stationNext.gcjLon, - stationNext.gcjLat - ) - - d(SceneConstant.M_BUS_P + TAG, "och-rotting==currentRouteIndex = " + currentRouteIndex - + ", nextRouteIndex = " + nextRouteIndex) - - if (currentRouteIndex < nextRouteIndex) { //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 - mTwoStationsRouts.addAll( - mRoutePoints.subList( - currentRouteIndex, - nextRouteIndex + 1 - ) - ) - } } } } + } - /** - * 开始轮询计算剩余里程和时间 - * @param isStart - */ - fun startOrStopCalculateRouteInfo(isStart: Boolean) { - d(SceneConstant.M_BUS_P+ TAG, "startOrStopCalculateRouteInfo() $isStart") - if (isStart) { - PM2ModelLoopManager.startCalculateRouteInfoLoop() - } else { - mTwoStationsRouts.clear() - PM2ModelLoopManager.stopCalculateRouteInfLoop() - } + private fun setTrajectoryStation( + startStationInfo: BusStationBean, + endStationInfo: BusStationBean, + lineId: Int + ) { + val startStation = MogoLocation() + startStation.longitude = startStationInfo.gcjLon + startStation.latitude = startStationInfo.gcjLat + val endStation = MogoLocation() + endStation.longitude = endStationInfo.gcjLon + endStation.latitude = endStationInfo.gcjLat + TrajectoryAndDistanceManager.setStationPoint(startStation, endStation, lineId.toLong()) } - /** - * 实时轨迹擦除 - * @param isStart - */ - private fun startOrStopRouteAndWipe(isStart: Boolean) { - if (isStart) { - PM2ModelLoopManager.startOrStopRouteAndWipe() - } else { - mWipePreIndex = 0 - PM2ModelLoopManager.stopOrStopRouteAndWipe() - } - } - - private fun startOrStopOrderLoop(start: Boolean) { - d(SceneConstant.M_BUS_P + TAG, "startOrStopOrderLoop() $start") - if (start) { - PM2ModelLoopManager.startQueryDriverLineLoop() - } else { - PM2ModelLoopManager.stopQueryDriverLineLoop() - } + private fun cleanStation(type: String) { + d(M_BUS_P + TAG, "清理站点:$type") + TrajectoryAndDistanceManager.setStationPoint(null, null, -1L) } } \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2ServiceManager.kt b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2ServiceManager.kt deleted file mode 100644 index 1288b4a06e..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/model/PM2ServiceManager.kt +++ /dev/null @@ -1,108 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.model - -import android.content.Context -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken -import com.mogo.cloud.passport.MoGoAiCloudClientConfig -import com.mogo.commons.debug.DebugConfig -import com.mogo.eagle.core.network.MoGoRetrofitFactory -import com.mogo.commons.storage.SharedPrefsMgr -import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest -import com.mogo.och.bus.passenger.passenger.bean.PM2OperationStatusResponse -import com.mogo.och.bus.passenger.passenger.bean.PM2RoutesResponse -import com.mogo.och.bus.passenger.passenger.network.PassengerSAASServiceApi -import com.mogo.och.bus.passenger.passenger.network.PassengerServiceApi -import com.mogo.och.common.module.biz.constant.OchCommonConst -import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl -import com.mogo.och.common.module.biz.network.interceptor.transformTry - -/** - * Created on 2022/3/31 - */ -object PM2ServiceManager { - - private var mBusPassengerSaasServiceApi = - MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(PassengerSAASServiceApi::class.java) - - private var mBusPassengerServiceApi = - MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(PassengerServiceApi::class.java) - - - private var driverSnCache = "" - /** - * 获取Bus司机端的sn - * @return - */ - public val driverAppSn: String - get(){ - val serverToken = getServerToken() - if (serverToken != driverSnCache && serverToken.isNotEmpty()) { - driverSnCache = serverToken - } - return driverSnCache - } - - /** - * 查询绑定行驶的小巴车路线 - * @param context - * @param callback - */ - @JvmStatic - fun queryDriverSiteByCoordinate( - context: Context, callback: OchCommonServiceCallback? - ) { - if (DebugConfig.getProjectFlavor().contains("saas")){ - mBusPassengerSaasServiceApi.queryDriverSiteByCoordinate( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - SharedPrefsMgr.getInstance().token, - driverAppSn - ).transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate")) - }else{ - mBusPassengerServiceApi.queryDriverSiteByCoordinate( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - SharedPrefsMgr.getInstance().token, - BusPassengerQueryLineRequest( - driverAppSn - ) - ).transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate")) - } - }//2023-12-07 10:13:32 - - /** - * 查询司机端出车收车状态,以及车牌号 - * @param context - * @param callback - */ - @JvmStatic - fun queryDriverOperationStatus( - context: Context, - callback: OchCommonServiceCallback? - ) { - mBusPassengerServiceApi.queryDriverOperationStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - SharedPrefsMgr.getInstance().token, - driverAppSn - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus=sn =$driverAppSn")) - if (DebugConfig.getProjectFlavor().contains("saas")){ - mBusPassengerSaasServiceApi.queryDriverOperationStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - SharedPrefsMgr.getInstance().token, - driverAppSn - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus")) - }else{ - mBusPassengerServiceApi.queryDriverOperationStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - SharedPrefsMgr.getInstance().token, - driverAppSn - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus")) - } - } -} \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PM2ModelLoopManager.kt b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PM2ModelLoopManager.kt deleted file mode 100644 index adede242a0..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PM2ModelLoopManager.kt +++ /dev/null @@ -1,127 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.network - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.bus.passenger.constant.BusPassengerConst -import com.mogo.och.bus.passenger.passenger.model.PM2DrivingModel -import io.reactivex.Observable -import io.reactivex.ObservableOnSubscribe -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.disposables.Disposable -import io.reactivex.schedulers.Schedulers -import java.util.concurrent.TimeUnit - -/** - * @author: wangmingjun - * @date: 2023/2/1 - */ -object PM2ModelLoopManager { - - private val TAG: String = PM2ModelLoopManager::class.java.getSimpleName() - - private var mQueryLineDisposable: Disposable? = null //心跳轮询 - private var mRouteWipeDisposable: CompositeDisposable? = null //估计擦除 - private var mCalculateRouteDisposable: CompositeDisposable? = null //每隔2s计算一次剩余里程和时间 - - - fun startOrStopRouteAndWipe() { - i(SceneConstant.M_BUS_P + TAG, "startOrStopRouteWipe()") - if (mRouteWipeDisposable != null) return - if (mRouteWipeDisposable == null) { - mRouteWipeDisposable = CompositeDisposable() - } - val disposable = startLoopRouteAndWipe() - .doOnSubscribe { } - .doOnError { } - .delay( - BusPassengerConst.LOOP_LINE_1S, - TimeUnit.MILLISECONDS, - true - ) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { } - mRouteWipeDisposable!!.add(disposable) - } - - fun stopOrStopRouteAndWipe() { - if (mRouteWipeDisposable != null) { - mRouteWipeDisposable!!.dispose() - mRouteWipeDisposable = null - } - } - - fun startQueryDriverLineLoop() { - if (mQueryLineDisposable != null && !mQueryLineDisposable!!.isDisposed) { - return - } - i(SceneConstant.M_BUS_P + TAG, "startQueryDriverLineLoop()") - mQueryLineDisposable = Observable.interval( - BusPassengerConst.LOOP_DELAY, - BusPassengerConst.LOOP_LINE_2S, TimeUnit.MILLISECONDS - ) - .map { aLong: Long -> aLong + 1 } - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { aLong: Long? -> - PM2DrivingModel.INSTANCE.queryDriverSiteByCoordinate() - } - } - - fun stopQueryDriverLineLoop() { - if (mQueryLineDisposable != null) { - i(SceneConstant.M_BUS_P + TAG, "stopQueryDriverLineLoop()") - mQueryLineDisposable!!.dispose() - mQueryLineDisposable = null - } - } - - fun startCalculateRouteInfoLoop() { - i(SceneConstant.M_BUS_P + TAG, "startCalculateRouteInfoLoop()") - if (mCalculateRouteDisposable != null) return - if (mCalculateRouteDisposable == null) { - mCalculateRouteDisposable = CompositeDisposable() - } - val disposable = startLoopCalculateRouteInfo() - .doOnSubscribe { } - .doOnError { } - .delay( - BusPassengerConst.LOOP_LINE_2S, - TimeUnit.MILLISECONDS, - true - ) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { } - mCalculateRouteDisposable!!.add(disposable) - } - - fun stopCalculateRouteInfLoop() { - if (mCalculateRouteDisposable != null) { - i(SceneConstant.M_BUS_P + TAG, "stopCalculateRouteInfLoop()") - mCalculateRouteDisposable!!.dispose() - mCalculateRouteDisposable = null - } - } - - private fun startLoopRouteAndWipe(): Observable { - return Observable.create(ObservableOnSubscribe { emitter -> - if (emitter.isDisposed) return@ObservableOnSubscribe - PM2DrivingModel.INSTANCE.loopRouteAndWipe() - emitter.onComplete() - }) - } - - private fun startLoopCalculateRouteInfo(): Observable { - return Observable.create(ObservableOnSubscribe { emitter -> - if (emitter.isDisposed) return@ObservableOnSubscribe - PM2DrivingModel.INSTANCE.dynamicCalculateRouteInfo() - emitter.onComplete() - }) - } -} \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PM2ServiceApi.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PM2ServiceApi.java deleted file mode 100644 index 1b2b778829..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PM2ServiceApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.network; - -import com.mogo.och.bus.passenger.passenger.bean.PM2OperationStatusResponse; -import com.mogo.och.bus.passenger.passenger.bean.PM2QueryLineRequest; -import com.mogo.och.bus.passenger.passenger.bean.PM2RoutesResponse; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; - -/** - * Created on 2022/3/31 - * - * Bus乘客端接口定义 - */ -public interface PM2ServiceApi { - /** - * 查询bus司机端绑定路线 - * @return 接口返回数据 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/och-shuttle-cabin/api/business/v1/passenger/lineDataWithDriver/query" ) - Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Body PM2QueryLineRequest request); - - /** - * 查询司机端的登陆状态 - * @param sn - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @GET("/autopilot-car-hailing/car/v2/driver/bus/passenger/takeOrderStatus/query") - @GET("/och-shuttle-cabin/api/business/v1/passenger/loginStatus") - Observable queryDriverOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); - - -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PassengerSAASServiceApi.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PassengerSAASServiceApi.java deleted file mode 100644 index b19cb287f2..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PassengerSAASServiceApi.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.network; - -import com.mogo.och.bus.passenger.passenger.bean.PM2OperationStatusResponse; -import com.mogo.och.bus.passenger.passenger.bean.PM2RoutesResponse; - -import io.reactivex.Observable; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.Query; - -/** - * Created on 2022/3/31 - * - * Bus乘客端接口定义 - */ -public interface PassengerSAASServiceApi { - /** - * 查询bus司机端绑定路线 - * @return 接口返回数据 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/line/v2/driver/bus/passenger/lineDataWithDriver/query" ) - @GET( "/och-bus-cabin/api/business/v1/driver/bus/lineDataWithDriver/query" ) - Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); - - /** - * 查询司机端的登陆状态 - * @param sn - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @GET("/autopilot-car-hailing/operation/v1/driver/bus/passenger/loginStatus") - @GET("/och-bus-cabin/api/business/v1/loginStatus") - Observable queryDriverOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); - - -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PassengerServiceApi.java b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PassengerServiceApi.java deleted file mode 100644 index 836f4fd22f..0000000000 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/network/PassengerServiceApi.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.och.bus.passenger.passenger.network; - -import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest; -import com.mogo.och.bus.passenger.passenger.bean.PM2OperationStatusResponse; -import com.mogo.och.bus.passenger.passenger.bean.PM2RoutesResponse; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; - -/** - * Created on 2022/3/31 - * - * Bus乘客端接口定义 - */ -public interface PassengerServiceApi { - /** - * 查询bus司机端绑定路线 - * @return 接口返回数据 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/line/v2/driver/bus/passenger/lineDataWithDriver/query" ) - Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Body BusPassengerQueryLineRequest request); - - /** - * 查询司机端的登陆状态 - * @param sn - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @GET("/autopilot-car-hailing/car/v2/driver/bus/passenger/takeOrderStatus/query") - @GET("/autopilot-car-hailing/operation/v1/driver/bus/passenger/loginStatus") - Observable queryDriverOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); - - -} diff --git a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/ui/PM2BaseFragment.kt b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/ui/PM2BaseFragment.kt index 8a0a0d62c9..fc4107035f 100644 --- a/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/ui/PM2BaseFragment.kt +++ b/OCH/bus/passenger/src/main/java/m2/com/mogo/och/bus/passenger/passenger/ui/PM2BaseFragment.kt @@ -1,9 +1,11 @@ package com.mogo.och.bus.passenger.passenger.ui import com.mogo.commons.mvp.MvpFragment +import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.passenger.presenter.PM2Presenter import com.mogo.och.common.module.wigets.media.MediaPlayerFragment +import kotlinx.android.synthetic.main.bus_p_m2_fragment.tv_bug_b2_p_version /** * @author: wangmingjun @@ -27,7 +29,7 @@ class PM2BaseFragment : override fun initViews() { //横竖屏 // setScreenDirection() - + tv_bug_b2_p_version.text = "版本:${AppUtils.getAppVersionName()}" //隐藏小地图 initFragment() } diff --git a/OCH/bus/passenger/src/main/res/jinlv/layout/bus_p_route_fragment.xml b/OCH/bus/passenger/src/main/res/jinlv/layout/bus_p_route_fragment.xml index a92d7350f4..44589aa303 100644 --- a/OCH/bus/passenger/src/main/res/jinlv/layout/bus_p_route_fragment.xml +++ b/OCH/bus/passenger/src/main/res/jinlv/layout/bus_p_route_fragment.xml @@ -277,10 +277,12 @@ - diff --git a/OCH/bus/passenger/src/main/res/jinlv/layout/p_bus_view_status_bar.xml b/OCH/bus/passenger/src/main/res/jinlv/layout/p_bus_view_status_bar.xml index fef63bbd25..88c228c4f3 100644 --- a/OCH/bus/passenger/src/main/res/jinlv/layout/p_bus_view_status_bar.xml +++ b/OCH/bus/passenger/src/main/res/jinlv/layout/p_bus_view_status_bar.xml @@ -1,48 +1,57 @@ + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> + + + app:layout_constraintTop_toTopOf="parent" /> + android:layout_marginStart="@dimen/dp_40" + android:src="@drawable/bus_p_blue_tooth_open" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@+id/wifiStateView" + app:layout_constraintTop_toTopOf="parent" /> - - - + app:layout_constraintStart_toEndOf="@+id/blueToothView" + android:layout_marginStart="@dimen/dp_37" + android:textSize="@dimen/dp_18" + android:textColor="@color/bus_p_m2_color_17417B" + android:layout_width="wrap_content" + android:layout_height="wrap_content"/> \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/res/m2/layout/bus_p_m2_fragment.xml b/OCH/bus/passenger/src/main/res/m2/layout/bus_p_m2_fragment.xml index 2944a93384..eec79bba1e 100644 --- a/OCH/bus/passenger/src/main/res/m2/layout/bus_p_m2_fragment.xml +++ b/OCH/bus/passenger/src/main/res/m2/layout/bus_p_m2_fragment.xml @@ -137,7 +137,7 @@ android:layout_height="@dimen/dp_30"/> - + + \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/res/m2/values/colors.xml b/OCH/bus/passenger/src/main/res/m2/values/colors.xml deleted file mode 100644 index 3c583e6cd4..0000000000 --- a/OCH/bus/passenger/src/main/res/m2/values/colors.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - #FFFFFF - #0B1E38 - #BBDAFB - #0B1E38 - #5D7199 - #A5D8FF - #1B2546 - #23355D - #8895B7 - - - #C8EFFF - #203555 - #17417B - #2D3E5F - #34A61F - #AEEDB8 - #43CEFE - #1466FB - #7094AD - - #99AFC9E7 - #6617417B - \ No newline at end of file diff --git a/OCH/bus/passenger/src/main/res/jinlv/values/colors.xml b/OCH/bus/passenger/src/main/res/values/colors.xml similarity index 63% rename from OCH/bus/passenger/src/main/res/jinlv/values/colors.xml rename to OCH/bus/passenger/src/main/res/values/colors.xml index 4bcd3db004..9011d8750f 100644 --- a/OCH/bus/passenger/src/main/res/jinlv/values/colors.xml +++ b/OCH/bus/passenger/src/main/res/values/colors.xml @@ -1,5 +1,29 @@ + #FFFFFF + #0B1E38 + #BBDAFB + #0B1E38 + #5D7199 + #A5D8FF + #1B2546 + #23355D + #8895B7 + + + #C8EFFF + #203555 + #17417B + #2D3E5F + #34A61F + #AEEDB8 + #43CEFE + #1466FB + #7094AD + + #99AFC9E7 + #6617417B + #80FFFFFF #5D7199 #CCE9EFFC #C7D2E1 diff --git a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt index afa4cbcab6..a79fd261cc 100644 --- a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt +++ b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/model/DriverM1Model.kt @@ -112,7 +112,7 @@ class DriverM1Model { fun init(context: Context) { mContext = context // 定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 5, mMapLocationListener) //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener) @@ -365,7 +365,9 @@ class DriverM1Model { //是否到站的围栏判断 自动驾驶还未触发到站 if (!isArrivedStation) { - judgeArrivedStation(gnssInfo) + OCHThreadPoolManager.getsInstance().locationExecute { + judgeArrivedStation(gnssInfo) + } } } } diff --git a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt index 8800dd29b6..77be38100c 100644 --- a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt +++ b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt @@ -19,8 +19,11 @@ import android.view.View import android.view.animation.DecelerateInterpolator import com.magic.mogo.och.charter.R import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.ConvertUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager import me.jessyan.autosize.AutoSizeConfig import me.jessyan.autosize.utils.AutoSizeUtils @@ -93,6 +96,9 @@ class SlidePanelView @JvmOverloads constructor( textGradient!!.setLocalMatrix(gradientMatrix) textPaint.shader = textGradient textPaint.getFontMetrics(blockTextMetrics) + decodeImage() + } + fun decodeImage(){ ThreadUtils.getIoPool().execute { val size = AutoSizeUtils.dp2px(context, 120f) val opts = BitmapFactory.Options() @@ -227,13 +233,24 @@ class SlidePanelView @JvmOverloads constructor( ) canvas.restore() // 画滑块 - - canvas.drawBitmap( - bmBlock!!, - (BLOCK_START_X + blockOffset).toFloat(), - BLOCK_START_Y.toFloat(), - blockPaint - ) + bmBlock?.let { + if(it.byteCount >=5*1024*1024){ + OchChainLogManager.writeChainLog("崩溃兜底策略", + "图片大小监听"+ ConvertUtils.byte2FitMemorySize(it.byteCount.toLong()),true,OchChainLogManager.EVENT_KEY_INFE_ERROR); + it.recycle(); + bmBlock = null; + blockWidth = 0; + decodeImage(); + }else { + // 画滑块 + canvas.drawBitmap( + bmBlock!!, + (BLOCK_START_X + blockOffset).toFloat(), + BLOCK_START_Y.toFloat(), + blockPaint + ) + } + } } } diff --git a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/carstatus/CarStatusViewModel.kt b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/carstatus/CarStatusViewModel.kt index c64e42e8b9..b1599270e4 100644 --- a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/carstatus/CarStatusViewModel.kt +++ b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/carstatus/CarStatusViewModel.kt @@ -29,7 +29,7 @@ class CarStatusViewModel: ViewModel(), IMoGoAutopilotStatusListener, fun setAutopilotStatusCallback(viewCallback:ICarStatusCallback){ this.viewCallback = viewCallback - CallerChassisLocationGCJ02ListenerManager.addListener(DriverM1Model.TAG, 10, this) + CallerChassisLocationGCJ02ListenerManager.addListener(DriverM1Model.TAG, 3, this) } interface ICarStatusCallback{ diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt index bf06c1f154..8d27ffc4ea 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/CharterPassengerModel.kt @@ -31,6 +31,7 @@ import com.mogo.och.charter.passenger.callback.* import com.mogo.och.charter.passenger.constant.CharterPassengerConst import com.mogo.och.common.module.manager.loopmanager.BizLoopManager import com.mogo.och.charter.passenger.net.BusPassengerServiceManager +import com.mogo.och.charter.passenger.utils.CharterVoiceManager import com.mogo.och.common.module.wigets.toast.ToastCharterUtils import com.mogo.och.charter.passenger.utils.VoiceFocusManager import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg @@ -49,7 +50,6 @@ import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.PinYinUtil import com.mogo.och.common.module.utils.RxUtils -import com.mogo.och.common.module.voice.VoiceManager import com.mogo.och.common.module.voice.VoiceNotice import io.reactivex.Observable import io.reactivex.disposables.Disposable @@ -578,7 +578,7 @@ object CharterPassengerModel { AbsMogoApplication.getApp() .getString(R.string.charter_p_end_order_15min), 2 ) - VoiceManager.surplus15min(VoiceFocusManager.getVoiceCmdCallBack()) + CharterVoiceManager.surplus15min(VoiceFocusManager.getVoiceCmdCallBack()) d(M_BUS_P + TAG, "倒计时15分钟${it.orderNo}") SharedPrefsMgr.getInstance() .putBoolean("${it.orderNo}$min5Speak", true) @@ -980,7 +980,7 @@ object CharterPassengerModel { if (order != null && lineId != null && siteId != null) { OchChainLogManager.writeChainLog(this.orderInfo.toString(),"到站成功:${order.siteName}") BeautifyManager.notifyViewChange(BeautifyManager.ChangeTypeEnum.ARRIVED_DEST) - VoiceManager.arrivedStation( + CharterVoiceManager.arrivedStation( order.siteName!!, order.siteNameKr ?: "", VoiceFocusManager.getVoiceCmdCallBack() @@ -1119,7 +1119,7 @@ object CharterPassengerModel { fun leaveStation() { orderInfo?.siteName?.let { cn -> - VoiceManager.leaveStation( + CharterVoiceManager.leaveStation( cn, orderInfo?.siteNameKr ?: "", VoiceFocusManager.getVoiceCmdCallBack() diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt new file mode 100644 index 0000000000..bfbbf2244c --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt @@ -0,0 +1,81 @@ +package com.mogo.och.charter.passenger.model + +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.utilcode.util.TAG +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable + +object MusicModel : IMoGoAutopilotStatusListener, IOrderStatusChangeListener { + init { + CharterPassengerModel.setStatusChangeListener(TAG,this) + //自动驾驶状态监听 + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + } + + private var stopMusicDisposable: Disposable? = null + + private const val startMusicWithOrderKey = "STARTMUSICWITHORDER" + + + override fun onAutopilotStatusResponse(state: Int) { + if(state==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + val string = SharedPrefsMgr.getInstance().getString(startMusicWithOrderKey) + if (string == null) { + CharterPassengerModel.getCurrentOrderInfo()?.let { + RxUtils.disposeSubscribe(stopMusicDisposable) + SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo) + AuditionManager.musicList.forEach {music-> + if(music.state==PlayState.Pause){ + AuditionManager.toggle(music) + return + } + } + if(!AuditionManager.isPlaying()) { + AuditionManager.playFirst() + } + } + } else { + CharterPassengerModel.getCurrentOrderInfo()?.let { + if (it.orderNo != string) { + RxUtils.disposeSubscribe(stopMusicDisposable) + SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo) + AuditionManager.musicList.forEach {music-> + if(music.state==PlayState.Pause){ + AuditionManager.toggle(music) + return + } + } + if(!AuditionManager.isPlaying()) { + AuditionManager.playFirst() + } + } + } + } + } + } + + fun load() { + + } + + override fun onStatusChange(currentStatus: OrderStatusEnum) { + when (currentStatus) { + OrderStatusEnum.NoOrderUse -> { + CharterPassengerModel.getCurrentOrderInfo()?.let { + RxUtils.disposeSubscribe(stopMusicDisposable) + stopMusicDisposable = RxUtils.createSubscribe(60_000) { + AuditionManager.stop() + } + } + } + else ->{ + + } + } + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt index 2fd138c7a3..95bb001ece 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt @@ -41,6 +41,7 @@ import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_selectline import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_softcontrol import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_video import kotlinx.android.synthetic.main.charter_p_main_fragment.mapBizView +import kotlinx.android.synthetic.main.charter_p_main_fragment.mcv_play_music import kotlinx.android.synthetic.main.charter_p_main_fragment.omvOverMap //import kotlinx.android.synthetic.main.charter_p_main_fragment.viewBusPM1MsgBoxBubble //import kotlinx.android.synthetic.main.charter_p_main_fragment.viewBusPM1MsgBoxButton @@ -140,6 +141,7 @@ class MainFragment : MvpFragment(), IMogo BottomBar.SelectView.SETTING -> showBizView(softControl = true) BottomBar.SelectView.LINE -> showBizView(selectLine = true) BottomBar.SelectView.VIDEO -> showBizView(showVideo = true) + BottomBar.SelectView.MUSIC -> showBizView(showMusic = true) else -> { showBizView() statusBarView?.setBackgroudColor(R.color.charter_p_80ffffff) @@ -178,7 +180,8 @@ class MainFragment : MvpFragment(), IMogo orderinfo: Boolean = false, softControl: Boolean = false, selectLine: Boolean = false, - showVideo: Boolean = false + showVideo: Boolean = false, + showMusic: Boolean = false ) { if (orderinfo) { biz_orderinfo.visibility = View.VISIBLE @@ -204,6 +207,12 @@ class MainFragment : MvpFragment(), IMogo } else { biz_video.visibility = View.GONE } + if(showMusic) { + mcv_play_music.visibility = View.VISIBLE + statusBarView?.setBackgroudColor(R.color.charter_p_40ffffff) + }else{ + mcv_play_music.visibility = View.GONE + } } fun setCarModel(rawInfo: Int) { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt index b9e2224053..ee37d2f090 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt @@ -9,6 +9,7 @@ import com.mogo.och.charter.passenger.R import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.aciv_center_image import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_close_door import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_line +import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_music import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_open_door import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_setting import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_stop_site @@ -40,6 +41,10 @@ class BottomBar @JvmOverloads constructor( actv_line.onClick { setCheckIndex(SelectView.LINE) } + actv_music.onClick { + + setCheckIndex(SelectView.MUSIC) + } } fun setCheckChangeListener(overMapViewApply:ApplyClickLintener){ this.overMapViewApply = overMapViewApply @@ -79,11 +84,16 @@ class BottomBar @JvmOverloads constructor( }else{ actv_line.setCheckItem(false) } + if(checkIndex == SelectView.MUSIC){ + actv_music.setCheckItem(true) + }else{ + actv_music.setCheckItem(false) + } } enum class SelectView{ - NONE,ORDERINFO,SETTING,LINE,VIDEO + NONE,ORDERINFO,SETTING,LINE,VIDEO,MUSIC } interface ApplyClickLintener{ diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt new file mode 100644 index 0000000000..398fbf271f --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt @@ -0,0 +1,176 @@ +package com.mogo.och.charter.passenger.ui.bottom.impl + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.constraintlayout.widget.ConstraintLayout +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.transition.Transition +import com.mogo.och.charter.passenger.R +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import kotlinx.android.synthetic.main.charter_p_bottom_music.view.aciv_center_image +import kotlinx.android.synthetic.main.charter_p_bottom_music.view.actv_title +import kotlinx.android.synthetic.main.charter_p_bottom_music.view.aciv_playing +import kotlinx.android.synthetic.main.charter_p_bottom_music.view.aciv_playing_bg +import kotlinx.android.synthetic.main.charter_p_bottom_music.view.default_info + +open class MusicCheckView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), AuditionManager.MusicDataChangeListener { + + 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 backageView: View? = null + + private var isCheck = false + + private var animator:ObjectAnimator?=null + + init { + LayoutInflater.from(context).inflate(R.layout.charter_p_bottom_music, this, true) + AuditionManager.addDataChangeListener(TAG,this) + try { + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.CharterPBottomSelectView) + backageViewId = typedArray.getResourceId(R.styleable.CharterPBottomSelectView_charterPBackageViewId, -1) + bottomTitle = typedArray.getString(R.styleable.CharterPBottomSelectView_charterPBottomTitle) ?: "" + selectedDrawable = typedArray.getResourceId(R.styleable.CharterPBottomSelectView_charterPselectedDrawable, -1) + normalDrawable = typedArray.getResourceId(R.styleable.CharterPBottomSelectView_charterPnormalDrawable, -1) + 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) { + default_info.visibility = View.VISIBLE + aciv_playing.visibility = View.GONE + aciv_playing_bg.visibility = View.GONE + backageView?.visibility = View.VISIBLE + aciv_center_image.setImageResource(selectedDrawable) + actv_title.setTextColor(context.getColor(android.R.color.white)) + endAnimal() + } else { + backageView?.visibility = View.GONE + actv_title.setTextColor(context.getColor(R.color.charter_p_090f28)) + aciv_center_image.setImageResource(normalDrawable) + + if(AuditionManager.isPlaying()){ + default_info.visibility = View.GONE + aciv_playing.visibility = View.VISIBLE + aciv_playing_bg.visibility = View.VISIBLE + AuditionManager.musicDataPlaying?.let { + Glide.with(context) + .load(it.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_head)) + .into(object : SimpleTarget() { + override fun onResourceReady( + resource: Drawable, + transition: Transition? + ) { + aciv_playing.background = resource + } + }) + startAnimal() + } + }else{ + default_info.visibility = View.VISIBLE + aciv_playing.visibility = View.GONE + aciv_playing_bg.visibility = View.GONE + endAnimal() + } + } + } + + private fun startAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + animator = ObjectAnimator.ofFloat(aciv_playing, "rotation", 0f, 360f) + aciv_playing.pivotX = (aciv_playing.width / 2).toFloat() + aciv_playing.pivotY = (aciv_playing.height / 2).toFloat() + animator?.duration = 3000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + } + + private fun endAnimal(){ + if(animator!=null){ + animator?.cancel() + aciv_center_image.rotation = 0f + animator = null + } + } + + + 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 + } + } + + override fun updateState(oldData: MusicData?, musicData: MusicData) { + if(musicData.state== PlayState.Playing){ + Glide.with(context) + .load(musicData.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_head)) + .into(object : SimpleTarget() { + override fun onResourceReady( + resource: Drawable, + transition: Transition? + ) { + aciv_playing.background = resource + } + }) + }else{ + default_info.visibility = View.VISIBLE + aciv_playing.visibility = View.GONE + aciv_playing_bg.visibility = View.GONE + endAnimal() + } + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/dialogfragment/M1CarUserNoOrderFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/dialogfragment/M1CarUserNoOrderFragment.kt index f3a7fcfc8b..09017951c0 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/dialogfragment/M1CarUserNoOrderFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/dialogfragment/M1CarUserNoOrderFragment.kt @@ -17,8 +17,8 @@ import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.ClickUtils import com.mogo.och.charter.passenger.R import com.mogo.och.charter.passenger.presenter.BusPassengerCarUseAndNoOrderPresenter +import com.mogo.och.charter.passenger.utils.CharterVoiceManager import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager -import com.mogo.och.common.module.voice.VoiceManager import kotlinx.android.synthetic.main.charter_p_order_end.iv_end_order_closedoor import kotlinx.android.synthetic.main.charter_p_order_end.iv_end_order_opendoor @@ -154,7 +154,7 @@ class M1CarUserNoOrderFragment : CallerLogger.d(M_BUS_P + TAG, "已经添加正在移除") } m1CarUserNoOrderFragment.show(parentFragmentManager, TAG) - VoiceManager.endOrder() + CharterVoiceManager.endOrder() CallerLogger.d(M_BUS_P + TAG, "展示开关门") } else { CallerLogger.d(M_BUS_P + TAG, "dialog 1s内执行一次") diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/itinerary/ItineraryViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/itinerary/ItineraryViewModel.kt index edb92d3f4c..3f74a4c6cb 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/itinerary/ItineraryViewModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/itinerary/ItineraryViewModel.kt @@ -24,7 +24,7 @@ class ItineraryViewModel : ViewModel(), IMoGoChassisLocationGCJ02Listener, IDist private var viewCallback: ItineraryViewCallback? = null init { - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, this) CharterPassengerModel.setStationDistanceListener(TAG, this) CharterPassengerModel.setStatusChangeListener(TAG, this) } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlView.kt new file mode 100644 index 0000000000..e5c79fd29a --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlView.kt @@ -0,0 +1,62 @@ +package com.mogo.och.charter.passenger.ui.music + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.och.charter.passenger.R +import com.mogo.och.charter.passenger.ui.music.list.MusicListView +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import kotlinx.android.synthetic.main.charter_p_music.view.mlv_list +import kotlinx.android.synthetic.main.charter_p_music.view.mpv_music_info + + +class MusicControlView : ConstraintLayout, MusicControlViewModel.MusicCallback { + + private val TAG = "MusicControlView" + + private var viewModel: MusicControlViewModel? = null + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, attributeSet, defStyleAttr + ) + + constructor( + context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.charter_p_music, this, true) + + mlv_list.setCheckItemListener(object : MusicListView.CheckListener{ + override fun checkItem(musicData: MusicData) { + mpv_music_info.setData(musicData) + } + }) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicControlViewModel::class.java) + } + viewModel?.setViewCallback(this) + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlViewModel.kt new file mode 100644 index 0000000000..647a5976c9 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlViewModel.kt @@ -0,0 +1,31 @@ +package com.mogo.och.charter.passenger.ui.music + +import androidx.lifecycle.ViewModel +import com.mogo.och.charter.passenger.model.MusicModel + +class MusicControlViewModel : ViewModel() { + + private val TAG = MusicControlViewModel::class.java.simpleName + + private var viewCallback: MusicCallback? = null + + + init { + MusicModel.load() + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + fun setViewCallback(viewCallback: MusicCallback) { + this.viewCallback = viewCallback + } + + + interface MusicCallback { + + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt new file mode 100644 index 0000000000..deea92b6c6 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt @@ -0,0 +1,149 @@ +package com.mogo.och.charter.passenger.ui.music.list + +import android.content.Context +import android.graphics.Typeface +import android.graphics.drawable.GradientDrawable +import android.os.Build +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.charter.passenger.R +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import me.jessyan.autosize.AutoSizeCompat + +/** + * Created by adityagohad on 06/06/17. + */ +class MusicListItemAdapter( + private val context: Context, + private val dataList: MutableList, + private val clickListener: ClickListener +) : RecyclerView.Adapter() { + + private val TAG = "MusicListItemAdapter" + + val gradientDrawable = GradientDrawable().also { + it.shape = GradientDrawable.RECTANGLE + val firstColor = ContextCompat.getColor(context, android.R.color.transparent) + val setondColor = ContextCompat.getColor(context, R.color.charter_p_4DFFFFFF) + val thirdColor = ContextCompat.getColor(context, R.color.charter_p_4DFFFFFF) + val fourceColor = ContextCompat.getColor(context, R.color.charter_p_4DFFFFFF) + val fifthColor = ContextCompat.getColor(context, android.R.color.transparent) + + it.orientation = GradientDrawable.Orientation.LEFT_RIGHT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + it.setColors(intArrayOf(firstColor, setondColor, thirdColor, fourceColor,fifthColor), + floatArrayOf(0.0f,0.3f,0.6f,0.9f,1f) + ) + }else{ + it.colors = intArrayOf(firstColor, setondColor, thirdColor, fourceColor) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TextVH { + val view: View + val inflater = LayoutInflater.from(context) + view = inflater.inflate(R.layout.charter_p_music_list_item, parent, false) + return TextVH(view) + } + + override fun onBindViewHolder(holder: TextVH, position: Int) { + val musicData = dataList[position] + AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources) + holder.musicName.text = musicData.songName + holder.itemView.setOnClickListener { + dataList.forEachIndexed { index, musicData4Loop -> + if(musicData4Loop.select==true){ + musicData4Loop.select = false + notifyItemChanged(index) + CallerLogger.d(TAG,"index:${index}----music${musicData4Loop.songName}") + return@forEachIndexed + } + } + musicData.select = true + notifyItemChanged(position) + CallerLogger.d(TAG,"position:${position}----music${musicData.songName}") + clickListener.clickItem(musicData,position) + } + if(musicData.tag.size>0){ + holder.tvTag.text = musicData.tag.first() + } + + if(musicData.select==true){ + holder.itemView.background = gradientDrawable + holder.musicName.setTypeface(null,Typeface.BOLD) + }else{ + holder.itemView.background = null + holder.musicName.setTypeface(null,Typeface.NORMAL) + } + + if (musicData.state==PlayState.Playing) { + holder.musicPlayState.visibility = View.VISIBLE + }else{ + holder.musicPlayState.visibility = View.GONE + } + } + + override fun getItemCount(): Int { + return dataList.size + } + + fun setNewData(data: MutableList) { + dataList.clear() + dataList.addAll(data) + notifyDataSetChanged() + } + + fun addOneData(musicData: MusicData){ + dataList.add(musicData) + notifyItemInserted(dataList.size) + } + + fun upDateMusicData(oldData: MusicData?,musicData: MusicData) { + dataList.forEachIndexed { index, musicDataIn -> + if (musicDataIn.id==musicData.id) { + musicDataIn.state = musicData.state + notifyItemChanged(index,0) + } + if(oldData?.id==musicDataIn.id){ + notifyItemChanged(index,0) + } + } + } + + fun setSelect(nextMusicData: MusicData, preMusicData: MusicData?) { + dataList.forEachIndexed { index, musicDataIn -> + if(musicDataIn.id==nextMusicData.id){ + musicDataIn.select = true + notifyItemChanged(index,0) + } + if(musicDataIn.id == preMusicData?.id){ + musicDataIn.select = false + notifyItemChanged(index,0) + } + } + } + + inner class TextVH(itemView: View) : RecyclerView.ViewHolder(itemView) { + var musicName: TextView + var tvTag: TextView + var musicPlayState: ImageView + + init { + musicName = itemView.findViewById(R.id.tv_song_name) + tvTag = itemView.findViewById(R.id.tv_tag) + musicPlayState = itemView.findViewById(R.id.iv_music_playing) + } + } + + interface ClickListener { + fun clickItem(musicData: MusicData,position: Int) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt new file mode 100644 index 0000000000..a3144ae018 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt @@ -0,0 +1,91 @@ +package com.mogo.och.charter.passenger.ui.music.list + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.charter.passenger.R +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import kotlinx.android.synthetic.main.charter_p_music_list.view.rv_music_list + +class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillback, + MusicListItemAdapter.ClickListener { + + private val TAG = "MusicListView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private val dataList = mutableListOf() + private lateinit var lineAdapter: MusicListItemAdapter + private var checkListener: CheckListener?=null + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.charter_p_music_list, this, true) + rv_music_list.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + lineAdapter = MusicListItemAdapter(context,dataList,this) + rv_music_list.adapter = lineAdapter + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicListViewModel::class.java) + } + CallerLogger.d(TAG,viewModel.toString()) + + viewModel?.setDistanceCallback(this) + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun addAllData(data: MutableList) { + lineAdapter.setNewData(data) + } + + override fun addOneData(it: MusicData) { + lineAdapter.addOneData(it) + } + + override fun updateMusicData(oldData: MusicData?,musicData: MusicData) { + lineAdapter.upDateMusicData(oldData,musicData) + CallerLogger.d(TAG,"${Thread.currentThread().name}----更新数据${oldData}-----${musicData}") + } + + override fun upDateSelectMusic(nextMusicData: MusicData, preMusicData: MusicData?) { + lineAdapter.setSelect(nextMusicData,preMusicData) + } + + override fun clickItem(musicData: MusicData,position: Int) { + // 通知主页面去显示详情 + this.checkListener?.checkItem(musicData) + } + + fun setCheckItemListener(checkListener: CheckListener) { + this.checkListener = checkListener + } + + interface CheckListener { + fun checkItem(musicData: MusicData) + } + + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListViewModel.kt new file mode 100644 index 0000000000..e88f40c48c --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListViewModel.kt @@ -0,0 +1,64 @@ +package com.mogo.och.charter.passenger.ui.music.list + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData + +class MusicListViewModel : ViewModel(), + AuditionManager.MusicDataChangeListener { + + private val TAG = MusicListViewModel::class.java.simpleName + + private var viewCallback: IMusicListViewCaLillback? = null + + init { + + } + + fun setDistanceCallback(viewCallback: IMusicListViewCaLillback) { + this.viewCallback = viewCallback + viewCallback.addAllData(AuditionManager.musicList) + CallerLogger.d(TAG,"初始化音乐${AuditionManager.musicList.size}") + AuditionManager.addDataChangeListener(TAG,this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + interface IMusicListViewCaLillback { + fun addAllData(data:MutableList) + fun addOneData(it: MusicData) + fun updateMusicData(oldData: MusicData?,musicData: MusicData) + fun upDateSelectMusic(nextMusicData: MusicData, preMusicData: MusicData?) + } + + override fun addOneData(it: MusicData) { + CallerLogger.d(TAG,"添加音乐:${it.songName}--${it.path}") + UiThreadHandler.post({ + this.viewCallback?.addOneData(it) + }, UiThreadHandler.MODE.QUEUE) + } + + override fun updateState(oldData: MusicData?,musicData: MusicData) { + UiThreadHandler.post({ + viewCallback?.updateMusicData(oldData, musicData) + }, UiThreadHandler.MODE.QUEUE) + } + + override fun onMusicCompletion(musicData: MusicData) { + super.onMusicCompletion(musicData) + UiThreadHandler.post({ + viewCallback?.updateMusicData(musicData, musicData) + }, UiThreadHandler.MODE.QUEUE) + } + + fun selectMusic(currentMusicData: MusicData, preMusicData: MusicData?) { + UiThreadHandler.post({ + viewCallback?.upDateSelectMusic(currentMusicData,preMusicData) + }, UiThreadHandler.MODE.QUEUE) + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt new file mode 100644 index 0000000000..5c7a48de6a --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt @@ -0,0 +1,215 @@ +package com.mogo.och.charter.passenger.ui.music.playing + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.animation.LinearInterpolator +import android.widget.SeekBar +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.TimeTransformUtils +import com.mogo.och.charter.passenger.R +import com.mogo.och.charter.passenger.ui.music.list.MusicListViewModel +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.common.module.utils.DateTimeUtil +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_music_cover +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_music_cover_bg +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_show_next +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_show_pre +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_toggle +import kotlinx.android.synthetic.main.charter_p_music_playing.view.sb_musuc_progess +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_music_name +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_playing_during +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_playing_time +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_tag +import me.jessyan.autosize.utils.AutoSizeUtils + + +class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingViewCallback { + + private val TAG = "MusicPlayingView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private var viewModel: MusicPlayingViewModel?=null + private var viewListModel: MusicListViewModel?=null + + private var animator:ObjectAnimator?=null + + private var isSeekBarTouch = false + private val centerWidth = AutoSizeUtils.dp2px(context,70.2f) + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.charter_p_music_playing, this, true) + + setOnClickListener { + CallerLogger.d(TAG,"-----------") + } + iv_toggle.setOnClickListener { + viewModel?.toggle() + } + iv_show_pre.setOnClickListener { + viewModel?.showPreMusic() + } + iv_show_next.setOnClickListener { + viewModel?.showNextMusic() + } + sb_musuc_progess.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{ + var seekToProgress = 0 + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + if(isSeekBarTouch) { + CallerLogger.d(TAG, "progress:${progress}----fromUser:${fromUser}") + seekToProgress = progress + }else{ + + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + isSeekBarTouch = true + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + isSeekBarTouch = false + viewModel?.seekTo(seekToProgress) + seekToProgress = 0 + } + + }) + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicPlayingViewModel::class.java) + } + viewListModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicListViewModel::class.java) + } + CallerLogger.d("MusicListView",viewListModel.toString()) + + viewModel?.setDistanceCallback(this) + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + viewModel?.showData() + } + } + + fun setData(musicData: MusicData) { + viewModel?.setClickMusicData(musicData) + } + + override fun setViewData(musicData: MusicData){ + tv_music_name.text = musicData.songName + tv_tag.text = musicData.tag.first() + tv_playing_time.text = DateTimeUtil.second2Time(0) + tv_playing_during.text = TimeTransformUtils.stringForTime(musicData.duration.toInt()) + if(musicData.state==PlayState.Playing){ + iv_toggle.setImageResource(R.drawable.charter_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.charter_p_music_play) + endAnimal() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + sb_musuc_progess.setProgress(0,true) + }else{ + sb_musuc_progess.progress=0.toInt() + } + + Glide.with(context) + .load(musicData.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_head)) + .into(iv_music_cover) + Glide.with(context) + .load(musicData.coverBottomImageUrl) + .apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_bottom)) + .into(iv_music_cover_bg) + } + + private fun startAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + animator = ObjectAnimator.ofFloat(iv_music_cover, "rotation", 0f, 360f) + iv_music_cover.pivotX = (centerWidth).toFloat() + iv_music_cover.pivotY = (centerWidth).toFloat() + animator?.duration = 3000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + } + private fun endAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + } + + override fun setPlayOrpause(it: MusicData) { + if(it.state==PlayState.Playing){ + iv_toggle.setImageResource(R.drawable.charter_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.charter_p_music_play) + endAnimal() + } + } + + override fun setProgress(currentPlay: Long, duration: Long) { + if(isSeekBarTouch){ + + }else{ + sb_musuc_progess.max = duration.toInt() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + sb_musuc_progess.setProgress(currentPlay.toInt(),true) + }else{ + sb_musuc_progess.progress=currentPlay.toInt() + } + } + + tv_playing_time.text = TimeTransformUtils.stringForTime(currentPlay.toInt()) + tv_playing_during.text = TimeTransformUtils.stringForTime(duration.toInt()) + } + + override fun setSelect(currentMusicData: MusicData,preMusicData: MusicData?) { + viewListModel?.selectMusic(currentMusicData,preMusicData) + } + + fun listenerPlaying(){ + + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt new file mode 100644 index 0000000000..f43e922495 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt @@ -0,0 +1,138 @@ +package com.mogo.och.charter.passenger.ui.music.playing + +import androidx.lifecycle.ViewModel +import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData + +class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListener { + + private val TAG = MusicPlayingViewModel::class.java.simpleName + + private var viewCallback: IMusicPlayingViewCallback? = null + + private var checkMusicData:MusicData?=null + + init { + + } + + fun setDistanceCallback(viewCallback: IMusicPlayingViewCallback) { + this.viewCallback = viewCallback + AuditionManager.addDataChangeListener(TAG,this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + fun setMusicData(musicData: MusicData) { + this.checkMusicData = musicData + this.viewCallback?.setViewData(musicData) + } + + fun showData() { + if(checkMusicData!=null){ + setMusicData(this.checkMusicData!!) + }else{ + val musicList = AuditionManager.musicList + if(musicList.size>0){ + val first = musicList.first() + setMusicData(first) + viewCallback?.setSelect(first,null) + } + } + } + + fun toggle() { + checkMusicData?.let { + CallerLogger.d(TAG,"toggle:${it.songName}") + AuditionManager.toggle(it) + } + } + + fun showPreMusic() { + checkMusicData?.let { + val playing = AuditionManager.isPlaying() + val nextMusicData = AuditionManager.getPreMusicData(it) + val preTempMusic = checkMusicData + setMusicData(nextMusicData) + viewCallback?.setSelect(nextMusicData,preTempMusic) + if(playing){ + AuditionManager.play(nextMusicData) + } + } + } + + fun showNextMusic() { + checkMusicData?.let { + val playing = AuditionManager.isPlaying() + val nextMusicData = AuditionManager.getNextMusicData(it) + val preTempMusic = checkMusicData + setMusicData(nextMusicData) + viewCallback?.setSelect(nextMusicData,preTempMusic) + if(playing){ + AuditionManager.play(nextMusicData) + } + } + } + + interface IMusicPlayingViewCallback { + fun setViewData(musicData: MusicData) + fun setPlayOrpause(it: MusicData) + fun setProgress(currentPlay: Long, duration: Long) + fun setSelect(currentMusicData: MusicData,preMusicData: MusicData?) + } + + override fun updateState(oldData:MusicData?,musicData: MusicData) { + checkMusicData?.let { + if(it.id==musicData.id){ + it.state = musicData.state + UiThreadHandler.post { + viewCallback?.setPlayOrpause(it) + } + } + } + } + override fun updatePlayCurrent(currentPlay: Long, duration: Long, musicData: MusicData){ + checkMusicData?.let { + if(it.id==musicData.id){ + UiThreadHandler.post { + viewCallback?.setProgress(currentPlay, duration) + } + } + } + } + + override fun onMusicCompletion(musicData: MusicData) { + super.onMusicCompletion(musicData) + checkMusicData?.let { + if(it.id==musicData.id){ + it.state = musicData.state + UiThreadHandler.post { + viewCallback?.setPlayOrpause(it) + } + } + val nextMusicData = AuditionManager.getNextMusicData(it) + val preTempMusic = checkMusicData + setMusicData(nextMusicData) + viewCallback?.setSelect(nextMusicData,preTempMusic) + AuditionManager.play(nextMusicData) + } + } + + fun seekTo(progress: Int) { + AuditionManager.seekTo(progress) + } + + fun setClickMusicData(musicData: MusicData) { + CallerLogger.d(TAG,"setClickMusicData:${musicData.songName}") + setMusicData(musicData) + val playing = AuditionManager.isPlaying() + if(playing){ + AuditionManager.play(musicData) + } + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt index c65bb403e7..38e6d6da91 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt @@ -17,11 +17,13 @@ import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.app.ActivityCompat +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.TimeTransformUtils import com.mogo.och.common.module.wigets.toast.ToastCharterUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.charter.passenger.R import com.mogo.och.charter.passenger.utils.FullVideoUtils +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager import com.mogo.och.common.module.wigets.media.MediaItem import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack import com.shuyu.gsyvideoplayer.utils.GSYVideoType @@ -40,6 +42,7 @@ import java.lang.reflect.Constructor */ class ConsultVideoPlayer : StandardGSYVideoPlayer { + private val TAG = "ConsultVideoPlayer" private lateinit var start: ImageView lateinit var coverImage: ImageView private lateinit var currentTimeTextView: TextView @@ -128,6 +131,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { start.setImageResource(R.drawable.charter_p_function_video_player_pause_small) } showOrHideStartPlayButton(false) + AudioFocusManager.setVideoFocusChange(true) } else -> { if(isIfCurrentIsFullscreen){ @@ -136,6 +140,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { start.setImageResource(R.drawable.charter_p_function_video_player_start_small) } showOrHideStartPlayButton(true) + AudioFocusManager.setVideoFocusChange(false) } } } @@ -186,6 +191,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { forceChange: Boolean ) { super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange) + CallerLogger.d(TAG,"setProgressAndTime¥${progress}-${secProgress}-${currentTime}") //时间显示 currentTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(currentTime) totalTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(totalTime) @@ -247,6 +253,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } override fun onCompletion() { + CallerLogger.d(TAG,"onCompletion") + AudioFocusManager.setVideoFocusChange(false) start.setImageResource(R.drawable.charter_p_function_video_player_start_small) } @@ -268,6 +276,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onError(what: Int, extra: Int) { super.onError(what, extra) + CallerLogger.d(TAG,"onError--${what}--${extra}") + AudioFocusManager.setVideoFocusChange(false) mThumbImageViewLayout?.visibility = View.VISIBLE ToastCharterUtils.showToastLong("哎呀,出错了,看看其他视频吧") currentTime = -1 diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/utils/CharterVoiceManager.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/utils/CharterVoiceManager.kt new file mode 100644 index 0000000000..1d32c87c93 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/utils/CharterVoiceManager.kt @@ -0,0 +1,88 @@ +package com.mogo.och.charter.passenger.utils + +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.voice.AIAssist +import com.mogo.och.charter.passenger.R +import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.tts.base.IMogoTTSCallback +import com.mogo.tts.base.LangTtsEntity +import com.mogo.tts.base.LanguageType +import java.util.ArrayList + +object CharterVoiceManager { + + fun arrivedStation(siteNameCN: String?, siteNameKR: String?,callBack: IMogoTTSCallback?=null) { + val contenxt = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + siteNameCN?.let { + val chineseTTS = LangTtsEntity( + contenxt.getString(R.string.charter_arrived_station_zh, it), + LanguageType.CHINESE + ) + val engTTS = LangTtsEntity( + contenxt.getString(R.string.charter_arrived_station_en, it), + LanguageType.CHINESE + ) + val koreanTTS = LangTtsEntity( + contenxt.getString(R.string.charter_arrived_station_ko, siteNameKR?:it), + LanguageType.KOREAN + ) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + } + + VoiceNotice.showNotice(list, AIAssist.LEVEL1,callBack) + } + + fun leaveStation(siteNameCN: String?, siteNameKR: String?,callBack: IMogoTTSCallback?=null) { + val list: MutableList = ArrayList() + val contenxt = AbsMogoApplication.getApp() + siteNameCN?.let { + val chineseTTS = LangTtsEntity( + contenxt.getString(R.string.charter_leave_station_zh, it), + LanguageType.CHINESE + ) + val engTTS = LangTtsEntity( + contenxt.getString(R.string.charter_leave_station_en, it), + LanguageType.CHINESE + ) + list.add(chineseTTS) + list.add(engTTS) + + val koreanTTS = LangTtsEntity( + contenxt.getString(R.string.charter_leave_station_ko, siteNameKR ?: it), + LanguageType.KOREAN + ) + list.add(koreanTTS) + } + VoiceNotice.showNotice(list, AIAssist.LEVEL1,callBack) + } + + fun surplus15min(callBack: IMogoTTSCallback?=null) { + val contenxt = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + val chineseTTS = LangTtsEntity(contenxt.getString(R.string.charter_surplus15_order_zh), LanguageType.CHINESE) + val engTTS = LangTtsEntity(contenxt.getString(R.string.charter_surplus15_order_en), LanguageType.ENGLISH) + val koreanTTS = LangTtsEntity(contenxt.getString(R.string.charter_surplus15_order_ko), LanguageType.KOREAN) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + VoiceNotice.showNotice(list, AIAssist.LEVEL0,callBack) + } + fun endOrder(){ + endOrder(null) + } + fun endOrder(callBack: IMogoTTSCallback?=null) { + val contenxt = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + val chineseTTS = LangTtsEntity(contenxt.getString(R.string.charter_end_order_zh), LanguageType.CHINESE) + val engTTS = LangTtsEntity(contenxt.getString(R.string.charter_end_order_en), LanguageType.ENGLISH) + val koreanTTS = LangTtsEntity(contenxt.getString(R.string.charter_end_order_ko), LanguageType.KOREAN) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + VoiceNotice.showNotice(list, AIAssist.LEVEL0,callBack) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png index d033e0a51c..c5928e398c 100644 Binary files a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png index 859e4950b1..50e791912e 100644 Binary files a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_normal.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_normal.png new file mode 100644 index 0000000000..f06bb07dc6 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_normal.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_press.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_press.png new file mode 100644 index 0000000000..f2750192b9 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_press.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_select.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_select.png index f94ff34044..5e94c3bba3 100644 Binary files a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_select.png and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_select.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_selected.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_selected.png index 99868fe176..dde52557b7 100644 Binary files a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_selected.png and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_function_light_check_selected.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg.png new file mode 100644 index 0000000000..f032609d39 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_middle.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_middle.png new file mode 100644 index 0000000000..c88126dfbd Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_middle.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_bottom.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_bottom.png new file mode 100755 index 0000000000..cf1cf89466 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_bottom.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_head.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_head.png new file mode 100755 index 0000000000..7bf877cbf0 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_head.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_list_playing.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_list_playing.png new file mode 100644 index 0000000000..6a1a124d21 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_list_playing.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_next.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_next.png new file mode 100644 index 0000000000..8610c57bfc Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_next.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pause.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pause.png new file mode 100644 index 0000000000..af55d1099e Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pause.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_play.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_play.png new file mode 100644 index 0000000000..32db628355 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_play.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pre.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pre.png new file mode 100644 index 0000000000..97f630aecd Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pre.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_split.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_split.png new file mode 100644 index 0000000000..155676614e Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_split.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_thumb.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_thumb.png new file mode 100644 index 0000000000..f1d02be917 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_thumb.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_play_music_bg.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_play_music_bg.png new file mode 100644 index 0000000000..9617c881d0 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_play_music_bg.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_select.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_select.xml index 6ab724d159..e1d5ea42c2 100644 --- a/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_select.xml +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_select.xml @@ -4,6 +4,6 @@ android:drawable="@drawable/charter_p_function_light_check_select" android:gravity="center" android:left="@dimen/dp_31" android:top="@dimen/dp_2" - android:width="@dimen/dp_28" - android:height="@dimen/dp_28"/> + android:width="@dimen/dp_36" + android:height="@dimen/dp_36"/> \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_selected.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_selected.xml index e39743dbb2..f39445a901 100644 --- a/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_selected.xml +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_function_switch_left_selected.xml @@ -4,6 +4,6 @@ android:drawable="@drawable/charter_p_function_light_check_selected" android:left="@dimen/dp_31" android:top="@dimen/dp_2" - android:width="@dimen/dp_28" - android:height="@dimen/dp_28"/> + android:width="@dimen/dp_36" + android:height="@dimen/dp_36"/> \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_center_split.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_center_split.xml new file mode 100644 index 0000000000..27676b534c --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_center_split.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_bottom.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_bottom.xml new file mode 100644 index 0000000000..5eff764421 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_bottom.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_tag_bg.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_tag_bg.xml new file mode 100644 index 0000000000..1dceb47936 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_tag_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_seekbar_style.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_seekbar_style.xml new file mode 100644 index 0000000000..9bbb4cb0c0 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_seekbar_style.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_seekbar_thumb.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_seekbar_thumb.xml new file mode 100644 index 0000000000..94e13d3c40 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_seekbar_thumb.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml index aed841ff58..e6e33a09fc 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml @@ -13,16 +13,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:textColor="@android:color/white" - android:layout_width="@dimen/dp_489" + android:layout_width="@dimen/dp_430" android:layout_height="@dimen/dp_107"/> @@ -36,16 +37,17 @@ app:layout_constraintEnd_toStartOf="@+id/actv_close_door" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" - android:layout_width="wrap_content" + android:layout_width="@dimen/dp_176" android:layout_height="match_parent"/> + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml index e7fc539809..329faa0046 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml @@ -1,7 +1,7 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_stop_site.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_stop_site.xml index e933597fd0..14a4d229a1 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_stop_site.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_stop_site.xml @@ -12,6 +12,7 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" + android:layout_marginTop="-10dp" android:layout_width="@dimen/dp_90" android:layout_height="@dimen/dp_90"/> @@ -20,7 +21,7 @@ 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:layout_marginBottom="@dimen/dp_9" android:textSize="@dimen/dp_20" android:text="靠边停车" android:textColor="@color/charter_p_090f28" diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml index 78b70a8c53..3bbc9238a9 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_main_fragment.xml @@ -59,13 +59,6 @@ app:layout_constraintEnd_toEndOf="@+id/mapBizView" app:layout_constraintStart_toStartOf="parent" /> - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_music_list.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list.xml new file mode 100644 index 0000000000..682b1807bb --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_music_list_item.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list_item.xml new file mode 100644 index 0000000000..3d7a203998 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list_item.xml @@ -0,0 +1,47 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_music_playing.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_music_playing.xml new file mode 100644 index 0000000000..5f8c632845 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_music_playing.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_order_fragment.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_order_fragment.xml index 16f9377a5d..7d42148d93 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_order_fragment.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_order_fragment.xml @@ -10,10 +10,9 @@ + app:layout_constraintEnd_toEndOf="parent"> #F0E0EFFF #66000000 #FF6D2C + #4DFFFFFF + #253A5A + #303C52 + #425877 + #576887 + #488ED0 + #1A488ED0 + + #598CFF + #4D6A83A5 + #6A83A5 + #80FFFFFF + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/values/strings.xml b/OCH/charter/passenger/src/main/res/values/strings.xml index dc0b149dab..b8f18b4d3c 100644 --- a/OCH/charter/passenger/src/main/res/values/strings.xml +++ b/OCH/charter/passenger/src/main/res/values/strings.xml @@ -62,12 +62,20 @@ + We are arriving at %1$s + %1$s 역에 도착했습니다 + 已到达%1$s + 车辆起步,请扶稳坐好,前方到站 %1$s + The next station is %1$s + 전방에서 역에 도착하는 %1$s + 15分钟后包车就要结束了,稍后小助手会自动为您寻找停车点 + There are 15 minutes left from the end of chartering. Please arrange your time reasonably + 전세버스 종료 후 15분 남았습니다. 여행 시간을 합리적으로 안배해 주십시오 - - - - + 感谢您体验\'蘑菇车联\'自动驾驶小巴车,本次旅程已结束,我们下次乘车再见 + Thank you for experiencing the self-driving minibus. See you next time + 자율주행 버스를 체험해 주셔서 감사합니다. 다음에 또 뵙겠습니다 \ No newline at end of file diff --git a/OCH/common/common/build.gradle b/OCH/common/common/build.gradle index 6ee9002e13..3562cd026e 100644 --- a/OCH/common/common/build.gradle +++ b/OCH/common/common/build.gradle @@ -40,6 +40,14 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + sourceSets { + main { + res.srcDirs = [ + 'src/main/res', + 'src/main/res/xiaozhi', + ] + } + } } dependencies { diff --git a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt index c9970599ec..953c9bb585 100644 --- a/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt +++ b/OCH/common/common/src/debug/java/com/mogo/och/common/module/debug/DebugDataDispatch.kt @@ -9,7 +9,10 @@ import chassis.VehicleStateOuterClass import com.amap.api.maps.model.LatLng import com.google.gson.reflect.TypeToken import com.mogo.eagle.core.data.enums.DataSourceType +import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.V2N +import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager @@ -18,6 +21,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLamplightListene import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.ActivityUtils @@ -50,6 +54,7 @@ object DebugDataDispatch { const val stateAutopilot = "stateAutopilot" const val stateAutopilotFail = "stateAutopilotFail" const val stopSite = "stopSite" + const val v2N = "xiaozhiV2N" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "1111/11111" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "globalPath" --es path "sy73.json" @@ -60,6 +65,7 @@ object DebugDataDispatch { // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "stateAutopilotFail" // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "trajectoryStation" --ef startLon 116.74053643938474 --ef startLat 40.200487993233246 --ef endLon 116.73876977409685 --ef endLat 40.20179054129441 --el lineID 8 // adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "stopSite" --ei state 6 --ei action 1 +// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "xiaozhiV2N" --es poiType "10002" --ei state 0 val ROOT_PATH = @@ -161,6 +167,17 @@ object DebugDataDispatch { pncAction.parkScenarioAction = planningaction.build() CallerPlanningActionsListenerManager.invokePNCActions(pncAction.build()) } + v2N ->{ + val state = intent.getIntExtra("state", 0) + val poiType = intent.getStringExtra("poiType") + poiType?.let { + if(state==0){ + runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.START) } + }else{ + runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.STOP) } + } + } + } else -> {} } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/audiofocusmanager/AudioFocusManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/audiofocusmanager/AudioFocusManager.kt new file mode 100644 index 0000000000..86ac59ffa8 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/audiofocusmanager/AudioFocusManager.kt @@ -0,0 +1,72 @@ +package com.mogo.och.common.module.manager.audiofocusmanager + +import android.content.Context +import android.media.AudioManager +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState + +object AudioFocusManager : AuditionManager.MusicDataChangeListener { + + const val TAG = "AudioFocusManager" + + private var isPlayingTTS = false + private var isPlayingMusic = false + private var isPlayingVideo = false + + private var mAudioManager: AudioManager? = null + private var mMaxVolume: Int = 15 + private var musicVolumeInTTS = 0 + + init { + AuditionManager.addDataChangeListener(TAG,this) + mAudioManager = AbsMogoApplication.getApp().getSystemService(Context.AUDIO_SERVICE) as AudioManager + mMaxVolume = mAudioManager?.getStreamMaxVolume(AudioManager.STREAM_MUSIC)?:0 + musicVolumeInTTS = (mMaxVolume*0.1f).toInt() + } + + override fun updateState(oldData: MusicData?, musicData: MusicData) { + val temp = musicData.state==PlayState.Playing + if(temp!= isPlayingMusic){ + isPlayingMusic = temp + } + CallerLogger.d(TAG,"music updateState ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}") + } + + fun setTTSFocusChange(isSpeaking:Boolean){ + if(isSpeaking!= isPlayingTTS) { + isPlayingTTS = isSpeaking + if(isSpeaking){ + if(isPlayingMusic){ + val mCurrentVolume = mAudioManager?.getStreamVolume(AudioManager.STREAM_MUSIC)?:0 + if(mCurrentVolume > musicVolumeInTTS){ + AuditionManager.setVolume(0.3f,0.3f) + } + } + }else{ + if(isPlayingMusic){ + AuditionManager.setVolume(1f,1f) + } + } + } + CallerLogger.d(TAG, "setTTSFocusChange ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}") + } + + fun setVideoFocusChange(isPlaying:Boolean){ + CallerLogger.d(TAG, "setMusicFocusChange ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}") + if(isPlaying!= isPlayingVideo) { + isPlayingVideo = isPlaying + if(isPlaying){ + AuditionManager.stop() + } + } + } + + fun load() { + + } + + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt new file mode 100644 index 0000000000..ce67a0be3c --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt @@ -0,0 +1,193 @@ +package com.mogo.och.common.module.manager.auditionmanager + +import android.media.AudioManager +import android.media.MediaPlayer +import android.os.Handler +import android.os.HandlerThread +import android.os.Message +import android.text.TextUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger + +object Audition: MediaPlayer.OnPreparedListener, + MediaPlayer.OnCompletionListener, MediaPlayer.OnSeekCompleteListener, + MediaPlayer.OnErrorListener { + private val TAG = "Audition" + var mediaPlayer: MediaPlayer? = null + var oldPath: String? = null + private var listener: OnAuditionListener? = null + private val handler: Handler + + interface OnAuditionListener { + fun onAuditionCompletion(path: String?) + fun onSeekCompletion(currentPlay: Long) + fun onCurrentPosition(currentPlay: Long, duration: Long) + } + + fun registerOnAuditionListener(listener: OnAuditionListener?) { + this.listener = listener + } + + fun unregisterOnAuditionListener() { + listener = null + } + + init { + val frequentThread = HandlerThread("frequent_drawer") + frequentThread.start() + handler = object : Handler(frequentThread.looper) { + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + if (msg.what == 0) { + try { + if (mediaPlayer != null && listener != null) { + val currentPosition = mediaPlayer!!.currentPosition + val duration = mediaPlayer!!.duration + listener!!.onCurrentPosition(currentPosition.toLong(), duration.toLong()) + } + sendEmptyMessageDelayed(0, 500) + }catch (e:Exception){ + e.printStackTrace() + } + + } + } + } + } + + val isPlaying: Boolean + get() = mediaPlayer != null && mediaPlayer!!.isPlaying + + fun play(path: String) { + if (TextUtils.equals(oldPath, path)) { + CallerLogger.i(TAG, "play() , return") + return + } + oldPath = path + if (mediaPlayer != null) { + mediaPlayer!!.release() + mediaPlayer = null + } + if (mediaPlayer == null) { + mediaPlayer = MediaPlayer() + mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC) + mediaPlayer!!.setOnPreparedListener(this) + mediaPlayer!!.setOnCompletionListener(this) + mediaPlayer!!.setOnSeekCompleteListener(this) + mediaPlayer!!.setOnErrorListener(this) + } + try { + mediaPlayer!!.setDataSource(path) + } catch (e: Exception) { + e.printStackTrace() + } + try { + mediaPlayer!!.prepareAsync() + }catch (e:IllegalStateException){ + e.printStackTrace() + } + } + + fun stop() { + oldPath = null + if (mediaPlayer != null) { + try { + mediaPlayer!!.stop() + mediaPlayer!!.reset() + }catch (e:IllegalStateException){ + e.printStackTrace() + } + } + } + + fun pause() { + if (mediaPlayer != null && mediaPlayer!!.isPlaying) { + try { + mediaPlayer!!.pause() + }catch (e:IllegalStateException){ + e.printStackTrace() + } + } + } + + fun toggle(path: String):Boolean { + if (mediaPlayer != null) { + if(TextUtils.equals(oldPath, path)) { + if (mediaPlayer!!.isPlaying) { + pause() + return false + } else { + start() + return true + } + }else{ + play(path) + return true + } + }else{ + play(path) + return true + } + } + + fun start():Boolean { + if (mediaPlayer != null) { + try { + mediaPlayer!!.start() + }catch (e:IllegalStateException){ + e.printStackTrace() + } + return true + } + return false + } + + fun seekTo(progress: Int){ + try { + mediaPlayer?.seekTo(progress) + }catch (e:IllegalStateException){ + e.printStackTrace() + } + } + + fun setVolume(leftVolume:Float, rightVolume:Float){ + try { + mediaPlayer?.setVolume(leftVolume,leftVolume) + }catch (e:IllegalStateException){ + e.printStackTrace() + } + } + + fun onDestroy() { + stop() + mediaPlayer = null + } + + override fun onPrepared(mp: MediaPlayer) { + mp.start() + if (listener != null) { + listener!!.onCurrentPosition(mp.currentPosition.toLong(), mp.duration.toLong()) + } + handler.sendEmptyMessageDelayed(0, 500) + } + + override fun onCompletion(mp: MediaPlayer) { + val tempPath = oldPath + oldPath = null + if (listener != null) { + listener!!.onAuditionCompletion(tempPath) + } + } + + override fun onSeekComplete(mp: MediaPlayer) { + if (listener != null) { + listener!!.onSeekCompletion(mp.currentPosition.toLong()) + } + } + + override fun onError(mp: MediaPlayer?, what: Int, extra: Int): Boolean { + //你自己的逻辑 + + //此处返回值需要为true,不然还是会执行OnCompletionListener中的onCompletion方法 + return true + } +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionCacheManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionCacheManager.kt new file mode 100644 index 0000000000..15dc2810cb --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionCacheManager.kt @@ -0,0 +1,257 @@ +package com.mogo.och.common.module.manager.auditionmanager + +import android.media.MediaExtractor +import android.media.MediaFormat +import android.net.Uri +import android.os.Environment +import android.text.TextUtils +import com.google.gson.reflect.TypeToken +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.download.DownloadUtils +import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.Utils +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager.EVENT_KEY_INFE_WITH_MUSIC +import com.mogo.och.common.module.utils.FileUtils +import com.mogo.och.common.module.wigets.media.MediaPlayLogger +import rx.Single +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import java.io.OutputStream +import com.mogo.eagle.core.utilcode.util.FileUtils as FileHelper + + +object AuditionCacheManager { + + private var dataChangeListener:DataChangeListener?=null + private val context = AbsMogoApplication.getApp() + private const val TAG = "AuditionCacheManager" + + init { + createFileCacheDir() + } + + // 命名规则 缓存文件夹/md5.后缀名 + private fun getMusicDataByLocationConfig() { + ThreadUtils.getIoPool().execute { + val localAdDataList = mutableListOf() + try { + val datas: MusicDataList = GsonUtils.fromJson( + FunctionBuildConfig.musicUrlConfig, object : TypeToken() {}.type + ) + localAdDataList.addAll(datas.musics) + } catch (e: Exception) { + e.printStackTrace() + } + localAdDataList.forEach { + if (isLocalCacheFileExists(it)) { + // 存在 + val locationPath = getCacheFileFullPathByUrl(it) + val fileMD5 = FileHelper.getFileMD5ToString(locationPath) + if(fileMD5==it.md5){// 文件存在切md5一致 + it.path = locationPath + val duration = getDuration(locationPath) + it.duration = duration + dataChangeListener?.addOneData(it) + CallerLogger.d(M_OCHCOMMON+ TAG,"文件已下载添加播放列表中") + addTag("文件已下载添加播放列表中:${it}") + }else{ + // 删除缓存 + FileHelper.delete(locationPath) + if(it.isCloud()) { + // 去下载 + downloadFile(it) + addTag("缓存已下载但md5对应不上:${it}") + }else{ + copyRaw2Music(it.songUrl,locationPath) + it.path = locationPath + val duration = getDuration(locationPath) + it.duration = duration + dataChangeListener?.addOneData(it) + } + } + }else{ + if(it.isCloud()) { + // 不存在 + downloadFile(it) + addTag("第一次下载:${it}") + }else{ + val locationPath = getCacheFileFullPathByUrl(it) + copyRaw2Music(it.songUrl,locationPath) + it.path = locationPath + val duration = getDuration(locationPath) + it.duration = duration + dataChangeListener?.addOneData(it) + } + + } + } + } + } + + + /** + * 创建media缓存文件夹目录(优先放SD卡) + */ + private fun createFileCacheDir(): Boolean { + val cacheDirPath = getFileCacheDir() + MediaPlayLogger.printInfoLog("createFileCacheDir, dirPath=$cacheDirPath") + return FileHelper.createFileDir(cacheDirPath) + } + + + /** + * 获取本地缓存文件的文件全路径 + */ + private fun getFileCacheDir(): String { + // 有些手机需要通过自定义目录 + val relativePath = "mogo" + File.separator + "music" + File.separator + val cacheDir = File(Environment.getExternalStorageDirectory(), relativePath) + if (FileHelper.createOrExistsDir(cacheDir)) { + return cacheDir.absolutePath + } + + return FileUtils.getCacheDirectory(context, "") + relativePath + } + + /** + * 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响 + */ + private fun getCacheFileFullPathByUrl(musicData: MusicData): String { + return getFileCacheDir() +File.separator+ getCacheFileName(musicData) + } + + /** + * 本地是否已经存在下载完成的文件 + */ + private fun isLocalCacheFileExists(musicData: MusicData): Boolean { + val localVideoCacheFilePath = getCacheFileFullPathByUrl(musicData) + return FileHelper.isFileExists(localVideoCacheFilePath) + } + + /** + * 本地缓存文件的文件名,md5编码避免文件名重复或者特殊字符编码问题 + */ + private fun getCacheFileName(musicData: MusicData): String { + val fileSuffix = FileUtils.getExtension(musicData.songUrl) + if (TextUtils.isEmpty(fileSuffix)) { + return "" + } + return musicData.md5 + FileUtils.EXTENSION_SEPARATOR + fileSuffix + } + + + /** + * 下载文件 + */ + private fun downloadFile(musicData: MusicData) { + val downloadUrl = musicData.songUrl + val downloadDir = getFileCacheDir() + val downloadFileName = getCacheFileName(musicData) + DownloadUtils.downLoad(context, downloadUrl, downloadDir, downloadFileName, object :IDownloadListener{ + override fun onStart(url: String) { + addTag("开始下载:${musicData}") + } + + override fun onProgress(url: String, downloaded: Long, total: Long) { + + } + + override fun onFinished(url: String, path: String) { + val fileMD5 = FileHelper.getFileMD5ToString(path) + if(fileMD5==musicData.md5){// 文件存在切md5一致 + musicData.path = path + dataChangeListener?.addOneData(musicData) + addTag("下载完成切md5对应上:${musicData}") + }else{ + // 下载成功但是下载的文件md5不一致不能使用 + } + } + + override fun onError(url: String, error: String?) { + // 下载失败 + addTag("下载失败:${musicData}") + } + }) + } + + fun addDataChangeListener(dataChangeListener: DataChangeListener) { + this.dataChangeListener = dataChangeListener + getMusicDataByLocationConfig() + } + + public interface DataChangeListener{ + fun addOneData(it: MusicData) + + } + + private fun addTag(logInfo:String){ + OchChainLogManager.writeChainLog(TAG,logInfo,eventID=EVENT_KEY_INFE_WITH_MUSIC) + } + + /** + * 获取mp3音频的总时长 单位:ms + * + * @param mp3FilePath MP3文件路径 + * @return 时长 + */ + fun getDuration(mp3FilePath: String): Long { + if (!com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(mp3FilePath)) { + return 0 + } + if (!mp3FilePath.endsWith("mp3")) { + return 0 + } + var mex: MediaExtractor? = null + try { + mex = MediaExtractor() + mex.setDataSource(mp3FilePath) + val mf = mex.getTrackFormat(0) + return mf.getLong(MediaFormat.KEY_DURATION) / 1000L + } catch (e: IOException) { + + } finally { + mex?.release() + } + return 0 + } + + + fun copyRaw2Music(url:String,dst:String){ + val path = Uri.parse(url).path + path?.let { + val split = it.split("/") + if(split.size==3&&split.get(1)=="raw"){ + + try { + val fileName = split[2] + val nameAndprex = fileName.split(".") + val resourceId: Int = context.resources.getIdentifier(nameAndprex[0], "raw", context.packageName) + val openRawResource = context.resources.openRawResource(resourceId) + val outputStream: OutputStream = FileOutputStream(dst) + val buffer = ByteArray(1024) + var length: Int + + while (openRawResource.read(buffer).also { length = it } > 0) { + outputStream.write(buffer, 0, length) + } + + outputStream.close() + openRawResource.close() + }catch (e:IOException){ + e.printStackTrace() + } + + } + + } + } + + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt new file mode 100644 index 0000000000..ac95684224 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt @@ -0,0 +1,206 @@ +package com.mogo.och.common.module.manager.auditionmanager + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager +import java.util.concurrent.ConcurrentHashMap + +object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAuditionListener { + + val musicList = mutableListOf() + + var musicDataPlaying: MusicData? = null + + private val dataChangeListeners: ConcurrentHashMap = ConcurrentHashMap() + + private const val TAG = "AuditionManager" + + init { + AuditionCacheManager.addDataChangeListener(this) + Audition.registerOnAuditionListener(this) + AudioFocusManager.load() + } + + fun addDataChangeListener(tag: String, listener: MusicDataChangeListener) { + if (dataChangeListeners.containsKey(tag)) { + return + } + dataChangeListeners[tag] = listener + } + + fun removeDataChangeListener(tag: String){ + dataChangeListeners.remove(tag) + } + + + private fun getMusicDataByState(state:PlayState):Pair?{ + musicList.forEachIndexed { index, musicData -> + if(musicData.state==state){ + return Pair(index,musicData) + } + } + return null + } + + fun toggle(musicData: MusicData){ + val toggle = Audition.toggle(musicData.path) + val oldData = resetData() + if(toggle){// 播放 + musicDataPlaying = musicData + musicData.state = PlayState.Playing + dataChangeListeners.forEach { + it.value.updateState(oldData,musicData) + } + }else{// 暂停 + musicDataPlaying = null + musicData.state = PlayState.Pause + dataChangeListeners.forEach { + it.value.updateState(oldData,musicData) + } + } + } + + fun isPlaying():Boolean{ + return Audition.isPlaying + } + + fun stop(){ + val playing = isPlaying() + if(playing){ + musicDataPlaying?.let { + toggle(it) + } + } + Audition.stop() + } + + fun play(musicData: MusicData){ + Audition.play(musicData.path) + val oldData = resetData() + musicDataPlaying = musicData + musicData.state = PlayState.Playing + dataChangeListeners.forEach { + it.value.updateState(oldData,musicData) + } + } + + fun playFirst(){ + ThreadUtils.runOnUiThread { + if(!isPlaying()){ + toggle(musicList.first()) + } + } + } + + private fun resetData():MusicData?{ + var tempRusult:MusicData?=null + musicList.forEach { + if(it.state!=PlayState.None){ + tempRusult = it + } + it.state = PlayState.None + } + return tempRusult + } + + override fun addOneData(musicDataNew: MusicData) { + musicList.forEachIndexed { index, musicData -> + if (musicDataNew.id==musicData.id) { + musicList[index] = musicDataNew + return + } + } + musicList.add(musicDataNew) + dataChangeListeners.forEach { + it.value.addOneData(musicDataNew) + } + } + + public interface MusicDataChangeListener{ + fun addOneData(it: MusicData){} + fun updateState(oldData: MusicData?,musicData: MusicData) + fun updatePlayCurrent(currentPlay: Long, duration: Long, second: MusicData){} + fun onMusicCompletion(musicData: MusicData) {} + + } + + /** + * 音乐播放完毕 + */ + override fun onAuditionCompletion(path:String?) { + val oldData = resetData() + CallerLogger.d(TAG,"播放完成:${oldData?.songName}--${path}----${musicDataPlaying?.songName} ----${musicDataPlaying?.path}") + if(oldData!=null&&oldData.path==path){ + dataChangeListeners.forEach { + it.value.onMusicCompletion(oldData) + } + }else{ + musicList.forEach {musicData-> + if(musicData.path==path){ + dataChangeListeners.forEach { + it.value.onMusicCompletion(musicData) + } + return + } + } + } + } + + /** + * 拖动跳转完成 + */ + override fun onSeekCompletion(currentPlay: Long) { + + } + + /** + * 当前进度 + */ + override fun onCurrentPosition(currentPlay: Long, duration: Long) { + val musicDataWithIndex = getMusicDataByState(PlayState.Playing) + if (musicDataWithIndex!=null) { + musicDataWithIndex.second.let {musicData-> + dataChangeListeners.forEach { + it.value.updatePlayCurrent(currentPlay,duration,musicData) + } + } + }else{ + musicList.forEachIndexed { index, musicData -> + if(musicData.path==Audition.oldPath){ + dataChangeListeners.forEach { + it.value.updatePlayCurrent(currentPlay,duration,musicData) + } + return + } + } + } + } + + fun getNextMusicData(it: MusicData):MusicData { + val indexOf = musicList.indexOf(it) + if(indexOf== musicList.size-1){ + return musicList.first() + }else{ + return musicList[indexOf+1] + } + } + + fun getPreMusicData(it: MusicData): MusicData { + val indexOf = musicList.indexOf(it) + if(indexOf== 0){ + return musicList.last() + }else{ + return musicList[indexOf-1] + } + } + + fun seekTo(progress: Int) { + Audition.seekTo(progress) + } + + fun setVolume(leftVolume:Float, rightVolume:Float){ + Audition.setVolume(leftVolume,rightVolume) + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt new file mode 100644 index 0000000000..54b407aba3 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt @@ -0,0 +1,37 @@ +package com.mogo.och.common.module.manager.auditionmanager + + +data class MusicDataList(val musics: MutableList) + +/** + * 音乐文件 + */ +data class MusicData( + val id: String, + val md5:String, + val songName: String, + val songUrl: String, + val songUrlType: String, + val coverHeadImageUrl: String, + val coverBottomImageUrl: String, + val tag: MutableList, + var duration:Long, + var path: String, + var state: PlayState = PlayState.None, + var select:Boolean?=false +){ + fun isCloud():Boolean{ + return songUrlType=="cloud" + } +} + +/** + * None -> Playing - Pause + * | | + * None None + */ +enum class PlayState { + None, + Playing, + Pause, +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/ArrivedStation.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/ArrivedStation.java new file mode 100644 index 0000000000..e07c77c4eb --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/ArrivedStation.java @@ -0,0 +1,31 @@ +package com.mogo.och.common.module.manager.autopilotmanager.autopilot; + +import com.mogo.eagle.core.data.map.MogoLocation; + +import mogo.telematics.pad.MessagePad; + +public class ArrivedStation { + + public ArrivedStation(MogoLocation mogoLocation) { + this.mogoLocation = mogoLocation; + } + + private MogoLocation mogoLocation; + + public MogoLocation getEndLocation(){ + return mogoLocation; + } + + public static ArrivedStation trasform(MessagePad.ArrivalNotification arrivalNotification){ + MogoLocation mogoLocation = new MogoLocation(); + MessagePad.Location endLocation = arrivalNotification.getEndLocation(); + if(endLocation==null){ + return null; + } + mogoLocation.setLongitude(endLocation.getLongitude()); + mogoLocation.setLatitude(endLocation.getLatitude()); + + return new ArrivedStation(mogoLocation); + } + +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/IOchAutopilotStatusListener.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/IOchAutopilotStatusListener.kt new file mode 100644 index 0000000000..6d895c2268 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/IOchAutopilotStatusListener.kt @@ -0,0 +1,90 @@ +package com.mogo.och.common.module.manager.autopilotmanager.autopilot + +import com.zhjt.mogo.adas.data.AdasConstants +import mogo.telematics.pad.MessagePad +import mogo_msg.MogoReportMsg +import system_master.SsmInfo +import system_master.SystemStatusInfo + +interface IOchAutopilotStatusListener { + /** + * 自动驾驶状态信息 + * + * @param state 状态信息 + */ + fun onAutopilotStatusResponse(state: Int) {} + + /** + * 自动驾驶docker信息 + * + * @param dockerVersion docker版本 + */ + fun onAutopilotDockerInfo(dockerVersion:String){} + + /** + * 自动驾驶到站 + * + * @param arrivalNotification 所到车站的简单信息 + */ + fun onAutopilotArriveAtStation(arrivalNotification: ArrivedStation?) {} + + /** + * 工控机获取SN + */ + fun onAutopilotSNRequest(basicInfoReq: MessagePad.BasicInfoReq) {} + + /** + * 工控机监控节点 + */ + fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) {} + + /** + * 工控机连接状态回调 + */ + fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) {} + + /** + * 域控SSM接口接收超时 + * 状态变动时才会回调,默认SSM状态正常 + * @param isTimeout true:SSM接口接收超时 false:SSM接口恢复正常 + */ + fun onSsmReceiveTimeout(isTimeout: Boolean) {} + + /** + * 工控机主动查询 AdasManager#sendStatusQueryReq(),后会收到如下回调 + */ + fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {} + + /** + * 定频SSM + * 老版本 SSM(SystemStatusInfo.StatusInfo) HQ、M1 MAP350开始弃用,其他车型MAP360开始弃用 + */ + fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {} + + /** + * 自动驾驶路线ID回调 + */ + fun onAutopilotRouteLineId(lineId: Long){} + + companion object { + /** + * 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接 + */ + const val STATUS_AUTOPILOT_DISABLE = 0 + + /** + * 可自动驾驶,工控机连接正常,且处于人工干预状态 + */ + const val STATUS_AUTOPILOT_ENABLE = 1 + + /** + * 自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人 + */ + const val STATUS_AUTOPILOT_RUNNING = 2 + + /** + * 平行驾驶 + */ + const val STATUS_PARALLEL_DRIVING = 7 + } +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/OchAutoPilotStatusListenerManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/OchAutoPilotStatusListenerManager.kt new file mode 100644 index 0000000000..8b7a23f68c --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/autopilot/OchAutoPilotStatusListenerManager.kt @@ -0,0 +1,103 @@ +package com.mogo.och.common.module.manager.autopilotmanager.autopilot + +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.och.common.module.utils.CallerBase +import com.zhjt.mogo.adas.data.AdasConstants +import mogo.telematics.pad.MessagePad +import mogo_msg.MogoReportMsg +import system_master.SsmInfo +import system_master.SystemStatusInfo + +object OchAutoPilotStatusListenerManager : CallerBase(),IMoGoAutopilotStatusListener { + + const val TAG = "OCHAutoPilotStatusListenerManager" + init { + //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + } + + override fun onAutopilotStatusResponse(state: Int) { + super.onAutopilotStatusResponse(state) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotStatusResponse(state) + } + } + + override fun onAutopilotDockerInfo(dockerVersion: String) { + super.onAutopilotDockerInfo(dockerVersion) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotDockerInfo(dockerVersion) + } + } + + override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) { + super.onAutopilotArriveAtStation(arrivalNotification) + val trasform = ArrivedStation.trasform(arrivalNotification) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotArriveAtStation(trasform) + } + } + + override fun onAutopilotSNRequest(basicInfoReq: MessagePad.BasicInfoReq) { + super.onAutopilotSNRequest(basicInfoReq) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotSNRequest(basicInfoReq) + } + } + + override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { + super.onAutopilotGuardian(guardianInfo) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotGuardian(guardianInfo) + } + } + + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { + super.onAutopilotIpcConnectStatusChanged(status, reason) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotIpcConnectStatusChanged(status,reason) + } + } + + override fun onSsmReceiveTimeout(isTimeout: Boolean) { + super.onSsmReceiveTimeout(isTimeout) + M_LISTENERS.forEach { + val listener = it.value + listener.onSsmReceiveTimeout(isTimeout) + } + } + + override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) { + super.onAutopilotStatusRespByQuery(status) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotStatusRespByQuery(status) + } + } + + override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) { + super.onSystemStatus(statusInf) + M_LISTENERS.forEach { + val listener = it.value + listener.onSystemStatus(statusInf) + } + } + + override fun onAutopilotRouteLineId(lineId: Long) { + super.onAutopilotRouteLineId(lineId) + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotRouteLineId(lineId) + } + } +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/ITrajectoryListListener.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/ITrajectoryListListener.kt new file mode 100644 index 0000000000..eaa911e425 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/ITrajectoryListListener.kt @@ -0,0 +1,15 @@ +package com.mogo.och.common.module.manager.autopilotmanager.trajectory + +import com.mogo.eagle.core.data.map.MogoLocation + +interface ITrajectoryListListener{ + /** + * @param routeArrivied 已经走过的坐标 + * @param routeArriving 没有走过的坐标 + * @param location 车的坐标 + * @return + */ + fun trajectoryCallback( + trajectoryList: MutableList, + ) +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryCache.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/TrajectoryCache.kt similarity index 96% rename from OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryCache.kt rename to OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/TrajectoryCache.kt index b8a57b24c3..fd78e2c1ca 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryCache.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/TrajectoryCache.kt @@ -1,4 +1,4 @@ -package com.mogo.och.common.module.manager.distancemamager +package com.mogo.och.common.module.manager.autopilotmanager.trajectory import com.elegant.network.utils.GsonUtil import com.mogo.commons.AbsMogoApplication diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/TrajectoryManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/TrajectoryManager.kt new file mode 100644 index 0000000000..2d25aeb728 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilotmanager/trajectory/TrajectoryManager.kt @@ -0,0 +1,98 @@ +package com.mogo.och.common.module.manager.autopilotmanager.trajectory + +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.CoordinateUtils +import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil +import mogo.telematics.pad.MessagePad +import java.util.concurrent.ConcurrentHashMap + +object TrajectoryManager : IMoGoPlanningRottingListener { + const val TAG = "TrajectoryManager" + + private val distanceListeners: ConcurrentHashMap = + ConcurrentHashMap() + + /** + * 所有轨迹点 + */ + @Volatile + var mRoutePoints = mutableListOf() + + /** + * 0-1 1-2 2-3 各个轨迹点的距离 + */ + @Volatile + private var mRoutePointsDistance: MutableList? = ArrayList() + + /** + * 所有轨迹点距离的和 + */ + @Volatile + private var maxDistanceAllPoint: Double = 0.0 + + init { + CallerPlanningRottingListenerManager.addListener(TAG, this) + } + + private var lineId:Long?=0 + + override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) { + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "onAutopilotRotting: 收到轨迹") + globalPathResp?.wayPointsList?.let { + if (it.size > 0) { + CallerLogger.d( + SceneConstant.M_OCHCOMMON + TAG, + "收到轨迹:轨迹个数${it.size}第一个点${it[0]}最后一个点:${it.last()} 轨迹id:${globalPathResp.lineId}" + ) + @Suppress("SENSELESS_COMPARISON") + if (globalPathResp.lineId != null) {// 适配低版本不传递lineId + if (globalPathResp.lineId == lineId) { + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "重复轨迹") + return + } + this.lineId = globalPathResp.lineId + } + updateRoutePoints(it) + } + } + } + + private fun updateRoutePoints(routePoints: List?) { + mRoutePointsDistance = null + val latLngModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjLocations(AbsMogoApplication.getApp(), routePoints!!) + mRoutePoints = latLngModels + + mRoutePointsDistance = ArrayList() + maxDistanceAllPoint = 0.0 + mRoutePoints.forEachIndexed { index, current -> + if (mRoutePoints.last() != current) { + val next = mRoutePoints[index + 1] + val distanceItem = CoordinateUtils.calculateLineDistance( + current.longitude, + current.latitude, + next.longitude, + next.latitude + ) + mRoutePointsDistance?.add(distanceItem) + maxDistanceAllPoint += distanceItem + } + } + distanceListeners.forEach { + it.value.trajectoryCallback(mRoutePoints) + } + } + + fun addTrajectoryListListenerr(tag: String, listener: ITrajectoryListListener) { + if (distanceListeners.containsKey(tag)) { + return + } + distanceListeners[tag] = listener + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt index fb6b7234e0..c39f502b01 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.LocationUtils import com.mogo.och.common.module.biz.constant.OchCommonConst +import com.mogo.och.common.module.manager.autopilotmanager.trajectory.TrajectoryCache 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 @@ -702,7 +703,7 @@ object TrajectoryAndDistanceManager : IMoGoPlanningRottingListener { */ private fun distanceWithStartStation(): String { if (startStationInfo.stationPoint == null) { - return "请选择起始结束站点" + return "起始站点值异常,请重新选择此任务执行并上报问题" } val currentPoint = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() val distance = CoordinateUtils.calculateLineDistance( diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt index 7e958fea09..0162529472 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt @@ -17,6 +17,10 @@ object OchChainLogManager { const val EVENT_KEY_INFE_WITH_CHANGE = "event_key_och_common_info_and_changeinfo" const val EVENT_KEY_INFE_WITH_TRAJECTORY = "event_key_och_trajectory_info" + const val EVENT_KEY_INFE_WITH_MUSIC = "event_key_och_music_info" + const val EVENT_KEY_INFE_WITH_BUS = "event_key_och_bus_info" + // 需要举行观察的 + const val EVENT_KEY_INFE_ERROR = "event_key_och_error" /** * @param Info 订单详细信息 diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OrderChainLogManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OrderChainLogManager.kt deleted file mode 100644 index 92ca20a6ef..0000000000 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OrderChainLogManager.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.mogo.och.common.module.manager.orderlogmanager - -import com.mogo.eagle.core.data.deva.chain.ChainConstant -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.zhjt.service.chain.ChainLog - -object OrderChainLogManager { - - private val TAG = OrderChainLogManager::class.java.simpleName - - /** - * @param orderInfo 订单详细信息 - * @param changeInfo 变化信息 - */ - @ChainLog( - linkChainLog = ChainConstant.CHAIN_TYPE_OCH, - linkCode = ChainConstant.CHAIN_SOURCE_OCH, - nodeAliasCode = ChainConstant.CHAIN_CODE_OCH_COMMON_DISTANCE, - paramIndexes = [0,1] - ) - fun writeChainLog(orderInfo: String, changeInfo: String) { - d(SceneConstant.M_OCHCOMMON + TAG, orderInfo) - d(SceneConstant.M_OCHCOMMON + TAG, changeInfo) - } - -} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiStateManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiStateManager.kt new file mode 100644 index 0000000000..e47708c6ac --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiStateManager.kt @@ -0,0 +1,214 @@ +package com.mogo.och.common.module.manager.xiaozhimanager + +import android.Manifest +import androidx.core.app.ActivityCompat +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.VoiceMsg +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager +import com.mogo.eagle.core.function.main.MainPresenter +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils +import com.mogo.eagle.core.utilcode.util.ActivityUtils +import com.mogo.och.common.module.utils.PermissionUtil +import com.mogo.och.common.module.wigets.toast.ToastCharterUtils +import com.mogo.tts.base.zhi.AsrTextBean +import com.mogo.tts.base.zhi.AvatarManager +import com.mogo.tts.base.zhi.CallbackWidget +import com.mogo.tts.base.zhi.ZhiRecordWinUi +import java.util.concurrent.atomic.AtomicBoolean + +object ZhiStateManager : ZhiRecordWinUi { + private const val TAG = "ZhiStateManager" + + @Volatile + private var status = ZhiRecordWinUi.RecordStatus.STATUS_SILENCE + private val enableZhi = AtomicBoolean(true) + + + + init { + AvatarManager.addDistanceListener(TAG,this) + } + + /** + * 开始对话 + */ + override fun start(reason: String?) { + CallerLogger.d(TAG,"-----start 开始对话 $reason") + } + + /** + * 语音卡状态变化 + * + * @param status + */ + override fun onStatusChange(status: ZhiRecordWinUi.RecordStatus?) { + CallerLogger.d(TAG,"-----onStatusChange $status") + this.status = status?:ZhiRecordWinUi.RecordStatus.STATUS_SILENCE + when (status) { + ZhiRecordWinUi.RecordStatus.STATUS_SILENCE -> {// 进入默认状态 + CallerLogger.d(TAG,"正在静默状态") + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni) + } + ZhiRecordWinUi.RecordStatus.STATUS_LISTENING -> {// 正在监听唤醒人说话 + CallerLogger.d(TAG,"正在监听唤醒人说话") + ZhiViewmanager.showListeningAni(ZhiViewmanager.listenerAni) + } + ZhiRecordWinUi.RecordStatus.STATUS_UNDERSTANDING -> {// 小智正在理解中 + CallerLogger.d(TAG,"正在理解") + } + ZhiRecordWinUi.RecordStatus.STATUS_UNDERSTAND_END -> {// 理解完毕 + CallerLogger.d(TAG,"理解结束") + } + ZhiRecordWinUi.RecordStatus.STATUS_SPEAKING -> {// 小智正在说话 + CallerLogger.d(TAG,"小智正在说话") + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni) + } + else -> { + + } + } + + + } + + /** + * 关闭对话 + * @param trigger 是否手动 + */ + override fun close(trigger: Boolean) { + CallerLogger.d(TAG,"-----close $trigger") + onStatusChange(ZhiRecordWinUi.RecordStatus.STATUS_SILENCE) + val msg = VoiceMsg( + isWakeUp = false, + isWakeUpEnd = true, + msg = null, + isLastMsg = true, + isResp = true + ) + pushMsgBox(msg) + } + + /** + * 语音输入音量变化 + * + * @param volume + */ + override fun onVolumeChange(volume: Int) { + CallerLogger.d(TAG,"-----onVolumeChange $volume") + } + + /** + * 显示用户输入的内容 + * + * @param asrTextBean + */ + override fun showInputText(asrTextBean: AsrTextBean?) { + CallerLogger.d(TAG,"-----showInputText $asrTextBean") + asrTextBean.let { + val msg = VoiceMsg( + isWakeUp = false, + isWakeUpEnd = false, + msg = it?.text, + isLastMsg = it?.isLast == true, + isResp = false + ) + pushMsgBox(msg) + } + } + + /** + * 显示控件 暂时没有需求 + * + * @param callbackWidget + */ + override fun showOutPutWidget(callbackWidget: CallbackWidget?) { + // todo 咱不支持定制显示 包括天气 + CallerLogger.d(TAG,"-----showOutPutWidget $callbackWidget") + } + /** + * 显示系统输出内容 + * + * @param outPutText + */ + override fun showOutputText(outPutText: String?) { + CallerLogger.d(TAG,"-----showOutputText $outPutText") + outPutText?.let { + val msg = VoiceMsg( + isWakeUp = false, + isWakeUpEnd = false, + msg = it, + isLastMsg = false, + isResp = true + ) + pushMsgBox(msg) + } + } + + + fun setZhiEnable(enable:Boolean){ + if(enable){// 可用 + enableZhi.set(true) + AvatarManager.enableXiaoZhi(false) + }else{// 不可用 + enableZhi.set(false) + AvatarManager.enableXiaoZhi(true) + } + } + + fun weakUpXiaoZhi(){ + if (!AppIdentityModeUtils.isTaxiPassenger(FunctionBuildConfig.appIdentityMode)) { + return + } + if (!isFastClick()) { + ToastCharterUtils.showToastShort("请稍后唤醒") + return + } + if (PermissionUtil.checkPermission(AbsMogoApplication.getApp(), Manifest.permission.RECORD_AUDIO)) { + if(enableZhi.get()) { + AvatarManager.wakeupXiaoZhi() + } + }else{ + //申请悬浮窗权限 + val shouldShowRequestPermissionRationale = ActivityUtils.getTopActivity() + .shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO) + if(shouldShowRequestPermissionRationale){// 可以弹窗系统权限框 + ActivityCompat.requestPermissions( + ActivityUtils.getTopActivity(), + arrayOf( + Manifest.permission.RECORD_AUDIO, + ), MainPresenter.MOGO_PERMISSION_REQUEST_CODE + ) + }else{// 不会弹系统弹窗 + PermissionsDialogUtils.openAppDetails(ActivityUtils.getTopActivity(), "录音", 100) + } + + } + } + + // 两次点击按钮之间的点击间隔不能少于1000毫秒 + private const val MIN_CLICK_DELAY_TIME = 3000 + private var lastClickTime: Long = 0 + + private fun isFastClick(): Boolean { + var flag = false + val curClickTime = System.currentTimeMillis() + if (curClickTime - lastClickTime >= MIN_CLICK_DELAY_TIME) { + flag = true + } + lastClickTime = curClickTime + return flag + } + + + private fun pushMsgBox(msg: VoiceMsg){ + CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.VOICE, msg)) + } + + + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiV2NManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiV2NManager.kt new file mode 100644 index 0000000000..03a507408f --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiV2NManager.kt @@ -0,0 +1,338 @@ +package com.mogo.och.common.module.manager.xiaozhimanager + +import com.mogo.eagle.core.data.enums.EventTypeEnumNew +import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.Event +import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.V2N +import com.mogo.eagle.core.function.api.hmi.xiaozhi.listener.OnXiaoZhiStateChangeListener +import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.och.common.module.R + +object ZhiV2NManager : OnXiaoZhiStateChangeListener { + init { + CallerHmiManager.registerXiaoZhiStatusChangeListener(this) + } + + override fun onChanged(event: Event, state: State) { + if (event is V2N) { + var drawable: Int? = null + when (event.type) { + EventTypeEnumNew.TRAFFIC_CHECK -> { + drawable = R.drawable.xiaozhi_event_qfjtjc + } + + EventTypeEnumNew.ROAD_CLOSED -> { + drawable = R.drawable.xiaozhi_event_qffl + } + + EventTypeEnumNew.FOURS_ROAD_WORK -> { + drawable = R.drawable.xiaozhi_event_qfsg + } + + EventTypeEnumNew.FOURS_BLOCK_UP -> { + drawable = R.drawable.xiaozhi_event_qfdlyd + } + + EventTypeEnumNew.FOURS_PONDING -> { + drawable = R.drawable.xiaozhi_event_xxxr + } + + EventTypeEnumNew.FOURS_ICE -> { + drawable = R.drawable.xiaozhi_event_dljb + } + + EventTypeEnumNew.FOURS_ACCIDENT -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.FOURS_ACCIDENT_01 -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.FOURS_ACCIDENT_02 -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.FOURS_ACCIDENT_03 -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.FOURS_ACCIDENT_04 -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.FOURS_ACCIDENT_05 -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.FOURS_LIVING -> { + //实时路况 + } + + EventTypeEnumNew.ILLEGAL_PARK_LIVING -> { + //违章停车 + } + + EventTypeEnumNew.ROAD_SLIPPERY -> { + //路面湿滑 + } + + EventTypeEnumNew.GHOST_PROBE -> { + drawable = R.drawable.xiaozhi_event_rxhd + } + + EventTypeEnumNew.TAKE_OVER_EVENT -> { + drawable = R.drawable.xiaozhi_event_yccltx + } + + EventTypeEnumNew.NETWORK_WEAK_EVENT -> { + drawable = R.drawable.xiaozhi_event_yccltx + } + + EventTypeEnumNew.ALERT_FRONT_CAR -> { + //前方预警 + } + + EventTypeEnumNew.ALERT_TRAFFIC_CONTROL -> { + //限行管理 + } + + EventTypeEnumNew.ALERT_TRAFFIC_LIGHT_SUGGEST -> { + + } + + EventTypeEnumNew.ALERT_TRAFFIC_LIGHT_WARNING -> { + //红绿灯 + } + + EventTypeEnumNew.ALERT_CAR_TROUBLE_WARNING -> { + //故障车辆 + } + + EventTypeEnumNew.ALERT_FATIGUE_DRIVING -> { + //疲劳驾驶 + } + + EventTypeEnumNew.ALERT_ILLEGAL_PARK -> { + //违章停车 + } + + EventTypeEnumNew.TYPE_USECASE_OPTIMAL_LANE -> { + + } + + EventTypeEnumNew.TYPE_USECASE_ID_FCW -> { + + } + + EventTypeEnumNew.TYPE_USECASE_ID_ICW -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_LTA -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_BSW -> { + drawable = R.drawable.xiaozhi_event_mqpzyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_LCW -> { + drawable = R.drawable.xiaozhi_event_bdpzyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_DNPW -> { + drawable = R.drawable.xiaozhi_event_nxccyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_EBW -> { + drawable = R.drawable.xiaozhi_event_qxjs + } + + EventTypeEnumNew.TYPE_USECASE_ID_AVW -> { + drawable = R.drawable.xiaozhi_event_yccltx + } + + EventTypeEnumNew.TYPE_USECASE_ID_CLW -> { + drawable = R.drawable.xiaozhi_event_clskyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_EVW -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_MOTOR_VEHICLES -> { + drawable = R.drawable.xiaozhi_event_mtcpzyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_NOT_MOTOR_VEHICLES -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_VRUCW_PERSON -> { + drawable = R.drawable.xiaozhi_event_rxhd + } + + EventTypeEnumNew.TYPE_ERROR_WEAKNESS -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_IVP_RED -> { + drawable = R.drawable.xiaozhi_event_chdyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_IVP_GREEN -> { + drawable = R.drawable.xiaozhi_event_chdyj + } + + EventTypeEnumNew.TYPE_USECASE_ID_BREAKDOWN_WARNING -> { + drawable = R.drawable.xiaozhi_event_clskyj + } + + EventTypeEnumNew.TYPE_FOURS_PONDING -> { + drawable = R.drawable.xiaozhi_event_dljs + } + + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_PARKING -> { + drawable = R.drawable.xiaozhi_event_jztc + } + + EventTypeEnumNew.TYPE_USECASE_ID_TJW -> { + drawable = R.drawable.xiaozhi_event_qfdlyd + } + + EventTypeEnumNew.TYPE_USECASE_ID_SLW -> { + drawable = R.drawable.xiaozhi_event_clcs + } + + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_VEHICLE_RETROGRADE -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_SPEED_LIMIT -> { + drawable = R.drawable.xiaozhi_event_clcs + } + + EventTypeEnumNew.TYPE_ID_SHAPR_TURNS -> { + drawable = R.drawable.xiaozhi_event_zzjw + } + + EventTypeEnumNew.TYPE_ID_BRIDGE -> { + drawable = R.drawable.xiaozhi_event_tfq + } + + EventTypeEnumNew.TYPE_ID_PEDESTRIAN -> { + drawable = R.drawable.xiaozhi_event_rxhd + } + + EventTypeEnumNew.TYPE_ID_SLIPPERY_ROAD -> { + drawable = R.drawable.xiaozhi_event_dljb + } + + EventTypeEnumNew.TYPE_ID_TUNNEL -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_ID_FERRY -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_ID_UNEVEN_ROAD -> { + drawable = R.drawable.xiaozhi_event_dlkw + } + + EventTypeEnumNew.TYPE_ID_NON_MOTOR_VEHICLE -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_ID_OBSTACLE -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_FOURS_ROAD_WORK -> { + drawable = R.drawable.xiaozhi_event_qfsg + } + + EventTypeEnumNew.TYPE_VEHICLE_QUEUE -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_NO_PASSING -> { + drawable = R.drawable.xiaozhi_event_qffl + } + + EventTypeEnumNew.TYPE_NO_TURNING_AROUND -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_NO_PARKING -> { + drawable = R.drawable.xiaozhi_event_jztc + } + + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_NO_TOOTING -> { + drawable = R.drawable.xiaozhi_event_jzmd + } + + EventTypeEnumNew.TYPE_USECASE_ID_BUS_WARNING -> { + drawable = R.drawable.xiaozhi_event_ygdc + } + + EventTypeEnumNew.TYPE_USECASE_ID_NARROW_RIGHT -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_USECASE_ID_GAS_STATION -> { + drawable = R.drawable.xiaozhi_event_qfjyz + } + + EventTypeEnumNew.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL -> { + drawable = R.drawable.xiaozhi_event_qfxx + } + + EventTypeEnumNew.TYPE_USECASE_ID_ACCIDENT -> { + drawable = R.drawable.xiaozhi_event_jtsg + } + + EventTypeEnumNew.TYPE_ATTENTION_CONFLUENCE -> { + //R.drawable.xiaozhi_event_ + } + + EventTypeEnumNew.TYPE_PEDESTRIAN_CROSSING -> { + drawable = R.drawable.xiaozhi_event_rxhd + } + + EventTypeEnumNew.TYPE_SOCKET_ROAD_CONGESTION -> { + drawable = R.drawable.xiaozhi_event_qfdlyd + } + + EventTypeEnumNew.TYPE_SOCKET_ROAD_JINGZHI -> { + drawable = R.drawable.xiaozhi_event_clskyj + } + + EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGU -> { + drawable = R.drawable.xiaozhi_event_yccltx + } + + EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG -> { + drawable = R.drawable.xiaozhi_event_qfsg + } + + else -> { + + } + } + if (drawable != null) { + if(state==State.START){ + ZhiViewmanager.warnAni.drawable = drawable + ZhiViewmanager.showListeningAni(ZhiViewmanager.warnAni,true) + }else if(state==State.STOP){ + ZhiViewmanager.stopWarnAni() + } + } + } + } + + fun load() { + + } +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiView.kt new file mode 100644 index 0000000000..20783d5640 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiView.kt @@ -0,0 +1,126 @@ +package com.mogo.och.common.module.manager.xiaozhimanager + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.appcompat.widget.AppCompatImageView +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.R +import com.mogo.och.common.module.utils.FrameAnimatorContainer +import com.mogo.tts.base.zhi.CallbackWidget +import com.mogo.tts.base.zhi.ZhiRecordWinUi +import kotlinx.android.synthetic.main.common_xiaozhi.view.aciv_v2n_event +import kotlinx.android.synthetic.main.common_xiaozhi.view.aciv_xiaozhi +import java.util.concurrent.ArrayBlockingQueue +import java.util.concurrent.atomic.AtomicBoolean + +class ZhiView : ConstraintLayout, ZhiViewmanager.IViewCallback { + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + companion object { + const val TAG = "ZhiView" + } + + // 播放默认小智 + // 传递播放一次的动画 + // 传递开始播放 + + private var currentAnim:FrameAnimatorContainer? = null + + private var animator:ObjectAnimator?=null + + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.common_xiaozhi, this, true) + setOnClickListener { + ZhiStateManager.weakUpXiaoZhi() + } + } + + + override fun setFirstPlayAni(initAni: ZhiViewmanager.AniData,aniListener:FrameAnimatorContainer.OnAnimationStoppedListener){ + currentAnim = FrameAnimatorContainer(initAni.aniArrayId, 12,aciv_xiaozhi) + currentAnim?.isOnce = initAni.isOnce + currentAnim?.sequence = initAni.sequence + currentAnim?.setFtp(initAni.fps) + currentAnim?.setOnAnimStopListener(aniListener) + currentAnim?.reStart() + } + + override fun setNewPlayData(currentPalyingAni: ZhiViewmanager.AniData) { + handleV2NEvent(currentPalyingAni) + currentAnim?.setData(currentPalyingAni.aniList) + currentAnim?.isOnce = currentPalyingAni.isOnce + currentAnim?.sequence = currentPalyingAni.sequence + currentAnim?.setFtp(currentPalyingAni.fps) + } + + override fun changeAniImmediately(currentPalyingAni: ZhiViewmanager.AniData) { + handleV2NEvent(currentPalyingAni) + currentAnim?.setData(currentPalyingAni.aniList) + currentAnim?.isOnce = currentPalyingAni.isOnce + currentAnim?.sequence = currentPalyingAni.sequence + currentAnim?.setFtp(currentPalyingAni.fps) + currentAnim?.reStart() + } + + fun handleV2NEvent(currentPalyingAni: ZhiViewmanager.AniData){ + if(currentPalyingAni==ZhiViewmanager.warnAni||currentPalyingAni==ZhiViewmanager.normal2warnAni){ + currentPalyingAni.drawable?.let { + aciv_v2n_event.setImageResource(it) + if(animator!=null){ + animator?.cancel() + animator = null + } + animator = ObjectAnimator.ofFloat(aciv_v2n_event, "alpha", 0f, 1f,0f) + animator?.duration = 2000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + } + }else{ + if(animator!=null){ + animator?.cancel() + aciv_v2n_event.alpha = 0f + animator = null + } + } + } + + + override fun restartAni() { + currentAnim?.reStart() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + ZhiViewmanager.addDistanceListener(this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + ZhiViewmanager.removeListener() + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiViewmanager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiViewmanager.kt new file mode 100644 index 0000000000..3ddd1a58a7 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/xiaozhimanager/ZhiViewmanager.kt @@ -0,0 +1,191 @@ +package com.mogo.och.common.module.manager.xiaozhimanager + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.R +import com.mogo.och.common.module.utils.FrameAnimatorContainer +import java.util.concurrent.ArrayBlockingQueue + +object ZhiViewmanager { + + private const val TAG = "ZhiViewmanager" + + private var iViewCallbacks: IViewCallback? = null + + val normalAni = AniData(AniType.normal, R.array.xiaozhi_normal, false, true,12) + val listenerAni = AniData(AniType.listener,R.array.xiaozhi_think,false,true,12) + + val listener2Normal = AniData(AniType.listener2Normal, R.array.xiaozhi_think_normal, true, false,24) + val normal2Listener = AniData(AniType.normal2Listener, R.array.xiaozhi_think_normal, true, true,24) + + val beltAni = AniData(AniType.beltAni, R.array.xiaozhi_belt, false, true,12) + val loveAni = AniData(AniType.loveAni, R.array.xiaozhi_love, false, true,12) + + val warnAni = AniData(AniType.warnAni, R.array.xiaozhi_warn, false, true,12) + val normal2warnAni = AniData(AniType.normal2warnAni, R.array.xiaozhi_normal_warn, false, true,24) + val warn2normalAni = AniData(AniType.warn2normalAni, R.array.xiaozhi_normal_warn, false, false,24) + + + enum class AniType{ + normal,listener,listener2Normal,normal2Listener,beltAni,loveAni,warnAni,normal2warnAni,warn2normalAni + } + + private var initAni = normalAni + private var currentAni: AniData? = null + + private val readQueue = ArrayBlockingQueue(8, true) + + + fun addDistanceListener(listener: IViewCallback) { + ZhiV2NManager.load() + this.iViewCallbacks = listener + this.currentAni = initAni + listener.setFirstPlayAni(initAni, + object : FrameAnimatorContainer.OnAnimationStoppedListener { + override fun playOnce() { + CallerLogger.d(TAG, "播放完一遍动画") + var nextPlay = readQueue.poll() + CallerLogger.d(TAG, "获取下一个动画${Thread.currentThread().name}--${nextPlay?.aniType}-${readQueue.size}") + if(nextPlay == currentAni){ + return + } + if(nextPlay==null){ + if(currentAni?.isOnce==true) { + // 没有设置新的动画 且上一个动画是直播一次的动画 + currentAni = initAni + iViewCallbacks?.setNewPlayData(initAni) + }else{ + // 没有设置新的动画 且上一个动画时循环动画 + return + } + }else{ + // 有设置新的动画 + currentAni = nextPlay + CallerLogger.d(TAG, "切换动画${nextPlay.aniType}") + iViewCallbacks?.setNewPlayData(nextPlay) + } + } + + override fun AnimationStopped() { + CallerLogger.d(TAG, "动画停止") + listener.restartAni() + } + }) + } + + fun removeListener() { + iViewCallbacks = null + } + + fun showListeningAni(aniData: AniData,immediately:Boolean=true) { + var lastAni = readQueue.peek() + if(lastAni==null){ + lastAni = currentAni + } + if(lastAni?.aniType==aniData.aniType){ + return + } + when (lastAni?.aniType) { + AniType.normal -> {//正在播放默认动画 + if(aniData.aniType==AniType.listener) {// 要播放倾听中动画 + iViewCallbacks?.changeAniImmediately(normal2Listener) + currentAni = normal2Listener + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${normal2Listener.aniType}-${readQueue.size}") + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else if (aniData.aniType==AniType.warnAni){ + iViewCallbacks?.changeAniImmediately(normal2warnAni) + currentAni = normal2warnAni + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${normal2warnAni.aniType}-${readQueue.size}") + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else{ + if(immediately){ + iViewCallbacks?.changeAniImmediately(aniData) + currentAni = aniData + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else{ + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + } + } + } + AniType.listener -> {// 正在播放倾听中动画 + if(aniData.aniType==AniType.normal){ + iViewCallbacks?.changeAniImmediately(listener2Normal) + currentAni = listener2Normal + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${listener2Normal.aniType}-${readQueue.size}") + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else{ + if(immediately){ + iViewCallbacks?.changeAniImmediately(aniData) + currentAni = aniData + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else{ + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + } + } + } + AniType.warnAni -> { + if(aniData.aniType==AniType.normal){ + iViewCallbacks?.changeAniImmediately(warn2normalAni) + currentAni = warn2normalAni + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${warn2normalAni.aniType}-${readQueue.size}") + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else{ + if(immediately){ + iViewCallbacks?.changeAniImmediately(aniData) + currentAni = aniData + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + }else{ + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + } + } + } + else -> { + if(immediately){ + iViewCallbacks?.changeAniImmediately(aniData) + currentAni = aniData + CallerLogger.d(TAG, "立刻播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + } else { + readQueue.offer(aniData) + CallerLogger.d(TAG, "排队播放${Thread.currentThread().name}--${aniData.aniType}-${readQueue.size}") + } + } + } + + } + + fun stopWarnAni() { + if (currentAni == warnAni) { + showListeningAni(normalAni) + } + } + + + interface IViewCallback { + fun setFirstPlayAni( + currentPalyingAni: AniData, + aniListener: FrameAnimatorContainer.OnAnimationStoppedListener + ) + + fun setNewPlayData(currentPalyingAni: AniData) + fun changeAniImmediately(currentPalyingAni: AniData) + fun restartAni() + } + + data class AniData( + val aniType: AniType,// 动画ID + val aniArrayId: Int,// 动画序列号 + val isOnce: Boolean,// true 只播一次 false 循环播放 + val sequence: Boolean,// true 正向播放 false 倒着播放 + val fps:Int, + var drawable:Int?=null + ) { + var aniList = FrameAnimatorContainer.getData(aniArrayId) + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/BigFrameAnimatorContainer.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/BigFrameAnimatorContainer.kt index 6e286cbd0d..12d3f53912 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/BigFrameAnimatorContainer.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/BigFrameAnimatorContainer.kt @@ -131,38 +131,40 @@ class BigFrameAnimatorContainer (resId: Int, writeQueue.add(Pair(mBitmap,mBitmapOptions)) } - decodeImage = ThreadUtils.getIoPool().submit { - while (true) { - val startTime = System.currentTimeMillis() - val (bitmap1, options) = writeQueue.take() - mIndex++ - if (mIndex >= mFrames.size){ - mIndex = 0 - if(isOnce){ - stop() - return@submit + decodeImage = OCHThreadPoolManager.getsInstance().submit(object: Runnable{ + override fun run() { + while (true) { + val startTime = System.currentTimeMillis() + val (bitmap1, options) = writeQueue.take() + mIndex++ + if (mIndex >= mFrames.size){ + mIndex = 0 + if(isOnce){ + stop() + return + } + } + val index: Int = mIndex + val imageRes: Int = mFrames[index] + var bitmap: Bitmap? = null + try { + bitmap = BitmapFactory.decodeResource( + imageView.resources, + imageRes, + options + ) + options.inBitmap = bitmap + } catch (e: Exception) { + e.printStackTrace() + } + if (bitmap != null) { + readQueue.put(Pair(bitmap, options)) + } + val dexTime = System.currentTimeMillis() - startTime + CallerLogger.d(TAG, "decode用时:${dexTime}ms index ${index}") } } - val index: Int = mIndex - val imageRes: Int = mFrames[index] - var bitmap: Bitmap? = null - try { - bitmap = BitmapFactory.decodeResource( - imageView.resources, - imageRes, - options - ) - options.inBitmap = bitmap - } catch (e: Exception) { - e.printStackTrace() - } - if (bitmap != null) { - readQueue.put(Pair(bitmap, options)) - } - val dexTime = System.currentTimeMillis() - startTime - CallerLogger.d(TAG, "decode用时:${dexTime}ms index ${index}") - } - } + }) } //循环读取下一帧 diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/CallerBase.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/CallerBase.kt new file mode 100644 index 0000000000..412b684d85 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/CallerBase.kt @@ -0,0 +1,136 @@ +package com.mogo.och.common.module.utils + +import com.alibaba.android.arouter.facade.template.IProvider +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.eagle.core.function.call.CallerBusManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import java.util.concurrent.ConcurrentHashMap + +/** + * @author xiaoyuzhou + * @date 2023/01/04 4:02 下午 + */ +open class CallerBase { + + /** + * 存储所有注册了监听的对象,invokeXXXX进行遍历回调,将信息同步 + */ + protected val M_LISTENERS: ConcurrentHashMap = ConcurrentHashMap() + + /** + * 存储所有注册了监听的对象,并设定监听频率,invokeXXXX进行遍历回调,将信息同步, + */ + protected val M_LISTENERS_HZ: ConcurrentHashMap = ConcurrentHashMap() + + /** + * HZ发送,记录最后一次发送时间 + */ + protected val M_LISTENERS_HZ_LAST_SEND_TIME: ConcurrentHashMap = + ConcurrentHashMap() + + /** + * 设置对应监听,指定Hz频率 + * @param tag 订阅者标记 + * @param callBackHz 订阅者想要接受的回调的hz频率 + */ + fun setListenerHz(tag: String, callBackHz: Int) { + if (M_LISTENERS_HZ.containsKey(tag)) { + return + } + M_LISTENERS_HZ[tag] = callBackHz + } + + /** + * 添加 监听 + * @param tag 标记,用来注销监听使用 + * @param listener 监听回调 + */ + fun addListener( + tag: String, + listener: T + ) { + if (M_LISTENERS.containsKey(tag)) { + return + } + M_LISTENERS[tag] = listener + doSomeAfterAddListener(tag, listener) + } + + /** + * 在添加了监听后执行 + */ + open fun doSomeAfterAddListener(tag: String, listener: T) {} + + /** + * 删除监听 + * @param tag 标记,用来注销监听使用 + */ + fun removeListener(tag: String) { + if (!M_LISTENERS.containsKey(tag)) { + return + } + M_LISTENERS.remove(tag) + + if (!M_LISTENERS_HZ.containsKey(tag)) { + return + } + M_LISTENERS_HZ.remove(tag) + + if (!M_LISTENERS_HZ_LAST_SEND_TIME.containsKey(tag)) { + return + } + M_LISTENERS_HZ_LAST_SEND_TIME.remove(tag) + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun removeListener(listener: T) { + if (!M_LISTENERS.containsValue(listener)) { + return + } + M_LISTENERS.forEach { + if (it.value == listener) { + M_LISTENERS.remove(it.key) + + if (!M_LISTENERS_HZ.containsKey(it.key)) { + return + } + M_LISTENERS_HZ.remove(it.key) + + if (!M_LISTENERS_HZ_LAST_SEND_TIME.containsKey(it.key)) { + return + } + M_LISTENERS_HZ_LAST_SEND_TIME.remove(it.key) + } + } + } + + + companion object { + private const val TAG = "CallerBase" + + @JvmStatic + fun getApiInstance(clazz: Class?, path: String): T { + var inst = CallerBusManager.get(clazz) + if (inst == null) { + synchronized(CallerBase::class.java) { + inst = CallerBusManager.get(clazz) + if (inst != null) { + return inst + } + val newInst = ARouter.getInstance().build(path).navigation() as T + try { + CallerBusManager.registerApi(clazz, newInst) + d(TAG, "keep IProvider instance to SingletonHolder: path :$path") + } catch (e: Exception) { + e.printStackTrace() + } + return newInst + } + } + return inst + } + } +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java index 04f7d48529..42583fdad4 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java @@ -1,10 +1,13 @@ package com.mogo.och.common.module.utils; +import android.annotation.SuppressLint; + import com.mogo.eagle.core.utilcode.util.DateTimeUtils; import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.TimeZone; /** @@ -24,8 +27,7 @@ public class DateTimeUtil { public static String formatCalendarToString(Calendar calendar, String format){ if (calendar == null) return ""; try { - SimpleDateFormat dateFormat = new SimpleDateFormat(format); - return dateFormat.format(calendar.getTime()); + return getSafeDateFormat(format).format(calendar.getTime()); }catch (Exception e){ e.printStackTrace(); } @@ -50,8 +52,7 @@ public class DateTimeUtil { } public static String formatLongToString(long time, String format){ try { - SimpleDateFormat dateFormat = new SimpleDateFormat(format); - return dateFormat.format(time); + return getSafeDateFormat(format).format(time); }catch (Exception e){ e.printStackTrace(); } @@ -108,11 +109,6 @@ public class DateTimeUtil { return calendar.getTimeInMillis(); } - public static String getAfterSecondTime(int timeInSecond,String formate){ - Calendar beforeTime = Calendar.getInstance(); - beforeTime.add(Calendar.SECOND, timeInSecond); - return formatCalendarToString(beforeTime, formate); - } public static String getAfterSecondTime(int timeInSecond){ Calendar beforeTime = Calendar.getInstance(); beforeTime.add(Calendar.SECOND, timeInSecond); @@ -163,4 +159,31 @@ public class DateTimeUtil { return stringBuffer.toString(); } + + private static final ThreadLocal> SDF_THREAD_LOCAL + = new ThreadLocal>() { + @Override + protected Map initialValue() { + return new HashMap<>(); + } + + @Override + public void remove() { + super.remove(); + } + }; + + + @SuppressLint("SimpleDateFormat") + public static SimpleDateFormat getSafeDateFormat(String pattern) { + Map sdfMap = SDF_THREAD_LOCAL.get(); + //noinspection ConstantConditions + SimpleDateFormat simpleDateFormat = sdfMap.get(pattern); + if (simpleDateFormat == null) { + simpleDateFormat = new SimpleDateFormat(pattern); + sdfMap.put(pattern, simpleDateFormat); + } + return simpleDateFormat; + } + } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt index eed566129f..687072599c 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt @@ -7,7 +7,8 @@ import android.os.Handler import android.os.Looper import android.widget.ImageView import com.mogo.commons.AbsMogoApplication -import java.lang.RuntimeException +import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.util.ThreadUtils import java.lang.ref.SoftReference class FrameAnimatorContainer (resId: Int, @@ -32,6 +33,24 @@ class FrameAnimatorContainer (resId: Int, var isOnce:Boolean = false var sequence:Boolean = true + fun setFtp(fps:Int){ + mDelayMillis = 1000 / fps + } + + companion object{ + fun getData(resId: Int): IntArray { + val array = AbsMogoApplication.getApp().resources.obtainTypedArray(resId) + val len = array.length() + val intArray = IntArray(array.length()) + for (i in 0 until len) { + intArray[i] = array.getResourceId(i, 0) + } + array.recycle() + return intArray + } + + } + init { createAnimation(imageView, getData(resId), fps,initFirstFrame,width,height) this.isOnce = isOnce @@ -92,10 +111,19 @@ class FrameAnimatorContainer (resId: Int, stop() } } - if(!sequence){// 倒叙 - return mFrames[mFrames.size-1-mIndex] + if(mIndex==mFrames.size-1){ + mOnAnimationStoppedListener?.playOnce() } - return mFrames[mIndex] + val nextInfo= if(sequence){// 倒叙 + try { + mFrames[mIndex] + }catch (e:ArrayIndexOutOfBoundsException){ + mFrames.last() + } + }else{ + mFrames[mFrames.size-1-mIndex] + } + return nextInfo } @Synchronized @@ -115,12 +143,12 @@ class FrameAnimatorContainer (resId: Int, mHandler?.removeCallbacksAndMessages(null) val runnable: Runnable = object : Runnable { override fun run() { + Logger.d(TAG, "runnable: isMainThread:${ThreadUtils.isMainThread()}, threadName=${Thread.currentThread().name}") val imageView = mSoftReferenceImageView!!.get() if (!mShouldRun || imageView == null) { mIsRunning = false - if (mOnAnimationStoppedListener != null) { - mOnAnimationStoppedListener!!.AnimationStopped() - } + mOnAnimationStoppedListener?.AnimationStopped() + Logger.d(TAG, "结束动画1") return } mIsRunning = true @@ -129,29 +157,34 @@ class FrameAnimatorContainer (resId: Int, val imageRes: Int = next if (!mShouldRun || imageView == null) { mIsRunning = false - if (mOnAnimationStoppedListener != null) { - mOnAnimationStoppedListener!!.AnimationStopped() - } + mOnAnimationStoppedListener?.AnimationStopped() + Logger.d(TAG, "结束动画2") return } mHandler?.postDelayed(this, mDelayMillis.toLong()) if (mBitmap != null) { // so Build.VERSION.SDK_INT >= 11 - var bitmap: Bitmap? = null - try { - bitmap = BitmapFactory.decodeResource( - imageView.resources, - imageRes, - mBitmapOptions - ) - } catch (e: Exception) { - e.printStackTrace() - } - if (bitmap != null) { - imageView.setImageBitmap(bitmap) - } else { - imageView.setImageResource(imageRes) - mBitmap!!.recycle() - mBitmap = null + ThreadUtils.getFixedPool(1).submit { + Logger.d(TAG, "decodeResource Runnable: isMainThread:${ThreadUtils.isMainThread()}, threadName=${Thread.currentThread().name}") + var bitmap: Bitmap? = null + try { + bitmap = BitmapFactory.decodeResource( + imageView.resources, + imageRes, + mBitmapOptions + ) + } catch (e: Exception) { + e.printStackTrace() + } + ThreadUtils.runOnUiThread({ + Logger.d(TAG, "setImageBitmap Runnable: isMainThread:${ThreadUtils.isMainThread()}, threadName=${Thread.currentThread().name}") + if (bitmap != null) { + imageView.setImageBitmap(bitmap) + } else { + imageView.setImageResource(imageRes) + mBitmap!!.recycle() + mBitmap = null + } + }, ThreadUtils.MODE.QUEUE) } } else { imageView.setImageResource(imageRes) @@ -187,16 +220,6 @@ class FrameAnimatorContainer (resId: Int, * @param resId * @return */ - fun getData(resId: Int): IntArray { - val array = AbsMogoApplication.getApp().resources.obtainTypedArray(resId) - val len = array.length() - val intArray = IntArray(array.length()) - for (i in 0 until len) { - intArray[i] = array.getResourceId(i, 0) - } - array.recycle() - return intArray - } fun setData(mFrames: IntArray){ this.mFrames = mFrames @@ -207,5 +230,6 @@ class FrameAnimatorContainer (resId: Int, */ interface OnAnimationStoppedListener { fun AnimationStopped() + fun playOnce(){} } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/MultiRequestLimitChecker.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/MultiRequestLimitChecker.kt new file mode 100644 index 0000000000..9199c02b4e --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/MultiRequestLimitChecker.kt @@ -0,0 +1,94 @@ +package com.mogo.och.common.module.utils + +import android.text.TextUtils +import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.util.EncryptUtils +import java.util.concurrent.ConcurrentHashMap + +/** + * 网络请求时最大请求数的检查类 + * 使用:建议在Model中离请求最近的地方来判断 + * 场景:如判断是否到站点(高频率坐标回调时在弱网情况下会产生大量同一参数的网络请求, + * 当网络恢复时会造成同一时间的大量并发请求拉爆服务端) + */ +class MultiRequestLimitChecker private constructor() { + + companion object { + const val TAG = "MultiRequestLimitChecker" + + private val multiRequestLimitChecker: MultiRequestLimitChecker by lazy { MultiRequestLimitChecker() } + + fun getInstance(): MultiRequestLimitChecker { + return multiRequestLimitChecker + } + + fun generateRequestId(tag: String, vararg businessParams: String): String { + require(tag.isNotBlank()) { + Logger.e(TAG, "generateRequestId, Tag cannot be blank") + return "Tag cannot be blank" + } + + // 将tag和业务参数映射为唯一字符串 + val combinedString = tag + stringifyBusinessParams(*businessParams) + + // 计算MD5哈希 + return EncryptUtils.encryptMD5ToString(combinedString) + } + + private fun stringifyBusinessParams(vararg businessParams: String): String { + return businessParams.joinToString(";") + } + } + + private val requestCheckers: MutableMap = ConcurrentHashMap() + + @Synchronized + fun canMakeRequest(requestId: String, maxRequests: Int): Boolean { + if (TextUtils.isEmpty(requestId)) { + Logger.e(TAG, "canMakeRequest requestId为空,return") + return false + } + var requestChecker = requestCheckers[requestId] + + if (requestChecker == null) { + // 如果不存在对应请求的 RequestLimitChecker,创建一个并添加到 Map 中 + requestChecker = RequestLimitChecker(maxRequests) + requestCheckers[requestId] = requestChecker + } + + return requestChecker.canMakeRequest() + } + + @Synchronized + fun decreaseRequestCount(requestId: String) { + if (TextUtils.isEmpty(requestId)) { + Logger.e(TAG, "decreaseRequestCount requestId为空,return") + return + } + val requestChecker = requestCheckers[requestId] + requestChecker?.decreaseRequestCount() + } +} + +class RequestLimitChecker(private val maxRequests: Int) { + private var requestCount = 0 + + @Synchronized + fun canMakeRequest(): Boolean { + // 判断是否达到最大请求次数 + return if (requestCount < maxRequests) { + requestCount++ + true + } else { + false + } + } + + @Synchronized + fun decreaseRequestCount() { + // 减小请求计数器,用于处理取消或失败的请求 + if (requestCount > 0) { + requestCount-- + } + } +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java index 8eb92a1132..0ced0d82a4 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/OCHThreadPoolManager.java @@ -134,6 +134,49 @@ public class OCHThreadPoolManager { } } + //====================================================================================== + //=============== 位置坐标回调处理线程池 ========== + //====================================================================================== + /** + * 线程池的对象(高频坐标处理, keepAliveTime=30s, 等待队列容量=200, 异常处理机制=丢弃队列最前面的任务) + */ + private ThreadPoolExecutor locationExecutor; + + /** + * 开启一个无返回结果的线程 + */ + public void locationExecute(Runnable r) { + if (locationExecutor == null) { + /* + * corePoolSize:核心线程数 + * maximumPoolSize:线程池所容纳最大线程数(workQueue队列满了之后才开启) + * keepAliveTime:非核心线程闲置时间超时时长 + * unit:keepAliveTime的单位 + * workQueue:等待队列,存储还未执行的任务 + * threadFactory:线程创建的工厂 + * handler:异常处理机制 + * + */ + locationExecutor = new ThreadPoolExecutor(CPU_COUNT + 1, CPU_COUNT * 2 + 1, + 30, TimeUnit.SECONDS, new ArrayBlockingQueue<>(200), + Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy()); + } + // 把一个任务丢到了线程池中 + try { + locationExecutor.execute(r); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 把任务移除等待队列 + */ + public void locationCancel(Runnable r) { + if (r != null) { + locationExecutor.getQueue().remove(r); + } + } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceManager.kt deleted file mode 100644 index 498a9ef234..0000000000 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceManager.kt +++ /dev/null @@ -1,166 +0,0 @@ -package com.mogo.och.common.module.voice - -import com.mogo.commons.AbsMogoApplication -import com.mogo.commons.voice.AIAssist -import com.mogo.och.common.module.R -import com.mogo.tts.base.IMogoTTSCallback -import com.mogo.tts.base.LangTtsEntity -import com.mogo.tts.base.LanguageType -import java.util.ArrayList - -object VoiceManager { - - fun arrivedStation(siteNameCN: String?) { - arrivedStation(siteNameCN,"") - } - fun arrivedStation(siteNameCN: String?,siteNameKR: String?) { - arrivedStation(siteNameCN,siteNameKR,null) - } - - fun arrivedStation(siteNameCN: String?, siteNameKR: String?,callBack: IMogoTTSCallback?=null) { - val contenxt = AbsMogoApplication.getApp() - val list: MutableList = ArrayList() - siteNameCN?.let { - val chineseTTS = LangTtsEntity( - contenxt.getString(R.string.arrived_station_zh, it), - LanguageType.CHINESE - ) - val engTTS = LangTtsEntity( - contenxt.getString(R.string.arrived_station_en, it), - LanguageType.CHINESE - ) - val koreanTTS = LangTtsEntity( - contenxt.getString(R.string.arrived_station_ko, siteNameKR?:it), - LanguageType.KOREAN - ) - list.add(chineseTTS) - list.add(engTTS) - list.add(koreanTTS) - } - - VoiceNotice.showNotice(list, AIAssist.LEVEL1,callBack) - } - - fun leaveStation(siteNameCN: String?){ - leaveStation(siteNameCN,"") - } - - fun leaveStation(siteNameCN: String?,siteNameKR: String?){ - leaveStation(siteNameCN,siteNameKR,null) - } - - fun leaveStation(siteNameCN: String?, siteNameKR: String?,callBack: IMogoTTSCallback?=null) { - val list: MutableList = ArrayList() - val contenxt = AbsMogoApplication.getApp() - siteNameCN?.let { - val chineseTTS = LangTtsEntity( - contenxt.getString(R.string.leave_station_zh, it), - LanguageType.CHINESE - ) - val engTTS = LangTtsEntity( - contenxt.getString(R.string.leave_station_en, it), - LanguageType.CHINESE - ) - list.add(chineseTTS) - list.add(engTTS) - - val koreanTTS = LangTtsEntity( - contenxt.getString(R.string.leave_station_ko, siteNameKR ?: it), - LanguageType.KOREAN - ) - list.add(koreanTTS) - } - VoiceNotice.showNotice(list, AIAssist.LEVEL1,callBack) - } - - fun surplus5min(){ - surplus15min(null) - } - - fun surplus15min(callBack: IMogoTTSCallback?=null) { - val contenxt = AbsMogoApplication.getApp() - val list: MutableList = ArrayList() - val chineseTTS = LangTtsEntity(contenxt.getString(R.string.surplus15_order_zh), LanguageType.CHINESE) - val engTTS = LangTtsEntity(contenxt.getString(R.string.surplus15_order_en), LanguageType.ENGLISH) - val koreanTTS = LangTtsEntity(contenxt.getString(R.string.surplus15_order_ko), LanguageType.KOREAN) - list.add(chineseTTS) - list.add(engTTS) - list.add(koreanTTS) - VoiceNotice.showNotice(list, AIAssist.LEVEL0,callBack) - } - fun endOrder(){ - endOrder(null) - } - fun endOrder(callBack: IMogoTTSCallback?=null) { - val contenxt = AbsMogoApplication.getApp() - val list: MutableList = ArrayList() - val chineseTTS = LangTtsEntity(contenxt.getString(R.string.end_order_zh), LanguageType.CHINESE) - val engTTS = LangTtsEntity(contenxt.getString(R.string.end_order_en), LanguageType.ENGLISH) - val koreanTTS = LangTtsEntity(contenxt.getString(R.string.end_order_ko), LanguageType.KOREAN) - list.add(chineseTTS) - list.add(engTTS) - list.add(koreanTTS) - VoiceNotice.showNotice(list, AIAssist.LEVEL0,callBack) - } - - fun arrivedStationBus(siteNameCN: String?, siteNameKR: String?) { - val context = AbsMogoApplication.getApp() - val list: MutableList = ArrayList() - siteNameCN?.let { - val chineseTTS = LangTtsEntity( - context.getString(R.string.bus_arrived_station_tip, it), - LanguageType.CHINESE - ) - val engTTS = LangTtsEntity( - context.getString(R.string.bus_arrived_station_english_tip, it), - LanguageType.CHINESE - ) - val koreanTTS = LangTtsEntity( - context.getString(R.string.bus_arrived_station_korean_tip, siteNameKR?:it), - LanguageType.KOREAN - ) - list.add(chineseTTS) - list.add(engTTS) - list.add(koreanTTS) - } - - VoiceNotice.showNotice(list, AIAssist.LEVEL1,null) - } - - fun leaveStationBus(siteNameCN: String?, siteNameKR: String?) { - val list: MutableList = ArrayList() - val context = AbsMogoApplication.getApp() - siteNameCN?.let { - val chineseTTS = LangTtsEntity( - context.getString(R.string.bus_leave_station_tip, it), - LanguageType.CHINESE - ) - val engTTS = LangTtsEntity( - context.getString(R.string.bus_leave_station_english_tip, it), - LanguageType.CHINESE - ) - list.add(chineseTTS) - list.add(engTTS) - - val koreanTTS = LangTtsEntity( - context.getString(R.string.bus_leave_station_korean_tip, siteNameKR ?: it), - LanguageType.KOREAN - ) - list.add(koreanTTS) - } - VoiceNotice.showNotice(list, AIAssist.LEVEL1,null) - } - - fun endOrderBus() { - val context = AbsMogoApplication.getApp() - val list: MutableList = ArrayList() - val chineseTTS = LangTtsEntity(context.getString(R.string.bus_end_task_tip), LanguageType.CHINESE) - val engTTS = LangTtsEntity(context.getString(R.string.bus_end_task_english_tip), LanguageType.ENGLISH) - val koreanTTS = LangTtsEntity(context.getString(R.string.bus_end_task_korean_tip), LanguageType.KOREAN) - list.add(chineseTTS) - list.add(engTTS) - list.add(koreanTTS) - VoiceNotice.showNotice(list, AIAssist.LEVEL0,null) - } - -} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt index d3a188508e..7794099b4f 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt @@ -3,6 +3,7 @@ package com.mogo.och.common.module.voice import com.mogo.commons.AbsMogoApplication import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager import com.mogo.tts.base.IMogoTTSCallback import com.mogo.tts.base.LangTtsEntity import com.mogo.tts.base.MultiLangTtsEntity @@ -24,17 +25,23 @@ object VoiceNotice { } @JvmStatic - fun showNotice(notice: String?, level: Int, delayed: Long = 0) { + fun showNotice(notice: String?, delayed: Long,callback:IMogoTTSCallback ) { + showNotice(notice, AIAssist.LEVEL0, delayed,callback) + } + + + @JvmStatic + fun showNotice(notice: String?, level: Int, delayed: Long = 0,callBack:IMogoTTSCallback?=null) { notice?.let { if (delayed == 0L) { UiThreadHandler.post { AIAssist.getInstance(AbsMogoApplication.getApp()) - .speakTTSVoiceWithLevel(it, level) + .speakTTSVoiceWithLevel(it, level,callCallBack(callBack)) } } else { UiThreadHandler.postDelayed({ AIAssist.getInstance(AbsMogoApplication.getApp()) - .speakTTSVoiceWithLevel(it, level) + .speakTTSVoiceWithLevel(it, level, callCallBack(callBack)) }, delayed) } } @@ -53,6 +60,29 @@ object VoiceNotice { @JvmStatic fun showNotice(listTTS: MutableList, level: Int,callBack: IMogoTTSCallback?=null) { AIAssist.getInstance(AbsMogoApplication.getApp()) - .speakMultiLangTTSWithLevel(MultiLangTtsEntity(listTTS), level, callBack) + .speakMultiLangTTSWithLevel(MultiLangTtsEntity(listTTS), level,callCallBack(callBack)) + } + + + private fun callCallBack(callBack: IMogoTTSCallback?):IMogoTTSCallback{ + return object :IMogoTTSCallback{ + override fun onSpeakStart(speakText: String?) { + super.onSpeakStart(speakText) + callBack?.onSpeakStart(speakText) + AudioFocusManager.setTTSFocusChange(true) + } + + override fun onSpeakEnd(speakText: String?) { + super.onSpeakEnd(speakText) + callBack?.onSpeakEnd(speakText) + AudioFocusManager.setTTSFocusChange(false) + } + + override fun onSpeakError(speakText: String?, errorMsg: String?) { + super.onSpeakError(speakText, errorMsg) + callBack?.onSpeakError(speakText,errorMsg) + AudioFocusManager.setTTSFocusChange(false) + } + } } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt deleted file mode 100644 index 182dc21e52..0000000000 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt +++ /dev/null @@ -1,281 +0,0 @@ -package com.mogo.och.common.module.wigets - -import android.Manifest -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.appcompat.widget.AppCompatImageView -import androidx.core.app.ActivityCompat -import com.mogo.eagle.core.data.config.FunctionBuildConfig -import com.mogo.eagle.core.data.msgbox.MsgBoxBean -import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.data.msgbox.VoiceMsg -import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager -import com.mogo.eagle.core.function.main.MainPresenter -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils -import com.mogo.eagle.core.utilcode.util.ActivityUtils -import com.mogo.eagle.core.utilcode.util.ClickUtils -import com.mogo.och.common.module.R -import com.mogo.och.common.module.utils.FrameAnimatorContainer -import com.mogo.och.common.module.utils.PermissionUtil -import com.mogo.och.common.module.wigets.toast.ToastCharterUtils -import com.mogo.tts.base.zhi.AsrTextBean -import com.mogo.tts.base.zhi.AvatarManager -import com.mogo.tts.base.zhi.CallbackWidget -import com.mogo.tts.base.zhi.ZhiRecordWinUi -import java.util.concurrent.atomic.AtomicBoolean - -class ZhiView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : AppCompatImageView(context, attrs, defStyleAttr), - ZhiRecordWinUi { - companion object { - const val TAG = "ZhiView" - } - - private var currentAnim = FrameAnimatorContainer(R.array.xiaozhi_normal, 12,this) - - @Volatile - private var status = ZhiRecordWinUi.RecordStatus.STATUS_SILENCE - private var animalState = AnimalState.Normal - private val enableZhi = AtomicBoolean(true) - init { - val xiaozhiNormal = currentAnim.getData(R.array.xiaozhi_normal) - val xiaozhiThink = currentAnim.getData(R.array.xiaozhi_think) - val xiaozhiThinkNormal = currentAnim.getData(R.array.xiaozhi_think_normal) - currentAnim.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener{ - override fun AnimationStopped() { - when (status) { - ZhiRecordWinUi.RecordStatus.STATUS_SILENCE -> { - if(animalState==AnimalState.SPEAK){ - currentAnim.setData(xiaozhiThinkNormal) - currentAnim.isOnce = true - currentAnim.sequence = false - currentAnim.reStart() - animalState = AnimalState.NORMAL_SPEAK - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "动画$status speak to normal") - }else{ - currentAnim.setData(xiaozhiNormal) - currentAnim.isOnce = false - currentAnim.sequence = true - currentAnim.reStart() - animalState = AnimalState.Normal - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "动画$status normal") - } - } - ZhiRecordWinUi.RecordStatus.STATUS_LISTENING -> { - if(animalState==AnimalState.Normal){ - currentAnim.setData(xiaozhiThinkNormal) - currentAnim.isOnce = true - currentAnim.sequence = true - currentAnim.reStart() - animalState = AnimalState.NORMAL_SPEAK - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "动画$status normal to speak") - }else{ - currentAnim.setData(xiaozhiThink) - currentAnim.isOnce = false - currentAnim.sequence = true - currentAnim.reStart() - animalState = AnimalState.SPEAK - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "动画$status speak") - } - } - ZhiRecordWinUi.RecordStatus.STATUS_UNDERSTANDING -> {} - ZhiRecordWinUi.RecordStatus.STATUS_UNDERSTAND_END -> {} - ZhiRecordWinUi.RecordStatus.STATUS_SPEAKING -> { - if(animalState==AnimalState.SPEAK){ - currentAnim.setData(xiaozhiThinkNormal) - currentAnim.isOnce = true - currentAnim.sequence = false - currentAnim.reStart() - animalState = AnimalState.NORMAL_SPEAK - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "动画$status speak to normal") - }else{ - currentAnim.setData(xiaozhiNormal) - currentAnim.isOnce = false - currentAnim.sequence = true - currentAnim.reStart() - animalState = AnimalState.Normal - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "动画$status normal") - } - - } - } - } - }) - - setOnClickListener { - if (!AppIdentityModeUtils.isTaxiPassenger(FunctionBuildConfig.appIdentityMode)) { - return@setOnClickListener - } - if (ClickUtils.isClickTooFrequent(this,3000)) { - ToastCharterUtils.showToastShort("请稍后唤醒") - return@setOnClickListener - } - if (PermissionUtil.checkPermission(context,Manifest.permission.RECORD_AUDIO)) { - if(enableZhi.get()) { - AvatarManager.wakeupXiaoZhi() - } - }else{ - //申请悬浮窗权限 - val shouldShowRequestPermissionRationale = ActivityUtils.getTopActivity() - .shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO) - if(shouldShowRequestPermissionRationale){// 可以弹窗系统权限框 - ActivityCompat.requestPermissions(ActivityUtils.getTopActivity(), - arrayOf( - Manifest.permission.RECORD_AUDIO, - ), MainPresenter.MOGO_PERMISSION_REQUEST_CODE - ) - }else{// 不会弹系统弹窗 - PermissionsDialogUtils.openAppDetails(ActivityUtils.getTopActivity(), "录音机", 100) - } - - } - } - } - - fun setZhiEnable(enable:Boolean){ - if(enable){// 可用 - enableZhi.set(true) - AvatarManager.enableXiaoZhi(false) - }else{// 不可用 - enableZhi.set(false) - AvatarManager.enableXiaoZhi(true) - } - } - - override fun onWindowFocusChanged(hasWindowFocus: Boolean) { - super.onWindowFocusChanged(hasWindowFocus) - CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "焦点与否:${hasWindowFocus}") - AvatarManager.enableXiaoZhi(!hasWindowFocus) - if(hasWindowFocus){ - currentAnim.reStart() - }else{ - currentAnim.stop() - } - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - AvatarManager.addDistanceListener(TAG,this) - currentAnim.reStart() - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - AvatarManager.removeListener(TAG) - } - - override fun start(reason: String?) { - CallerLogger.d(TAG,"-----start $reason") - } - - override fun onStatusChange(status: ZhiRecordWinUi.RecordStatus?) { - CallerLogger.d(TAG,"-----onStatusChange $status") - this.status = status?:ZhiRecordWinUi.RecordStatus.STATUS_SILENCE - when (status) { - ZhiRecordWinUi.RecordStatus.STATUS_SILENCE -> { - currentAnim.stop() - } - ZhiRecordWinUi.RecordStatus.STATUS_LISTENING -> {// 监听中 - currentAnim.stop() - } - ZhiRecordWinUi.RecordStatus.STATUS_UNDERSTANDING -> { - // 正在理解 - CallerLogger.d(TAG,"正在理解") - } - ZhiRecordWinUi.RecordStatus.STATUS_UNDERSTAND_END -> { - CallerLogger.d(TAG,"理解结束") - } - ZhiRecordWinUi.RecordStatus.STATUS_SPEAKING -> { - // 正在说话 - currentAnim.stop() - } - else -> { - - } - } - - - - - } - - override fun close(trigger: Boolean) { - CallerLogger.d(TAG,"-----close $trigger") - onStatusChange(ZhiRecordWinUi.RecordStatus.STATUS_SILENCE) - val msg = VoiceMsg( - isWakeUp = false, - isWakeUpEnd = true, - msg = null, - isLastMsg = true, - isResp = true - ) - pushMsgBox(msg) - } - - - override fun onVolumeChange(volume: Int) { - CallerLogger.d(TAG,"-----onVolumeChange $volume") - } - - /** - * 用户输入的 - */ - override fun showInputText(asrTextBean: AsrTextBean?) { - CallerLogger.d(TAG,"-----showInputText $asrTextBean") - asrTextBean.let { - val msg = VoiceMsg( - isWakeUp = false, - isWakeUpEnd = false, - msg = it?.text, - isLastMsg = it?.isLast == true, - isResp = false - ) - pushMsgBox(msg) - } - } - - /** - * 特定View - */ - override fun showOutPutWidget(callbackWidget: CallbackWidget?) { - // todo 咱不支持定制显示 包括天气 - CallerLogger.d(TAG,"-----showOutPutWidget $callbackWidget") - } - - /** - * 小智说的 - */ - override fun showOutputText(outPutText: String?) { - CallerLogger.d(TAG,"-----showOutputText $outPutText") - outPutText?.let { - val msg = VoiceMsg( - isWakeUp = false, - isWakeUpEnd = false, - msg = it, - isLastMsg = false, - isResp = true - ) - pushMsgBox(msg) - } - } - - private fun pushMsgBox(msg:VoiceMsg){ - CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.VOICE, msg)) - } - - enum class AnimalState { - Normal, - NORMAL_SPEAK, - SPEAK_NORMAL, - SPEAK, - } - - -} diff --git a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/IBusPassengerMapDirectionView.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/IMapDirectionView.java similarity index 74% rename from OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/IBusPassengerMapDirectionView.java rename to OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/IMapDirectionView.java index 7f525d0464..114957dd67 100644 --- a/OCH/bus/passenger/src/main/java/jinlv/com/mogo/och/bus/passenger/ui/IBusPassengerMapDirectionView.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/IMapDirectionView.java @@ -1,10 +1,10 @@ -package com.mogo.och.bus.passenger.ui; +package com.mogo.och.common.module.wigets.mapdirectionview; /** * @author xiaoyuzhou * @date 2021/6/24 11:33 上午 */ -public interface IBusPassengerMapDirectionView { +public interface IMapDirectionView { /** * 绘制路径线 diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/MapDirectionView.kt similarity index 62% rename from OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt rename to OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/MapDirectionView.kt index 4a060b9c11..9f809d75e1 100644 --- a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/BusPassengerMapDirectionView.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/MapDirectionView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.shuttle.passenger.ui.mapdirectionview +package com.mogo.och.common.module.wigets.mapdirectionview import android.content.Context import android.os.Bundle @@ -24,46 +24,97 @@ import com.amap.api.maps.model.PolylineOptions import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.och.shuttle.passenger.R -import com.mogo.och.shuttle.passenger.ui.IBusPassengerMapDirectionView -import com.mogo.och.shuttle.passenger.utils.BusPassengerMapAssetStyleUtil +import com.mogo.och.common.module.R +import com.mogo.och.shuttle.passenger.ui.mapdirectionview.MapDirectionViewModel +import me.jessyan.autosize.utils.AutoSizeUtils /** * 乘客屏小地图 */ -class BusPassengerMapDirectionView @JvmOverloads constructor( +class MapDirectionView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : RelativeLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, - IBusPassengerMapDirectionView, AMap.OnCameraChangeListener, + IMapDirectionView, AMap.OnCameraChangeListener, MapDirectionViewModel.ItineraryViewCallback { companion object { //小地图名称 const val TAG = "BusPassengerMapDirectionView" } + private var mapStylePath: String? = null + private var mapStyleExtraPath: String? = null + private var carDrawable: Int = -1 + private var compassDrawable: Int = -1 + private var startPointDrawable: Int = -1 + private var endPointDrawable: Int = -1 + private var arrivedDrawable: Int = -1 + private var unArrivedDrawable: Int = -1 + private var resetDrawableMarginRight: Int = -1 + private var resetDrawableMarginBottom: Int = -1 + private var leftPadding: Int = 100 + private var topPadding: Int = 100 + private var rightPadding: Int = 100 + private var bottomPadding: Int = 100 + private lateinit var mAMapNaviView: TextureMapView private lateinit var mAMap: AMap private var mPolyline: Polyline? = null + private val mLineMarkers: MutableList = ArrayList() + private lateinit var mCarMarker: Marker + // 除了开始站点和结束站点的中间站点 用来设置图标和地图范围圈定 private val mLineStationLatLng: MutableList = ArrayList() //站点坐标数据 var textureList: MutableList = ArrayList() var texIndexList: MutableList = ArrayList() private var mArrivedRes: BitmapDescriptor? = null private var mUnArrivedRes: BitmapDescriptor? = null + private var mStartStationPoint: BitmapDescriptor? = null + private var mEndStationPoint: BitmapDescriptor? = null + + private var mArrivedStationPoint: BitmapDescriptor? = null + private var mUArrivedStationPoint: BitmapDescriptor? = null + + private val routeArrived: MutableList = ArrayList() private val routeArriving: MutableList = ArrayList() private var location: MogoLocation? = null init { try { + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MapDirectionView) + mapStylePath = typedArray.getString(R.styleable.MapDirectionView_mapStylePath) + mapStyleExtraPath = typedArray.getString(R.styleable.MapDirectionView_mapStyleExtraPath) + carDrawable = typedArray.getResourceId(R.styleable.MapDirectionView_carDrawable, -1) + compassDrawable = typedArray.getResourceId(R.styleable.MapDirectionView_compassDrawable, -1) + startPointDrawable = + typedArray.getResourceId(R.styleable.MapDirectionView_startPointDrawable, -1) + endPointDrawable = + typedArray.getResourceId(R.styleable.MapDirectionView_endPointDrawable, -1) + arrivedDrawable = typedArray.getResourceId(R.styleable.MapDirectionView_arrivedDrawable, -1) + unArrivedDrawable = + typedArray.getResourceId(R.styleable.MapDirectionView_unArrivedDrawable, -1) + resetDrawableMarginRight = typedArray.getResourceId( + R.styleable.MapDirectionView_resetDrawableMarginRight, + AutoSizeUtils.dp2px(context, 40f) + ) + resetDrawableMarginBottom = typedArray.getResourceId( + R.styleable.MapDirectionView_resetDrawableMarginBottom, + AutoSizeUtils.dp2px(context, 40f) + ) + leftPadding = typedArray.getInt(R.styleable.MapDirectionView_leftPadding, 100) + topPadding = typedArray.getInt(R.styleable.MapDirectionView_topPadding, 100) + rightPadding = typedArray.getInt(R.styleable.MapDirectionView_rightPadding, 100) + bottomPadding = typedArray.getInt(R.styleable.MapDirectionView_bottomPadding, 100) + typedArray.recycle() initView(context) } catch (e: Exception) { e.printStackTrace() @@ -77,7 +128,7 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( initAMapView() // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 1, this) } override fun onDetachedFromWindow() { @@ -96,25 +147,27 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( // 设置 锚点 图标 mCarMarker = mAMap.addMarker( - MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_car)) + MarkerOptions().icon( + BitmapDescriptorFactory.fromResource(if (carDrawable != -1) carDrawable else R.drawable.common_map_car)) .anchor(0.5f, 0.5f) ) - mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_arrow_arrived) - mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_arrow_un_arrive) + mArrivedRes = BitmapDescriptorFactory.fromResource(if (arrivedDrawable != -1) arrivedDrawable else R.drawable.taxi_map_arrow_arrived) + mUnArrivedRes = BitmapDescriptorFactory.fromResource(if (unArrivedDrawable != -1) unArrivedDrawable else R.drawable.taxi_map_arrow_un_arrive) + mStartStationPoint = BitmapDescriptorFactory.fromResource(if (startPointDrawable != -1) startPointDrawable else R.drawable.common_map_start_point) + mEndStationPoint = BitmapDescriptorFactory.fromResource(if (endPointDrawable != -1) endPointDrawable else R.drawable.common_map_end_point) + + mArrivedStationPoint = BitmapDescriptorFactory.fromResource(if (endPointDrawable != -1) endPointDrawable else R.drawable.common_map_arrived_point) + mUArrivedStationPoint = BitmapDescriptorFactory.fromResource(if (endPointDrawable != -1) endPointDrawable else R.drawable.common_map_unarrived_point) // 加载自定义样式 - val customMapStyleOptions = CustomMapStyleOptions() - .setEnable(true) - .setStyleData( - BusPassengerMapAssetStyleUtil.getAssetsStyle( - context, "map_style.data" - ) - ) - .setStyleExtraData( - BusPassengerMapAssetStyleUtil.getAssetsExtraStyle( - context, "map_style_extra.data" - ) - ) + val customMapStyleOptions = CustomMapStyleOptions().setEnable(true) + + if (!mapStylePath.isNullOrEmpty() && !mapStyleExtraPath.isNullOrEmpty()) { + customMapStyleOptions.styleData = + MapAssetStyleUtils.getAssetsStyle(context, mapStylePath) + customMapStyleOptions.styleExtraData = + MapAssetStyleUtils.getAssetsExtraStyle(context, mapStyleExtraPath) + } // 设置自定义样式 mAMap.setCustomMapStyle(customMapStyleOptions) @@ -129,20 +182,17 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( mAMap.setOnMapLoadedListener { d(SceneConstant.M_BUS_P + TAG, "smp---onMapLoaded") // 加载自定义样式 - val options = CustomMapStyleOptions() - .setEnable(true) - .setStyleData( - BusPassengerMapAssetStyleUtil.getAssetsStyle( - context, "map_style.data" - ) - ) - .setStyleExtraData( - BusPassengerMapAssetStyleUtil.getAssetsExtraStyle( - context, "map_style_extra.data" - ) - ) + val options = CustomMapStyleOptions().setEnable(true) + if (!mapStylePath.isNullOrEmpty() && !mapStyleExtraPath.isNullOrEmpty()) { + options.styleData = + MapAssetStyleUtils.getAssetsStyle(context, mapStylePath) + options.styleExtraData = + MapAssetStyleUtils.getAssetsExtraStyle(context, mapStyleExtraPath) + } // 设置自定义样式 mAMap.setCustomMapStyle(options) + mAMap.uiSettings?.isZoomControlsEnabled = false + mAMapNaviView.map.setPointToCenter( mAMapNaviView.width / 2, mAMapNaviView.height / 2 @@ -260,11 +310,15 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( override fun setLineMarker() {} fun clearCoordinatesLatLng() { - textureList.clear() - texIndexList.clear() - routeArrived.clear() - routeArriving.clear() - mLineStationLatLng.clear() + try { + textureList.clear() + texIndexList.clear() + routeArrived.clear() + routeArriving.clear() + mLineStationLatLng.clear() + }catch (e:Exception){ + e.printStackTrace() + } d(SceneConstant.M_BUS_P + TAG, " mCoordinatesLatLng.clear ") } @@ -289,14 +343,18 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( routeArriving: List, location: MogoLocation? ) { - this.routeArrived.clear() - this.routeArrived.addAll(routeArrived) - this.routeArriving.clear() - this.routeArriving.addAll(routeArriving) - this.location = location - UiThreadHandler.post({ - drawablePolyline() - }, UiThreadHandler.MODE.QUEUE) + try { + this.routeArrived.clear() + this.routeArrived.addAll(routeArrived) + this.routeArriving.clear() + this.routeArriving.addAll(routeArriving) + this.location = location + UiThreadHandler.post({ + drawablePolyline() + }, UiThreadHandler.MODE.QUEUE) + }catch (e:Exception){ + e.printStackTrace() + } } fun clearLineMarkers() { @@ -307,6 +365,7 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( mLineMarkers.clear() } + // 设置站点 fun setLinePointMarkerAndDraw(mLineStationsList: List, currentIndex: Int) { clearLineMarkers() mLineStationLatLng.clear() @@ -316,27 +375,18 @@ class BusPassengerMapDirectionView @JvmOverloads constructor( val size = mLineStationsList.size val mStartMarker = mAMap.addMarker( MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_start_point)) - ) - val mEndMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_end_point)) + .icon(mStartStationPoint) ) + val mEndMarker = mAMap.addMarker(MarkerOptions().icon(mEndStationPoint)) mStartMarker.position = mLineStationsList[0] mLineMarkers.add(0, mStartMarker) for (i in mLineStationsList.indices) { if (currentIndex <= i && i < size - 1 && i > 0) { //未到达 - val unArrivedMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_unarrived_point)) - ) + val unArrivedMarker = mAMap.addMarker(MarkerOptions().icon(mUArrivedStationPoint)) unArrivedMarker.position = mLineStationsList[i] mLineMarkers.add(i, unArrivedMarker) } else if (i in 1 until currentIndex) { - val arrivedMarker = mAMap.addMarker( - MarkerOptions() - .icon(BitmapDescriptorFactory.fromResource(R.drawable.shuttle_p_jl_map_arrived_point)) - ) + val arrivedMarker = mAMap.addMarker(MarkerOptions().icon(mArrivedStationPoint)) arrivedMarker.position = mLineStationsList[i] mLineMarkers.add(i, arrivedMarker) } diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/MapDirectionViewModel.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/MapDirectionViewModel.kt similarity index 100% rename from OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/mapdirectionview/MapDirectionViewModel.kt rename to OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/mapdirectionview/MapDirectionViewModel.kt diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerActivity.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerActivity.kt index 3687df24a3..aed9530eac 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerActivity.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/media/MediaPlayerActivity.kt @@ -32,71 +32,23 @@ class MediaPlayerActivity : AppCompatActivity() { override fun onStart() { super.onStart() - i(SceneConstant.M_BUS_P + TAG, "onResume") + i(SceneConstant.M_BUS_P + TAG, "onStart") } override fun onResume() { super.onResume() i(SceneConstant.M_BUS_P + TAG, "onResume") - checkPermissionSelf() } override fun onPause() { super.onPause() - i(SceneConstant.M_BUS_P + TAG, "onResume") + i(SceneConstant.M_BUS_P + TAG, "onPause") } override fun onStop() { super.onStop() - i(SceneConstant.M_BUS_P + TAG, "onResume") + i(SceneConstant.M_BUS_P + TAG, "onStop") } - fun checkPermissionSelf(){ - i(SceneConstant.M_BUS_P + TAG, "checkPermissionSelf") - val isAllGranted: Boolean = checkPermissionAllGranted( - arrayOf( - Manifest.permission.RECORD_AUDIO, // Manifest.permission.CAMERA, - Manifest.permission.BLUETOOTH, - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, - Manifest.permission.ACCESS_FINE_LOCATION - ) - ) - if (isAllGranted&&Settings.canDrawOverlays(this)) { - restartActivity() - return - } - RxUtils.createSubscribe { - checkPermissionSelf() - } - } - - fun restartActivity(){ - val activityList = ActivityUtils.getActivityList() - activityList.forEach { - if (it is MainLauncherActivity) { - i(SceneConstant.M_BUS_P + TAG, "restartActivity") - val options = ActivityOptions.makeBasic() - options.launchDisplayId = Display.INVALID_DISPLAY - val intent = Intent(this, MainLauncherActivity::class.java) - startActivity(intent, options.toBundle()) - } - } - } - - private fun checkPermissionAllGranted(permissions: Array): Boolean { - for (permission in permissions) { - if (ContextCompat.checkSelfPermission( - this, - permission - ) != PackageManager.PERMISSION_GRANTED - ) { - // 只要有一个权限没有被授予, 则直接返回 false - return false - } - } - return true - } } \ No newline at end of file diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_map_arrived_point.png b/OCH/common/common/src/main/res/drawable-nodpi/common_map_arrived_point.png new file mode 100644 index 0000000000..ac317649b4 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_map_arrived_point.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_map_car.png b/OCH/common/common/src/main/res/drawable-nodpi/common_map_car.png new file mode 100644 index 0000000000..702f10f265 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_map_car.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_map_end_point.png b/OCH/common/common/src/main/res/drawable-nodpi/common_map_end_point.png new file mode 100644 index 0000000000..39262e5ecb Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_map_end_point.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_map_start_point.png b/OCH/common/common/src/main/res/drawable-nodpi/common_map_start_point.png new file mode 100644 index 0000000000..b2e4c69ada Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_map_start_point.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/common_map_unarrived_point.png b/OCH/common/common/src/main/res/drawable-nodpi/common_map_unarrived_point.png new file mode 100644 index 0000000000..ec6081f5a3 Binary files /dev/null and b/OCH/common/common/src/main/res/drawable-nodpi/common_map_unarrived_point.png differ diff --git a/OCH/common/common/src/main/res/layout/shuttle_p_jl_map_view.xml b/OCH/common/common/src/main/res/layout/shuttle_p_jl_map_view.xml new file mode 100644 index 0000000000..d9fadd6ef5 --- /dev/null +++ b/OCH/common/common/src/main/res/layout/shuttle_p_jl_map_view.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/raw/piano_music.mp3 b/OCH/common/common/src/main/res/raw/piano_music.mp3 new file mode 100644 index 0000000000..f0433d990d Binary files /dev/null and b/OCH/common/common/src/main/res/raw/piano_music.mp3 differ diff --git a/OCH/common/common/src/main/res/values/arrays.xml b/OCH/common/common/src/main/res/values/arrays.xml deleted file mode 100644 index 07e7450afa..0000000000 --- a/OCH/common/common/src/main/res/values/arrays.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - @drawable/xiaozhi_normal_0000 - @drawable/xiaozhi_normal_0001 - @drawable/xiaozhi_normal_0002 - @drawable/xiaozhi_normal_0003 - @drawable/xiaozhi_normal_0004 - @drawable/xiaozhi_normal_0005 - @drawable/xiaozhi_normal_0006 - @drawable/xiaozhi_normal_0007 - @drawable/xiaozhi_normal_0008 - @drawable/xiaozhi_normal_0009 - @drawable/xiaozhi_normal_0010 - @drawable/xiaozhi_normal_0011 - @drawable/xiaozhi_normal_0012 - @drawable/xiaozhi_normal_0013 - @drawable/xiaozhi_normal_0014 - @drawable/xiaozhi_normal_0015 - @drawable/xiaozhi_normal_0016 - @drawable/xiaozhi_normal_0017 - @drawable/xiaozhi_normal_0018 - @drawable/xiaozhi_normal_0019 - @drawable/xiaozhi_normal_0020 - @drawable/xiaozhi_normal_0021 - @drawable/xiaozhi_normal_0022 - @drawable/xiaozhi_normal_0023 - @drawable/xiaozhi_normal_0024 - @drawable/xiaozhi_normal_0025 - @drawable/xiaozhi_normal_0026 - @drawable/xiaozhi_normal_0027 - @drawable/xiaozhi_normal_0028 - @drawable/xiaozhi_normal_0029 - @drawable/xiaozhi_normal_0030 - @drawable/xiaozhi_normal_0031 - @drawable/xiaozhi_normal_0032 - @drawable/xiaozhi_normal_0033 - @drawable/xiaozhi_normal_0034 - @drawable/xiaozhi_normal_0035 - @drawable/xiaozhi_normal_0036 - @drawable/xiaozhi_normal_0037 - @drawable/xiaozhi_normal_0038 - @drawable/xiaozhi_normal_0039 - @drawable/xiaozhi_normal_0040 - @drawable/xiaozhi_normal_0041 - @drawable/xiaozhi_normal_0042 - @drawable/xiaozhi_normal_0043 - @drawable/xiaozhi_normal_0044 - @drawable/xiaozhi_normal_0045 - @drawable/xiaozhi_normal_0046 - @drawable/xiaozhi_normal_0047 - @drawable/xiaozhi_normal_0048 - - - - @drawable/charter_p_xiaozhi_think_00 - @drawable/charter_p_xiaozhi_think_01 - @drawable/charter_p_xiaozhi_think_02 - @drawable/charter_p_xiaozhi_think_03 - @drawable/charter_p_xiaozhi_think_04 - @drawable/charter_p_xiaozhi_think_05 - @drawable/charter_p_xiaozhi_think_06 - @drawable/charter_p_xiaozhi_think_07 - @drawable/charter_p_xiaozhi_think_08 - @drawable/charter_p_xiaozhi_think_09 - @drawable/charter_p_xiaozhi_think_10 - @drawable/charter_p_xiaozhi_think_11 - @drawable/charter_p_xiaozhi_think_12 - @drawable/charter_p_xiaozhi_think_13 - @drawable/charter_p_xiaozhi_think_14 - @drawable/charter_p_xiaozhi_think_15 - @drawable/charter_p_xiaozhi_think_16 - @drawable/charter_p_xiaozhi_think_17 - @drawable/charter_p_xiaozhi_think_18 - @drawable/charter_p_xiaozhi_think_19 - @drawable/charter_p_xiaozhi_think_20 - @drawable/charter_p_xiaozhi_think_21 - @drawable/charter_p_xiaozhi_think_22 - @drawable/charter_p_xiaozhi_think_23 - @drawable/charter_p_xiaozhi_think_24 - @drawable/charter_p_xiaozhi_think_25 - @drawable/charter_p_xiaozhi_think_26 - @drawable/charter_p_xiaozhi_think_27 - @drawable/charter_p_xiaozhi_think_28 - @drawable/charter_p_xiaozhi_think_29 - @drawable/charter_p_xiaozhi_think_30 - @drawable/charter_p_xiaozhi_think_31 - - - @drawable/charter_p_xiaozhi_think_34 - @drawable/charter_p_xiaozhi_think_35 - @drawable/charter_p_xiaozhi_think_36 - @drawable/charter_p_xiaozhi_think_37 - @drawable/charter_p_xiaozhi_think_38 - @drawable/charter_p_xiaozhi_think_39 - @drawable/charter_p_xiaozhi_think_40 - @drawable/charter_p_xiaozhi_think_41 - @drawable/charter_p_xiaozhi_think_42 - @drawable/charter_p_xiaozhi_think_43 - @drawable/charter_p_xiaozhi_think_44 - @drawable/charter_p_xiaozhi_think_45 - @drawable/charter_p_xiaozhi_think_46 - @drawable/charter_p_xiaozhi_think_47 - @drawable/charter_p_xiaozhi_think_48 - @drawable/charter_p_xiaozhi_think_49 - @drawable/charter_p_xiaozhi_think_50 - @drawable/charter_p_xiaozhi_think_51 - @drawable/charter_p_xiaozhi_think_52 - @drawable/charter_p_xiaozhi_think_53 - @drawable/charter_p_xiaozhi_think_54 - @drawable/charter_p_xiaozhi_think_55 - @drawable/charter_p_xiaozhi_think_56 - @drawable/charter_p_xiaozhi_think_57 - @drawable/charter_p_xiaozhi_think_58 - @drawable/charter_p_xiaozhi_think_59 - @drawable/charter_p_xiaozhi_think_60 - @drawable/charter_p_xiaozhi_think_61 - @drawable/charter_p_xiaozhi_think_62 - @drawable/charter_p_xiaozhi_think_63 - @drawable/charter_p_xiaozhi_think_64 - @drawable/charter_p_xiaozhi_think_65 - @drawable/charter_p_xiaozhi_think_66 - @drawable/charter_p_xiaozhi_think_67 - @drawable/charter_p_xiaozhi_think_68 - @drawable/charter_p_xiaozhi_think_69 - @drawable/charter_p_xiaozhi_think_70 - @drawable/charter_p_xiaozhi_think_71 - - - - @drawable/charter_p_xiaozhi_think_normal_01 - @drawable/charter_p_xiaozhi_think_normal_02 - @drawable/charter_p_xiaozhi_think_normal_03 - @drawable/charter_p_xiaozhi_think_normal_04 - @drawable/charter_p_xiaozhi_think_normal_05 - @drawable/charter_p_xiaozhi_think_normal_06 - @drawable/charter_p_xiaozhi_think_normal_07 - @drawable/charter_p_xiaozhi_think_normal_08 - @drawable/charter_p_xiaozhi_think_normal_09 - @drawable/charter_p_xiaozhi_think_normal_10 - @drawable/charter_p_xiaozhi_think_normal_11 - @drawable/charter_p_xiaozhi_think_normal_12 - @drawable/charter_p_xiaozhi_think_normal_13 - @drawable/charter_p_xiaozhi_think_normal_14 - @drawable/charter_p_xiaozhi_think_normal_15 - @drawable/charter_p_xiaozhi_think_normal_16 - @drawable/charter_p_xiaozhi_think_normal_17 - - - \ No newline at end of file diff --git a/OCH/common/common/src/main/res/values/attrs.xml b/OCH/common/common/src/main/res/values/attrs.xml index a500f7ca79..88181d340e 100644 --- a/OCH/common/common/src/main/res/values/attrs.xml +++ b/OCH/common/common/src/main/res/values/attrs.xml @@ -61,4 +61,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/values/strings.xml b/OCH/common/common/src/main/res/values/strings.xml index 16d624ac59..60dcf03c44 100644 --- a/OCH/common/common/src/main/res/values/strings.xml +++ b/OCH/common/common/src/main/res/values/strings.xml @@ -15,34 +15,6 @@ 网络异常,请稍后重试 请求出现异常,请稍后重试 - We are arriving at %1$s - %1$s 역에 도착했습니다 - 已到达%1$s - - 车辆起步,请扶稳坐好,前方到站 %1$s - The next station is %1$s - 전방에서 역에 도착하는 %1$s - - 15分钟后包车就要结束了,稍后小助手会自动为您寻找停车点 - There are 15 minutes left from the end of chartering. Please arrange your time reasonably - 전세버스 종료 후 15분 남았습니다. 여행 시간을 합리적으로 안배해 주십시오 - - 感谢您体验\'蘑菇车联\'自动驾驶小巴车,本次旅程已结束,我们下次乘车再见 - Thank you for experiencing the self-driving minibus. See you next time - 자율주행 버스를 체험해 주셔서 감사합니다. 다음에 또 뵙겠습니다 - - 已到达%1$s,带好随身物品,下车请注意安全。 - We are arriving at %1$s ,get off with your belongings - %1$s 역에 도착했습니다 , 소지품 챙겨서 내리세요 - - 车辆起步,请扶稳坐好,前方到站是%1$s,请下车的乘客做好准备。 - The next station is %1$s ,please get ready for your arrival - 전방에서 역에 도착하는 %1$s ,차에서 내리는 승객은 준비하세요 - - 感谢您体验\'蘑菇车联\'自动驾驶小巴车,我们下次再见。 - Thank you for experiencing the self-driving minibus. See you next time - 자율주행 버스를 체험해 주셔서 감사합니다. 다음에 또 뵙겠습니다 - 取消 扫描二维码完成车辆绑定 \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_000.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_000.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_000.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_000.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_001.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_001.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_001.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_001.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_002.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_002.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_002.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_002.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_003.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_003.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_003.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_003.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_004.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_004.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_004.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_004.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_005.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_005.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_005.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_005.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_006.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_006.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_006.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_006.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_007.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_007.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_007.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_007.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_008.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_008.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_008.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_008.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_009.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_009.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_009.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_009.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_010.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_010.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_010.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_010.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_011.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_011.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_011.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_011.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_012.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_012.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_012.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_012.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_013.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_013.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_013.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_013.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_014.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_014.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_014.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_014.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_015.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_015.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_015.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_015.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_016.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_016.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_016.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_016.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_017.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_017.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_017.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_017.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_018.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_018.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_018.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_018.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_019.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_019.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_019.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_019.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_020.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_020.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_020.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_020.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_021.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_021.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_021.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_021.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_022.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_022.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_022.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_022.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_023.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_023.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_023.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_023.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_024.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_024.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_024.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_024.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_025.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_025.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_025.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_025.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_026.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_026.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_026.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_026.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_027.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_027.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_027.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_027.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_028.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_028.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_028.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_028.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_029.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_029.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_029.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_029.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_030.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_030.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_030.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_030.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_031.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_031.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_031.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_031.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_032.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_032.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_032.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_032.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_033.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_033.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_033.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_033.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_034.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_034.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_034.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_034.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_035.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_035.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_035.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_035.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_036.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_036.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_036.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_036.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_037.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_037.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_037.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_037.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_038.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_038.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_038.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_038.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_039.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_039.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_039.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_039.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_040.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_040.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_040.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_040.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_041.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_041.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_041.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_041.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_042.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_042.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_042.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_042.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_043.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_043.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_043.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_043.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_044.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_044.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_044.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_044.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_045.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_045.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_045.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_045.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_046.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_046.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_046.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_046.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_047.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_047.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_047.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_047.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_048.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_048.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_belt_048.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_belt_048.png diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_bdpzyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_bdpzyj.png new file mode 100755 index 0000000000..92419e8925 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_bdpzyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_chdyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_chdyj.png new file mode 100755 index 0000000000..575f1d3bac Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_chdyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clcs.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clcs.png new file mode 100755 index 0000000000..b8707155ab Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clcs.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clskyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clskyj.png new file mode 100755 index 0000000000..056b8a9161 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clskyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clyk.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clyk.png new file mode 100755 index 0000000000..0afaa86d37 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_clyk.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dljb.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dljb.png new file mode 100755 index 0000000000..dc8e9837e2 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dljb.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dljs.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dljs.png new file mode 100755 index 0000000000..652bcf6df9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dljs.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dlkw.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dlkw.png new file mode 100755 index 0000000000..2bbe290fba Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_dlkw.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_hd.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_hd.png new file mode 100755 index 0000000000..63306810ec Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_hd.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jsrx.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jsrx.png new file mode 100755 index 0000000000..532c6a6134 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jsrx.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jtsg.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jtsg.png new file mode 100755 index 0000000000..a81b87a5fb Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jtsg.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jzmd.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jzmd.png new file mode 100755 index 0000000000..370b6cdf80 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jzmd.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jztc.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jztc.png new file mode 100755 index 0000000000..0ce21d08d1 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_jztc.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_ksld.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_ksld.png new file mode 100755 index 0000000000..c547e61c87 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_ksld.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_mqpzyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_mqpzyj.png new file mode 100755 index 0000000000..f8a36b432b Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_mqpzyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_mtcpzyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_mtcpzyj.png new file mode 100755 index 0000000000..8cef23c117 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_mtcpzyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_nxccyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_nxccyj.png new file mode 100755 index 0000000000..f131838836 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_nxccyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfdlyd.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfdlyd.png new file mode 100755 index 0000000000..ee11759a06 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfdlyd.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qffl.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qffl.png new file mode 100755 index 0000000000..6da384e3d0 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qffl.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfjtjc.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfjtjc.png new file mode 100755 index 0000000000..f6f299995f Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfjtjc.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfjyz.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfjyz.png new file mode 100755 index 0000000000..21a913994f Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfjyz.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfsg.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfsg.png new file mode 100755 index 0000000000..27b7c15f1c Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfsg.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfxx.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfxx.png new file mode 100755 index 0000000000..8805794dee Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qfxx.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qxjs.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qxjs.png new file mode 100755 index 0000000000..54ae65e1ab Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qxjs.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qxpzyj.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qxpzyj.png new file mode 100755 index 0000000000..b1bff79d55 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_qxpzyj.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_rxhd.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_rxhd.png new file mode 100755 index 0000000000..e3ad6128d0 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_rxhd.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tfq.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tfq.png new file mode 100755 index 0000000000..b0734696b9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tfq.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tsclyxtx.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tsclyxtx.png new file mode 100755 index 0000000000..b2222db414 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tsclyxtx.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tzclyxtx.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tzclyxtx.png new file mode 100755 index 0000000000..cdc06fd568 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_tzclyxtx.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_xxls.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_xxls.png new file mode 100755 index 0000000000..f8957f08b5 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_xxls.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_xxxr.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_xxxr.png new file mode 100755 index 0000000000..652bcf6df9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_xxxr.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_yccltx.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_yccltx.png new file mode 100755 index 0000000000..09b586763b Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_yccltx.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_ygdc.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_ygdc.png new file mode 100755 index 0000000000..9e3da47158 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_ygdc.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_yzjw.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_yzjw.png new file mode 100755 index 0000000000..75db50f07f Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_yzjw.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_zzjw.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_zzjw.png new file mode 100755 index 0000000000..5c0258f652 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_event_zzjw.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_00.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_00.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_00.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_00.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_01.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_01.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_01.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_01.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_02.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_02.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_02.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_02.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_03.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_03.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_03.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_03.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_04.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_04.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_04.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_04.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_05.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_05.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_05.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_05.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_06.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_06.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_06.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_06.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_07.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_07.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_07.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_07.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_08.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_08.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_08.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_08.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_09.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_09.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_09.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_09.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_10.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_10.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_10.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_10.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_11.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_11.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_11.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_11.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_12.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_12.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_12.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_12.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_13.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_13.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_13.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_13.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_14.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_14.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_14.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_14.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_15.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_15.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_15.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_15.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_16.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_16.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_16.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_16.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_17.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_17.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_17.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_17.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_18.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_18.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_18.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_18.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_19.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_19.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_19.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_19.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_20.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_20.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_20.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_20.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_21.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_21.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_21.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_21.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_22.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_22.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_22.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_22.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_23.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_23.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_23.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_23.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_24.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_24.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_24.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_24.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_25.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_25.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_25.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_25.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_26.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_26.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_26.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_26.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_27.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_27.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_27.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_27.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_28.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_28.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_28.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_28.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_29.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_29.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_29.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_29.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_30.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_30.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_30.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_30.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_31.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_31.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_31.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_31.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_32.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_32.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_32.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_32.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_33.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_33.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_33.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_33.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_34.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_34.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_34.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_34.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_35.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_35.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_35.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_35.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_36.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_36.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_36.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_36.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_37.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_37.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_37.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_37.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_38.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_38.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_38.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_38.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_39.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_39.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_39.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_39.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_40.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_40.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_40.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_40.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_41.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_41.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_41.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_41.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_42.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_42.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_42.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_42.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_43.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_43.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_43.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_43.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_44.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_44.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_44.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_44.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_45.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_45.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_45.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_45.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_46.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_46.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_46.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_46.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_47.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_47.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_47.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_47.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_48.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_48.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_48.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_48.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_49.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_49.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_49.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_49.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_50.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_50.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_50.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_50.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_51.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_51.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_51.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_51.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_52.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_52.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_52.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_52.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_53.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_53.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_53.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_53.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_54.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_54.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_54.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_54.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_55.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_55.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_55.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_55.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_56.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_56.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_56.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_56.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_57.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_57.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_57.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_57.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_58.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_58.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_58.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_58.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_59.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_59.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_59.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_59.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_60.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_60.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_60.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_60.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_61.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_61.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_61.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_61.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_62.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_62.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_62.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_62.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_63.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_63.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_63.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_63.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_64.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_64.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_64.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_64.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_65.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_65.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_65.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_65.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_66.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_66.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_66.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_66.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_67.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_67.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_67.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_67.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_68.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_68.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_68.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_68.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_69.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_69.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_69.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_69.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_70.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_70.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_70.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_70.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_71.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_71.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_71.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_71.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_72.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_72.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_72.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_72.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_73.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_73.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_73.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_73.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_74.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_74.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_74.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_74.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_75.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_75.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_75.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_75.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_76.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_76.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_76.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_76.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_77.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_77.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_77.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_77.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_78.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_78.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_78.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_78.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_79.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_79.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_79.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_79.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_80.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_80.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_80.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_80.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_81.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_81.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_81.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_81.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_82.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_82.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_82.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_82.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_83.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_83.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_83.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_83.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_84.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_84.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_84.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_84.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_85.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_85.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_85.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_85.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_86.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_86.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_86.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_86.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_87.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_87.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_87.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_87.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_88.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_88.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_88.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_88.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_89.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_89.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_89.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_89.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_90.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_90.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_90.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_90.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_91.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_91.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_91.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_91.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_92.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_92.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_92.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_92.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_93.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_93.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_93.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_93.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_94.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_94.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_94.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_94.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_95.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_95.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_95.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_95.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_96.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_96.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/xiaozhi_love_96.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_love_96.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0000.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0000.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0000.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0000.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0001.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0001.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0001.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0001.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0002.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0002.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0002.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0002.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0003.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0003.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0003.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0003.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0004.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0004.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0004.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0004.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0005.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0005.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0005.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0005.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0006.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0006.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0006.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0006.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0007.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0007.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0007.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0007.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0008.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0008.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0008.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0008.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0009.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0009.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0009.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0009.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0010.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0010.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0010.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0010.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0011.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0011.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0011.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0011.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0012.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0012.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0012.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0012.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0013.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0013.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0013.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0013.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0014.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0014.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0014.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0014.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0015.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0015.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0015.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0015.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0016.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0016.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0016.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0016.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0017.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0017.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0017.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0017.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0018.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0018.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0018.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0018.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0019.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0019.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0019.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0019.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0020.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0020.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0020.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0020.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0021.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0021.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0021.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0021.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0022.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0022.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0022.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0022.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0023.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0023.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0023.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0023.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0024.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0024.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0024.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0024.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0025.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0025.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0025.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0025.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0026.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0026.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0026.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0026.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0027.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0027.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0027.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0027.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0028.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0028.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0028.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0028.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0029.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0029.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0029.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0029.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0030.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0030.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0030.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0030.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0031.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0031.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0031.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0031.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0032.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0032.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0032.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0032.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0033.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0033.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0033.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0033.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0034.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0034.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0034.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0034.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0035.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0035.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0035.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0035.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0036.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0036.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0036.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0036.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0037.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0037.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0037.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0037.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0038.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0038.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0038.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0038.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0039.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0039.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0039.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0039.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0040.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0040.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0040.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0040.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0041.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0041.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0041.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0041.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0042.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0042.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0042.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0042.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0043.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0043.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0043.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0043.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0044.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0044.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0044.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0044.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0045.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0045.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0045.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0045.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0046.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0046.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0046.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0046.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0047.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0047.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0047.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0047.png diff --git a/OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0048.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0048.png similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/xiaozhi_normal_0048.png rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_0048.png diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_000.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_000.png new file mode 100755 index 0000000000..9b650832f5 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_000.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_001.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_001.png new file mode 100755 index 0000000000..83eb2461e7 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_001.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_002.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_002.png new file mode 100755 index 0000000000..30f139dcf1 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_002.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_003.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_003.png new file mode 100755 index 0000000000..7ffc332bab Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_003.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_004.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_004.png new file mode 100755 index 0000000000..eeec23d083 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_004.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_005.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_005.png new file mode 100755 index 0000000000..bd7092544d Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_005.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_006.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_006.png new file mode 100755 index 0000000000..9fef8dc66b Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_006.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_007.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_007.png new file mode 100755 index 0000000000..336542645f Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_007.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_008.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_008.png new file mode 100755 index 0000000000..3be26e3db1 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_008.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_009.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_009.png new file mode 100755 index 0000000000..172e8fc588 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_009.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_010.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_010.png new file mode 100755 index 0000000000..3828f0bf16 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_010.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_011.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_011.png new file mode 100755 index 0000000000..4d778d7fe6 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_011.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_012.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_012.png new file mode 100755 index 0000000000..3fbe20304c Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_012.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_013.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_013.png new file mode 100755 index 0000000000..6e9e901571 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_013.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_014.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_014.png new file mode 100755 index 0000000000..9213219bd0 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_014.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_015.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_015.png new file mode 100755 index 0000000000..dbb511deff Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_015.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_016.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_016.png new file mode 100755 index 0000000000..2caf5ee7c9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_016.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_017.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_017.png new file mode 100755 index 0000000000..95a8990d70 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_normal_warn_017.png differ diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_00.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_00.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_00.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_00.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_01.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_01.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_01.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_01.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_02.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_02.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_02.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_02.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_03.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_03.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_03.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_03.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_04.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_04.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_04.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_04.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_05.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_05.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_05.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_05.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_06.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_06.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_06.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_06.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_07.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_07.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_07.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_07.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_08.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_08.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_08.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_08.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_09.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_09.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_09.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_09.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_10.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_10.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_10.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_10.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_11.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_11.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_11.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_11.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_12.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_12.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_12.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_12.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_13.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_13.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_13.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_13.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_14.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_14.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_14.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_14.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_15.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_15.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_15.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_15.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_16.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_16.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_16.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_16.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_17.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_17.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_17.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_17.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_18.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_18.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_18.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_18.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_19.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_19.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_19.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_19.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_20.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_20.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_20.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_20.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_21.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_21.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_21.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_21.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_22.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_22.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_22.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_22.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_23.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_23.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_23.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_23.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_24.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_24.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_24.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_24.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_25.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_25.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_25.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_25.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_26.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_26.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_26.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_26.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_27.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_27.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_27.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_27.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_28.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_28.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_28.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_28.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_29.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_29.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_29.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_29.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_30.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_30.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_30.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_30.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_31.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_31.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_31.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_31.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_34.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_34.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_34.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_34.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_35.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_35.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_35.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_35.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_36.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_36.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_36.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_36.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_37.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_37.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_37.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_37.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_38.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_38.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_38.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_38.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_39.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_39.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_39.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_39.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_40.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_40.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_40.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_40.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_41.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_41.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_41.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_41.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_42.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_42.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_42.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_42.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_43.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_43.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_43.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_43.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_44.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_44.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_44.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_44.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_45.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_45.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_45.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_45.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_46.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_46.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_46.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_46.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_47.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_47.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_47.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_47.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_48.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_48.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_48.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_48.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_49.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_49.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_49.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_49.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_50.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_50.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_50.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_50.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_51.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_51.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_51.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_51.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_52.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_52.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_52.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_52.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_53.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_53.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_53.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_53.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_54.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_54.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_54.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_54.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_55.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_55.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_55.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_55.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_56.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_56.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_56.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_56.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_57.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_57.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_57.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_57.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_58.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_58.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_58.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_58.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_59.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_59.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_59.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_59.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_60.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_60.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_60.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_60.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_61.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_61.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_61.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_61.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_62.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_62.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_62.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_62.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_63.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_63.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_63.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_63.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_64.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_64.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_64.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_64.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_65.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_65.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_65.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_65.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_66.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_66.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_66.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_66.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_67.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_67.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_67.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_67.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_68.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_68.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_68.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_68.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_69.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_69.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_69.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_69.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_70.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_70.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_70.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_70.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_71.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_71.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_71.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_71.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_01.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_01.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_01.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_01.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_02.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_02.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_02.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_02.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_03.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_03.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_03.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_03.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_04.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_04.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_04.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_04.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_05.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_05.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_05.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_05.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_06.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_06.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_06.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_06.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_07.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_07.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_07.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_07.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_08.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_08.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_08.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_08.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_09.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_09.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_09.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_09.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_10.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_10.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_10.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_10.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_11.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_11.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_11.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_11.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_12.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_12.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_12.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_12.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_13.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_13.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_13.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_13.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_14.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_14.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_14.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_14.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_15.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_15.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_15.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_15.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_16.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_16.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_16.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_16.webp diff --git a/OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_17.webp b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_17.webp similarity index 100% rename from OCH/common/common/src/main/res/drawable-nodpi/charter_p_xiaozhi_think_normal_17.webp rename to OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_think_normal_17.webp diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_000.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_000.png new file mode 100755 index 0000000000..9c2e0eb7f9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_000.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_001.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_001.png new file mode 100755 index 0000000000..232cb0dd73 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_001.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_002.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_002.png new file mode 100755 index 0000000000..bc0d8d7411 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_002.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_003.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_003.png new file mode 100755 index 0000000000..eca945c4b0 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_003.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_004.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_004.png new file mode 100755 index 0000000000..34a50c5861 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_004.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_005.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_005.png new file mode 100755 index 0000000000..fff2787c6b Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_005.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_006.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_006.png new file mode 100755 index 0000000000..8209bee269 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_006.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_007.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_007.png new file mode 100755 index 0000000000..406b2c3e10 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_007.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_008.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_008.png new file mode 100755 index 0000000000..cf2ab01126 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_008.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_009.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_009.png new file mode 100755 index 0000000000..fd020e0a69 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_009.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_010.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_010.png new file mode 100755 index 0000000000..9be2c2afb0 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_010.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_011.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_011.png new file mode 100755 index 0000000000..b1b81f2024 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_011.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_012.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_012.png new file mode 100755 index 0000000000..10232960e8 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_012.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_013.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_013.png new file mode 100755 index 0000000000..ead62b6ac9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_013.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_014.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_014.png new file mode 100755 index 0000000000..31ce4a8233 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_014.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_015.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_015.png new file mode 100755 index 0000000000..c15eb532bc Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_015.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_016.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_016.png new file mode 100755 index 0000000000..48dd4771d2 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_016.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_017.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_017.png new file mode 100755 index 0000000000..8b84ae6adc Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_017.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_018.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_018.png new file mode 100755 index 0000000000..b00a6e115c Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_018.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_019.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_019.png new file mode 100755 index 0000000000..4b555039d8 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_019.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_020.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_020.png new file mode 100755 index 0000000000..8c72864c9d Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_020.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_021.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_021.png new file mode 100755 index 0000000000..73b5e86233 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_021.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_022.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_022.png new file mode 100755 index 0000000000..5e81dacebb Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_022.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_023.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_023.png new file mode 100755 index 0000000000..d4eceae988 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_023.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_024.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_024.png new file mode 100755 index 0000000000..803b6cb253 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_024.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_025.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_025.png new file mode 100755 index 0000000000..2a0c814794 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_025.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_026.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_026.png new file mode 100755 index 0000000000..a3ed8ec8a7 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_026.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_027.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_027.png new file mode 100755 index 0000000000..699de0d893 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_027.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_028.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_028.png new file mode 100755 index 0000000000..6ff7d26ab7 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_028.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_029.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_029.png new file mode 100755 index 0000000000..e41c9362d7 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_029.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_030.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_030.png new file mode 100755 index 0000000000..7d20dcacc5 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_030.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_031.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_031.png new file mode 100755 index 0000000000..b353fae8ab Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_031.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_032.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_032.png new file mode 100755 index 0000000000..30ad40146e Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_032.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_033.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_033.png new file mode 100755 index 0000000000..de15df3049 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_033.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_034.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_034.png new file mode 100755 index 0000000000..10f7554b1a Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_034.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_035.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_035.png new file mode 100755 index 0000000000..6286c42fe9 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_035.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_036.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_036.png new file mode 100755 index 0000000000..c1c1595eb6 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_036.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_037.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_037.png new file mode 100755 index 0000000000..fb4868f177 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_037.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_038.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_038.png new file mode 100755 index 0000000000..01e673ff4d Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_038.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_039.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_039.png new file mode 100755 index 0000000000..38dd1c7923 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_039.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_040.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_040.png new file mode 100755 index 0000000000..98c55f0584 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_040.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_041.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_041.png new file mode 100755 index 0000000000..719edc9b4c Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_041.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_042.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_042.png new file mode 100755 index 0000000000..95b3758dfe Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_042.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_043.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_043.png new file mode 100755 index 0000000000..601c0efadf Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_043.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_044.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_044.png new file mode 100755 index 0000000000..5769591a7a Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_044.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_045.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_045.png new file mode 100755 index 0000000000..bf296187b5 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_045.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_046.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_046.png new file mode 100755 index 0000000000..07b7978d43 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_046.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_047.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_047.png new file mode 100755 index 0000000000..a7e7bc5d32 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_047.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_048.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_048.png new file mode 100755 index 0000000000..cd1160bfa6 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_048.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_049.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_049.png new file mode 100755 index 0000000000..66dab77907 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_049.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_050.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_050.png new file mode 100755 index 0000000000..fde4e0512b Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_050.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_051.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_051.png new file mode 100755 index 0000000000..8a427f5119 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_051.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_052.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_052.png new file mode 100755 index 0000000000..908cb93fb8 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_052.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_053.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_053.png new file mode 100755 index 0000000000..ffc487eb6d Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_053.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_054.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_054.png new file mode 100755 index 0000000000..15d67e3397 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_054.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_055.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_055.png new file mode 100755 index 0000000000..84013b902d Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_055.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_056.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_056.png new file mode 100755 index 0000000000..900e33290f Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_056.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_057.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_057.png new file mode 100755 index 0000000000..1241f9cf27 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_057.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_058.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_058.png new file mode 100755 index 0000000000..d5323c16b4 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_058.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_059.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_059.png new file mode 100755 index 0000000000..90426a0121 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_059.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_060.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_060.png new file mode 100755 index 0000000000..d61e9f701a Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_060.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_061.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_061.png new file mode 100755 index 0000000000..2eadc245ae Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_061.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_062.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_062.png new file mode 100755 index 0000000000..10bd7483b3 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_062.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_063.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_063.png new file mode 100755 index 0000000000..2e4e035cd3 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_063.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_064.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_064.png new file mode 100755 index 0000000000..387c066ca8 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_064.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_065.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_065.png new file mode 100755 index 0000000000..94a0203f8c Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_065.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_066.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_066.png new file mode 100755 index 0000000000..e2c4aeaa24 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_066.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_067.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_067.png new file mode 100755 index 0000000000..f64167c021 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_067.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_068.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_068.png new file mode 100755 index 0000000000..58be1f4d67 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_068.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_069.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_069.png new file mode 100755 index 0000000000..9109ac365f Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_069.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_070.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_070.png new file mode 100755 index 0000000000..8f2f0a00f1 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_070.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_071.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_071.png new file mode 100755 index 0000000000..618a65a474 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_071.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_072.png b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_072.png new file mode 100755 index 0000000000..90f2503cb1 Binary files /dev/null and b/OCH/common/common/src/main/res/xiaozhi/drawable-nodpi/xiaozhi_warn_072.png differ diff --git a/OCH/common/common/src/main/res/xiaozhi/layout/common_xiaozhi.xml b/OCH/common/common/src/main/res/xiaozhi/layout/common_xiaozhi.xml new file mode 100644 index 0000000000..7dfc9425d4 --- /dev/null +++ b/OCH/common/common/src/main/res/xiaozhi/layout/common_xiaozhi.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/OCH/common/common/src/main/res/xiaozhi/values/arrays.xml b/OCH/common/common/src/main/res/xiaozhi/values/arrays.xml new file mode 100644 index 0000000000..58d0d4c985 --- /dev/null +++ b/OCH/common/common/src/main/res/xiaozhi/values/arrays.xml @@ -0,0 +1,415 @@ + + + + @drawable/xiaozhi_normal_0000 + @drawable/xiaozhi_normal_0001 + @drawable/xiaozhi_normal_0002 + @drawable/xiaozhi_normal_0003 + @drawable/xiaozhi_normal_0004 + @drawable/xiaozhi_normal_0005 + @drawable/xiaozhi_normal_0006 + @drawable/xiaozhi_normal_0007 + @drawable/xiaozhi_normal_0008 + @drawable/xiaozhi_normal_0009 + @drawable/xiaozhi_normal_0010 + @drawable/xiaozhi_normal_0011 + @drawable/xiaozhi_normal_0012 + @drawable/xiaozhi_normal_0013 + @drawable/xiaozhi_normal_0014 + @drawable/xiaozhi_normal_0015 + @drawable/xiaozhi_normal_0016 + @drawable/xiaozhi_normal_0017 + @drawable/xiaozhi_normal_0018 + @drawable/xiaozhi_normal_0019 + @drawable/xiaozhi_normal_0020 + @drawable/xiaozhi_normal_0021 + @drawable/xiaozhi_normal_0022 + @drawable/xiaozhi_normal_0023 + @drawable/xiaozhi_normal_0024 + @drawable/xiaozhi_normal_0025 + @drawable/xiaozhi_normal_0026 + @drawable/xiaozhi_normal_0027 + @drawable/xiaozhi_normal_0028 + @drawable/xiaozhi_normal_0029 + @drawable/xiaozhi_normal_0030 + @drawable/xiaozhi_normal_0031 + @drawable/xiaozhi_normal_0032 + @drawable/xiaozhi_normal_0033 + @drawable/xiaozhi_normal_0034 + @drawable/xiaozhi_normal_0035 + @drawable/xiaozhi_normal_0036 + @drawable/xiaozhi_normal_0037 + @drawable/xiaozhi_normal_0038 + @drawable/xiaozhi_normal_0039 + @drawable/xiaozhi_normal_0040 + @drawable/xiaozhi_normal_0041 + @drawable/xiaozhi_normal_0042 + @drawable/xiaozhi_normal_0043 + @drawable/xiaozhi_normal_0044 + @drawable/xiaozhi_normal_0045 + @drawable/xiaozhi_normal_0046 + @drawable/xiaozhi_normal_0047 + @drawable/xiaozhi_normal_0048 + + + + @drawable/xiaozhi_think_00 + @drawable/xiaozhi_think_01 + @drawable/xiaozhi_think_02 + @drawable/xiaozhi_think_03 + @drawable/xiaozhi_think_04 + @drawable/xiaozhi_think_05 + @drawable/xiaozhi_think_06 + @drawable/xiaozhi_think_07 + @drawable/xiaozhi_think_08 + @drawable/xiaozhi_think_09 + @drawable/xiaozhi_think_10 + @drawable/xiaozhi_think_11 + @drawable/xiaozhi_think_12 + @drawable/xiaozhi_think_13 + @drawable/xiaozhi_think_14 + @drawable/xiaozhi_think_15 + @drawable/xiaozhi_think_16 + @drawable/xiaozhi_think_17 + @drawable/xiaozhi_think_18 + @drawable/xiaozhi_think_19 + @drawable/xiaozhi_think_20 + @drawable/xiaozhi_think_21 + @drawable/xiaozhi_think_22 + @drawable/xiaozhi_think_23 + @drawable/xiaozhi_think_24 + @drawable/xiaozhi_think_25 + @drawable/xiaozhi_think_26 + @drawable/xiaozhi_think_27 + @drawable/xiaozhi_think_28 + @drawable/xiaozhi_think_29 + @drawable/xiaozhi_think_30 + @drawable/xiaozhi_think_31 + @drawable/xiaozhi_think_34 + @drawable/xiaozhi_think_35 + @drawable/xiaozhi_think_36 + @drawable/xiaozhi_think_37 + @drawable/xiaozhi_think_38 + @drawable/xiaozhi_think_39 + @drawable/xiaozhi_think_40 + @drawable/xiaozhi_think_41 + @drawable/xiaozhi_think_42 + @drawable/xiaozhi_think_43 + @drawable/xiaozhi_think_44 + @drawable/xiaozhi_think_45 + @drawable/xiaozhi_think_46 + @drawable/xiaozhi_think_47 + @drawable/xiaozhi_think_48 + @drawable/xiaozhi_think_49 + @drawable/xiaozhi_think_50 + @drawable/xiaozhi_think_51 + @drawable/xiaozhi_think_52 + @drawable/xiaozhi_think_53 + @drawable/xiaozhi_think_54 + @drawable/xiaozhi_think_55 + @drawable/xiaozhi_think_56 + @drawable/xiaozhi_think_57 + @drawable/xiaozhi_think_58 + @drawable/xiaozhi_think_59 + @drawable/xiaozhi_think_60 + @drawable/xiaozhi_think_61 + @drawable/xiaozhi_think_62 + @drawable/xiaozhi_think_63 + @drawable/xiaozhi_think_64 + @drawable/xiaozhi_think_65 + @drawable/xiaozhi_think_66 + @drawable/xiaozhi_think_67 + @drawable/xiaozhi_think_68 + @drawable/xiaozhi_think_69 + @drawable/xiaozhi_think_70 + @drawable/xiaozhi_think_71 + + + + @drawable/xiaozhi_think_normal_01 + @drawable/xiaozhi_think_normal_02 + @drawable/xiaozhi_think_normal_03 + @drawable/xiaozhi_think_normal_04 + @drawable/xiaozhi_think_normal_05 + @drawable/xiaozhi_think_normal_06 + @drawable/xiaozhi_think_normal_07 + @drawable/xiaozhi_think_normal_08 + @drawable/xiaozhi_think_normal_09 + @drawable/xiaozhi_think_normal_10 + @drawable/xiaozhi_think_normal_11 + @drawable/xiaozhi_think_normal_12 + @drawable/xiaozhi_think_normal_13 + @drawable/xiaozhi_think_normal_14 + @drawable/xiaozhi_think_normal_15 + @drawable/xiaozhi_think_normal_16 + @drawable/xiaozhi_think_normal_17 + + + + @drawable/xiaozhi_belt_000 + @drawable/xiaozhi_belt_001 + @drawable/xiaozhi_belt_002 + @drawable/xiaozhi_belt_003 + @drawable/xiaozhi_belt_004 + @drawable/xiaozhi_belt_005 + @drawable/xiaozhi_belt_006 + @drawable/xiaozhi_belt_007 + @drawable/xiaozhi_belt_008 + @drawable/xiaozhi_belt_009 + + @drawable/xiaozhi_belt_010 + @drawable/xiaozhi_belt_011 + @drawable/xiaozhi_belt_012 + @drawable/xiaozhi_belt_013 + @drawable/xiaozhi_belt_014 + @drawable/xiaozhi_belt_015 + @drawable/xiaozhi_belt_016 + @drawable/xiaozhi_belt_017 + @drawable/xiaozhi_belt_018 + @drawable/xiaozhi_belt_019 + + @drawable/xiaozhi_belt_020 + @drawable/xiaozhi_belt_021 + @drawable/xiaozhi_belt_022 + @drawable/xiaozhi_belt_023 + @drawable/xiaozhi_belt_024 + @drawable/xiaozhi_belt_025 + @drawable/xiaozhi_belt_026 + @drawable/xiaozhi_belt_027 + @drawable/xiaozhi_belt_028 + @drawable/xiaozhi_belt_029 + + + @drawable/xiaozhi_belt_030 + @drawable/xiaozhi_belt_031 + @drawable/xiaozhi_belt_032 + @drawable/xiaozhi_belt_033 + @drawable/xiaozhi_belt_034 + @drawable/xiaozhi_belt_035 + @drawable/xiaozhi_belt_036 + @drawable/xiaozhi_belt_037 + @drawable/xiaozhi_belt_038 + @drawable/xiaozhi_belt_039 + + @drawable/xiaozhi_belt_040 + @drawable/xiaozhi_belt_041 + @drawable/xiaozhi_belt_042 + @drawable/xiaozhi_belt_043 + @drawable/xiaozhi_belt_044 + @drawable/xiaozhi_belt_045 + @drawable/xiaozhi_belt_046 + @drawable/xiaozhi_belt_047 + @drawable/xiaozhi_belt_048 + + + + + @drawable/xiaozhi_love_00 + + @drawable/xiaozhi_love_02 + + @drawable/xiaozhi_love_04 + + @drawable/xiaozhi_love_06 + + @drawable/xiaozhi_love_08 + + + @drawable/xiaozhi_love_10 + + @drawable/xiaozhi_love_12 + + @drawable/xiaozhi_love_14 + + @drawable/xiaozhi_love_16 + + @drawable/xiaozhi_love_18 + + + @drawable/xiaozhi_love_20 + + @drawable/xiaozhi_love_22 + + @drawable/xiaozhi_love_24 + + @drawable/xiaozhi_love_26 + + @drawable/xiaozhi_love_28 + + + + @drawable/xiaozhi_love_30 + + @drawable/xiaozhi_love_32 + + @drawable/xiaozhi_love_34 + + @drawable/xiaozhi_love_36 + + @drawable/xiaozhi_love_38 + + + @drawable/xiaozhi_love_40 + + @drawable/xiaozhi_love_42 + + @drawable/xiaozhi_love_44 + + @drawable/xiaozhi_love_46 + + @drawable/xiaozhi_love_48 + + + + @drawable/xiaozhi_love_50 + + @drawable/xiaozhi_love_52 + + @drawable/xiaozhi_love_54 + + @drawable/xiaozhi_love_56 + + @drawable/xiaozhi_love_58 + + + @drawable/xiaozhi_love_60 + + @drawable/xiaozhi_love_62 + + @drawable/xiaozhi_love_64 + + @drawable/xiaozhi_love_66 + + @drawable/xiaozhi_love_68 + + + @drawable/xiaozhi_love_70 + + @drawable/xiaozhi_love_72 + + @drawable/xiaozhi_love_74 + + @drawable/xiaozhi_love_76 + + @drawable/xiaozhi_love_78 + + + @drawable/xiaozhi_love_80 + + @drawable/xiaozhi_love_82 + + @drawable/xiaozhi_love_84 + + @drawable/xiaozhi_love_86 + + @drawable/xiaozhi_love_88 + + + @drawable/xiaozhi_love_90 + + @drawable/xiaozhi_love_92 + + @drawable/xiaozhi_love_94 + + @drawable/xiaozhi_love_96 + + + + + @drawable/xiaozhi_warn_000 + @drawable/xiaozhi_warn_001 + @drawable/xiaozhi_warn_002 + @drawable/xiaozhi_warn_003 + @drawable/xiaozhi_warn_004 + @drawable/xiaozhi_warn_005 + @drawable/xiaozhi_warn_006 + @drawable/xiaozhi_warn_007 + @drawable/xiaozhi_warn_008 + @drawable/xiaozhi_warn_009 + @drawable/xiaozhi_warn_010 + @drawable/xiaozhi_warn_011 + @drawable/xiaozhi_warn_012 + @drawable/xiaozhi_warn_013 + @drawable/xiaozhi_warn_014 + @drawable/xiaozhi_warn_015 + @drawable/xiaozhi_warn_016 + @drawable/xiaozhi_warn_017 + @drawable/xiaozhi_warn_018 + @drawable/xiaozhi_warn_019 + @drawable/xiaozhi_warn_020 + @drawable/xiaozhi_warn_021 + @drawable/xiaozhi_warn_022 + @drawable/xiaozhi_warn_023 + @drawable/xiaozhi_warn_024 + @drawable/xiaozhi_warn_025 + @drawable/xiaozhi_warn_026 + @drawable/xiaozhi_warn_027 + @drawable/xiaozhi_warn_028 + @drawable/xiaozhi_warn_029 + @drawable/xiaozhi_warn_030 + @drawable/xiaozhi_warn_031 + @drawable/xiaozhi_warn_032 + @drawable/xiaozhi_warn_033 + @drawable/xiaozhi_warn_034 + @drawable/xiaozhi_warn_035 + @drawable/xiaozhi_warn_036 + @drawable/xiaozhi_warn_037 + @drawable/xiaozhi_warn_038 + @drawable/xiaozhi_warn_039 + @drawable/xiaozhi_warn_040 + @drawable/xiaozhi_warn_041 + @drawable/xiaozhi_warn_042 + @drawable/xiaozhi_warn_043 + @drawable/xiaozhi_warn_044 + @drawable/xiaozhi_warn_045 + @drawable/xiaozhi_warn_046 + @drawable/xiaozhi_warn_047 + @drawable/xiaozhi_warn_048 + @drawable/xiaozhi_warn_049 + @drawable/xiaozhi_warn_050 + @drawable/xiaozhi_warn_051 + @drawable/xiaozhi_warn_052 + @drawable/xiaozhi_warn_053 + @drawable/xiaozhi_warn_054 + @drawable/xiaozhi_warn_055 + @drawable/xiaozhi_warn_056 + @drawable/xiaozhi_warn_057 + @drawable/xiaozhi_warn_058 + @drawable/xiaozhi_warn_059 + @drawable/xiaozhi_warn_060 + @drawable/xiaozhi_warn_061 + @drawable/xiaozhi_warn_062 + @drawable/xiaozhi_warn_063 + @drawable/xiaozhi_warn_064 + @drawable/xiaozhi_warn_065 + @drawable/xiaozhi_warn_066 + @drawable/xiaozhi_warn_067 + @drawable/xiaozhi_warn_068 + @drawable/xiaozhi_warn_069 + @drawable/xiaozhi_warn_070 + @drawable/xiaozhi_warn_071 + @drawable/xiaozhi_warn_072 + + + + @drawable/xiaozhi_normal_warn_000 + @drawable/xiaozhi_normal_warn_001 + @drawable/xiaozhi_normal_warn_002 + @drawable/xiaozhi_normal_warn_003 + @drawable/xiaozhi_normal_warn_004 + @drawable/xiaozhi_normal_warn_005 + @drawable/xiaozhi_normal_warn_006 + @drawable/xiaozhi_normal_warn_007 + @drawable/xiaozhi_normal_warn_008 + @drawable/xiaozhi_normal_warn_009 + @drawable/xiaozhi_normal_warn_010 + @drawable/xiaozhi_normal_warn_011 + @drawable/xiaozhi_normal_warn_012 + @drawable/xiaozhi_normal_warn_013 + @drawable/xiaozhi_normal_warn_014 + @drawable/xiaozhi_normal_warn_015 + @drawable/xiaozhi_normal_warn_016 + @drawable/xiaozhi_normal_warn_017 + + + \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/BusProvider.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/BusProvider.java index 6b5f576a24..5d4584dd99 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/BusProvider.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/BusProvider.java @@ -1,8 +1,6 @@ package com.mogo.och.bus; -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; - import android.content.Context; import androidx.fragment.app.Fragment; @@ -11,10 +9,9 @@ import androidx.fragment.app.FragmentManager; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; -import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.bus.constant.BusConst; -import com.mogo.och.bus.fragment.BusFragment; +import com.mogo.och.bus.fragment.ShuttleFragment; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,7 +26,7 @@ public class BusProvider implements IMoGoFunctionProvider { private static final String TAG = "BusProvider"; - private BusFragment busFragment; + private ShuttleFragment busFragment; private int containerId; private FragmentActivity activity; @@ -41,14 +38,14 @@ public class BusProvider implements IMoGoFunctionProvider { FragmentManager supportFragmentManager = activity.getSupportFragmentManager(); if (busFragment == null) { CallerLogger.d(TAG, "准备add fragment======"); - Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(BusFragment.TAG); - if (fragmentByTag instanceof BusFragment) { - busFragment = (BusFragment) fragmentByTag; + Fragment fragmentByTag = supportFragmentManager.findFragmentByTag(ShuttleFragment.TAG); + if (fragmentByTag instanceof ShuttleFragment) { + busFragment = (ShuttleFragment) fragmentByTag; } else { - busFragment = new BusFragment(); + busFragment = new ShuttleFragment(); } if(!busFragment.isAdded()) { - supportFragmentManager.beginTransaction().add(containerId, busFragment, BusFragment.TAG).commitAllowingStateLoss(); + supportFragmentManager.beginTransaction().add(containerId, busFragment, ShuttleFragment.TAG).commitAllowingStateLoss(); } return; } diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BaseShuttleTabFragment.java similarity index 98% rename from OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java rename to OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BaseShuttleTabFragment.java index b6d22ccdf0..5f69222cbd 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BaseShuttleTabFragment.java @@ -43,6 +43,7 @@ import com.mogo.map.listener.MogoMapListenerHandler; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.VisualAngleMode; import com.mogo.och.bus.R; +import com.mogo.och.bus.ui.ShuttleTrafficDataView; import com.mogo.och.bus.view.BizMapView; import com.mogo.och.data.bean.BusRoutesResult; import com.mogo.och.bus.model.OrderModel; @@ -57,7 +58,7 @@ import org.greenrobot.eventbus.EventBus; * * @author tongchenfei */ -public abstract class BaseBusTabFragment> extends MvpFragment implements IMogoMapListener { +public abstract class BaseShuttleTabFragment> extends MvpFragment implements IMogoMapListener { private static final String TAG = "BaseBusTabFragment"; @@ -72,7 +73,7 @@ public abstract class BaseBusTabFragment private FrameLayout flStationPanelContainer; private BizMapView mapBizView; private Group groupTestPanel; - private TrafficDataView mTrafficDataView; + private ShuttleTrafficDataView mTrafficDataView; // private BusTrafficLightView mTrafficLightView; //远景和中景的切换 @@ -102,7 +103,7 @@ public abstract class BaseBusTabFragment @Override protected int getLayoutId() { - return R.layout.bus_base_fragment; + return R.layout.shuttle_base_fragment; } @Override @@ -121,7 +122,7 @@ public abstract class BaseBusTabFragment // tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status); tvArrived = findViewById(R.id.module_mogo_och_arrived_tv); - mTrafficDataView = (TrafficDataView) findViewById(R.id.bus_arc); + mTrafficDataView = (ShuttleTrafficDataView) findViewById(R.id.bus_arc); LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/ShuttleFragment.java similarity index 98% rename from OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java rename to OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/ShuttleFragment.java index db0d3ff439..7a73ef12e8 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/fragment/ShuttleFragment.java @@ -24,6 +24,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant; +import com.mogo.eagle.core.utilcode.util.ActivityUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.map.overlay.IMoGoOverlayManager; import com.mogo.map.overlay.core.Level; @@ -59,7 +60,7 @@ import me.jessyan.autosize.utils.AutoSizeUtils; * * @author tongchenfei */ -public class BusFragment extends BaseBusTabFragment +public class ShuttleFragment extends BaseShuttleTabFragment implements SlidePanelView.OnSlidePanelMoveToEndListener, View.OnClickListener { public static final String TAG = "BusFragment"; @@ -155,11 +156,13 @@ public class BusFragment extends BaseBusTabFragment @Override protected void onArriveStation() { mPresenter.onAutopilotArriveAtStation(null); + mPresenter.arriveStation(null,"点击进站触发进站操作"); } @Override protected void debugArrivedStation() { mPresenter.onAutopilotArriveAtStation(null); + mPresenter.arriveStation(null,"点击debug进站按钮触发进站操作"); } @NonNull @@ -519,7 +522,7 @@ public class BusFragment extends BaseBusTabFragment } if ((int)mSwitchLine.getTag() == 0){//切换路线 Intent intent = new Intent(getContext(), BusSwitchLineActivity.class); - startActivity(intent); + ActivityUtils.startActivity(intent); }else {//结束任务 OCHCommitDialog.Builder builder = new OCHCommitDialog.Builder(); OCHCommitDialog closeLineConfirmDialog = builder diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java index eb933f8241..b68a33a7bd 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java @@ -22,12 +22,17 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.och.bus.bean.BusRoutesResponse; +import com.mogo.och.bus.util.ShuttleVoiceManager; import com.mogo.och.common.module.bean.dpmsg.AppConnectMsg; import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg; import com.mogo.och.common.module.bean.dpmsg.DPMsgType; import com.mogo.och.common.module.bean.dpmsg.LoginCacheStatus; import com.mogo.och.common.module.bean.dpmsg.TaskDetailsMsg; import com.mogo.och.common.module.biz.constant.LoginStatusManager; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.ArrivedStation; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; +import com.mogo.och.common.module.utils.MultiRequestLimitChecker; +import com.mogo.och.common.module.utils.OCHThreadPoolManager; import com.mogo.och.data.bean.BusStationBean; import com.mogo.och.common.module.biz.common.socketmessage.data.SystemMsg; import com.mogo.och.common.module.biz.constant.OchCommonConst; @@ -62,8 +67,6 @@ import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.utils.PinYinUtil; -import com.mogo.och.common.module.voice.VoiceManager; -import com.mogo.och.common.module.voice.VoiceNotice; import com.mogo.och.common.module.bean.dpmsg.BusCacheKey; import com.mogo.och.data.bean.BusTransferData; import com.mogo.och.data.manager.cache.CacheDataManager; @@ -130,7 +133,7 @@ public class OrderModel { mContext = AbsMogoApplication.getApp(); loginService = (LoginService) ARouter.getInstance().build(OchCommonConst.LOGINSERVICE).navigation(); // 定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,10,mMapLocationListener); + CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,5,mMapLocationListener); //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); @@ -309,7 +312,12 @@ public class OrderModel { //是否到站的围栏判断 离站状态并且自动驾驶还未触发到站 if (isGoingToNextStation && !isArrivedStation) { - judgeArrivedStation(mogoLocation); + OCHThreadPoolManager.getsInstance().locationExecute(new Runnable() { + @Override + public void run() { + judgeArrivedStation(mogoLocation); + } + }); } } }; @@ -332,7 +340,7 @@ public class OrderModel { if (distance <= BusConst.ARRIVE_AT_END_STATION_DISTANCE) { CallerLogger.d(M_BUS + TAG, "行程日志-judgeArrivedStation() distance = " + distance + " to " + upcomingStation.getName()); - onArriveAt(null); //无自动驾驶到站信息传null + onArriveAt(null,"兜底:根据定位计算到站"); } } @@ -648,7 +656,9 @@ public class OrderModel { /** * 到站后重置站点状态 */ - private void arriveSiteStation() { + private void arriveSiteStation(String changeInfo) { + OchChainLogManager.writeChainLog("触发进站", changeInfo, + true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { //到站短时间内调用多次 CallerLogger.e( M_BUS + TAG, "数组越界" ); return; @@ -666,6 +676,13 @@ public class OrderModel { arriveStationSuccess(arrivedStationIndex, departureStopName, arriveStation,arriveStationKr,writeVersion); + String requestId = MultiRequestLimitChecker.Companion.generateRequestId(TAG + "-arriveSiteStation" + , String.valueOf(stationList.get(arrivedStationIndex).getSiteId()) + , String.valueOf(busRoutesResult.getTaskId())); + if (!MultiRequestLimitChecker.Companion.getInstance().canMakeRequest(requestId, 5)) { + CallerLogger.d(M_BUS + TAG, "arriveSiteStation-MultiRequestLimitChecker: 超过最大请求数,本次请求return"); + return; + } OrderServiceManager.arriveSiteStation(mContext, stationList.get(arrivedStationIndex).getSeq(), stationList.get(arrivedStationIndex).getSiteId(), @@ -674,14 +691,17 @@ public class OrderModel { @Override public void onSuccess(BaseData o) { CallerLogger.d(M_BUS + TAG, "行程日志-arriveSiteStation success"); + MultiRequestLimitChecker.Companion.getInstance().decreaseRequestCount(requestId); } @Override public void onError() { + MultiRequestLimitChecker.Companion.getInstance().decreaseRequestCount(requestId); } @Override public void onFail(int code, String failMsg) { + MultiRequestLimitChecker.Companion.getInstance().decreaseRequestCount(requestId); } }); } @@ -702,7 +722,7 @@ public class OrderModel { , isLastStop); } - VoiceManager.INSTANCE.arrivedStationBus(arriveStation,arriveStationKr); + ShuttleVoiceManager.INSTANCE.arrivedStationBus(arriveStation,arriveStationKr); sendArrivedStationToClient(arriveStation); @@ -780,7 +800,10 @@ public class OrderModel { long writeVersion = DateTimeUtil.getCurrentTimeStamp(); leaveStationSuccess(backgroundCurrentStationIndex, currentStationName, finalNextStationName,finalNextStationNameKr,writeVersion); - + String changeInfo = "taskId:" + busRoutesResult.getTaskId() + "--lineId:" + busRoutesResult.getLineId() + + "--currentStationName:"+currentStationName+"--finalNextStationName:"+finalNextStationName; + OchChainLogManager.writeChainLog("滑动出发", changeInfo, + true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); OrderServiceManager.leaveStation(mContext, stationList.get(backgroundCurrentStationIndex).getSeq(), stationList.get(backgroundCurrentStationIndex).getSiteId(), @@ -788,6 +811,8 @@ public class OrderModel { new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { + OchChainLogManager.writeChainLog("滑动出发成功", changeInfo, + true,OchChainLogManager.EVENT_KEY_INFE_WITH_BUS); } @@ -806,7 +831,7 @@ public class OrderModel { UiThreadHandler.postDelayed(new Runnable() { @Override public void run() {//延迟10s播报 - VoiceManager.INSTANCE.leaveStationBus(nextStation,nextStationKr); + ShuttleVoiceManager.INSTANCE.leaveStationBus(nextStation,nextStationKr); } },DELAY_10S); @@ -957,8 +982,7 @@ public class OrderModel { OCHSocketMessageManager.INSTANCE.pushAppOperationalMsgBox( DateTimeUtil.getCurrentTimeStamp(), tips,OCHSocketMessageManager.OPERATION_SYSTEM); - //语音提示 - VoiceNotice.showNotice(tips); + ShuttleVoiceManager.INSTANCE.showLeafTime(tips); } Runnable tip1Runnable = new Runnable() { @@ -1042,7 +1066,7 @@ public class OrderModel { clearBusStationDatas(); queryBusRoutes();// 重新获取任务 removeTipRunnables(); - VoiceManager.INSTANCE.endOrderBus(); + ShuttleVoiceManager.INSTANCE.endOrderBus(); sendEndTaskToClient(); } } @@ -1072,7 +1096,7 @@ public class OrderModel { * * @param data */ - public void onArriveAt(MessagePad.ArrivalNotification data) { + public void onArriveAt(ArrivedStation data,String type) { if (backgroundCurrentStationIndex + 1 > stationList.size() - 1) { CallerLogger.e(M_BUS + TAG, "行程日志-到站异常,取消后续操作结束"); return; @@ -1101,7 +1125,7 @@ public class OrderModel { CallerLogger.d(M_BUS + TAG, "行程日志-当前==backgroundCurrentStationIndex=" + backgroundCurrentStationIndex); - arriveSiteStation(); + arriveSiteStation(type); } public boolean isGoingToNextStation() { diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt index c68dd225a9..a48714e689 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/model/TicketModel.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.bus.bean.WriteOffCountResponse import com.mogo.och.bus.bean.WriteOffPassenger import com.mogo.och.bus.net.OrderServiceManager +import com.mogo.och.bus.util.ShuttleVoiceManager import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg import com.mogo.och.common.module.bean.dpmsg.DPMsgType import com.mogo.och.common.module.bean.dpmsg.WriteOffDevicesMsg @@ -27,7 +28,6 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.manager.loopmanager.BizLoopManager import com.mogo.och.common.module.manager.loopmanager.LoopInfo -import com.mogo.och.common.module.voice.VoiceNotice.showNotice import io.reactivex.Observable import io.reactivex.ObservableEmitter import io.reactivex.ObservableOnSubscribe @@ -137,7 +137,7 @@ object TicketModel : IReceivedMsgListener, IMogoOnMessageListener 1) { //多人播报 "x人" ---》x人核验通过 - showNotice(ticketSize.toString() + "人核验通过", AIAssist.LEVEL3) OrderModel.getInstance().sendWriteOffNumToClient(ticketSize.toString() + "人核验通过") } else { //是 1 播放 "滴" 2022.11.09 改为: "核验通过" - showNotice("核验通过", AIAssist.LEVEL3) OrderModel.getInstance().sendWriteOffNumToClient("核验通过") } + ShuttleVoiceManager.writeOffCount(ticketSize) var tempPhone = phone if (tempPhone.length > 8) { diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java index e1503c35cb..0bea27008e 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java @@ -97,7 +97,7 @@ public interface IBascApiService { Observable queryBusLines(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); /** - * 查询路线当天的任务 + * 查询线路的任务 * @param appId * @param ticket * @param lineId 线路id diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt index 6792800f9e..38d1bf28ef 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/net/OrderServiceManager.kt @@ -9,6 +9,7 @@ import com.mogo.och.bus.bean.* import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl +import com.mogo.och.common.module.biz.network.interceptor.transformIoTry import com.mogo.och.common.module.biz.network.interceptor.transformTry /** @@ -216,7 +217,7 @@ object OrderServiceManager { taskId, siteId ) - .transformTry() + .transformIoTry() .subscribe(OchCommonSubscribeImpl(context, callback, "writeOffCount")) } } \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 796b8b1ee7..5fddc0b754 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -16,18 +16,22 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.ArrivedStation; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.IOchAutopilotStatusListener; +import com.mogo.och.common.module.manager.autopilotmanager.autopilot.OchAutoPilotStatusListenerManager; import com.mogo.och.data.bean.BusStationBean; import com.mogo.och.bus.callback.IBusADASStatusCallback; import com.mogo.och.bus.callback.IBusControllerStatusCallback; import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; -import com.mogo.och.bus.fragment.BusFragment; +import com.mogo.och.bus.fragment.ShuttleFragment; import com.mogo.och.bus.model.OrderModel; import com.mogo.och.bus.util.BusTrajectoryManager; import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; import com.mogo.och.common.module.biz.callback.ILoginCallback; import com.mogo.och.common.module.biz.constant.LoginStatusManager; import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager; +import com.zhjt.mogo.adas.data.AdasConstants; import java.util.ArrayList; @@ -43,19 +47,19 @@ import system_master.SystemStatusInfo; * * @author tongchenfei */ -public class BusPresenter extends Presenter +public class BusPresenter extends Presenter implements IRefreshBusStationsCallback, ISlidePannelHideCallback - , IMoGoAutopilotStatusListener, IBusControllerStatusCallback, ILoginCallback, IBusADASStatusCallback { + , IOchAutopilotStatusListener, IBusControllerStatusCallback, ILoginCallback, IBusADASStatusCallback { private static final String TAG = "BusPresenter"; private final List mStationList = new ArrayList<>(); private int mCurrentStation = 0; - public BusPresenter(BusFragment view) { + public BusPresenter(ShuttleFragment view) { super(view); //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); + OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG,this); OrderModel.getInstance().init(); OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); } @@ -147,13 +151,17 @@ public class BusPresenter extends Presenter } @Override - public void onAutopilotArriveAtStation(MessagePad.ArrivalNotification arrivalNotification) { + public void onAutopilotArriveAtStation(ArrivedStation arrivedStation) { CallerLogger.e( M_BUS + TAG, "行程日志-onAutopilotArriveAtStation arrive"); - OrderModel.getInstance().onArriveAt(arrivalNotification); + arriveStation(arrivedStation,"底盘触发进站"); + } + + public void arriveStation(ArrivedStation arrivedStation,String type){ + OrderModel.getInstance().onArriveAt(arrivedStation,type); } @Override - public void onAutopilotSNRequest() { + public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { } @Override @@ -234,7 +242,7 @@ public class BusPresenter extends Presenter } @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + public void onAutopilotIpcConnectStatusChanged(@NonNull AdasConstants.IpcConnectionStatus status, @Nullable String reason) { } @Override @@ -275,4 +283,8 @@ public class BusPresenter extends Presenter public void onAutopilotDockerInfo(@NonNull String dockerVersion) { } + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { + + } } diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/ShuttleTapPositionView.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/ShuttleTapPositionView.java new file mode 100644 index 0000000000..12ba52cda7 --- /dev/null +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/ShuttleTapPositionView.java @@ -0,0 +1,87 @@ +package com.mogo.och.bus.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; +import com.mogo.och.bus.R; + +import org.jetbrains.annotations.NotNull; + +import chassis.Chassis; + +/** + * @author Jing + * @description 方向盘下方的档位 + * @since: 4/7/22 + */ +public class ShuttleTapPositionView extends ConstraintLayout { + private static final String TAG = "TapPositionView"; + private TextView tabP; + private TextView tabR; + private TextView tabN; + private TextView tabD; + private TypedArray typedArray; + + public ShuttleTapPositionView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + LayoutInflater.from(context).inflate(R.layout.shuttle_tap_position, this); + tabP = findViewById(R.id.tap_p); + tabR = findViewById(R.id.tap_r); + tabN = findViewById(R.id.tap_n); + tabD = findViewById(R.id.tap_d); + typedArray = context.obtainStyledAttributes(attrs, R.styleable.TapPositionView); + if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)||AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)){ + tabP.setVisibility(View.GONE); + } + } + + public void updateWithGear(@NotNull Chassis.GearPosition gear) { + if (tabP != null && tabR != null && tabN != null && tabD != null) { + int defaultColor = typedArray.getColor(R.styleable.TapPositionView_defaultColor, -1); + int selectColor = typedArray.getColor(R.styleable.TapPositionView_selectColor, -1); + switch (gear) { + case GEAR_NONE: + tabP.setTextColor(defaultColor); + tabR.setTextColor(defaultColor); + tabN.setTextColor(defaultColor); + tabD.setTextColor(defaultColor); + break; + case GEAR_P: + tabP.setTextColor(selectColor); + tabR.setTextColor(defaultColor); + tabN.setTextColor(defaultColor); + tabD.setTextColor(defaultColor); + break; + case GEAR_R: + tabR.setTextColor(selectColor); + tabP.setTextColor(defaultColor); + tabN.setTextColor(defaultColor); + tabD.setTextColor(defaultColor); + break; + case GEAR_N: + tabN.setTextColor(selectColor); + tabR.setTextColor(defaultColor); + tabP.setTextColor(defaultColor); + tabD.setTextColor(defaultColor); + break; + case GEAR_D: + tabD.setTextColor(selectColor); + tabN.setTextColor(defaultColor); + tabR.setTextColor(defaultColor); + tabP.setTextColor(defaultColor); + break; + default: + break; + } + } + } +} diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/ShuttleTrafficDataView.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/ShuttleTrafficDataView.java new file mode 100644 index 0000000000..56c48321b4 --- /dev/null +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/ShuttleTrafficDataView.java @@ -0,0 +1,170 @@ +package com.mogo.och.bus.ui; + +import static com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisBrakeStateListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisGearStateListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisThrottleStateListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerChassisBrakeStateListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerChassisGearStateListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerChassisThrottleStateListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager; +import com.mogo.eagle.core.function.hmi.ui.widget.TapPositionView; +import com.mogo.eagle.core.utilcode.util.ThreadUtils; +import com.mogo.och.bus.R; + +import org.jetbrains.annotations.NotNull; + +import chassis.Chassis; +import mogo.telematics.pad.MessagePad; + +/** + * @author Jing + * @description 速度 加速度 档位 刹车 油门状态值 + * @since: 6/24/22 + */ +public class ShuttleTrafficDataView extends ConstraintLayout implements + IMoGoChassisGearStateListener , + IMoGoChassisBrakeStateListener, + IMoGoChassisThrottleStateListener, + IMoGoAutopilotPlanningActionsListener { + private static final String TAG = "TrafficDataView"; + private ShuttleTapPositionView tapPositionView; + private TextView speedTextView; + private TextView accTextView; + private ImageView speedImage; + private ImageView brakeStatus; + + private static final int MSG_SEND_UPDATE = 1; + private volatile double acceleration; + private volatile float mBrake; + private volatile float mThrottle; + + @SuppressLint("HandlerLeak") + private final Handler handler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + if (msg.what == MSG_SEND_UPDATE) { + java.text.DecimalFormat mFormat = new java.text.DecimalFormat("0.0"); + String accStr = mFormat.format(Math.abs(acceleration)); + if (acceleration > 0f) { + accTextView.setText(accStr); + } else { + accTextView.setText("- " + accStr); + } + int state = CallerAutoPilotStatusListenerManager.INSTANCE.getState(); + if (state < STATUS_AUTOPILOT_RUNNING) { + if (mBrake > 0) { + brakeStatus.setImageResource(R.drawable.traffic_data_brake); + } else if (mThrottle >= 0 && mBrake == 0) { + brakeStatus.setImageResource(R.drawable.traffic_data_accelerator); + } else { + brakeStatus.setImageResource(R.drawable.traffic_data_empty); + } + } + if (state == 2) { + brakeStatus.setImageResource(R.drawable.traffic_data_empty); + } + } + handler.sendEmptyMessageDelayed(MSG_SEND_UPDATE, 1000L); + } + }; + + public ShuttleTrafficDataView(@NonNull Context context) { + super(context); + } + + public ShuttleTrafficDataView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initView(context); + } + + public ShuttleTrafficDataView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public ShuttleTrafficDataView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + handler.sendEmptyMessageDelayed(MSG_SEND_UPDATE, 1000L); + CallerChassisGearStateListenerManager.INSTANCE.addListener(TAG, this); + CallerChassisBrakeStateListenerManager.INSTANCE.addListener(TAG, this); + CallerChassisThrottleStateListenerManager.INSTANCE.addListener(TAG, this); + CallerPlanningActionsListenerManager.INSTANCE.addListener(TAG, this); + } + + private void initView(@NonNull Context context) { + LayoutInflater.from(context).inflate(R.layout.shuttle_traffic_data, this); + tapPositionView = findViewById(R.id.traffic_position); + speedImage = findViewById(R.id.speedImage); + speedTextView = findViewById(R.id.speedTextView); + accTextView = findViewById(R.id.speedAccTextView); + brakeStatus = findViewById(R.id.brakeStatus); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + CallerChassisGearStateListenerManager.INSTANCE.removeListener(TAG); + CallerChassisBrakeStateListenerManager.INSTANCE.removeListener(TAG); + CallerChassisThrottleStateListenerManager.INSTANCE.removeListener(TAG); + CallerPlanningActionsListenerManager.INSTANCE.removeListener(TAG); + } + + @Override + public void pncActions(@NonNull MessagePad.PlanningActionMsg planningActionMsg) { + acceleration = planningActionMsg.getDestinationAcc(); + } + + /** + * 档位 + */ + @Override + public void onAutopilotGearData(@NotNull Chassis.GearPosition gear) { + ThreadUtils.runOnUiThread(() -> { + if (tapPositionView != null) { + tapPositionView.updateWithGear(gear); + } + }); + } + + @Override + public void onAutopilotBrake(float brake) { + mBrake = brake; + } + + @Override + public void onAutopilotThrottle(float throttle) { + mThrottle = throttle; + } + + /** + * value呈现 + */ + public void updateSpeedWithValue(int newSpeed) { + if (speedTextView != null) { + speedTextView.setText(String.valueOf(newSpeed)); + } + } + +} diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt index c3542fc18a..2f877f4691 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffView.kt @@ -2,6 +2,7 @@ package com.mogo.och.bus.ui.writeoff import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import androidx.lifecycle.ViewModelProvider diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt index 297d35b959..95e4f4993d 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/ui/writeoff/WriteOffViewModel.kt @@ -9,6 +9,7 @@ import com.mogo.och.bus.model.TicketModel import com.mogo.och.common.module.utils.RxUtils import io.reactivex.Observable import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable class WriteOffViewModel : ViewModel() { @@ -52,6 +53,7 @@ class WriteOffViewModel : ViewModel() { CallerLogger.d(SceneConstant.M_BUS + TAG, "显示文案:${showText}") Observable.just(showText) } + .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer) } diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/util/ShuttleVoiceManager.kt b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/util/ShuttleVoiceManager.kt new file mode 100644 index 0000000000..efbbd2d883 --- /dev/null +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/util/ShuttleVoiceManager.kt @@ -0,0 +1,96 @@ +package com.mogo.och.bus.util + +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.och.bus.R +import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.tts.base.LangTtsEntity +import com.mogo.tts.base.LanguageType +import java.util.ArrayList + +object ShuttleVoiceManager { + + fun arrivedStationBus(siteNameCN: String?, siteNameKR: String?) { + if (AppIdentityModeUtils.isM2(FunctionBuildConfig.appIdentityMode)) { + return + } + val context = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + siteNameCN?.let { + val chineseTTS = LangTtsEntity( + context.getString(R.string.bus_arrived_station_tip, it), + LanguageType.CHINESE + ) + val engTTS = LangTtsEntity( + context.getString(R.string.bus_arrived_station_english_tip, it), + LanguageType.CHINESE + ) + val koreanTTS = LangTtsEntity( + context.getString(R.string.bus_arrived_station_korean_tip, siteNameKR?:it), + LanguageType.KOREAN + ) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + } + + VoiceNotice.showNotice(list, AIAssist.LEVEL1,null) + } + + fun leaveStationBus(siteNameCN: String?, siteNameKR: String?) { + val list: MutableList = ArrayList() + val context = AbsMogoApplication.getApp() + siteNameCN?.let { + val chineseTTS = LangTtsEntity( + context.getString(R.string.bus_leave_station_tip, it), + LanguageType.CHINESE + ) + val engTTS = LangTtsEntity( + context.getString(R.string.bus_leave_station_english_tip, it), + LanguageType.CHINESE + ) + list.add(chineseTTS) + list.add(engTTS) + + val koreanTTS = LangTtsEntity( + context.getString(R.string.bus_leave_station_korean_tip, siteNameKR ?: it), + LanguageType.KOREAN + ) + list.add(koreanTTS) + } + VoiceNotice.showNotice(list, AIAssist.LEVEL1,null) + } + + fun endOrderBus() { + val context = AbsMogoApplication.getApp() + val list: MutableList = ArrayList() + val chineseTTS = LangTtsEntity(context.getString(R.string.bus_end_task_tip), LanguageType.CHINESE) + val engTTS = LangTtsEntity(context.getString(R.string.bus_end_task_english_tip), LanguageType.ENGLISH) + val koreanTTS = LangTtsEntity(context.getString(R.string.bus_end_task_korean_tip), LanguageType.KOREAN) + list.add(chineseTTS) + list.add(engTTS) + list.add(koreanTTS) + VoiceNotice.showNotice(list, AIAssist.LEVEL0,null) + } + + fun writeOffCount(successNum:Int){ + if(successNum<=1){ + VoiceNotice.showNotice("核验通过", AIAssist.LEVEL3); + }else{ + VoiceNotice.showNotice("$successNum 人核验通过", AIAssist.LEVEL3) + } + } + + // 距离发车还有1分钟 + fun showLeafTime(tips: String) { + //语音提示 + VoiceNotice.showNotice(tips) + } + + fun writeOffFaile(reaseon:String) { + VoiceNotice.showNotice("验票失败,${reaseon}", AIAssist.LEVEL3) + } + +} \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java index 479636cfbb..1c6a0823bc 100644 --- a/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java +++ b/OCH/shuttle/driver/src/main/java/com/mogo/och/bus/view/SlidePanelView.java @@ -22,9 +22,12 @@ import android.view.animation.DecelerateInterpolator; import androidx.annotation.Nullable; import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.ConvertUtils; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager; import me.jessyan.autosize.AutoSizeConfig; import me.jessyan.autosize.utils.AutoSizeUtils; @@ -129,6 +132,10 @@ public class SlidePanelView extends View { textGradient.setLocalMatrix(gradientMatrix); textPaint.setShader(textGradient); textPaint.getFontMetrics(blockTextMetrics); + decodeImage(); + } + + private void decodeImage(){ ThreadUtils.getCpuPool().execute(() -> { int size = AutoSizeUtils.dp2px(getContext(), 120); BitmapFactory.Options opts = new BitmapFactory.Options(); @@ -259,21 +266,30 @@ public class SlidePanelView extends View { lastX = 0; } - @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 画背景 - canvas.drawRoundRect(bgRectF, (float) getHeight() / 2, (float) getHeight() / 2, bgPaint); + canvas.drawRoundRect(bgRectF, (float) getHeight() / 2.0f, (float) getHeight() / 2.0f, bgPaint); // 画文字 gradientMatrix.setTranslate(matrixTranslate, 0); textGradient.setLocalMatrix(gradientMatrix); - if(bmBlock!=null) { - canvas.save(); - canvas.drawText(blockText, (float) (blockWidth + BLOCK_START_X + textMarginLeft), (float) textOffset, textPaint); - canvas.restore(); - // 画滑块 - canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + canvas.save(); + canvas.drawText(blockText, (float) (blockWidth + BLOCK_START_X + textMarginLeft), (float) textOffset, textPaint); + canvas.restore(); + if (bmBlock != null) { + if(bmBlock.getByteCount()>=5*1024*1024){ + OchChainLogManager.writeChainLog("崩溃兜底策略", + "图片大小监听"+ ConvertUtils.byte2FitMemorySize(bmBlock.getByteCount()),true,OchChainLogManager.EVENT_KEY_INFE_ERROR); + bmBlock.recycle(); + bmBlock = null; + blockWidth = 0; + decodeImage(); + }else { + // 画滑块 + canvas.drawBitmap(bmBlock, (float) (BLOCK_START_X + blockOffset), (float) BLOCK_START_Y, blockPaint); + } } + } public interface OnSlidePanelMoveToEndListener { diff --git a/OCH/bus/driver/src/main/res/drawable/bus_base_slide_block.png b/OCH/shuttle/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png similarity index 100% rename from OCH/bus/driver/src/main/res/drawable/bus_base_slide_block.png rename to OCH/shuttle/driver/src/main/res/drawable-nodpi/bus_base_slide_block.png diff --git a/OCH/shuttle/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png b/OCH/shuttle/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png deleted file mode 100644 index ed7b293b90..0000000000 Binary files a/OCH/shuttle/driver/src/main/res/drawable-xhdpi/bus_base_slide_block.png and /dev/null differ diff --git a/OCH/shuttle/driver/src/main/res/drawable-xhdpi/shuttle_traffic_data_speed.png b/OCH/shuttle/driver/src/main/res/drawable-xhdpi/shuttle_traffic_data_speed.png new file mode 100644 index 0000000000..029cf64b2a Binary files /dev/null and b/OCH/shuttle/driver/src/main/res/drawable-xhdpi/shuttle_traffic_data_speed.png differ diff --git a/OCH/shuttle/driver/src/main/res/drawable/bus_base_slide_block.png b/OCH/shuttle/driver/src/main/res/drawable/bus_base_slide_block.png deleted file mode 100644 index ed7b293b90..0000000000 Binary files a/OCH/shuttle/driver/src/main/res/drawable/bus_base_slide_block.png and /dev/null differ diff --git a/OCH/shuttle/driver/src/main/res/layout/fragment_och_bus.xml b/OCH/shuttle/driver/src/main/res/layout/fragment_och_bus.xml index 5314681946..e9b705fa75 100644 --- a/OCH/shuttle/driver/src/main/res/layout/fragment_och_bus.xml +++ b/OCH/shuttle/driver/src/main/res/layout/fragment_och_bus.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/module_och_bus_order_status_stationInfo" - android:layout_width="@dimen/module_mogo_och_autopilot_order_bg_width" + android:layout_width="@dimen/dp_587" android:layout_height="wrap_content" android:paddingBottom="@dimen/dp_28" android:background="@drawable/bus_line_panel_bg" @@ -96,9 +96,10 @@ - @@ -163,9 +163,10 @@ @@ -211,15 +213,16 @@ app:layout_constraintLeft_toLeftOf="@id/module_mogo_och_station_panel_container" app:layout_constraintTop_toBottomOf="@id/module_mogo_och_station_panel_container" tools:visibility="visible" /> - + + + android:layout_width="@dimen/dp_585" + android:layout_height="@dimen/dp_176"/> + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/res/layout/shuttle_traffic_data.xml b/OCH/shuttle/driver/src/main/res/layout/shuttle_traffic_data.xml new file mode 100644 index 0000000000..abbad9395d --- /dev/null +++ b/OCH/shuttle/driver/src/main/res/layout/shuttle_traffic_data.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver/src/main/res/layout/shuttle_wirte_off_view.xml b/OCH/shuttle/driver/src/main/res/layout/shuttle_wirte_off_view.xml index d549ca9937..60f94aace3 100644 --- a/OCH/shuttle/driver/src/main/res/layout/shuttle_wirte_off_view.xml +++ b/OCH/shuttle/driver/src/main/res/layout/shuttle_wirte_off_view.xml @@ -12,7 +12,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/shuttle_driver_cad6ff" - android:textSize="32dp" + android:textSize="30dp" android:layout_marginStart="@dimen/dp_68" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" diff --git a/OCH/shuttle/driver/src/main/res/values/strings.xml b/OCH/shuttle/driver/src/main/res/values/strings.xml index dbde761190..7558acbeec 100644 --- a/OCH/shuttle/driver/src/main/res/values/strings.xml +++ b/OCH/shuttle/driver/src/main/res/values/strings.xml @@ -43,6 +43,12 @@ 本站核销成功:0人 + + 距离发车时间还有%1$s分钟 + + 平行驾驶 + + 已到达%1$s,带好随身物品,下车请注意安全。 We are arriving at %1$s ,get off with your belongings @@ -57,8 +63,4 @@ 자율주행 버스를 체험해 주셔서 감사합니다. 다음에 또 뵙겠습니다 - 距离发车时间还有%1$s分钟 - - 平行驾驶 - diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java index 985cea8437..35432b5f6c 100644 --- a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java +++ b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/model/BusPassengerModel.java @@ -69,6 +69,7 @@ import com.mogo.och.data.bean.BusRoutesResult; import com.mogo.och.data.bean.BusStationBean; import com.mogo.och.data.bean.BusTransferData; import com.mogo.och.shuttle.passenger.network.PassengerServiceManager; +import com.zhjt.mogo.adas.data.AdasConstants; import java.util.ArrayList; import java.util.List; @@ -341,7 +342,7 @@ public class BusPassengerModel { IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener ); MogoStatusManager.getInstance().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener ); // 定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG, 10,mMapLocationListener); + CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG, 3,mMapLocationListener); //2021.11.1 自动驾驶路线规划接口 CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG,moGoAutopilotPlanningListener); @@ -486,6 +487,11 @@ public class BusPassengerModel { }; private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { +// IMoGoAutopilotStatusListener.super.onSsmReceiveTimeout(isTimeout); + } + @Override public void onSystemStatus(@NonNull SsmInfo.SsmStatusInf statusInf) { //IMoGoAutopilotStatusListener.super.onSystemStatus(statusInf); @@ -528,7 +534,7 @@ public class BusPassengerModel { } @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + public void onAutopilotIpcConnectStatusChanged(@NonNull AdasConstants.IpcConnectionStatus status, @Nullable String reason) { } @Override @@ -539,7 +545,7 @@ public class BusPassengerModel { private boolean arriveAtEnd = false; //乘客app专用字段 @Override - public void onAutopilotSNRequest() { + public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { } diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPStatusBarView.kt b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPStatusBarView.kt index 1dd9581d1b..cd2c21f70a 100644 --- a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPStatusBarView.kt +++ b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPStatusBarView.kt @@ -12,7 +12,9 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager import com.mogo.eagle.core.utilcode.kotlin.* +import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.och.shuttle.passenger.R +import kotlinx.android.synthetic.main.shuttle_p_jl_view_status_bar.view.tv_shuttle_b1_p_version import kotlinx.coroutines.* import me.jessyan.autosize.utils.AutoSizeUtils @@ -33,6 +35,8 @@ class BusPStatusBarView @JvmOverloads constructor( setBackgroundResource(R.drawable.shuttle_p_jl_bg_status_bar) isClickable = true isFocusable = true + + tv_shuttle_b1_p_version.text = "版本:${AppUtils.getAppVersionName()}" } diff --git a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPassengerRouteFragment.java b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPassengerRouteFragment.java index c43544112c..f6dd5f98bf 100644 --- a/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/shuttle/passenger/src/main/java/jinlv/com/mogo/och/shuttle/passenger/ui/BusPassengerRouteFragment.java @@ -23,7 +23,7 @@ import com.mogo.och.shuttle.passenger.ui.adapter.BusPassengerLineStationsAdapter import com.mogo.och.shuttle.passenger.constant.BusPassengerConst; import com.mogo.och.shuttle.passenger.presenter.BaseBusPassengerPresenter; import com.mogo.och.shuttle.passenger.ui.layoutmanager.CenterLayoutManager; -import com.mogo.och.shuttle.passenger.ui.mapdirectionview.BusPassengerMapDirectionView; +import com.mogo.och.common.module.wigets.mapdirectionview.MapDirectionView; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.wigets.MarqueeTextView; import com.mogo.och.common.module.wigets.OCHGradientTextView; @@ -48,7 +48,7 @@ public class BusPassengerRouteFragment extends private MarqueeTextView mLineName; private Group mRouteInfoView; private RecyclerView mStationsListRv; - private BusPassengerMapDirectionView mMapDirectionView; + private MapDirectionView mMapDirectionView; private BusPassengerLineStationsAdapter mAdapter; private TextView emptyTv; private AppCompatImageView mAutopilotIv; @@ -157,7 +157,6 @@ public class BusPassengerRouteFragment extends @Override public void run() { mMapDirectionView.clearLineMarkers(); - } }); } diff --git a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt index ee8f705ac9..b0c1ef3abf 100644 --- a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt +++ b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt @@ -16,18 +16,15 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.map.MogoLocation 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.telematic.IReceivedMsgListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager 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.telematic.CallerTelematicListenerManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.sendMsgToServer 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.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.StringUtils @@ -36,9 +33,11 @@ import com.mogo.och.common.module.bean.dpmsg.* import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager.pushAppOperationalMsgBox import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager +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.DateTimeUtil -import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.voice.VoiceNotice.showNotice import com.mogo.och.data.bean.BusRoutesResult import com.mogo.och.data.bean.BusStationBean @@ -49,10 +48,8 @@ import com.mogo.och.shuttle.passenger.bean.response.PassengerRoutesResponse import com.mogo.och.shuttle.passenger.callback.AutoPilotStatusCallback import com.mogo.och.shuttle.passenger.callback.DrivingInfoCallback import com.mogo.och.shuttle.passenger.constant.BusPassengerConst -import com.mogo.och.shuttle.passenger.network.PM2ModelLoopManager import com.mogo.och.shuttle.passenger.network.PassengerServiceManager -import io.reactivex.disposables.Disposable -import mogo.telematics.pad.MessagePad +import io.reactivex.schedulers.Schedulers import kotlin.math.abs /** @@ -62,29 +59,19 @@ import kotlin.math.abs class PM2DrivingModel private constructor() { private var mContext: Context? = null - private var mLocation: MogoLocation? = null - private var mRoutePoints = mutableListOf() private var routesResult: BusRoutesResult? = null - private var mCurrentAutoStatus = -1 var mStations = mutableListOf() private var mNextStationIndex = 0 // A-B要到达站的index private var isGoingToNextStation = false //是否前往下一站过程中 - private var mTwoStationsRouts = mutableListOf() - private var mPreRouteIndex = 0 - private var mWipePreIndex = 0 - private var mDrivingInfoCallback: DrivingInfoCallback? = null //行程信息 private var mAutoStatusCallback: AutoPilotStatusCallback? = null //自动驾驶状态 private var operationStatus: PassengerOperationStatusResponse.Result? = null - @Volatile - private var globalPathTruncation: Disposable? = null - private val handler = Handler(Handler.Callback { msg -> if (msg.what == MSG_QUERY_BUS_P_STATION) { queryDriverOperationStatus() @@ -101,12 +88,12 @@ class PM2DrivingModel private constructor() { } } - fun init(context : Context){ + fun init(context: Context) { mContext = context initListener() queryDriverByLocalDriver() queryDriverOperationStatus() - startOrStopOrderLoop(true) + BizLoopManager.setLoopFunction(TAG, LoopInfo(2,::queryDriverSiteByCoordinate, scheduler = Schedulers.io())) } private fun queryDriverByLocalDriver() { @@ -120,16 +107,16 @@ class PM2DrivingModel private constructor() { CallerAutoPilotStatusListenerManager.addListener(TAG, mAutoPilotStatusListener) // 定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10,mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, mMapLocationListener) //司乘屏通信监听 - CallerTelematicListenerManager.addListener(TAG,mReceivedMsgListener) - - //自动驾驶轨迹监听 - CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener) + CallerTelematicListenerManager.addListener(TAG, mReceivedMsgListener) //网络监听 - IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + IntentManager.getInstance() + .registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + + TrajectoryAndDistanceManager.addDistanceListener(TAG, trajectoryListener) } @@ -140,7 +127,7 @@ class PM2DrivingModel private constructor() { ) } - fun releaseListener(){ + fun releaseListener() { //自动驾驶状态监听 CallerAutoPilotStatusListenerManager.removeListener(TAG) @@ -149,8 +136,10 @@ class PM2DrivingModel private constructor() { CallerTelematicListenerManager.removeListener(TAG) - //自动驾驶轨迹监听 - CallerPlanningRottingListenerManager.removeListener(TAG) + cleanStation("release") + + TrajectoryAndDistanceManager.removeListener(TAG) + } fun setDrivingInfoCallback(drivingInfoCallback : DrivingInfoCallback?){ @@ -216,15 +205,43 @@ class PM2DrivingModel private constructor() { } } + private val trajectoryListener: IDistanceListener = object : IDistanceListener { + override fun distanceCallback(distance: Float) { + val lastTime = distance / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 //秒 + d(SceneConstant.M_BUS_P + TAG, "轨迹排查==lastSumLength = $distance") + if (routesResult != null) { + for (site in routesResult!!.sites) { + if (site.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !site.isLeaving) { + return + } + } + } + // 小于200m 播报站点介绍 + if (distance < 200) { + val stationNext = mStations[mNextStationIndex] + if (!stationNext.isPlayTts) { + if (!StringUtils.isEmpty(stationNext.introduction)) { + showNotice(stationNext.introduction) + stationNext.isPlayTts = true + } + } + } + mDrivingInfoCallback?.updateRemainMT( + distance.toLong(), + lastTime.toLong() + ) + } + } + @RequiresApi(Build.VERSION_CODES.O) private fun speakTTS(msg: String) { - var mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager - var mAudioAttributes = AudioAttributes.Builder() + val mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager + val mAudioAttributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) //设置声音的用途 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //设置声音的类型 .build() - var mAudioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 + val mAudioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 .setAudioAttributes(mAudioAttributes) //设置声音属性 .setAcceptsDelayedFocusGain(false) //设置接受延迟获取焦点,需要设置OnAudioFocusChangeListener来监听焦点的获取 .build() @@ -249,50 +266,10 @@ class PM2DrivingModel private constructor() { object : IMoGoChassisLocationGCJ02Listener{ override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { if (null == mogoLocation) return - mLocation = mogoLocation updateSpeed(mogoLocation) } } - private val moGoAutopilotPlanningListener = object : IMoGoPlanningRottingListener{ - - @Synchronized - override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==globalPathResp = " + GsonUtils.toJson(globalPathResp)) - globalPathResp?.let { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==wayPointsSize = " + it.wayPointsList.size) - - if (globalPathTruncation != null && !globalPathTruncation!!.isDisposed) { - d(SceneConstant.M_BUS_P + TAG, "1s内不可以接受轨迹") - return@let - } - - globalPathTruncation = RxUtils.createSubscribe(1_000) { - d(SceneConstant.M_BUS_P + TAG, "可以接受轨迹") - } - d(SceneConstant.M_BUS_P + TAG, "接受轨迹中") - it.wayPointsList?.let {list-> - updateRoutePoints(list) - } - } - } - - } - - @Synchronized - fun updateRoutePoints(routePoints: List) { - mRoutePoints.clear() - val latLngModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjLocations(mContext, routePoints) - d(SceneConstant.M_BUS_P + TAG, "och-rotting==latLngModels = " + latLngModels.size) - mRoutePoints.addAll(latLngModels) - - if (isGoingToNextStation){ - mTwoStationsRouts.clear() - startRemainRouteInfo() - } - } - private fun updateSpeed(mogoLocation: MogoLocation) { // km/h val speedKM = (abs(mogoLocation.gnssSpeed) * 3.6f).toInt() @@ -407,6 +384,7 @@ class PM2DrivingModel private constructor() { d(SceneConstant.M_BUS_P+TAG, "queryDriverSiteByCoordinate = %s", msg) if (code == 1003){ queryDriverOperationDelay() + cleanStation("queryDriverSiteByCoordinate 1003") } if (PassengerServiceManager.driverAppSn.isEmpty()){ return @@ -414,7 +392,6 @@ class PM2DrivingModel private constructor() { if (code == 1003) { routesResult = null isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) return } } @@ -424,11 +401,10 @@ class PM2DrivingModel private constructor() { } private fun updateLocalOrder(){ - mRoutePoints.clear() routesResult = null mNextStationIndex = 0 + cleanStation("queryDriverSiteByCoordinate") isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) mDrivingInfoCallback?.showNoTaskView(true) } @@ -460,20 +436,20 @@ class PM2DrivingModel private constructor() { && station.isLeaving && i + 1 < stations.size) { mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i + 1, false) d(SceneConstant.M_BUS_P+TAG,"och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") -// if (mNextStationIndex != i + 1) { - d(SceneConstant.M_BUS_P+TAG,"och-rotting--start ") - mTwoStationsRouts.clear() - startRemainRouteInfo() -// } + d(SceneConstant.M_BUS_P+TAG,"och-rotting--start ") isGoingToNextStation = true mNextStationIndex = i + 1 + val startStation = mStations[i] + val endStation = mStations[i + 1] + setTrajectoryStation(startStation, endStation, result.lineId) return } else if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) { d(SceneConstant.M_BUS_P+TAG,"och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") d(SceneConstant.M_BUS_P+TAG,"och-rotting--arrived ") - mPreRouteIndex = 0 + if (i == stations.size - 1) { + cleanStation("updatePassengerRouteInfo最后一个站点") + } isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i, true) return }else{ @@ -484,162 +460,22 @@ class PM2DrivingModel private constructor() { } - fun loopRouteAndWipe(){ - if (mRoutePoints != null && mRoutePoints.size > 0 && mLocation != null) { - val haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndexNew( - mWipePreIndex, - mRoutePoints, - mLocation!! - ) - mWipePreIndex = haveArrivedIndex - d(SceneConstant.M_BUS_P + TAG, - "thread = " + Thread.currentThread().name + " haveArrivedIndex== " + haveArrivedIndex - ) -// if (mAutopilotPlanningCallback != null) { -// val routePoints = CoordinateCalculateRouteUtil -// .coordinateConverterLocationToLatLng(mContext, mRoutePoints) -// mAutopilotPlanningCallback.routeResult(routePoints, haveArrivedIndex) -// } - } + private fun setTrajectoryStation( + startStationInfo: BusStationBean, + endStationInfo: BusStationBean, + lineId: Int + ) { + val startStation = MogoLocation() + startStation.longitude = startStationInfo.gcjLon + startStation.latitude = startStationInfo.gcjLat + val endStation = MogoLocation() + endStation.longitude = endStationInfo.gcjLon + endStation.latitude = endStationInfo.gcjLat + TrajectoryAndDistanceManager.setStationPoint(startStation, endStation, lineId.toLong()) } - private fun startRemainRouteInfo() { - //开启实时计算剩余距离,剩余时间,预计时间 - startOrStopCalculateRouteInfo(true) - } - - fun dynamicCalculateRouteInfo(){ - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - d(SceneConstant.M_BUS_P + TAG, "och-rotting==mTwoStationsRouts.size() = " + mTwoStationsRouts.size) - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - if (mTwoStationsRouts.size == 0) { - calculateTwoStationsRoute() - } - - if (mTwoStationsRouts.size > 0 && mLocation != null) { - val lastPointsMap = CoordinateCalculateRouteUtil - .getRemainPointListByCompareNew(mPreRouteIndex, mTwoStationsRouts, mLocation!!) - for (index in lastPointsMap.keys) { - mPreRouteIndex = index - break - } - for (lastPoints in lastPointsMap.values) { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastPoints.size() = " + lastPoints.size) - var lastSumLength = 0f - lastSumLength = if (lastPoints.size == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex >= 0) { - val stationNext: BusStationBean = mStations[mNextStationIndex] - CoordinateUtils.calculateLineDistance( - stationNext.gcjLon, stationNext.gcjLat, - mLocation!!.longitude, mLocation!!.latitude - ) - } else { - CoordinateUtils.calculateLineDistance( - lastPoints[0].longitude, lastPoints[0].latitude, - mLocation!!.longitude, mLocation!!.latitude - ) - } - } else { - CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints) - } - val lastTime = lastSumLength / BusPassengerConst.SHUTTLE_AVERAGE_SPEED * 3.6 //秒 - d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastSumLength = $lastSumLength") - - // 小于200m 播报站点介绍 - // 小于200m 播报站点介绍 - if (lastSumLength < 200) { - val stationNext = mStations[mNextStationIndex] - if (!stationNext.isPlayTts) { - if (!StringUtils.isEmpty(stationNext.introduction)) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - speakTTS(stationNext.introduction) - } - stationNext.isPlayTts = true - } - } - } - - mDrivingInfoCallback?.updateRemainMT( - lastSumLength.toLong(), - lastTime.toLong() - ) - } - } - } - - private fun calculateTwoStationsRoute() { - //找出前往站对应的轨迹点,拿出两站点的集合 - d(SceneConstant.M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size) - if (mRoutePoints.size > 0) { - if (mStations.size > 1) { //两个站点及以上要计算两个站点间的轨迹路线 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex - 1 >= 0) { - mTwoStationsRouts.clear() - val stationNext: BusStationBean = mStations[mNextStationIndex] - val stationCur: BusStationBean = mStations[mNextStationIndex - 1] - //当前站在轨迹中对应的点 - val currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( - 0, mRoutePoints, stationCur.gcjLon, stationCur.gcjLat - ) - //要前往的站在轨迹中对应的点 - val nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( - currentRouteIndex, - mRoutePoints, - stationNext.gcjLon, - stationNext.gcjLat - ) - - d(SceneConstant.M_BUS_P + TAG, "och-rotting==currentRouteIndex = " + currentRouteIndex - + ", nextRouteIndex = " + nextRouteIndex) - - if (currentRouteIndex < nextRouteIndex) { //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 - mTwoStationsRouts.addAll( - mRoutePoints.subList( - currentRouteIndex, - nextRouteIndex + 1 - ) - ) - } - } - } - } - } - - /** - * 开始轮询计算剩余里程和时间 - * @param isStart - */ - fun startOrStopCalculateRouteInfo(isStart: Boolean) { - d(SceneConstant.M_BUS_P+TAG, "startOrStopCalculateRouteInfo() $isStart") - if (isStart) { - PM2ModelLoopManager.startCalculateRouteInfoLoop() - } else { - mTwoStationsRouts.clear() - PM2ModelLoopManager.stopCalculateRouteInfLoop() - } - } - - /** - * 实时轨迹擦除 - * @param isStart - */ - private fun startOrStopRouteAndWipe(isStart: Boolean) { - if (isStart) { - PM2ModelLoopManager.startOrStopRouteAndWipe() - } else { - mWipePreIndex = 0 - PM2ModelLoopManager.stopOrStopRouteAndWipe() - } - } - - private fun startOrStopOrderLoop(start: Boolean) { - d(SceneConstant.M_BUS_P + TAG, "startOrStopOrderLoop() $start") - if (start) { - PM2ModelLoopManager.startQueryDriverLineLoop() - } else { - PM2ModelLoopManager.stopQueryDriverLineLoop() - } + private fun cleanStation(type: String) { + d(SceneConstant.M_BUS_P + TAG, "清理站点:$type") + TrajectoryAndDistanceManager.setStationPoint(null, null, -1L) } } \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt deleted file mode 100644 index 8f3082bce1..0000000000 --- a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt +++ /dev/null @@ -1,127 +0,0 @@ -package com.mogo.och.shuttle.passenger.network - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.shuttle.passenger.constant.BusPassengerConst -import com.mogo.och.shuttle.passenger.model.PM2DrivingModel -import io.reactivex.Observable -import io.reactivex.ObservableOnSubscribe -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.disposables.Disposable -import io.reactivex.schedulers.Schedulers -import java.util.concurrent.TimeUnit - -/** - * @author: wangmingjun - * @date: 2023/2/1 - */ -object PM2ModelLoopManager { - - private val TAG: String = PM2ModelLoopManager::class.java.getSimpleName() - - private var mQueryLineDisposable: Disposable? = null //心跳轮询 - private var mRouteWipeDisposable: CompositeDisposable? = null //估计擦除 - private var mCalculateRouteDisposable: CompositeDisposable? = null //每隔2s计算一次剩余里程和时间 - - - fun startOrStopRouteAndWipe() { - i(SceneConstant.M_BUS_P + TAG, "startOrStopRouteWipe()") - if (mRouteWipeDisposable != null) return - if (mRouteWipeDisposable == null) { - mRouteWipeDisposable = CompositeDisposable() - } - val disposable = startLoopRouteAndWipe() - .doOnSubscribe { } - .doOnError { } - .delay( - BusPassengerConst.LOOP_LINE_1S, - TimeUnit.MILLISECONDS, - true - ) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { } - mRouteWipeDisposable!!.add(disposable) - } - - fun stopOrStopRouteAndWipe() { - if (mRouteWipeDisposable != null) { - mRouteWipeDisposable!!.dispose() - mRouteWipeDisposable = null - } - } - - fun startQueryDriverLineLoop() { - if (mQueryLineDisposable != null && !mQueryLineDisposable!!.isDisposed) { - return - } - i(SceneConstant.M_BUS_P + TAG, "startQueryDriverLineLoop()") - mQueryLineDisposable = Observable.interval( - BusPassengerConst.LOOP_DELAY, - BusPassengerConst.LOOP_LINE_2S, TimeUnit.MILLISECONDS - ) - .map { aLong: Long -> aLong + 1 } - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { aLong: Long? -> - PM2DrivingModel.INSTANCE.queryDriverSiteByCoordinate() - } - } - - fun stopQueryDriverLineLoop() { - if (mQueryLineDisposable != null) { - i(SceneConstant.M_BUS_P + TAG, "stopQueryDriverLineLoop()") - mQueryLineDisposable!!.dispose() - mQueryLineDisposable = null - } - } - - fun startCalculateRouteInfoLoop() { - i(SceneConstant.M_BUS_P + TAG, "startCalculateRouteInfoLoop()") - if (mCalculateRouteDisposable != null) return - if (mCalculateRouteDisposable == null) { - mCalculateRouteDisposable = CompositeDisposable() - } - val disposable = startLoopCalculateRouteInfo() - .doOnSubscribe { } - .doOnError { } - .delay( - BusPassengerConst.LOOP_LINE_2S, - TimeUnit.MILLISECONDS, - true - ) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { } - mCalculateRouteDisposable!!.add(disposable) - } - - fun stopCalculateRouteInfLoop() { - if (mCalculateRouteDisposable != null) { - i(SceneConstant.M_BUS_P + TAG, "stopCalculateRouteInfLoop()") - mCalculateRouteDisposable!!.dispose() - mCalculateRouteDisposable = null - } - } - - private fun startLoopRouteAndWipe(): Observable { - return Observable.create(ObservableOnSubscribe { emitter -> - if (emitter.isDisposed) return@ObservableOnSubscribe - PM2DrivingModel.INSTANCE.loopRouteAndWipe() - emitter.onComplete() - }) - } - - private fun startLoopCalculateRouteInfo(): Observable { - return Observable.create(ObservableOnSubscribe { emitter -> - if (emitter.isDisposed) return@ObservableOnSubscribe - PM2DrivingModel.INSTANCE.dynamicCalculateRouteInfo() - emitter.onComplete() - }) - } -} \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/ui/PM2BaseFragment.kt b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/ui/PM2BaseFragment.kt index c5c7b83350..38717d851a 100644 --- a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/ui/PM2BaseFragment.kt +++ b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/ui/PM2BaseFragment.kt @@ -1,9 +1,11 @@ package com.mogo.och.shuttle.passenger.ui import com.mogo.commons.mvp.MvpFragment +import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.och.shuttle.passenger.R import com.mogo.och.shuttle.passenger.presenter.PM2Presenter import com.mogo.och.common.module.wigets.media.MediaPlayerFragment +import kotlinx.android.synthetic.main.shuttle_p_m2_fragment.tv_shuttle_b2_p_version /** @@ -28,7 +30,7 @@ class PM2BaseFragment : override fun initViews() { //横竖屏 // setScreenDirection() - + tv_shuttle_b2_p_version.text = "版本:${AppUtils.getAppVersionName()}" //隐藏小地图 initFragment() } diff --git a/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_route_fragment.xml b/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_route_fragment.xml index 6b44d9a4cb..2e0ad54917 100644 --- a/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_route_fragment.xml +++ b/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_route_fragment.xml @@ -265,10 +265,12 @@ - diff --git a/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_view_status_bar.xml b/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_view_status_bar.xml index 0551cdb433..1756b368a8 100644 --- a/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_view_status_bar.xml +++ b/OCH/shuttle/passenger/src/main/res/jinlv/layout/shuttle_p_jl_view_status_bar.xml @@ -53,4 +53,15 @@ android:layout_gravity="center" android:layout_marginStart="@dimen/dp_40"/> + + \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/main/res/m2/layout/shuttle_p_m2_fragment.xml b/OCH/shuttle/passenger/src/main/res/m2/layout/shuttle_p_m2_fragment.xml index 9dbd6a2a9c..75eed6264a 100644 --- a/OCH/shuttle/passenger/src/main/res/m2/layout/shuttle_p_m2_fragment.xml +++ b/OCH/shuttle/passenger/src/main/res/m2/layout/shuttle_p_m2_fragment.xml @@ -137,7 +137,7 @@ android:layout_height="@dimen/dp_30"/> - + + + \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/main/res/m2/values/colors.xml b/OCH/shuttle/passenger/src/main/res/m2/values/colors.xml index 71557ca79b..b0196c0ce9 100644 --- a/OCH/shuttle/passenger/src/main/res/m2/values/colors.xml +++ b/OCH/shuttle/passenger/src/main/res/m2/values/colors.xml @@ -20,6 +20,7 @@ #43CEFE #1466FB #7094AD + #80FFFFFF #99AFC9E7 #6617417B diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java index 97453f051a..0479089cfa 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/cloud/model/SweeperCloudTaskModel.java @@ -38,6 +38,7 @@ import com.mogo.och.sweeper.common.constant.SweeperConst; import com.mogo.och.sweeper.common.database.MyDataBase; import com.mogo.och.sweeper.common.database.bean.WeltDataBean; import com.mogo.och.sweeper.common.view.DebugView; +import com.zhjt.mogo.adas.data.AdasConstants; import com.zhjt.mogo.adas.data.AiCloudTask; import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable; import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask; @@ -701,7 +702,7 @@ public class SweeperCloudTaskModel implements IMoGoSweeperFutianCloudTaskListene } @Override - public void onAutopilotSNRequest() { + public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { } @@ -711,8 +712,8 @@ public class SweeperCloudTaskModel implements IMoGoSweeperFutianCloudTaskListene } @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { - if (status == 0x00) {//判断工控机重连后,获取当前正在执行的子任务,延时10秒,防止工控机连接上时SN为空 + public void onAutopilotIpcConnectStatusChanged(@NonNull AdasConstants.IpcConnectionStatus status, @Nullable String reason) { + if (status == AdasConstants.IpcConnectionStatus.CONNECTED) {//判断工控机重连后,获取当前正在执行的子任务,延时10秒,防止工控机连接上时SN为空 CallerAutoPilotControlManager.INSTANCE.setIsSubscribeBackCameraVideoVideo(0, false);//TODO 当前3.2.0版本产品未规划后摄像头展示功能 UiThreadHandler.postDelayed(() -> { getCurrentTask(); @@ -780,4 +781,9 @@ public class SweeperCloudTaskModel implements IMoGoSweeperFutianCloudTaskListene public void onAutopilotDockerInfo(@NonNull String dockerVersion) { } + + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { + + } } diff --git a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java index 4e91725c7b..10e3690435 100644 --- a/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java +++ b/OCH/sweeper/driver/src/main/java/com/mogo/och/sweeper/operate/presenter/SweeperOperatePresenter.java @@ -40,6 +40,7 @@ import com.mogo.och.sweeper.operate.fragment.SweeperOperateFragment; import com.mogo.och.sweeper.operate.model.SweeperOperateTaskModel; import com.mogo.och.sweeper.common.util.SweeperFutianCmdUtil; import com.mogo.och.sweeper.operate.util.SweeperTrajectoryManager; +import com.zhjt.mogo.adas.data.AdasConstants; import org.jetbrains.annotations.NotNull; @@ -220,7 +221,7 @@ public class SweeperOperatePresenter extends Presenter } @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + public void onAutopilotIpcConnectStatusChanged(@NonNull AdasConstants.IpcConnectionStatus status, @Nullable String reason) { DebugView.Companion.printInfoMsg( "[域控连接状态变化] status=" + status + ", reason=" + reason); @@ -244,7 +245,7 @@ public class SweeperOperatePresenter extends Presenter } @Override - public void onAutopilotSNRequest() { + public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { } @Override @@ -461,4 +462,8 @@ public class SweeperOperatePresenter extends Presenter public void onAutopilotDockerInfo(@NonNull String dockerVersion) { } + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { + + } } diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index f3f7823045..f1928219a7 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -54,6 +54,7 @@ import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener; import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager; import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; +import com.mogo.och.common.module.utils.OCHThreadPoolManager; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.och.common.module.utils.ToastUtilsOch; import com.mogo.och.common.module.voice.VoiceNotice; @@ -83,6 +84,7 @@ import com.mogo.och.taxi.network.TaxiServiceManager; import com.mogo.och.taxi.utils.OrderUtil; import com.mogo.och.taxi.utils.TaxiAnalyticsManager; import com.mogo.och.taxi.utils.TaxiTrajectoryManager; +import com.zhjt.mogo.adas.data.AdasConstants; import com.zhjt.service.chain.ChainLog; import org.jetbrains.annotations.NotNull; @@ -221,7 +223,7 @@ public class TaxiModel { IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener); //定位监听, 传false是高德坐标系 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,10, mMapLocationListener); + CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,5, mMapLocationListener); //2021.11.1 自动驾驶路线规划接口 CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); @@ -1092,18 +1094,23 @@ public class TaxiModel { public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { //位置变化时,通过围栏判断是否到达x点 if (null == gnssInfo) return; - if (checkCurrentOCHOrder()) { - if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToStart) { - judgeStartStation(gnssInfo); - } - if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd) { - judgeEndStation(gnssInfo); - } - } + OCHThreadPoolManager.getsInstance().locationExecute(new Runnable() { + @Override + public void run() { + if (checkCurrentOCHOrder()) { + if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToStart) { + judgeStartStation(gnssInfo); + } + if (getCurOrderStatus() == TaxiOrderStatusEnum.OnTheWayToEnd) { + judgeEndStation(gnssInfo); + } + } - mLongitude = gnssInfo.getLongitude(); - mLatitude = gnssInfo.getLatitude(); - mLocation = gnssInfo; + mLongitude = gnssInfo.getLongitude(); + mLatitude = gnssInfo.getLatitude(); + mLocation = gnssInfo; + } + }); } }; @@ -1203,6 +1210,11 @@ public class TaxiModel { private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() { + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { + + } + @Override public void onAutopilotDockerInfo(@NonNull String dockerVersion) { } @@ -1212,7 +1224,7 @@ public class TaxiModel { } @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + public void onAutopilotIpcConnectStatusChanged(@NonNull AdasConstants.IpcConnectionStatus status, @Nullable String reason) { } @Override @@ -1280,7 +1292,7 @@ public class TaxiModel { } @Override - public void onAutopilotSNRequest() { + public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { } @Override diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index cc08e0b33d..8573f511ce 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -255,9 +255,28 @@ public abstract class BaseTaxiTabFragment CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "自动驾驶动画暂停")); + startAutopilotAnimator.setOnAnimStopListener(new FrameAnimatorContainer.OnAnimationStoppedListener() { + @Override + public void playOnce() { + + } + @Override + public void AnimationStopped() { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "自动驾驶动画暂停"); + } + }); startManCOAnimator = new FrameAnimatorContainer(R.array.nim_flow_man_co, 20,mAnimFlowIv,false,false,false,width,height); - startManCOAnimator.setOnAnimStopListener(() -> CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "平行驾驶动画暂停")); + startManCOAnimator.setOnAnimStopListener(new FrameAnimatorContainer.OnAnimationStoppedListener() { + @Override + public void playOnce() { + + } + + @Override + public void AnimationStopped() { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "平行驾驶动画暂停"); + } + }); } @Override diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt index 5718ed6a16..421c233e39 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/TaxiMapDirectionView.kt @@ -68,7 +68,7 @@ class TaxiMapDirectionView @JvmOverloads constructor( initAMapView() // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, this) } override fun onDetachedFromWindow() { diff --git a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/speed/SpeedViewModel.kt b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/speed/SpeedViewModel.kt index 6ef0849565..f3d6fe5812 100644 --- a/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/speed/SpeedViewModel.kt +++ b/OCH/taxi/driver/src/main/java/com/mogo/och/taxi/ui/speed/SpeedViewModel.kt @@ -23,7 +23,7 @@ class SpeedViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener { fun setAutopilotStatusCallback(viewCallback: ISpeedCallback){ this.viewCallback = viewCallback //定位监听, 传false是高德坐标系 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, this) } diff --git a/OCH/taxi/driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml b/OCH/taxi/driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml index 15d6e4cec9..b62b2a8188 100755 --- a/OCH/taxi/driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml +++ b/OCH/taxi/driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml @@ -1,8 +1,6 @@ - - + - \ No newline at end of file diff --git a/OCH/taxi/passenger/build.gradle b/OCH/taxi/passenger/build.gradle index 1a3fde2f56..cff4ee3253 100644 --- a/OCH/taxi/passenger/build.gradle +++ b/OCH/taxi/passenger/build.gradle @@ -57,9 +57,10 @@ dependencies { implementation rootProject.ext.dependencies.amapnavi3dmap implementation rootProject.ext.dependencies.amapsearch - implementation project(":OCH:common:common") +// implementation project(":OCH:common:common") compileOnly project(":libraries:mogo-map") implementation project(':core:mogo-core-res') + implementation project(':OCH:taxi:pcommon') } diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java index f77aa48af5..ae1351af5f 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java @@ -9,11 +9,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.commons.module.status.IMogoStatusChangedListener; -import com.mogo.commons.module.status.MogoStatusManager; -import com.mogo.commons.module.status.StatusDescriptor; import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; -import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; @@ -21,7 +17,6 @@ import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public /** * @author congtaowang * @since 2021/1/15 @@ -29,7 +24,7 @@ public * 网约车-出租车-乘客端 */ @Route(path = TaxiPassengerConst.PATH) -class MogoOCHTaxiPassenger implements IMoGoFunctionProvider { +public class MogoOCHTaxiPassenger implements IMoGoFunctionProvider { private static final String TAG = "MogoOCHTaxiPassenger"; private TaxiPassengerBaseFragment ochTaxiPassengerFragment; @@ -41,14 +36,6 @@ class MogoOCHTaxiPassenger implements IMoGoFunctionProvider { CallerLogger.d(M_TAXI_P + TAG, "init"); } - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - private void stepIntoVrMode() { - CallerLogger.d(M_TAXI_P + TAG, "进入vr模式"); - CallerMoGoUiSettingManager.INSTANCE.stepInNightMode();//夜间模式 状态栏字体颜色变黑 - } - private void showFragment() { FragmentManager supportFragmentManager = mActivity.getSupportFragmentManager(); if (ochTaxiPassengerFragment == null) { diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerAllStarWorld.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerAllStarWorld.java deleted file mode 100644 index 4810e8d06f..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerAllStarWorld.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -/** - * Created by pangfan on 2021/8/19 - * - * 查询订单返回数据结构 - */ -public class TaxiPassengerAllStarWorld extends BaseData { - public List data; - - public static class TaxiPassengerStarWorld { - public TaxiPassengerStarWorld(String labelInfo) { - this.labelInfo = labelInfo; - } - - public String labelNo; - public String labelInfo; - public String star; - public String sort; - public Boolean isSelect = false; - } -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCarHeartbeatReqBean.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCarHeartbeatReqBean.java deleted file mode 100644 index 02d24c51b3..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCarHeartbeatReqBean.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; - -import java.util.UUID; - -/** - * Created on 2021/9/16 - * - * 上传车机心跳信息请求数据 - */ -public class TaxiPassengerCarHeartbeatReqBean { - public String sn; - public double lon; //经度 - public double lat; //纬度 - public String msgId; //心跳信息唯一标识 - public int interval; //上报间隔,单位秒,非必传,默认60秒 - - public TaxiPassengerCarHeartbeatReqBean(String sn, double lon, double lat) { - this.sn = sn; - this.lon = lon; - this.lat = lat; - this.msgId = UUID.randomUUID().toString(); - this.interval = (int) (TaxiPassengerConst.LOOP_PERIOD_60S / 1000); - } -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java deleted file mode 100644 index 3ff370d2c2..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; -import java.util.Objects; - -/** - * Created by pangfan on 2021/8/19 - * - * 查询订单返回数据结构 - */ -public class TaxiPassengerOrderQueryRemainingResp extends BaseData { - public Result data; - - public static class Result { - public long distance; - public long duration; - } -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java index 98ed42173e..e4721b1e37 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java @@ -1,6 +1,7 @@ package com.mogo.och.taxi.passenger.bean; import com.mogo.eagle.core.data.BaseData; +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean; import java.util.List; import java.util.Objects; @@ -13,13 +14,9 @@ import java.util.Objects; public class TaxiPassengerOrderQueryRespBean extends BaseData { public Result data; - public static class Result implements Comparable{ - // 订单no - public String orderNo; + public static class Result extends BaseOrderBean implements Comparable{ // 订单类型 public int orderType; //1即时单 2预约单 - // 订单状态 - public int orderStatus; // 订单运营类型 (9出租车,10小巴) public int businessType; // 起始站点id diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java deleted file mode 100644 index 48ee6c654b..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.amap.api.maps.model.LatLng; -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -/** - * Created by pangfan on 2021/8/19 - */ -public class TaxiPassengerQueryOrderRouteResp extends BaseData { - public List data; -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerScoreUpdateOrderReqBean.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerScoreUpdateOrderReqBean.java deleted file mode 100644 index e5cc00ca24..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerScoreUpdateOrderReqBean.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import java.util.List; - -/** - * Created by pangfan on 2021/8/19 - * - * 验证手机号后四位同时流转订单状态 - */ -public class TaxiPassengerScoreUpdateOrderReqBean { - - public String orderNo; - public int star; - public List evalLabeBasicList; - - public TaxiPassengerScoreUpdateOrderReqBean(String orderNo, int star,List data) { - this.orderNo = orderNo; - this.star = star; - for (TaxiPassengerAllStarWorld.TaxiPassengerStarWorld datum : data) { - datum.isSelect=null; - datum.sort = null; - datum.star = null; - } - this.evalLabeBasicList = data; - } - -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java deleted file mode 100644 index e30e544db8..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * @author: wangmingjun - * @date: 2021/12/3 - */ -public interface IOCHTaxiPassengerNaviChangedCallback { - // 当前位置距离上车点的距离(米)、预估时间(秒) 、当前路的名称 - void onCurrentRoadName(String currentRoadName); -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt index ba2fc56e72..43f917bf55 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt @@ -8,8 +8,6 @@ import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean * Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等) */ interface IOCHTaxiPassengerOrderStatusCallback { - // 当前进行单状态变更:新到进行中订单、进行中单状态变更 - fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?){} // 当前位置距离上车点的距离(米)、预估时间(秒) fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int){} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonCallback.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonCallback.java deleted file mode 100644 index 937b4913b9..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonCallback.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -public interface ITaxiPassengerCommonCallback { - void onCommonCallback(); -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonValueCallback.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonValueCallback.java deleted file mode 100644 index 157925b458..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonValueCallback.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -public interface ITaxiPassengerCommonValueCallback { - void onCommonCallback(T t); -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerMapViewCallback.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerMapViewCallback.java deleted file mode 100644 index f26039ec07..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerMapViewCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * @author: wangmingjun - * @date: 2022/3/10 - */ -public interface ITaxiPassengerMapViewCallback { - void onCameraChange(float bearing); -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerVeloctityCallback.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerVeloctityCallback.java deleted file mode 100644 index 50cf8d8a65..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerVeloctityCallback.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * @author: wangmingjun - * @date: 2022/3/13 - */ -public interface ITaxiPassengerVeloctityCallback { - //限速 - void onLimitingVelocityChange(int limitingVelocity); -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt index 46bf2e378b..68db71be80 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt @@ -11,17 +11,6 @@ class TaxiPassengerConst { // OCH arouter 路由path const val PATH = "/passenger/api" - // 上报心跳轮询ms - const val LOOP_PERIOD_60S = 60 * 1000L - - // 轮询查询进行中/待服务订单的间隔时间 2秒 - const val LOOP_PERIOD_2S = 2 * 1000L - // 轮询查询新到预约单 1秒 - const val LOOP_PERIOD_1S = 1 * 1000L - const val LOOP_DELAY = 100L - - //实时查询订单剩余时间 和 剩余里程 轮询间隔2s - const val LOOP_CALCULATEROUTE_2S = 2 * 1000L // 开始服务启动自动驾驶等待时间(埋点上传) const val LOOP_PERIOD_15S = 15 * 1000L diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/event/FinishActivity.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/event/FinishActivity.java deleted file mode 100644 index 0e9120e02a..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/event/FinishActivity.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mogo.och.taxi.passenger.event; - -public class FinishActivity { -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt index 889159a2b7..d1f9fec99a 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt @@ -19,7 +19,7 @@ import com.mogo.och.common.module.utils.PinYinUtil import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt index 5f8f766194..bb40741e9d 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt @@ -32,11 +32,11 @@ import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback 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.ui.model.order.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum.Companion.valueOf import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager import java.util.concurrent.ConcurrentHashMap @@ -54,7 +54,6 @@ object TaxiPassengerModel { private const val STARTREADYTOAUTOPILOT = "startReadyToAutopilot" private const val MINANDWAITSERVICE = "mInAndWaitService" - private const val MQUERYORDERREMAINING = "mQueryOrderRemaining" // 获取当前订单 @Volatile @@ -279,12 +278,8 @@ object TaxiPassengerModel { fun orderStatusChange(){ orderStatusChangeInner() - if (mOrderStatusCallbackMap.isNotEmpty()) { - d(M_TAXI_P + TAG, "最新的状态${curOrderStatus}") - for (callback in mOrderStatusCallbackMap.values) { - callback.onCurrentOrderStatusChanged(currentOCHOrder) - } - } + d(M_TAXI_P + TAG, "最新的状态${curOrderStatus}") + OrderModel.invokeListener(currentOCHOrder) } private fun orderStatusChangeInner() { diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt index a07636ec8d..e5953babe4 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt @@ -2,14 +2,11 @@ package com.mogo.och.taxi.passenger.network import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.storage.SharedPrefsMgr -import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean import io.reactivex.Observable import retrofit2.http.Body @@ -51,21 +48,6 @@ internal interface TaxiPassengerServiceApi { @Body data: TaxiPassengerOrderQueryReqBean ): Observable - /** - * 查询订单剩余里程和时间 - * @param appId - * @param ticket - * @param orderNo - * @return - */ - @Headers("Content-type:application/json;charset=UTF-8") - @GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining") - fun queryOrderRemaining( - @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, - @Header("ticket") ticket: String=SharedPrefsMgr.getInstance().token, - @Query("orderNo") orderNo: String - ): Observable - /** * 提交用户输入的手机后4位、并进行状态扭转 * @param data @@ -79,42 +61,6 @@ internal interface TaxiPassengerServiceApi { @Body data: TaxiPassengerCheckPhoneUpdateOrderReqBean? ): Observable - /** - * 对订单进行打分 1-5分 加上文案评论 - * @param data - * @return - */ - @Headers("Content-type:application/json;charset=UTF-8") - @POST("/autopilot-car-hailing/evaluation/info/driver/taxi/submit") - fun arrivedAndScore( - @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, - @Header("ticket") ticket: String= SharedPrefsMgr.getInstance().token, - @Body data: TaxiPassengerScoreUpdateOrderReqBean - ): Observable - - /** - * 获取星星对应的文案(所有文案) - * @return - */ - @Headers("Content-type:application/json;charset=UTF-8") - @GET("/autopilot-car-hailing/evaluation/label/driver/taxi/list") - fun getWorldAllStar( - @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, - @Header("ticket") ticket: String=SharedPrefsMgr.getInstance().token, - ): Observable - - /** - * 获取星星对应的文案(和星星一一对应) - * @return - */ - @Headers("Content-type:application/json;charset=UTF-8") - @GET("/autopilot-car-hailing/evaluation/label/driver/taxi/listByStar") - fun getWorldByStar( - @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, - @Header("ticket") ticket: String=SharedPrefsMgr.getInstance().token, - @Query("star") star: String - ): Observable - /** * 查询司机是否已确认可开启自动驾驶 * @param appId diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt index 0adbc768ee..422df54429 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt @@ -4,11 +4,8 @@ import android.content.Context import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean import com.mogo.eagle.core.network.MoGoRetrofitFactory import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -73,22 +70,6 @@ object TaxiPassengerServiceManager { .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrdersInAndWaitService")) } - /** - * 查询订单剩余里程和时间 - * @param context - * @param orderNo - * @param callback - */ - @JvmStatic - fun queryOrderRemaining( - orderNo: String, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.queryOrderRemaining(orderNo= orderNo) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRemaining")) - } - @JvmStatic fun checkPhoneAndUpdateOrderStatus( orderNo: String?, @@ -99,23 +80,7 @@ object TaxiPassengerServiceManager { .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) } - @JvmStatic - fun arrivedAndScore( - taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.arrivedAndScore(data = taxiPassengerScoreUpdateOrderReqBean) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) - } - @JvmStatic - fun getAllScoreWorld( - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.getWorldAllStar() - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "arrivedAndScore")) - } + @JvmStatic fun queryPilotStatus( orderNo: String, @@ -137,15 +102,6 @@ object TaxiPassengerServiceManager { .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "startServicePilotDone")) } - @JvmStatic - fun getWorldByStar( - start: String, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.getWorldByStar(star=start) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) - } /** * 通过orderId查询订单信息(用于本地已经有orderId时) diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt index 70635b1f9a..b73c25edaa 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt @@ -10,17 +10,21 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.model.AutopilotManager import com.mogo.och.taxi.passenger.model.TaxiPassengerModel import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel /** * @author: wangmingjun * @date: 2022/3/4 */ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : - Presenter(view), IOCHTaxiPassengerOrderStatusCallback { + Presenter(view), IOCHTaxiPassengerOrderStatusCallback, + OrderListener { init { TaxiPassengerModel.init(AbsMogoApplication.getApp()) @@ -42,16 +46,12 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : private fun initListeners() { TaxiPassengerModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", this) + OrderModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", this) } private fun releaseListeners() { TaxiPassengerModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", null) - } - - override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?) { - order?.let { - updateOrderView(order) - } + OrderModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", null) } override fun onCurrentOrderDistToEndChanged( @@ -67,7 +67,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : when (TaxiPassengerModel.curOrderStatus) { TaxiPassengerOrderStatusEnum.OnTheWayToStart -> { // 10 接驾中 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(isShow = false) overMapViewClear() @@ -100,13 +100,13 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : } TaxiPassengerOrderStatusEnum.JourneyCompleted -> { // 60 行程完成 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(false) overMapViewClear() } TaxiPassengerOrderStatusEnum.Cancel -> { // 70 取消订单 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(isShow = false) overMapViewClear() } @@ -152,4 +152,12 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : companion object { private val TAG = BaseTaxiPassengerPresenter::class.java.simpleName } + + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { + TaxiPassengerModel.currentOCHOrder?.let { + updateOrderView(it) + } + } + + } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt index 5a44675a58..e7582936a2 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt @@ -6,24 +6,28 @@ import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.os.Bundle import android.view.View +import androidx.core.view.isVisible import com.alibaba.android.arouter.launcher.ARouter import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.hmi.view.IStatusViewLayout import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P import com.mogo.eagle.core.utilcode.util.DeviceUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.listener.IMogoMapListener +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiStateManager import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter import com.mogo.och.taxi.passenger.ui.arrived.ArrivedView +import com.mogo.och.taxi.passenger.ui.bar.LeftBarView import com.mogo.och.taxi.passenger.ui.bottom.BottomBar import com.mogo.och.taxi.passenger.ui.checkstartautopilot.ChekAndStartAutopilotView +import com.mogo.och.taxi.passenger.ui.bar.RightBarView import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView import io.reactivex.disposables.Disposable import kotlinx.android.synthetic.main.taxi_p_base_fragment.* @@ -72,11 +76,36 @@ class TaxiPassengerBaseFragment() : } + private fun settingAndMusicListener() { + rbv_setting_music.setOrderIdCallback(object :RightBarView.RightBarCallback{ + override fun setSettingAndMusicShow(settingShow: Boolean, musicShow: Boolean) { + clSettingView.visibility = if(settingShow) View.VISIBLE else View.GONE + mv_music_info.visibility = if(musicShow) View.VISIBLE else View.GONE + } + + }) + lbv_go2_center.setOrderIdCallback(object :LeftBarView.LeftBarCallback{ + override fun setGo2CenterClick() { + when (bottom.getCurrentPage()) { + BottomBar.SelectView.PRECISIONMAP -> { + //切换到地图中间 + mapBizView.getUI()?.let { + it.changeMapVisualAngle(it.getVrAngleDefaultMode(), null) + } + } + BottomBar.SelectView.OVERMAPVIEW -> { + overMapView.displayCustomOverView() + } + + else -> {} + } + } + + }) + } + private fun initListener() { - ck_setting.isChecked = false - ck_setting.setOnCheckedChangeListener { _, isChecked -> - clSettingView.visibility = if(isChecked) View.VISIBLE else View.GONE - } + settingAndMusicListener() bottom.setOverMapApplyClick(object : BottomBar.ApplyClickLintener{ override fun onApplyClick(selectItem: BottomBar.SelectView) { when (selectItem) { @@ -85,7 +114,6 @@ class TaxiPassengerBaseFragment() : mapBizView.visibility = View.VISIBLE presenter?.setItineraryVisibility() speedView.visibility = View.VISIBLE - ck_setting.visibility = View.VISIBLE if (DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()) { romaPView.updateVisible(true) romaDistanceView.visibility = View.VISIBLE @@ -93,7 +121,8 @@ class TaxiPassengerBaseFragment() : romaPView.updateVisible(false) romaDistanceView.visibility = View.GONE } - rv_location_center.visibility = View.VISIBLE + rbv_setting_music.setShowOnlySetting(0) + lbv_go2_center.visibility = View.VISIBLE pcnActionView.visibility = View.VISIBLE CallerHmiManager.showTrafficLightView() infoVideoView.visibility = View.GONE @@ -104,10 +133,10 @@ class TaxiPassengerBaseFragment() : mapBizView.visibility = View.GONE presenter?.setItineraryVisibility() speedView.visibility = View.VISIBLE - ck_setting.visibility = View.VISIBLE romaPView.updateVisible(false) romaDistanceView.visibility = View.GONE - rv_location_center.visibility = View.VISIBLE + rbv_setting_music.setShowOnlySetting(0) + lbv_go2_center.visibility = View.VISIBLE pcnActionView.visibility = View.VISIBLE CallerHmiManager.showTrafficLightView() infoVideoView.visibility = View.GONE @@ -118,11 +147,10 @@ class TaxiPassengerBaseFragment() : mapBizView.visibility = View.GONE presenter?.setItineraryVisibility() speedView.visibility = View.GONE - ck_setting.visibility = View.GONE - ck_setting.isChecked = false + rbv_setting_music.setShowOnlySetting(1) + lbv_go2_center.visibility = View.GONE romaPView.updateVisible(false) romaDistanceView.visibility = View.GONE - rv_location_center.visibility = View.GONE pcnActionView.visibility = View.GONE CallerHmiManager.hideTrafficLightView() infoVideoView.visibility = View.VISIBLE @@ -135,30 +163,14 @@ class TaxiPassengerBaseFragment() : } }) - rv_location_center.onClick { - when (bottom.getCurrentPage()) { - BottomBar.SelectView.PRECISIONMAP -> { - //切换到地图中间 - mapBizView.getUI()?.let { - it.changeMapVisualAngle(it.getVrAngleDefaultMode(), null) - } - } - BottomBar.SelectView.OVERMAPVIEW -> { - overMapView.displayCustomOverView() - } - - else -> {} - } - - } arrivedView.arrivedVisilityChangeListenr = object :ArrivedView.ArrivedVisilityChangeListenr{ override fun isShow(show: Boolean) { CallerLogger.d(M_TAXI_P + TAG, "arrived ${show}") if(arrivedView.visibility==View.GONE&&chekAndStartAutopilotView.visibility==View.GONE){ showOrHide(true,"到达目的地页面隐藏") - aciv_xiaozhi_normal.setZhiEnable(true) + ZhiStateManager.setZhiEnable(true) }else{ - aciv_xiaozhi_normal.setZhiEnable(false) + ZhiStateManager.setZhiEnable(false) } } } @@ -167,9 +179,9 @@ class TaxiPassengerBaseFragment() : CallerLogger.d(M_TAXI_P + TAG, "check and startAutopilot ${show}") if(arrivedView.visibility==View.GONE&&chekAndStartAutopilotView.visibility==View.GONE){ showOrHide(true,"手机号check+startautopilot页面隐藏") - aciv_xiaozhi_normal.setZhiEnable(true) + ZhiStateManager.setZhiEnable(true) }else{ - aciv_xiaozhi_normal.setZhiEnable(false) + ZhiStateManager.setZhiEnable(false) } } } @@ -238,25 +250,29 @@ class TaxiPassengerBaseFragment() : fun showOrHideCheckAndStartAutopilotView(status:Int){ - arrivedView.visibility = View.GONE - when (status) { - 0 -> { - if(chekAndStartAutopilotView.visibility == View.GONE){ - showOrHide(false,"显示手机号check") + UiThreadHandler.post { + arrivedView.visibility = View.GONE + when (status) { + 0 -> { + if(chekAndStartAutopilotView.visibility == View.GONE){ + showOrHide(false,"显示手机号check") + } + chekAndStartAutopilotView.aniCheckAndStartAutopilot(true,0) } - chekAndStartAutopilotView.aniCheckAndStartAutopilot(true,0) - } - 1 -> { - if(chekAndStartAutopilotView.visibility == View.GONE){ - showOrHide(false,"显示启动自动驾驶") + 1 -> { + if(chekAndStartAutopilotView.visibility == View.GONE){ + showOrHide(false,"显示启动自动驾驶") + } + chekAndStartAutopilotView.aniCheckAndStartAutopilot(true,1) } - chekAndStartAutopilotView.aniCheckAndStartAutopilot(true,1) + 2 -> { + chekAndStartAutopilotView.aniCheckAndStartAutopilot(false,2) + } + 3 -> { + chekAndStartAutopilotView.visibility = View.GONE + } + else -> {} } - 2 -> { - chekAndStartAutopilotView.aniCheckAndStartAutopilot(false,2) - chekAndStartAutopilotView.resetCheckView() - } - else -> {} } } @@ -281,6 +297,7 @@ class TaxiPassengerBaseFragment() : */ fun showOrHideArrivedEndLayout(isShow: Boolean) { // chekAndStartAutopilotView.visibility = View.GONE + evaluate.visibility = View.GONE if (isShow) { exitFullVideoScreen(true) arrivedView.aniArrived(true) @@ -321,7 +338,6 @@ class TaxiPassengerBaseFragment() : allAnimator.addAll(aniSpeedSettingRow(isShow,speedView)) allAnimator.addAll(aniSpeedSettingRow(isShow,romaPView)) allAnimator.addAll(aniSpeedSettingRow(isShow,romaDistanceView)) - allAnimator.addAll(aniSpeedSettingRow(isShow,ck_setting)) allAnimator.addAll(aniOrderInfo(isShow)) animatorSet.playTogether(allAnimator) @@ -441,6 +457,10 @@ class TaxiPassengerBaseFragment() : arrivedView.preLoadImages() } + fun setEvaluateView(){ + evaluate.visibility = View.VISIBLE + } + companion object { @JvmField diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt index f335b76534..b90de80abf 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.ViewModelProvider import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiViewmanager import com.mogo.och.common.module.utils.BigFrameAnimatorContainer import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.taxi.passenger.R @@ -69,10 +70,14 @@ class ArrivedView : WindowRelativeLayout, ArrivedViewModel.ArrivedViewCallback { v_video_right_rear_view.resetView() aniSpeedSettingRow() viewModel.setEndInfo() + ZhiViewmanager.showListeningAni(ZhiViewmanager.loveAni) } else { v_video_right_rear_view.resetView() + taxiPxiaozhiLove?.stop() + taxiPxiaozhiLove?.release() taxiPxiaozhiLove = null RxUtils.disposeSubscribe(subscribe) + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni) } arrivedVisilityChangeListenr?.isShow(isVisible) } diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt index 0c18801782..4ff0c52076 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt @@ -1,19 +1,33 @@ package com.mogo.och.taxi.passenger.ui.checkstartautopilot +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.AnimatorSet import android.animation.ObjectAnimator +import android.animation.ValueAnimator import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View +import android.view.animation.LinearInterpolator import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner import com.mogo.eagle.core.utilcode.kotlin.onClick +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.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiViewmanager import com.mogo.och.common.module.utils.BigFrameAnimatorContainer +import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout import kotlinx.android.synthetic.main.taxt_p_check_startautopilot.view.aciv_check_autopilot +import kotlinx.android.synthetic.main.taxt_p_check_startautopilot.view.aciv_start_autopilt_success_ani +import kotlinx.android.synthetic.main.taxt_p_check_startautopilot.view.aciv_start_autopilt_success_bg import kotlinx.android.synthetic.main.taxt_p_check_startautopilot.view.checkPhoneNumber import kotlinx.android.synthetic.main.taxt_p_check_startautopilot.view.startAutopilotClose import kotlinx.android.synthetic.main.taxt_p_check_startautopilot.view.startAutopilotView @@ -48,6 +62,8 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, private var aniCheck2StartAutopilotView: BigFrameAnimatorContainer? = null var checkAndStartVisilityChangeListenr: CheckAndStartVisilityChangeListenr?=null + private var waitCount = 0 + private var maxWaitCount = 3 private fun initView(context: Context) { @@ -62,6 +78,7 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, override fun onVisibilityAggregated(isVisible: Boolean) { super.onVisibilityAggregated(isVisible) if (isVisible) { + waitCount = 0 aniCheck2StartAutopilotView = BigFrameAnimatorContainer(R.array.check2startautopilt, 39, aciv_check_autopilot, true) aniCheck2StartAutopilotView?.mOnAnimationStoppedListener = object : BigFrameAnimatorContainer.OnAnimationStoppedListener{ @@ -69,8 +86,15 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, startAutopilotView.showStartAutopilot() } } + ZhiViewmanager.showListeningAni(ZhiViewmanager.beltAni) + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") } else { + aniCheck2StartAutopilotView?.stop() + aniCheck2StartAutopilotView?.release() aniCheck2StartAutopilotView = null + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni) } checkAndStartVisilityChangeListenr?.isShow(isVisible) } @@ -101,16 +125,17 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, } override fun dismissWindow() { - visibility = View.GONE - } - - fun resetCheckView() { - checkPhoneNumber.visibility = View.VISIBLE - startAutopilotView.visibility = View.GONE - startAutopilotClose.visibility = View.GONE + } + /** + * @param show true 展示 false 隐藏 + * @param status 0 展示手机号验证 + * 1 展示启动自动驾驶 + * 2 隐藏页面 + */ fun aniCheckAndStartAutopilot(show:Boolean,status:Int){ + Log.d(SceneConstant.M_TAXI_P + TAG,"参数${show}--${show}---订单${TaxiPassengerModel.currentOCHOrder?.orderNo}-----订单状态:${TaxiPassengerModel.currentOCHOrder?.orderStatus}") val alphaStart: Float val alphaEnd: Float if(show){ @@ -120,10 +145,13 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, }else{ alphaStart = 1f alphaEnd = 0.0f - visibility = View.GONE + //visibility = View.GONE } when (status) { 0 -> { + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") checkPhoneNumber.visibility = View.VISIBLE startAutopilotView.visibility = View.GONE startAutopilotClose.visibility = View.GONE @@ -132,15 +160,24 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, }.start() } 1 -> { + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") checkPhoneNumber.visibility = View.GONE startAutopilotView.visibility = View.VISIBLE startAutopilotClose.visibility = View.VISIBLE aniCheck2StartAutopilotView?.start() } 2 -> { - checkPhoneNumber.visibility = View.VISIBLE - startAutopilotView.visibility = View.GONE - startAutopilotClose.visibility = View.GONE + CallerLogger.d(TAG,"aniCheckAndStartAutopilot${show} -${status} ---${waitCount}---${Thread.currentThread().name}") + if (startAutopilotView.canGonethisView) {// 启动动画已经播放最少1遍 + // 启动公司logo动画 + startAnimal() + }else { + UiThreadHandler.postDelayed({ + startAnimal() + }, 2000) + } return } else -> {} @@ -148,6 +185,57 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, } + private fun startAnimal(){ + val startAutopilotSuccessBgAni = ObjectAnimator.ofFloat(aciv_start_autopilt_success_bg, "alpha", 0f, 1f) + val startAutopilotSuccessLogoAni = ObjectAnimator.ofFloat(aciv_start_autopilt_success_ani, "alpha", 0f, 1f) + val animatorSetCompat = AnimatorSet() + animatorSetCompat.playTogether(startAutopilotSuccessBgAni,startAutopilotSuccessLogoAni) + animatorSetCompat.duration=700 + animatorSetCompat.interpolator = LinearInterpolator() + animatorSetCompat.addListener(object :AnimatorListenerAdapter(){ + override fun onAnimationEnd(animation: Animator) { + super.onAnimationEnd(animation) + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") + } + override fun onAnimationStart(animation: Animator) { + UiThreadHandler.postDelayed({ + val aniStartAutopilotSuccessAni = + BigFrameAnimatorContainer(R.array.taxi_p_start_autopilot_fail, 20, aciv_start_autopilt_success_ani, true) + aniStartAutopilotSuccessAni.setOnAnimStopListener(object : + BigFrameAnimatorContainer.OnAnimationStoppedListener{ + override fun AnimationStopped() { + ThreadUtils.runOnUiThread { + checkPhoneNumber.visibility = View.VISIBLE + startAutopilotView.visibility = View.GONE + startAutopilotClose.visibility = View.GONE + + this@ChekAndStartAutopilotView.animate().alpha(0f).setListener(object : + AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + super.onAnimationEnd(animation) + this@ChekAndStartAutopilotView.visibility = View.GONE + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") + } + + override fun onAnimationCancel(animation: Animator) { + super.onAnimationCancel(animation) + this@ChekAndStartAutopilotView.visibility = View.GONE + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") + } + }).duration = 1000L + } + } + }) + aniStartAutopilotSuccessAni.start()},350) + } + }) + animatorSetCompat.start() + } + interface CheckAndStartVisilityChangeListenr{ fun isShow(show: Boolean) } diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt index ad8625ffbd..bd995ffa64 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt @@ -1,29 +1,37 @@ package com.mogo.och.taxi.passenger.ui.checkstartautopilot import androidx.lifecycle.ViewModel -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel -class ChekAndStartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback { +class ChekAndStartAutopilotViewModel : ViewModel(), OrderListener { private val TAG = ChekAndStartAutopilotViewModel::class.java.simpleName private var viewCallback: CheckCallback? = null init { - TaxiPassengerModel.setOrderStatusCallback(TAG,this) + + OrderModel.setOrderStatusCallback(TAG,this) } fun setStartAutopilotCallback(viewCallback: CheckCallback) { this.viewCallback = viewCallback } + override fun onCleared() { + super.onCleared() + this.viewCallback = null + OrderModel.setOrderStatusCallback(TAG,null) + } - override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?) { - super.onCurrentOrderStatusChanged(order) + interface CheckCallback { + fun dismissWindow() + } + + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { when (order?.orderStatus) { TaxiPassengerOrderStatusEnum.ArriveAtStart.code -> { // 显示手机号验证 @@ -37,14 +45,4 @@ class ChekAndStartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatus } } - override fun onCleared() { - super.onCleared() - this.viewCallback = null - TaxiPassengerModel.setOrderStatusCallback(TAG, null) - } - - interface CheckCallback { - fun dismissWindow() - } - } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt index aab57ec5ec..05c7016b54 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt @@ -1,9 +1,6 @@ package com.mogo.och.taxi.passenger.ui.checkstartautopilot.check import androidx.lifecycle.ViewModel -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.model.TaxiPassengerModel class ChekViewModel : ViewModel() { diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt index 66d534ded9..1b7fc65659 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt @@ -50,6 +50,7 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu private var taxiPStartAutopilot: FrameAnimatorContainer? = null private var taxiPStartAutopilotCar: FrameAnimatorContainer? = null private lateinit var viewModel: StartAutopilotViewModel + var canGonethisView = false init { @@ -72,6 +73,11 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu ) taxiPStartAutopilot?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener { + override fun playOnce() { + super.playOnce() + canGonethisView = false + } + override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "可以启动自驾动画暂停") } @@ -167,6 +173,7 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu viewModel.setStartAutopilotCallback(this) taxi_p_start_autopilot.onClick { //开启动画和自动驾驶 + canGonethisView = false startAutopiloting() viewModel.startAutopilot() } diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt index e770e88e5f..6e6846488e 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt @@ -19,9 +19,11 @@ import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_arrive +import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_evaluate import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_order_info import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_phone_check import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_start_autopilot +import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_start_autopilot_success import kotlinx.android.synthetic.main.taxi_p_statusview.view.iv_biz_icon import me.jessyan.autosize.utils.AutoSizeUtils import org.greenrobot.eventbus.EventBus @@ -69,11 +71,16 @@ class DebugView @JvmOverloads constructor( tv_show_start_autopilot.onClick { fragment?.showOrHideCheckAndStartAutopilotView(1) } + tv_show_start_autopilot_success.onClick { + fragment?.showOrHideCheckAndStartAutopilotView(2) + } tv_show_order_info.onClick { fragment?.showOrHideServingOrderFragment(true) fragment?.preLoadArrivedImages() } - + tv_show_evaluate.onClick { + fragment?.setEvaluateView() + } } @Subscribe(threadMode = ThreadMode.MAIN) fun changeOverview(debugEvent: DebugEvent) { diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt index 3773c8cb43..69331f56d9 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt @@ -94,7 +94,7 @@ class ItineraryView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback } var prePercentage = 0f - val needChangeStyleNumber = 0.99 + val needChangeStyleNumber = 0.98 val needChangeStyleNumberMin = 0.03f override fun setDistanceInfo(surplusdistance:String,distanceUnit:String, diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt index fa6f095fb1..b6185f3725 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt @@ -6,14 +6,15 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.NumberFormatUtil import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.model.TaxiPassengerModel -import kotlin.math.abs +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel import kotlin.math.ceil -class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { +class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback, OrderListener { private val TAG = OrderInfoViewModel::class.java.simpleName @@ -27,6 +28,7 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { surplusTimeUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_surplustime) // 设置起点和终点marker和实时车辆位置 TaxiPassengerModel.setOrderStatusCallback(TAG,this) + OrderModel.setOrderStatusCallback(TAG,this) } fun setDistanceCallback(viewCallback:ItineraryViewCallback){ @@ -37,6 +39,7 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { super.onCleared() this.viewCallback = null TaxiPassengerModel.setOrderStatusCallback(TAG,null) + OrderModel.setOrderStatusCallback(TAG,null) } interface ItineraryViewCallback{ @@ -47,26 +50,6 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { fun setEndStation(endStation:String) } - override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?) { - order?.endSiteAddr?.let { - UiThreadHandler.post { - viewCallback?.setEndStation(it) - } - } - when (TaxiPassengerModel.curOrderStatus) { - TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { - - } - else ->{ - UiThreadHandler.post { - viewCallback?.setDistanceInfo( - "--", disUnit, "--", surplusTimeUnit, "--", 0, 100 - ) - } - } - } - } - override fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int) { var dis: String? = "0" var disUnit = "KM" @@ -88,4 +71,24 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { } } + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { + TaxiPassengerModel.currentOCHOrder?.endSiteAddr?.let { + UiThreadHandler.post { + viewCallback?.setEndStation(it) + } + } + when (TaxiPassengerModel.curOrderStatus) { + TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { + + } + else ->{ + UiThreadHandler.post { + viewCallback?.setDistanceInfo( + "--", disUnit, "--", surplusTimeUnit, "--", 0, 100 + ) + } + } + } + } + } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt index d7203b5faa..76d85e8510 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt @@ -32,7 +32,7 @@ class SpeedView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { override fun onVisibilityAggregated(isVisible: Boolean) { super.onVisibilityAggregated(isVisible) if(isVisible){ - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, this) }else{ CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) } diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java deleted file mode 100644 index f6e57ae403..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/FixMemoryLeak.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - -import android.content.Context; -import android.view.inputmethod.InputMethodManager; - -import java.lang.reflect.Field; - -/** - * memory leak fix: - *

- * InputMethodManager#mLastSrvView reference Last Page Activity. - */ -public class FixMemoryLeak { - - private static Field field; - private static boolean hasField = true; - - public static void fixLeak(Context context) { - if (!hasField) { - return; - } - InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - if (imm == null) { - return; - } - - try { - if (field == null) { - field = imm.getClass().getDeclaredField("mCurRootView"); - } - if (field == null) { - hasField = false; - } - if (field != null) { - field.setAccessible(true); - field.set(imm, null); - } - } catch (Throwable t) { - hasField = false; - } - } -} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java deleted file mode 100644 index 782b963176..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; - -import java.util.Arrays; -import java.util.List; - -/** - * Created on 2021/9/11 - */ -public class OrderUtil { - - // 判断两个list中的订单是否相同:依据orderId - public static boolean haveSameOrders(List list1, - List list2) { - TaxiPassengerOrderQueryRespBean.Result[] arr1 = list1.toArray(new TaxiPassengerOrderQueryRespBean.Result[]{}); - TaxiPassengerOrderQueryRespBean.Result[] arr2 = list2.toArray(new TaxiPassengerOrderQueryRespBean.Result[]{}); - Arrays.sort(arr1); - Arrays.sort(arr1); - return Arrays.equals(arr1,arr2); - } -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java deleted file mode 100644 index 7c6c8c22ae..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/PermissionUtil.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - -import android.app.ActivityManager; -import android.app.AppOpsManager; -import android.content.Context; -import android.content.pm.PackageManager; -import android.location.LocationManager; -import android.os.Build; - -import androidx.core.content.ContextCompat; - -import com.mogo.eagle.core.network.utils.Util; -import com.mogo.eagle.core.utilcode.util.Utils; - -/** - * @author: wangmingjun - * @date: 2021/12/7 - */ -public class PermissionUtil { - - public static boolean checkPermission(Context context,String... permissons) { - - for (String permisson : permissons) { - if ((ContextCompat.checkSelfPermission(context, - permisson) != PackageManager.PERMISSION_GRANTED)) { - return false; - } - } - return true; - } - - public static boolean isLocServiceEnable(Context context) { - LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); - boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); - if (gps || network) { - return true; - } - return false; - } - - private static String processName = ""; - public static String getCurProcessName() { - if(!processName.isEmpty()){ - return processName; - } - // 获取此进程的标识符 - int pid = android.os.Process.myPid(); - // 获取活动管理器 - ActivityManager activityManager = (ActivityManager) - Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE); - // 从应用程序进程列表找到当前进程,是:返回当前进程名 - for (ActivityManager.RunningAppProcessInfo appProcess : - activityManager.getRunningAppProcesses()) { - if (appProcess.pid == pid) { - - return appProcess.processName; - } - } - return null; - } -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java deleted file mode 100644 index 9c3eea52f9..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - - -import android.content.Context; - -import java.io.IOException; -import java.io.InputStream; - -/** - * @author donghongyu - * @date 12/18/20 5:37 PM - */ -public class TaxiPassengerMapAssetStyleUtil { - - public static byte[] getAssetsStyle(Context context,String fileName) { - byte[] buffer1 = null; - InputStream is1 = null; - try { - is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style.data - int lenght1 = is1.available(); - buffer1 = new byte[lenght1]; - is1.read(buffer1); - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - if (is1 != null) { - is1.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - return buffer1; - } - - - public static byte[] getAssetsExtraStyle(Context context, String fileName) { - byte[] buffer1 = null; - InputStream is1 = null; - try { - is1 = context.getResources().getAssets().open(fileName); //eg. over_view_style_extra.data - int lenght1 = is1.available(); - buffer1 = new byte[lenght1]; - is1.read(buffer1); - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - if (is1 != null) { - is1.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - return buffer1; - } - - -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCacheManager.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCacheManager.java deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java deleted file mode 100644 index 6fd67ae232..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/OnComputeInternalInsetsListener.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mogo.och.taxi.passenger.utils.windowdispatch; - -import android.graphics.Region; -import android.inputmethodservice.InputMethodService; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; - -public class OnComputeInternalInsetsListener implements InvocationHandler { - - private Region touchRegion = null; - public Object getListener() { - Object target = null; - try { - Class class1 = Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener"); - target = Proxy.newProxyInstance(OnComputeInternalInsetsListener.class.getClassLoader(), - new Class[]{class1}, this); - } catch (Exception e) { - e.printStackTrace(); - } - return target; - } - - public Region getTouchRegion() { - return touchRegion; - } - - public void setTouchRegion(Region touchRegion) { - this.touchRegion = touchRegion; - } - - @Override - public Object invoke(Object proxy, Method method, Object[] args) { - try { - Field regionField = args[0].getClass() - .getDeclaredField("touchableRegion"); - regionField.setAccessible(true); - Field insetField = args[0].getClass() - .getDeclaredField("mTouchableInsets"); - insetField.setAccessible(true); - if (touchRegion != null) { - Region region = (Region) regionField.get(args[0]); - region.set(touchRegion); - insetField.set(args[0], InputMethodService.Insets.TOUCHABLE_INSETS_REGION); - } else { - insetField.set(args[0], InputMethodService.Insets.TOUCHABLE_INSETS_FRAME); - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java deleted file mode 100644 index 1ade41a62d..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/windowdispatch/ReflectionUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mogo.och.taxi.passenger.utils.windowdispatch; - -import android.view.ViewTreeObserver; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; - -public class ReflectionUtils { - - private ReflectionUtils() { - - } - - public static void removeOnComputeInternalInsetsListener(ViewTreeObserver viewTree) { - if (viewTree == null) { - return; - } - try { - Class clazz = Class.forName("android.view.ViewTreeObserver"); - Field field = viewTree.getClass().getDeclaredField("mOnComputeInternalInsetsListeners"); - field.setAccessible(true); - Object listenerList = field.get(viewTree); - Method method = listenerList.getClass().getDeclaredMethod("getArray"); - method.setAccessible(true); - ArrayList list = (ArrayList) method.invoke(listenerList); - Class classes[] = {Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener")}; - if (list != null && list.size() > 0) { - clazz.getDeclaredMethod("removeOnComputeInternalInsetsListener", classes).invoke(viewTree, - list.get(0)); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void addOnComputeInternalInsetsListener(ViewTreeObserver viewTree, Object object) { - if (viewTree == null) { - return; - } - try { - Class classes[] = {Class.forName("android.view.ViewTreeObserver$OnComputeInternalInsetsListener")}; - Class clazz = Class.forName("android.view.ViewTreeObserver"); - clazz.getDeclaredMethod("addOnComputeInternalInsetsListener", classes).invoke(viewTree, - object); - } catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 6e7c3cd1fb..4a5ffdee04 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -20,6 +20,7 @@ import androidx.core.app.ActivityCompat import com.mogo.eagle.core.utilcode.util.TimeTransformUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils @@ -135,10 +136,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoView.CURRENT_STATE_PLAYING ->{ start.setImageResource(R.drawable.notice_video_pause) aivStartPlay.visibility = View.GONE + AudioFocusManager.setVideoFocusChange(true) } else -> { start.setImageResource(R.drawable.notice_video_after_pause) aivStartPlay.visibility = View.VISIBLE + AudioFocusManager.setVideoFocusChange(false) } } } @@ -279,6 +282,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onCompletion() { start.setImageResource(R.drawable.notice_video_after_pause) + AudioFocusManager.setVideoFocusChange(false) } override fun onSurfaceUpdated(surface: Surface) { @@ -299,6 +303,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onError(what: Int, extra: Int) { super.onError(what, extra) + AudioFocusManager.setVideoFocusChange(false) mThumbImageViewLayout?.visibility = View.VISIBLE ToastUtils.showLong("哎呀,出错了,看看其他视频吧") currentTime = -1 diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ResizeAnimation.java b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ResizeAnimation.java deleted file mode 100644 index be2442a014..0000000000 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ResizeAnimation.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mogo.och.taxi.passenger.widget; - -import android.view.View; -import android.view.animation.Animation; -import android.view.animation.Transformation; - -public class ResizeAnimation extends Animation { - - final int targetHeight; - View view; - int startHeight; - public ResizeAnimation(View view, int targetHeight, int startHeight) { - this.view = view; - this.targetHeight = targetHeight; - this.startHeight = startHeight; - } - - @Override - protected void applyTransformation(float interpolatedTime, Transformation t) { - - int newHeight = (int) (startHeight + (targetHeight-startHeight) * interpolatedTime); - view.getLayoutParams().height = newHeight; - - view.requestLayout(); - - } - - @Override - - public void initialize(int width, int height, int parentWidth, int parentHeight) { - super.initialize(width, height, parentWidth, parentHeight); - } - - @Override - public boolean willChangeBounds() { - return true; - } - -} diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_location_cecnter_click.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_location_cecnter_click.png new file mode 100644 index 0000000000..1467d91e06 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_location_cecnter_click.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_end.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_end.png index a81336d4c2..385c078c44 100644 Binary files a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_end.png and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_end.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_start.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_start.png index 3cee184981..3fca47cb5f 100644 Binary files a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_start.png and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_map_view_dir_start.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_north.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_north.png new file mode 100644 index 0000000000..8d5c431674 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_north.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arrived.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arrived.png index 7ebe72d080..32fc7d5af8 100644 Binary files a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arrived.png and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arrived.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arriving.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arriving.png index ee96bb0edc..790562578c 100644 Binary files a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arriving.png and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_overmap_arriving.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_setting_normal.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_setting_normal.png deleted file mode 100644 index b31bfa8d64..0000000000 Binary files a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_setting_normal.png and /dev/null differ diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml index 3267295a8f..1df211547a 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml @@ -4,6 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + @@ -59,26 +60,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - - - @@ -103,15 +84,43 @@ app:layout_constraintTop_toTopOf="parent" app:roma_change_dis_color="true" /> - + + + + + android:layout_marginEnd="@dimen/dp_130" + android:visibility="gone" + android:clickable="true" + android:layout_width="@dimen/dp_746" + android:layout_height="@dimen/dp_916"/> + + + @@ -164,8 +173,16 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> + - - + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_itinerary.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_itinerary.xml index 0c48cb0976..24a4708a34 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxi_p_itinerary.xml +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_itinerary.xml @@ -36,7 +36,7 @@ android:layout_marginEnd="@dimen/dp_12" android:layout_marginStart="@dimen/dp_93" android:textColor="@color/taxi_p_004DC4" - android:textSize="@dimen/dp_35" + android:textSize="@dimen/dp_38" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/gl_horizontal_top" app:layout_constraintBottom_toBottomOf="@+id/gl_horizontal_center" @@ -44,19 +44,44 @@ + + + + @@ -111,30 +136,81 @@ app:layout_constraintStart_toStartOf="@+id/actv_surplus_time" app:layout_constraintEnd_toEndOf="@+id/actv_surplus_time" /> - + app:layout_constraintTop_toTopOf="@+id/gl_horizontal_center"> + + + + + + + android:layout_height="wrap_content"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/layout/taxt_p_start_autopilot_view.xml b/OCH/taxi/passenger/src/main/res/layout/taxt_p_start_autopilot_view.xml index 323ce869cc..c64e3b348c 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxt_p_start_autopilot_view.xml +++ b/OCH/taxi/passenger/src/main/res/layout/taxt_p_start_autopilot_view.xml @@ -77,7 +77,7 @@ android:layout_marginBottom="@dimen/dp_59" tools:text="用户:1234882382 目的地:环球贸易中心" android:textColor="@color/taxi_p_333333" - android:textSize="@dimen/dp_44" + android:textSize="@dimen/dp_38" android:layout_width="wrap_content" android:layout_height="wrap_content"/> diff --git a/OCH/taxi/passenger/src/main/res/values/arrays.xml b/OCH/taxi/passenger/src/main/res/values/arrays.xml index cc0c5d0bd7..78554f9ebb 100644 --- a/OCH/taxi/passenger/src/main/res/values/arrays.xml +++ b/OCH/taxi/passenger/src/main/res/values/arrays.xml @@ -1,376 +1,5 @@ - - @drawable/image_00000 - @drawable/image_00001 - @drawable/image_00002 - @drawable/image_00003 - @drawable/image_00004 - @drawable/image_00005 - @drawable/image_00006 - @drawable/image_00007 - @drawable/image_00008 - @drawable/image_00009 - @drawable/image_00010 - @drawable/image_00011 - @drawable/image_00012 - @drawable/image_00013 - @drawable/image_00014 - @drawable/image_00015 - @drawable/image_00016 - @drawable/image_00017 - @drawable/image_00018 - @drawable/image_00019 - @drawable/image_00020 - @drawable/image_00021 - @drawable/image_00022 - @drawable/image_00023 - @drawable/image_00024 - @drawable/image_00025 - @drawable/image_00026 - @drawable/image_00027 - @drawable/image_00028 - @drawable/image_00029 - @drawable/image_00030 - @drawable/image_00031 - @drawable/image_00032 - @drawable/image_00033 - @drawable/image_00034 - - - - @drawable/light_00000 - @drawable/light_00001 - @drawable/light_00002 - @drawable/light_00003 - @drawable/light_00004 - @drawable/light_00005 - @drawable/light_00006 - @drawable/light_00007 - @drawable/light_00008 - @drawable/light_00009 - @drawable/light_00010 - @drawable/light_00011 - @drawable/light_00012 - @drawable/light_00013 - @drawable/light_00014 - @drawable/light_00015 - @drawable/light_00016 - @drawable/light_00017 - - - - @drawable/xiaozhi_love_00 - @drawable/xiaozhi_love_01 - @drawable/xiaozhi_love_02 - @drawable/xiaozhi_love_03 - @drawable/xiaozhi_love_04 - @drawable/xiaozhi_love_05 - @drawable/xiaozhi_love_06 - @drawable/xiaozhi_love_07 - @drawable/xiaozhi_love_08 - @drawable/xiaozhi_love_09 - - @drawable/xiaozhi_love_10 - @drawable/xiaozhi_love_11 - @drawable/xiaozhi_love_12 - @drawable/xiaozhi_love_13 - @drawable/xiaozhi_love_14 - @drawable/xiaozhi_love_15 - @drawable/xiaozhi_love_16 - @drawable/xiaozhi_love_17 - @drawable/xiaozhi_love_18 - @drawable/xiaozhi_love_19 - - @drawable/xiaozhi_love_20 - @drawable/xiaozhi_love_21 - @drawable/xiaozhi_love_22 - @drawable/xiaozhi_love_23 - @drawable/xiaozhi_love_24 - @drawable/xiaozhi_love_25 - @drawable/xiaozhi_love_26 - @drawable/xiaozhi_love_27 - @drawable/xiaozhi_love_28 - @drawable/xiaozhi_love_29 - - - @drawable/xiaozhi_love_30 - @drawable/xiaozhi_love_31 - @drawable/xiaozhi_love_32 - @drawable/xiaozhi_love_33 - @drawable/xiaozhi_love_34 - @drawable/xiaozhi_love_35 - @drawable/xiaozhi_love_36 - @drawable/xiaozhi_love_37 - @drawable/xiaozhi_love_38 - @drawable/xiaozhi_love_39 - - @drawable/xiaozhi_love_40 - @drawable/xiaozhi_love_41 - @drawable/xiaozhi_love_42 - @drawable/xiaozhi_love_43 - @drawable/xiaozhi_love_44 - @drawable/xiaozhi_love_45 - @drawable/xiaozhi_love_46 - @drawable/xiaozhi_love_47 - @drawable/xiaozhi_love_48 - @drawable/xiaozhi_love_49 - - - @drawable/xiaozhi_love_50 - @drawable/xiaozhi_love_51 - @drawable/xiaozhi_love_52 - @drawable/xiaozhi_love_53 - @drawable/xiaozhi_love_54 - @drawable/xiaozhi_love_55 - @drawable/xiaozhi_love_56 - @drawable/xiaozhi_love_57 - @drawable/xiaozhi_love_58 - @drawable/xiaozhi_love_59 - - @drawable/xiaozhi_love_60 - @drawable/xiaozhi_love_61 - @drawable/xiaozhi_love_62 - @drawable/xiaozhi_love_63 - @drawable/xiaozhi_love_64 - @drawable/xiaozhi_love_65 - @drawable/xiaozhi_love_66 - @drawable/xiaozhi_love_67 - @drawable/xiaozhi_love_68 - @drawable/xiaozhi_love_69 - - @drawable/xiaozhi_love_70 - @drawable/xiaozhi_love_71 - @drawable/xiaozhi_love_72 - @drawable/xiaozhi_love_73 - @drawable/xiaozhi_love_74 - @drawable/xiaozhi_love_75 - @drawable/xiaozhi_love_76 - @drawable/xiaozhi_love_77 - @drawable/xiaozhi_love_78 - @drawable/xiaozhi_love_79 - - @drawable/xiaozhi_love_80 - @drawable/xiaozhi_love_81 - @drawable/xiaozhi_love_82 - @drawable/xiaozhi_love_83 - @drawable/xiaozhi_love_84 - @drawable/xiaozhi_love_85 - @drawable/xiaozhi_love_86 - @drawable/xiaozhi_love_87 - @drawable/xiaozhi_love_88 - @drawable/xiaozhi_love_89 - - @drawable/xiaozhi_love_90 - @drawable/xiaozhi_love_91 - @drawable/xiaozhi_love_92 - @drawable/xiaozhi_love_93 - @drawable/xiaozhi_love_94 - @drawable/xiaozhi_love_95 - @drawable/xiaozhi_love_96 - - - - - @drawable/xiaozhi_belt_000 - @drawable/xiaozhi_belt_001 - @drawable/xiaozhi_belt_002 - @drawable/xiaozhi_belt_003 - @drawable/xiaozhi_belt_004 - @drawable/xiaozhi_belt_005 - @drawable/xiaozhi_belt_006 - @drawable/xiaozhi_belt_007 - @drawable/xiaozhi_belt_008 - @drawable/xiaozhi_belt_009 - - @drawable/xiaozhi_belt_010 - @drawable/xiaozhi_belt_011 - @drawable/xiaozhi_belt_012 - @drawable/xiaozhi_belt_013 - @drawable/xiaozhi_belt_014 - @drawable/xiaozhi_belt_015 - @drawable/xiaozhi_belt_016 - @drawable/xiaozhi_belt_017 - @drawable/xiaozhi_belt_018 - @drawable/xiaozhi_belt_019 - - @drawable/xiaozhi_belt_020 - @drawable/xiaozhi_belt_021 - @drawable/xiaozhi_belt_022 - @drawable/xiaozhi_belt_023 - @drawable/xiaozhi_belt_024 - @drawable/xiaozhi_belt_025 - @drawable/xiaozhi_belt_026 - @drawable/xiaozhi_belt_027 - @drawable/xiaozhi_belt_028 - @drawable/xiaozhi_belt_029 - - - @drawable/xiaozhi_belt_030 - @drawable/xiaozhi_belt_031 - @drawable/xiaozhi_belt_032 - @drawable/xiaozhi_belt_033 - @drawable/xiaozhi_belt_034 - @drawable/xiaozhi_belt_035 - @drawable/xiaozhi_belt_036 - @drawable/xiaozhi_belt_037 - @drawable/xiaozhi_belt_038 - @drawable/xiaozhi_belt_039 - - @drawable/xiaozhi_belt_040 - @drawable/xiaozhi_belt_041 - @drawable/xiaozhi_belt_042 - @drawable/xiaozhi_belt_043 - @drawable/xiaozhi_belt_044 - @drawable/xiaozhi_belt_045 - @drawable/xiaozhi_belt_046 - @drawable/xiaozhi_belt_047 - @drawable/xiaozhi_belt_048 - - - - - - - @drawable/arrive_dest_001 - @drawable/arrive_dest_002 - @drawable/arrive_dest_003 - @drawable/arrive_dest_004 - @drawable/arrive_dest_005 - @drawable/arrive_dest_006 - @drawable/arrive_dest_007 - @drawable/arrive_dest_008 - @drawable/arrive_dest_009 - - @drawable/arrive_dest_010 - @drawable/arrive_dest_011 - @drawable/arrive_dest_012 - @drawable/arrive_dest_013 - @drawable/arrive_dest_014 - @drawable/arrive_dest_015 - @drawable/arrive_dest_016 - @drawable/arrive_dest_017 - @drawable/arrive_dest_018 - @drawable/arrive_dest_019 - - @drawable/arrive_dest_020 - @drawable/arrive_dest_021 - @drawable/arrive_dest_022 - @drawable/arrive_dest_023 - @drawable/arrive_dest_024 - @drawable/arrive_dest_025 - @drawable/arrive_dest_026 - @drawable/arrive_dest_027 - @drawable/arrive_dest_028 - @drawable/arrive_dest_029 - - - @drawable/arrive_dest_030 - @drawable/arrive_dest_031 - @drawable/arrive_dest_032 - @drawable/arrive_dest_033 - @drawable/arrive_dest_034 - @drawable/arrive_dest_035 - @drawable/arrive_dest_036 - @drawable/arrive_dest_037 - @drawable/arrive_dest_038 - @drawable/arrive_dest_039 - - @drawable/arrive_dest_040 - @drawable/arrive_dest_041 - @drawable/arrive_dest_042 - @drawable/arrive_dest_043 - @drawable/arrive_dest_044 - @drawable/arrive_dest_045 - @drawable/arrive_dest_046 - @drawable/arrive_dest_047 - @drawable/arrive_dest_048 - @drawable/arrive_dest_049 - - - @drawable/arrive_dest_050 - @drawable/arrive_dest_051 - @drawable/arrive_dest_052 - @drawable/arrive_dest_053 - @drawable/arrive_dest_054 - @drawable/arrive_dest_055 - @drawable/arrive_dest_056 - @drawable/arrive_dest_057 - @drawable/arrive_dest_058 - @drawable/arrive_dest_059 - - @drawable/arrive_dest_060 - - - - @drawable/check2startautopilt_000 - @drawable/check2startautopilt_001 - @drawable/check2startautopilt_002 - @drawable/check2startautopilt_003 - @drawable/check2startautopilt_004 - @drawable/check2startautopilt_005 - @drawable/check2startautopilt_006 - @drawable/check2startautopilt_007 - @drawable/check2startautopilt_008 - @drawable/check2startautopilt_009 - - @drawable/check2startautopilt_010 - @drawable/check2startautopilt_011 - @drawable/check2startautopilt_012 - @drawable/check2startautopilt_013 - @drawable/check2startautopilt_014 - @drawable/check2startautopilt_015 - @drawable/check2startautopilt_016 - @drawable/check2startautopilt_017 - @drawable/check2startautopilt_018 - @drawable/check2startautopilt_019 - - @drawable/check2startautopilt_020 - @drawable/check2startautopilt_021 - @drawable/check2startautopilt_022 - @drawable/check2startautopilt_023 - @drawable/check2startautopilt_024 - @drawable/check2startautopilt_025 - @drawable/check2startautopilt_026 - @drawable/check2startautopilt_027 - @drawable/check2startautopilt_028 - @drawable/check2startautopilt_029 - - - @drawable/check2startautopilt_030 - @drawable/check2startautopilt_031 - @drawable/check2startautopilt_032 - @drawable/check2startautopilt_033 - @drawable/check2startautopilt_034 - @drawable/check2startautopilt_035 - @drawable/check2startautopilt_036 - @drawable/check2startautopilt_037 - @drawable/check2startautopilt_038 - @drawable/check2startautopilt_039 - - @drawable/check2startautopilt_040 - @drawable/check2startautopilt_041 - @drawable/check2startautopilt_042 - @drawable/check2startautopilt_043 - @drawable/check2startautopilt_044 - @drawable/check2startautopilt_045 - @drawable/check2startautopilt_046 - @drawable/check2startautopilt_047 - @drawable/check2startautopilt_048 - - @drawable/check2startautopilt_050 - @drawable/check2startautopilt_051 - @drawable/check2startautopilt_052 - @drawable/check2startautopilt_053 - @drawable/check2startautopilt_054 - @drawable/check2startautopilt_055 - @drawable/check2startautopilt_056 - @drawable/check2startautopilt_057 - @drawable/check2startautopilt_058 - - @drawable/check2startautopilt_060 - - \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/values/colors.xml b/OCH/taxi/passenger/src/main/res/values/colors.xml index 315208e607..f5b78bbda6 100644 --- a/OCH/taxi/passenger/src/main/res/values/colors.xml +++ b/OCH/taxi/passenger/src/main/res/values/colors.xml @@ -28,21 +28,25 @@ #C8F3F4 #282F62 #242C65 - #374968 - #303C52 - #2CBFFC - #1060ff - #96a5c2 + #6C8BB9 + + + + + #76D7FF #255BAA #80F8FF #A0B3DA #005D6A8C #5D6A8C + #995D6A8C #B37E90BF + + #464646 #191E3C #58C9FF diff --git a/OCH/taxi/passenger/src/main/res/values/strings.xml b/OCH/taxi/passenger/src/main/res/values/strings.xml index 7154fd3468..1612d7f826 100644 --- a/OCH/taxi/passenger/src/main/res/values/strings.xml +++ b/OCH/taxi/passenger/src/main/res/values/strings.xml @@ -17,8 +17,7 @@ 剩余(分) - 亮度 - 音量 + \ No newline at end of file diff --git a/OCH/taxi/pcommon/.gitignore b/OCH/taxi/pcommon/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/OCH/taxi/pcommon/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/OCH/taxi/pcommon/build.gradle b/OCH/taxi/pcommon/build.gradle new file mode 100644 index 0000000000..c71131d10d --- /dev/null +++ b/OCH/taxi/pcommon/build.gradle @@ -0,0 +1,59 @@ +plugins { + id 'com.android.library' + id 'org.jetbrains.kotlin.android' + id 'kotlin-android-extensions' +} + +android { + compileSdkVersion rootProject.ext.android.compileSdkVersion + defaultConfig { + minSdkVersion rootProject.ext.android.minSdkVersion + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + lintOptions { + abortOnError false + } + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main { + res.srcDirs = [ + 'src/main/res', + 'src/main/res/ani', + ] + } + } +} + +dependencies { + + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation rootProject.ext.dependencies.kotlinstdlib + implementation rootProject.ext.dependencies.androidxccorektx + implementation rootProject.ext.dependencies.androidxappcompat + implementation rootProject.ext.dependencies.material + implementation rootProject.ext.dependencies.rxandroid + implementation rootProject.ext.dependencies.arouter + + api project(":OCH:common:common") + if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { + api rootProject.ext.dependencies.mogoutils + }else { + api project(":core:mogo-core-utils") + } +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCache.java b/OCH/taxi/pcommon/consumer-rules.pro similarity index 100% rename from OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/utils/blur/DiskLruCache.java rename to OCH/taxi/pcommon/consumer-rules.pro diff --git a/OCH/taxi/pcommon/proguard-rules.pro b/OCH/taxi/pcommon/proguard-rules.pro new file mode 100644 index 0000000000..481bb43481 --- /dev/null +++ b/OCH/taxi/pcommon/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/AndroidManifest.xml b/OCH/taxi/pcommon/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..c11e143669 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt new file mode 100644 index 0000000000..561e51ef2e --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/LeftBarView.kt @@ -0,0 +1,64 @@ +package com.mogo.och.taxi.passenger.ui.bar + +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.och.taxi.passenger.common.R +import kotlinx.android.synthetic.main.taxi_p_leftbar.view.iv_center_location +import kotlinx.android.synthetic.main.taxi_p_leftbar.view.iv_center_location_bg + + +class LeftBarView : ConstraintLayout { + + private val TAG = "LeftBarView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private var rightBarCallback:LeftBarCallback?=null + + init { + } + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_leftbar, this, true) + + iv_center_location_bg.onClick { + this.rightBarCallback?.setGo2CenterClick() + } + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + fun setOrderIdCallback(rightBarCallback: LeftBarCallback) { + this.rightBarCallback = rightBarCallback + } + + + interface LeftBarCallback { + fun setGo2CenterClick() + } + + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/RightBarView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/RightBarView.kt new file mode 100644 index 0000000000..a86cc6261f --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/bar/RightBarView.kt @@ -0,0 +1,215 @@ +package com.mogo.och.taxi.passenger.ui.bar + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.animation.LinearInterpolator +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.transition.Transition +import com.elegant.utils.UiThreadHandler +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.taxi.passenger.common.R +import com.mogo.och.taxi.passenger.ui.music.playing.MusicPlayingViewModel +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.aciv_playing_bg +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.ck_music +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.ck_setting +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.ck_setting_only +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.con_only_one_group +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.con_third_group +import me.jessyan.autosize.utils.AutoSizeUtils + + +class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener { + + private val TAG = "RightBarView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private var rightBarCallback:RightBarCallback?=null + private var animator:ObjectAnimator?=null + + private var samllSize = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(),55f) + private var normalSize = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(),76f) + + init { + AuditionManager.addDataChangeListener(TAG,this) + } + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_rightbar, this, true) + + ck_setting.isChecked = false + ck_setting_only.isChecked = false + ck_music.isChecked = false + + ck_setting.setOnCheckedChangeListener { _, isChecked -> + CallerLogger.d(TAG,"ck_setting=${isChecked}") + rightBarCallback?.setSettingAndMusicShow(ck_setting.isChecked,ck_music.isChecked) + ck_setting_only.isChecked = isChecked + if(isChecked){ + ck_music.isChecked = false + } + } + ck_setting_only.setOnCheckedChangeListener { _, isChecked -> + CallerLogger.d(TAG,"ck_setting_only=${isChecked}") + ck_setting.isChecked = isChecked + rightBarCallback?.setSettingAndMusicShow(ck_setting.isChecked,ck_music.isChecked) + if(isChecked){ + ck_music.isChecked = false + } + } + ck_music.setOnCheckedChangeListener { _, isChecked -> + CallerLogger.d(TAG,"ck_music=${isChecked}") + rightBarCallback?.setSettingAndMusicShow(ck_setting.isChecked,ck_music.isChecked) + if(isChecked){ + ck_setting.isChecked = false + ck_setting_only.isChecked = false + ck_music.setBackgroundResource(R.drawable.taxi_p_music_selector) + endAnimal() + } else { + if(AuditionManager.isPlaying()){ + AuditionManager.musicDataPlaying?.let { + Glide.with(context) + .load(it.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_head)) + .into(object : SimpleTarget() { + override fun onResourceReady( + resource: Drawable, + transition: Transition? + ) { + ck_music.background = resource + } + }) + startAnimal() + } + }else{ + ck_music.setBackgroundResource(R.drawable.taxi_p_music_selector) + endAnimal() + } + } + } + } + + private fun startAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + val layoutParams = ck_music.layoutParams + layoutParams.width = samllSize + layoutParams.height = samllSize + ck_music.layoutParams = layoutParams + animator = ObjectAnimator.ofFloat(ck_music, "rotation", 0f, 360f) + ck_music.pivotX = (samllSize / 2).toFloat() + ck_music.pivotY = (samllSize / 2).toFloat() + animator?.duration = 3000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + aciv_playing_bg.visibility = View.VISIBLE + } + + private fun endAnimal(){ + if(animator!=null){ + animator?.cancel() + ck_music.rotation = 0f + animator = null + } + aciv_playing_bg.visibility = View.GONE + val layoutParams = ck_music.layoutParams + layoutParams.width = normalSize + layoutParams.height = normalSize + ck_music.layoutParams = layoutParams + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerLogger.d(TAG, "onAttachedToWindow") + // RightBarView启动的时候必须把MusicPlayingViewModel初始化了,否则和AuditionManager的回掉及逻辑会有问题 + try { + val musicPlayingViewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicPlayingViewModel::class.java) + CallerLogger.d(TAG, "ViewModelProvider(it).get(MusicPlayingViewModel::class.java)") + } + } catch (e: Exception) { + e.printStackTrace() + CallerLogger.e(TAG, e) + } + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + fun setOrderIdCallback(rightBarCallback: RightBarCallback) { + this.rightBarCallback = rightBarCallback + } + + fun setShowOnlySetting(i: Int) { + if(i==0){ + con_third_group.visibility = View.VISIBLE + con_only_one_group.visibility = View.GONE + }else if (i==1){ + con_third_group.visibility = View.GONE + con_only_one_group.visibility = View.VISIBLE + ck_music.isChecked = false + } + } + + + interface RightBarCallback { + fun setSettingAndMusicShow(settingShow:Boolean,musicShow:Boolean) + } + + override fun updateState(oldData: MusicData?, musicData: MusicData) { + UiThreadHandler.post { + if (musicData.state == PlayState.Playing) { + if(!ck_music.isChecked){ + Glide.with(context) + .load(musicData.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_head)) + .into(object : SimpleTarget() { + override fun onResourceReady( + resource: Drawable, + transition: Transition? + ) { + ck_music.background = resource + } + }) + startAnimal() + } + }else{ + ck_music.setBackgroundResource(R.drawable.taxi_p_music_selector) + endAnimal() + } + } + } + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/evaluate/EvaluateView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/evaluate/EvaluateView.kt new file mode 100644 index 0000000000..ab54fe0314 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/evaluate/EvaluateView.kt @@ -0,0 +1,137 @@ +package com.mogo.och.taxi.passenger.ui.evaluate + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiViewmanager +import com.mogo.och.common.module.utils.FrameAnimatorContainer +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.och.taxi.passenger.common.R +import kotlinx.android.synthetic.main.taxi_p_evaluate.view.iv_close +import kotlinx.android.synthetic.main.taxi_p_evaluate.view.iv_evaluate_great +import kotlinx.android.synthetic.main.taxi_p_evaluate.view.iv_evaluate_low + + +class EvaluateView : ConstraintLayout, EvaluateViewModel.EvaluateCallback { + + private val TAG = "EvaluateView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private var isFirat = true + + private var viewModel: EvaluateViewModel?=null + + private var ivEvaluateGreatAni: FrameAnimatorContainer?=null + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_evaluate, this, true) + iv_evaluate_great.onClick { + if(isFirat){ + if(ivEvaluateGreatAni==null) { + ivEvaluateGreatAni = + FrameAnimatorContainer(R.array.taxi_p_arrive_dest_great, 31, iv_evaluate_great, isOnce = true) + ivEvaluateGreatAni?.start() + + }else{ + ivEvaluateGreatAni?.reStart() + } + ivEvaluateGreatAni?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { + override fun AnimationStopped() { + + } + }) + VoiceNotice.showNotice("感谢您的认可,我们会再接再厉", AIAssist.LEVEL2) + // 小智爱心动作 + ZhiViewmanager.showListeningAni(ZhiViewmanager.loveAni) + RxUtils.createSubscribe(3_000) { + visibility = GONE + // 小智回归默认动作 + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni,false) + } + + isFirat = false + } + } + + iv_evaluate_low.onClick { + if(isFirat){ + iv_evaluate_low.pivotX = (iv_evaluate_low.width / 2).toFloat() + iv_evaluate_low.pivotY = iv_evaluate_low.height.toFloat() + iv_evaluate_low.animate().scaleY(1.2f).scaleX(1.2f).setListener(object : + AnimatorListenerAdapter() { + override fun onAnimationStart(animation: Animator) { + VoiceNotice.showNotice("感谢您的反馈,我们会继续努力!", AIAssist.LEVEL2) + // 小智爱心动作 + RxUtils.createSubscribe(3_000) { + visibility = GONE + //恢复默认大小 + iv_evaluate_low.scaleX = 1.0f + iv_evaluate_low.scaleY = 1.0f + // 小智回归默认动作 + } + } + }).duration = 1000 + isFirat = false + } + } + iv_close.onClick { + visibility = GONE + } + + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + isFirat = true + VoiceNotice.showNotice("行程即将结束咯~小智很想知道您的体验如何呢", AIAssist.LEVEL2) + }else{ + iv_evaluate_great.setImageResource(R.drawable.arrive_dest_great_000) + iv_evaluate_low.scaleY = 1f + isFirat = true + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(EvaluateViewModel::class.java) + } + viewModel?.setViewCallback(this) + } + + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun showEvaluate(show: Boolean) { + if(show){ + visibility = VISIBLE + }else{ + visibility = GONE + } + } + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/evaluate/EvaluateViewModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/evaluate/EvaluateViewModel.kt new file mode 100644 index 0000000000..c418dca9ec --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/evaluate/EvaluateViewModel.kt @@ -0,0 +1,51 @@ +package com.mogo.och.taxi.passenger.ui.evaluate + +import androidx.lifecycle.ViewModel +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.StringUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel + +class EvaluateViewModel : ViewModel(), IDistanceListener { + + private val TAG = EvaluateViewModel::class.java.simpleName + + private val orderShowEvaluate = "SHOWEVALUATE" + + private var viewCallback: EvaluateCallback? = null + + init { + TrajectoryAndDistanceManager.addDistanceListener(TAG, this) + } + + override fun distanceCallback(distance: Float) { + if(distance<=500) { + OrderModel.orderBean?.orderNo?.let { + val string = SharedPrefsMgr.getInstance().getString(orderShowEvaluate) + if (StringUtils.isEmpty(string) || !string.equals(it)) { + UiThreadHandler.post { + this.viewCallback?.showEvaluate(true) + } + SharedPrefsMgr.getInstance().putString(orderShowEvaluate, it) + } + } + } + + } + + fun setViewCallback(viewCallback: EvaluateCallback) { + this.viewCallback = viewCallback + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + interface EvaluateCallback { + fun showEvaluate(show: Boolean) + + } +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/music/MusicModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/music/MusicModel.kt new file mode 100644 index 0000000000..8ebfca820b --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/music/MusicModel.kt @@ -0,0 +1,91 @@ +package com.mogo.och.taxi.passenger.ui.model.music + +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.utilcode.util.TAG +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum +import io.reactivex.disposables.Disposable + +object MusicModel : OrderListener, IMoGoAutopilotStatusListener { + init { + OrderModel.setOrderStatusCallback(TAG,this) + //自动驾驶状态监听 + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + } + + private var stopMusicDisposable: Disposable? = null + private var orderInfo:BaseOrderBean? = null + + private const val startMusicWithOrderKey = "STARTMUSICWITHORDER" + + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { + this.orderInfo = order + order?.orderStatus?.let { + when (TaxiPassengerOrderStatusEnum.valueOf(it)) { + TaxiPassengerOrderStatusEnum.None -> { + cancelStopMusicDisposable() + } + TaxiPassengerOrderStatusEnum.OnTheWayToStart -> { + cancelStopMusicDisposable() + } + TaxiPassengerOrderStatusEnum.ArriveAtStart -> { + cancelStopMusicDisposable() + } + TaxiPassengerOrderStatusEnum.UserArriveAtStart -> {} + TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> {} + TaxiPassengerOrderStatusEnum.ArriveAtEnd -> {} + TaxiPassengerOrderStatusEnum.JourneyCompleted -> { + cancelStopMusicDisposable() + stopMusicDisposable = RxUtils.createSubscribe(60_000) { + AuditionManager.stop() + } + } + TaxiPassengerOrderStatusEnum.Cancel -> { + cancelStopMusicDisposable() + stopMusicDisposable = RxUtils.createSubscribe(60_000) { + AuditionManager.stop() + } + } + } + } + } + override fun onAutopilotStatusResponse(state: Int) { + if(state==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + val string = SharedPrefsMgr.getInstance().getString(startMusicWithOrderKey) + if (string == null) { + orderInfo?.let { + cancelStopMusicDisposable() + SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo) + AuditionManager.playFirst() + } + } else { + orderInfo?.let { + if (it.orderNo != string) { + cancelStopMusicDisposable() + SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo) + AuditionManager.playFirst() + } + } + } + } + } + + private fun cancelStopMusicDisposable() { + if (stopMusicDisposable != null) { + AuditionManager.stop() + } + RxUtils.disposeSubscribe(stopMusicDisposable) + stopMusicDisposable = null + } + + fun load() { + + } + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/BaseOrderBean.java b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/BaseOrderBean.java new file mode 100644 index 0000000000..9274120846 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/BaseOrderBean.java @@ -0,0 +1,6 @@ +package com.mogo.och.taxi.passenger.ui.model.order; + +public class BaseOrderBean { + public String orderNo;// 订单号 + public int orderStatus;//订单状态 +} diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/OrderListener.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/OrderListener.kt new file mode 100644 index 0000000000..6ecf8a741b --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/OrderListener.kt @@ -0,0 +1,6 @@ +package com.mogo.och.taxi.passenger.ui.model.order + +interface OrderListener { + // 当前进行单状态变更:新到进行中订单、进行中单状态变更 + fun onCurrentOrderStatusChanged(order: BaseOrderBean?) +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/OrderModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/OrderModel.kt new file mode 100644 index 0000000000..58ddeded67 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/OrderModel.kt @@ -0,0 +1,30 @@ +package com.mogo.och.taxi.passenger.ui.model.order + +import com.mogo.och.taxi.passenger.ui.model.music.MusicModel +import java.util.concurrent.ConcurrentHashMap + +object OrderModel { + private val mOrderStatusCallbackMap: MutableMap = ConcurrentHashMap() + + var orderBean:BaseOrderBean?=null + + init { + MusicModel.load() + } + + fun setOrderStatusCallback(tag: String?, callback: OrderListener?) { + if (tag == null || "" == tag) return + if (callback == null) { + mOrderStatusCallbackMap.remove(tag) + return + } + mOrderStatusCallbackMap[tag] = callback + } + + fun invokeListener(orderBean: T?){ + this.orderBean = orderBean + for (callback in mOrderStatusCallbackMap.values) { + callback.onCurrentOrderStatusChanged(orderBean) + } + } +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/TaxiPassengerOrderStatusEnum.kt similarity index 95% rename from OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt rename to OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/TaxiPassengerOrderStatusEnum.kt index 19dfedc935..1445172de8 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/model/order/TaxiPassengerOrderStatusEnum.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.passenger.constant +package com.mogo.och.taxi.passenger.ui.model.order /** * Created on 2021/12/7 diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicView.kt new file mode 100644 index 0000000000..2aca4dd7ce --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicView.kt @@ -0,0 +1,103 @@ +package com.mogo.och.taxi.passenger.ui.music + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.taxi.passenger.common.R +import com.mogo.och.taxi.passenger.ui.music.list.MusicListView +import kotlinx.android.synthetic.main.taxi_p_music.view.iv_toggle_list_playing +import kotlinx.android.synthetic.main.taxi_p_music.view.mlv_list +import kotlinx.android.synthetic.main.taxi_p_music.view.mpv_playing + +class MusicView : ConstraintLayout, MusicViewModel.IMusicViewCallback, MusicListView.CheckListener { + + private val TAG = "MusicView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) + + constructor( + context: Context, + attributeSet: AttributeSet, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_music, this, true) + setBackgroundResource(R.drawable.taxt_p_music_bg) + + setListener() + } + + private fun setListener() { + iv_toggle_list_playing.setOnClickListener { + if (mpv_playing.visibility == VISIBLE && mlv_list.visibility == GONE) { + showMusicList() + } else if (mpv_playing.visibility == GONE && mlv_list.visibility == VISIBLE) { + if (!AuditionManager.isPlaying()) { + CallerLogger.i(TAG, "当前无播放音乐,不能切到MusicPlayingView") + return@setOnClickListener + } + showMusicPlaying() + mpv_playing.setData(null) + }else{ + showMusicPlaying() + mpv_playing.setData(null) + } + } + mlv_list.setCheckItemListener(this) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun showMusicList(){ + mpv_playing.visibility = GONE + mlv_list.visibility = View.VISIBLE + iv_toggle_list_playing.setImageResource(R.drawable.taxt_p_go2_playing) + } + private fun showMusicPlaying(){ + mpv_playing.visibility = VISIBLE + mlv_list.visibility = GONE + iv_toggle_list_playing.setImageResource(R.drawable.taxt_p_go2_list) + } + + override fun checkItem(musicData: MusicData) { + mpv_playing.setDatafromCheck(musicData) + // 详情页显示歌曲 + showMusicPlaying() + } + + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicViewModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicViewModel.kt new file mode 100644 index 0000000000..c1a1823423 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicViewModel.kt @@ -0,0 +1,29 @@ +package com.mogo.och.taxi.passenger.ui.music + +import androidx.lifecycle.ViewModel + +class MusicViewModel: ViewModel() { + + private val TAG = MusicViewModel::class.java.simpleName + + private var viewCallback: IMusicViewCallback?=null + + init { + + } + + fun setDistanceCallback(viewCallback: IMusicViewCallback){ + this.viewCallback = viewCallback + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + interface IMusicViewCallback{ + + } + + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListItemAdapter.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListItemAdapter.kt new file mode 100644 index 0000000000..bd4b861762 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListItemAdapter.kt @@ -0,0 +1,114 @@ +package com.mogo.och.taxi.passenger.ui.music.list + +import android.content.Context +import android.graphics.drawable.GradientDrawable +import android.os.Build +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.taxi.passenger.common.R + +/** + * Created by adityagohad on 06/06/17. + */ +class MusicListItemAdapter( + private val context: Context, + private val dataList: MutableList, + private val clickListener: ClickListener +) : RecyclerView.Adapter() { + + val gradientDrawable = GradientDrawable().also { + it.shape = GradientDrawable.RECTANGLE + val firstColor = ContextCompat.getColor(context, android.R.color.transparent) + val setondColor = ContextCompat.getColor(context, R.color.taxi_cp_4DFFFFFF) + val thirdColor = ContextCompat.getColor(context, R.color.taxi_cp_4DFFFFFF) + val fourceColor = ContextCompat.getColor(context, R.color.taxi_cp_4DFFFFFF) + val fifthColor = ContextCompat.getColor(context, android.R.color.transparent) + + it.orientation = GradientDrawable.Orientation.LEFT_RIGHT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + it.setColors(intArrayOf(firstColor, setondColor, thirdColor, fourceColor,fifthColor), + floatArrayOf(0.0f,0.3f,0.6f,0.9f,1f) + ) + }else{ + it.colors = intArrayOf(firstColor, setondColor, thirdColor, fourceColor) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TextVH { + val view: View + val inflater = LayoutInflater.from(context) + view = inflater.inflate(R.layout.taxi_p_music_list_item, parent, false) + return TextVH(view) + } + + override fun onBindViewHolder(holder: TextVH, position: Int) { + val musicData = dataList[holder.bindingAdapterPosition] + + holder.musicName.text = musicData.songName + if(musicData.tag.size>0){ + holder.tvTag.text = musicData.tag.first() + } + holder.itemView.setOnClickListener { + clickListener.clickItem(musicData) + } + + if (musicData.state==PlayState.Playing||musicData.state==PlayState.Pause) { + holder.musicPlayState.visibility = View.VISIBLE + holder.itemView.background = gradientDrawable + }else{ + holder.itemView.background = null + holder.musicPlayState.visibility = View.GONE + } + } + + override fun getItemCount(): Int { + return dataList.size + } + + fun setNewData(data: MutableList) { + dataList.clear() + dataList.addAll(data) + notifyDataSetChanged() + } + + fun addOneData(musicData: MusicData){ + dataList.add(musicData) + notifyItemInserted(dataList.size) + } + + fun upDateMusicData(oldData: MusicData?,musicData: MusicData) { + dataList.forEachIndexed { index, musicDataIn -> + if (musicDataIn.id==musicData.id) { + musicDataIn.state = musicData.state + notifyItemChanged(index,0) + } + if(oldData?.id==musicDataIn.id){ + notifyItemChanged(index,0) + } + } + } + + inner class TextVH(itemView: View) : RecyclerView.ViewHolder(itemView) { + var musicName: TextView + var musicPlayState: ImageView + var tvTag: TextView + + init { + musicName = itemView.findViewById(R.id.tv_song_name) + tvTag = itemView.findViewById(R.id.tv_tag) + musicPlayState = itemView.findViewById(R.id.iv_music_playing) + } + } + + interface ClickListener { + fun clickItem(musicData: MusicData) + } + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListView.kt new file mode 100644 index 0000000000..006557f9a8 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListView.kt @@ -0,0 +1,86 @@ +package com.mogo.och.taxi.passenger.ui.music.list + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.taxi.passenger.common.R +import kotlinx.android.synthetic.main.taxi_p_music_list.view.rv_music_list + +class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillback, + MusicListItemAdapter.ClickListener { + + private val TAG = "MusicListView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private val dataList = mutableListOf() + private lateinit var lineAdapter:MusicListItemAdapter + private var checkListener:CheckListener?=null + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_music_list, this, true) + rv_music_list.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + lineAdapter = MusicListItemAdapter(context,dataList,this) + rv_music_list.adapter = lineAdapter + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicListViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun addAllData(data: MutableList) { + lineAdapter.setNewData(data) + } + + override fun addOneData(it: MusicData) { + lineAdapter.addOneData(it) + } + + override fun updateMusicData(oldData: MusicData?,musicData: MusicData) { + lineAdapter.upDateMusicData(oldData,musicData) + CallerLogger.d(TAG,"${Thread.currentThread().name}----更新数据${oldData}-----${musicData}") + } + + override fun clickItem(musicData: MusicData) { + // 通知主页面去显示详情 + this.checkListener?.checkItem(musicData) + } + + fun setCheckItemListener(checkListener:CheckListener) { + this.checkListener = checkListener + } + + interface CheckListener { + fun checkItem(musicData: MusicData) + } + + + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListViewModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListViewModel.kt new file mode 100644 index 0000000000..fa889854ef --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListViewModel.kt @@ -0,0 +1,57 @@ +package com.mogo.och.taxi.passenger.ui.music.list + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData + +class MusicListViewModel : ViewModel(), + AuditionManager.MusicDataChangeListener { + + private val TAG = MusicListViewModel::class.java.simpleName + + private var viewCallback: IMusicListViewCaLillback? = null + + init { + + } + + fun setDistanceCallback(viewCallback: IMusicListViewCaLillback) { + this.viewCallback = viewCallback + viewCallback.addAllData(AuditionManager.musicList) + CallerLogger.d(TAG,"初始化音乐${AuditionManager.musicList.size}") + AuditionManager.addDataChangeListener(TAG,this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + interface IMusicListViewCaLillback { + fun addAllData(data:MutableList) + fun addOneData(it: MusicData) + fun updateMusicData(oldData: MusicData?,musicData: MusicData) + } + + override fun addOneData(it: MusicData) { + CallerLogger.d(TAG,"添加音乐:${it.songName}--${it.path}") + UiThreadHandler.post({ + this.viewCallback?.addOneData(it) + }, UiThreadHandler.MODE.QUEUE) + } + + override fun updateState(oldData: MusicData?,musicData: MusicData) { + UiThreadHandler.post({ + viewCallback?.updateMusicData(oldData, musicData) + }, UiThreadHandler.MODE.QUEUE) + } + + override fun onMusicCompletion(musicData: MusicData) { + super.onMusicCompletion(musicData) + UiThreadHandler.post({ + viewCallback?.updateMusicData(musicData, musicData) + }, UiThreadHandler.MODE.QUEUE) + } +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt new file mode 100644 index 0000000000..f1cea31736 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt @@ -0,0 +1,204 @@ +package com.mogo.och.taxi.passenger.ui.music.playing + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.animation.LinearInterpolator +import android.widget.SeekBar +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.TimeTransformUtils +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.taxi.passenger.common.R +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_music_cover +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_music_cover_bg +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_show_next +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_show_pre +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_toggle +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.sb_musuc_progess +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_music_name +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_playing_during +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_playing_time +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_tag +import me.jessyan.autosize.utils.AutoSizeUtils + + +class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingViewCallback { + + private val TAG = "MusicPlayingView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private var viewModel:MusicPlayingViewModel?=null + + private var animator:ObjectAnimator?=null + + private var isSeekBarTouch = false + + private val centerWidth = AutoSizeUtils.dp2px(context,146f) + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_music_playing, this, true) + + + iv_toggle.setOnClickListener { + viewModel?.toggle() + } + iv_show_pre.setOnClickListener { + viewModel?.showPreMusic() + } + iv_show_next.setOnClickListener { + viewModel?.showNextMusic() + } + sb_musuc_progess.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{ + var seekToProgress = 0 + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + if(isSeekBarTouch) { + CallerLogger.d(TAG, "progress:${progress}----fromUser:${fromUser}") + seekToProgress = progress + }else{ + + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + isSeekBarTouch = true + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + isSeekBarTouch = false + viewModel?.seekTo(seekToProgress) + seekToProgress = 0 + } + + }) + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicPlayingViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + } + + fun setData(musicData: MusicData?) { + viewModel?.setMusicData(musicData) + } + + fun setDatafromCheck(musicData: MusicData){ + viewModel?.setMusciDataFromCheck(musicData) + } + + override fun setViewData(musicData: MusicData){ + tv_music_name.text = musicData.songName + tv_tag.text = musicData.tag.first() + tv_playing_time.text = DateTimeUtil.second2Time(0) + tv_playing_during.text = TimeTransformUtils.stringForTime(musicData.duration.toInt()) + if(musicData.state==PlayState.Playing){ + iv_toggle.setImageResource(R.drawable.taxi_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.taxi_p_music_play) + endAnimal() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + sb_musuc_progess.setProgress(0,true) + }else{ + sb_musuc_progess.progress=0.toInt() + } + + Glide.with(context) + .load(musicData.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_head)) + .into(iv_music_cover) + Glide.with(context) + .load(musicData.coverBottomImageUrl) + .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_bottom)) + .into(iv_music_cover_bg) + } + + private fun startAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + animator = ObjectAnimator.ofFloat(iv_music_cover, "rotation", 0f, 360f) + iv_music_cover.pivotX = (centerWidth).toFloat() + iv_music_cover.pivotY = (centerWidth).toFloat() + animator?.duration = 3000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + } + private fun endAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + } + + override fun setPlayOrpause(it: MusicData) { + if(it.state==PlayState.Playing){ + iv_toggle.setImageResource(R.drawable.taxi_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.taxi_p_music_play) + endAnimal() + } + } + + override fun setProgress(currentPlay: Long, duration: Long) { + if(isSeekBarTouch){ + + }else{ + sb_musuc_progess.max = duration.toInt() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + sb_musuc_progess.setProgress(currentPlay.toInt(),true) + }else{ + sb_musuc_progess.progress=currentPlay.toInt() + } + } + + tv_playing_time.text = TimeTransformUtils.stringForTime(currentPlay.toInt()) + tv_playing_during.text = TimeTransformUtils.stringForTime(duration.toInt()) + } + + fun listenerPlaying(){ + + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingViewModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingViewModel.kt new file mode 100644 index 0000000000..edc3b4650b --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingViewModel.kt @@ -0,0 +1,152 @@ +package com.mogo.och.taxi.passenger.ui.music.playing + +import androidx.lifecycle.ViewModel +import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData + +class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListener { + + private val TAG = MusicPlayingViewModel::class.java.simpleName + + private var viewCallback: IMusicPlayingViewCallback? = null + + private var checkMusicData:MusicData?=null + + init { + AuditionManager.addDataChangeListener(TAG,this) + CallerLogger.d(TAG, "init") + } + + fun setDistanceCallback(viewCallback: IMusicPlayingViewCallback) { + this.viewCallback = viewCallback + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + AuditionManager.removeDataChangeListener(TAG) + } + + fun setMusicData(musicData: MusicData?) { + if (ThreadUtils.isMainThread()) { + showData(musicData) + }else { + UiThreadHandler.post { + showData(musicData) + } + } + } + + fun setMusciDataFromCheck(musicData: MusicData){ + val playing = AuditionManager.isPlaying() + showData(musicData) + if(playing){ + play() + } + } + + private fun showData(musicData: MusicData?){ + if(musicData==null){ + if(AuditionManager.isPlaying()){ + if (AuditionManager.musicDataPlaying==null) { + this.checkMusicData = AuditionManager.musicList.first() + }else { + this.checkMusicData = AuditionManager.musicDataPlaying!! + } + }else { + //暂停播放的时候,如果在选择页面什么也不选,应该也需要默认是当前暂停播放的音乐 + return + } + }else { + this.checkMusicData = musicData + } + this.checkMusicData?.let { + this.viewCallback?.setViewData(it) + } + } + + fun toggle() { + checkMusicData?.let { + AuditionManager.toggle(it) + } + } + + fun play(){ + checkMusicData?.let { + AuditionManager.play(it) + } + } + + fun showPreMusic() { + checkMusicData?.let { + val playing = AuditionManager.isPlaying() + val nextMusicData = AuditionManager.getPreMusicData(it) + setMusicData(nextMusicData) + if(playing){ + play() + } + } + } + + fun showNextMusic() { + checkMusicData?.let { + val playing = AuditionManager.isPlaying() + val nextMusicData = AuditionManager.getNextMusicData(it) + setMusicData(nextMusicData) + if(playing){ + play() + } + } + } + + interface IMusicPlayingViewCallback { + fun setViewData(musicData: MusicData) + fun setPlayOrpause(it: MusicData) + fun setProgress(currentPlay: Long, duration: Long) + } + + override fun updateState(oldData:MusicData?,musicData: MusicData) { + checkMusicData?.let { + if(it.id==musicData.id){ + it.state = musicData.state + UiThreadHandler.post { + viewCallback?.setPlayOrpause(it) + } + } + } + } + override fun updatePlayCurrent(currentPlay: Long, duration: Long, musicData: MusicData){ + checkMusicData?.let { + if(it.id==musicData.id){ + UiThreadHandler.post { + viewCallback?.setProgress(currentPlay, duration) + } + } + } + } + + override fun onMusicCompletion(musicData: MusicData) { + super.onMusicCompletion(musicData) + CallerLogger.d(TAG, "onMusicCompletion:${GsonUtils.toJson(musicData)}") + checkMusicData?.let { + if(it.id==musicData.id){ + it.state = musicData.state + UiThreadHandler.post { + viewCallback?.setPlayOrpause(it) + } + } + } + val nextMusicData = AuditionManager.getNextMusicData(musicData) + CallerLogger.d(TAG, "onMusicCompletion-nextMusic:${GsonUtils.toJson(nextMusicData)}") + setMusicData(nextMusicData) + play() + } + + fun seekTo(progress: Int) { + AuditionManager.seekTo(progress) + } +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/systemsetting/TaxiPSettingView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/setting/TaxiPSettingView.kt similarity index 97% rename from OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/systemsetting/TaxiPSettingView.kt rename to OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/setting/TaxiPSettingView.kt index 7baaf6247b..4c6118be3f 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/systemsetting/TaxiPSettingView.kt +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/setting/TaxiPSettingView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.passenger.ui.systemsetting +package com.mogo.och.taxi.passenger.ui.setting import android.annotation.SuppressLint import android.content.Context @@ -25,7 +25,7 @@ import com.mogo.eagle.core.function.call.setting.CallerRequestActivityHandleMana import com.mogo.eagle.core.utilcode.util.BrightnessUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.och.common.module.wigets.MineGradientDrawable -import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.common.R import kotlinx.android.synthetic.main.taxi_p_setting_view.view.* import me.jessyan.autosize.utils.AutoSizeUtils @@ -127,9 +127,9 @@ class TaxiPSettingView @JvmOverloads constructor( private fun getDrawable(): Drawable { val dp2px = AutoSizeUtils.dp2px(context, 26f)//进度条高度 - val color2CBFFC = ContextCompat.getColor(context, R.color.taxi_p_2CBFFC) - val color1060FF = ContextCompat.getColor(context, R.color.taxi_p_1060ff) - val color96A5C2 = ContextCompat.getColor(context, R.color.taxi_p_96a5c2) + val color2CBFFC = ContextCompat.getColor(context, R.color.taxi_cp_2CBFFC) + val color1060FF = ContextCompat.getColor(context, R.color.taxi_cp_1060ff) + val color96A5C2 = ContextCompat.getColor(context, R.color.taxi_cp_96a5c2) val temp03 = MineGradientDrawable(color2CBFFC, color1060FF, dp2px) val clipDrawable3 = ClipDrawable(temp03, Gravity.START, ClipDrawable.HORIZONTAL) val temp01 = MineGradientDrawable(color96A5C2, color96A5C2, dp2px) diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/LineData.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/LineData.kt new file mode 100644 index 0000000000..1e27d1e4cc --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/LineData.kt @@ -0,0 +1,3 @@ +package com.mogo.och.taxi.passenger.ui.simplemap + +data class LineData(val startPoint:NearPointView, val endPoint: NearPointView, val distance:Float, var paintDegree: PaintDegree) diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/NearPoint.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/NearPoint.kt new file mode 100644 index 0000000000..7a0b0dbc84 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/NearPoint.kt @@ -0,0 +1,10 @@ +package com.mogo.och.taxi.passenger.ui.simplemap + +import com.mogo.eagle.core.data.map.MogoLocation + +/** + * index 点的坐标 + * location 点的经纬度 + * distance 点距离车的位置 + */ +data class NearPoint(val index:Int, val location: MogoLocation, val distance:Float) diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/NearPointView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/NearPointView.kt new file mode 100644 index 0000000000..43ab4021c8 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/NearPointView.kt @@ -0,0 +1,5 @@ +package com.mogo.och.taxi.passenger.ui.simplemap + +import android.graphics.Paint + +data class NearPointView(val x:Float, val y: Float, val distance:Float) diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/PaintDegree.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/PaintDegree.kt new file mode 100644 index 0000000000..ca0a7af323 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/PaintDegree.kt @@ -0,0 +1,49 @@ +package com.mogo.och.taxi.passenger.ui.simplemap + +import android.graphics.Paint +import android.graphics.Path +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger + +data class PaintDegree(var paint: Paint,var path:Path){ + + var next: PaintDegree? = null + + fun recycle() { + synchronized(sPoolSync) { + if (sPoolSize < MAX_POOL_SIZE) { + next = sPool + sPool = this + sPoolSize++ + } +// CallerLogger.d("PaintDegree","缓存对象个数${sPoolSize}个") + } + } + + companion object { + var sPoolSync = Any() + private var sPool: PaintDegree? = null + private var sPoolSize = 0 + private var MAX_POOL_SIZE = 20 + + fun obtain(): PaintDegree { + return obtain(null,null) + } + + fun obtain(paint: Paint?,path:Path?): PaintDegree { + synchronized(sPoolSync) { + if (sPool != null) { + val m: PaintDegree = sPool!! + sPool = m.next + m.next = null + sPoolSize-- +// CallerLogger.d("PaintDegree","取出一个对象个数${sPoolSize}个") + return m + } +// CallerLogger.d("PaintDegree","创建一个对象 ${sPoolSize}个") + + return PaintDegree(paint?:Paint(),path?:Path()) + } + } + } + +} diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/SimpleMapView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/SimpleMapView.kt new file mode 100644 index 0000000000..2dfb06723c --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/SimpleMapView.kt @@ -0,0 +1,696 @@ +package com.mogo.och.taxi.passenger.ui.simplemap + +import android.animation.ArgbEvaluator +import android.content.Context +import android.graphics.BitmapFactory +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.LinearGradient +import android.graphics.Matrix +import android.graphics.Paint +import android.graphics.Path +import android.graphics.Shader +import android.util.AttributeSet +import android.util.Log +import android.view.View +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.CoordinateUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil +import com.mogo.och.taxi.passenger.common.R +import kotlin.math.cos +import kotlin.math.sin + + +class SimpleMapView : View, SimpleMapViewModel.SimpleMapCallback { + + private val TAG = "EvaluateView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + //定义、并创建画笔 + var p = Paint().apply { + strokeWidth = 4f + isAntiAlias = true + color = Color.RED + } + var pLine = Paint().apply { + strokeWidth = 10f + isAntiAlias = true + style = Paint.Style.STROKE + color = Color.BLUE + } + + var bmBlockWidth = 0 + var bmBlockHeight = 0 + + var widthView = 0 + var heighView = 0 + + var proportion = 0f + + var preLineData = mutableListOf() + var nextLineData = mutableListOf() + + val bmBlock = BitmapFactory.decodeResource(resources, R.drawable.taxi_navi_arrow_icon).also { + bmBlockWidth = it.width + bmBlockHeight = it.height + } + + val matrixArrow = Matrix() + + var evaluator = ArgbEvaluator() + + private var viewModel: SimpleMapViewModel?=null + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SimpleMapViewModel::class.java) + } + viewModel?.setViewCallback(this) + } + + override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { + super.onLayout(changed, left, top, right, bottom) + widthView = width + heighView = height + proportion = widthView / 500f + matrixArrow.setTranslate( + (width / 2 - bmBlockWidth / 2).toFloat(), + (height / 2 - bmBlockHeight / 2).toFloat() + ) + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + + try { + var startPointNextUse:NearPointView? = null + var secondPointNextUse:NearPointView? = null + nextLineData.forEachIndexed { index, lineData -> + val startPoint = lineData.startPoint + val endPoint = lineData.endPoint + if(index==0) { + val line4Point = getLine4Point(startPoint, endPoint, true) + Log.d( + "DrawLineView_startPoint", + "${startPoint.x}------${startPoint.y}--${startPoint.distance}--------${endPoint.x}------${endPoint.y}----${endPoint.distance}" + ) + val path = lineData.paintDegree.path + path.reset() + val D = line4Point[0] + val F = line4Point[1] + val I = line4Point[2] + val G = line4Point[3] + path.moveTo(D.x,D.y) + path.lineTo(F.x,F.y) + path.lineTo(I.x,I.y) + path.lineTo(G.x,G.y) + startPointNextUse = I + secondPointNextUse = G + path.close() + canvas.drawPath(path,lineData.paintDegree.paint) + lineData.paintDegree.recycle() + }else{ + val line4Point = getLine4Point(startPoint, endPoint, false) + val path = lineData.paintDegree.path + path.reset() + path.moveTo(startPointNextUse!!.x,startPointNextUse!!.y) + path.lineTo(secondPointNextUse!!.x,secondPointNextUse!!.y) + val tempStart = line4Point[0] + val tempEnd = line4Point[1] + path.lineTo(tempStart.x,tempStart.y) + path.lineTo(tempEnd.x,tempEnd.y) + startPointNextUse = tempEnd + secondPointNextUse = tempStart + canvas.drawPath(path,lineData.paintDegree.paint) + lineData.paintDegree.recycle() + } + + } + + preLineData.forEachIndexed { index, lineData -> + val startPoint = lineData.startPoint + val endPoint = lineData.endPoint + if(index==0) { + val line4Point = getLine4Point(startPoint, endPoint, true) + val path = lineData.paintDegree.path + path.reset() + val D = line4Point[0] + val F = line4Point[1] + val I = line4Point[2] + val G = line4Point[3] + path.moveTo(D.x,D.y) + path.lineTo(F.x,F.y) + path.lineTo(I.x,I.y) + path.lineTo(G.x,G.y) + startPointNextUse = I + secondPointNextUse = G + path.close() + canvas.drawPath(path,lineData.paintDegree.paint) + lineData.paintDegree.recycle() + }else{ + val line4Point = getLine4Point(startPoint, endPoint, false) + val path = lineData.paintDegree.path + path.reset() + path.moveTo(startPointNextUse!!.x,startPointNextUse!!.y) + path.lineTo(secondPointNextUse!!.x,secondPointNextUse!!.y) + val tempStart = line4Point[0] + val tempEnd = line4Point[1] + path.lineTo(tempStart.x,tempStart.y) + path.lineTo(tempEnd.x,tempEnd.y) + startPointNextUse = tempEnd + secondPointNextUse = tempStart + canvas.drawPath(path,lineData.paintDegree.paint) + lineData.paintDegree.recycle() + } + } + }catch (e:Exception ){ + CallerLogger.e(TAG,"绘制问题") + } + + canvas.drawBitmap(bmBlock, matrixArrow, p) + + } + + fun getLine4Point(A: NearPointView, B: NearPointView, isFirst: Boolean):List { + + val reuslt = mutableListOf() + + // 120 80 120 80 (80,80) (120,120) + if (B.y > A.y && B.x > A.x) { + val AD = 5f + val BG = 5f + val BC = B.x-A.x + val AB = B.distance + val AC = B.y-A.y + val DE=AD*BC/AB + val GH=BG*BC/AB + + val AE=AD*AC/AB + val BH=BG*AC/AB + + val gx = B.x-BH + val gy = B.y+GH + + val Ix = B.x+BH + val Iy = B.y-GH + + // D点坐吧 + val dx = A.x-AE + val dy = A.y+DE + + val fx = A.x+AE + val fy = A.y-DE + + + if(isFirst){ + reuslt.add(NearPointView(dx,dy,0f)) + reuslt.add(NearPointView(fx,fy,0f)) + reuslt.add(NearPointView(Ix,Iy,0f)) + reuslt.add(NearPointView(gx,gy,0f)) + }else{ + reuslt.add(NearPointView(gx,gy,0f)) + reuslt.add(NearPointView(Ix,Iy,0f)) + } + } + + // 120 80 80 120 (120,80) (80,120) + if (B.y > A.y && B.x < A.x) { + val AD = 5f + val BC = A.x-B.x + val AB = B.distance + val BG = 5f + val AC = B.y-A.y + val DE=AD*BC/AB + val GH=BG*BC/AB + + val AE=AD*AC/AB + val BH=BG*AC/AB + + val gx = B.x+BH + val gy = B.y+GH + + val Ix = B.x-BH + val Iy = B.y-GH + + // D点坐吧 + val dx = A.x-AE + val dy = A.y-DE + + val fx = A.x+AE + val fy = A.y+DE + + if(isFirst){ + reuslt.add(NearPointView(dx,dy,0f)) + reuslt.add(NearPointView(fx,fy,0f)) + reuslt.add(NearPointView(gx,gy,0f)) + reuslt.add(NearPointView(Ix,Iy,0f)) + }else{ + reuslt.add(NearPointView(Ix,Iy,0f)) + reuslt.add(NearPointView(gx,gy,0f)) + } + } + + // 80 120 80 120 (120,120) (80,80) + if (B.y < A.y && B.x < A.x) { + val AD = 5f + val BC = A.y-B.y + val AB = B.distance + val AC = A.x-B.x + + val AE=AD*BC/AB + val DE=AD*AC/AB + + // D点坐吧 + val dx = A.x-AE + val dy = A.y+DE + + val fx = A.x+AE + val fy = A.y-DE + + val BG = 5f + val GH= BG*BC/AB + val BH= BG*AC/AB + + val gx = B.x-GH + val gy = B.y+BH + + val Ix = B.x+GH + val Iy = B.y-BH + + if(isFirst){ + reuslt.add(NearPointView(fx,fy,0f)) + reuslt.add(NearPointView(dx,dy,0f)) + reuslt.add(NearPointView(gx,gy,0f)) + reuslt.add(NearPointView(Ix,Iy,0f)) + }else{ + reuslt.add(NearPointView(Ix,Iy,0f)) + reuslt.add(NearPointView(gx,gy,0f)) + } + } + + // 80 120 120 80 (80,120) (120,80) + if (B.y < A.y && B.x > A.x) { + val AD = 5f + val AC = B.x-A.x + val AB = B.distance + val BG = 5f + val BC = A.y-B.y + val DE=AD*AC/AB + val GH=BG*AC/AB + + val AE=AD*BC/AB + val BH=BG*BC/AB + + // D点坐吧 + val dx = A.x-AE + val dy = A.y-DE + + val fx = A.x+AE + val fy = A.y+DE + + + val gx = B.x+BH + val gy = B.y+GH + + val Ix = B.x-BH + val Iy = B.y-GH + + if(isFirst){ + reuslt.add(NearPointView(fx,fy,0f)) + reuslt.add(NearPointView(dx,dy,0f)) + reuslt.add(NearPointView(Ix,Iy,0f)) + reuslt.add(NearPointView(gx,gy,0f)) + }else{ + reuslt.add(NearPointView(gx,gy,0f)) + reuslt.add(NearPointView(Ix,Iy,0f)) + } + + } + return reuslt + + + } + + /** + * 获取两条线的夹角 + * @param centerX + * @param centerY + * @param xInView + * @param yInView + * @return + */ + fun getRotationBetweenLines( + prePoint: NearPointView, + current: NearPointView, + nextPoint: NearPointView, + ): Pair? { + + val degreesAB = Math.toDegrees( + Math.atan2( + (prePoint.y - current.y).toDouble(), + (prePoint.x - current.x).toDouble() + ) + ) + val degreesBC = Math.toDegrees( + Math.atan2( + (current.y - nextPoint.y).toDouble(), + (current.x - nextPoint.x).toDouble() + ) + ) + + // 120 80 120 80 (80,80) (120,120) + if (current.y > prePoint.y && current.x > prePoint.x) { + if (degreesAB > degreesBC) { + return Pair(degreesAB - 90, true) + } else { + return Pair(degreesAB + 90, false) + } + } + + // 120 80 80 120 (120,80) (80,120) + if (current.y > prePoint.y && current.x < prePoint.x) { + if (degreesAB > degreesBC) { + return Pair(270-degreesAB, false) + } else { + return Pair(degreesAB-90, false) + } + } + + // 80 120 80 120 (120,120) (80,80) + if (current.y < prePoint.y && current.x < prePoint.x) { + if(degreesBC>0&°reesBCdegreesAB+180&°reesBC<180){ + return Pair(degreesAB + 90, false) + }else if(degreesBC>-180&°reesBCdegreesAB){ + return Pair(270-degreesAB, true) + } + } + + // 80 120 120 80 (80,120) (120,80) + if (current.y < prePoint.y && current.x > prePoint.x) { + if (degreesAB > degreesBC) { + return Pair(degreesAB + 90, false) + } else { + return Pair(degreesAB - 90, true) + } + } + return null + } + + @Synchronized + override fun setData(carLocation: MogoLocation, nextList: MutableList, preList: MutableList) { + var nextPointMaxLength = 0f + var prePointMaxLength = 0f + + val nextPointList = mutableListOf() + nextLineData.clear() + nextList.forEachIndexed { index, currentPoint -> + val headingAngle = CoordinateCalculateRouteUtil.getHeadingAngle( + carLocation.longitude, + carLocation.latitude, + currentPoint.location.longitude, + currentPoint.location.latitude + ) + val distancePx = currentPoint.distance * proportion + var x = 0f + var y = 0f + if (headingAngle == 0.0) { + x = (widthView / 2).toFloat() + y = (heighView / 2) - distancePx + } else if (headingAngle > 0 && headingAngle < 90) { + val xDistance = distancePx * sin(Math.toRadians(headingAngle)) + val yDistance = distancePx * cos(Math.toRadians(headingAngle)) + x = ((widthView / 2) + xDistance).toFloat() + y = ((heighView / 2) - yDistance).toFloat() + } else if (headingAngle == 90.0) { + x = widthView / 2 + distancePx + y = (heighView / 2).toFloat() + } else if (headingAngle > 90 && headingAngle < 180) { + val xDistance = distancePx * sin(Math.toRadians(180 - headingAngle)) + val yDistance = distancePx * cos(Math.toRadians(180 - headingAngle)) + x = (widthView / 2 + xDistance).toFloat() + y = (heighView / 2 + yDistance).toFloat() + } else if (headingAngle == 180.0) { + x = (widthView / 2).toFloat() + y = (heighView / 2) + distancePx + } else if (headingAngle > 180 && headingAngle < 270) { + val xDistance = distancePx * sin(Math.toRadians(headingAngle - 180)) + val yDistance = distancePx * cos(Math.toRadians(headingAngle - 180)) + x = (widthView / 2 - xDistance).toFloat() + y = (heighView / 2 + yDistance).toFloat() + } else if (headingAngle == 270.0) { + x = (widthView / 2) - distancePx + y = (heighView / 2).toFloat() + } else if (headingAngle > 270 && headingAngle < 360) { + val xDistance = distancePx * sin(Math.toRadians(360 - headingAngle)) + val yDistance = distancePx * cos(Math.toRadians(360 - headingAngle)) + x = (widthView / 2 - xDistance).toFloat() + y = (heighView / 2 - yDistance).toFloat() + } else if (headingAngle == 360.0) { + x = (widthView / 2).toFloat() + y = (heighView / 2) - distancePx + + } + if (index == 0) { + val distancePx = CoordinateUtils.calculateLineDistance( + carLocation.longitude, + carLocation.latitude, + currentPoint.location.longitude, + currentPoint.location.latitude + ) * proportion + nextPointList.add(NearPointView(x, y, distancePx)) + nextPointMaxLength += distancePx + } else { + val prePoint = nextList[index - 1] + val distancePx = CoordinateUtils.calculateLineDistance( + prePoint.location.longitude, + prePoint.location.latitude, + currentPoint.location.longitude, + currentPoint.location.latitude + ) * proportion + nextPointList.add(NearPointView(x, y, distancePx)) + nextPointMaxLength += distancePx + } + + + } + val prePointList = mutableListOf() + preLineData.clear() + preList.forEachIndexed { index, currentPoint -> + val headingAngle = CoordinateCalculateRouteUtil.getHeadingAngle( + carLocation.longitude, + carLocation.latitude, + currentPoint.location.longitude, + currentPoint.location.latitude + ) + val distancePx = currentPoint.distance * proportion + var x = 0f + var y = 0f + if (headingAngle == 0.0) { + x = (widthView / 2).toFloat() + y = (heighView / 2) - distancePx + } else if (headingAngle > 0 && headingAngle < 90) { + val xDistance = distancePx * sin(Math.toRadians(headingAngle)) + val yDistance = distancePx * cos(Math.toRadians(headingAngle)) + x = (widthView / 2 + xDistance).toFloat() + y = (heighView / 2 - yDistance).toFloat() + } else if (headingAngle == 90.0) { + x = widthView / 2 + distancePx + y = (heighView / 2).toFloat() + } else if (headingAngle > 90 && headingAngle < 180) { + val xDistance = distancePx * sin(Math.toRadians(180 - headingAngle)) + val yDistance = distancePx * cos(Math.toRadians(180 - headingAngle)) + x = (widthView / 2 + xDistance).toFloat() + y = (heighView / 2 + yDistance).toFloat() + } else if (headingAngle == 180.0) { + x = (widthView / 2).toFloat() + y = (heighView / 2) + distancePx + } else if (headingAngle > 180 && headingAngle < 270) { + val xDistance = distancePx * sin(Math.toRadians(headingAngle - 180)) + val yDistance = distancePx * cos(Math.toRadians(headingAngle - 180)) + x = (widthView / 2 - xDistance).toFloat() + y = (heighView / 2 + yDistance).toFloat() + } else if (headingAngle == 270.0) { + x = (widthView / 2) - distancePx + y = (heighView / 2).toFloat() + } else if (headingAngle > 270 && headingAngle < 360) { + val xDistance = distancePx * sin(Math.toRadians(360 - headingAngle)) + val yDistance = distancePx * cos(Math.toRadians(360 - headingAngle)) + x = ((widthView / 2) - xDistance).toFloat() + y = ((heighView / 2) - yDistance).toFloat() + } else if (headingAngle == 360.0) { + x = (widthView / 2).toFloat() + y = (heighView / 2) - distancePx + } + if (index == 0) { + prePointList.add(NearPointView(x, y, distancePx)) + prePointMaxLength += distancePx + } else { + val prePoint = preList[index - 1] + val distancePx = CoordinateUtils.calculateLineDistance( + prePoint.location.longitude, + prePoint.location.latitude, + currentPoint.location.longitude, + currentPoint.location.latitude + ) * proportion + prePointList.add(NearPointView(x, y, distancePx)) + prePointMaxLength += distancePx + } + } + + + var hasDraw = 0f + var lastColor = Color.parseColor("#2ED3FF") + nextPointList.forEachIndexed { index, triple -> + + val paintegree = PaintDegree.obtain() + paintegree.paint.apply { + strokeWidth = 20f + isAntiAlias = true + } + val colorPencent = if (index == nextPointList.size - 1) { + 1f + } else { + (triple.distance + hasDraw) / nextPointMaxLength + } + + val evaluateColor = evaluator.evaluate( + colorPencent, + Color.parseColor("#2ED3FF"), + Color.parseColor("#002ED3FF") + ) as Int + + if (index == 0) { + paintegree.paint.shader = LinearGradient( + widthView / 2f, + heighView / 2f, + triple.x, + triple.y, + lastColor, + evaluateColor, + Shader.TileMode.CLAMP + ) + nextLineData.add( + LineData( + NearPointView(widthView / 2f, heighView / 2f, 0f), + triple, triple.distance, paintegree + ) + ) + } else { + val prePoint = nextPointList[index - 1] + paintegree.paint.shader = LinearGradient( + prePoint.x, + prePoint.y, + triple.x, + triple.y, + lastColor, + evaluateColor, + Shader.TileMode.CLAMP + ) + nextLineData.add(LineData(prePoint, triple, triple.distance, paintegree)) + } + hasDraw += triple.distance + Log.d( + "DrawLineViewdrawNext", + "颜色百分比:${colorPencent}-颜色:${colorPencent}---长度${nextPointMaxLength}-----${hasDraw}" + ) + if (hasDraw > nextPointMaxLength) { + hasDraw = nextPointMaxLength + } + lastColor = evaluateColor + } + + Log.d("DrawLineViewdrawPre", "---------------------------") + + hasDraw = 0f + lastColor = Color.parseColor("#2ED3FF") + prePointList.forEachIndexed { index, triple -> + val paintegree = PaintDegree.obtain() + paintegree.paint.apply { + strokeWidth = 20f + isAntiAlias = true + color = Color.RED + } + + val colorPencent = if (index == prePointList.size - 1) { + 1f + } else { + (triple.distance + hasDraw) / prePointMaxLength + } + + val evaluateColor = evaluator.evaluate( + colorPencent, + Color.parseColor("#FF2ED3FF"), + Color.parseColor("#002ED3FF") + ) as Int + + if (index == 0) { + paintegree.paint.shader = LinearGradient( + widthView / 2f, + heighView / 2f, + triple.x, + triple.y, + lastColor, + evaluateColor, + Shader.TileMode.CLAMP + ) + preLineData.add( + LineData( + NearPointView(widthView / 2f, heighView / 2f, 0f), + triple, triple.distance, paintegree + ) + ) + } else { + val prePoint = prePointList[index - 1] + paintegree.paint.shader = LinearGradient( + prePoint.x, + prePoint.y, + triple.x, + triple.y, + lastColor, + evaluateColor, + Shader.TileMode.CLAMP + ) + preLineData.add(LineData(prePoint, triple, triple.distance, paintegree)) + } + hasDraw += triple.distance + Log.d( + "DrawLineViewdrawPre", + "颜色百分比:${colorPencent}-颜色:${colorPencent}---长度${prePointMaxLength}-----${hasDraw}" + ) + if (hasDraw > prePointMaxLength) { + hasDraw = prePointMaxLength + } + lastColor = evaluateColor + } + + Log.d("DrawLineViewdrawPre", "---------------------------") + ThreadUtils.runOnUiThread { + matrixArrow.setTranslate( + (width / 2 - bmBlockWidth / 2).toFloat(), + (height / 2 - bmBlockHeight / 2).toFloat() + ) + carLocation.heading.let { + matrixArrow.preRotate(it.toFloat(), bmBlockWidth / 2f, bmBlockHeight / 2f) + } + invalidate() + } + } + + +} \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/SimpleMapViewModel.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/SimpleMapViewModel.kt new file mode 100644 index 0000000000..b97c159bff --- /dev/null +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/simplemap/SimpleMapViewModel.kt @@ -0,0 +1,82 @@ +package com.mogo.och.taxi.passenger.ui.simplemap + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.CoordinateUtils +import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager + +class SimpleMapViewModel : ViewModel(), ITrajectoryListener { + + private val TAG = SimpleMapViewModel::class.java.simpleName + + private val orderShowEvaluate = "SHOWEVALUATE" + + private var simpleMapCallback: SimpleMapCallback?=null + + init { + TrajectoryAndDistanceManager.addTrajectoryListener(TAG,this) + } + + + fun setViewCallback(viewCallback: SimpleMapCallback) { + this.simpleMapCallback = viewCallback + } + + override fun onCleared() { + super.onCleared() + this.simpleMapCallback = null + } + + interface SimpleMapCallback { + fun setData( + carLocation: MogoLocation, + nextList: MutableList, + preList: MutableList + ) + } + + override fun trajectoryCallback( + routeArrivied: MutableList, + routeArriving: MutableList, + location: MogoLocation + ) { + val nextList = mutableListOf() + val preList = mutableListOf() + + looper@ for(index in routeArrivied.size-1 downTo 0){ + val tempMogLocation = routeArrivied[index] + val distance = CoordinateUtils.calculateLineDistance( + location.longitude, + location.latitude, + tempMogLocation.longitude, + tempMogLocation.latitude + ) + if (distance >= 250) { + nextList.add(NearPoint(index,tempMogLocation,distance)) + break@looper + } else { + nextList.add(NearPoint(index,tempMogLocation,distance)) + } + } + + looper@ for(index in 0 until routeArriving.size){ + val tempMogLocation = routeArriving[index] + val distance = CoordinateUtils.calculateLineDistance( + location.longitude, + location.latitude, + tempMogLocation.longitude, + tempMogLocation.latitude + ) + if (distance >= 250) { + preList.add(NearPoint(index,tempMogLocation,distance)) + break@looper + } else { + preList.add(NearPoint(index,tempMogLocation,distance)) + } + } + CallerLogger.d(TAG,"nextList:${nextList.size}---preList:${preList.size}") + this.simpleMapCallback?.setData(location,nextList,preList) + } +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_001.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_001.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_001.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_001.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_002.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_002.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_002.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_002.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_003.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_003.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_003.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_003.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_004.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_004.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_004.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_004.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_005.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_005.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_005.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_005.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_006.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_006.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_006.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_006.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_007.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_007.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_007.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_007.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_008.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_008.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_008.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_008.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_009.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_009.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_009.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_009.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_010.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_010.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_010.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_010.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_011.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_011.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_011.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_011.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_012.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_012.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_012.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_012.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_013.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_013.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_013.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_013.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_014.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_014.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_014.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_014.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_015.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_015.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_015.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_015.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_016.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_016.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_016.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_016.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_017.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_017.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_017.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_017.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_018.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_018.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_018.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_018.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_019.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_019.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_019.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_019.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_020.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_020.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_020.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_020.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_021.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_021.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_021.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_021.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_022.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_022.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_022.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_022.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_023.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_023.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_023.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_023.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_024.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_024.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_024.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_024.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_025.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_025.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_025.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_025.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_026.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_026.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_026.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_026.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_027.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_027.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_027.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_027.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_028.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_028.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_028.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_028.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_029.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_029.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_029.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_029.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_030.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_030.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_030.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_030.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_031.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_031.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_031.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_031.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_032.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_032.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_032.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_032.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_033.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_033.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_033.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_033.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_034.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_034.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_034.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_034.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_035.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_035.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_035.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_035.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_036.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_036.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_036.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_036.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_037.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_037.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_037.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_037.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_038.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_038.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_038.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_038.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_039.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_039.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_039.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_039.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_040.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_040.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_040.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_040.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_041.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_041.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_041.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_041.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_042.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_042.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_042.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_042.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_043.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_043.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_043.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_043.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_044.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_044.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_044.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_044.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_045.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_045.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_045.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_045.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_046.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_046.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_046.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_046.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_047.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_047.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_047.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_047.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_048.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_048.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_048.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_048.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_049.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_049.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_049.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_049.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_050.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_050.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_050.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_050.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_051.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_051.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_051.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_051.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_052.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_052.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_052.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_052.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_053.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_053.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_053.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_053.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_054.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_054.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_054.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_054.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_055.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_055.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_055.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_055.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_056.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_056.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_056.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_056.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_057.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_057.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_057.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_057.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_058.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_058.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_058.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_058.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_059.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_059.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_059.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_059.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_060.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_060.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/arrive_dest_060.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_060.webp diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_000.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_000.png new file mode 100644 index 0000000000..c72f538ec2 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_000.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_001.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_001.png new file mode 100644 index 0000000000..2a1b9775b6 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_001.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_002.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_002.png new file mode 100644 index 0000000000..168cdf8441 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_002.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_003.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_003.png new file mode 100644 index 0000000000..93e1137ece Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_003.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_004.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_004.png new file mode 100644 index 0000000000..d22b5bfa22 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_004.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_005.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_005.png new file mode 100644 index 0000000000..8a7ccb34d6 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_005.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_006.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_006.png new file mode 100644 index 0000000000..f46c00d0e9 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_006.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_007.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_007.png new file mode 100644 index 0000000000..b4f6dbec91 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_007.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_008.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_008.png new file mode 100644 index 0000000000..618aa81565 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_008.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_009.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_009.png new file mode 100644 index 0000000000..f46c00d0e9 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_009.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_010.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_010.png new file mode 100644 index 0000000000..168cdf8441 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_010.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_011.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_011.png new file mode 100644 index 0000000000..8a7ccb34d6 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_011.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_012.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_012.png new file mode 100644 index 0000000000..4b4889576a Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_012.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_013.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_013.png new file mode 100644 index 0000000000..d22b5bfa22 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_013.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_014.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_014.png new file mode 100644 index 0000000000..4b4889576a Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_014.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_015.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_015.png new file mode 100644 index 0000000000..8a7ccb34d6 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_015.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_016.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_016.png new file mode 100644 index 0000000000..168cdf8441 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_016.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_017.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_017.png new file mode 100644 index 0000000000..168cdf8441 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/arrive_dest_great_017.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_000.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_000.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_000.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_000.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_001.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_001.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_001.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_001.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_002.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_002.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_002.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_002.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_003.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_003.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_003.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_003.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_004.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_004.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_004.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_004.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_005.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_005.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_005.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_005.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_006.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_006.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_006.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_006.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_007.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_007.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_007.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_007.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_008.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_008.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_008.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_008.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_009.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_009.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_009.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_009.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_010.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_010.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_010.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_010.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_011.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_011.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_011.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_011.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_012.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_012.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_012.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_012.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_013.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_013.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_013.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_013.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_014.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_014.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_014.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_014.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_015.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_015.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_015.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_015.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_016.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_016.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_016.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_016.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_017.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_017.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_017.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_017.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_018.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_018.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_018.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_018.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_019.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_019.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_019.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_019.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_020.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_020.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_020.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_020.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_021.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_021.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_021.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_021.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_022.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_022.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_022.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_022.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_023.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_023.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_023.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_023.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_024.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_024.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_024.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_024.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_025.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_025.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_025.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_025.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_026.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_026.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_026.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_026.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_027.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_027.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_027.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_027.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_028.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_028.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_028.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_028.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_029.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_029.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_029.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_029.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_030.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_030.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_030.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_030.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_031.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_031.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_031.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_031.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_032.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_032.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_032.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_032.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_033.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_033.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_033.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_033.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_034.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_034.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_034.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_034.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_035.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_035.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_035.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_035.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_036.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_036.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_036.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_036.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_037.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_037.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_037.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_037.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_038.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_038.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_038.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_038.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_039.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_039.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_039.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_039.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_040.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_040.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_040.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_040.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_041.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_041.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_041.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_041.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_042.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_042.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_042.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_042.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_043.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_043.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_043.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_043.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_044.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_044.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_044.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_044.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_045.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_045.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_045.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_045.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_046.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_046.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_046.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_046.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_047.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_047.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_047.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_047.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_048.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_048.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_048.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_048.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_049.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_049.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_049.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_049.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_050.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_050.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_050.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_050.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_051.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_051.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_051.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_051.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_052.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_052.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_052.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_052.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_053.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_053.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_053.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_053.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_054.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_054.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_054.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_054.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_055.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_055.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_055.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_055.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_056.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_056.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_056.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_056.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_057.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_057.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_057.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_057.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_058.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_058.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_058.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_058.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_059.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_059.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_059.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_059.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_060.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_060.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/check2startautopilt_060.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/check2startautopilt_060.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00000.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00000.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00000.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00000.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00000_0.webp b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00000_0.webp similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00000_0.webp rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00000_0.webp diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00001.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00001.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00001.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00001.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00002.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00002.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00002.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00002.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00003.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00003.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00003.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00003.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00004.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00004.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00004.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00004.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00005.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00005.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00005.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00005.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00006.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00006.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00006.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00006.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00007.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00007.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00007.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00007.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00008.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00008.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00008.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00008.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00009.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00009.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00009.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00009.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00010.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00010.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00010.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00010.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00011.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00011.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00011.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00011.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00012.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00012.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00012.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00012.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00013.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00013.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00013.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00013.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00014.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00014.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00014.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00014.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00015.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00015.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00015.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00015.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00016.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00016.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00016.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00016.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00017.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00017.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00017.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00017.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00018.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00018.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00018.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00018.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00019.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00019.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00019.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00019.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00020.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00020.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00020.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00020.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00021.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00021.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00021.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00021.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00022.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00022.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00022.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00022.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00023.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00023.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00023.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00023.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00024.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00024.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00024.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00024.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00025.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00025.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00025.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00025.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00026.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00026.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00026.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00026.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00027.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00027.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00027.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00027.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00028.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00028.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00028.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00028.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00029.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00029.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00029.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00029.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00030.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00030.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00030.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00030.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00031.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00031.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00031.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00031.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00032.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00032.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00032.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00032.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00033.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00033.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00033.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00033.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00034.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00034.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/image_00034.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/image_00034.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00000.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00000.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00000.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00000.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00001.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00001.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00001.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00001.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00002.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00002.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00002.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00002.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00003.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00003.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00003.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00003.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00004.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00004.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00004.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00004.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00005.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00005.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00005.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00005.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00006.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00006.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00006.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00006.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00007.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00007.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00007.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00007.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00008.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00008.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00008.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00008.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00009.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00009.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00009.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00009.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00010.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00010.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00010.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00010.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00011.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00011.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00011.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00011.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00012.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00012.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00012.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00012.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00013.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00013.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00013.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00013.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00014.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00014.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00014.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00014.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00015.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00015.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00015.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00015.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00016.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00016.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00016.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00016.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00017.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00017.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00017.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00017.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00018.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00018.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/light_00018.png rename to OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/light_00018.png diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_000.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_000.png new file mode 100755 index 0000000000..ac97ee5865 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_000.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_001.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_001.png new file mode 100755 index 0000000000..ac97ee5865 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_001.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_002.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_002.png new file mode 100755 index 0000000000..bb548d0a5e Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_002.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_003.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_003.png new file mode 100755 index 0000000000..a8454e42a2 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_003.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_004.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_004.png new file mode 100755 index 0000000000..cb69c9c40d Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_004.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_005.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_005.png new file mode 100755 index 0000000000..ca95d7ebbe Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_005.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_006.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_006.png new file mode 100755 index 0000000000..56df896ced Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_006.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_007.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_007.png new file mode 100755 index 0000000000..544b829a93 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_007.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_008.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_008.png new file mode 100755 index 0000000000..9c038dd639 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_008.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_009.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_009.png new file mode 100755 index 0000000000..1749ef4432 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_009.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_010.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_010.png new file mode 100755 index 0000000000..1749ef4432 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_010.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_011.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_011.png new file mode 100755 index 0000000000..1749ef4432 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_011.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_012.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_012.png new file mode 100755 index 0000000000..2c6325a542 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_012.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_013.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_013.png new file mode 100755 index 0000000000..f16a0ac7a3 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_013.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_014.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_014.png new file mode 100755 index 0000000000..6708258fbc Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_014.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_015.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_015.png new file mode 100755 index 0000000000..aef48d778d Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_015.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_016.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_016.png new file mode 100755 index 0000000000..ee43575a90 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_016.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_017.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_017.png new file mode 100755 index 0000000000..ee43575a90 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_017.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_018.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_018.png new file mode 100755 index 0000000000..ee43575a90 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_018.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_019.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_019.png new file mode 100755 index 0000000000..657d0799d4 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_019.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_020.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_020.png new file mode 100755 index 0000000000..9d7ac21b6e Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_020.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_021.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_021.png new file mode 100755 index 0000000000..812409c006 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_021.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_022.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_022.png new file mode 100755 index 0000000000..08d75f2cac Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_022.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_023.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_023.png new file mode 100755 index 0000000000..b28caa108f Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_023.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_024.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_024.png new file mode 100755 index 0000000000..07d1f3ca7b Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_024.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_025.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_025.png new file mode 100755 index 0000000000..cc5013bc2c Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_025.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_026.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_026.png new file mode 100755 index 0000000000..db670a45b6 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_026.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_027.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_027.png new file mode 100755 index 0000000000..cfd6acd0c8 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_027.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_028.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_028.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_028.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_029.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_029.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_029.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_030.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_030.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_030.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_031.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_031.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_031.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_032.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_032.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_032.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_033.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_033.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_033.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_034.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_034.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_034.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_035.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_035.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_035.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_036.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_036.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_036.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_037.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_037.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_037.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_038.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_038.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_038.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_039.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_039.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_039.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_040.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_040.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_040.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_041.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_041.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_041.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_042.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_042.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_042.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_043.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_043.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_043.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_044.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_044.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_044.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_045.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_045.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_045.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_046.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_046.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_046.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_047.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_047.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_047.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_048.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_048.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_048.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_049.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_049.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_049.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_050.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_050.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_050.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_051.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_051.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_051.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_052.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_052.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_052.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_053.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_053.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_053.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_054.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_054.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_054.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_055.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_055.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_055.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_056.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_056.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_056.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_057.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_057.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_057.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_058.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_058.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_058.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_059.png b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_059.png new file mode 100755 index 0000000000..77d64e4d47 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/ani/drawable-nodpi/taxi_p_start_auto_059.png differ diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_arrive_dest_ani.xml b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_arrive_dest_ani.xml new file mode 100644 index 0000000000..a468a3fbc2 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_arrive_dest_ani.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_check2startautopilt_ani.xml b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_check2startautopilt_ani.xml new file mode 100644 index 0000000000..b323a3d825 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_check2startautopilt_ani.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_light_ani.xml b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_light_ani.xml new file mode 100644 index 0000000000..a8b0b19cc7 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_light_ani.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_start_autopilot_ani.xml b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_start_autopilot_ani.xml new file mode 100644 index 0000000000..519373230a --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_start_autopilot_ani.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_startautopilt_fail_ani.xml b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_startautopilt_fail_ani.xml new file mode 100644 index 0000000000..0c2c3d0229 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/ani/drawable/temp_startautopilt_fail_ani.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/ani/values/arrays.xml b/OCH/taxi/pcommon/src/main/res/ani/values/arrays.xml new file mode 100644 index 0000000000..1dfcf8e5e6 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/ani/values/arrays.xml @@ -0,0 +1,305 @@ + + + + + @drawable/image_00000 + @drawable/image_00001 + @drawable/image_00002 + @drawable/image_00003 + @drawable/image_00004 + @drawable/image_00005 + @drawable/image_00006 + @drawable/image_00007 + @drawable/image_00008 + @drawable/image_00009 + @drawable/image_00010 + @drawable/image_00011 + @drawable/image_00012 + @drawable/image_00013 + @drawable/image_00014 + @drawable/image_00015 + @drawable/image_00016 + @drawable/image_00017 + @drawable/image_00018 + @drawable/image_00019 + @drawable/image_00020 + @drawable/image_00021 + @drawable/image_00022 + @drawable/image_00023 + @drawable/image_00024 + @drawable/image_00025 + @drawable/image_00026 + @drawable/image_00027 + @drawable/image_00028 + @drawable/image_00029 + @drawable/image_00030 + @drawable/image_00031 + @drawable/image_00032 + @drawable/image_00033 + @drawable/image_00034 + + + + @drawable/light_00000 + @drawable/light_00001 + @drawable/light_00002 + @drawable/light_00003 + @drawable/light_00004 + @drawable/light_00005 + @drawable/light_00006 + @drawable/light_00007 + @drawable/light_00008 + @drawable/light_00009 + @drawable/light_00010 + @drawable/light_00011 + @drawable/light_00012 + @drawable/light_00013 + @drawable/light_00014 + @drawable/light_00015 + @drawable/light_00016 + @drawable/light_00017 + + + + + + + + + + @drawable/arrive_dest_001 + @drawable/arrive_dest_002 + @drawable/arrive_dest_003 + @drawable/arrive_dest_004 + @drawable/arrive_dest_005 + @drawable/arrive_dest_006 + @drawable/arrive_dest_007 + @drawable/arrive_dest_008 + @drawable/arrive_dest_009 + + @drawable/arrive_dest_010 + @drawable/arrive_dest_011 + @drawable/arrive_dest_012 + @drawable/arrive_dest_013 + @drawable/arrive_dest_014 + @drawable/arrive_dest_015 + @drawable/arrive_dest_016 + @drawable/arrive_dest_017 + @drawable/arrive_dest_018 + @drawable/arrive_dest_019 + + @drawable/arrive_dest_020 + @drawable/arrive_dest_021 + @drawable/arrive_dest_022 + @drawable/arrive_dest_023 + @drawable/arrive_dest_024 + @drawable/arrive_dest_025 + @drawable/arrive_dest_026 + @drawable/arrive_dest_027 + @drawable/arrive_dest_028 + @drawable/arrive_dest_029 + + + @drawable/arrive_dest_030 + @drawable/arrive_dest_031 + @drawable/arrive_dest_032 + @drawable/arrive_dest_033 + @drawable/arrive_dest_034 + @drawable/arrive_dest_035 + @drawable/arrive_dest_036 + @drawable/arrive_dest_037 + @drawable/arrive_dest_038 + @drawable/arrive_dest_039 + + @drawable/arrive_dest_040 + @drawable/arrive_dest_041 + @drawable/arrive_dest_042 + @drawable/arrive_dest_043 + @drawable/arrive_dest_044 + @drawable/arrive_dest_045 + @drawable/arrive_dest_046 + @drawable/arrive_dest_047 + @drawable/arrive_dest_048 + @drawable/arrive_dest_049 + + + @drawable/arrive_dest_050 + @drawable/arrive_dest_051 + @drawable/arrive_dest_052 + @drawable/arrive_dest_053 + @drawable/arrive_dest_054 + @drawable/arrive_dest_055 + @drawable/arrive_dest_056 + @drawable/arrive_dest_057 + @drawable/arrive_dest_058 + @drawable/arrive_dest_059 + + @drawable/arrive_dest_060 + + + + @drawable/check2startautopilt_000 + @drawable/check2startautopilt_001 + @drawable/check2startautopilt_002 + @drawable/check2startautopilt_003 + @drawable/check2startautopilt_004 + @drawable/check2startautopilt_005 + @drawable/check2startautopilt_006 + @drawable/check2startautopilt_007 + @drawable/check2startautopilt_008 + @drawable/check2startautopilt_009 + + @drawable/check2startautopilt_010 + @drawable/check2startautopilt_011 + @drawable/check2startautopilt_012 + @drawable/check2startautopilt_013 + @drawable/check2startautopilt_014 + @drawable/check2startautopilt_015 + @drawable/check2startautopilt_016 + @drawable/check2startautopilt_017 + @drawable/check2startautopilt_018 + @drawable/check2startautopilt_019 + + @drawable/check2startautopilt_020 + @drawable/check2startautopilt_021 + @drawable/check2startautopilt_022 + @drawable/check2startautopilt_023 + @drawable/check2startautopilt_024 + @drawable/check2startautopilt_025 + @drawable/check2startautopilt_026 + @drawable/check2startautopilt_027 + @drawable/check2startautopilt_028 + @drawable/check2startautopilt_029 + + + @drawable/check2startautopilt_030 + @drawable/check2startautopilt_031 + @drawable/check2startautopilt_032 + @drawable/check2startautopilt_033 + @drawable/check2startautopilt_034 + @drawable/check2startautopilt_035 + @drawable/check2startautopilt_036 + @drawable/check2startautopilt_037 + @drawable/check2startautopilt_038 + @drawable/check2startautopilt_039 + + @drawable/check2startautopilt_040 + @drawable/check2startautopilt_041 + @drawable/check2startautopilt_042 + @drawable/check2startautopilt_043 + @drawable/check2startautopilt_044 + @drawable/check2startautopilt_045 + @drawable/check2startautopilt_046 + @drawable/check2startautopilt_047 + @drawable/check2startautopilt_048 + + @drawable/check2startautopilt_050 + @drawable/check2startautopilt_051 + @drawable/check2startautopilt_052 + @drawable/check2startautopilt_053 + @drawable/check2startautopilt_054 + @drawable/check2startautopilt_055 + @drawable/check2startautopilt_056 + @drawable/check2startautopilt_057 + @drawable/check2startautopilt_058 + + @drawable/check2startautopilt_060 + + + + + + @drawable/taxi_p_start_auto_000 + @drawable/taxi_p_start_auto_001 + @drawable/taxi_p_start_auto_002 + @drawable/taxi_p_start_auto_003 + @drawable/taxi_p_start_auto_004 + @drawable/taxi_p_start_auto_005 + @drawable/taxi_p_start_auto_006 + @drawable/taxi_p_start_auto_007 + @drawable/taxi_p_start_auto_008 + @drawable/taxi_p_start_auto_009 + + @drawable/taxi_p_start_auto_010 + @drawable/taxi_p_start_auto_011 + @drawable/taxi_p_start_auto_012 + @drawable/taxi_p_start_auto_013 + @drawable/taxi_p_start_auto_014 + @drawable/taxi_p_start_auto_015 + @drawable/taxi_p_start_auto_016 + @drawable/taxi_p_start_auto_017 + @drawable/taxi_p_start_auto_018 + @drawable/taxi_p_start_auto_019 + + @drawable/taxi_p_start_auto_020 + @drawable/taxi_p_start_auto_021 + @drawable/taxi_p_start_auto_022 + @drawable/taxi_p_start_auto_023 + @drawable/taxi_p_start_auto_024 + @drawable/taxi_p_start_auto_025 + @drawable/taxi_p_start_auto_026 + @drawable/taxi_p_start_auto_027 + @drawable/taxi_p_start_auto_028 + @drawable/taxi_p_start_auto_029 + + @drawable/taxi_p_start_auto_030 + @drawable/taxi_p_start_auto_031 + @drawable/taxi_p_start_auto_032 + @drawable/taxi_p_start_auto_033 + @drawable/taxi_p_start_auto_034 + @drawable/taxi_p_start_auto_035 + @drawable/taxi_p_start_auto_036 + @drawable/taxi_p_start_auto_037 + @drawable/taxi_p_start_auto_038 + @drawable/taxi_p_start_auto_039 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @drawable/arrive_dest_great_001 + @drawable/arrive_dest_great_002 + @drawable/arrive_dest_great_003 + @drawable/arrive_dest_great_004 + @drawable/arrive_dest_great_005 + @drawable/arrive_dest_great_006 + @drawable/arrive_dest_great_007 + @drawable/arrive_dest_great_008 + @drawable/arrive_dest_great_009 + + @drawable/arrive_dest_great_010 + @drawable/arrive_dest_great_011 + @drawable/arrive_dest_great_012 + @drawable/arrive_dest_great_013 + @drawable/arrive_dest_great_014 + @drawable/arrive_dest_great_015 + @drawable/arrive_dest_great_016 + @drawable/arrive_dest_great_017 + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_close.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_close.png new file mode 100644 index 0000000000..068c08b2f3 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_close.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_great.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_great.png new file mode 100644 index 0000000000..3abc85a7ae Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_great.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_low.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_low.png new file mode 100644 index 0000000000..9f409392c0 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_evaluate_low.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_function_voice_humb.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_function_voice_humb.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_function_voice_humb.png rename to OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_function_voice_humb.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_light_increase_set.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_light_increase_set.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_light_increase_set.png rename to OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_light_increase_set.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_light_set.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_light_set.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_light_set.png rename to OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_light_set.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_voice_increase_set.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_voice_increase_set.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_voice_increase_set.png rename to OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_voice_increase_set.png diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_voice_set.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_voice_set.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_iv_voice_set.png rename to OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_iv_voice_set.png diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_checked.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_checked.png new file mode 100755 index 0000000000..2e3b9ec27b Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_checked.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_list_playing.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_list_playing.png new file mode 100644 index 0000000000..6a1a124d21 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_list_playing.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_next.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_next.png new file mode 100644 index 0000000000..8610c57bfc Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_next.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_normal.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_normal.png new file mode 100755 index 0000000000..ee40015870 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_normal.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_pause.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_pause.png new file mode 100644 index 0000000000..af55d1099e Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_pause.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_play.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_play.png new file mode 100644 index 0000000000..32db628355 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_play.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_pre.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_pre.png new file mode 100644 index 0000000000..97f630aecd Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_pre.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_thumb.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_thumb.png new file mode 100644 index 0000000000..0228d84b3c Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_music_thumb.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_play_music_bg.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_play_music_bg.png new file mode 100644 index 0000000000..9617c881d0 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_play_music_bg.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_reset_location_bg.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_reset_location_bg.png new file mode 100644 index 0000000000..59b0d95fd0 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_reset_location_bg.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_checked.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_checked.png new file mode 100755 index 0000000000..11d2ab6b31 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_checked.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_music_bg.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_music_bg.png new file mode 100644 index 0000000000..eeb3a04a44 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_music_bg.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_setting_view_bg.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_view_bg.png similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_setting_view_bg.png rename to OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxi_p_setting_view_bg.png diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_go2_list.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_go2_list.png new file mode 100644 index 0000000000..bf68468f3b Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_go2_list.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_go2_playing.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_go2_playing.png new file mode 100644 index 0000000000..1f10388ed7 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_go2_playing.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_greate_text.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_greate_text.png new file mode 100644 index 0000000000..159bd9d87d Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_greate_text.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_location_center_checked.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_location_center_checked.png new file mode 100644 index 0000000000..6ef5c257e9 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_location_center_checked.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_location_center_normal.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_location_center_normal.png new file mode 100644 index 0000000000..a21f27c4c6 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_location_center_normal.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg.png new file mode 100644 index 0000000000..77fc369149 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_middle.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_middle.png new file mode 100644 index 0000000000..c88126dfbd Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_middle.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_bottom.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_bottom.png new file mode 100755 index 0000000000..cf1cf89466 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_bottom.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_head.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_head.png new file mode 100755 index 0000000000..7bf877cbf0 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_head.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_setting_normal.png b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_setting_normal.png new file mode 100755 index 0000000000..3ac536ca3d Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_setting_normal.png differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_start_auto.webp b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_start_auto.webp new file mode 100644 index 0000000000..861c5be353 Binary files /dev/null and b/OCH/taxi/pcommon/src/main/res/drawable-nodpi/taxt_p_start_auto.webp differ diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_center_location_selector.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_center_location_selector.xml new file mode 100644 index 0000000000..cfdb76c305 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_center_location_selector.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml similarity index 100% rename from OCH/taxi/passenger/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml rename to OCH/taxi/pcommon/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_bottom.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_bottom.xml new file mode 100644 index 0000000000..7b53266cb2 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_bottom.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_item_bg.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_item_bg.xml new file mode 100644 index 0000000000..ebae6c7d27 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_item_bg.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_tag_bg.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_tag_bg.xml new file mode 100644 index 0000000000..ed9a6a094f --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_list_tag_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_seekbar_thumb.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_seekbar_thumb.xml new file mode 100644 index 0000000000..1f26865744 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_seekbar_thumb.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_selector.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_selector.xml new file mode 100644 index 0000000000..b5a51aed50 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_music_selector.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable/taxi_p_setting_selector.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_setting_selector.xml similarity index 64% rename from OCH/taxi/passenger/src/main/res/drawable/taxi_p_setting_selector.xml rename to OCH/taxi/pcommon/src/main/res/drawable/taxi_p_setting_selector.xml index 50e277d79a..a177cd6d27 100644 --- a/OCH/taxi/passenger/src/main/res/drawable/taxi_p_setting_selector.xml +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxi_p_setting_selector.xml @@ -1,10 +1,10 @@ - - - + + + - - + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/drawable/taxt_p_music_seekbar_style.xml b/OCH/taxi/pcommon/src/main/res/drawable/taxt_p_music_seekbar_style.xml new file mode 100644 index 0000000000..21b139e6e3 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/drawable/taxt_p_music_seekbar_style.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_evaluate.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_evaluate.xml new file mode 100644 index 0000000000..926249621d --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_evaluate.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_leftbar.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_leftbar.xml new file mode 100644 index 0000000000..3c0c76456f --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_leftbar.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music.xml new file mode 100644 index 0000000000..5060aadc50 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_list.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_list.xml new file mode 100644 index 0000000000..4a43d0676c --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_list.xml @@ -0,0 +1,36 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_list_item.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_list_item.xml new file mode 100644 index 0000000000..833d2494f3 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_list_item.xml @@ -0,0 +1,47 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_playing.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_playing.xml new file mode 100644 index 0000000000..85be1e3a15 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_music_playing.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml new file mode 100644 index 0000000000..36e55e319b --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_rightbar.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_setting_view.xml similarity index 94% rename from OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml rename to OCH/taxi/pcommon/src/main/res/layout/taxi_p_setting_view.xml index 8f467b442d..e83b88ef1c 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxi_p_setting_view.xml +++ b/OCH/taxi/pcommon/src/main/res/layout/taxi_p_setting_view.xml @@ -12,8 +12,8 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_95" android:layout_marginTop="@dimen/dp_98" - android:text="@string/taxi_p_setting_light" - android:textColor="@color/taxi_p_374968" + android:text="@string/taxi_cp_setting_light" + android:textColor="@color/taxi_cp_374968" android:textSize="@dimen/dp_36" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -57,7 +57,7 @@ android:layout_marginTop="@dimen/dp_154" android:layout_marginRight="@dimen/dp_113" android:gravity="right" - android:textColor="@color/taxi_p_303C52" + android:textColor="@color/taxi_cp_303C52" android:textSize="@dimen/dp_56" android:textStyle="bold" app:layout_constraintRight_toRightOf="parent" @@ -69,8 +69,8 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_95" android:layout_marginTop="@dimen/dp_129" - android:text="@string/taxi_p_setting_sound" - android:textColor="@color/taxi_p_374968" + android:text="@string/taxi_cp_setting_sound" + android:textColor="@color/taxi_cp_374968" android:textSize="@dimen/dp_36" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvSettingLight" /> @@ -116,7 +116,7 @@ android:gravity="right" android:textSize="@dimen/dp_56" android:textStyle="bold" - android:textColor="@color/taxi_p_303C52" + android:textColor="@color/taxi_cp_303C52" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/OCH/taxi/pcommon/src/main/res/values/colors.xml b/OCH/taxi/pcommon/src/main/res/values/colors.xml new file mode 100644 index 0000000000..e6f45a4f3b --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/values/colors.xml @@ -0,0 +1,19 @@ + + + + #253A5A + #303C52 + #425877 + #576887 + #4DFFFFFF + #44488ED0 + #1A488ED0 + #598CFF + #2CBFFC + #1060ff + #96a5c2 + #374968 + #131415 + #80FFFFFF + + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/res/values/strings.xml b/OCH/taxi/pcommon/src/main/res/values/strings.xml new file mode 100644 index 0000000000..aa556a2245 --- /dev/null +++ b/OCH/taxi/pcommon/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + + 亮度 + 音量 + \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/navi/auto/TaxiMapDirectionView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/navi/auto/TaxiMapDirectionView.kt index 9fd62f28d6..692760592f 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/navi/auto/TaxiMapDirectionView.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/navi/auto/TaxiMapDirectionView.kt @@ -68,7 +68,7 @@ class TaxiMapDirectionView @JvmOverloads constructor( initAMapView() // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, this) } override fun onDetachedFromWindow() { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingFragmentViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingFragmentViewModel.kt index 2d6e900f96..839d5a5bb6 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingFragmentViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingFragmentViewModel.kt @@ -6,6 +6,7 @@ import com.mogo.commons.AbsMogoApplication import com.mogo.commons.module.status.MogoStatusManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.och.common.module.map.AmapNaviToDestinationModel import com.mogo.och.taxi.base.BaseViewModel @@ -38,7 +39,7 @@ class TaxiRoutingFragmentViewModel : BaseViewModel { DebugView.printInfoMsg("[选择任务] 跳转到选择任务列表") val intent = Intent(mContext, TaxiRoutingChooseLineActivity::class.java) - mContext?.startActivity(intent) + ActivityUtils.startActivity(intent) } is TaxiRoutingUiIntent.ShowRoutingTask -> { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingModel.kt index f4d58857aa..c857f4495e 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingModel.kt @@ -23,6 +23,7 @@ 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.manager.autopilotmanager.OCHAdasAbilityManager +import com.mogo.och.common.module.utils.OCHThreadPoolManager import com.mogo.och.taxi.bean.ContrailBean import com.mogo.och.taxi.bean.EndGrayContrailTaskReq import com.mogo.och.taxi.bean.EndGrayTaskFeedbackType @@ -36,6 +37,7 @@ import com.mogo.och.taxi.callback.ITaxiRoutingCallback import com.mogo.och.taxi.constant.TaxiUnmannedConst import com.mogo.och.taxi.network.TaxiRoutingServiceManager import com.mogo.och.taxi.ui.debug.DebugView +import com.zhjt.mogo.adas.data.AdasConstants import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg import java.util.concurrent.ConcurrentHashMap @@ -90,7 +92,7 @@ object TaxiRoutingModel { //MAP到站监听 private val mMogoAutopilotStatusListener: IMoGoAutopilotStatusListener = object : IMoGoAutopilotStatusListener { - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { } override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { @@ -143,52 +145,54 @@ object TaxiRoutingModel { if (null == currentLocation) return val endSite = currentGrayLineBean?.endSite ?: return - val endLon = endSite.gcjLon - val endLat = endSite.gcjLat + OCHThreadPoolManager.getsInstance().locationExecute { + val endLon = endSite.gcjLon + val endLat = endSite.gcjLat - val distance = CoordinateUtils.calculateLineDistance( - endLon, - endLat, - currentLocation.longitude, - currentLocation.latitude - ).toDouble() - CallerLogger.i(TAG, "judgeEndStation() distance = $distance") - //1、当前位置和站点围栏15m内 - if (distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) { - //2、开始计算当前位置和站点的向量角度 < 90度 未经过 >90度 经过 - val stationAngle = DrivingDirectionUtils.getDegreeOfCar2Poi( - currentLocation.longitude, - currentLocation.latitude, + val distance = CoordinateUtils.calculateLineDistance( endLon, endLat, - currentLocation.heading.toInt() + currentLocation.longitude, + currentLocation.latitude ).toDouble() - CallerLogger.i(TAG, "judgeEndStation() stationAngle = $stationAngle") + CallerLogger.i(TAG, "judgeEndStation() distance = $distance") + //1、当前位置和站点围栏15m内 + if (distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) { + //2、开始计算当前位置和站点的向量角度 < 90度 未经过 >90度 经过 + val stationAngle = DrivingDirectionUtils.getDegreeOfCar2Poi( + currentLocation.longitude, + currentLocation.latitude, + endLon, + endLat, + currentLocation.heading.toInt() + ).toDouble() + CallerLogger.i(TAG, "judgeEndStation() stationAngle = $stationAngle") - //3、刚过站且过站距离在15m内, 提交到站 - if (stationAngle > 90) { - CallerLogger.i(TAG, "judgeEndStation() = 刚过站且在15m内") - DebugView.printInfoMsg( - "[自车定位围栏] 触发围栏, endSiteId=${currentGrayLineBean?.endSite?.siteId}, endSiteName=${currentGrayLineBean?.endSite?.siteName}, lineId=${currentGrayLineBean?.lineId},围栏范围:${TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE}米 刚过站且在15m内" - ) - mTaxiRoutingCallbackMap.forEach { - val listener = it.value - listener.onGDMapArriveAtEndStation(currentGrayId) - } - } else { - // 4、 没有过站距离小于15m 速度小于0.3(根据M1来的模数 可能要调) - if (currentLocation.gnssSpeed < 0.3) { - CallerLogger.i( - TAG, - "judgeEndStation() = 没有过站、速度基本为零且在15m内" - ) + //3、刚过站且过站距离在15m内, 提交到站 + if (stationAngle > 90) { + CallerLogger.i(TAG, "judgeEndStation() = 刚过站且在15m内") DebugView.printInfoMsg( - "[自车定位围栏] 触发围栏, endSiteId=${currentGrayLineBean?.endSite?.siteId}, endSiteName=${currentGrayLineBean?.endSite?.siteName}, lineId=${currentGrayLineBean?.lineId},围栏范围:${TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE}米 没有过站、速度基本为零且在15m内" + "[自车定位围栏] 触发围栏, endSiteId=${currentGrayLineBean?.endSite?.siteId}, endSiteName=${currentGrayLineBean?.endSite?.siteName}, lineId=${currentGrayLineBean?.lineId},围栏范围:${TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE}米 刚过站且在15m内" ) mTaxiRoutingCallbackMap.forEach { val listener = it.value listener.onGDMapArriveAtEndStation(currentGrayId) } + } else { + // 4、 没有过站距离小于15m 速度小于0.3(根据M1来的模数 可能要调) + if (currentLocation.gnssSpeed < 0.3) { + CallerLogger.i( + TAG, + "judgeEndStation() = 没有过站、速度基本为零且在15m内" + ) + DebugView.printInfoMsg( + "[自车定位围栏] 触发围栏, endSiteId=${currentGrayLineBean?.endSite?.siteId}, endSiteName=${currentGrayLineBean?.endSite?.siteName}, lineId=${currentGrayLineBean?.lineId},围栏范围:${TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE}米 没有过站、速度基本为零且在15m内" + ) + mTaxiRoutingCallbackMap.forEach { + val listener = it.value + listener.onGDMapArriveAtEndStation(currentGrayId) + } + } } } } @@ -197,7 +201,7 @@ object TaxiRoutingModel { fun addGDMapCurrentLocationListener() { //定位监听, 传false是高德坐标系 10 -> 100ms一次 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 5, mMapLocationListener) } fun removeGDMapCurrentLocationListener() { diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt index 8b29762713..f04a93a918 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt @@ -53,6 +53,7 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint import com.mogo.och.common.module.map.AmapNaviToDestinationModel import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations +import com.mogo.och.common.module.utils.OCHThreadPoolManager import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.bean.PrepareTaskRespBean import com.mogo.och.taxi.bean.QueryCarOrderByNoRespBean @@ -76,6 +77,7 @@ import com.mogo.och.taxi.ui.debug.DebugView import com.mogo.och.taxi.utils.RxJavaUtils import com.mogo.och.taxi.utils.TaxiAnalyticsManager import com.mogo.och.taxi.utils.TaxiTrajectoryManager +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.service.chain.ChainLog import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers @@ -214,7 +216,7 @@ object TaxiTaskModel { // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 CallerAutoPilotStatusListenerManager.addListener(TAG, mMogoAutopilotStatusListener) //定位监听, 传false是高德坐标系 10 -> 100ms一次 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 5, mMapLocationListener) //2021.11.1 自动驾驶路线规划接口 CallerPlanningRottingListenerManager.addListener(TAG, mMogoAutopilotPlanningListener) //开启自驾后 异常信息返回 @@ -275,7 +277,7 @@ object TaxiTaskModel { private val mMogoAutopilotStatusListener: IMoGoAutopilotStatusListener = object : IMoGoAutopilotStatusListener { - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { DebugView.printInfoMsg( "[域控连接状态变化] status=$status, reason=${ if (TextUtils.isEmpty( @@ -415,17 +417,19 @@ object TaxiTaskModel { //位置变化时,通过围栏判断是否到达x点 if (null == mogoLocation) return - if (mDriveToNearestStationTask != null) { - judgeDriveToNearestStationTaskStation(mDriveToNearestStationTask, mogoLocation) - } + OCHThreadPoolManager.getsInstance().locationExecute { + if (mDriveToNearestStationTask != null) { + judgeDriveToNearestStationTaskStation(mDriveToNearestStationTask, mogoLocation) + } - if (checkCurrentTaskCondition() - && QueryCurrentTaskRespBean.isTaskStartTaskType(mCurrentTaskWithOrder) - ) { - judgeTaskEndSiteStation(mogoLocation) - } + if (checkCurrentTaskCondition() + && QueryCurrentTaskRespBean.isTaskStartTaskType(mCurrentTaskWithOrder) + ) { + judgeTaskEndSiteStation(mogoLocation) + } - mControllerStatusCallback?.onCarLocationChanged(mogoLocation) + mControllerStatusCallback?.onCarLocationChanged(mogoLocation) + } } } diff --git a/OCH/taxi/unmanned-driver/src/main/res/drawable/bad_case_selector_och.xml b/OCH/taxi/unmanned-driver/src/main/res/drawable/bad_case_selector_och.xml index fbc6c83a08..9f1b03ad24 100755 --- a/OCH/taxi/unmanned-driver/src/main/res/drawable/bad_case_selector_och.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/drawable/bad_case_selector_och.xml @@ -1,8 +1,6 @@ - - + - \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml b/OCH/taxi/unmanned-driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml index 15d6e4cec9..18cf61238d 100755 --- a/OCH/taxi/unmanned-driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml +++ b/OCH/taxi/unmanned-driver/src/main/res/drawable/taxi_operation_status_bg_selector.xml @@ -1,8 +1,6 @@ - - - - + + \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/build.gradle b/OCH/taxi/unmanned-passenger/build.gradle index 1a3fde2f56..cff4ee3253 100644 --- a/OCH/taxi/unmanned-passenger/build.gradle +++ b/OCH/taxi/unmanned-passenger/build.gradle @@ -57,9 +57,10 @@ dependencies { implementation rootProject.ext.dependencies.amapnavi3dmap implementation rootProject.ext.dependencies.amapsearch - implementation project(":OCH:common:common") +// implementation project(":OCH:common:common") compileOnly project(":libraries:mogo-map") implementation project(':core:mogo-core-res') + implementation project(':OCH:taxi:pcommon') } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java index e0fafca338..ae1351af5f 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java @@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentManager; import com.alibaba.android.arouter.facade.annotation.Route; import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; -import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; @@ -37,14 +36,6 @@ public class MogoOCHTaxiPassenger implements IMoGoFunctionProvider { CallerLogger.d(M_TAXI_P + TAG, "init"); } - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - private void stepIntoVrMode() { - CallerLogger.d(M_TAXI_P + TAG, "进入vr模式"); - CallerMoGoUiSettingManager.INSTANCE.stepInNightMode();//夜间模式 状态栏字体颜色变黑 - } - private void showFragment() { FragmentManager supportFragmentManager = mActivity.getSupportFragmentManager(); if (ochTaxiPassengerFragment == null) { diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java index 8f8f890425..a780bbff01 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java @@ -1,6 +1,7 @@ package com.mogo.och.taxi.passenger.bean; import com.mogo.eagle.core.data.BaseData; +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean; import java.util.List; import java.util.Objects; @@ -46,9 +47,7 @@ public class TaxiPassengerOrdersInServiceQueryRespBean extends BaseData { } } - public static class OrderBean { - public String orderNo;// 订单号 - public int orderStatus;//订单状态 + public static class OrderBean extends BaseOrderBean { public String bookingUserPhone;// 用户手机号 public int passengerSize;//乘客人数 public SiteBean orderStartSite;//站点-起点 diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt index 9ca8544288..96ac523006 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt @@ -9,8 +9,6 @@ import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBea * Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等) */ interface IOCHTaxiPassengerOrderStatusCallback { - // 当前进行单状态变更:新到进行中订单、进行中单状态变更 - fun onCurrentOrderStatusChanged(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?){} // 当前位置距离上车点的距离(米)、预估时间(秒) fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int){} diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonCallback.java b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonCallback.java deleted file mode 100644 index 937b4913b9..0000000000 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonCallback.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -public interface ITaxiPassengerCommonCallback { - void onCommonCallback(); -} diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonValueCallback.java b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonValueCallback.java deleted file mode 100644 index 157925b458..0000000000 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerCommonValueCallback.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -public interface ITaxiPassengerCommonValueCallback { - void onCommonCallback(T t); -} diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt deleted file mode 100644 index 19dfedc935..0000000000 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.mogo.och.taxi.passenger.constant - -/** - * Created on 2021/12/7 - * - * * Old code:START - * 未派单 0 - * 去往上车站点 1 - * 车辆已到达上车站点 2 - * 乘客已到达上车站点 3 - * 去往下车站点 4 - * 到达下车站点 5 - * 已完成 6 - * 已取消 7 - * Old code:END - * - * 0 订单创建(为派单), - * 10 已派上司机(司机去往上车点), - * 20 司机到达上车点, - * 30 乘客到达上车点, - * 40 服务中(去往目的地), - * 50 到达目的地, - * 60 已完成, - * 70 已取消 - */ -enum class TaxiPassengerOrderStatusEnum(val code: Int) { - None( 0 ), - OnTheWayToStart( 10), - ArriveAtStart( 20), - UserArriveAtStart( 30), - OnTheWayToEnd( 40), - ArriveAtEnd( 50), - JourneyCompleted(60),//行程完成 - Cancel( 70); - - companion object { - @JvmStatic - fun valueOf(code: Int): TaxiPassengerOrderStatusEnum { - for (value in values()) { - if (value.code == code) { - return value - } - } - return None - } - } -} \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt index 42a9fae2b4..87bac6335a 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt @@ -16,7 +16,7 @@ import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt index 7bd7c8b84a..2a88f04994 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt @@ -37,9 +37,10 @@ import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst.Companion.TaskType_NONE import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst.Companion.TaskType_VIRTUAL -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum.Companion.valueOf +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum.Companion.valueOf import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager import java.util.concurrent.ConcurrentHashMap @@ -396,13 +397,9 @@ object TaxiPassengerModel { fun orderStatusChange() { orderStatusChangeInner() - if (mOrderStatusCallbackMap.isNotEmpty()) { - d(M_TAXI_P + TAG, "最新的状态-->${curOrderStatus}") - OchChainLogManager.writeChainLog(currentOCHOrder.toString(),"最新的状态-->${curOrderStatus}") - for (callback in mOrderStatusCallbackMap.values) { - callback.onCurrentOrderStatusChanged(currentOCHOrder) - } - } + d(M_TAXI_P + TAG, "最新的状态-->${curOrderStatus}") + OchChainLogManager.writeChainLog(currentOCHOrder.toString(),"最新的状态-->${curOrderStatus}") + OrderModel.invokeListener(currentOCHOrder) } private fun orderStatusChangeInner() { diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt index 693f6340d6..dc9a604caf 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt @@ -10,16 +10,20 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.model.TaxiPassengerModel import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel /** * @author: wangmingjun * @date: 2022/3/4 */ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : - Presenter(view), IOCHTaxiPassengerOrderStatusCallback { + Presenter(view), IOCHTaxiPassengerOrderStatusCallback, + OrderListener { init { TaxiPassengerModel.init(AbsMogoApplication.getApp()) @@ -41,21 +45,12 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : private fun initListeners() { TaxiPassengerModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", this) + OrderModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", this) } private fun releaseListeners() { TaxiPassengerModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", null) - } - - override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?) { - updateOrderView(order) - } - - override fun onCurrentOrderDistToEndChanged( - meters: Long, - timeInSecond: Long, - stationDistance: Int - ) { + OrderModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", null) } private fun updateOrderView(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?) { @@ -63,7 +58,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : when (TaxiPassengerModel.curOrderStatus) { TaxiPassengerOrderStatusEnum.OnTheWayToStart -> { // 10 接驾中 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(isShow = false) overMapViewClear() @@ -98,7 +93,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : TaxiPassengerOrderStatusEnum.JourneyCompleted -> { // 60 行程完成 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(false) overMapViewClear() @@ -106,7 +101,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : TaxiPassengerOrderStatusEnum.Cancel -> { // 70 取消订单 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(isShow = false) overMapViewClear() @@ -114,7 +109,7 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : TaxiPassengerOrderStatusEnum.None -> { // 00 默认状态,在不同任务之间切换时使用 - mView?.showOrHideCheckAndStartAutopilotView(2) + mView?.showOrHideCheckAndStartAutopilotView(3) mView?.showOrHideArrivedEndLayout(isShow = false) overMapViewClear() @@ -153,4 +148,8 @@ class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : companion object { private val TAG = BaseTaxiPassengerPresenter::class.java.simpleName } + + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { + updateOrderView(TaxiPassengerModel.currentOCHOrder) + } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt index 71d1752033..d6aff68663 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt @@ -12,34 +12,38 @@ import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.api.hmi.view.IStatusViewLayout import com.mogo.eagle.core.function.call.hmi.CallerHmiManager -import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P import com.mogo.eagle.core.utilcode.util.DeviceUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.listener.IMogoMapListener +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiStateManager import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter import com.mogo.och.taxi.passenger.ui.arrived.ArrivedView +import com.mogo.och.taxi.passenger.ui.bar.LeftBarView import com.mogo.och.taxi.passenger.ui.bottom.BottomBar import com.mogo.och.taxi.passenger.ui.checkstartautopilot.ChekAndStartAutopilotView +import com.mogo.och.taxi.passenger.ui.bar.RightBarView import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView import io.reactivex.disposables.Disposable -import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.aciv_xiaozhi_normal import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.arrivedView import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.bottom import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.chekAndStartAutopilotView -import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.ck_setting import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.clSettingView +import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.evaluate import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.infoVideoView import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.itinerary +import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.lbv_go2_center import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.mapBizView +import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.mv_music_info import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.overMapView import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.pcnActionView +import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.rbv_setting_music import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.romaDistanceView import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.romaPView -import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.rv_location_center import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.speedView /** @@ -54,10 +58,9 @@ class TaxiPassengerBaseFragment() : MvpFragment(), IMogoMapListener, TaxiPassengerTaxiView { - private var tipXiaoZhiDelay: Disposable?=null - private var statusBarView: StatusBarView? = null + private var tipXiaoZhiDelay: Disposable?=null override fun getLayoutId(): Int { return R.layout.taxt_u_p_base_fragment @@ -87,11 +90,36 @@ class TaxiPassengerBaseFragment() : } + private fun settingAndMusicListener() { + rbv_setting_music.setOrderIdCallback(object : RightBarView.RightBarCallback{ + override fun setSettingAndMusicShow(settingShow: Boolean, musicShow: Boolean) { + clSettingView.visibility = if(settingShow) View.VISIBLE else View.GONE + mv_music_info.visibility = if(musicShow) View.VISIBLE else View.GONE + } + + }) + lbv_go2_center.setOrderIdCallback(object : LeftBarView.LeftBarCallback{ + override fun setGo2CenterClick() { + when (bottom.getCurrentPage()) { + BottomBar.SelectView.PRECISIONMAP -> { + //切换到地图中间 + mapBizView.getUI()?.let { + it.changeMapVisualAngle(it.getVrAngleDefaultMode(), null) + } + } + BottomBar.SelectView.OVERMAPVIEW -> { + overMapView.displayCustomOverView() + } + + else -> {} + } + } + + }) + } + private fun initListener() { - ck_setting.isChecked = false - ck_setting.setOnCheckedChangeListener { _, isChecked -> - clSettingView.visibility = if(isChecked) View.VISIBLE else View.GONE - } + settingAndMusicListener() bottom.setOverMapApplyClick(object : BottomBar.ApplyClickLintener{ override fun onApplyClick(selectItem: BottomBar.SelectView) { when (selectItem) { @@ -100,7 +128,6 @@ class TaxiPassengerBaseFragment() : mapBizView.visibility = View.VISIBLE presenter?.setItineraryVisibility() speedView.visibility = View.VISIBLE - ck_setting.visibility = View.VISIBLE if (DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()) { romaPView.updateVisible(true) romaDistanceView.visibility = View.VISIBLE @@ -108,7 +135,8 @@ class TaxiPassengerBaseFragment() : romaPView.updateVisible(false) romaDistanceView.visibility = View.GONE } - rv_location_center.visibility = View.VISIBLE + rbv_setting_music.setShowOnlySetting(0) + lbv_go2_center.visibility = View.VISIBLE pcnActionView.visibility = View.VISIBLE CallerHmiManager.showTrafficLightView() infoVideoView.visibility = View.GONE @@ -119,10 +147,10 @@ class TaxiPassengerBaseFragment() : mapBizView.visibility = View.GONE presenter?.setItineraryVisibility() speedView.visibility = View.VISIBLE - ck_setting.visibility = View.VISIBLE romaPView.updateVisible(false) romaDistanceView.visibility = View.GONE - rv_location_center.visibility = View.VISIBLE + rbv_setting_music.setShowOnlySetting(0) + lbv_go2_center.visibility = View.VISIBLE pcnActionView.visibility = View.VISIBLE CallerHmiManager.showTrafficLightView() infoVideoView.visibility = View.GONE @@ -133,11 +161,10 @@ class TaxiPassengerBaseFragment() : mapBizView.visibility = View.GONE presenter?.setItineraryVisibility() speedView.visibility = View.GONE - ck_setting.visibility = View.GONE - ck_setting.isChecked = false + rbv_setting_music.setShowOnlySetting(1) + lbv_go2_center.visibility = View.GONE romaPView.updateVisible(false) romaDistanceView.visibility = View.GONE - rv_location_center.visibility = View.GONE pcnActionView.visibility = View.GONE CallerHmiManager.hideTrafficLightView() infoVideoView.visibility = View.VISIBLE @@ -150,50 +177,28 @@ class TaxiPassengerBaseFragment() : } }) - rv_location_center.onClick { - when (bottom.getCurrentPage()) { - BottomBar.SelectView.PRECISIONMAP -> { - mapBizView.getUI()?.let { - it.changeMapVisualAngle(it.getVrAngleDefaultMode(), null) - } - } - BottomBar.SelectView.OVERMAPVIEW -> { - overMapView.displayCustomOverView() - } - - else -> {} - } - - } arrivedView.arrivedVisilityChangeListenr = object :ArrivedView.ArrivedVisilityChangeListenr{ override fun isShow(show: Boolean) { CallerLogger.d(M_TAXI_P + TAG, "arrived ${show}") if(arrivedView.visibility==View.GONE&&chekAndStartAutopilotView.visibility==View.GONE){ - showOrHide(true) - aciv_xiaozhi_normal.setZhiEnable(true) + showOrHide(true,"到达目的地页面隐藏") + ZhiStateManager.setZhiEnable(true) }else{ - aciv_xiaozhi_normal.setZhiEnable(false) + ZhiStateManager.setZhiEnable(false) } } } - chekAndStartAutopilotView.checkAndStartVisilityChangeListenr = object :ChekAndStartAutopilotView.CheckAndStartVisilityChangeListenr{ + chekAndStartAutopilotView.checkAndStartVisilityChangeListenr = object : ChekAndStartAutopilotView.CheckAndStartVisilityChangeListenr{ override fun isShow(show: Boolean) { CallerLogger.d(M_TAXI_P + TAG, "check and startAutopilot ${show}") if(arrivedView.visibility==View.GONE&&chekAndStartAutopilotView.visibility==View.GONE){ - showOrHide(true) - aciv_xiaozhi_normal.setZhiEnable(true) + showOrHide(true,"手机号check+startautopilot页面隐藏") + ZhiStateManager.setZhiEnable(true) }else{ - aciv_xiaozhi_normal.setZhiEnable(false) + ZhiStateManager.setZhiEnable(false) } } } - view?.viewTreeObserver?.addOnWindowFocusChangeListener { - if(it){ - CallerLogger.d(M_TAXI_P + TAG, "windows获取焦点") - }else{ - CallerLogger.d(M_TAXI_P + TAG, "window失去焦点") - } - } } override fun onResume() { @@ -256,58 +261,32 @@ class TaxiPassengerBaseFragment() : } } - fun setOverMapDebug(){ - overMapView.setDebugMode(true) - showOrHide(true) - } - /** - * 显示或者隐藏到达乘客站点的洁面 - * ① 取消订单 可有可无 - * ② 到达上车点 隐藏到达终点的页面(上一个订单没有评价) - * ③ 到达目的地 显示到达终点的页面 - * ④ debug 使用 - * - * @param isShow true 展示 false 隐藏 - */ - fun showOrHideArrivedEndLayout(isShow: Boolean) { - chekAndStartAutopilotView.visibility = View.GONE - if (isShow) { - exitFullVideoScreen(true) - arrivedView.aniArrived(true) - showOrHide(false) - RxUtils.createSubscribe(500) { - arrivedView.setDataAndStartAnimation() - VoiceNotice.showNotice("已到达目的地,带好随身物品,右侧下车更安全!期待下次再见", AIAssist.LEVEL2) - } - } else { - if(arrivedView.visibility!=View.GONE) { - showOrHide(true) - arrivedView.aniArrived(false) - } - } - } fun showOrHideCheckAndStartAutopilotView(status:Int){ - arrivedView.visibility = View.GONE - when (status) { - 0 -> { - if(chekAndStartAutopilotView.visibility == View.GONE){ - showOrHide(false) + UiThreadHandler.post { + arrivedView.visibility = View.GONE + when (status) { + 0 -> { + if (chekAndStartAutopilotView.visibility == View.GONE) { + showOrHide(false,"显示手机号check") + } + chekAndStartAutopilotView.aniCheckAndStartAutopilot(true, 0) } - chekAndStartAutopilotView.aniCheckAndStartAutopilot(true,0) - } - 1 -> { - if(chekAndStartAutopilotView.visibility == View.GONE){ - showOrHide(false) + 1 -> { + if (chekAndStartAutopilotView.visibility == View.GONE) { + showOrHide(false,"显示启动自动驾驶") + } + chekAndStartAutopilotView.aniCheckAndStartAutopilot(true, 1) } - chekAndStartAutopilotView.aniCheckAndStartAutopilot(true,1) + 2 -> { + chekAndStartAutopilotView.aniCheckAndStartAutopilot(false, 2) + } + 3 -> { + chekAndStartAutopilotView.visibility = View.GONE + } + else -> {} } - 2 -> { - chekAndStartAutopilotView.aniCheckAndStartAutopilot(false,2) - chekAndStartAutopilotView.resetCheckView() - } - else -> {} } } @@ -322,12 +301,47 @@ class TaxiPassengerBaseFragment() : } + fun setOverMapDebug(){ + overMapView.setDebugMode(true) + showOrHide(true,"Debug 按钮") + } + fun setEvaluateView(){ + evaluate.visibility = View.VISIBLE + } + + /** + * 显示或者隐藏到达乘客站点的洁面 + * ① 取消订单 可有可无 + * ② 到达上车点 隐藏到达终点的页面(上一个订单没有评价) + * ③ 到达目的地 显示到达终点的页面 + * ④ debug 使用 + * + * @param isShow true 展示 false 隐藏 + */ + fun showOrHideArrivedEndLayout(isShow: Boolean) { + //chekAndStartAutopilotView.visibility = View.GONE + evaluate.visibility = View.GONE + if (isShow) { + exitFullVideoScreen(true) + arrivedView.aniArrived(true) + showOrHide(false,"显示到达目的地") + RxUtils.createSubscribe(500) { + arrivedView.setDataAndStartAnimation() + VoiceNotice.showNotice("已到达目的地,带好随身物品,右侧下车更安全!期待下次再见", AIAssist.LEVEL2) + } + } else { + if(arrivedView.visibility!=View.GONE) { + showOrHide(true, "隐藏到达目的地") + arrivedView.aniArrived(false) + } + } + } private fun exitFullVideoScreen(resetVideoPlayer: Boolean) { infoVideoView.exitFullScreenMode(resetVideoPlayer) } - fun showOrHideOverMapView(){ + fun showOrHideOverMapView() { CallerLogger.d(M_TAXI_P + TAG, "showOrHideOverMapView 清理轨迹和站点") overMapView?.clearV2XMarkers() overMapView?.clearCustomPolyline() @@ -337,7 +351,8 @@ class TaxiPassengerBaseFragment() : bottom.setCheckIndex(BottomBar.SelectView.OVERMAPVIEW) } - private fun showOrHide(isShow: Boolean){ + private fun showOrHide(isShow: Boolean,type:String){ + CallerLogger.d(M_TAXI_P + TAG, "类型:$type") val animatorSet = AnimatorSet() val allAnimator = mutableListOf() allAnimator.addAll(aniStatusBar(isShow)) @@ -346,7 +361,6 @@ class TaxiPassengerBaseFragment() : allAnimator.addAll(aniSpeedSettingRow(isShow,speedView)) allAnimator.addAll(aniSpeedSettingRow(isShow,romaPView)) allAnimator.addAll(aniSpeedSettingRow(isShow,romaDistanceView)) - allAnimator.addAll(aniSpeedSettingRow(isShow,ck_setting)) allAnimator.addAll(aniOrderInfo(isShow)) animatorSet.playTogether(allAnimator) @@ -461,13 +475,11 @@ class TaxiPassengerBaseFragment() : return statusBar } - fun preLoadArrivedImages() { arrivedView.preLoadImages() } - companion object { @JvmField val TAG = "TaxiPassengerBaseFragment" diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt index 4ecf8eac00..2c0e91ecd5 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt @@ -13,6 +13,7 @@ import com.mogo.eagle.core.utilcode.kotlin.onClick 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.scene.SceneConstant +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiViewmanager import com.mogo.och.common.module.utils.BigFrameAnimatorContainer import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.taxi.passenger.R @@ -70,10 +71,12 @@ class ArrivedView : WindowRelativeLayout, ArrivedViewModel.ArrivedViewCallback { v_video_right_rear_view.resetView() aniSpeedSettingRow() viewModel.setEndInfo() + ZhiViewmanager.showListeningAni(ZhiViewmanager.loveAni) } else { v_video_right_rear_view.resetView() taxiPxiaozhiLove = null RxUtils.disposeSubscribe(subscribe) + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni) } arrivedVisilityChangeListenr?.isShow(isVisible) } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt index 8a972f36a9..b3f55df635 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotView.kt @@ -2,22 +2,29 @@ package com.mogo.och.taxi.passenger.ui.checkstartautopilot import android.animation.Animator import android.animation.AnimatorListenerAdapter +import android.animation.AnimatorSet import android.animation.ObjectAnimator import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View +import android.view.animation.LinearInterpolator import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.findViewTreeViewModelStoreOwner import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.xiaozhimanager.ZhiViewmanager import com.mogo.och.common.module.utils.BigFrameAnimatorContainer import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.ui.arrived.ArrivedView +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout -import kotlinx.android.synthetic.main.taxt_u_p_base_fragment.chekAndStartAutopilotView import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.aciv_check_autopilot +import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.aciv_start_autopilt_success_ani +import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.aciv_start_autopilt_success_bg import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.checkPhoneNumber import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.startAutopilotClose import kotlinx.android.synthetic.main.taxt_u_p_check_startautopilot.view.startAutopilotView @@ -53,6 +60,10 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, var checkAndStartVisilityChangeListenr: CheckAndStartVisilityChangeListenr?=null + private var waitCount = 0 + private var maxWaitCount = 3 + + private fun initView(context: Context) { d(SceneConstant.M_TAXI_P + TAG, "initView") @@ -66,6 +77,7 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, override fun onVisibilityAggregated(isVisible: Boolean) { super.onVisibilityAggregated(isVisible) if (isVisible) { + waitCount = 0 aniCheck2StartAutopilotView = BigFrameAnimatorContainer(R.array.check2startautopilt, 39, aciv_check_autopilot, true) aniCheck2StartAutopilotView?.mOnAnimationStoppedListener = object : BigFrameAnimatorContainer.OnAnimationStoppedListener{ @@ -73,8 +85,15 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, startAutopilotView.showStartAutopilot() } } + ZhiViewmanager.showListeningAni(ZhiViewmanager.beltAni) + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") } else { + aniCheck2StartAutopilotView?.stop() + aniCheck2StartAutopilotView?.release() aniCheck2StartAutopilotView = null + ZhiViewmanager.showListeningAni(ZhiViewmanager.normalAni) } checkAndStartVisilityChangeListenr?.isShow(isVisible) } @@ -105,16 +124,17 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, } override fun dismissWindow() { - visibility = View.GONE - } - - fun resetCheckView() { - checkPhoneNumber.visibility = View.VISIBLE - startAutopilotView.visibility = View.GONE - startAutopilotClose.visibility = View.GONE + } + /** + * @param show true 展示 false 隐藏 + * @param status 0 展示手机号验证 + * 1 展示启动自动驾驶 + * 2 隐藏页面 + */ fun aniCheckAndStartAutopilot(show:Boolean,status:Int){ + Log.d(SceneConstant.M_TAXI_P + TAG,"参数${show}--${show}---订单${TaxiPassengerModel.currentOCHOrder?.orderNo}-----订单状态:${TaxiPassengerModel.currentOCHOrder?.orderStatus}") val alphaStart: Float val alphaEnd: Float if(show){ @@ -124,10 +144,13 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, }else{ alphaStart = 1f alphaEnd = 0.0f - visibility = View.GONE + //visibility = View.GONE } when (status) { 0 -> { + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") checkPhoneNumber.visibility = View.VISIBLE startAutopilotView.visibility = View.GONE startAutopilotClose.visibility = View.GONE @@ -136,22 +159,80 @@ class ChekAndStartAutopilotView : WindowRelativeLayout, }.start() } 1 -> { + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") checkPhoneNumber.visibility = View.GONE startAutopilotView.visibility = View.VISIBLE startAutopilotClose.visibility = View.VISIBLE aniCheck2StartAutopilotView?.start() } 2 -> { - checkPhoneNumber.visibility = View.VISIBLE - startAutopilotView.visibility = View.GONE - startAutopilotClose.visibility = View.GONE - return + if (startAutopilotView.canGonethisView) {// 启动动画已经播放最少1遍 + // 启动公司logo动画 + startAnimal() + }else { + UiThreadHandler.postDelayed({ + startAnimal() + }, 2000) + } } else -> {} } } + private fun startAnimal(){ + val startAutopilotSuccessBgAni = ObjectAnimator.ofFloat(aciv_start_autopilt_success_bg, "alpha", 0f, 1f) + val startAutopilotSuccessLogoAni = ObjectAnimator.ofFloat(aciv_start_autopilt_success_ani, "alpha", 0f, 1f) + val animatorSetCompat = AnimatorSet() + animatorSetCompat.playTogether(startAutopilotSuccessBgAni,startAutopilotSuccessLogoAni) + animatorSetCompat.duration=700 + animatorSetCompat.interpolator = LinearInterpolator() + animatorSetCompat.addListener(object :AnimatorListenerAdapter(){ + override fun onAnimationEnd(animation: Animator) { + super.onAnimationEnd(animation) + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") + } + override fun onAnimationStart(animation: Animator) { + UiThreadHandler.postDelayed({ + val aniStartAutopilotSuccessAni = + BigFrameAnimatorContainer(R.array.taxi_p_start_autopilot_fail, 20, aciv_start_autopilt_success_ani, true) + aniStartAutopilotSuccessAni.setOnAnimStopListener(object : + BigFrameAnimatorContainer.OnAnimationStoppedListener{ + override fun AnimationStopped() { + ThreadUtils.runOnUiThread { + checkPhoneNumber.visibility = View.VISIBLE + startAutopilotView.visibility = View.GONE + startAutopilotClose.visibility = View.GONE + + this@ChekAndStartAutopilotView.animate().alpha(0f).setListener(object : + AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + super.onAnimationEnd(animation) + this@ChekAndStartAutopilotView.visibility = View.GONE + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") + } + + override fun onAnimationCancel(animation: Animator) { + super.onAnimationCancel(animation) + this@ChekAndStartAutopilotView.visibility = View.GONE + aciv_start_autopilt_success_bg.alpha = 0f + aciv_start_autopilt_success_ani.alpha = 0f + d(SceneConstant.M_TAXI_P + TAG, "透明度${aciv_start_autopilt_success_bg.alpha}---${aciv_start_autopilt_success_ani.alpha}") + } + }).duration = 1000L + } + } + }) + aniStartAutopilotSuccessAni.start()},350) + } + }) + animatorSetCompat.start() + } + interface CheckAndStartVisilityChangeListenr{ fun isShow(show: Boolean) } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt index e1a04314dd..888f729b85 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/ChekAndStartAutopilotViewModel.kt @@ -1,27 +1,36 @@ package com.mogo.och.taxi.passenger.ui.checkstartautopilot import androidx.lifecycle.ViewModel -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel -class ChekAndStartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback { +class ChekAndStartAutopilotViewModel : ViewModel(), OrderListener { private val TAG = ChekAndStartAutopilotViewModel::class.java.simpleName private var viewCallback: CheckCallback? = null init { - TaxiPassengerModel.setOrderStatusCallback(TAG,this) + OrderModel.setOrderStatusCallback(TAG,this) } fun setStartAutopilotCallback(viewCallback: CheckCallback) { this.viewCallback = viewCallback } - override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?) { - super.onCurrentOrderStatusChanged(order) + override fun onCleared() { + super.onCleared() + this.viewCallback = null + OrderModel.setOrderStatusCallback(TAG,null) + } + + interface CheckCallback { + fun dismissWindow() + } + + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { when (order?.orderStatus) { TaxiPassengerOrderStatusEnum.ArriveAtStart.code -> { // 显示手机号验证 @@ -35,14 +44,4 @@ class ChekAndStartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatus } } - override fun onCleared() { - super.onCleared() - this.viewCallback = null - TaxiPassengerModel.setOrderStatusCallback(TAG, null) - } - - interface CheckCallback { - fun dismissWindow() - } - } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt index 9588ecd2a2..369ff6493f 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/check/ChekViewModel.kt @@ -1,9 +1,6 @@ package com.mogo.och.taxi.passenger.ui.checkstartautopilot.check import androidx.lifecycle.ViewModel -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.model.TaxiPassengerModel class ChekViewModel : ViewModel() { diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt index ab84b388e4..25fc7855d0 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/checkstartautopilot/startautopilot/StartAutopilotView.kt @@ -51,6 +51,8 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu private var taxiPStartAutopilotCar: FrameAnimatorContainer? = null private lateinit var viewModel: StartAutopilotViewModel + var canGonethisView = false + init { initView() @@ -72,6 +74,10 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu ) taxiPStartAutopilot?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener { + override fun playOnce() { + canGonethisView = false + } + override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "可以启动自驾动画暂停") } @@ -166,6 +172,8 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu viewModel = ViewModelProvider(this).get(StartAutopilotViewModel::class.java) viewModel.setStartAutopilotCallback(this) taxi_p_start_autopilot.onClick { + //开启动画和自动驾驶 + canGonethisView = false //开启动画和自动驾驶 startAutopiloting() viewModel.startAutopilot() diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt index a8d63d7a51..a1bc3599be 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt @@ -11,10 +11,11 @@ import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_arrive +import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_evaluate import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_order_info -import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_overmap_debug import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_phone_check import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_start_autopilot +import kotlinx.android.synthetic.main.taxt_u_p_debug.view.tv_show_start_autopilot_success import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -62,9 +63,11 @@ class DebugView @JvmOverloads constructor( tv_show_order_info.onClick { fragment?.showOrHideServingOrderFragment(true) } - tv_show_overmap_debug.onClick { - fragment?.setOverMapDebug() - fragment?.preLoadArrivedImages() + tv_show_start_autopilot_success.onClick { + fragment?.showOrHideCheckAndStartAutopilotView(2) + } + tv_show_evaluate.onClick { + fragment?.setEvaluateView() } } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt index 654b8aae8c..e4f5645eb9 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt @@ -98,7 +98,7 @@ class ItineraryView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback } var prePercentage = 0f - val needChangeStyleNumber = 0.99 + val needChangeStyleNumber = 0.98 val needChangeStyleNumberMin = 0.03f override fun setDistanceInfo(surplusdistance:String,distanceUnit:String, diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt index 9bc4fad09c..2f9db7c0e4 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt @@ -2,22 +2,19 @@ package com.mogo.och.taxi.passenger.ui.orderinfo import androidx.lifecycle.ViewModel import com.mogo.commons.AbsMogoApplication -import com.mogo.eagle.core.data.map.MogoLocation -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.common.module.utils.NumberFormatUtil import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.ui.model.order.TaxiPassengerOrderStatusEnum import com.mogo.och.taxi.passenger.model.TaxiPassengerModel -import kotlin.math.abs +import com.mogo.och.taxi.passenger.ui.model.order.BaseOrderBean +import com.mogo.och.taxi.passenger.ui.model.order.OrderListener +import com.mogo.och.taxi.passenger.ui.model.order.OrderModel import kotlin.math.ceil -class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { +class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback, OrderListener { private val TAG = OrderInfoViewModel::class.java.simpleName @@ -31,6 +28,7 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { surplusTimeUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_surplustime) // 设置起点和终点marker和实时车辆位置 TaxiPassengerModel.setOrderStatusCallback(TAG,this) + OrderModel.setOrderStatusCallback(TAG,this) } fun setDistanceCallback(viewCallback:ItineraryViewCallback){ @@ -41,6 +39,7 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { super.onCleared() this.viewCallback = null TaxiPassengerModel.setOrderStatusCallback(TAG,null) + OrderModel.setOrderStatusCallback(TAG,null) } interface ItineraryViewCallback{ @@ -51,26 +50,6 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { fun setEndStation(endStation:String) } - override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrdersInServiceQueryRespBean.OrderBean?) { - order?.orderEndSite?.let { - UiThreadHandler.post { - viewCallback?.setEndStation(it.siteName) - } - } - when (TaxiPassengerModel.curOrderStatus) { - TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { - - } - else ->{ - UiThreadHandler.post { - viewCallback?.setDistanceInfo( - "--", disUnit, "--", surplusTimeUnit, "--", 0, 100 - ) - } - } - } - } - override fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int) { var dis: String? = "0" var disUnit = "KM" @@ -96,4 +75,24 @@ class OrderInfoViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { } } + override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) { + TaxiPassengerModel.currentOCHOrder?.orderEndSite?.let { + UiThreadHandler.post { + viewCallback?.setEndStation(it.siteName) + } + } + when (TaxiPassengerModel.curOrderStatus) { + TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { + + } + else ->{ + UiThreadHandler.post { + viewCallback?.setDistanceInfo( + "--", disUnit, "--", surplusTimeUnit, "--", 0, 100 + ) + } + } + } + } + } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt index 98704a5dde..0a97755047 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/speed/SpeedView.kt @@ -32,7 +32,7 @@ class SpeedView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener { override fun onVisibilityAggregated(isVisible: Boolean) { super.onVisibilityAggregated(isVisible) if(isVisible){ - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 3, this) }else{ CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 64ecdb2584..842d3e193e 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -20,6 +20,7 @@ import androidx.core.app.ActivityCompat import com.mogo.eagle.core.utilcode.util.TimeTransformUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager import com.mogo.och.common.module.wigets.media.MediaItem import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView @@ -137,10 +138,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoView.CURRENT_STATE_PLAYING ->{ start.setImageResource(R.drawable.notice_video_pause) showOrHideStartPlayButton(false) + AudioFocusManager.setVideoFocusChange(true) } else -> { start.setImageResource(R.drawable.notice_video_after_pause) showOrHideStartPlayButton(true) + AudioFocusManager.setVideoFocusChange(false) } } } @@ -281,6 +284,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onCompletion() { start.setImageResource(R.drawable.notice_video_after_pause) + AudioFocusManager.setVideoFocusChange(false) } override fun onSurfaceUpdated(surface: Surface) { @@ -301,6 +305,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onError(what: Int, extra: Int) { super.onError(what, extra) + AudioFocusManager.setVideoFocusChange(false) mThumbImageViewLayout?.visibility = View.VISIBLE ToastUtils.showLong("哎呀,出错了,看看其他视频吧") currentTime = -1 diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_001.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_001.webp deleted file mode 100644 index ac6986d8a2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_001.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_002.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_002.webp deleted file mode 100644 index e321c08024..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_002.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_003.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_003.webp deleted file mode 100644 index d78521d4f0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_003.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_004.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_004.webp deleted file mode 100644 index b1ac22f7b4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_004.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_005.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_005.webp deleted file mode 100644 index ee47c8bcc4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_005.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_006.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_006.webp deleted file mode 100644 index b856948a3a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_006.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_007.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_007.webp deleted file mode 100644 index 4d1c41cefa..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_007.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_008.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_008.webp deleted file mode 100644 index e175e9762a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_008.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_009.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_009.webp deleted file mode 100644 index 47d9df2ee5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_009.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_010.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_010.webp deleted file mode 100644 index ed5936b03d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_010.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_011.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_011.webp deleted file mode 100644 index 6ff1c70dde..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_011.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_012.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_012.webp deleted file mode 100644 index 48e3f9d7e4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_012.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_013.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_013.webp deleted file mode 100644 index 95f9ca9396..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_013.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_014.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_014.webp deleted file mode 100644 index 2f4322ae09..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_014.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_015.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_015.webp deleted file mode 100644 index 9b4f9296e4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_015.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_016.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_016.webp deleted file mode 100644 index f33e356c2d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_016.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_017.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_017.webp deleted file mode 100644 index 53892cbcfa..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_017.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_018.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_018.webp deleted file mode 100644 index c153bc9fe9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_018.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_019.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_019.webp deleted file mode 100644 index 2ba9b98b88..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_019.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_020.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_020.webp deleted file mode 100644 index 3a749edd11..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_020.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_021.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_021.webp deleted file mode 100644 index fccb3828e8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_021.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_022.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_022.webp deleted file mode 100644 index 6cceb3cd60..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_022.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_023.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_023.webp deleted file mode 100644 index d9c798b3fd..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_023.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_024.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_024.webp deleted file mode 100644 index c78acdb8a0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_024.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_025.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_025.webp deleted file mode 100644 index 65b9a9e194..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_025.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_026.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_026.webp deleted file mode 100644 index c647c74df4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_026.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_027.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_027.webp deleted file mode 100644 index 1266d6bbed..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_027.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_028.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_028.webp deleted file mode 100644 index 330546e40b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_028.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_029.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_029.webp deleted file mode 100644 index cc0a7a97d0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_029.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_030.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_030.webp deleted file mode 100644 index 6ddbafbe37..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_030.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_031.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_031.webp deleted file mode 100644 index ecedc62020..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_031.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_032.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_032.webp deleted file mode 100644 index b7e7db5e71..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_032.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_033.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_033.webp deleted file mode 100644 index 342c0020bb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_033.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_034.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_034.webp deleted file mode 100644 index 0eeb6dc6b7..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_034.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_035.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_035.webp deleted file mode 100644 index fa64347ca8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_035.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_036.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_036.webp deleted file mode 100644 index e2cfc4e788..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_036.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_037.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_037.webp deleted file mode 100644 index 1f9ca843c0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_037.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_038.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_038.webp deleted file mode 100644 index 2b15bffdb5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_038.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_039.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_039.webp deleted file mode 100644 index d58825b1c1..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_039.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_040.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_040.webp deleted file mode 100644 index ec81a78754..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_040.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_041.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_041.webp deleted file mode 100644 index 3e867de372..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_041.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_042.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_042.webp deleted file mode 100644 index d52a725dfb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_042.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_043.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_043.webp deleted file mode 100644 index 388094a65d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_043.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_044.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_044.webp deleted file mode 100644 index 71021bb301..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_044.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_045.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_045.webp deleted file mode 100644 index 0cc52255d5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_045.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_046.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_046.webp deleted file mode 100644 index 7db23869cf..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_046.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_047.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_047.webp deleted file mode 100644 index 1d930b5822..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_047.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_048.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_048.webp deleted file mode 100644 index 24250f0df9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_048.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_049.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_049.webp deleted file mode 100644 index e50175290a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_049.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_050.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_050.webp deleted file mode 100644 index 06371b3661..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_050.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_051.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_051.webp deleted file mode 100644 index 28176c5a3e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_051.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_052.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_052.webp deleted file mode 100644 index 14263c7acd..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_052.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_053.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_053.webp deleted file mode 100644 index 351e8c73c6..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_053.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_054.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_054.webp deleted file mode 100644 index 230f6f1fa9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_054.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_055.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_055.webp deleted file mode 100644 index 5f4e461298..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_055.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_056.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_056.webp deleted file mode 100644 index 0eeaaaabb5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_056.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_057.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_057.webp deleted file mode 100644 index a7d5cbce77..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_057.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_058.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_058.webp deleted file mode 100644 index b6c3f0aeb9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_058.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_059.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_059.webp deleted file mode 100644 index 78c5a913d8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_059.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_060.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_060.webp deleted file mode 100644 index 4380bd0fb9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/arrive_dest_060.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_000.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_000.webp deleted file mode 100644 index 4fd3a55623..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_000.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_001.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_001.webp deleted file mode 100644 index ff76102048..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_001.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_002.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_002.webp deleted file mode 100644 index f13e13c8e8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_002.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_003.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_003.webp deleted file mode 100644 index a57a579438..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_003.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_004.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_004.webp deleted file mode 100644 index a3bdb1aaff..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_004.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_005.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_005.webp deleted file mode 100644 index ecbbc89c66..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_005.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_006.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_006.webp deleted file mode 100644 index 02d113cd55..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_006.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_007.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_007.webp deleted file mode 100644 index 452b5d7186..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_007.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_008.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_008.webp deleted file mode 100644 index 6d733f4db0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_008.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_009.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_009.webp deleted file mode 100644 index 61d09b8abf..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_009.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_010.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_010.webp deleted file mode 100644 index d420b78d03..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_010.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_011.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_011.webp deleted file mode 100644 index 7497d48ffe..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_011.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_012.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_012.webp deleted file mode 100644 index 6efb7520fb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_012.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_013.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_013.webp deleted file mode 100644 index a526aa891b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_013.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_014.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_014.webp deleted file mode 100644 index 39d73705f4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_014.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_015.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_015.webp deleted file mode 100644 index 38f7c50908..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_015.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_016.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_016.webp deleted file mode 100644 index 0f48fcb5fe..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_016.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_017.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_017.webp deleted file mode 100644 index 71936c79b6..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_017.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_018.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_018.webp deleted file mode 100644 index 3a20777ded..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_018.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_019.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_019.webp deleted file mode 100644 index 495a30bd13..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_019.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_020.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_020.webp deleted file mode 100644 index db7de53f9d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_020.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_021.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_021.webp deleted file mode 100644 index a63cbc779f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_021.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_022.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_022.webp deleted file mode 100644 index f72a3b10b2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_022.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_023.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_023.webp deleted file mode 100644 index cb55eaeb19..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_023.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_024.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_024.webp deleted file mode 100644 index 58e0176822..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_024.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_025.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_025.webp deleted file mode 100644 index 777c71ed42..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_025.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_026.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_026.webp deleted file mode 100644 index ce8d4f47e8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_026.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_027.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_027.webp deleted file mode 100644 index b340be9702..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_027.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_028.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_028.webp deleted file mode 100644 index f2337b239b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_028.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_029.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_029.webp deleted file mode 100644 index fc893561a2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_029.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_030.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_030.webp deleted file mode 100644 index de157c9443..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_030.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_031.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_031.webp deleted file mode 100644 index 1180e96402..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_031.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_032.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_032.webp deleted file mode 100644 index d19da1617e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_032.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_033.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_033.webp deleted file mode 100644 index fa758321dd..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_033.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_034.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_034.webp deleted file mode 100644 index a0691e817d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_034.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_035.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_035.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_035.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_036.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_036.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_036.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_037.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_037.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_037.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_038.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_038.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_038.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_039.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_039.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_039.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_040.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_040.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_040.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_041.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_041.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_041.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_042.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_042.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_042.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_043.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_043.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_043.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_044.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_044.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_044.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_045.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_045.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_045.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_046.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_046.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_046.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_047.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_047.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_047.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_048.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_048.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_048.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_049.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_049.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_049.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_050.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_050.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_050.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_051.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_051.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_051.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_052.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_052.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_052.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_053.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_053.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_053.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_054.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_054.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_054.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_055.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_055.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_055.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_056.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_056.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_056.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_057.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_057.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_057.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_058.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_058.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_058.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_059.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_059.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_059.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_060.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_060.webp deleted file mode 100644 index d3a85dadd3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/check2startautopilt_060.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00000.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00000.png deleted file mode 100755 index b50f7793cb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00000.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00000_0.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00000_0.webp deleted file mode 100644 index e0ca986452..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00000_0.webp and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00001.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00001.png deleted file mode 100755 index 08dba90d6b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00001.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00002.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00002.png deleted file mode 100755 index 143269c5ba..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00002.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00003.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00003.png deleted file mode 100755 index 91d144997f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00003.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00004.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00004.png deleted file mode 100755 index 520207e077..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00004.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00005.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00005.png deleted file mode 100755 index 4cd9d44512..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00005.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00006.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00006.png deleted file mode 100755 index 15ab608c47..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00006.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00007.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00007.png deleted file mode 100755 index 94fc4a3c18..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00007.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00008.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00008.png deleted file mode 100755 index 49a518e6b4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00008.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00009.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00009.png deleted file mode 100755 index 9b9ee61025..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00009.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00010.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00010.png deleted file mode 100755 index f15cd8bfab..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00010.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00011.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00011.png deleted file mode 100755 index d120fdfef9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00011.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00012.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00012.png deleted file mode 100755 index 37c3399c5f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00012.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00013.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00013.png deleted file mode 100755 index b56ee1e630..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00013.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00014.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00014.png deleted file mode 100755 index 58bcca6d8d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00014.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00015.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00015.png deleted file mode 100755 index 11c07cb0a5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00015.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00016.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00016.png deleted file mode 100755 index c7ef0e15ee..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00016.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00017.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00017.png deleted file mode 100755 index 169da11cdd..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00017.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00018.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00018.png deleted file mode 100755 index f62777b866..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00018.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00019.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00019.png deleted file mode 100755 index 2021d15195..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00019.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00020.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00020.png deleted file mode 100755 index cff1a8274f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00020.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00021.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00021.png deleted file mode 100755 index cdd671caf5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00021.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00022.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00022.png deleted file mode 100755 index fc150313f4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00022.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00023.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00023.png deleted file mode 100755 index 6d400a4307..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00023.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00024.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00024.png deleted file mode 100755 index 936db14ea5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00024.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00025.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00025.png deleted file mode 100755 index 0b108a99c3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00025.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00026.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00026.png deleted file mode 100755 index c7b71ca0a5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00026.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00027.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00027.png deleted file mode 100755 index accf229586..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00027.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00028.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00028.png deleted file mode 100755 index 5188456548..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00028.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00029.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00029.png deleted file mode 100755 index c50625f23f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00029.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00030.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00030.png deleted file mode 100755 index 23c4e1b127..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00030.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00031.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00031.png deleted file mode 100755 index 413de61843..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00031.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00032.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00032.png deleted file mode 100755 index 05654591a4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00032.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00033.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00033.png deleted file mode 100755 index 58aa4d2e50..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00033.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00034.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00034.png deleted file mode 100755 index 6dc4033e04..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/image_00034.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00000.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00000.png deleted file mode 100755 index caa97c01c2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00000.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00001.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00001.png deleted file mode 100755 index b304b5be01..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00001.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00002.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00002.png deleted file mode 100755 index 2bfb865ea8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00002.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00003.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00003.png deleted file mode 100755 index 9a8d3fd56a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00003.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00004.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00004.png deleted file mode 100755 index 31b5a6ab19..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00004.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00005.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00005.png deleted file mode 100755 index 46ef8cc4c2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00005.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00006.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00006.png deleted file mode 100755 index 75703db7f2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00006.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00007.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00007.png deleted file mode 100755 index 09bb325885..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00007.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00008.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00008.png deleted file mode 100755 index 915e8e022a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00008.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00009.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00009.png deleted file mode 100755 index c8f7d3fa64..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00009.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00010.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00010.png deleted file mode 100755 index 9419f69893..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00010.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00011.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00011.png deleted file mode 100755 index c61efd509b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00011.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00012.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00012.png deleted file mode 100755 index 3c02573dae..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00012.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00013.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00013.png deleted file mode 100755 index 54d6931f31..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00013.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00014.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00014.png deleted file mode 100644 index 599bd69bd4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00014.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00015.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00015.png deleted file mode 100644 index 2bce1d0f09..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00015.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00016.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00016.png deleted file mode 100644 index 59eb21a18c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00016.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00017.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00017.png deleted file mode 100644 index 03ead11ef2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00017.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00018.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00018.png deleted file mode 100755 index e8820e774b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/light_00018.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxi_p_north.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxi_p_north.png new file mode 100644 index 0000000000..8d5c431674 Binary files /dev/null and b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxi_p_north.png differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arrived.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arrived.png index 7ebe72d080..32fc7d5af8 100644 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arrived.png and b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arrived.png differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arriving.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arriving.png index ee96bb0edc..790562578c 100644 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arriving.png and b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/taxt_u_p_overmap_arriving.png differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_000.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_000.png deleted file mode 100755 index 59cdbafe53..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_000.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_001.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_001.png deleted file mode 100755 index a2efcd5479..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_001.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_002.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_002.png deleted file mode 100755 index f21e4908d8..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_002.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_003.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_003.png deleted file mode 100755 index 795ec65151..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_003.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_004.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_004.png deleted file mode 100755 index c7d6d77d41..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_004.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_005.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_005.png deleted file mode 100755 index 77a4aeeaad..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_005.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_006.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_006.png deleted file mode 100755 index b3ca7beeb2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_006.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_007.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_007.png deleted file mode 100755 index 9836200d64..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_007.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_008.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_008.png deleted file mode 100755 index 4b9f5e7ea9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_008.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_009.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_009.png deleted file mode 100755 index e0870a2a30..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_009.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_010.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_010.png deleted file mode 100755 index b267279bc2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_010.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_011.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_011.png deleted file mode 100755 index a4284e2dd0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_011.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_012.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_012.png deleted file mode 100755 index 6d816c4faa..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_012.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_013.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_013.png deleted file mode 100755 index 0a8ea33df6..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_013.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_014.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_014.png deleted file mode 100755 index 8866597ef7..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_014.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_015.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_015.png deleted file mode 100755 index 51f06b09aa..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_015.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_016.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_016.png deleted file mode 100755 index bf46af12b2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_016.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_017.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_017.png deleted file mode 100755 index 77c8255d71..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_017.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_018.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_018.png deleted file mode 100755 index 9a57e37bfc..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_018.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_019.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_019.png deleted file mode 100755 index dede5a4856..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_019.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_020.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_020.png deleted file mode 100755 index a0ea531950..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_020.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_021.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_021.png deleted file mode 100755 index f4b15b6661..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_021.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_022.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_022.png deleted file mode 100755 index b1f2067c24..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_022.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_023.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_023.png deleted file mode 100755 index 9c279818ec..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_023.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_024.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_024.png deleted file mode 100755 index 3e28efd6cd..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_024.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_025.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_025.png deleted file mode 100755 index a7f8bf86ea..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_025.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_026.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_026.png deleted file mode 100755 index 7b51471ac9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_026.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_027.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_027.png deleted file mode 100755 index 1f3e439184..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_027.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_028.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_028.png deleted file mode 100755 index 5b90ae5f30..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_028.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_029.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_029.png deleted file mode 100755 index 6d00d8830c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_029.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_030.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_030.png deleted file mode 100755 index 32df235f4b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_030.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_031.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_031.png deleted file mode 100755 index 17038d1417..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_031.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_032.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_032.png deleted file mode 100755 index f6b562b266..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_032.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_033.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_033.png deleted file mode 100755 index 77c017b63d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_033.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_034.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_034.png deleted file mode 100755 index 78f31890d7..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_034.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_035.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_035.png deleted file mode 100755 index 7b10b0e4bf..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_035.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_036.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_036.png deleted file mode 100755 index b7544a69f2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_036.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_037.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_037.png deleted file mode 100755 index 60a883256c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_037.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_038.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_038.png deleted file mode 100755 index bf9b431711..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_038.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_039.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_039.png deleted file mode 100755 index c7339d4ca4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_039.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_040.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_040.png deleted file mode 100755 index 18c4a23f80..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_040.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_041.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_041.png deleted file mode 100755 index 53d4fe40ee..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_041.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_042.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_042.png deleted file mode 100755 index daac0b3e83..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_042.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_043.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_043.png deleted file mode 100755 index c56f4b2183..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_043.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_044.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_044.png deleted file mode 100755 index dabe1119d0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_044.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_045.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_045.png deleted file mode 100755 index 493df9d1b3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_045.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_046.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_046.png deleted file mode 100755 index f8a2b4379e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_046.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_047.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_047.png deleted file mode 100755 index 4b3a022ebc..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_047.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_048.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_048.png deleted file mode 100755 index 59cdbafe53..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_belt_048.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_00.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_00.png deleted file mode 100755 index 4e72bb47c7..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_00.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_01.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_01.png deleted file mode 100755 index 4d308d3343..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_01.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_02.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_02.png deleted file mode 100755 index 1b7b53f011..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_02.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_03.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_03.png deleted file mode 100755 index baa40977ca..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_03.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_04.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_04.png deleted file mode 100755 index 9f48a83129..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_04.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_05.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_05.png deleted file mode 100755 index 828bbc4498..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_05.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_06.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_06.png deleted file mode 100755 index d8808f4bb1..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_06.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_07.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_07.png deleted file mode 100755 index a51f0c2957..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_07.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_08.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_08.png deleted file mode 100755 index 1e771bd7b3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_08.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_09.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_09.png deleted file mode 100755 index f321e14196..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_09.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_10.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_10.png deleted file mode 100755 index d42dedd807..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_10.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_11.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_11.png deleted file mode 100755 index cb1eea2118..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_11.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_12.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_12.png deleted file mode 100755 index ab54f3fccf..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_12.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_13.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_13.png deleted file mode 100755 index 9f4709dda3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_13.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_14.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_14.png deleted file mode 100755 index 8caa12d24f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_14.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_15.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_15.png deleted file mode 100755 index 30567fb91c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_15.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_16.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_16.png deleted file mode 100755 index 0fe8258366..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_16.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_17.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_17.png deleted file mode 100755 index a0a3b67241..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_17.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_18.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_18.png deleted file mode 100755 index 6c1bc18171..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_18.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_19.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_19.png deleted file mode 100755 index 081597c691..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_19.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_20.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_20.png deleted file mode 100755 index e4ee88cf6e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_20.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_21.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_21.png deleted file mode 100755 index fe9081e7eb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_21.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_22.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_22.png deleted file mode 100755 index d039745836..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_22.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_23.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_23.png deleted file mode 100755 index 6a32ad788e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_23.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_24.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_24.png deleted file mode 100755 index 01dad9157d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_24.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_25.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_25.png deleted file mode 100755 index 0d0d678b1a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_25.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_26.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_26.png deleted file mode 100755 index 61e6f17f65..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_26.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_27.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_27.png deleted file mode 100755 index e9ecf810ed..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_27.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_28.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_28.png deleted file mode 100755 index 4667c324d4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_28.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_29.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_29.png deleted file mode 100755 index 498b008c82..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_29.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_30.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_30.png deleted file mode 100755 index 82a7e44d77..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_30.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_31.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_31.png deleted file mode 100755 index 31417ba301..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_31.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_32.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_32.png deleted file mode 100755 index 30ca1a1afc..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_32.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_33.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_33.png deleted file mode 100755 index c2926c32cc..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_33.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_34.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_34.png deleted file mode 100755 index cdba55aa9e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_34.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_35.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_35.png deleted file mode 100755 index 1fb9035b27..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_35.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_36.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_36.png deleted file mode 100755 index 7104acb1ba..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_36.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_37.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_37.png deleted file mode 100755 index 00b634e878..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_37.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_38.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_38.png deleted file mode 100755 index 2ac3bf0ac4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_38.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_39.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_39.png deleted file mode 100755 index 1002cbd311..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_39.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_40.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_40.png deleted file mode 100755 index d8d006511e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_40.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_41.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_41.png deleted file mode 100755 index 55e7bf916a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_41.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_42.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_42.png deleted file mode 100755 index d85d206e56..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_42.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_43.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_43.png deleted file mode 100755 index a0ef658846..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_43.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_44.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_44.png deleted file mode 100755 index 6161b0d53f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_44.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_45.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_45.png deleted file mode 100755 index d3c148b4d4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_45.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_46.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_46.png deleted file mode 100755 index d843d1a893..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_46.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_47.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_47.png deleted file mode 100755 index c1cf1fe968..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_47.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_48.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_48.png deleted file mode 100755 index afec1dbe4f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_48.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_49.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_49.png deleted file mode 100755 index 39148f304c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_49.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_50.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_50.png deleted file mode 100755 index b1f0a2b4c3..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_50.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_51.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_51.png deleted file mode 100755 index 494869555d..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_51.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_52.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_52.png deleted file mode 100755 index dc980c400b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_52.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_53.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_53.png deleted file mode 100755 index ac1c4bc29c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_53.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_54.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_54.png deleted file mode 100755 index bc48b74077..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_54.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_55.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_55.png deleted file mode 100755 index 44fc600572..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_55.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_56.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_56.png deleted file mode 100755 index 0907c2402e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_56.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_57.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_57.png deleted file mode 100755 index 54e30f21b1..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_57.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_58.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_58.png deleted file mode 100755 index e1ea128bba..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_58.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_59.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_59.png deleted file mode 100755 index e6ccd4a239..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_59.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_60.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_60.png deleted file mode 100755 index 41b6e787cb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_60.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_61.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_61.png deleted file mode 100755 index 11bb9004ce..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_61.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_62.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_62.png deleted file mode 100755 index 0d57c4ec68..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_62.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_63.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_63.png deleted file mode 100755 index b7b55313e0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_63.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_64.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_64.png deleted file mode 100755 index becfe0f0c6..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_64.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_65.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_65.png deleted file mode 100755 index e8b82ee75a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_65.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_66.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_66.png deleted file mode 100755 index 299a79f036..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_66.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_67.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_67.png deleted file mode 100755 index a7db93b6a9..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_67.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_68.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_68.png deleted file mode 100755 index 21f9909872..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_68.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_69.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_69.png deleted file mode 100755 index ffc0dbaa4b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_69.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_70.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_70.png deleted file mode 100755 index 7ca4be67d0..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_70.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_71.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_71.png deleted file mode 100755 index 03c460c37a..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_71.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_72.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_72.png deleted file mode 100755 index 7702cf218e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_72.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_73.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_73.png deleted file mode 100755 index 2a096c1ca2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_73.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_74.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_74.png deleted file mode 100755 index 5dd86b4b40..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_74.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_75.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_75.png deleted file mode 100755 index 5698491a3e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_75.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_76.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_76.png deleted file mode 100755 index bb8d4ca43c..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_76.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_77.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_77.png deleted file mode 100755 index 80930535a5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_77.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_78.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_78.png deleted file mode 100755 index 07e57d8afb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_78.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_79.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_79.png deleted file mode 100755 index 5ddba0cb16..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_79.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_80.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_80.png deleted file mode 100755 index b05265b61b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_80.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_81.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_81.png deleted file mode 100755 index 87e9f927e4..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_81.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_82.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_82.png deleted file mode 100755 index b7ec6e6f34..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_82.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_83.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_83.png deleted file mode 100755 index c413c7f8c2..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_83.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_84.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_84.png deleted file mode 100755 index 514f1b2cdd..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_84.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_85.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_85.png deleted file mode 100755 index 1ce2a51a76..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_85.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_86.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_86.png deleted file mode 100755 index d08d3828c7..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_86.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_87.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_87.png deleted file mode 100755 index 9a122aa0cb..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_87.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_88.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_88.png deleted file mode 100755 index b991da441e..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_88.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_89.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_89.png deleted file mode 100755 index a760b5e716..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_89.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_90.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_90.png deleted file mode 100755 index c05782379b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_90.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_91.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_91.png deleted file mode 100755 index 03c932e09f..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_91.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_92.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_92.png deleted file mode 100755 index 03082c7d7b..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_92.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_93.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_93.png deleted file mode 100755 index 87d5d2dbb5..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_93.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_94.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_94.png deleted file mode 100755 index ece6f13bee..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_94.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_95.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_95.png deleted file mode 100755 index b9dc59a6c6..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_95.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_96.png b/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_96.png deleted file mode 100755 index eae4bbb156..0000000000 Binary files a/OCH/taxi/unmanned-passenger/src/main/res/drawable-nodpi/xiaozhi_love_96.png and /dev/null differ diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_base_fragment.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_base_fragment.xml index 344b49ad66..9a5a616777 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_base_fragment.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_base_fragment.xml @@ -33,7 +33,7 @@ android:id="@+id/mapBizView" app:styleMode="MAP_STYLE_DAY_VR_TAXI" app:default_perspective="MAP_STYLE_VR_SKY_BOX" - app:isWeatherEnable="false" + app:isWeatherEnable="true" android:layout_width="match_parent" android:layout_height="match_parent" /> @@ -59,25 +59,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - - @@ -103,15 +84,43 @@ app:layout_constraintTop_toTopOf="parent" app:roma_change_dis_color="true" /> - + + + + + + android:layout_marginEnd="@dimen/dp_130" + android:visibility="gone" + android:clickable="true" + android:layout_width="@dimen/dp_746" + android:layout_height="@dimen/dp_916"/> + + @@ -170,9 +179,18 @@ android:visibility="gone" android:layout_width="match_parent" android:layout_height="match_parent"/> + - + + + + \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_debug.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_debug.xml index ef4c08a892..2fb8e73431 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_debug.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_debug.xml @@ -26,6 +26,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"/> + + \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_itinerary.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_itinerary.xml index 8190e1fee5..7271b6a182 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_itinerary.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxt_u_p_itinerary.xml @@ -36,7 +36,7 @@ android:layout_marginEnd="@dimen/dp_12" android:layout_marginStart="@dimen/dp_93" android:textColor="@color/taxi_p_004DC4" - android:textSize="@dimen/dp_35" + android:textSize="@dimen/dp_38" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/gl_horizontal_top" app:layout_constraintBottom_toBottomOf="@+id/gl_horizontal_center" @@ -44,19 +44,44 @@ + + + + @@ -111,30 +136,48 @@ app:layout_constraintStart_toStartOf="@+id/actv_surplus_time" app:layout_constraintEnd_toEndOf="@+id/actv_surplus_time" /> - + app:layout_constraintTop_toTopOf="@+id/gl_horizontal_center"> + + + + + + + + android:layout_height="wrap_content"/> + + diff --git a/OCH/taxi/unmanned-passenger/src/main/res/values/arrays.xml b/OCH/taxi/unmanned-passenger/src/main/res/values/arrays.xml index d065f6633f..0d2c4cc409 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/values/arrays.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/values/arrays.xml @@ -1,378 +1,4 @@ - - @drawable/image_00000 - @drawable/image_00001 - @drawable/image_00002 - @drawable/image_00003 - @drawable/image_00004 - @drawable/image_00005 - @drawable/image_00006 - @drawable/image_00007 - @drawable/image_00008 - @drawable/image_00009 - @drawable/image_00010 - @drawable/image_00011 - @drawable/image_00012 - @drawable/image_00013 - @drawable/image_00014 - @drawable/image_00015 - @drawable/image_00016 - @drawable/image_00017 - @drawable/image_00018 - @drawable/image_00019 - @drawable/image_00020 - @drawable/image_00021 - @drawable/image_00022 - @drawable/image_00023 - @drawable/image_00024 - @drawable/image_00025 - @drawable/image_00026 - @drawable/image_00027 - @drawable/image_00028 - @drawable/image_00029 - @drawable/image_00030 - @drawable/image_00031 - @drawable/image_00032 - @drawable/image_00033 - @drawable/image_00034 - - - - @drawable/light_00000 - @drawable/light_00001 - @drawable/light_00002 - @drawable/light_00003 - @drawable/light_00004 - @drawable/light_00005 - @drawable/light_00006 - @drawable/light_00007 - @drawable/light_00008 - @drawable/light_00009 - @drawable/light_00010 - @drawable/light_00011 - @drawable/light_00012 - @drawable/light_00013 - @drawable/light_00014 - @drawable/light_00015 - @drawable/light_00016 - @drawable/light_00017 - - - - @drawable/xiaozhi_love_00 - @drawable/xiaozhi_love_01 - @drawable/xiaozhi_love_02 - @drawable/xiaozhi_love_03 - @drawable/xiaozhi_love_04 - @drawable/xiaozhi_love_05 - @drawable/xiaozhi_love_06 - @drawable/xiaozhi_love_07 - @drawable/xiaozhi_love_08 - @drawable/xiaozhi_love_09 - - @drawable/xiaozhi_love_10 - @drawable/xiaozhi_love_11 - @drawable/xiaozhi_love_12 - @drawable/xiaozhi_love_13 - @drawable/xiaozhi_love_14 - @drawable/xiaozhi_love_15 - @drawable/xiaozhi_love_16 - @drawable/xiaozhi_love_17 - @drawable/xiaozhi_love_18 - @drawable/xiaozhi_love_19 - - @drawable/xiaozhi_love_20 - @drawable/xiaozhi_love_21 - @drawable/xiaozhi_love_22 - @drawable/xiaozhi_love_23 - @drawable/xiaozhi_love_24 - @drawable/xiaozhi_love_25 - @drawable/xiaozhi_love_26 - @drawable/xiaozhi_love_27 - @drawable/xiaozhi_love_28 - @drawable/xiaozhi_love_29 - - - @drawable/xiaozhi_love_30 - @drawable/xiaozhi_love_31 - @drawable/xiaozhi_love_32 - @drawable/xiaozhi_love_33 - @drawable/xiaozhi_love_34 - @drawable/xiaozhi_love_35 - @drawable/xiaozhi_love_36 - @drawable/xiaozhi_love_37 - @drawable/xiaozhi_love_38 - @drawable/xiaozhi_love_39 - - @drawable/xiaozhi_love_40 - @drawable/xiaozhi_love_41 - @drawable/xiaozhi_love_42 - @drawable/xiaozhi_love_43 - @drawable/xiaozhi_love_44 - @drawable/xiaozhi_love_45 - @drawable/xiaozhi_love_46 - @drawable/xiaozhi_love_47 - @drawable/xiaozhi_love_48 - @drawable/xiaozhi_love_49 - - - @drawable/xiaozhi_love_50 - @drawable/xiaozhi_love_51 - @drawable/xiaozhi_love_52 - @drawable/xiaozhi_love_53 - @drawable/xiaozhi_love_54 - @drawable/xiaozhi_love_55 - @drawable/xiaozhi_love_56 - @drawable/xiaozhi_love_57 - @drawable/xiaozhi_love_58 - @drawable/xiaozhi_love_59 - - @drawable/xiaozhi_love_60 - @drawable/xiaozhi_love_61 - @drawable/xiaozhi_love_62 - @drawable/xiaozhi_love_63 - @drawable/xiaozhi_love_64 - @drawable/xiaozhi_love_65 - @drawable/xiaozhi_love_66 - @drawable/xiaozhi_love_67 - @drawable/xiaozhi_love_68 - @drawable/xiaozhi_love_69 - - @drawable/xiaozhi_love_70 - @drawable/xiaozhi_love_71 - @drawable/xiaozhi_love_72 - @drawable/xiaozhi_love_73 - @drawable/xiaozhi_love_74 - @drawable/xiaozhi_love_75 - @drawable/xiaozhi_love_76 - @drawable/xiaozhi_love_77 - @drawable/xiaozhi_love_78 - @drawable/xiaozhi_love_79 - - @drawable/xiaozhi_love_80 - @drawable/xiaozhi_love_81 - @drawable/xiaozhi_love_82 - @drawable/xiaozhi_love_83 - @drawable/xiaozhi_love_84 - @drawable/xiaozhi_love_85 - @drawable/xiaozhi_love_86 - @drawable/xiaozhi_love_87 - @drawable/xiaozhi_love_88 - @drawable/xiaozhi_love_89 - - @drawable/xiaozhi_love_90 - @drawable/xiaozhi_love_91 - @drawable/xiaozhi_love_92 - @drawable/xiaozhi_love_93 - @drawable/xiaozhi_love_94 - @drawable/xiaozhi_love_95 - @drawable/xiaozhi_love_96 - - - - - @drawable/xiaozhi_belt_000 - @drawable/xiaozhi_belt_001 - @drawable/xiaozhi_belt_002 - @drawable/xiaozhi_belt_003 - @drawable/xiaozhi_belt_004 - @drawable/xiaozhi_belt_005 - @drawable/xiaozhi_belt_006 - @drawable/xiaozhi_belt_007 - @drawable/xiaozhi_belt_008 - @drawable/xiaozhi_belt_009 - - @drawable/xiaozhi_belt_010 - @drawable/xiaozhi_belt_011 - @drawable/xiaozhi_belt_012 - @drawable/xiaozhi_belt_013 - @drawable/xiaozhi_belt_014 - @drawable/xiaozhi_belt_015 - @drawable/xiaozhi_belt_016 - @drawable/xiaozhi_belt_017 - @drawable/xiaozhi_belt_018 - @drawable/xiaozhi_belt_019 - - @drawable/xiaozhi_belt_020 - @drawable/xiaozhi_belt_021 - @drawable/xiaozhi_belt_022 - @drawable/xiaozhi_belt_023 - @drawable/xiaozhi_belt_024 - @drawable/xiaozhi_belt_025 - @drawable/xiaozhi_belt_026 - @drawable/xiaozhi_belt_027 - @drawable/xiaozhi_belt_028 - @drawable/xiaozhi_belt_029 - - - @drawable/xiaozhi_belt_030 - @drawable/xiaozhi_belt_031 - @drawable/xiaozhi_belt_032 - @drawable/xiaozhi_belt_033 - @drawable/xiaozhi_belt_034 - @drawable/xiaozhi_belt_035 - @drawable/xiaozhi_belt_036 - @drawable/xiaozhi_belt_037 - @drawable/xiaozhi_belt_038 - @drawable/xiaozhi_belt_039 - - @drawable/xiaozhi_belt_040 - @drawable/xiaozhi_belt_041 - @drawable/xiaozhi_belt_042 - @drawable/xiaozhi_belt_043 - @drawable/xiaozhi_belt_044 - @drawable/xiaozhi_belt_045 - @drawable/xiaozhi_belt_046 - @drawable/xiaozhi_belt_047 - @drawable/xiaozhi_belt_048 - - - - - - - @drawable/arrive_dest_001 - @drawable/arrive_dest_002 - @drawable/arrive_dest_003 - @drawable/arrive_dest_004 - @drawable/arrive_dest_005 - @drawable/arrive_dest_006 - @drawable/arrive_dest_007 - @drawable/arrive_dest_008 - @drawable/arrive_dest_009 - - @drawable/arrive_dest_010 - @drawable/arrive_dest_011 - @drawable/arrive_dest_012 - @drawable/arrive_dest_013 - @drawable/arrive_dest_014 - @drawable/arrive_dest_015 - @drawable/arrive_dest_016 - @drawable/arrive_dest_017 - @drawable/arrive_dest_018 - @drawable/arrive_dest_019 - - @drawable/arrive_dest_020 - @drawable/arrive_dest_021 - @drawable/arrive_dest_022 - @drawable/arrive_dest_023 - @drawable/arrive_dest_024 - @drawable/arrive_dest_025 - @drawable/arrive_dest_026 - @drawable/arrive_dest_027 - @drawable/arrive_dest_028 - @drawable/arrive_dest_029 - - - @drawable/arrive_dest_030 - @drawable/arrive_dest_031 - @drawable/arrive_dest_032 - @drawable/arrive_dest_033 - @drawable/arrive_dest_034 - @drawable/arrive_dest_035 - @drawable/arrive_dest_036 - @drawable/arrive_dest_037 - @drawable/arrive_dest_038 - @drawable/arrive_dest_039 - - @drawable/arrive_dest_040 - @drawable/arrive_dest_041 - @drawable/arrive_dest_042 - @drawable/arrive_dest_043 - @drawable/arrive_dest_044 - @drawable/arrive_dest_045 - @drawable/arrive_dest_046 - @drawable/arrive_dest_047 - @drawable/arrive_dest_048 - @drawable/arrive_dest_049 - - - @drawable/arrive_dest_050 - @drawable/arrive_dest_051 - @drawable/arrive_dest_052 - @drawable/arrive_dest_053 - @drawable/arrive_dest_054 - @drawable/arrive_dest_055 - @drawable/arrive_dest_056 - @drawable/arrive_dest_057 - @drawable/arrive_dest_058 - @drawable/arrive_dest_059 - - @drawable/arrive_dest_060 - - - - - @drawable/check2startautopilt_000 - @drawable/check2startautopilt_001 - @drawable/check2startautopilt_002 - @drawable/check2startautopilt_003 - @drawable/check2startautopilt_004 - @drawable/check2startautopilt_005 - @drawable/check2startautopilt_006 - @drawable/check2startautopilt_007 - @drawable/check2startautopilt_008 - @drawable/check2startautopilt_009 - - @drawable/check2startautopilt_010 - @drawable/check2startautopilt_011 - @drawable/check2startautopilt_012 - @drawable/check2startautopilt_013 - @drawable/check2startautopilt_014 - @drawable/check2startautopilt_015 - @drawable/check2startautopilt_016 - @drawable/check2startautopilt_017 - @drawable/check2startautopilt_018 - @drawable/check2startautopilt_019 - - @drawable/check2startautopilt_020 - @drawable/check2startautopilt_021 - @drawable/check2startautopilt_022 - @drawable/check2startautopilt_023 - @drawable/check2startautopilt_024 - @drawable/check2startautopilt_025 - @drawable/check2startautopilt_026 - @drawable/check2startautopilt_027 - @drawable/check2startautopilt_028 - @drawable/check2startautopilt_029 - - - @drawable/check2startautopilt_030 - @drawable/check2startautopilt_031 - @drawable/check2startautopilt_032 - @drawable/check2startautopilt_033 - @drawable/check2startautopilt_034 - @drawable/check2startautopilt_035 - @drawable/check2startautopilt_036 - @drawable/check2startautopilt_037 - @drawable/check2startautopilt_038 - @drawable/check2startautopilt_039 - - @drawable/check2startautopilt_040 - @drawable/check2startautopilt_041 - @drawable/check2startautopilt_042 - @drawable/check2startautopilt_043 - @drawable/check2startautopilt_044 - @drawable/check2startautopilt_045 - @drawable/check2startautopilt_046 - @drawable/check2startautopilt_047 - @drawable/check2startautopilt_048 - - @drawable/check2startautopilt_050 - @drawable/check2startautopilt_051 - @drawable/check2startautopilt_052 - @drawable/check2startautopilt_053 - @drawable/check2startautopilt_054 - @drawable/check2startautopilt_055 - @drawable/check2startautopilt_056 - @drawable/check2startautopilt_057 - @drawable/check2startautopilt_058 - - @drawable/check2startautopilt_060 - - - - \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/res/values/colors.xml b/OCH/taxi/unmanned-passenger/src/main/res/values/colors.xml index 2f3f368f0e..0b76883ce1 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/values/colors.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/values/colors.xml @@ -65,6 +65,8 @@ #E6E5F0FF #4D7985A7 + #6C8BB9 + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 87168655f4..cb6369e1e0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,25 +149,29 @@ android { buildConfigField 'boolean', 'secure', "true" buildConfigField 'String', 'URLs', "\"${readFileToJson("mogo").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\"" } yantai { dimension "project" buildConfigField 'boolean', 'secure', "false" buildConfigField 'String', 'URLs', "\"${readFileToJson("yantai").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\"" } dali { dimension "project" - buildConfigField 'boolean', 'secure', "false" + buildConfigField 'boolean', 'secure', "true" buildConfigField 'String', 'URLs', "\"${readFileToJson("dali").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\"" } saas { dimension "project" - buildConfigField 'boolean', 'secure', "false" + buildConfigField 'boolean', 'secure', "true" buildConfigField 'String', 'URLs', "\"${readFileToJson("saas").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\"" } // 配置网络环境,QA、线上、演示 qa { @@ -243,6 +247,8 @@ dependencies { compileOnly rootProject.ext.dependencies.google_auto_service compileOnly rootProject.ext.dependencies.apm_insight + + compileOnly rootProject.ext.dependencies.serialport } // implementation rootProject.ext.dependencies.mogocustommap @@ -424,6 +430,36 @@ Object readMediaUrlConfigFromJsonFile(env){ return null } +/** + * 读取各车型宣传视频本地配置 + * @param env + * @return + */ +Object readMusicUrlConfigFromJsonFile(env){ + try { + // 加载config.json 文件 + File file = new File("${rootDir}/app/config/MusicUrlConfig.json") + def jsonSlurper = new JsonSlurper() + // 解析json + def config = jsonSlurper.parse(file) + def flavorNames = variantVehicleName() + def jsonOutput = new JsonOutput() + def getKey = flavorNames + config.get(env).each {key, value -> + // 匹配flavor对应的 json + if(flavorNames.toLowerCase().contains(key)){ + getKey = key + return true + } + } + return jsonOutput.toJson(config.get(env).get(getKey)) + } catch (IOException e) { + e.printStackTrace() + } + return null +} + + def variantVehicleName() { if(gradle.startParameter.taskNames.size()>0) { for (String taskName : gradle.startParameter.taskNames) { diff --git a/app/config/MusicUrlConfig.json b/app/config/MusicUrlConfig.json new file mode 100644 index 0000000000..1c109ba55f --- /dev/null +++ b/app/config/MusicUrlConfig.json @@ -0,0 +1,754 @@ +{ + "mogo": { + "taxipassengerochdfhq": { + "musics": [ + { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", + "songName": "钢琴曲", + "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", + "songUrlType": "local", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332930796/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", + "tag": [ + "放松" + ] + }, + { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", + "songName": "唯美的梦", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "放松" + ] + }, + { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", + "songName": "有趣的时光", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332904487/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", + "tag": [ + "欢快" + ] + }, + { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", + "songName": "游乐场", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "欢快" + ] + }, + { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", + "songName": "鼓舞我", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", + "songName": "假日乐趣", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", + "songName": "伟大梦想", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", + "songName": "钢琴映像", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", + "songName": "宁静的景色", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "静谧" + ] + }, + { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", + "songName": "困倦小猫", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "静谧" + ] + } + ] + }, + "charterpassengerochm1": { + "musics": [ + { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", + "songName": "钢琴曲", + "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", + "songUrlType": "local", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332930796/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", + "tag": [ + "放松" + ] + }, + { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", + "songName": "唯美的梦", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "放松" + ] + }, + { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", + "songName": "有趣的时光", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332904487/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", + "tag": [ + "欢快" + ] + }, + { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", + "songName": "游乐场", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "欢快" + ] + }, + { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", + "songName": "鼓舞我", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", + "songName": "假日乐趣", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", + "songName": "伟大梦想", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", + "songName": "钢琴映像", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", + "songName": "宁静的景色", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "静谧" + ] + }, + { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", + "songName": "困倦小猫", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "静谧" + ] + } + ] + } + }, + "dali": { + "charterpassengerochm1": { + "musics": [ + { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", + "songName": "钢琴曲", + "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", + "songUrlType": "local", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332930796/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", + "tag": [ + "放松" + ] + }, + { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", + "songName": "唯美的梦", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "放松" + ] + }, + { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", + "songName": "有趣的时光", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332904487/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", + "tag": [ + "欢快" + ] + }, + { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", + "songName": "游乐场", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "欢快" + ] + }, + { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", + "songName": "鼓舞我", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", + "songName": "假日乐趣", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", + "songName": "伟大梦想", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", + "songName": "钢琴映像", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", + "songName": "宁静的景色", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "静谧" + ] + }, + { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", + "songName": "困倦小猫", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "静谧" + ] + } + ] + } + }, + "yantai": { + "charterpassengerochm1": { + "musics": [ + { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", + "songName": "钢琴曲", + "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", + "songUrlType": "local", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332930796/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", + "tag": [ + "放松" + ] + }, + { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", + "songName": "唯美的梦", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "放松" + ] + }, + { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", + "songName": "有趣的时光", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332904487/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", + "tag": [ + "欢快" + ] + }, + { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", + "songName": "游乐场", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "欢快" + ] + }, + { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", + "songName": "鼓舞我", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", + "songName": "假日乐趣", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", + "songName": "伟大梦想", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", + "songName": "钢琴映像", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", + "songName": "宁静的景色", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "静谧" + ] + }, + { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", + "songName": "困倦小猫", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "静谧" + ] + } + ] + } + }, + "saas": { + "taxiunmannedpassengerochdfhq": { + "musics": [ + { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", + "songName": "钢琴曲", + "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", + "songUrlType": "local", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332930796/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", + "tag": [ + "放松" + ] + }, + { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", + "songName": "唯美的梦", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "放松" + ] + }, + { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", + "songName": "有趣的时光", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332904487/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", + "tag": [ + "欢快" + ] + }, + { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", + "songName": "游乐场", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "欢快" + ] + }, + { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", + "songName": "鼓舞我", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", + "songName": "假日乐趣", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", + "songName": "伟大梦想", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", + "songName": "钢琴映像", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", + "songName": "宁静的景色", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "静谧" + ] + }, + { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", + "songName": "困倦小猫", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "静谧" + ] + } + ] + }, + "charterpassengerochm1": { + "musics": [ + { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", + "songName": "钢琴曲", + "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", + "songUrlType": "local", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332930796/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", + "tag": [ + "放松" + ] + }, + { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", + "songName": "唯美的梦", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "放松" + ] + }, + { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", + "songName": "有趣的时光", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332904487/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", + "tag": [ + "欢快" + ] + }, + { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", + "songName": "游乐场", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "欢快" + ] + }, + { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", + "songName": "鼓舞我", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", + "songName": "假日乐趣", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "动感" + ] + }, + { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", + "songName": "伟大梦想", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", + "songName": "钢琴映像", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332890890/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", + "tag": [ + "浪漫" + ] + }, + { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", + "songName": "宁静的景色", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332917335/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", + "tag": [ + "静谧" + ] + }, + { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", + "songName": "困倦小猫", + "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", + "songUrlType": "cloud", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1711332876104/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", + "tag": [ + "静谧" + ] + } + ] + } + } +} diff --git a/app/config/urlConfig.json b/app/config/urlConfig.json index b0d35fa87d..4ef215c968 100644 --- a/app/config/urlConfig.json +++ b/app/config/urlConfig.json @@ -13,7 +13,9 @@ "chart_socket_url":"", "secure_active_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/active", "secure_refresh_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/refresh", - "secure_auth_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/auth" + "secure_auth_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/auth", + "secure_product_id": "10028", + "secure_product_secret": "6b4c4db8286547b78b1def2d76f70fb3" }, "online": { "och_url": "https://tech.zhidaohulian.com", @@ -28,7 +30,9 @@ "chart_socket_url":"", "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", - "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth" + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10028", + "secure_product_secret": "6b4c4db8286547b78b1def2d76f70fb3" }, "demo": { "och_url": "http://tech-dev.zhidaohulian.com", @@ -43,7 +47,9 @@ "chart_socket_url":"", "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", - "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth" + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10028", + "secure_product_secret": "6b4c4db8286547b78b1def2d76f70fb3" } }, "dali": { @@ -57,7 +63,12 @@ "eagle_mis_url": "http://eagle-mis-a.zhidaozhixing.com/", "eagle_dns_url": "http://eagle-dns-a.zhidaozhixing.com/", "bind_driver_qr_url": "https://och-mini-eh.zhidaozhixing.com?pipe=ehsafety&sn=%1$s", - "chart_socket_url":"wss://acp-eh.zhidaozhixing.com/ws" + "chart_socket_url":"wss://acp-eh.zhidaozhixing.com/ws", + "secure_active_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/active", + "secure_refresh_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/auth", + "secure_product_id": "10031", + "secure_product_secret": "bda7164f3e8241848d011dcc710f89db" }, "online": { "och_url": "https://och-driver-eh.zhidaozhixing.com", @@ -69,7 +80,12 @@ "eagle_mis_url": "https://och-hailing-eh.zhidaozhixing.com/", "eagle_dns_url": "https://och-hailing-eh.zhidaozhixing.com/", "bind_driver_qr_url": "https://och-mini-eh.zhidaozhixing.com?pipe=ehsafety&sn=%1$s", - "chart_socket_url":"wss://acp-eh.zhidaozhixing.com/ws" + "chart_socket_url":"wss://acp-eh.zhidaozhixing.com/ws", + "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", + "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10031", + "secure_product_secret": "bda7164f3e8241848d011dcc710f89db" }, "demo": { "och_url": "https://och-a.zhidaozhixing.com", @@ -81,7 +97,12 @@ "eagle_mis_url": "http://och-hailing-eh.zhidaozhixing.com/", "eagle_dns_url": "http://och-hailing-eh.zhidaozhixing.com/", "bind_driver_qr_url": "https://tech.zhidaohulian.com?pipe=ehsafety&sn=%1$s", - "chart_socket_url":"wss://acp-eh.zhidaozhixing.com/ws" + "chart_socket_url":"wss://acp-eh.zhidaozhixing.com/ws", + "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", + "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10031", + "secure_product_secret": "bda7164f3e8241848d011dcc710f89db" } }, "yantai": { @@ -95,7 +116,12 @@ "eagle_mis_url": "http://eagle-mis-a.zhidaozhixing.com/", "eagle_dns_url": "http://eagle-dns-a.zhidaozhixing.com/", "bind_driver_qr_url": "https://och-mini-yt.zhidaozhixing.com?pipe=ytsafety&sn=%1$s", - "chart_socket_url":"" + "chart_socket_url":"", + "secure_active_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/active", + "secure_refresh_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/auth", + "secure_product_id": "10032", + "secure_product_secret": "1514404272484a48b478d082911fcaf9" }, "online": { "och_url": "https://och-driver-yt.zhidaozhixing.com", @@ -107,7 +133,12 @@ "eagle_mis_url": "https://och-hailing-yt.zhidaozhixing.com/", "eagle_dns_url": "https://och-hailing-yt.zhidaozhixing.com/", "bind_driver_qr_url": "https://och-mini-yt.zhidaozhixing.com?pipe=ytsafety&sn=%1$s", - "chart_socket_url":"" + "chart_socket_url":"", + "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", + "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10032", + "secure_product_secret": "1514404272484a48b478d082911fcaf9" }, "demo": { "och_url": "https://och-a.zhidaozhixing.com", @@ -119,7 +150,12 @@ "eagle_mis_url": "http://eagle-mis-a.zhidaozhixing.com/", "eagle_dns_url": "http://eagle-dns-a.zhidaozhixing.com/", "bind_driver_qr_url": "https://tech.zhidaohulian.com?pipe=ytsafety&sn=%1$s", - "chart_socket_url":"" + "chart_socket_url":"", + "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", + "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10032", + "secure_product_secret": "1514404272484a48b478d082911fcaf9" } }, "saas": { @@ -132,7 +168,12 @@ "eagle_mis_url": "https://mogogo-qa.zhidaozhixing.com/", "eagle_dns_url": "https://mogogo-qa.zhidaozhixing.com/", "bind_driver_qr_url": "https://och-mini-mogogo.zhidaozhixing.com?pipe=mogogosafety&sn=%1$s", - "chart_socket_url":"" + "chart_socket_url":"", + "secure_active_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/active", + "secure_refresh_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"http://gateway.ee-private-dev1.myghost.zhidaoauto.com/openapi/security/deviceCert/auth", + "secure_product_id": "10030", + "secure_product_secret": "85dcf995430746f6b1c2d4fe6817ff2e" }, "online": { "och_url": "https://mogogo-driver.zhidaozhixing.com", @@ -143,7 +184,12 @@ "eagle_mis_url": "https://mogogo.zhidaozhixing.com/", "eagle_dns_url": "https://mogogo.zhidaozhixing.com/", "bind_driver_qr_url": "https://och-mini-mogogo.zhidaozhixing.com?pipe=mogogosafety&sn=%1$s", - "chart_socket_url":"" + "chart_socket_url":"", + "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", + "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10030", + "secure_product_secret": "85dcf995430746f6b1c2d4fe6817ff2e" }, "demo": { "och_url": "http://tech-dev.zhidaohulian.com", @@ -154,7 +200,12 @@ "eagle_mis_url": "https://mogogo.zhidaozhixing.com/", "eagle_dns_url": "https://mogogo.zhidaozhixing.com/", "bind_driver_qr_url": "", - "chart_socket_url":"" + "chart_socket_url":"", + "secure_active_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/active", + "secure_refresh_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/refresh", + "secure_auth_url":"https://mygateway.zhidaozhixing.com/openapi/security/deviceCert/auth", + "secure_product_id": "10030", + "secure_product_secret": "85dcf995430746f6b1c2d4fe6817ff2e" } } } diff --git a/app/src/androidTest/java/com/mogo/functions/test/ApkInstallerTest.kt b/app/src/androidTest/java/com/mogo/functions/test/ApkInstallerTest.kt index 36a17ae3d6..242ded546d 100644 --- a/app/src/androidTest/java/com/mogo/functions/test/ApkInstallerTest.kt +++ b/app/src/androidTest/java/com/mogo/functions/test/ApkInstallerTest.kt @@ -1,88 +1,61 @@ -//package com.mogo.functions.test -// -//import android.util.* -//import androidx.test.core.app.* -//import androidx.test.ext.junit.runners.* -//import androidx.test.filters.* -//import androidx.test.platform.app.InstrumentationRegistry -//import com.mogo.eagle.core.function.hmi.ui.* -//import com.mogo.eagle.core.function.main.* -//import com.mogo.eagle.core.utilcode.util.* -//import kotlinx.coroutines.* -//import org.junit.* -//import org.junit.runner.* -//import java.util.concurrent.* -//import java.util.concurrent.TimeUnit.MILLISECONDS -//import kotlin.Result -// -//@RunWith(AndroidJUnit4::class) -//@LargeTest -//class ApkInstallerTest { -// -// -// lateinit var launch: ActivityScenario -// -// @Before -// fun before() { -// launch = ActivityScenario.launch(MainLauncherActivity::class.java) -// } -// -// @Test -// fun testInstall(): Unit = runBlocking { -// Log.d("RWJ", "wait fragment show ...") -// val f = ensureMoGoHmiFragmentShow() -// Log.d("RWJ", "fragment showed, delay 10s ...") -// delay(10000) -// -// Log.d("RWJ", "10s end, start install ...") -// val context = InstrumentationRegistry.getInstrumentation().context -// ApkInstaller.installApp(f.requireContext(), context.assets.open("190000013.apk")) { code, msg -> -// Log.d("RWJ", "code: $code, msg: $msg") -// } -// Log.d("RWJ", "开始延时10分钟....") -// delay(TimeUnit.MINUTES.toMillis(10)) -// Log.d("RWJ", "延时10分钟结束....") -// } -// -// -// @Test -// fun testInstall2(): Unit = runBlocking { -// Log.d("RWJ", "wait fragment show ...") -// val f = ensureMoGoHmiFragmentShow() -// Log.d("RWJ", "fragment showed, delay 10s ...") -// delay(10000) -// -// Log.d("RWJ", "10s end, start install ...") -// val context = InstrumentationRegistry.getInstrumentation().context -// ApkInstaller.installApp(f.requireContext(), context.assets.open("HelloActivity.zip")) { code, msg -> -// Log.d("RWJ", "code: $code, msg: $msg") -// } -// Log.d("RWJ", "开始延时10分钟....") -// delay(TimeUnit.MINUTES.toMillis(10)) -// Log.d("RWJ", "延时10分钟结束....") -// } -// -// private suspend fun ensureMoGoHmiFragmentShow(): MoGoHmiFragment = suspendCancellableCoroutine { -// launch.onActivity { itx -> -// val executor = Executors.newSingleThreadScheduledExecutor() -// executor.scheduleAtFixedRate({ -// var find = -// itx.supportFragmentManager.fragments.find { it is MoGoHmiFragment } as? MoGoHmiFragment -// while (find == null) { -// find = -// itx.supportFragmentManager.fragments.find { it is MoGoHmiFragment } as? MoGoHmiFragment -// } -// while (!find.isResumed) { -// Thread.sleep(500) -// } -// it.resumeWith(Result.success(find)) -// try { -// Thread.sleep(500) -// executor.shutdownNow() -// } catch (e: Throwable) { -// e.printStackTrace() -// } -// }, 50, 500, MILLISECONDS) -// } -// } -//} \ No newline at end of file +package com.mogo.functions.test + +import android.util.* +import androidx.test.core.app.* +import androidx.test.ext.junit.runners.* +import androidx.test.filters.* +import androidx.test.platform.app.InstrumentationRegistry +import com.mogo.eagle.core.function.hmi.ui.* +import com.mogo.eagle.core.function.main.* +import com.mogo.eagle.core.utilcode.util.* +import kotlinx.coroutines.* +import org.junit.* +import org.junit.runner.* +import java.io.File +import java.util.concurrent.* + +@RunWith(AndroidJUnit4::class) +@LargeTest +class ApkInstallerTest { + + + lateinit var launch: ActivityScenario + + @Before + fun before() { + launch = ActivityScenario.launch(MainLauncherActivity::class.java) + } + + @Test + fun testInstall(): Unit = runBlocking { + Log.d("RWJ", "wait fragment show ...") + Log.d("RWJ", "fragment showed, delay 10s ...") + delay(10000) + + Log.d("RWJ", "10s end, start install ...") + val context = InstrumentationRegistry.getInstrumentation().context + val targetContext = InstrumentationRegistry.getInstrumentation().targetContext + val outFile = File(targetContext.getExternalFilesDir(null), "temp.apk") + val os = outFile.outputStream() + try { + Log.d("RWJ", "将assets目录下的apk文件,copy到应用私有目录...") + context.assets.open("HelloActivity.zip").use { + it.copyTo(os) + } + Log.d("RWJ", "copy操作完成") + } finally { + try { + os.close() + } catch (t: Throwable) { + t.printStackTrace() + } + } + Log.d("RWJ", "开始安装...") + ApkInstaller.installApp(targetContext, outFile) { code, msg -> + Log.d("RWJ", "code: $code, msg: $msg") + } + Log.d("RWJ", "开始延时10分钟....") + delay(TimeUnit.MINUTES.toMillis(10)) + Log.d("RWJ", "延时10分钟结束....") + } +} \ No newline at end of file diff --git a/app/src/block/java/com/mogo/launcher/lancet/jank/compiler/JankPointAutoGenerator.java b/app/src/block/java/com/mogo/launcher/lancet/jank/compiler/JankPointAutoGenerator.java index fd67f0e4cc..ee73febf36 100644 --- a/app/src/block/java/com/mogo/launcher/lancet/jank/compiler/JankPointAutoGenerator.java +++ b/app/src/block/java/com/mogo/launcher/lancet/jank/compiler/JankPointAutoGenerator.java @@ -3,6 +3,7 @@ package com.mogo.launcher.lancet.jank.compiler; import android.app.Activity; import android.app.ActivityManager; +import android.app.AlarmManager; import android.app.Fragment; import android.app.Service; import android.content.BroadcastReceiver; @@ -16,11 +17,17 @@ import android.view.View; import android.view.ViewManager; import android.widget.Toast; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.iflytek.speech.GrammarListener; +import com.iflytek.speech.aidl.IWakeuper; import com.knightboost.lancet.api.synchronized_lock.ISynchronizedLockHooker; import com.mogo.core.lancetx.compiler.lib.annotations.LancetXGenerator; import com.mogo.core.lancetx.compiler.lib.generator.HookType; import com.mogo.core.lancetx.compiler.lib.generator.Scope; import com.mogo.core.lancetx.compiler.lib.generator.Type; +import com.mogo.support.serialport.common.core.ICoreBinder; +import com.zhjt.mogo_core_function_devatools.monitor.remote.IUserInterface; import java.io.File; import java.io.InputStream; @@ -412,4 +419,132 @@ class JankPointAutoGenerator { hookAllPublicMethods = true ) private BitmapFactory factory; + + + @LancetXGenerator( + group = "main_block_check", + type = Type.OTHER, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true, + onlyHookMethodNames = { + "getConstructors", + "getDeclaredConstructors", + "getFields", + "getDeclaredFields", + "getMethods", + "getDeclaredMethods", + "getAnnotations", + "getDeclaredAnnotations", + "getClasses", + "getDeclaredClasses", + "getMethod", + "getDeclaredMethod", + "getField", + "getDeclaredField", + "getConstructor", + "getDeclaredConstructor" + }, + onlyHookMethodDescs = { + "()[Ljava/lang/reflect/Constructor;", + "()[Ljava/lang/reflect/Constructor;", + "()[Ljava/lang/reflect/Field;", + "()[Ljava/lang/reflect/Field;", + "()[Ljava/lang/reflect/Method;", + "()[Ljava/lang/reflect/Method;", + "()[Ljava/lang/annotation/Annotation;", + "()[Ljava/lang/annotation/Annotation;", + "()[Ljava/lang/Class;", + "()[Ljava/lang/Class;", + "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;", + "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;", + "(Ljava/lang/String;)Ljava/lang/reflect/Field;", + "(Ljava/lang/String;)Ljava/lang/reflect/Field;", + "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", + "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;" + } + ) + private Class clazz; + + + @LancetXGenerator( + group = "main_block_check", + type = Type.OTHER, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true + ) + private Gson gson; + + + @LancetXGenerator( + group = "main_block_check", + type = Type.OTHER, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true, + onlyHookMethodNames = { + "getObject", + "getObject", + "getObject", + "toJavaObject", + "toJavaObject" + }, + onlyHookMethodDescs = { + "(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;", + "(Ljava/lang/String;Ljava/lang/reflect/Type;)Ljava/lang/Object;", + "(Ljava/lang/String;Lcom/alibaba/fastjson/TypeReference;)Ljava/lang/Object;", + "(Ljava/lang/Class;)Ljava/lang/Object;", + "(Ljava/lang/Class;Lcom/alibaba/fastjson/parser/ParserConfig;I)Ljava/lang/Object;" + } + ) + private JSONObject fastJson; + + + @LancetXGenerator( + group = "main_block_check", + type = Type.IPC, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true + ) + private IUserInterface userInterface; + + @LancetXGenerator( + group = "main_block_check", + type = Type.IPC, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true + ) + private ICoreBinder coreBinder; + + + @LancetXGenerator( + group = "main_block_check", + type = Type.IPC, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true + ) + private IWakeuper wakeuper; + + + @LancetXGenerator( + group = "main_block_check", + type = Type.IPC, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true + ) + private GrammarListener clientGrammarListener; + + @LancetXGenerator( + group = "main_block_check", + type = Type.IPC, + scope = Scope.SELF, + hookType = HookType.REPLACE_INVOKE, + hookAllPublicMethods = true + ) + private AlarmManager alarmManager; } diff --git a/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HandlerHookerImpl.kt b/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HandlerHookerImpl.kt index 204ccf8a5d..d3ab35933c 100644 --- a/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HandlerHookerImpl.kt +++ b/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HandlerHookerImpl.kt @@ -3,7 +3,6 @@ package com.mogo.launcher.lancet.jank.spi import android.os.Handler import android.os.Looper import android.os.Message -import android.os.SystemClock import com.google.auto.service.AutoService import com.mogo.eagle.core.block.runtime.config.recorder.IMessageRecorder import com.mogo.eagle.core.block.runtime.utils.TimeUtils.Companion.now @@ -25,7 +24,7 @@ class HandlerHookerImpl : IHandlerHooker { private var dispatchTime = 0L - override fun onMessageDispatchAfter(msg: Message) { + override fun onMessageDispatchAfter(msg: Message, isAsync: Boolean) { if (msg.target.looper != mainLooper) { return } @@ -33,87 +32,87 @@ class HandlerHookerImpl : IHandlerHooker { return } val duration = now() - dispatchTime - checkIfNeed(msg.target)?.recycle(Msg.acquire(msg.target, msg = msg, duration = duration, elapsed = SystemClock.uptimeMillis() - msg.`when`, enqueue = msg.`when`)) + checkIfNeed(msg.target)?.recycle(Msg.acquire(msg.target, msg = msg, duration = duration, isAsync = isAsync)) } - override fun onMessageDispatchBefore(msg: Message) { + override fun onMessageDispatchBefore(msg: Message, isAsync: Boolean) { if (msg.target.looper != mainLooper) { return } dispatchTime = now() } - override fun onRemoveCallbacks(handler: Handler, action: Runnable) { - checkIfNeed(handler)?.remove(Msg.acquire(handler, action = action)) + override fun onRemoveCallbacks(handler: Handler, action: Runnable, isAsync: Boolean) { + checkIfNeed(handler)?.remove(Msg.acquire(handler, action = action, isAsync = isAsync)) } - override fun onRemoveCallbacksAndMessages(handler: Handler, token: Any?) { - checkIfNeed(handler)?.remove(Msg.acquire(handler, obj = token)) + override fun onRemoveCallbacksAndMessages(handler: Handler, token: Any?, isAsync: Boolean) { + checkIfNeed(handler)?.remove(Msg.acquire(handler, obj = token, isAsync = isAsync)) } - override fun onRemoveCallbacksWithToken(handler: Handler, action: Runnable, token: Any?) { - checkIfNeed(handler)?.remove(Msg.acquire(handler, action = action, obj = token)) + override fun onRemoveCallbacksWithToken(handler: Handler, action: Runnable, token: Any?, isAsync: Boolean) { + checkIfNeed(handler)?.remove(Msg.acquire(handler, action = action, obj = token, isAsync = isAsync)) } - override fun onRemoveMessages(handler: Handler, what: Int) { - checkIfNeed(handler)?.remove(Msg.acquire(handler, what = what)) + override fun onRemoveMessages(handler: Handler, what: Int, isAsync: Boolean) { + checkIfNeed(handler)?.remove(Msg.acquire(handler, what = what, isAsync = isAsync)) } - override fun onRemoveMessages(handler: Handler, what: Int, obj: Any?) { - checkIfNeed(handler)?.remove(Msg.acquire(handler, what = what, obj = obj)) + override fun onRemoveMessages(handler: Handler, what: Int, obj: Any?, isAsync: Boolean) { + checkIfNeed(handler)?.remove(Msg.acquire(handler, what = what, obj = obj, isAsync = isAsync)) } - override fun onPost(handler: Handler, action: Runnable) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action)) + override fun onPost(handler: Handler, action: Runnable, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, isAsync = isAsync)) } - override fun onPostAtFrontQueue(handler: Handler, action: Runnable) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action)) + override fun onPostAtFrontQueue(handler: Handler, action: Runnable, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, isAsync = isAsync)) } - override fun onPostAtTime(handler: Handler, action: Runnable, token: Any?, uptimeMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, obj = token, enqueue = uptimeMillis)) + override fun onPostAtTime(handler: Handler, action: Runnable, token: Any?, uptimeMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, obj = token, isAsync = isAsync)) } - override fun onPostAtTime(handler: Handler, action: Runnable, uptimeMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, enqueue = uptimeMillis)) + override fun onPostAtTime(handler: Handler, action: Runnable, uptimeMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, isAsync = isAsync)) } - override fun onPostDelayed(handler: Handler, action: Runnable, token: Any?, delayMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, obj = token, delay = delayMillis)) + override fun onPostDelayed(handler: Handler, action: Runnable, token: Any?, delayMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, obj = token, delay = delayMillis, isAsync = isAsync)) } - override fun onPostDelayed(handler: Handler, action: Runnable, delayMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, delay = delayMillis)) + override fun onPostDelayed(handler: Handler, action: Runnable, delayMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, action = action, delay = delayMillis, isAsync = isAsync)) } - override fun onSendEmptyMessage(handler: Handler, what: Int) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, what = what)) + override fun onSendEmptyMessage(handler: Handler, what: Int, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, what = what, isAsync = isAsync)) } - override fun onSendEmptyMessageAtTime(handler: Handler, what: Int, uptimeMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, what = what, enqueue = uptimeMillis)) + override fun onSendEmptyMessageAtTime(handler: Handler, what: Int, uptimeMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, what = what, isAsync = isAsync)) } - override fun onSendEmptyMessageDelayed(handler: Handler, what: Int, delayMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, what = what, delay = delayMillis)) + override fun onSendEmptyMessageDelayed(handler: Handler, what: Int, delayMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, what = what, delay = delayMillis, isAsync = isAsync)) } - override fun onSendMessage(handler: Handler, msg: Message) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, msg, what = msg.what)) + override fun onSendMessage(handler: Handler, msg: Message, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, msg, what = msg.what, isAsync = isAsync)) } - override fun onSendMessageAtFrontOfQueue(handler: Handler, msg: Message) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, msg, what = msg.what)) + override fun onSendMessageAtFrontOfQueue(handler: Handler, msg: Message, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, msg, what = msg.what, isAsync = isAsync)) } - override fun onSendMessageAtTime(handler: Handler, msg: Message, uptimeMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, msg = msg, enqueue = uptimeMillis)) + override fun onSendMessageAtTime(handler: Handler, msg: Message, uptimeMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, msg = msg, isAsync = isAsync)) } - override fun onSendMessageDelayed(handler: Handler, msg: Message, delayMillis: Long) { - checkIfNeed(handler)?.insert(Msg.acquire(handler, msg = msg, delay = delayMillis)) + override fun onSendMessageDelayed(handler: Handler, msg: Message, delayMillis: Long, isAsync: Boolean) { + checkIfNeed(handler)?.insert(Msg.acquire(handler, msg = msg, delay = delayMillis, isAsync = isAsync)) } private fun checkIfNeed(handler: Handler?): IMessageRecorder? { diff --git a/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HookInvokerImpl.java b/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HookInvokerImpl.java index 660b2644ad..8309c7cc1e 100644 --- a/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HookInvokerImpl.java +++ b/app/src/block/java/com/mogo/launcher/lancet/jank/spi/HookInvokerImpl.java @@ -3,17 +3,16 @@ import android.app.Activity; import android.os.Looper; import android.os.SystemClock; import com.google.auto.service.AutoService; +import com.knightboost.lancet.api.synchronized_lock.SynchronizedLockHooker; import com.mogo.core.lancetx.compiler.lib.generator.Type; +import com.mogo.core.lancetx.compiler.lib.generator.TypeKt; import com.mogo.core.lancetx.compiler.lib.hook.IHookInvoker; -import com.mogo.eagle.core.data.deva.chain.ChainConstant; import com.mogo.eagle.core.function.api.devatools.block.IMoGoBlockProvider; import com.mogo.eagle.core.function.api.devatools.perf.IMoGoCpuUsageProvider; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.main.ARouterUtils; import com.mogo.eagle.core.utilcode.util.VLogUtils; -import com.zhjt.service.chain.ChainLog; - -import java.util.concurrent.atomic.AtomicReference; +import java.lang.ref.WeakReference; import java.util.concurrent.locks.Lock; @@ -26,17 +25,18 @@ public class HookInvokerImpl implements IHookInvoker { private final ThreadLocal message = new ThreadLocal<>(); - private final ThreadLocal monitor = new ThreadLocal<>(); + private volatile Object monitor = null; - private final AtomicReference holder = new AtomicReference<>(); - - private final StringBuilder extra = new StringBuilder(); + private volatile Object holder = null; private volatile IMoGoCpuUsageProvider provider; private volatile boolean getProviderRequested = false; - private volatile boolean isCanDump = false; // 是否可以Dump堆栈,加此标记位是防止应用启动过程中,由于dump主线程堆栈导致启动耗时 + private String aqsInfo = null; + + private String synchronizedInfo = null; + // 切记: 请勿在此方法中调用其它模块类中的api,可能会出现StackOverFlowException @Override @@ -59,7 +59,6 @@ public class HookInvokerImpl implements IHookInvoker { } }, "getProvider").start(); } - if (provider != null) { if (isMainThread) { provider.updateMainThreadTime(); @@ -97,10 +96,7 @@ public class HookInvokerImpl implements IHookInvoker { private void handleAqsLockEnterBefore(boolean isMainThread, Object caller, String methodName, Object[] objects) { if (isMainThread && caller instanceof Lock) { if ("lock".equals(methodName) || "lockInterruptibly".equals(methodName)) { - if (extra.length() > 0) { - extra.setLength(0); - } - extra.append(caller); + aqsInfo = caller.toString(); } } } @@ -111,16 +107,15 @@ public class HookInvokerImpl implements IHookInvoker { Long start = startTime.get(); if (start != null) { long dur = SystemClock.elapsedRealtime() - start; - handleCostTimeRecord(Type.AQS_LOCK, extra, caller, methodName, dur, objects); + handleCostTimeRecord(Type.AQS_LOCK, aqsInfo, caller, methodName, dur, objects); } } } } - private void handleCostTimeRecord(Type type, StringBuilder extra, Object caller, String methodName, long cost, Object... args) { + private void handleCostTimeRecord(Type type, String extra, Object caller, String methodName, long cost, Object... args) { //日志打印阈值 - long logThreshold = 5; - if (cost >= logThreshold) { + if (cost >= 5) { StringBuilder builder = message.get(); if (builder == null) { builder = new StringBuilder(); @@ -132,18 +127,32 @@ public class HookInvokerImpl implements IHookInvoker { builder .append(type) .append("#") - .append(caller == null ? "caller is null" : caller.getClass().getName()) + .append(caller == null ? "caller is null" : (caller instanceof Class ? ((Class) caller).getName() : caller.getClass().getName())) .append("#") .append(methodName); if (args.length > 0) { builder.append("#("); } - for (Object o : args) { - if (o == null) { - continue; + + if (TypeKt.isLifecycle(type) || type == Type.SYNCHRONIZED_LOCK) { + for (Object o : args) { + if (o == null) { + continue; + } + builder.append((o instanceof Class) ? ((Class) o).getName() : o.getClass().getName()) + .append(","); + } + } else { + if (args.length > 0) { + for (int i = 0; i < args.length - 1; i++) { + Object o = args[i]; + if (o == null) { + continue; + } + builder.append((o instanceof Class) ? ((Class) o).getName() : o.getClass().getName()) + .append(","); + } } - builder.append(o.getClass().getName()) - .append(","); } if (args.length > 0) { @@ -152,26 +161,17 @@ public class HookInvokerImpl implements IHookInvoker { } builder.append("#").append(cost); - boolean flag = false; - if (extra != null && extra.length() > 0) { - builder.append("#"); - builder.append(extra); - flag = true; - } - // dump堆栈阈值 - long dumpStackThreshold = 20; - if (cost >= dumpStackThreshold && isCanDump) { - builder.append("\n"); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - for (StackTraceElement trace: stackTrace) { - builder.append(trace.getClassName()).append("#").append(trace.getMethodName()).append("#").append(trace.getLineNumber()).append("\n"); + if (!TypeKt.isLifecycle(type) && type != Type.SYNCHRONIZED_LOCK) { + if (args.length > 0) { + builder.append("\n"); + builder.append(args[args.length - 1]); } - builder.setLength(builder.length() - 1); } - VLogUtils.w("HookHandler", builder.toString(), 4096); - if (flag) { - extra.setLength(0); + if (extra != null && extra.length() > 0) { + builder.append("\n").append(extra); } + String msgBlock = builder.toString(); + VLogUtils.w("HookHandler", msgBlock, 4096); } } @@ -198,15 +198,6 @@ public class HookInvokerImpl implements IHookInvoker { } } - if ("onWindowFocusChanged".equals(methodName)) { - if (args.length > 0) { - boolean hasFocus = (boolean)args[0]; - if (hasFocus && !isCanDump) { - isCanDump = true; - } - } - } - if ("onPause".equals(methodName)) { try { IMoGoBlockProvider block = CallerDevaToolsManager.INSTANCE.block(); @@ -233,27 +224,38 @@ public class HookInvokerImpl implements IHookInvoker { private void handleSynchronizedLock(boolean isMainThread,Object caller, String methodName, Object [] objects) { if (isMainThread) { if ("onMonitorBefore".equals(methodName)) { - Object monitor = null; + Object arg0 = null; if (objects.length > 0) { - this.monitor.set(monitor = objects[0]); + arg0 = objects[0]; + } + if (arg0 == null) { + return; + } + Object wr = this.monitor; + if (!(wr instanceof WeakReference)) { + return; + } + Object watcher = ((WeakReference)wr).get(); + if (watcher == null) { + return; + } + if (arg0 != watcher) { + return; } - Thread holder = this.holder.get(); StringBuilder sb = new StringBuilder(); + String invokerInfo = SynchronizedLockHooker.getInstance().getInvokerInfo(); - if (monitor != null) { - sb.append("monitor::").append(monitor.getClass().getName()); - } - if (holder != null) { - if (sb.length() > 0) { - sb.append("##holder::").append(holder.getName()); - } else { - sb.append("holder::").append(holder); + sb.append("invoker::").append(invokerInfo).append("##").append("monitor::").append(arg0.getClass().getName()); + Object hf = this.holder; + if (hf instanceof WeakReference) { + WeakReference whf = (WeakReference) hf; + Object o = whf.get(); + if (o instanceof Thread) { + Thread t = (Thread) o; + sb.append("##").append(t.getName()).append("#").append(t.getId()); } } - if (extra.length() > 0) { - extra.setLength(0); - } - extra.append(sb); + synchronizedInfo = sb.toString(); } if ("onMonitorEnter".equals(methodName)) { Long startTime = this.startTime.get(); @@ -261,25 +263,17 @@ public class HookInvokerImpl implements IHookInvoker { return; } long cost = SystemClock.elapsedRealtime() - startTime; - handleCostTimeRecord(Type.SYNCHRONIZED_LOCK, extra, caller, methodName, cost, objects); - } - if ("onMonitorExit".equals(methodName)) { - this.monitor.remove(); + handleCostTimeRecord(Type.SYNCHRONIZED_LOCK, synchronizedInfo, caller, methodName, cost, objects); } } else { if ("onMonitorBefore".equals(methodName)) { if (objects.length > 0) { - this.monitor.set(objects[0]); + this.monitor = new WeakReference<>(objects[0]); } } if ("onMonitorEnter".equals(methodName)) { - holder.set(Thread.currentThread()); - } - - if ("onMonitorExit".equals(methodName)) { - this.monitor.remove(); - holder.set(null); + this.holder = new WeakReference<>(Thread.currentThread()); } } } diff --git a/app/src/main/java/com/mogo/launcher/MogoApplication.java b/app/src/main/java/com/mogo/launcher/MogoApplication.java index 3617c841b1..e5697eb5dd 100644 --- a/app/src/main/java/com/mogo/launcher/MogoApplication.java +++ b/app/src/main/java/com/mogo/launcher/MogoApplication.java @@ -1,6 +1,10 @@ package com.mogo.launcher; +import android.util.Log; + import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.config.JunkConfig; +import com.mogo.eagle.core.function.api.devatools.block.IMoGoBlockProvider; import com.mogo.eagle.core.function.api.devatools.strict.IStrictModeProvider; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.main.MainMoGoApplication; @@ -19,6 +23,9 @@ import com.mogo.launcher.startup.ConfigStartUp; */ public class MogoApplication extends MainMoGoApplication { + + private static final String TAG = "MogoApplication"; + @Override public void onCreate() { // TraceNodeCore.Companion.getTraceNodeCore().setDebugMode(false); //todo @@ -52,4 +59,17 @@ public class MogoApplication extends MainMoGoApplication { super.initLogConfig(); Logger.init(BuildConfig.DEBUG ? LogLevel.DEBUG : LogLevel.OFF); } + + @Override + public void onLowMemory() { + super.onLowMemory(); + // 设备低内存状态,耗内存资源清空 + Log.d(TAG, "-- onLowMemory --"); + if (JunkConfig.isSupportJunkDetect) { + IMoGoBlockProvider block = CallerDevaToolsManager.INSTANCE.block(); + if (block != null) { + block.recorder().clear(); + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java index c88dc50449..950f0e4a47 100644 --- a/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java +++ b/app/src/main/java/com/mogo/launcher/lancet/ViewPressedStateLancet.java @@ -6,7 +6,9 @@ import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; +import android.os.Build; import android.util.AttributeSet; +import android.util.StateSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -512,7 +514,7 @@ public class ViewPressedStateLancet { } int[][] states = new int[size][1]; int[] colors = new int[size]; - states[0] = new int[] { android.R.attr.state_pressed }; + states[0] = new int[] { android.R.attr.state_pressed, -android.R.attr.state_focused, -android.R.attr.state_active }; colors[0] = pressedColor; if (size > 2) { states[1] = new int[] { -android.R.attr.state_enabled }; @@ -533,7 +535,7 @@ public class ViewPressedStateLancet { } } } else { - states[1] = new int[] { -android.R.attr.state_pressed }; + states[1] = StateSet.WILD_CARD; colors[1] = defaultColor; } ColorStateList newColor = new ColorStateList(states, colors); @@ -580,8 +582,19 @@ public class ViewPressedStateLancet { int[] states = drawable.getState(); boolean hasPressed = false; for (int state : states) { - if (state == android.R.attr.state_pressed) { + if ((state & android.R.attr.state_pressed) != 0) { hasPressed = true; + Drawable pressed = null; + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + int index = drawable.findStateDrawableIndex(new int[] { android.R.attr.state_pressed }); + pressed = drawable.getStateDrawable(index); + } + } catch (Throwable ignore) {} + + if (pressed != null) { + drawable.addState(new int[] { -android.R.attr.state_active, -android.R.attr.state_focused }, pressed); + } break; } } @@ -593,7 +606,7 @@ public class ViewPressedStateLancet { if (constantState != null) { Drawable pressed = DrawableCompat.wrap(constantState.newDrawable().mutate()); pressed.setAlpha((int)(255 * alpha)); - drawable.addState(new int[] { android.R.attr.state_pressed }, pressed); + drawable.addState(new int[] { android.R.attr.state_pressed, -android.R.attr.state_focused, -android.R.attr.state_active }, pressed); return drawable; } return null; @@ -601,11 +614,10 @@ public class ViewPressedStateLancet { Drawable.ConstantState constantState = old.getConstantState(); if (constantState != null) { StateListDrawable result = new StateListDrawable(); - int[] state = { -android.R.attr.state_pressed }; - result.addState(state, old); Drawable pressed = DrawableCompat.wrap(constantState.newDrawable().mutate()); pressed.setAlpha((int)(255 * alpha)); - result.addState(new int[] { android.R.attr.state_pressed }, pressed); + result.addState(new int[] { android.R.attr.state_pressed, -android.R.attr.state_focused, -android.R.attr.state_active }, pressed); + result.addState(StateSet.WILD_CARD, old); return result; } return null; diff --git a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt index 6d0db996c1..6c1f1e6e8b 100644 --- a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt @@ -48,6 +48,7 @@ object ConfigStartUp { FunctionBuildConfig.unableLaunchAutopilotGear = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR // 各车型宣传视频本地配置json FunctionBuildConfig.mediaUrlConfig = BuildConfig.mediaUrlConfig + FunctionBuildConfig.musicUrlConfig = BuildConfig.musicUrlConfig //是否支持Patch升级 FunctionBuildConfig.isSupportPatchUpgrade = BuildConfig.IS_SUPPORT_PATCH_UPGRADE diff --git a/build.gradle b/build.gradle index c8b6606972..1a7cd2904b 100644 --- a/build.gradle +++ b/build.gradle @@ -34,11 +34,11 @@ buildscript { classpath "com.mogo.cloud:systrace:${plugin_version}" classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' classpath "com.mogo.sticky:service:${plugin_version}" - classpath "io.github.knight-zxw:lancet-plugin:10.60.0" + classpath "io.github.knight-zxw:lancet-plugin:${lancetx_version}" classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.15.0" classpath 'com.mogo.cloud:matrix:1.0.2' classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.4.0.2513' - classpath 'com.mogo.eagle.core.handler.proxy:plugin:1.0.0' + classpath 'com.mogo.eagle.core.handler.proxy:plugin:10.0.10' classpath 'com.gradle:gradle-enterprise-gradle-plugin:3.15.1' // classpath 'com.bytedance.btrace:rhea-gradle-plugin:2.0.0' } diff --git a/config.gradle b/config.gradle index e139429607..7ee8c77407 100644 --- a/config.gradle +++ b/config.gradle @@ -133,8 +133,8 @@ ext { crashreport : "com.mogo.test:crashreport:${CRASHREPORT_VERSION}", crashreportapmbyte : "com.mogo.test:crashreport-apmbyte:${CRASHREPORT_APMBYTE_VERSION}", crashreportnoop : "com.mogo.test:crashreport-noop:${CRASHREPORT_NOOP_VERSION}", - apm_insight : 'com.volcengine:apm_insight:1.4.10.cn-rc.0', - apm_insight_crash : 'com.volcengine:apm_insight_crash:1.4.6-rc.17', + apm_insight : 'com.volcengine:apm_insight:1.5.4.cn-rc.1', + apm_insight_crash : 'com.volcengine:apm_insight_crash:1.5.0', cicle_indicator : 'me.relex:circleindicator:2.1.6', //========================= TTS语音 Maven 版本管理 ========================= @@ -207,11 +207,11 @@ ext { //========================= LancetX =================== - lancetx_runtime : "io.github.knight-zxw:lancet-runtime:10.50.0", + lancetx_runtime : "io.github.knight-zxw:lancet-runtime:${lancetx_version}", - lancetx_compiler : "com.mogo.eagle.core.lancetx:compiler:1.0.10", + lancetx_compiler : "com.mogo.eagle.core.lancetx:compiler:${lancetx_version}", - lancetx_compiler_lib : "com.mogo.eagle.core.lancetx:runtime:1.0.5", + lancetx_compiler_lib : "com.mogo.eagle.core.lancetx:runtime:${lancetx_version}", //========================= autosize ====================== androidautoSize : 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1', @@ -225,19 +225,19 @@ ext { btrace : "com.bytedance.btrace:rhea-core:2.0.0", mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.11", - log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.30", + log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.50", // 安全证书 passport_secret : "com.zhidaoauto:sdk-java:1.0.6-SNAPSHOT", // 主线程卡顿监测 - block_detector : "com.mogo.eagle.core.block:runtime:10.90.60", + block_detector : "com.mogo.eagle.core.block:runtime:20.0.25", //======================== google auto-service =============== google_auto_service : "com.google.auto.service:auto-service:1.0-rc7", //======================== handler-proxy-runtime ============== - handler_proxy_runtime : "com.mogo.eagle.core.handler.proxy:runtime:1.0.0" + handler_proxy_runtime : "com.mogo.eagle.core.handler.proxy:runtime:10.0.10" ] android = [ fLauncherApplicationId : "com.mogo.launcher.f", @@ -245,7 +245,7 @@ ext { compileSdkVersion : 33, buildToolsVersion : "29.0.2", minSdkVersion : 23, - targetSdkVersion : 27, + targetSdkVersion : 29, koomxhook : "com.kuaishou.koom:xhook-static:2.2.0", ] } diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt index 8d281816a8..8b908447c1 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/pnc/V2NIdentifyDrawer.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.function.biz.v2x.v2n.pnc import android.os.Handler import android.os.HandlerThread import android.os.Message +import android.util.Log import androidx.core.util.Pair import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.enums.CommunicationType @@ -19,6 +20,8 @@ import com.mogo.eagle.core.function.angle.scenes.Default import com.mogo.eagle.core.function.angle.scenes.RoadEvent import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener +import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.V2N +import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerV2XListenerManager.V2NCarTypeCheck @@ -55,6 +58,11 @@ internal object V2NIdentifyDrawer { V2XBizTrace.onAck(TAG, mapOf("shiGong-shiGu" to ""), true) return@Callback true } + if (msg.what == MSG_WHAT_DRAW_SHIGONE) { + Log.d("V2NIdentifyDrawer", "---callback -- drawShiGong --- 1 ---") + } else { + Log.d("V2NIdentifyDrawer", "---callback -- drawShiGu --- 1 ---") + } val car = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() val filtered = events.filterIsInstance(TrackedObject::class.java).filter { itx -> DrivingDirectionUtils.getDegreeOfCar2Poi( @@ -63,14 +71,25 @@ internal object V2NIdentifyDrawer { itx.longitude, itx.latitude, car.heading.toInt() - ) < 90 + ) < 90 && CoordinateUtils.calculateLineDistance(car.longitude, car.latitude, itx.longitude, itx.latitude) <= 300 } if (filtered.isEmpty()) { + if (msg.what == MSG_WHAT_DRAW_SHIGONE) { + Log.d("V2NIdentifyDrawer", "---callback -- drawShiGong --- filter is empty return ---") + } else { + Log.d("V2NIdentifyDrawer", "---callback -- drawShiGu --- filter is empty return---") + } V2XBizTrace.onAck(TAG, mapOf("shiGong-shiGu-filter" to ""), true) return@Callback true } + if (msg.what == MSG_WHAT_DRAW_SHIGONE) { + Log.d("V2NIdentifyDrawer", "---callback -- drawShiGong --- 2 ---") + } else { + Log.d("V2NIdentifyDrawer", "---callback -- drawShiGu --- 2 ---") + } filtered.forEach { itx -> val id = itx.uuid.toString() + Log.d("V2NIdentifyDrawer", "---callback --- id: $id ---") AiRoadMarker.aiMakers.getOrPut(id) { AiRoadMarker().apply { val poiType = getPoiType(itx.type).poiType @@ -128,6 +147,7 @@ internal object V2NIdentifyDrawer { object : IMoGoWarningStatusListener { override fun onShow() { super.onShow() + runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.START) } CallerVisualAngleManager.changeAngle( RoadEvent( itx.longitude, @@ -139,6 +159,7 @@ internal object V2NIdentifyDrawer { override fun onDismiss() { super.onDismiss() + runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.STOP) } CallerVisualAngleManager.changeAngle(Default()) } }, @@ -155,8 +176,10 @@ internal object V2NIdentifyDrawer { }.receive() } } else if (msg.what == MSG_WHAT_DRAW_YONGDU) { + Log.d("V2NIdentifyDrawer", "---callback -- drawYongDu --- 1 ---") val events = msg.obj as? List<*> if (events == null || events.isEmpty()) { + Log.d("V2NIdentifyDrawer", "---callback -- drawYongDu --- 1 filter is empty ---") V2XBizTrace.onAck(TAG, mapOf("yongDu" to ""), true) return@Callback true } @@ -174,18 +197,21 @@ internal object V2NIdentifyDrawer { eventLon, eventLat, car.heading.toInt() - ) < 90 + ) < 90 && CoordinateUtils.calculateLineDistance(car.longitude, car.latitude, eventLon, eventLat) <= 300 } if (filtered.isEmpty()) { + Log.d("V2NIdentifyDrawer", "---callback -- drawYongDu --- 2 filter is empty ---") V2XBizTrace.onAck(TAG, mapOf("yongDu-filter" to ""), true) return@Callback true } + Log.d("V2NIdentifyDrawer", "---callback -- drawYongDu --- 2 ---") filtered.forEach { itx -> val id = itx.rteId.toString() val lon = itx.eventPos?.offsetLL?.positionLatLon?.lon?.let { it * 1.0 / 10_000_000 } ?: 0.0 val lat = itx.eventPos?.offsetLL?.positionLatLon?.lat?.let { it * 1.0 / 10_000_000 } ?: 0.0 + Log.d("V2NIdentifyDrawer", "---callback -- id: $id---") AiRoadMarker.aiMakers.getOrPut(id) { AiRoadMarker().apply { val poiType = getPoiType(itx.eventType).poiType @@ -233,6 +259,7 @@ internal object V2NIdentifyDrawer { object : IMoGoWarningStatusListener { override fun onShow() { super.onShow() + runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.START) } CallerVisualAngleManager.changeAngle( RoadEvent( lon, @@ -244,6 +271,7 @@ internal object V2NIdentifyDrawer { override fun onDismiss() { super.onDismiss() + runCatching { CallerHmiManager.notifyXiaoZhiStatusChanged(V2N(EventTypeEnumNew.getEnumType(poiType)), State.STOP) } CallerVisualAngleManager.changeAngle(Default()) } }, @@ -340,13 +368,16 @@ internal object V2NIdentifyDrawer { } private fun drawShiGong(events: List) { + Log.d("V2NIdentifyDrawer", "---drawShiGong --- 1 ---:${events.size}, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { + Log.d("V2NIdentifyDrawer", "---drawShiGong --- 2 ---") handler.removeMessages(MSG_WHAT_DRAW_SHIGONE) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_SHIGONE, events)) } } private fun drawShiGu(events: List) { + Log.d("V2NIdentifyDrawer", "---drawShiGu --- 1 ---:${events.size}, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { handler.removeMessages(MSG_WHAT_DRAW_SHIGU) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_SHIGU, events)) @@ -354,6 +385,7 @@ internal object V2NIdentifyDrawer { } private fun drawYongDu(events: List) { + Log.d("V2NIdentifyDrawer", "---drawYongDu --- 1 ---:${events.size}, [${FunctionBuildConfig.v2nMainSwitch}, ${FunctionBuildConfig.isNewV2NData}]") if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) { handler.removeMessages(MSG_WHAT_DRAW_YONGDU) handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_YONGDU, events)) diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt index cbb47b2dee..e1dca1a41e 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/remove/MarkerRemoveManager.kt @@ -108,7 +108,7 @@ object MarkerRemoveManager { elapsed += delta } Log.d(TAG, "--- checkTask --- 5 ---:delta:$delta, elapsed:${elapsed}, id: ${marker.id}") - if (elapsed >= 100) { + if (elapsed >= 500) { var removeMarkerError = false marker.markers?.forEach { try { diff --git a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventScenario.java b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventScenario.java index c26f41219e..e5470cf1e5 100644 --- a/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventScenario.java +++ b/core/function-impl/mogo-core-function-biz/src/main/java/com/mogo/eagle/function/biz/v2x/v2n/scenario/scene/road/V2XRoadEventScenario.java @@ -1,5 +1,7 @@ package com.mogo.eagle.function.biz.v2x.v2n.scenario.scene.road; +import android.telecom.Call; + import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.data.enums.CommunicationType; import com.mogo.eagle.core.data.enums.DataSourceType; @@ -15,6 +17,8 @@ import com.mogo.eagle.core.data.msgbox.V2XMsg; import com.mogo.eagle.core.function.angle.scenes.Default; import com.mogo.eagle.core.function.angle.scenes.RoadEvent; import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener; +import com.mogo.eagle.core.function.api.hmi.xiaozhi.event.V2N; +import com.mogo.eagle.core.function.api.hmi.xiaozhi.state.State; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager; @@ -161,6 +165,9 @@ public class V2XRoadEventScenario extends AbsV2XScenario imp if (entity != null) { V2XRoadEventEntity content = entity.getContent(); if (content != null) { + try { + CallerHmiManager.INSTANCE.notifyXiaoZhiStatusChanged(new V2N(EventTypeEnumNew.getEnumType(content.getPoiType())), State.START); + } catch (Throwable ignore) {} if (isNeedChangeAngle()) { MarkerLocation location = content.getLocation(); if (location != null) { @@ -186,6 +193,15 @@ public class V2XRoadEventScenario extends AbsV2XScenario imp @Override public void onDismiss() { if (isNeedChangeAngle()) { + V2XMessageEntity entity = getV2XMessageEntity(); + if (entity != null) { + V2XRoadEventEntity content = entity.getContent(); + if (content != null) { + try { + CallerHmiManager.INSTANCE.notifyXiaoZhiStatusChanged(new V2N(EventTypeEnumNew.getEnumType(content.getPoiType())), State.STOP); + } catch (Throwable ignore) {} + } + } CallerVisualAngleManager.INSTANCE.changeAngle(new Default(3, TimeUnit.SECONDS)); } release(); diff --git a/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/MoGoChatFacade.kt b/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/MoGoChatFacade.kt index 769d2d4ef2..97678d2bfd 100644 --- a/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/MoGoChatFacade.kt +++ b/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/MoGoChatFacade.kt @@ -662,7 +662,7 @@ object MoGoChatFacade: IMoGoChatFacade { send(AnswerState.EnterRoomSuccess) } is EnterRoomFail -> { - send(AnswerState.Error(AnswerState.CODE_ANSWER_EXIT_ROOM_FAIL, "[Answer] - 应答者退房失败: code : ${state.code} - msg : ${state.msg}")) + send(AnswerState.Error(AnswerState.CODE_ANSWER_EXIT_ROOM_FAIL, "[Answer] - 应答者进房失败: code : ${state.code} - msg : ${state.msg}")) return@async } ExitRoomSuccess -> { diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt index 2d6a69a955..c6d9ffe435 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt @@ -15,10 +15,12 @@ class DataCenterProvider: IDataCenterProvider { override val functionName: String get() = "DataCenterProvider" + private var mContext:Context? = null + override fun init(context: Context?) { MoGoLocationDispatcher.initListener() - - context?.let { + mContext = context + mContext?.let { CallerMsgBoxManager.queryAllMessages(it) TrafficLightDispatcher.INSTANCE.initServer(it) SpeedLimitDispatcher.INSTANCE.initLimit(it) diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt index 77b154540b..2815b8882d 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/MoGoAutopilotControlProvider.kt @@ -7,6 +7,7 @@ import bag_manager.BagManagerOuterClass import chassis.SpecialVehicleTaskCmdOuterClass import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.commons.debug.DebugConfig +import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters import com.mogo.eagle.core.data.autopilot.toAutoPilotLine import com.mogo.eagle.core.data.autopilot.toRouteInfo @@ -17,17 +18,24 @@ import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.data.deva.chain.ChainConstant +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_IPC_REBOOT +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_POWER_OFF import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_SEND import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_MULTI_CONNECT import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_SOURCE_ADAS -import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_AUTOPILOT +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS +import com.mogo.eagle.core.data.multidisplay.TelematicConstant import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotControlProvider +import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_RAIN import com.mogo.eagle.core.function.api.map.collect.IMoGoMapDataCollectProvider import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager +import com.mogo.eagle.core.function.call.cloud.CallerCloudCertManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicStatusListenerManager import com.mogo.eagle.core.function.datacenter.autopilot.adapter.MoGoAdasListenerImpl import com.mogo.eagle.core.function.datacenter.autopilot.adapter.MoGoAdasMsgConnectStatusListenerImpl @@ -38,7 +46,7 @@ import com.mogo.eagle.core.function.datacenter.autopilot.telematic.TeleMsgHandle import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C -import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ParseVersionUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.ToastUtils @@ -55,16 +63,15 @@ import com.zhidao.support.adas.high.AdasOptions import com.zhidao.support.adas.high.OnMultiDeviceListener import com.zhidao.support.adas.high.chain.AdasChain import com.zhidao.support.adas.high.common.Constants -import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS import com.zhidao.support.adas.high.common.CupidLogUtils -import com.zhidao.support.adas.high.common.MessageType +import com.zhjt.mogo.adas.common.MessageType import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.bean.MogoReport import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume -import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm +import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop import com.zhjt.service.chain.ChainLog import io.netty.channel.Channel @@ -91,6 +98,8 @@ class MoGoAutopilotControlProvider : @Volatile private var isInit = false + @Volatile + private var isRainModeInit = false override val functionName: String get() = TAG @@ -98,6 +107,7 @@ class MoGoAutopilotControlProvider : override fun init(context: Context) { CallerLogger.i("$M_D_C$TAG", "初始化工控机连接……") mContext = context + AdasManager.getInstance().init(context)//必须在AdasManager.getInstance().create() 和构建AdasOptions之前调用 runCatching { // 初始化ADAS 域控制器 CupidLogUtils.setEnableLog(false) @@ -115,15 +125,18 @@ class MoGoAutopilotControlProvider : // .setMessageTypes(messageTypes).build() // "192.168.1.102" - val options = AdasOptions.Builder() - .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) - .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) - .setClient(false) + val options = AdasOptions.newBuilder() + .setConnectionMode(AdasOptions.IPC_CONNECTION_MODE.PING) + .setPingAddressList(AdasManager.getInstance().pingAddressList) + .setPassenger(false) + .setEnableCertification(SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE)) + .setRootCrt(CallerCloudCertManager.getRootCrtF()) + .setDeviceCrt(CallerCloudCertManager.getDeviceCrtF()) .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) // .setSubscribeInterfaceOptions(subscribeInterfaceOptions)// .build() - AdasManager.getInstance().create(context, options, MoGoAdasMsgConnectStatusListenerImpl()) + AdasManager.getInstance().create(mContext, options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// // 监听ADAS-SDK获取到的工控机数据 AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) @@ -213,12 +226,12 @@ class MoGoAutopilotControlProvider : directConnect(context) } else { val options = AdasOptions - .Builder() - .setClient(true) + .newBuilder() + .setPassenger(true) .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() AdasManager.getInstance() - .create(context, options, MoGoAdasMsgConnectStatusListenerImpl()) + .create(mContext, options, MoGoAdasMsgConnectStatusListenerImpl()) // 监听ADAS-SDK获取到的工控机数据 AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) // 接收司机屏发过来的感知、定位等数据 @@ -243,13 +256,16 @@ class MoGoAutopilotControlProvider : private fun directConnect(context: Context) { val options = AdasOptions - .Builder() - .setIpcConnectionMode(AdasOptions.IPC_CONNECTION_MODE.FIXATION) - .setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(mContext)) - .setClient(false)// 乘客端直连工控机改为false + .newBuilder() + .setConnectionMode(AdasOptions.IPC_CONNECTION_MODE.PING) + .setPingAddressList(AdasManager.getInstance().pingAddressList) + .setPassenger(false)// 乘客端直连工控机改为false + .setEnableCertification(SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE)) + .setRootCrt(CallerCloudCertManager.getRootCrtF()) + .setDeviceCrt(CallerCloudCertManager.getDeviceCrtF()) .setUnableLaunchAutopilotGear(FunctionBuildConfig.unableLaunchAutopilotGear) .build() - AdasManager.getInstance().create(context, options, MoGoAdasMsgConnectStatusListenerImpl()) + AdasManager.getInstance().create(mContext, options, MoGoAdasMsgConnectStatusListenerImpl()) //////////////////////////////////注意先后顺序,AdasManager.getInstance().create后才可以设置监听///////////////////////////////////////////// // 监听ADAS-SDK获取到的工控机数据 AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) @@ -293,7 +309,7 @@ class MoGoAutopilotControlProvider : */ override fun resetIpAddress(autoPilotIp: String) { // 关闭通信 - AdasManager.getInstance().disconnect() +// AdasManager.getInstance().disconnect() // 延时执行连接指定IP地址 ThreadUtils.executeBySingleWithDelay(object : ThreadUtils.SimpleTask() { @RequiresPermission(permission.INTERNET) @@ -303,12 +319,22 @@ class MoGoAutopilotControlProvider : SharedPrefsMgr.getInstance().putString(MoGoConfig.AUTOPILOT_IP, autoPilotIp) } // 设置IP地址 - AdasManager.getInstance().adasOptions.isClient = false - AdasManager.getInstance().adasOptions.ipcConnectionMode = - AdasOptions.IPC_CONNECTION_MODE.ASSIGN - AdasManager.getInstance().adasOptions.ipcAssignIP = autoPilotIp - // 打开通讯连接 - AdasManager.getInstance().connect() + val options = AdasOptions.newBuilder() + .setPassenger(false) + .setEnableCertification(SharedPrefsMgr.getInstance().getBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE)) + .setRootCrt(CallerCloudCertManager.getRootCrtF()) + .setDeviceCrt(CallerCloudCertManager.getDeviceCrtF()) + .setConnectionMode(AdasOptions.IPC_CONNECTION_MODE.SPECIFIED) + .setSpecifiedAddress(autoPilotIp) + .build() + AdasManager.getInstance().create(mContext, options, MoGoAdasMsgConnectStatusListenerImpl()) + AdasManager.getInstance().setOnAdasListener(MoGoAdasListenerImpl()) +// AdasManager.getInstance().adasOptions.isClient = false +// AdasManager.getInstance().adasOptions.ipcConnectionMode = +// AdasOptions.IPC_CONNECTION_MODE.ASSIGN +// AdasManager.getInstance().adasOptions.ipcAssignIP = autoPilotIp +// // 打开通讯连接 +// AdasManager.getInstance().connect() return "" } @@ -358,12 +384,12 @@ class MoGoAutopilotControlProvider : if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { val invokeResult = AdasManager.getInstance() .sendAutoPilotModeReq(1, source, null) - invokeAutoPilotResult(if (invokeResult) "无参自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") + invokeAutoPilotResult(if (invokeResult > -1) "无参自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") } else { - if (AdasManager.getInstance().ipcConnectionStatus == IPC_CONNECTION_STATUS.CONNECTED) { + if (AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { val invokeResult = AdasManager.getInstance() .sendAutoPilotModeReq(1, source, null) - invokeAutoPilotResult(if (invokeResult) "无参自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") + invokeAutoPilotResult(if (invokeResult > -1) "无参自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") } else { invokeAutoPilotResult("车机与工控机链接失败,无法开启自动驾驶 无参") CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法开启自动驾驶") @@ -374,12 +400,12 @@ class MoGoAutopilotControlProvider : if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { val invokeResult = AdasManager.getInstance() .sendAutoPilotModeReq(1, source, controlParameters.toRouteInfo()) - invokeAutoPilotResult(if (invokeResult) "自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") + invokeAutoPilotResult(if (invokeResult > -1) "自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") } else { - if (AdasManager.getInstance().ipcConnectionStatus == IPC_CONNECTION_STATUS.CONNECTED) { + if (AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { val invokeResult = AdasManager.getInstance() .sendAutoPilotModeReq(1, source, controlParameters.toRouteInfo()) - invokeAutoPilotResult(if (invokeResult) "自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") + invokeAutoPilotResult(if (invokeResult > -1) "自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空") } else { invokeAutoPilotResult("车机与工控机链接失败,无法开启自动驾驶") CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法开启自动驾驶") @@ -423,7 +449,7 @@ class MoGoAutopilotControlProvider : } override fun cancelAutoPilot() { - if (AdasManager.getInstance().ipcConnectionStatus == IPC_CONNECTION_STATUS.CONNECTED) { + if (AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { AdasManager.getInstance().sendAutoPilotModeReq(0, 1, null) } else { CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法断开自动驾驶") @@ -432,19 +458,19 @@ class MoGoAutopilotControlProvider : override fun recordPackage(): Boolean { return AdasManager.getInstance() - .startRecordPackage((System.currentTimeMillis() / 1000).toInt(), 1) + .startRecordPackage((System.currentTimeMillis() / 1000).toInt(), 1) > -1 } override fun recordPackage(type: Int, id: Int): Boolean { - return AdasManager.getInstance().startRecordPackage(id, type) + return AdasManager.getInstance().startRecordPackage(id, type) > -1 } override fun recordPackage(type: Int, id: Int, duration: Int): Boolean { - return AdasManager.getInstance().startRecordPackage(id, duration, type) + return AdasManager.getInstance().startRecordPackage(id, duration, type) > -1 } override fun recordPackage(type: Int, id: Int, duration: Int, bduration: Int): Boolean { - return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration) + return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration) > -1 } override fun recordPackage( @@ -454,11 +480,11 @@ class MoGoAutopilotControlProvider : bduration: Int, topics: List ): Boolean { - return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration, topics) + return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration, topics) > -1 } override fun stopRecord(type: Int, id: Int): Boolean { - return AdasManager.getInstance().stopRecordPackage(id, type) + return AdasManager.getInstance().stopRecordPackage(id, type) > -1 } override fun setEnableLog(isEnableLog: Boolean) { @@ -477,15 +503,7 @@ class MoGoAutopilotControlProvider : } override fun setAutoPilotSpeed(speed: Int): Boolean { - return AdasManager.getInstance().sendAutopilotSpeedReq(speed / 3.6) - } - - override fun setIPCShutDown() { -// AdasManager.getInstance().shutdownIPC() - } - - override fun setIPCReboot() { -// AdasManager.getInstance().rebootAPDocker() + return AdasManager.getInstance().sendAutopilotSpeedReq(speed / 3.6) > -1 } override fun recordCause(key: String?, name: String?, id: String?, reason: String?) { @@ -595,9 +613,9 @@ class MoGoAutopilotControlProvider : ) override fun sendDetouring(isEnable: Boolean): Boolean { return if (isEnable) { - AdasManager.getInstance().sendDetouring(1) + AdasManager.getInstance().sendDetouring(1) > -1 } else { - AdasManager.getInstance().sendDetouring(0) + AdasManager.getInstance().sendDetouring(0) > -1 } } @@ -607,7 +625,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendDetouringSpeed(speed: Double): Boolean { - return AdasManager.getInstance().sendDetouringSpeed(speed) + return AdasManager.getInstance().sendDetouringSpeed(speed) > -1 } /** @@ -618,9 +636,9 @@ class MoGoAutopilotControlProvider : */ override fun sendWeakNetSlowDown(isEnable: Boolean): Boolean { return if (isEnable) { - AdasManager.getInstance().sendWeakNetSlowDown(1) + AdasManager.getInstance().sendWeakNetSlowDown(1) > -1 } else { - AdasManager.getInstance().sendWeakNetSlowDown(0) + AdasManager.getInstance().sendWeakNetSlowDown(0) > -1 } } @@ -632,9 +650,9 @@ class MoGoAutopilotControlProvider : */ override fun sendBreakdownSlowDown(isEnable: Boolean): Boolean { return if (isEnable) { - AdasManager.getInstance().sendBreakdownSlowDown(1) + AdasManager.getInstance().sendBreakdownSlowDown(1) > -1 } else { - AdasManager.getInstance().sendBreakdownSlowDown(0) + AdasManager.getInstance().sendBreakdownSlowDown(0) > -1 } } @@ -645,7 +663,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendFusionMode(cmd: Int): Boolean { - return AdasManager.getInstance().sendFusionMode(cmd) + return AdasManager.getInstance().sendFusionMode(cmd) > -1 } /** @@ -655,10 +673,10 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendOvertakeMaxSpeed(maxSpeed: Double): Boolean { - return AdasManager.getInstance().sendOvertakeMaxSpeed(maxSpeed) + return AdasManager.getInstance().sendOvertakeMaxSpeed(maxSpeed) > -1 } - override fun sendSetParamReq(param: Map): Boolean { + override fun sendSetParamReq(param: Map): Set { return AdasManager.getInstance().sendSetParamReq(param) } @@ -669,7 +687,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendGetAllParamReq(): Boolean { - return AdasManager.getInstance().sendGetAllParamReq() + return AdasManager.getInstance().sendGetAllParamReq() > -1 } /** @@ -680,7 +698,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendGetParamReq(vararg paramType: AdasConstants.MapSystemParamType): Boolean { - return AdasManager.getInstance().sendGetParamReq(*paramType) + return AdasManager.getInstance().sendGetParamReq(*paramType) > -1 } /** @@ -691,7 +709,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun getBadCaseConfig(reqType: Int,recordType: Int,topicsNeedToCache: List): Boolean{ - return AdasManager.getInstance().sendRecordDataConfigReq(reqType, recordType, topicsNeedToCache) + return AdasManager.getInstance().sendRecordDataConfigReq(reqType, recordType, topicsNeedToCache) > -1 } /** @@ -789,7 +807,7 @@ class MoGoAutopilotControlProvider : } - return AdasManager.getInstance().sendBagManagerCmd(bagManager.build()) + return AdasManager.getInstance().sendBagManagerCmd(bagManager.build()) > -1 } /** @@ -867,11 +885,32 @@ class MoGoAutopilotControlProvider : } /** - * 发送工控机所有节点重启命令 + * 系统命令请求 重启所有节点 + * 命令下发存在回执 */ + @ChainLog( + linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT, + linkCode = CHAIN_SOURCE_ADAS, + nodeAliasCode = CHAIN_CODE_ADAS_IPC_REBOOT, + paramIndexes = [-1] + ) override fun sendIpcReboot() { //重启所有节点 - AdasManager.getInstance().sendSystemCmdReq(MessagePad.SystemCmdType.SYSTEMCMD_REBOOT) + AdasManager.getInstance().sendIpcReboot() + } + + /** + * 系统命令请求 关机 + * 命令下发存在回执 + */ + @ChainLog( + linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT, + linkCode = CHAIN_SOURCE_ADAS, + nodeAliasCode = CHAIN_CODE_ADAS_POWER_OFF, + paramIndexes = [-1] + ) + override fun sendIpcPowerOff() : Long{ + return AdasManager.getInstance().sendIpcPowerOff() } /** @@ -908,7 +947,7 @@ class MoGoAutopilotControlProvider : * 车机与工控机是否连上了 */ override fun isConnected(): Boolean { - return AdasManager.getInstance().ipcConnectionStatus == IPC_CONNECTION_STATUS.CONNECTED + return AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED } /** @@ -978,7 +1017,7 @@ class MoGoAutopilotControlProvider : invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为:${carConfigResp.macAddress}") } - if (carConfigResp.dockVersion.isNotEmpty()) { + if (carConfigResp.dockVersion.isNotEmpty() && !isRainModeInit) { if (carConfigResp.dockVersion.toLowerCase(Locale.getDefault()).contains("taxi")) { //修改雨天模式开关默认状态为开启(仅针对taxi320及以上的版本)-sop 215 val num = ParseVersionUtils.parseVersion(true, carConfigResp.dockVersion) @@ -986,8 +1025,11 @@ class MoGoAutopilotControlProvider : FunctionBuildConfig.isRainMode = true } } + //将雨天模式显示状态同步给UI展示 + CallerHmiViewControlListenerManager.invokeFuncMode(FUNC_MODE_RAIN, FunctionBuildConfig.isRainMode) //每次工控机连接成功后,需同步当前设置的雨天模式状态 setRainMode(FunctionBuildConfig.isRainMode) + isRainModeInit = true } } @@ -999,6 +1041,13 @@ class MoGoAutopilotControlProvider : ) private fun invokeNettyConnResult(status: String) { CallerLogger.d("$M_D_C$TAG", status) + runCatching { + val map = HashMap().also { + it["f1"] = FunctionBuildConfig.v2nMainSwitch + it["f2"] = FunctionBuildConfig.isNewV2NData + } + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) + } } override fun getTeleTimeStamp(): Long { @@ -1022,7 +1071,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperStartTaskResp(reqNo: String, startTaskResp: SweeperTask.StartTaskResp): Boolean { - return AdasManager.getInstance().sendSweeperStartTaskResp(reqNo, startTaskResp) + return AdasManager.getInstance().sendSweeperStartTaskResp(reqNo, startTaskResp) > -1 } /** @@ -1034,7 +1083,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperTaskConfirmResp(reqNo: String, taskConfirmResp: SweeperTaskConfirm.TaskConfirmResp): Boolean { - return AdasManager.getInstance().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp) + return AdasManager.getInstance().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp) > -1 } /** @@ -1046,7 +1095,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperStopTaskResp(reqNo: String, stopTaskResp: SweeperTaskStop.StopTaskResp): Boolean { - return AdasManager.getInstance().sendSweeperStopTaskResp(reqNo, stopTaskResp) + return AdasManager.getInstance().sendSweeperStopTaskResp(reqNo, stopTaskResp) > -1 } /** @@ -1060,7 +1109,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperSuspendResumeTaskReq(isSuspend: Boolean, reqNo: String, suspendResumeTaskReq: SweeperTaskSuspendResume.SuspendResumeTaskReq): Boolean { - return AdasManager.getInstance().sendSweeperSuspendResumeTaskReq(isSuspend,reqNo, suspendResumeTaskReq) + return AdasManager.getInstance().sendSweeperSuspendResumeTaskReq(isSuspend,reqNo, suspendResumeTaskReq) > -1 } /** @@ -1072,7 +1121,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperGetTaskReq(reqNo: String, getTaskReq: SweeperTask.GetTaskReq): Boolean { - return AdasManager.getInstance().sendSweeperGetTaskReq(reqNo, getTaskReq) + return AdasManager.getInstance().sendSweeperGetTaskReq(reqNo, getTaskReq) > -1 } /** @@ -1084,7 +1133,7 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperAutopilotBootable(reqNo: String, isBootable: SweeperBootable.IsBootable): Boolean { - return AdasManager.getInstance().sendSweeperAutopilotBootable(reqNo, isBootable) + return AdasManager.getInstance().sendSweeperAutopilotBootable(reqNo, isBootable) > -1 } /** @@ -1096,14 +1145,14 @@ class MoGoAutopilotControlProvider : * @return boolean */ override fun sendSweeperCloudSuspendResumeTaskResp(reqNo: String, bigTaskActionResp: SweeperTaskCloudSuspendResume.BigTaskActionResp): Boolean { - return AdasManager.getInstance().sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp) + return AdasManager.getInstance().sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp) > -1 } override fun sendParallelDrivingReq( reqNo: String, parallelRequest: ParallelDrivingRequest.ParallelRequest ): Boolean { - return AdasManager.getInstance().sendParallelDrivingReq(reqNo, parallelRequest) + return AdasManager.getInstance().sendParallelDrivingReq(reqNo, parallelRequest) > -1 } override fun setIsDrawPointCloud(isDrawPointCloud: Boolean) { @@ -1145,7 +1194,7 @@ class MoGoAutopilotControlProvider : } override fun sendRoboBusJinlvM1FrontDoorCmd(switchCmd: Int): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(switchCmd) + return AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(switchCmd) > -1 } override fun sendRoboBusJinlvM1AirConditionerCmd( @@ -1154,30 +1203,30 @@ class MoGoAutopilotControlProvider : windSpeedCmd: Int, temperatureCmd: Int ): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1AirConditionerCmd(switchCmd, modeCmd, windSpeedCmd, temperatureCmd) + return AdasManager.getInstance().sendRoboBusJinlvM1AirConditionerCmd(switchCmd, modeCmd, windSpeedCmd, temperatureCmd) > -1 } override fun sendRoboBusJinlvM1HeaderCmd(switchCmd: Int, windSpeedCmd: Int): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(switchCmd, windSpeedCmd) + return AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(switchCmd, windSpeedCmd) > -1 } override fun sendRoboBusJinlvM1MainLamp1Cmd(switchCmd: Int): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp1Cmd(switchCmd) + return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp1Cmd(switchCmd) > -1 } override fun sendRoboBusJinlvM1MainLamp2Cmd(switchCmd: Int): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp2Cmd(switchCmd) + return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp2Cmd(switchCmd) > -1 } override fun sendRoboBusJinlvM1SmallLampCmd(switchCmd: Int): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1SmallLampCmd(switchCmd) + return AdasManager.getInstance().sendRoboBusJinlvM1SmallLampCmd(switchCmd) > -1 } override fun sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd: SpecialVehicleTaskCmdOuterClass.RoboBusJinlvM1Cmd): Boolean { - return AdasManager.getInstance().sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd) + return AdasManager.getInstance().sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd) > -1 } override fun sendPlanningCmd(cmd: Int): Boolean { - return AdasManager.getInstance().sendPlanningCmd(cmd) + return AdasManager.getInstance().sendPlanningCmd(cmd) > -1 } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index a8520859ea..1b856b1ab8 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -58,8 +58,10 @@ import com.mogo.support.obu.ObuScene import com.zhidao.support.adas.high.OnAdasListener import com.zhjt.mogo.adas.data.bean.AdasParam import com.zhidao.support.adas.high.common.ProtocolStatus +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo.adas.data.AiCloudTask import com.zhjt.mogo.adas.data.bean.AutopilotStatistics +import com.zhjt.mogo.adas.data.bean.ReceivedAck import com.zhjt.mogo.adas.data.bean.UnableLaunchData import com.zhjt.mogo.adas.data.bean.UnableLaunchReason import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable @@ -356,12 +358,15 @@ class MoGoAdasListenerImpl : OnAdasListener { } } - // 自动驾驶设备基础信息请求 - override fun onBasicInfoReq( - header: MessagePad.Header, - basicInfoReq: MessagePad.BasicInfoReq? - ) { - invokeAutopilotSNRequest() + /** + * 自动驾驶设备基础信息请求 + * 如果启用认证后,在AdasOptions中未传递RootCrt需要在此回调中调用{@link AdasManager#certification(String, ByteString)}进行域控证书认证 + * + * @param header 头 + * @param basicInfoReq 数据 + */ + override fun onBasicInfoReq(header: MessagePad.Header?, basicInfoReq: MessagePad.BasicInfoReq) { + invokeAutopilotSNRequest(basicInfoReq) } //工控机基础配置信息 @@ -381,7 +386,6 @@ class MoGoAdasListenerImpl : OnAdasListener { AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号 AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址 AppConfigInfo.protocolVersionNumber = carConfigResp.protocolVersionValue//工控机协议版本 - AppConfigInfo.isConnectAutopilot = true invokeAutopilotCarConfigData(carConfigResp) } } @@ -909,6 +913,10 @@ class MoGoAdasListenerImpl : OnAdasListener { CallerRoboBusJinlvM1StitchedVideoListenerManager.invokeRoboBusJinlvM1StitchedVideo(data) } + override fun onSsmReceiveTimeout(isTimeout: Boolean) { + CallerAutoPilotStatusListenerManager.invokeSsmReceiveTimeout(isTimeout) + } + /** * 是否可以启动自动驾驶 * 使用方法查看:app_ipc_monitoring/uiMainActivity/onAutopilotAbility @@ -930,6 +938,16 @@ class MoGoAdasListenerImpl : OnAdasListener { CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(isParallelDrivingAbility) } + /** + * 回执消息 + * PAD发送数据到域控的回执消息,是否存在回执详情参见{@link MessageType} 枚举 TYPE_SEND_XXX_XXX 消息回执超时时间大于0的表示需要回执 + * + * @param receivedAck 回执 + */ + override fun onReceiveReceivedAck(receivedAck: ReceivedAck) { + CallerReceiveReceivedAckListenerManager.invokeReceiveReceivedAck(receivedAck) + } + @ChainLog( linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT, linkCode = CHAIN_SOURCE_ADAS, diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt index 2a4d638496..c1bbbb09c0 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt @@ -1,9 +1,17 @@ package com.mogo.eagle.core.function.datacenter.autopilot.adapter -import com.mogo.commons.debug.DebugConfig.* +import android.text.TextUtils +import com.mogo.commons.debug.DebugConfig.NET_MODE_DEMO +import com.mogo.commons.debug.DebugConfig.NET_MODE_DEV +import com.mogo.commons.debug.DebugConfig.NET_MODE_QA +import com.mogo.commons.debug.DebugConfig.NET_MODE_RELEASE +import com.mogo.commons.debug.DebugConfig.getNetMode import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.msgbox.AutopilotMsg +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager @@ -11,17 +19,24 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingActionsListenerManager import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C +import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.OnAdasConnectStatusListener import com.zhidao.support.adas.high.bean.VersionCompatibility -import com.zhidao.support.adas.high.common.Constants -import com.zhidao.support.adas.high.common.Constants.ENVIRONMENT.* +import com.zhidao.support.adas.high.common.Constants.ENVIRONMENT.DEMO +import com.zhidao.support.adas.high.common.Constants.ENVIRONMENT.DEVELOP +import com.zhidao.support.adas.high.common.Constants.ENVIRONMENT.PRODUCTION +import com.zhidao.support.adas.high.common.Constants.ENVIRONMENT.TEST import com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.DRIVER import com.zhidao.support.adas.high.common.Constants.TERMINAL_ROLE.PASSENGER +import com.zhjt.mogo.adas.data.AdasConstants +import mogo.telematics.pad.MessagePad +import java.util.concurrent.atomic.AtomicBoolean /** * ADAS-SDK与工控机连接状态回调 @@ -35,22 +50,70 @@ class MoGoAdasMsgConnectStatusListenerImpl : private const val TAG = "ConnectStatus" } - private var connectStatus = false + @Volatile + private var isFirstException = true + + @Volatile + private var isFirstDisconnected = false//只有连接成功后断开连接才加入消息盒子 + private val isReceivedBasicInfoReq = AtomicBoolean(false)//是否接收到域控基础信息请求 + private val isSentBasicInfoReq = AtomicBoolean(false)//是否已回复域控基础信息请求 + + @Volatile + private var certificationResult = "" init { CallerCloudListenerManager.addListener(TAG, this) - CallerAutopilotActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) - CallerParallelDrivingActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + CallerAutopilotActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) + CallerParallelDrivingActionsListenerManager.setConnected(AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) } - override fun onConnectionIPCStatus(ipcConnectionStatus: Int, reason: String?) { - CallerAutopilotActionsListenerManager.setConnected(ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) - CallerParallelDrivingActionsListenerManager.setConnected(ipcConnectionStatus == Constants.IPC_CONNECTION_STATUS.CONNECTED) - AppConfigInfo.connectStatusDescribe = reason - when (ipcConnectionStatus) { - Constants.IPC_CONNECTION_STATUS.CONNECTED -> { - CallerLogger.d("$M_D_C$TAG", "webSocket 连接成功") - connectStatus = true + private fun connectToast(reason: String) { + ToastUtils.showShort(reason) + } + + private fun resetArgs() { + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP = + AdasManager.getInstance().ipcConnectedIp + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort = + AdasManager.getInstance().ipcConnectedPort + //与工控机断开连接,需要重置自动驾驶状态(包括上传至云平台缓存信息),等待连接成功后同步状态信息 + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state = 0 + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().pilotmode = 0 + isReceivedBasicInfoReq.set(false) + isSentBasicInfoReq.set(false) + } + + /** + * 与工控机链接状态变化 + * + * @param status {@link AdasConstants.IpcConnectionStatus} + * @param reason 连接信息(需要判null),目前只有以下参数存在值,其他全部为null + * {@link AdasConstants.IpcConnectionStatus#HEARTBEAT_TIMEOUT} 表示超时时间 + * {@link AdasConstants.IpcConnectionStatus#CONNECT_EXCEPTION} 表示连接异常原因 + * {@link AdasConstants.IpcConnectionStatus#SERVER_DISCONNECTED} 服务端断开(如果服务端关闭时发送了原因将存在,如果服务端关闭时未发送将为null) + */ + override fun onConnectionIPCStatus(status: AdasConstants.IpcConnectionStatus, reason: String?) { + val isConnected = status == AdasConstants.IpcConnectionStatus.CONNECTED + CallerAutopilotActionsListenerManager.setConnected(isConnected) + CallerParallelDrivingActionsListenerManager.setConnected(isConnected) + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = isConnected + AppConfigInfo.isConnectAutopilot = isConnected + + var connectStatusDescribe = "未连接" + when (status) { + AdasConstants.IpcConnectionStatus.DISCONNECTED -> { + connectStatusDescribe = "主动断开连接" + CallerLogger.d( + "$M_D_C$TAG", + "未连接或主动断开连接(未连接:鹰眼首次启动时未调用连接函数【目前鹰眼默认启动就会调用连接函数】;主动断开连接:主动调用断开连接函数;)" + ) + resetArgs() + } + + AdasConstants.IpcConnectionStatus.CONNECTED -> { + connectStatusDescribe = "已连接" + CallerLogger.d("$M_D_C$TAG", connectStatusDescribe) // 初始化自动驾驶状态信息 CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP = AdasManager.getInstance().ipcConnectedIp @@ -58,10 +121,6 @@ class MoGoAdasMsgConnectStatusListenerImpl : AdasManager.getInstance().ipcConnectedPort CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().version = AdasManager.getInstance().adasVersion - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = true - AppConfigInfo.isConnectAutopilot = true - // 同步SN给工控机 - syncBasicInfoToAutopilot() //每次工控机连接成功后,需同步当前设置的美化模式状态 CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode) //当连接状态是关闭美化模式时,同步给工控机 @@ -70,39 +129,208 @@ class MoGoAdasMsgConnectStatusListenerImpl : } //每次工控机连接成功后,需同步当前设置的雨天模式状态 CallerAutoPilotControlManager.setRainMode(FunctionBuildConfig.isRainMode) + connectToast("域控已连接") } - Constants.IPC_CONNECTION_STATUS.DISCONNECTED -> { - CallerLogger.d("$M_D_C$TAG", "webSocket 连接失败 reason:$reason") - if (connectStatus) { - reason?.let { - ToastUtils.showLong("工控机连接断开,原因:$it , 等待重连") - } - connectStatus = false - } - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectIP = - AdasManager.getInstance().ipcConnectedIp - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectPort = - AdasManager.getInstance().ipcConnectedPort - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatus = false - AppConfigInfo.isConnectAutopilot = false - //与工控机断开连接,需要重置自动驾驶状态(包括上传至云平台缓存信息),等待连接成功后同步状态信息 - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state = 0 - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().pilotmode = 0 + + AdasConstants.IpcConnectionStatus.CONNECTING -> { + connectStatusDescribe = "连接中" + CallerLogger.d("$M_D_C$TAG", connectStatusDescribe) + connectToast("域控连接中") } - Constants.IPC_CONNECTION_STATUS.CONNECTING -> { - CallerLogger.d("$M_D_C$TAG", "webSocket 正在连接") + + AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER -> { + connectStatusDescribe = "重连中(定时器)" + CallerLogger.d("$M_D_C$TAG", connectStatusDescribe) + connectToast("域控重连中") } - Constants.IPC_CONNECTION_STATUS.SEARCH_ADDRESS -> { - CallerLogger.d("$M_D_C$TAG", "webSocket 正在搜索工控机IP") + + AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK -> { + connectStatusDescribe = "重连中(网络监听)" + CallerLogger.d("$M_D_C$TAG", connectStatusDescribe) + connectToast("域控重连中") } - Constants.IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS -> { - CallerLogger.d("$M_D_C$TAG", "webSocket 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用") + + AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION -> { + connectStatusDescribe = + "连接异常(鹰眼与域控连接失败、无法连接、非正常断开等),原因:$reason" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + resetArgs() + } + + AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS -> { + connectStatusDescribe = + "非法地址(连接模式为指定地址时:表示当前鹰眼调用连接时传入的域控地址错误或不符合规则【不修改默认配置不会出现此问题】;连接模式为PING模式时:表示传入的PING地址列表存在问题)" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + resetArgs() + connectToast("非法域控地址") + } + + AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> { + connectStatusDescribe = "正在搜索域控地址" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + connectToast("正在搜索域控地址") + } + + AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS -> { + connectStatusDescribe = + "找不到可用地址(域控地址列表中的全部地址均无法连通【不修改默认配置的情况下需要排查PAD是否连接车载路由器、工控机是否连接车载路由器、工控机是否开机等】)" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + resetArgs() + } + + AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED -> { + connectStatusDescribe = + "域控证书认证异常(鹰眼端或鹰眼端和域控端启用认证后出现异常),原因$certificationResult" + CallerLogger.d( + "$M_D_C$TAG", + "域控证书认证异常(鹰眼端或鹰眼端和域控端启用认证后,认证出现异常。具体认证异常状态详情见认证状态CertificationStatus【鹰眼端验证域控证书失败会断开连接不进行重连;域控端验证鹰眼端证书失败会断开连接,但是由于域控断开并没有发送断开的原因所以鹰眼会自动重连,重连次数可配置为:用不重连、无限重连、指定次数重连】)" + ) + resetArgs() + } + + AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT -> { + connectStatusDescribe = + "心跳超时(连接域控成功后在一段时间内未收到域控任何数据),超时时间:${reason}秒" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + resetArgs() + } + + AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH -> { + connectStatusDescribe = "協議不匹配(被连接的域控端非WebSocket协议【可能性非常低】)" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + resetArgs() + } + + AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED -> { + connectStatusDescribe = + "域控主动断开连接(域控主动发起断开WebSocket连接,目前主要原因有:1.证书认证失败;2.老版本MAP不支持多连接的情况下会踢掉客户端;),域控断开发送的消息:${reason}" + CallerLogger.d( + "$M_D_C$TAG", + connectStatusDescribe + ) + resetArgs() } } - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ipcConnStatus = ipcConnectionStatus - CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatusDescribe = reason + AppConfigInfo.connectStatusDescribe = connectStatusDescribe + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ipcConnStatus = status + CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().connectStatusReason = reason CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus() - CallerAutoPilotStatusListenerManager.invokeAutoPilotIPCStatusChanged(ipcConnectionStatus, reason) + CallerAutoPilotStatusListenerManager.invokeAutoPilotIPCStatusChanged(status, reason) + saveIntoMsgBox(status, reason) + } + + /** + * 域控证书认证状态 + * 启用认证需要配置 AdasOptions.setEnableCertification() + * 连接时启用认证 后才会有证认结果 + * ROOT证书异常会影响校验域控证书 + * PAD证书异常会影响域控端校验的证书校验,域控端证书校验失败将会断开连接,且并不会给出断开原因,ADAS LIB会执行重连操作(如果配置启用重连) + * 假如校验域控证书认证失败会主动断开连接,且不进行重连 + * + * @param status 域控证书认证结果{@link AdasConstants.CertificationStatus} + */ + override fun onCertification(status: AdasConstants.CertificationStatus) { + if (status == AdasConstants.CertificationStatus.TIMEOUT) { + certificationResult = ":认证超时"; + CallerLogger.d( + "$M_D_C$TAG", + "域控证书认证超时(表示域控未发送BasicInfoReq接口的数据【这种情况可能是连接出现了问题】)" + ) + } else { + if (status != AdasConstants.CertificationStatus.NOT_ENABLED) { + if (status == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_SUCCESS) { + CallerLogger.d( + "$M_D_C$TAG", + "域控证书链校验成功" + ) + } else if (status == AdasConstants.CertificationStatus.ROOT_CRT_ERROR) { + certificationResult = ":ROOT证书异常"; + CallerLogger.d( + "$M_D_C$TAG", + "ROOT证书异常(表示未传递证书,没有拿到ROOT证书)" + ) + } else if (status == AdasConstants.CertificationStatus.IPC_CRT_ERROR) { + certificationResult = ":域控证书异常"; + CallerLogger.d( + "$M_D_C$TAG", + "域控证书异常(表示域控发送了BasicInfoReq接口的数据但是未传递证书或证书解码失败【失败的可能性很低】)" + ) + } else if (status == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_FAILED) { + certificationResult = ":证书链校验失败"; + CallerLogger.d( + "$M_D_C$TAG", + "域控证书链校验失败(表示证书链未验证通过。证书不匹配、证书格式不正确)" + ) + } + } + } + } + + private fun saveIntoMsgBox( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { + var title = "" + var content = "" + when (status) { + AdasConstants.IpcConnectionStatus.CONNECTED -> { + isFirstException = true + isFirstDisconnected = true + } + + AdasConstants.IpcConnectionStatus.DISCONNECTED -> { + if (isFirstDisconnected) { + title = "连接异常" + content = "域控未连接或主动断开连接" + isFirstDisconnected = false + } + } + + AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION -> { + title = "域控连接异常" + content = "建议检查WiFi连接情况及域控是否开机" + } + + AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS -> { + if (isFirstException) { + title = "找不到域控可用地址" + content = "建议检查车载路由器及域控是否开机" + isFirstException = false + } + } + AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT -> { + title = "域控心跳超时" + content = "建议检查车载路由器连接是否正常" + } + + else -> {} + } + if (title.isNotEmpty() && content.isNotEmpty()) { + CallerMsgBoxManager.saveMsgBox( + MsgBoxBean( + MsgBoxType.AUTOPILOT, + AutopilotMsg(0, title, content, System.currentTimeMillis()) + ) + ) + } } override fun onCompatibility(versionCompatibility: VersionCompatibility?) { @@ -112,8 +340,12 @@ class MoGoAdasMsgConnectStatusListenerImpl : /** * 工控机获取SN */ - override fun onAutopilotSNRequest() { - syncBasicInfoToAutopilot() + override fun onAutopilotSNRequest(basicInfoReq: MessagePad.BasicInfoReq) { + CallerLogger.d("$M_D_C$TAG", "收到域控基础信息请求"); + isReceivedBasicInfoReq.set(true) + if (!TextUtils.isEmpty(SharedPrefsMgr.getInstance().sn)) { + syncBasicInfoToAutopilot() + } } /** @@ -127,7 +359,9 @@ class MoGoAdasMsgConnectStatusListenerImpl : .sendBasicInfoResp( SharedPrefsMgr.getInstance().sn, getEnvironment(), - getTerminalRole() + getTerminalRole(), + AppUtils.getAppVersionCode(), + AppUtils.getAppVersionName() ) } else { // 乘客屏先不传sn @@ -135,9 +369,12 @@ class MoGoAdasMsgConnectStatusListenerImpl : .sendBasicInfoResp( "", getEnvironment(), - getTerminalRole() + getTerminalRole(), + AppUtils.getAppVersionCode(), + AppUtils.getAppVersionName() ) } + isSentBasicInfoReq.set(true) } private fun getEnvironment(): Int { @@ -159,7 +396,10 @@ class MoGoAdasMsgConnectStatusListenerImpl : } override fun tokenGot(token: String, sn: String) { - syncBasicInfoToAutopilot() + CallerLogger.d("$M_D_C$TAG", "SN获取成功=$sn"); + if (isReceivedBasicInfoReq.get() && !isSentBasicInfoReq.get()) {//已收到域控基础信息请求,但是之前SN没有所以还未回复,现在获取到SN后再进行回复 + syncBasicInfoToAutopilot() + } } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt index b192ec16b1..ccc80aa15f 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/telematic/TeleMsgHandler.kt @@ -18,6 +18,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.setIgnoreConditionDraw import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger @@ -76,6 +77,24 @@ class TeleMsgHandler : IMsgHandler { } return } + + if (it.protocolType == TelematicConstant.V2N_NEW_LINK_SWITCH) { + try { + Log.d(TAG, "乘客屏收到司机屏转发的新链路开关 --- 1 ---") + val content = String(it.body, Charset.defaultCharset()) + Log.d(TAG, "乘客屏收到司机屏转发的新链路开关 --- 2 ---:$content") + val data = GsonUtils.fromJson(content, Map::class.java) + val f1 = data["f1"] as Boolean + val f2 = data["f2"] as Boolean + Log.d(TAG, "乘客屏收到司机屏转发的新链路开关 --- 3 ---:$data, f1: $f1, f2:$f2") + FunctionBuildConfig.v2nMainSwitch = f1 + FunctionBuildConfig.isNewV2NData = f2 + } catch (t: Throwable) { + t.printStackTrace() + Log.e(TAG, "乘客屏收到司机屏转发的新链路开关异常", t) + } + return + } when (it.protocolType) { MogoProtocolMsg.NORMAL_DATA -> { try { @@ -198,6 +217,13 @@ class TeleMsgHandler : IMsgHandler { } } + TelematicConstant.WEATHER_SWITCH_STATUS -> { + invokeNettyConnResult("接收到司机屏发过来的天气效果开关数据为:${it.body}") + ThreadUtils.runOnUiThread { + CallerMapUIServiceManager.getMapUIController()?.setWeatherEnable(String(it.body) == "1") + } + } + TelematicConstant.OBU_GREENWAVE_WARNING -> { when (String(it.body)) { "0" -> { diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/DataManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/DataManager.kt index b185e1543e..397d1222c0 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/DataManager.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/msgbox/DataManager.kt @@ -135,6 +135,12 @@ object DataManager { MsgBoxType.VOICE -> { CallerMsgBoxListenerManager.invokeListener(MsgCategory.VOICE_INFO, msg) } + MsgBoxType.AUTOPILOT -> {// 不存数据库 + CallerMsgBoxListenerManager.invokeListener(MsgCategory.NOTICE, msg) + } + MsgBoxType.SSMINFO -> {// 不存数据库 + CallerMsgBoxListenerManager.invokeListener(MsgCategory.SYS_INFO, msg) + } MsgBoxType.OBU, MsgBoxType.NOTICE, MsgBoxType.OPERATION -> { synchronized(this) { notifyList.add(msg) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-devatools/src/main/AndroidManifest.xml index 56b7521c8a..d1d7f7fbd6 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/AndroidManifest.xml +++ b/core/function-impl/mogo-core-function-devatools/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -9,4 +10,6 @@ + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 3ea8339543..f823bf758a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -39,6 +39,7 @@ import com.tencent.matrix.trace.config.TraceConfig import com.zhjt.mogo_core_function_devatools.apm.* import com.mogo.eagle.core.function.api.upgrade.* import com.mogo.weak.network.SdtManager +import com.zhjt.mogo_core_function_devatools.adas.PowerOffManager import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.binding.* @@ -191,6 +192,8 @@ class DevaToolsProvider : IDevaToolsProvider { .enableEvilMethodTrace(true) // 慢方法 .enableAnrTrace(true) // anr .enableStartup(true) // app启动 + .enableTouchEventTrace(true)// 监听View的Touch事件卡顿 + .enableIdleHandlerTrace(true)// 监听IdleHandler中的卡顿 .isDebug(true) // debug包 .isDevEnv(true) // dev环境 .build() @@ -303,6 +306,63 @@ class DevaToolsProvider : IDevaToolsProvider { BadCaseManager.showBadCaseManagerWindow(context) } + /** + * 启动调用SSM停服命令超时检测 + */ + override fun startCommandWaitCountDown() { + PowerOffManager.startCommandWaitCountDown() + } + + /** + * 停止调用SSM停服命令超时检测 + */ + override fun stopCommandWaitCountDown() { + PowerOffManager.stopCommandWaitCountDown() + } + + /** + * 开始车辆下电等待倒计时 + */ + override fun startPowerDownCountDown() { + PowerOffManager.startPowerDownCountDown() + } + + /** + * 结束车辆下电等待倒计时 + */ + override fun stopPowerDownCountDown() { + PowerOffManager.stopPowerDownCountDown() + } + + /** + * 状态按钮变更倒计时 + */ + override fun statusChangeCountDown(isSuccess: Boolean) { + PowerOffManager.statusChangeCountDown(isSuccess) + } + + /** + * 结束状态按钮变更倒计时 + */ + override fun stopStatusCountDown() { + PowerOffManager.stopStatusCountDown() + } + + /** + * 设置停服状态 + */ + override fun setPowerOffStatus(status: Int) { + PowerOffManager.setPowerOffStatus(status) + } + + /** + * 获取停服状态 + */ + override fun getPowerOffStatus(): Int { + return PowerOffManager.getPowerOffStatus() + } + + override fun showReportListWindow(context: Context, isShow: Boolean) { iPCReportManager.showReportListWindow(context, isShow) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/adas/PowerOffManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/adas/PowerOffManager.kt new file mode 100644 index 0000000000..a75bb2dc7c --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/adas/PowerOffManager.kt @@ -0,0 +1,119 @@ +package com.zhjt.mogo_core_function_devatools.adas + +import android.os.CountDownTimer +import com.mogo.eagle.core.function.call.devatools.CallerPowerOffManager + +/** + * 停止域控服务管理类 + */ +object PowerOffManager { + + private var commandWaitCountDownTimer: CountDownTimer ?= null + private var powerDownCountDownTimer: CountDownTimer ?= null + private var statusChangeCountDownTimer: CountDownTimer ?= null + private var powerDownNum = 60 + /** + * 停止域控服务状态 + * 0:准备停服 1:停服命令下发成功 2:停服命令下发失败 3:停服命令下发超时 + * 4:停服中 5:停服成功 6:停服成功不可点击 + */ + private var powerOffStatus: Int = 0 + + /** + * 启动调用SSM停服命令超时检测 + */ + fun startCommandWaitCountDown(){ + commandWaitCountDownTimer = object: CountDownTimer(10000,10000){ + override fun onTick(millisUntilFinished: Long) { + + } + + override fun onFinish() { + CallerPowerOffManager.invokeCommandTimeout() + } + } + commandWaitCountDownTimer?.start() + } + + /** + * 停止调用SSM停服命令超时检测 + */ + fun stopCommandWaitCountDown(){ + if(commandWaitCountDownTimer != null){ + commandWaitCountDownTimer?.cancel() + commandWaitCountDownTimer = null + } + } + + /** + * 开始车辆下电等待倒计时 + */ + fun startPowerDownCountDown(){ + powerDownNum = 60 + powerDownCountDownTimer = object: CountDownTimer(60000,1000){ + override fun onTick(millisUntilFinished: Long) { + if(powerDownNum > 0){ + CallerPowerOffManager.invokePowerDownTick(powerDownNum--) + } + } + + override fun onFinish() { + powerDownNum = 0 + CallerPowerOffManager.invokePowerDownFinish() + } + } + powerDownCountDownTimer?.start() + } + + /** + * 结束车辆下电等待倒计时 + */ + fun stopPowerDownCountDown(){ + if(powerDownCountDownTimer != null){ + powerDownCountDownTimer?.cancel() + powerDownCountDownTimer = null + } + } + + /** + * 状态按钮变更倒计时 + */ + fun statusChangeCountDown(isSuccess: Boolean){ + statusChangeCountDownTimer = object: CountDownTimer(1000,1000){ + override fun onTick(millisUntilFinished: Long) { + + } + + override fun onFinish() { + CallerPowerOffManager.invokeStatusChange(isSuccess) + } + } + statusChangeCountDownTimer?.start() + } + + /** + * 结束状态按钮变更倒计时 + */ + fun stopStatusCountDown(){ + if(statusChangeCountDownTimer != null){ + statusChangeCountDownTimer?.cancel() + statusChangeCountDownTimer = null + } + } + + /** + * 设置停服状态 + */ + fun setPowerOffStatus(status: Int){ + powerOffStatus = status + } + + /** + * 获取停服状态 + */ + fun getPowerOffStatus(): Int{ + return powerOffStatus + } + + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt index 1eb915f91b..6043c1839b 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/apm/ApmEnvProviderImpl.kt @@ -123,7 +123,9 @@ class ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope { launch(Dispatchers.Main) { Toast.makeText(Utils.getApp(), "发现系统环境不一致,正在重启...", Toast.LENGTH_SHORT).show() delay(50) - Utils.getApp().startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)) + Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)?.also { + ActivityUtils.startActivity(it) + } Process.killProcess(Process.myPid()) } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index f840e60ae2..7628a110ae 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -401,8 +401,10 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) { if(category == MsgCategory.SYS_INFO){ - //上报 - BadCaseConfig.newReportEntity = msgBoxList.bean as ReportEntity + if(msgBoxList.type == MsgBoxType.REPORT){ + //上报 + BadCaseConfig.newReportEntity = msgBoxList.bean as ReportEntity + } }else if(category == MsgCategory.FM_INFO){ //FM BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt index 2d83e258a5..c6cbba0c37 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/MoGoBlockProviderImpl.kt @@ -28,7 +28,8 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener { .isDebug(false) .period(5, SECONDS) .junkRateThreshold(0.6f) - .recorder(null, 500, 500) + .maxDuration(SECONDS.toMillis(15)) + .maxCount(1000) .build()) hasInit = true } @@ -46,30 +47,7 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener { Log.d("BLOCK", "--- onBlockReport ---: ${info.frames.size}") val map = mutableMapOf>() map["frames"] = info.frames.map { "$it" } - BlockDetector.recorder().dump(object: OnDumpListener { - override fun OnDumped(data: Map>) { - map["history"] = data[0] ?: emptyList() - map["pending"] = data[1] ?: emptyList() - val cpu = CallerDevaToolsManager.usage()?.dump() - if (!cpu.isNullOrEmpty()) { - val mainThreadUsage = cpu.remove("MainThreadUsage") - val processUsage = cpu.remove("ProcessUsage") - if (mainThreadUsage != null && processUsage != null) { - map["cpu"] = ArrayList().also { - it.add("main-thread: ${ "%.2f".format(mainThreadUsage * 1.0f * 100 / processUsage) }% ($mainThreadUsage, $processUsage)") - for (e in cpu.entries.sortedByDescending { e -> e.value }) { - it.add("${e.key}: ${ "%.2f".format(e.value * 1.0f * 100 / processUsage) }% (${e.value}, $processUsage)") - } - } - } - } - try { - VLogUtils.w("BLOCK", GsonUtils.toJson(map)) - } catch (t: Throwable) { - t.printStackTrace() - } - } - }) + dump(map) } override fun monitor(window: Window) { @@ -101,4 +79,33 @@ internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener { override fun recorder(): IMessageRecorder { return BlockDetector.recorder() } + + override fun dump(extra: Map>?) { + val map = mutableMapOf>() + extra?.takeIf { it.isNotEmpty() }?.also { map.putAll(it) } + BlockDetector.recorder().dump(object: OnDumpListener { + override fun OnDumped(data: Map>) { + map["history"] = data[0] ?: emptyList() + map["pending"] = data[1] ?: emptyList() + val cpu = CallerDevaToolsManager.usage()?.dump() + if (!cpu.isNullOrEmpty()) { + val mainThreadUsage = cpu.remove("MainThreadUsage") + val processUsage = cpu.remove("ProcessUsage") + if (mainThreadUsage != null && processUsage != null) { + map["cpu"] = ArrayList().also { + it.add("main-thread: ${ "%.2f".format(mainThreadUsage * 1.0f * 100 / processUsage) }% ($mainThreadUsage, $processUsage)") + for (e in cpu.entries.sortedByDescending { e -> e.value }) { + it.add("${e.key}: ${ "%.2f".format(e.value * 1.0f * 100 / processUsage) }% (${e.value}, $processUsage)") + } + } + } + } + try { + VLogUtils.w("BLOCK", GsonUtils.toJson(map)) + } catch (t: Throwable) { + t.printStackTrace() + } + } + }) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt new file mode 100644 index 0000000000..f87f3e1838 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/block/observer/AnrLogcatObserver.kt @@ -0,0 +1,11 @@ +package com.zhjt.mogo_core_function_devatools.block.observer + +import com.mogo.core.log.record.config.checker.ILogcatChecker +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager + +class AnrLogcatObserver: ILogcatChecker.ILogcatCheckObserver { + + override fun onGet() { + CallerDevaToolsManager.block()?.dump() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/env/EnvChangeManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/env/EnvChangeManager.kt index 43ce0a6e01..06c4e48840 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/env/EnvChangeManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/env/EnvChangeManager.kt @@ -7,6 +7,7 @@ import com.mogo.commons.debug.DebugConfig import com.mogo.eagle.core.data.EnvConfig import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.Utils @@ -85,7 +86,9 @@ object EnvChangeManager { } private fun restartApp() { - Utils.getApp().startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)) + Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)?.also { + ActivityUtils.startActivity(it) + } Process.killProcess(Process.myPid()) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt index 6dbe5d527d..ecab17f24d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -1,21 +1,26 @@ package com.zhjt.mogo_core_function_devatools.logcat +import android.Manifest import android.content.* +import android.content.pm.PackageManager.PERMISSION_GRANTED import android.os.Build import android.os.Process import android.os.SystemClock import android.util.Log +import androidx.core.app.ActivityCompat import com.mogo.aicloud.services.socket.IMogoOnMessageListener import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager import com.mogo.commons.AbsMogoApplication import com.mogo.core.log.record.* import com.mogo.core.log.record.config.* -import com.mogo.core.log.record.config.crash.* +import com.mogo.core.log.record.config.crash.CrashConfig import com.mogo.core.log.record.config.state.IStateProvider import com.mogo.core.log.record.model.UploadError import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.function.api.devatools.logcat.* import com.zhidao.loglib.bean.RemoteLogPushContent +import com.zhjt.mogo_core_function_devatools.BuildConfig +import com.zhjt.mogo_core_function_devatools.logcat.checker.AnrLogChecker import com.zhjt.mogo_core_function_devatools.logcat.config.LogRecordConfig import com.zhjt.mogo_core_function_devatools.logcat.uploader.* import kotlinx.coroutines.* @@ -40,15 +45,15 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, private val lastUploadTime by lazy { AtomicLong(0) } override fun init(context: Context) { - val zipDir = File(context.getExternalFilesDir(null), "logcat/zip") - LogcatManager.init(LogcatConfig.Builder().context(context) - .recordPeriod(MINUTES.toMillis(1)) // 1分钟一个文件 + val zip = File(context.getExternalFilesDir(null), "logcat/zip") + val builder = LogcatConfig.Builder().context(context) + .recordPeriod(MINUTES.toMillis(5)) // 5分钟一个文件 .maxSizeInLogDir((512 * 1024 * 1024).toLong()) // 512M最大容量 .recordDir(File(context.getExternalFilesDir(null), "logcat")) .pid(Process.myPid()) - .generateZipDir(zipDir.absolutePath) + .generateZipDir(zip.absolutePath) .stateProvider(object : IStateProvider { - override fun provide(divider:String?): Map { + override fun provide(divider: String?): Map { return mutableMapOf().also { itx -> itx["build_sdk_version"] = Build.VERSION.SDK_INT itx["build_device"] = Build.DEVICE @@ -99,21 +104,32 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, itx["协议版本号"] = AppConfigInfo.protocolVersionNumber itx["${divider}-7"] = divider itx["角色"] = AppConfigInfo.role - } } }) - .crashConfig(CrashConfig.Builder() - .enabled(false) - .crashDir(File(context.getExternalFilesDir(null), "logcat/crash")) - .javaCrash(true) - .anr(true) - .nativeCrash(true) - .build()) - .uploader(LogRecordUploader())) + .ignoreTags(" OpenGLRenderer") + .uploader(LogRecordUploader()) + if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_LOGS) == PERMISSION_GRANTED) { + builder + .systemTags("ActivityManager") + .checker(AnrLogChecker()) + } + +// if (BuildConfig.DEBUG) { +// builder.crashConfig( +// CrashConfig.Builder() +// .enabled(true) +// .crashDir(File(context.getExternalFilesDir(null), "logcat/crash")) +// .nativeCrash(true) +// .anr(true) +// .javaCrash(true) +// .build() +// ) +// } + LogcatManager.init(builder) scope.launch { try { - zipDir.takeIf { it.exists() }?.deleteRecursively() + zip.takeIf { it.exists() }?.deleteRecursively() } catch (t: Throwable) { t.printStackTrace() } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt new file mode 100644 index 0000000000..50c3473caf --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/checker/AnrLogChecker.kt @@ -0,0 +1,24 @@ +package com.zhjt.mogo_core_function_devatools.logcat.checker + +import com.mogo.core.log.record.config.checker.ILogcatChecker +import com.zhjt.mogo_core_function_devatools.block.observer.AnrLogcatObserver +import okio.ByteString.Companion.encodeUtf8 +import okio.Source +import okio.buffer + +class AnrLogChecker: ILogcatChecker { + + companion object { + private const val TAG = "AnrLogChecker" + } + + private val anrByteString by lazy { "ANR in com.mogo.launcher.f".encodeUtf8() } + + override fun check(data: Source): Boolean { + return data.buffer().indexOf(anrByteString) >= 0 + } + + override fun observer(): ILogcatChecker.ILogcatCheckObserver { + return AnrLogcatObserver() + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangCommandExecutor.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangCommandExecutor.kt index 2df75b8134..4176c72361 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangCommandExecutor.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoFangCommandExecutor.kt @@ -386,6 +386,11 @@ internal class MoFangCommandExecutor { fun handleSingleClick(keycode: Int) { + val isEnabled = CallerDevaToolsManager.mofang()?.isEnabled(1, keycode) ?: true + if (!isEnabled) { + Log.d(TAG, "输入 -> 单击 -> 按键:${keycode}被禁用...") + return + } if (keycode == KeyEvent.KEYCODE_A) { Log.d(TAG, "--- 单机键A --- 加速度每隔500ms减少1 ----") handler.removeMessages(MSG_WHAT_KEY_CODE_A) @@ -443,6 +448,11 @@ internal class MoFangCommandExecutor { } fun handleLongClick(keyCode: Int) { + val isEnabled = CallerDevaToolsManager.mofang()?.isEnabled(2, keyCode) ?: true + if (!isEnabled) { + Log.d(TAG, "输入 -> 长按 -> 按键:${keyCode}被禁用...") + return + } if (keyCode == KeyEvent.KEYCODE_A) { Log.d(TAG, "---- 长按键A ---- 加速度每隔500毫秒,减小2 ---") handler.removeMessages(MSG_WHAT_KEY_CODE_AL) @@ -477,6 +487,11 @@ internal class MoFangCommandExecutor { } fun handleCombineClick(vararg keyCodes: Int) { + val isEnabled = CallerDevaToolsManager.mofang()?.isEnabled(3, *keyCodes) ?: true + if (!isEnabled) { + Log.d(TAG, "输入 -> 组合 -> 按键:${keyCodes.joinToString(",")}被禁用...") + return + } if (isCombineEqual(KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_B, *keyCodes)) { //AB组合键,加速度每隔500毫秒,增加1 Log.d(TAG, "---- 组合键AB ---- 按下, 加速度加1 ----") diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt index 96e995ac69..9a3f4f1586 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt @@ -17,9 +17,12 @@ import androidx.lifecycle.* import com.mogo.core.mofang.connect.MoFangManager import com.mogo.core.mofang.connect.device.* import com.mogo.core.mofang.connect.listener.* +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.devatools.mofang.* import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider.OnMoFangStatusListener import com.mogo.eagle.core.utilcode.floating.* +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.getMisChannelCode import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.* @@ -320,4 +323,23 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_MOFANG_CONNECT_PARAMS_DISCONNECT_SLEEP to "${System.currentTimeMillis()}")) linkedLog.record(mapOf("callback" to "onBluetoothKeyboardAbnormalDisconnected:$status")) } + + override fun isEnabled(inputType: Int, vararg keyCodes: Int): Boolean { + val mode = FunctionBuildConfig.appIdentityMode + val channel = AppIdentityModeUtils.getMisChannelCode(mode) + val isBusOrB1OrB2 = (channel == 4 || channel == 11 || channel == 15) + val isM1 = AppIdentityModeUtils.isM1(mode) + if (isBusOrB1OrB2 || isM1) { + if (inputType == 1 && keyCodes.size == 1) { + // 单击 + val code = keyCodes[0] + if (code == KeyEvent.KEYCODE_C || code == KeyEvent.KEYCODE_D) { + return false + } + } + } + return true + } + + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt index 55126f96de..e381f4b2d0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/report/IPCReportManager.kt @@ -114,6 +114,14 @@ class IPCReportManager : IMoGoAutopilotStatusListener { || it.code == MogoReport.Code.Info.IVEHICLE.NOT_IN_TROUBLE || it.code == MogoReport.Code.Info.ILCT.RTK_STATUS_NORMAL ){ + /** + * rtk报error后历史信息会一直在消息盒子里,异常恢复后消息会产生误导; + * 并且目前有fm和通知栏状态去表示rtk状态,error消息可以删除不显示 + */ + if(it.code == MogoReport.Code.Error.ELCT.RTK_STATUS_FAULT + || it.code == MogoReport.Code.Error.ELCT.RTK_STATUS_UNKNOWN){ + return@let + } val reportEntity = ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()), it.src,it.level,it.msg,it.code,it.resultList,it.actionsList,false) CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.REPORT, reportEntity)) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/OverViewImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/OverViewImpl.kt index 2d2326d988..3508e7fc2f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/OverViewImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/OverViewImpl.kt @@ -21,6 +21,7 @@ import com.mogo.eagle.core.utilcode.util.AppStateManager import com.mogo.eagle.core.utilcode.util.IAppStateListener import com.mogo.eagle.core.utilcode.util.PermissionUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.status.entity.OverViewStatus import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus import com.zhjt.mogo_core_function_devatools.status.entity.toState @@ -52,6 +53,9 @@ internal class OverViewImpl(ctx: Context) : IFlow(ctx), @Volatile private var isTracingException = false + @Volatile + private var isAutopilotException = false + @Volatile private var isFirst = true @@ -151,7 +155,6 @@ internal class OverViewImpl(ctx: Context) : IFlow(ctx), ctx.registerReceiver(CheckLocationReceiver(onClose, onOpen).also { receiver = it }, IntentFilter().also { it.addAction(LocationManager.MODE_CHANGED_ACTION) }) } // // 工控机连接状态外层状态栏已显示,先隐藏 -// CallerAutoPilotStatusListenerManager.addListener(TAG, this) } private fun checkIsGpsException(): Boolean { @@ -247,8 +250,25 @@ internal class OverViewImpl(ctx: Context) : IFlow(ctx), } } + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { + super.onAutopilotIpcConnectStatusChanged(status, reason) + when (status) { + AdasConstants.IpcConnectionStatus.CONNECTED -> { + isAutopilotException = false + checkIfNotException() + } + else -> { + isAutopilotException = true + send(OverViewStatus(true)) + } + } + } + private fun checkIfNotException() { - if (!isServerException && !isCloudSocketException && !isTracingException && !isGpsException) { + if (!isServerException && !isCloudSocketException && !isTracingException && !isGpsException && !isAutopilotException) { send(OverViewStatus(false)) } } @@ -260,8 +280,6 @@ internal class OverViewImpl(ctx: Context) : IFlow(ctx), MogoStatusManager.getInstance() .unregisterStatusChangedListener(TAG, StatusDescriptor.CLOUD_SOCKET, this) CallerAutoPilotStatusListenerManager.removeListener(TAG) -// CallerAutoPilotStatusListenerManager.removeListener(TAG) - try { if (registered.compareAndSet(true, false) && receiver != null) { ctx.unregisterReceiver(receiver) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt index ed04aff1cb..fa2b09bb08 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt @@ -8,6 +8,7 @@ import chassis.ChassisStatesOuterClass import com.mogo.eagle.core.function.api.autopilot.* import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.utilcode.kotlin.safeCancel +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.status.entity.CanStatus import com.zhjt.mogo_core_function_devatools.status.flow.IFlow import kotlinx.coroutines.Job @@ -74,7 +75,7 @@ internal class CanImpl(ctx: Context) : send(CanStatus(isCanEnabled())) } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) send(CanStatus(isCanEnabled())) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt index a113c357cf..f63f224552 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt @@ -3,6 +3,7 @@ package com.zhjt.mogo_core_function_devatools.status.flow.ipc import android.content.* import com.mogo.eagle.core.function.api.autopilot.* import com.mogo.eagle.core.function.call.autopilot.* +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.status.flow.IFlow import com.zhjt.mogo_core_function_devatools.status.entity.IpcStatus @@ -12,14 +13,14 @@ internal class IpcImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu const val TAG = "IpcImpl" } - private var state: Int = -1 + private var state: AdasConstants.IpcConnectionStatus? = null override fun onCreate() { checkAndSend() CallerAutoPilotStatusListenerManager.addListener(TAG, this) } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) if (state != status) { checkAndSend() diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt index 1dfae49417..094282a18a 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt @@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.status.entity.RTKStatus import com.zhjt.mogo_core_function_devatools.status.flow.IFlow import kotlinx.coroutines.Dispatchers @@ -83,7 +84,7 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu } } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) if (!CallerAutoPilotStatusListenerManager.isConnect()) { CallerLogger.d("$M_DEVA$TAG", "工控机断开了....") diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt index 0746962d6e..57344edcbf 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt @@ -4,6 +4,7 @@ import android.content.* import com.mogo.eagle.core.function.api.autopilot.* import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_RUNNING import com.mogo.eagle.core.function.call.autopilot.* +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.status.entity.* import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.* import com.zhjt.mogo_core_function_devatools.status.flow.* @@ -19,7 +20,7 @@ internal class TracingImpl(ctx: Context): IFlow(ctx), IMoGoAutopi private var old: TracingStatus.Tracing = UNKNOWN - private val ipcConnectStatus by lazy { AtomicInteger() } + private val ipcConnectStatus by lazy { AtomicReference() } private val ipcStatus by lazy { AtomicInteger() } @@ -54,7 +55,7 @@ internal class TracingImpl(ctx: Context): IFlow(ctx), IMoGoAutopi } } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) try { if (ipcConnectStatus.get() != status) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt index 31eb408cfe..acf16bed1f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt @@ -41,14 +41,20 @@ internal class StatusAdapter(val ctx: Context, var data: ArrayList): Rec } fun bind(status: Status) { - itemView.onClick { -// ToastUtils.showShort(getText(status)) - if (status is OverViewStatus) { + if (status !is OverViewStatus) { + itemView.setOnClickListener(null) + itemView.isClickable = false + if (iv.drawable != null) { + iv.setImageDrawable(null) + } + } else { + if (iv.background != null) { + iv.background = null + } + itemView.onClick { CallerHmiManager.showStatusSummaryDialog() } } - iv.setBackgroundResource(0) - iv.setImageDrawable(null) when(status) { is IpcStatus -> { if (status.enabled) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/mofang/MoFangStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/mofang/MoFangStatusView.kt index a4d58ffe20..3cda1fea21 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/mofang/MoFangStatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/mofang/MoFangStatusView.kt @@ -93,11 +93,15 @@ class MoFangStatusView : LinearLayout, OnMoFangStatusListener, IMoGoAutopilotSta override fun onMoFangBatteryChanged(battery: Int) {} override fun onMoFangClicked(keyCode: Int) { + val enabled = CallerDevaToolsManager.mofang()?.isEnabled(1, keyCode) ?: true + if (!enabled) { + Log.d(TAG, "单击 -> 按键:${keyCode}被禁用...") + return + } if (!CallerAutoPilotStatusListenerManager.isConnect()) { ToastUtils.showShort("工控机连接异常,无法执行魔方命令") return } - if (keyCode == KeyEvent.KEYCODE_A) { if (tv_icon_2?.tag != 2 && tv_icon_2?.isSelected == true) { tv_icon_2?.isSelected = false @@ -168,6 +172,11 @@ class MoFangStatusView : LinearLayout, OnMoFangStatusListener, IMoGoAutopilotSta } override fun onMoFangLongClicked(keyCode: Int) { + val isEnabled = CallerDevaToolsManager.mofang()?.isEnabled(2, keyCode) ?: true + if (!isEnabled) { + Log.d(TAG, "长按 -> 按键:${keyCode}被禁用...") + return + } if (!CallerAutoPilotStatusListenerManager.isConnect()) { ToastUtils.showShort("工控机连接异常,无法执行魔方命令") return @@ -215,6 +224,11 @@ class MoFangStatusView : LinearLayout, OnMoFangStatusListener, IMoGoAutopilotSta } override fun onMoFangCombineClicked(vararg keyCodes: Int) { + val isEnabled = CallerDevaToolsManager.mofang()?.isEnabled(3, *keyCodes) ?: true + if (!isEnabled) { + Log.d(TAG, "组合 -> 按键:${keyCodes.joinToString(",")}被禁用...") + return + } if (!CallerAutoPilotStatusListenerManager.isConnect()) { ToastUtils.showShort("工控机连接异常,无法执行魔方命令") return diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt index 86dc79f4ec..fc6ab08a14 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt @@ -43,6 +43,9 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A private val report: Int = 4 private val summary: Int = 5 private val fm: Int = 6 + private val ssm: Int = 7 + private val autopilot: Int = 8 + private val none: Int = 9 private var changeViewListener: ChangeViewListener?=null @@ -91,6 +94,14 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_fm,parent,false) return BubbleFmHolder(view) } + ssm -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_ssm,parent,false) + return BubbleSsmHolder(view) + } + autopilot -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_autopilot,parent,false) + return BubbleAutopilotHolder(view) + } else -> { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_v2x,parent,false) return BubbleV2XHolder(view) @@ -262,6 +273,24 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A } } } + //SSM连接消息 + is BubbleSsmHolder ->{ + data?.let { + val ssmMsg = it[position].msgBoxBean.bean as SSMMsg + holder.tvSsmTitle.text = ssmMsg.title + holder.tvSsmContent.text= ssmMsg.content + holder.tvSsmTime.text = TimeUtils.millis2String(ssmMsg.timestamp,getHourMinFormat()) + } + } + //域控制器连接消息 + is BubbleAutopilotHolder ->{ + data?.let { + val autopilotMsg = it[position].msgBoxBean.bean as AutopilotMsg + holder.tvAutopilotTitle.text = autopilotMsg.title + holder.tvAutopilotContent.text = autopilotMsg.content + holder.tvAutopilotTime.text = TimeUtils.millis2String(autopilotMsg.timestamp,getHourMinFormat()) + } + } } val msgBoxBean: MsgBoxCountDownBean = data!![position] @@ -311,7 +340,11 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A summary }else if(data!![position].msgBoxBean.type == MsgBoxType.FMINFO){ fm - } else{ + }else if(data!![position].msgBoxBean.type == MsgBoxType.SSMINFO){ + ssm + }else if(data!![position].msgBoxBean.type == MsgBoxType.AUTOPILOT){ + autopilot + } else { v2x } } @@ -378,6 +411,22 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var tvBubbleFmTime: TextView = itemView.findViewById(R.id.tvBubbleFmTime) } + //SSM连接消息 + class BubbleSsmHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var ivSsmImage: ImageView = itemView.findViewById(R.id.ivSsmImage) + var tvSsmTitle: TextView = itemView.findViewById(R.id.tvSsmTitle) + var tvSsmTime: TextView = itemView.findViewById(R.id.tvSsmTime) + var tvSsmContent: TextView = itemView.findViewById(R.id.tvSsmContent) + } + + //域控制器连接状态消息 + class BubbleAutopilotHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var ivAutopilotImage: ImageView = itemView.findViewById(R.id.ivAutopilotImage) + var tvAutopilotTitle: TextView = itemView.findViewById(R.id.tvAutopilotTitle) + var tvAutopilotTime: TextView = itemView.findViewById(R.id.tvAutopilotTime) + var tvAutopilotContent: TextView = itemView.findViewById(R.id.tvAutopilotContent) + } + fun setChangeListener(listener: ChangeViewListener){ changeViewListener = listener } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index e64c061cee..a665a8dd12 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -45,7 +45,12 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : private val fm: Int = 4 //FM信息 private val report: Int = 5 //系统信息 private val record: Int = 6 //录包 - private val summary: Int = 8 + private val summary: Int = 8 //汇总消息 + private val ssm: Int = 9 //SSM连接消息 + private val autopilot = 20 //工控机连接消息 + + private val none = -1 + //Error private val RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE" @@ -116,6 +121,16 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : .inflate(R.layout.item_msg_box_summary, parent, false) return MsgBoxSummary(view) } + ssm -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_ssm,parent,false) + return MsgBoxSsm(view) + } + autopilot -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_autopilot,parent,false) + return MsgBoxAutopilot(view) + } else -> { val view = LayoutInflater.from(parent.context) .inflate(R.layout.item_msg_box_v2x, parent, false) @@ -394,8 +409,8 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.tvReportLevelOpen.text = "Warning" }else { //INFO - holder.ivReportImageNormal.setImageDrawable(getDrawable(R.drawable.icon_report_warning_normal)) - holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_warning_open)) + holder.ivReportImageNormal.setImageDrawable(getDrawable(R.drawable.icon_report_info_normal)) + holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_info_open)) holder.tvReportLevelNormal.text = "Info" holder.tvReportLevelOpen.text = "Info" } @@ -648,6 +663,7 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : } } } + //汇总消息 is MsgBoxSummary -> { data?.let { val summaryMsg = it[position].bean as V2XMsg @@ -656,6 +672,24 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : holder.tvSummaryContent.text = summaryMsg.content } } + //SSM连接状态消息 + is MsgBoxSsm -> { + data?.let { + val ssmMsg = it[position].bean as SSMMsg + holder.tvSsmTitle.text = ssmMsg.title + holder.tvSsmContent.text = ssmMsg.content + holder.tvSsmTime.text = TimeUtils.millis2String(ssmMsg.timestamp,getHourMinFormat()) + } + } + //域控制器连接状态消息 + is MsgBoxAutopilot ->{ + data?.let { + val autopilotMsg = it[position].bean as AutopilotMsg + holder.tvAutopilotTitle.text = autopilotMsg.title + holder.tvAutopilotContent.text = autopilotMsg.content + holder.tvAutopilotTime.text = TimeUtils.millis2String(autopilotMsg.timestamp,getHourMinFormat()) + } + } } } @@ -692,9 +726,14 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : record } else if(data!![position].type == MsgBoxType.FMINFO){ fm - } - else { + } else if(data!![position].type == MsgBoxType.SSMINFO){ + ssm + } else if(data!![position].type == MsgBoxType.AUTOPILOT){ + autopilot + } else if(data!![position].type == MsgBoxType.V2X || data!![position].type == MsgBoxType.OBU){ v2x + } else { + none } } @@ -791,5 +830,20 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : var tvSummaryTime: TextView = itemView.findViewById(R.id.tvSummaryTime) } + //SSM连接状态 + class MsgBoxSsm(itemView: View) : RecyclerView.ViewHolder(itemView){ + var ivSsmImage: ImageView = itemView.findViewById(R.id.ivSsmImage) + var tvSsmTitle: TextView = itemView.findViewById(R.id.tvSsmTitle) + var tvSsmTime: TextView = itemView.findViewById(R.id.tvSsmTime) + var tvSsmContent: TextView = itemView.findViewById(R.id.tvSsmContent) + } + + //域控制器连接状态 + class MsgBoxAutopilot(itemView: View) : RecyclerView.ViewHolder(itemView){ + var ivAutopilotImage: ImageView = itemView.findViewById(R.id.ivAutopilotImage) + var tvAutopilotTitle: TextView = itemView.findViewById(R.id.tvAutopilotTitle) + var tvAutopilotTime: TextView = itemView.findViewById(R.id.tvAutopilotTime) + var tvAutopilotContent: TextView = itemView.findViewById(R.id.tvAutopilotContent) + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt index 6b0bc87b1d..8207016a7e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt @@ -108,6 +108,13 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView val v2XMsg = msgBoxBean.bean as V2XMsg holder.tvPassengerV2XContent.text = v2XMsg.content holder.ivPassengerV2XImage.setImageDrawable(ResourcesCompat.getDrawable(activity.resources,EventTypeEnumNew.getUpdateIconRes(v2XMsg.type),null)) + if (EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGU.poiType == v2XMsg.type + || EventTypeEnumNew.TYPE_SOCKET_ROAD_SHIGONG.poiType == v2XMsg.type + ) { + holder.ivPassengerV2XImage.visibility = View.GONE + } else { + holder.ivPassengerV2XImage.visibility = View.VISIBLE + } holder.clPassengerVeXLayout.setOnClickListener { CallerMsgBoxEventListenerManager.invokeBubbleV2XListener(msgBoxBean) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index db91cc7565..9556510904 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -7,6 +7,7 @@ import android.content.ClipboardManager import android.content.Context import android.content.Intent import android.graphics.Color +import android.graphics.drawable.ColorDrawable import android.os.Build import android.os.Process import android.text.Html @@ -14,7 +15,11 @@ import android.util.AttributeSet import android.util.Log import android.view.LayoutInflater import android.view.View +import android.view.ViewGroup +import android.widget.BaseAdapter +import android.widget.TextView import androidx.annotation.RequiresApi +import androidx.appcompat.widget.ListPopupWindow import androidx.appcompat.widget.PopupMenu import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat @@ -22,6 +27,7 @@ import androidx.core.view.MenuCompat import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import chassis.Chassis +import com.alibaba.android.arouter.launcher.ARouter import com.mogo.cloud.network.cronet.NetworkQualityListener import com.mogo.cloud.network.cronet.QuicConfig import com.mogo.cloud.passport.MoGoAiCloudClient @@ -29,9 +35,11 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.constants.SharedPrefsConstants import com.mogo.commons.debug.DebugConfig import com.mogo.commons.module.status.MogoStatusManager +import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig +import com.mogo.eagle.core.data.config.JunkConfig import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD @@ -49,6 +57,7 @@ import com.mogo.eagle.core.data.multidisplay.TelematicConstant import com.mogo.eagle.core.data.obu.MogoObuConst import com.mogo.eagle.core.data.obu.ObuStatusInfo import com.mogo.eagle.core.function.api.autopilot.* +import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuConnectListener import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuInfoListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener @@ -58,6 +67,8 @@ import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion. import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_RAIN import com.mogo.eagle.core.function.api.setting.ISopSettingListener import com.mogo.eagle.core.function.call.autopilot.* +import com.mogo.eagle.core.function.call.cloud.CallerCloudCertManager +import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager @@ -82,12 +93,14 @@ import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.permissions.BackgrounderPermission -import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.mogo.toast.TipToast import com.mogo.eagle.core.utilcode.util.* import com.mogo.map.MogoData.Companion.mogoMapData import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.map.uicontroller.VisualAngleMode.* +import com.mogo.test.crashreport.CrashReportConstants +import com.mogo.test.crashreport.ITestCrashReportProvider +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.service.chain.ChainLog import kotlinx.android.synthetic.main.view_debug_setting.view.* import kotlinx.coroutines.* @@ -95,6 +108,7 @@ import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg import java.text.SimpleDateFormat import java.util.* +import java.util.concurrent.TimeUnit import kotlin.collections.component1 import kotlin.collections.component2 import kotlin.collections.component3 @@ -131,7 +145,7 @@ internal class DebugSettingView @JvmOverloads constructor( IMoGoChassisThrottleStateListener, IMoGoSweeperFutianCleanSystemListener, IMoGoObuInfoListener, - ISopSettingListener, IViewControlListener { + ISopSettingListener, IViewControlListener, IMoGoCloudListener { private val TAG = "DebugSettingView" @@ -190,6 +204,8 @@ internal class DebugSettingView @JvmOverloads constructor( // 高精地图是否已缓存 private var isHDCached = false + private var isClickCheckedCbSsl = false//是否已经点击且选中证书认证按钮 + private var isFirstDownLoadCertHint = false init { LayoutInflater.from(context).inflate(R.layout.view_debug_setting, this, true) @@ -219,6 +235,8 @@ internal class DebugSettingView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() + // 添加证书 监听 + CallerCloudListenerManager.addListener(TAG, this) // 添加 OBU状态 监听 CallerObuConnectListenerManager.addListener(TAG, this) // 添加 ADAS状态 监听 @@ -254,7 +272,7 @@ internal class DebugSettingView @JvmOverloads constructor( // 开启定时查询速度 isRunCheck = true Timer().schedule(timerTaskRefresh, Date(), 500) - if (AppConfigInfo.isConnectAutopilot && (AppConfigInfo.plateNumber.isNullOrEmpty() || AppConfigInfo.iPCMacAddress.isNullOrEmpty())) { + if (AppConfigInfo.isConnectAutopilot && (AppConfigInfo.plateNumber.isEmpty() || AppConfigInfo.iPCMacAddress.isEmpty())) { //查询工控机基础配置信息 CallerAutoPilotControlManager.getCarConfig() } @@ -264,6 +282,8 @@ internal class DebugSettingView @JvmOverloads constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() + // 移除 证书 监听 + CallerCloudListenerManager.removeListener(TAG) // 移除 OBU状态 监听 CallerObuConnectListenerManager.removeListener(TAG) // 移除 ADAS状态 监听 @@ -292,6 +312,7 @@ internal class DebugSettingView @JvmOverloads constructor( //雨天、美化、点云设置同步 CallerSopSettingManager.removeListener(TAG) + // 移除 业务配置监听 CallerDevaToolsFuncConfigListenerManager.unRegisterDevaToolsFuncConfigListener( FuncBizConfig.FOUNDATION, @@ -716,8 +737,8 @@ internal class DebugSettingView @JvmOverloads constructor( CallerAutoPilotControlManager.setDemoMode(FunctionBuildConfig.isDemoMode) CallerSopSettingManager.invokeDemoModeListener(isChecked) CallerHmiViewControlListenerManager.invokeFuncMode( - FUNC_MODE_DEMO, - FunctionBuildConfig.isDemoMode + FUNC_MODE_DEMO, + FunctionBuildConfig.isDemoMode ) if (!FunctionBuildConfig.isDemoMode) { //关闭美化模式时,通知工控机 @@ -1050,6 +1071,17 @@ internal class DebugSettingView @JvmOverloads constructor( ToastUtils.showLong("经纬度复制成功") } + val certTxt = + if (CallerCloudCertManager.getRootCrtF() + .isNullOrEmpty() + ) "未下载证书" else "已下载证书" + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + tvCertFile.text = Html.fromHtml("证书状态: $certTxt", Html.FROM_HTML_MODE_LEGACY) + } else { + tvCertFile.text = Html.fromHtml("证书状态: $certTxt") + } + + //状态中心-后台优化状态 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val backgroundStatus = "后台运行:" + if (BackgrounderPermission.getInstance() @@ -1260,8 +1292,51 @@ internal class DebugSettingView @JvmOverloads constructor( CallerAutoPilotControlManager.recordPackage() } } + //是否启用证书认证 + cbSsl.isChecked = + SharedPrefsMgr.getInstance().getBoolean( + MoGoConfig.AUTOPILOT_CERTIFICATION, + MoGoConfig.AUTOPILOT_CERTIFICATION_DEFAULT_VALUE + ) + cbSsl.setOnCheckedChangeListener { _, isChecked -> + isClickCheckedCbSsl = isChecked +// 下载证书 + if (isChecked) { + if (CallerCloudCertManager.getRootCrtF().isNullOrEmpty()) { + if (!isFirstDownLoadCertHint) { + isFirstDownLoadCertHint = true + ToastUtils.showShort("证书文件不存在,正在下载") + } + cbSsl.isChecked = false + CallerCloudCertManager.certFileDownLoad { errorMsg -> + ThreadUtils.runOnUiThread { + ToastUtils.showShort(errorMsg) + } + } + } + } + SharedPrefsMgr.getInstance() + .putBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, cbSsl.isChecked) + } + } - + override fun authCrtFile(device: String, root: String) { + super.authCrtFile(device, root) + ThreadUtils.runOnUiThread { + if (isClickCheckedCbSsl) { + cbSsl.isChecked = true + SharedPrefsMgr.getInstance() + .putBoolean(MoGoConfig.AUTOPILOT_CERTIFICATION, true) + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + tvCertFile.text = Html.fromHtml( + "证书状态: 已下载证书", + Html.FROM_HTML_MODE_LEGACY + ) + } else { + tvCertFile.text = Html.fromHtml("证书状态: 已下载证书") + } + } } /** @@ -1394,10 +1469,10 @@ internal class DebugSettingView @JvmOverloads constructor( /** * 设置是否开启pre check, true-打开,false-关闭 */ - tbTraceEnable.isChecked = SharedPrefsMgr.getInstance().getBoolean("TRACE_ENABLE",true) + tbTraceEnable.isChecked = SharedPrefsMgr.getInstance().getBoolean("TRACE_ENABLE", true) tbTraceEnable.setOnCheckedChangeListener { _, isChecked -> - HmiActionLog.hmiAction(TAG + "TRACE_ENABLE",isChecked) - SharedPrefsMgr.getInstance().putBoolean("TRACE_ENABLE",isChecked) + HmiActionLog.hmiAction(TAG + "TRACE_ENABLE", isChecked) + SharedPrefsMgr.getInstance().putBoolean("TRACE_ENABLE", isChecked) CallerDevaToolsManager.setTraceEnable(isChecked) } @@ -1499,7 +1574,7 @@ internal class DebugSettingView @JvmOverloads constructor( } } - //导出全量日志 + //上传全量日志 exportAllLogs?.onClick { v -> v.visibility = View.INVISIBLE logLoadingView?.visibility = View.VISIBLE @@ -1523,6 +1598,47 @@ internal class DebugSettingView @JvmOverloads constructor( } } + if (JunkConfig.isSupportJunkDetect) { + // 上传APM日志 + upload_apm_log_group?.visibility = View.VISIBLE + upload_apm_log?.onClick { v -> + ListPopupWindow(v.context).also { p -> + val items = ApmVLogUploadDuration.values() + p.setAdapter(ApmVLogUploadAdapter(v.context, items)) + p.anchorView = v + p.isModal = true + p.setBackgroundDrawable(ColorDrawable(Color.WHITE)) + p.setOnItemClickListener { _, _, position, _ -> + val provider = (ARouter.getInstance().build(CrashReportConstants.PATH).navigation() as? ITestCrashReportProvider) ?: return@setOnItemClickListener + val item = items[position] + v.visibility = View.INVISIBLE + upload_apm_log_loading?.visibility = View.VISIBLE + p.dismiss() + v.scope.launch(Dispatchers.IO) { + val endTime = System.currentTimeMillis() + val startTime = when(item) { + ApmVLogUploadDuration.IN_15M -> endTime - TimeUnit.MINUTES.toMillis(15) + ApmVLogUploadDuration.IN_45M -> endTime - TimeUnit.MINUTES.toMillis(45) + ApmVLogUploadDuration.IN_1H -> endTime - TimeUnit.HOURS.toMillis(1) + ApmVLogUploadDuration.IN_2H -> endTime - TimeUnit.HOURS.toMillis(2) + ApmVLogUploadDuration.IN_3H -> endTime - TimeUnit.HOURS.toMillis(3) + ApmVLogUploadDuration.IN_6H -> endTime - TimeUnit.HOURS.toMillis(6) + ApmVLogUploadDuration.ALL -> 0 + } + provider.uploadVlog(startTime, endTime) + withContext(Dispatchers.Main) { + ToastUtils.showShort("上传成功") + upload_apm_log_loading?.visibility = View.INVISIBLE + upload_apm_log?.visibility = View.VISIBLE + } + } + } + }.show() + } + } else { + upload_apm_log_group?.visibility = View.GONE + } + /** * 展示、关闭日志过滤面板 */ @@ -1615,6 +1731,53 @@ internal class DebugSettingView @JvmOverloads constructor( } } + private enum class ApmVLogUploadDuration(val text: String) { + IN_15M("15分钟内"), + IN_45M("45分钟内"), + IN_1H("1小时内"), + IN_2H("2小时内"), + IN_3H("3小时内"), + IN_6H("6小时内"), + ALL("上传所有") + } + + private class ApmVLogUploadAdapter(private val ctx: Context, private val items: Array): BaseAdapter() { + override fun getCount(): Int { + return items.size + } + + override fun getItem(position: Int): Any { + return items[position] + } + + override fun getItemId(position: Int): Long { + return items[position].ordinal.toLong() + } + + override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { + var result = convertView + val duration = items[position] + if (result == null) { + val temp = View.inflate(ctx, android.R.layout.simple_list_item_1, null) + temp.tag = Holder(temp.findViewById(android.R.id.text1)) + result = temp + } + val holder = result?.tag as? Holder + if (holder != null) { + holder.text?.setTextColor(Color.BLACK) + holder.text?.text = duration.text + } else { + val text = result?.findViewById(android.R.id.text1) + text?.setTextColor(Color.BLACK) + text?.text = duration.text + result?.tag = Holder(text) + } + return result!! + } + + private inner class Holder(val text: TextView? = null) + } + private fun refreshTraceInfo() { val traceInfoMap = CallerDevaToolsManager.getTraceInfo() val autopilot = traceInfoMap[ChainConstant.CHAIN_TYPE_SOCKET_AUTOPILOT] @@ -1892,55 +2055,47 @@ internal class DebugSettingView @JvmOverloads constructor( } } - /** - * 自动驾驶状态回调 - */ - override fun onAutopilotStatusResponse(state: Int) { - setAutopilotConnectStatus() + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { + setAutopilotConnectStatus(status) } /** * 设置工控机连接状态 */ - private fun setAutopilotConnectStatus() { - ThreadUtils.runOnUiThread { - tvAutopilotConnectStatus.text = Html.fromHtml( - "工控机连接状态:${ - if (AppConfigInfo.isConnectAutopilot) { - "正常" - } else { - "异常 原因:${ - if (AppConfigInfo.connectStatusDescribe.isNullOrEmpty()) { - "主动断开连接" - } else { - AppConfigInfo.connectStatusDescribe - } - }" - } - }" - ) + private fun setAutopilotConnectStatus(status: AdasConstants.IpcConnectionStatus = AdasConstants.IpcConnectionStatus.DISCONNECTED) { + val color = when (status) { + AdasConstants.IpcConnectionStatus.CONNECTED -> { + "" + } - if (AppConfigInfo.isConnectAutopilot) { + AdasConstants.IpcConnectionStatus.CONNECTING, + AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER, + AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK, + AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> { + "" + } + + else -> { + "" + } + } + val msg = Html.fromHtml("工控机连接状态:${color}${AppConfigInfo.connectStatusDescribe}") + ThreadUtils.runOnUiThread { + tvAutopilotConnectStatus.text = msg + if (status == AdasConstants.IpcConnectionStatus.CONNECTED || + status == AdasConstants.IpcConnectionStatus.CONNECTING || + status == AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER || + status == AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK || + status == AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS + ) { tvIpcConnectStatus.minLines = 1 } else { tvIpcConnectStatus.minLines = 4 } - - tvIpcConnectStatus.text = Html.fromHtml( - "工控机连接状态:${ - if (AppConfigInfo.isConnectAutopilot) { - "正常" - } else { - "异常 原因:${ - if (AppConfigInfo.connectStatusDescribe.isNullOrEmpty()) { - "主动断开连接" - } else { - AppConfigInfo.connectStatusDescribe - } - }" - } - }" - ) + tvIpcConnectStatus.text = msg //如果是乘客端,则不显示工控机连接状态 if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { tvIpcConnectStatus.visibility = View.GONE @@ -2165,7 +2320,7 @@ internal class DebugSettingView @JvmOverloads constructor( Intent(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_HOME) flags = Intent.FLAG_ACTIVITY_NEW_TASK - context.startActivity(this) + ActivityUtils.startActivity(this) Process.killProcess(Process.myPid()) exitProcess(0) } @@ -2244,8 +2399,9 @@ internal class DebugSettingView @JvmOverloads constructor( } private fun restartApp() { - Utils.getApp() - .startActivity(Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)) + Utils.getApp().packageManager.getLaunchIntentForPackage(Utils.getApp().packageName)?.also { + ActivityUtils.startActivity(it) + } Process.killProcess(Process.myPid()) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index 055e8ea5ae..405afde054 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -34,7 +34,9 @@ import com.mogo.eagle.core.function.hmi.ui.tools.SweeperModeChangedConfirmDialog import com.mogo.eagle.core.function.call.unmanned.CallerUnmannedListenerManager import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog.Companion.hmiAction import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.vehicle.SweeperVehicleConfigUtils +import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.zhjt.mogo.adas.data.AdasConstants @@ -81,6 +83,7 @@ import kotlinx.android.synthetic.main.view_sop_setting.view.scV2XSwitch import kotlinx.android.synthetic.main.view_sop_setting.view.scV2iPnc import kotlinx.android.synthetic.main.view_sop_setting.view.scV2nPnc import kotlinx.android.synthetic.main.view_sop_setting.view.scWeakNetSlowDown +import kotlinx.android.synthetic.main.view_sop_setting.view.scWeatherSwitch import kotlinx.android.synthetic.main.view_sop_setting.view.sopLayout import kotlinx.android.synthetic.main.view_sop_setting.view.tvOverTakeLimit import kotlinx.android.synthetic.main.view_sop_setting.view.tvPullTimeTitle @@ -223,6 +226,11 @@ internal class SOPSettingView @JvmOverloads constructor( return@setOnCheckedChangeListener } FunctionBuildConfig.v2nMainSwitch = isChecked + val map = HashMap().also { + it["f1"] = isChecked + it["f2"] = FunctionBuildConfig.isNewV2NData + } + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } //V2I总开关 @@ -280,6 +288,12 @@ internal class SOPSettingView @JvmOverloads constructor( } hmiAction("SOP 是否是V2N新链路(云->工控机->App)", isChecked) FunctionBuildConfig.isNewV2NData = isChecked + + val map = HashMap().also { + it["f1"] = FunctionBuildConfig.v2nMainSwitch + it["f2"] = isChecked + } + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.V2N_NEW_LINK_SWITCH, GsonUtils.toJson(map).toByteArray()) } //V2N场景进PNC @@ -737,6 +751,25 @@ internal class SOPSettingView @JvmOverloads constructor( } } + scWeatherSwitch?.also { + if (!AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + it.visibility = GONE + } else { + it.visibility = VISIBLE + val params = it.layoutParams as ConstraintLayout.LayoutParams + if (scLineRoutingVerify.visibility == VISIBLE) { + params.topToBottom = R.id.scLineRoutingVerify + } else { + params.topToBottom = R.id.scIPCReport + } + it.layoutParams = params + it.setOnCheckedChangeListener { _, isChecked -> + CallerLogger.d(TAG, "发送开关数据:${isChecked}到乘客屏") + CallerTelematicManager.sendMsgToAllClients(TelematicConstant.WEATHER_SWITCH_STATUS, (if (isChecked) "1" else "0").toByteArray()) + } + } + } + // 清扫车业务模式切换 scSweeperModeSwitch?.also { switchView -> switchView.isChecked = @@ -806,10 +839,11 @@ internal class SOPSettingView @JvmOverloads constructor( else View.GONE tvPullTimeTitle.visibility = - if(AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode)) + if(AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode)) { View.VISIBLE - else + } else { View.GONE + } /** * 魔方sop运营相关配置 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryAdapter.kt index f610f0dddb..e1109c28b6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryAdapter.kt @@ -45,6 +45,9 @@ class StatusSummaryAdapter(private val ctx: Context, var data: ArrayList { ivFuncView.setImageResource(R.drawable.tracing) } + 4 -> { + ivFuncView.setImageResource(R.drawable.controller) + } } if (entity.isException) { tvStatusDesc.setTextColor(Color.parseColor("#FF4444")) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryView.kt index 8b349668fe..165f28ed20 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/StatusSummaryView.kt @@ -1,8 +1,8 @@ package com.mogo.eagle.core.function.hmi.ui.setting -import android.annotation.SuppressLint import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.widget.FrameLayout import androidx.recyclerview.widget.LinearLayoutManager @@ -11,6 +11,7 @@ import com.mogo.commons.module.status.IMogoStatusChangedListener import com.mogo.commons.module.status.MogoStatusManager import com.mogo.commons.module.status.StatusDescriptor import com.mogo.eagle.core.data.status.StatusSummaryEntity +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener import com.mogo.eagle.core.function.api.telematic.IConnectStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager @@ -20,6 +21,7 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.kotlin.PX import com.mogo.eagle.core.utilcode.rv.divider.CommonDividerItemDecoration import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.zhjt.mogo.adas.data.AdasConstants /** * 状态汇总View控件 @@ -33,7 +35,7 @@ class StatusSummaryView@JvmOverloads constructor( attrs, defStyleAttr ), IConnectStatusListener, IMogoStatusChangedListener, - IMoGoDevaToolsListener { + IMoGoDevaToolsListener, IMoGoAutopilotStatusListener { companion object{ private const val TAG = "SummaryStatusView" } @@ -47,6 +49,7 @@ class StatusSummaryView@JvmOverloads constructor( it.add(StatusSummaryEntity(1)) it.add(StatusSummaryEntity(2)) it.add(StatusSummaryEntity(3)) + it.add(StatusSummaryEntity(4, "域控未连接", true)) } } @@ -63,6 +66,7 @@ class StatusSummaryView@JvmOverloads constructor( // 云socket连接状态 MogoStatusManager.getInstance() .registerStatusChangedListener(TAG, StatusDescriptor.CLOUD_SOCKET, this) + CallerAutoPilotStatusListenerManager.addListener(TAG, this) } private fun initView() { @@ -153,4 +157,50 @@ class StatusSummaryView@JvmOverloads constructor( adapter?.notifyItemChanged(3) }, UiThreadHandler.MODE.QUEUE) } + + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { + super.onAutopilotIpcConnectStatusChanged(status, reason) + var pair: Pair? = null + when (status) { + AdasConstants.IpcConnectionStatus.DISCONNECTED -> { + pair = Pair("域控未连接", true) + } + AdasConstants.IpcConnectionStatus.CONNECTED -> { + pair = Pair("域控已连接", false) + } + AdasConstants.IpcConnectionStatus.CONNECTING -> { + pair = Pair("域控连接中", true) + } + AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER, AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK -> { + pair = Pair("域控重连中", true) + } + AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION -> { + pair = Pair("域控连接异常", true) + } + AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS -> { + pair = Pair("非法域控地址", true) + } + AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS -> { + pair = Pair("正在搜索域控地址", true) + } + AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS -> { + pair = Pair("找不到可用的域控地址", true) + } + AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT -> { + pair = Pair("域控心跳超时", true) + } + AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED -> { + pair = Pair("域控主动断开连接", true) + } + } + UiThreadHandler.post { + if (data.size < 5 || pair == null) return@post + data[4].desc = pair.first + data[4].isException = pair.second + adapter?.notifyItemChanged(4) + } + } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index fa9831f93b..797cadd2d6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -24,6 +24,7 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.utils.KeyBoardUtil import com.mogo.eagle.core.function.msgbox.MsgBoxConfig import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhjt.service_biz.BizConfig @@ -136,18 +137,11 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( sopLayout.setOnClickListener { clickListener?.showSOPSettingView() } - managerLayout.setOnClickListener { - //录包管理页面 - clickListener?.showBadCaseManagerView() - } //BadCase上报 CallerDevaToolsManager.initAiCollect(badCaseLayout) ivDebugPanel.setOnClickListener { clickListener?.showDebugPanelView() } - ivDebugFeedback.onClick { - clickListener?.showFeedbackView() - } if (AppConfigInfo.isConnectAutopilot) { CallerAutoPilotControlManager.getCarConfig() @@ -270,7 +264,7 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( Intent(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_HOME) flags = Intent.FLAG_ACTIVITY_NEW_TASK - context.startActivity(this) + ActivityUtils.startActivity(this) Process.killProcess(Process.myPid()) exitProcess(0) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt index 0615fac9b9..7c7e6da225 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/PncActionsView.kt @@ -90,27 +90,28 @@ class PncActionsView @JvmOverloads constructor( UiThreadHandler.post { if (CallerAutoPilotStatusListenerManager.getState() == STATUS_AUTOPILOT_RUNNING) { var actions: String? = null - planningActionMsg.actionMsg?.let { it -> + planningActionMsg.actionMsg?.let { try { actions = PncActionsHelper.getAction( it.drivingState.number, it.drivingAction.number ) + + //如果是存在云端红绿灯数据条件下,设置云端数据 + if (PncActionsHelper.isWaitingTrafficlight( + it.drivingState.number, + it.drivingAction.number + ) + && mTrafficLightResult != null + && hasRedLight() + ) { + actions += ",预计${getWaitTrafficLightTime()}秒后通过" + } else { + mTrafficLightResult = null + } } catch (e: Exception) { e.printStackTrace() } - //如果是存在云端红绿灯数据条件下,设置云端数据 - if (PncActionsHelper.isWaitingTrafficlight( - it.drivingState.number, - it.drivingAction.number - ) - && mTrafficLightResult != null - && hasRedLight() - ) { - actions += ",预计${getWaitTrafficLightTime()}秒后通过" - } else { - mTrafficLightResult = null - } } // update view if (actions.isNullOrEmpty()) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt index 0aab5a61ca..7a6daf0258 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt @@ -17,6 +17,7 @@ import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.zhjt.mogo.adas.data.AdasConstants import kotlinx.android.synthetic.main.view_blue_tooth.view.* import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger @@ -99,7 +100,7 @@ open class BlueToothView: LinearLayout, IMoGoMoFangProvider.OnMoFangStatusListen } } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) if (!CallerAutoPilotStatusListenerManager.isConnect()) { UiThreadHandler.post { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckSystemView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckSystemView.kt index 7df9053a03..14b7929fdd 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckSystemView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CheckSystemView.kt @@ -1,36 +1,66 @@ package com.mogo.eagle.core.function.hmi.ui.widget +import android.animation.ObjectAnimator +import android.animation.ValueAnimator import android.content.Context import android.util.AttributeSet -import android.view.Gravity import android.view.LayoutInflater import android.view.View +import android.view.animation.LinearInterpolator import androidx.constraintlayout.widget.ConstraintLayout -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI +import androidx.core.content.ContextCompat +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.data.enums.EventTypeEnumNew +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.V2XMsg import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoReceiveReceivedAckListener +import com.mogo.eagle.core.function.api.devatools.IPowerOffListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.function.call.autopilot.CallerReceiveReceivedAckListenerManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.devatools.CallerPowerOffManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.hmi.notification.WarningFloat import com.mogo.eagle.core.function.hmi.ui.tools.DockerRebootDialog +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI +import com.mogo.eagle.core.utilcode.util.ParseVersionUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.zhjt.mogo.adas.common.MessageType +import com.zhjt.mogo.adas.data.AdasConstants +import com.zhjt.mogo.adas.data.bean.ReceivedAck import kotlinx.android.synthetic.main.view_check_system.view.* + class CheckSystemView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener { +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener, + IPowerOffListener, IMoGoReceiveReceivedAckListener { companion object { const val TAG = "CheckSystemView" } + //重启系统对话框 private var dockerRebootDialog: DockerRebootDialog? = null - private var downloadStatus: String = "" //下载状态 - private var upgradeStatus: String = "" //升级状态 + private var connectStatus: Boolean = false //与工控机的连接状态 + private var isExecutingPowerOff: Boolean = false //是否正在下发一键停服命令 + private var isPowerOffCountDown: Boolean = false //一键停服是否处于1分钟倒计时 + private var powerOffMsgId: Long = -1 //一键停服命令下发Id + private var progressAnimator: ObjectAnimator ?= null //一键停服命令倒计时 + /** + * 停止域控服务状态 + * 0:准备停服 1:停服命令下发中 2:停服命令下发成功 3:停服命令下发失败 + * 4:停服命令下发超时 5:停服中 6:停服成功 7:停服成功不可点击 + */ + private var powerOffStatus: Int = 0 init { LayoutInflater.from(context).inflate(R.layout.view_check_system, this, true) @@ -38,84 +68,399 @@ class CheckSystemView @JvmOverloads constructor( } private fun initView() { + //一键停服 viewCheckShutDown.setOnClickListener { - //dialog -// showSystemOperationWindow() + powerOff() } + tvCheckShutDown.setOnClickListener { + powerOff() + } + //重启系统 viewCheckReboot.setOnClickListener { - //dialog - if (dockerRebootDialog == null) { - dockerRebootDialog = DockerRebootDialog(context) - dockerRebootDialog?.setClickListener(object : DockerRebootDialog.ClickListener { - override fun confirm() { - if (CallerAutoPilotStatusListenerManager.getState() == 2) { - //当前处于自动驾驶状态,不可进行重启,Toast提示 - ToastUtils.showShort("请先退出自动驾驶状态") - } - -// else if (AdUpgradeStateHelper.showCannotReboot( -// downloadStatus, -// upgradeStatus -// ) -// ) { -// //当工控机处于下载或者升级状态,需要先进行升级 -// ToastUtils.showShort("请先完成新自动驾驶系统的下载/升级") -// } - - else { - //确认重启 - CallerLogger.d("$M_HMI$TAG", "reboot confirm") - CallerAutoPilotControlManager.setIPCReboot() - } - } - - override fun cancel() { - //取消重启 - CallerLogger.d("$M_HMI$TAG", "reboot cancel") - } - - }) - } - dockerRebootDialog?.showUpgradeDialog() + showRebootDialog() + } + tvCheckReboot.setOnClickListener { + showRebootDialog() + } + CallerDevaToolsManager.getPowerOffStatus()?.let { + powerOffStatus = it + } + when(powerOffStatus){ + //准备停服 + 0->{ + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down + ) + ) + viewCheckShutDown.isClickable = true + } + //停服命令下发中 + 1->{ + isExecutingPowerOff = true + } + //停服命令下发成功 + 2->{ + viewProgressBackground.visibility = View.VISIBLE + viewProgress.visibility = View.VISIBLE + tvCountDown.visibility = View.VISIBLE + tvCountDownUnit.visibility = View.VISIBLE + //开始旋转动画 + if(progressAnimator == null){ + progressAnimator = ObjectAnimator.ofFloat(viewProgress,"rotation", 0f, 360f) + } + progressAnimator?.interpolator = LinearInterpolator() + progressAnimator?.repeatCount = ValueAnimator.INFINITE //无限循环 + progressAnimator?.duration = 10000 //设置持续时间 + progressAnimator?.startDelay = 0 + progressAnimator?.start() + //一键停服倒计时中 + isPowerOffCountDown = true + } + //停服命令下发失败 + 3->{ + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_fail + ) + ) + } + //停服命令下发超时 + 4->{ + //将图标改为失败 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_fail + ) + ) + } + //停服中 + 5->{ + isPowerOffCountDown = true + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_background + ) + ) + viewProgressBackground.visibility = View.VISIBLE + viewProgress.visibility = View.VISIBLE + tvCountDown.visibility = View.VISIBLE + tvCountDownUnit.visibility = View.VISIBLE + //开始旋转动画 + if(progressAnimator == null){ + progressAnimator = ObjectAnimator.ofFloat(viewProgress,"rotation", 0f, 360f) + } + progressAnimator?.interpolator = LinearInterpolator() + progressAnimator?.repeatCount = ValueAnimator.INFINITE //无限循环 + progressAnimator?.duration = 10000 //设置持续时间 + progressAnimator?.startDelay = 0 + progressAnimator?.start() + } + //停服成功 + 6->{ + //停止一键停服进度属性动画 + progressAnimator?.cancel() + //隐藏一键停服进度视图 + viewProgressBackground.visibility = View.GONE + viewProgress.visibility = View.GONE + tvCountDown.visibility = View.GONE + tvCountDownUnit.visibility = View.GONE + //一键停服命令倒计时结束,变为成功状态,并且发送1s倒计时 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_success + ) + ) + isPowerOffCountDown = false + } + //停服成功不可点击 + 7->{ + //将倒计时内容隐藏 + viewProgressBackground.visibility = View.GONE + viewProgress.visibility = View.GONE + tvCountDown.visibility = View.GONE + tvCountDownUnit.visibility = View.GONE + //停服成功,将按钮置为不可点击状态 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_complete + ) + ) + viewCheckShutDown.isClickable = false + isPowerOffCountDown = false + } } } - fun setAdUpgradeStatus(downloadStatus: String, upgradeStatus: String) { - this.downloadStatus = downloadStatus - this.upgradeStatus = upgradeStatus + /** + * 一键停服 + */ + private fun powerOff() { + if (!connectStatus) { + ToastUtils.showShort("尚未连接工控机,无法下发一键停服命令") + return + } + if(AppConfigInfo.dockerVersion.isEmpty()){ + ToastUtils.showShort("尚未连接工控机,无法下发一键停服命令") + return + } + if(ParseVersionUtils.parseVersion(true, AppConfigInfo.dockerVersion)<40100){ + ToastUtils.showShort("此域控版本不支持一键停服功能,最低支持版本为4.1.0") + return + } + if(CallerAutoPilotStatusListenerManager.getState() == 2){ + //当前处于自动驾驶状态,不可进行重启,Toast提示 + ToastUtils.showShort("请先退出自动驾驶状态") + return + } + if (isExecutingPowerOff) { + //一键停服命令下发执行中 + ToastUtils.showShort("一键停服命令下发中,请勿重复点击") + return + } + if (isPowerOffCountDown) { + //系统停服中 + ToastUtils.showShort("系统停服中,请勿重复点击") + return + } + //将是否正在下发一键停服命令标签改为true + isExecutingPowerOff = true + CallerDevaToolsManager.setPowerOffStatus(1) + //系统命令请求 关机 + powerOffMsgId = CallerAutoPilotControlManager.sendIpcPowerOff() + //开始执行10秒等待倒计时 + CallerDevaToolsManager.startCommandWaitCountDown() } - private fun showSystemOperationWindow(view: View) { - WarningFloat.with(context).setGravity(Gravity.CENTER).setLayout(view) - .setImmersionStatusBar(true).show() + /** + * 展示系统重启确认窗 + */ + private fun showRebootDialog() { + if (!connectStatus) { + ToastUtils.showShort("尚未连接工控机,无法重启系统") + return + } + //dialog + if (dockerRebootDialog == null) { + dockerRebootDialog = DockerRebootDialog(context) + dockerRebootDialog?.setClickListener(object : DockerRebootDialog.ClickListener { + override fun confirm() { + if (CallerAutoPilotStatusListenerManager.getState() == 2) { + //当前处于自动驾驶状态,不可进行重启,Toast提示 + ToastUtils.showShort("请先退出自动驾驶状态") + } else { + //确认重启 + CallerLogger.d("$M_HMI$TAG", "reboot confirm") + CallerAutoPilotControlManager.sendIpcReboot() + ToastUtils.showLong("重启命令已发送") + } + } + + override fun cancel() { + //取消重启 + CallerLogger.d("$M_HMI$TAG", "reboot cancel") + } + + }) + } + dockerRebootDialog?.showUpgradeDialog() } override fun onAttachedToWindow() { super.onAttachedToWindow() CallerAutoPilotStatusListenerManager.addListener(TAG, this) + CallerPowerOffManager.addListener(TAG, this) + CallerReceiveReceivedAckListenerManager.addListener(TAG, this) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() CallerAutoPilotStatusListenerManager.removeListener(TAG) + CallerPowerOffManager.removeListener(TAG) + CallerReceiveReceivedAckListenerManager.removeListener(TAG) } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { super.onAutopilotIpcConnectStatusChanged(status, reason) ThreadUtils.runOnUiThread { - setViewStatus(status == 0x00) + setViewStatus(status == AdasConstants.IpcConnectionStatus.CONNECTED) } } - private fun setViewStatus(connectInfo:Boolean) { - if (connectInfo) { - viewCheckShutDown.requestFocus() + private fun setViewStatus(connectInfo: Boolean) { + connectStatus = connectInfo + //下发一键停服命令后又和域控重新连接 + if((powerOffStatus == 6 || powerOffStatus == 7) && connectStatus){ + CallerDevaToolsManager.setPowerOffStatus(0) + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down + ) + ) viewCheckShutDown.isClickable = true - viewCheckReboot.requestFocus() - viewCheckReboot.isClickable = true - } else { + } + } + + /** + * 一键停服调用SSM停服命令超时 + */ + override fun commandTimeout() { + //停止命令超时倒计时 + CallerDevaToolsManager.stopCommandWaitCountDown() + /** + * 如果点击一键停服按钮10秒后,是否正在执行命令的标签仍为true,代表域控未返回执行结果 + * 此时应该将按钮状态短暂置为失败,之后再置为常态,并将此标签置为false + */ + if (isExecutingPowerOff) { + //更改标签状态 + isExecutingPowerOff = false + CallerDevaToolsManager.setPowerOffStatus(4) + //将图标改为失败 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_fail + ) + ) + //执行1秒倒计时命令 + CallerDevaToolsManager.statusChangeCountDown(false) + } + } + + /** + * 一键停服车辆下电等待倒计时 + */ + override fun powerDownTick(second: Int) { + tvCountDown.text = second.toString() + CallerDevaToolsManager.setPowerOffStatus(5) + } + + /** + * 一键停服车辆下电等待倒计时结束 + */ + override fun powerDownFinish() { + CallerDevaToolsManager.setPowerOffStatus(6) + //停止一键停服进度属性动画 + progressAnimator?.cancel() + //隐藏一键停服进度视图 + viewProgressBackground.visibility = View.GONE + viewProgress.visibility = View.GONE + tvCountDown.visibility = View.GONE + tvCountDownUnit.visibility = View.GONE + //一键停服命令倒计时结束,变为成功状态,并且发送1s倒计时 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_success + ) + ) + isPowerOffCountDown = false + //执行1秒倒计时命令 + CallerDevaToolsManager.statusChangeCountDown(true) + } + + /** + * 一键停服状态按钮变更通知 + */ + override fun statusChange(isSuccess: Boolean) { + CallerDevaToolsManager.stopStatusCountDown() + if (isSuccess) { + //将倒计时内容隐藏 + viewProgressBackground.visibility = View.GONE + viewProgress.visibility = View.GONE + tvCountDown.visibility = View.GONE + tvCountDownUnit.visibility = View.GONE + //停服成功,将按钮置为不可点击状态 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_complete + ) + ) viewCheckShutDown.isClickable = false - viewCheckReboot.isClickable = false + CallerDevaToolsManager.setPowerOffStatus(7) + } else { + //停服命令下发失败,将按钮置为常态,可点击 + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down + ) + ) + viewCheckShutDown.isClickable = true + } + } + + /** + * 命令下发回执 + */ + override fun onReceiveReceivedAck(receivedAck: ReceivedAck) { + ThreadUtils.runOnUiThread { + if (receivedAck.messageType == MessageType.TYPE_SEND_SYSTEM_CMD_REQ && receivedAck.msgId == powerOffMsgId) { + isExecutingPowerOff = false + //停止命令超时倒计时 + CallerDevaToolsManager.stopCommandWaitCountDown() + if ( receivedAck.status == ReceivedAck.Status.NORMAL) { + //一键停服命令回执成功,则正常进入停服阶段中,1分钟倒计时,并且TTS和消息盒子提示 + CallerDevaToolsManager.setPowerOffStatus(2) + AIAssist.getInstance(context).speakTTSVoice("请等待1分钟再执行车辆下电") + saveMsgBox( + MsgBoxBean( + MsgBoxType.V2X, V2XMsg( + EventTypeEnumNew.TYPE_POWER_OFF_TIP.poiType, + EventTypeEnumNew.TYPE_POWER_OFF_TIP.content, + EventTypeEnumNew.TYPE_POWER_OFF_TIP.tts + ) + ) + ) + + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_background + ) + ) + viewProgressBackground.visibility = View.VISIBLE + viewProgress.visibility = View.VISIBLE + tvCountDown.visibility = View.VISIBLE + tvCountDownUnit.visibility = View.VISIBLE + //开始旋转动画 + if(progressAnimator == null){ + progressAnimator = ObjectAnimator.ofFloat(viewProgress,"rotation", 0f, 360f) + } + progressAnimator?.interpolator = LinearInterpolator() + progressAnimator?.repeatCount = ValueAnimator.INFINITE //无限循环 + progressAnimator?.duration = 10000 //设置持续时间 + progressAnimator?.startDelay = 0 + progressAnimator?.start() + //开始60S倒计时 + CallerDevaToolsManager.startPowerDownCountDown() + //一键停服倒计时中 + isPowerOffCountDown = true + } else { + //一键停服命令回执失败,则走失败流程 + CallerDevaToolsManager.setPowerOffStatus(3) + viewCheckShutDown.setImageDrawable( + ContextCompat.getDrawable( + context, + R.drawable.icon_shut_down_fail + ) + ) + //执行1秒倒计时命令 + CallerDevaToolsManager.statusChangeCountDown(false) + } + } + } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt index 9669bf760a..b03e6c6491 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ConnectStatusView.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils.OnNetworkStatusChangedListener import com.mogo.eagle.core.utilcode.util.SpanUtils +import com.zhjt.mogo.adas.data.AdasConstants import kotlinx.android.synthetic.main.view_connect_status.view.tvADASStatus import kotlinx.android.synthetic.main.view_connect_status.view.tvNetStatus @@ -105,11 +106,14 @@ class ConnectStatusView @JvmOverloads constructor( } } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged( + status: AdasConstants.IpcConnectionStatus, + reason: String? + ) { super.onAutopilotIpcConnectStatusChanged(status, reason) tvADASStatus.post { when (status) { - IPC_CONNECTION_STATUS.CONNECTED -> { + AdasConstants.IpcConnectionStatus.CONNECTED -> { // 统计代码 val properties: MutableMap = HashMap() properties["连接状态"] = "已连接" @@ -135,7 +139,15 @@ class ConnectStatusView @JvmOverloads constructor( MogoAnalyticUtils.track("IPC_CONNECTION_STATUS", properties) } - IPC_CONNECTION_STATUS.DISCONNECTED -> { + AdasConstants.IpcConnectionStatus.DISCONNECTED,//未连接或主动断开连接(不管是否配置重连都不进行重连) + AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION,//连接异常 + AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS,//非法地址不管是否配置重连都不进行重连) + AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS,//找不到可用地址 + AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED,//认证异常(不管是否配置重连都不进行重连) + AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT,//心跳超时 + AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH,//協議不匹配 + AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED,//服务端主动断开连接 + -> { disconnectADASCount++ disconnectADASTime = System.currentTimeMillis() val adasSpan = SpanUtils.with(tvADASStatus) @@ -173,33 +185,4 @@ class ConnectStatusView @JvmOverloads constructor( CallerAutoPilotStatusListenerManager.removeListener(TAG) } - interface IPC_CONNECTION_STATUS { - companion object { - /** - * 已连接 - */ - const val CONNECTED = 0x00 - - /** - * 未连接 - */ - const val DISCONNECTED = 0x01 - - /** - * 正在连接 - */ - const val CONNECTING = 0x02 - - /** - * 正在搜索IP - */ - const val SEARCH_ADDRESS = 0x03 - - /** - * 找不到可用IP 传入的IP不可用或固定IP列表中所有IP不可用 - */ - const val NOT_FOUND_ADDRESS = 0x04 - } - } - } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RainModeView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RainModeView.kt index 0b18a1c77a..141144dcab 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RainModeView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/RainModeView.kt @@ -11,6 +11,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog +import com.mogo.eagle.core.utilcode.util.ThreadUtils /** * 雨天模式控件 @@ -45,10 +46,12 @@ class RainModeView @JvmOverloads constructor( override fun updateFuncMode(tag: String, boolean: Boolean) { if(tag == FUNC_MODE_RAIN){ - background = if(FunctionBuildConfig.isRainMode){ - this.context.getDrawable(R.drawable.rain_mode_open) - }else{ - this.context.getDrawable(R.drawable.rain_mode) + ThreadUtils.runOnUiThread { + background = if(FunctionBuildConfig.isRainMode){ + this.context.getDrawable(R.drawable.rain_mode_open) + }else{ + this.context.getDrawable(R.drawable.rain_mode) + } } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt index 69a48cf285..5552719668 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt @@ -51,6 +51,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.listener.IMogoMapListener import com.mogo.map.listener.MogoMapListenerHandler.Companion.mogoMapListenerHandler import com.mogo.map.uicontroller.EnumMapUI +import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.service.chain.ChainLog import kotlinx.android.synthetic.main.module_main_activity_main.module_main_id_cover_up import kotlinx.android.synthetic.main.module_main_activity_main.rvConnectInfo @@ -71,8 +72,8 @@ open class MainActivity : MvpActivity(), MainView, private var isFirst = false private var mConnAdapter: ConnInfoAdapter? = null private val dataList: List = ArrayList() -// private var mLastStatus = 0x00 - private var mLastStatus = 0x01 +// private var mLastStatus = AdasConstants.IpcConnectionStatus.CONNECTED + private var mLastStatus = AdasConstants.IpcConnectionStatus.DISCONNECTED private var isFloatingLayerHidden = false override fun getLayoutId(): Int { @@ -261,7 +262,7 @@ open class MainActivity : MvpActivity(), MainView, .setSelectedSoList( arrayOf( "libhdmap", "libmap", - "libAMapSDK_NAVI_v8_0_1", "libZegoExpressEngine", + "libAMapSDK_NAVI_v9_8_3", "libZegoExpressEngine", "libcntts" ) ) @@ -323,7 +324,7 @@ open class MainActivity : MvpActivity(), MainView, MogoStatusManager.getInstance().setMainPageIsBackgroundStatus(TAG, true) } - override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { + override fun onAutopilotIpcConnectStatusChanged(status: AdasConstants.IpcConnectionStatus, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) UiThreadHandler.post { if(mLastStatus != status){ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/check_shut_down.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/check_shut_down.png deleted file mode 100644 index 2e2017cb27..0000000000 Binary files a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/check_shut_down.png and /dev/null differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/controller.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/controller.png new file mode 100644 index 0000000000..b65015decd Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/controller.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_report_info_normal.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_report_info_normal.png new file mode 100644 index 0000000000..ac41b57382 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_report_info_normal.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_report_info_open.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_report_info_open.png new file mode 100644 index 0000000000..1f0709b2b2 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_report_info_open.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down.png new file mode 100644 index 0000000000..ffea12238b Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_background.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_background.png new file mode 100644 index 0000000000..b813f39700 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_background.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_complete.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_complete.png new file mode 100644 index 0000000000..20ae14d398 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_complete.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_fail.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_fail.png new file mode 100644 index 0000000000..6b778922cc Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_fail.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_progress.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_progress.png new file mode 100644 index 0000000000..fa9ca7fbcb Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_progress.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_progress_background.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_progress_background.png new file mode 100644 index 0000000000..b2d8f0af9b Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_progress_background.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_success.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_success.png new file mode 100644 index 0000000000..3389605387 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_shut_down_success.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_docker_reboot.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_docker_reboot.xml index b75cee777e..83a031c665 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_docker_reboot.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_docker_reboot.xml @@ -2,10 +2,10 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ssm.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ssm.xml new file mode 100644 index 0000000000..fb4d2d14fc --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_ssm.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_autopilot.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_autopilot.xml new file mode 100644 index 0000000000..9f0199eb80 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_autopilot.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_ssm.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_ssm.xml new file mode 100644 index 0000000000..5aa40ef9ba --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_ssm.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml index be936c2d1c..f128be2927 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml @@ -4,7 +4,7 @@ android:layout_width="@dimen/dp_600" android:layout_height="@dimen/dp_138" xmlns:app="http://schemas.android.com/apk/res-auto" - android:background="#8CF5FAFF" + android:background="#BFF5FAFF" app:roundLayoutRadius="24dp" android:layout_marginTop="16dp" android:layout_marginBottom="16dp" @@ -47,6 +47,7 @@ android:textColor="#FF243959" android:textSize="@dimen/dp_34" android:layout_marginStart="@dimen/dp_20" + app:layout_goneMarginStart="0dp" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintHorizontal_bias="0" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml index 3995b40c50..dce7960ed1 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml @@ -72,28 +72,26 @@ + android:background="@drawable/debug_icon_bad_case" /> + - + app:layout_constraintTop_toTopOf="@id/sopLayout" /> - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/clSpeedSet" /> + android:contentDescription="@string/check_system_shut_down" /> + + + + + + + + + app:layout_constraintLeft_toLeftOf="@id/viewCheckShutDown" + app:layout_constraintRight_toRightOf="@id/viewCheckShutDown" + /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintLeft_toRightOf="@id/viewCheckShutDown" + android:contentDescription="@string/check_system_reboot" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index 5c813a0e19..80e571cc34 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -662,6 +662,13 @@ android:layout_height="1dp" android:background="#F0F0F0" /> + + + + + + + + + +