diff --git a/OCH/mogo-och-bus/src/jinlvvan/java/com/mogo/och/bus/model/OrderModel.java b/OCH/mogo-och-bus/src/jinlvvan/java/com/mogo/och/bus/model/OrderModel.java index 5153efce75..bb99b9c96c 100644 --- a/OCH/mogo-och-bus/src/jinlvvan/java/com/mogo/och/bus/model/OrderModel.java +++ b/OCH/mogo-och-bus/src/jinlvvan/java/com/mogo/och/bus/model/OrderModel.java @@ -380,7 +380,7 @@ public class OrderModel { private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() { @Override public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) { - BusAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage); + BusAnalyticsManager.INSTANCE.triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage); if (mADASStatusCallback != null && !FunctionBuildConfig.isDemoMode){ CallerLogger.INSTANCE.e( M_BUS + TAG, "mAdasStartFailureListener = "+startFailedMessage ); mADASStatusCallback.onStartAdasFailure(); @@ -661,6 +661,13 @@ public class OrderModel { CallerLogger.INSTANCE.e(M_BUS + TAG, "isPassStartAutopilotCommand = " + FunctionBuildConfig.isPassStartAutopilotCommand); + if(CallerAutoPilotStatusListenerManager.INSTANCE.getState() + == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ + ToastUtils.showShort("自驾中、请勿重复启动"); + return; + } + + if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().getAutopilotAbilityStatus()) { ToastUtils.showLong(OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason() + ", 请稍候重试"); @@ -1190,7 +1197,7 @@ public class OrderModel { } BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get(backgroundCurrentStationIndex + 1); - BusAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, send, + BusAnalyticsManager.INSTANCE.triggerStartAutopilotEvent(isRestart, send, currentStation.getName(), nextStation.getName(), currentLineId); } @@ -1200,7 +1207,7 @@ public class OrderModel { } BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get(backgroundCurrentStationIndex + 1); - BusAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( + BusAnalyticsManager.INSTANCE.triggerUnableStartAPReasonEvent( currentStation.getName(), nextStation.getName(), currentLineId, OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason()); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java deleted file mode 100644 index 947adbfc0c..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.mogo.och.bus.util; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; - -import android.text.TextUtils; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.data.app.AppConfigInfo; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.commons.utils.MogoAnalyticUtils; -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.DateTimeUtils; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.bus.constant.BusConst; - -import java.util.HashMap; - -/** - * OCH Bus埋点工具 - * - * Created on 2022/3/24 - */ -public class BusAnalyticsManager { - - private static final class SingletonHolder { - private static final BusAnalyticsManager INSTANCE = new BusAnalyticsManager(); - } - - public static BusAnalyticsManager getInstance() { - return BusAnalyticsManager.SingletonHolder.INSTANCE; - } - - private String mStartAutopilotKey; - private HashMap mStartAutopilotParams = new HashMap<>(); - - private Runnable startAutopilotRunnable = () -> { - // 15s内未开启,上报失败埋点 - triggerStartAutopilotFailureEvent("", "15s后app等待超时"); - }; - - public void triggerStartAutopilotFailureEventByAdas(String failCode, String failMsg){ - removeWaitingCallback(); - triggerStartAutopilotFailureEvent(failCode, failMsg); - } - - private void triggerStartAutopilotFailureEvent(String failCode, String failMsg){ - if (mStartAutopilotParams.isEmpty()) return; - - CallerLogger.INSTANCE.e( M_BUS + "triggerStartAutopilotFailureEvent", failMsg ); - - if (CallerAutoPilotStatusListenerManager.INSTANCE.getState() != - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_FAILURE_CODE, failCode); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_FAILURE_MSG, failMsg); - } - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_RESULT - , CallerAutoPilotStatusListenerManager.INSTANCE.getState() == - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); - - MogoAnalyticUtils.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); - - clearStartAutopilotParams();//清空参数数据,防止误传 - } - - private void removeWaitingCallback() { - if (startAutopilotRunnable != null) { - UiThreadHandler.removeCallbacks(startAutopilotRunnable); - } - } - - public void clearStartAutopilotFailureMSG(){ - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_FAILURE_CODE, ""); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_FAILURE_MSG, ""); - } - - private void clearStartAutopilotParams(){ - mStartAutopilotParams.clear(); - } - - /** - * 触发'开启自动驾驶'埋点流程 - * 开启自动驾驶,15s内成功则发送成功埋点,否则发送失败埋点 - * @param restart false(点击'滑动出发'启动)/true(接管后点击'自动驾驶'按钮启动) - * @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点) - */ - public void triggerStartAutopilotEvent( - boolean restart, boolean send, String startName, String endName, int lineId) { - mStartAutopilotKey = restart ? - BusConst.EVENT_KEY_RESTART_AUTOPILOT : BusConst.EVENT_KEY_START_SERVICE; - String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - String plateNum = AppConfigInfo.INSTANCE.getPlateNumber(); - String dateTime = DateTimeUtils.getTimeText( - System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); - - mStartAutopilotParams.put(BusConst.EVENT_PARAM_SN, sn); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_ENV_ONLINE, - DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_TIME, dateTime); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_NAME, startName); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_END_NAME, endName); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_LINE_ID, lineId); - - if (send) { - if (mStartAutopilotParams.isEmpty()) return; - // 开启成功,上报埋点 - clearStartAutopilotFailureMSG(); - removeWaitingCallback(); - mStartAutopilotParams.put(BusConst.EVENT_PARAM_START_RESULT, true); - MogoAnalyticUtils.INSTANCE.track(mStartAutopilotKey, mStartAutopilotParams); - - clearStartAutopilotParams();//清空参数数据,防止误传 - } else { - UiThreadHandler.postDelayed(startAutopilotRunnable, BusConst.LOOP_PERIOD_15S); - } - } - - /** - * 触发"无法开启自驾已知异常"埋点 - * @param startName - * @param endName - * @param lineId - */ - public void triggerUnableStartAPReasonEvent(String startName, String endName, int lineId, - String reason) { - String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - String plateNum = AppConfigInfo.INSTANCE.getPlateNumber(); - String dateTime = DateTimeUtils.getTimeText( - System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); - - HashMap params = new HashMap<>(); - - params.put(BusConst.EVENT_PARAM_SN, sn); - params.put(BusConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum); - params.put(BusConst.EVENT_PARAM_ENV_ONLINE, - DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false); - params.put(BusConst.EVENT_PARAM_TIME, dateTime); - params.put(BusConst.EVENT_PARAM_START_NAME, startName); - params.put(BusConst.EVENT_PARAM_END_NAME, endName); - params.put(BusConst.EVENT_PARAM_LINE_ID, lineId); - params.put(BusConst.EVENT_PARAM_UNABLE_START_REASON, reason); - MogoAnalyticUtils.INSTANCE.track(BusConst.EVENT_KEY_AP_UNABLE_START_REASON, params); - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.kt new file mode 100644 index 0000000000..d43c83be61 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.kt @@ -0,0 +1,108 @@ +package com.mogo.och.bus.util + +import android.text.TextUtils +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.commons.debug.DebugConfig +import com.mogo.commons.utils.MogoAnalyticUtils +import com.mogo.eagle.core.data.app.AppConfigInfo +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.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.DateTimeUtils +import com.mogo.och.bus.constant.BusConst +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable + +/** + * OCH Bus埋点工具 + * + * Created on 2022/3/24 + */ +object BusAnalyticsManager { + + private var mStartAutopilotKey: String? = null + private val mStartAutopilotParams = HashMap() + + var startAutopiloTimeOut: Disposable? = null + + fun triggerStartAutopilotFailureEventByAdas(failCode: String, failMsg: String) { + RxUtils.disposeSubscribe(startAutopiloTimeOut) + triggerStartAutopilotFailureEvent(failCode, failMsg) + } + + private fun clearStartAutopilotParams() { + mStartAutopilotParams.clear() + } + + private fun triggerStartAutopilotFailureEvent(failCode: String, failMsg: String) { + if (mStartAutopilotParams.isEmpty()) return + CallerLogger.e(SceneConstant.M_BUS + "triggerStartAutopilotFailureEvent", failMsg) + if (CallerAutoPilotStatusListenerManager.getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + mStartAutopilotParams[BusConst.EVENT_PARAM_START_FAILURE_CODE] = failCode + mStartAutopilotParams[BusConst.EVENT_PARAM_START_FAILURE_MSG] = failMsg + } + mStartAutopilotParams[BusConst.EVENT_PARAM_START_RESULT] = + CallerAutoPilotStatusListenerManager.getState() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING + MogoAnalyticUtils.track(mStartAutopilotKey, mStartAutopilotParams) + clearStartAutopilotParams() //清空参数数据,防止误传 + } + + /** + * 触发'开启自动驾驶'埋点流程 + * 开启自动驾驶,15s内成功则发送成功埋点,否则发送失败埋点 + * @param restart false(点击'滑动出发'启动)/true(接管后点击'自动驾驶'按钮启动) + * @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点) + */ + fun triggerStartAutopilotEvent( + restart: Boolean, send: Boolean, startName: String, endName: String, lineId: Int + ) { + mStartAutopilotKey = if (restart) BusConst.EVENT_KEY_RESTART_AUTOPILOT else BusConst.EVENT_KEY_START_SERVICE + if (send) { + if (mStartAutopilotParams.isEmpty()) return + // 开启成功,上报埋点 + mStartAutopilotParams[BusConst.EVENT_PARAM_START_FAILURE_CODE] = "" + mStartAutopilotParams[BusConst.EVENT_PARAM_START_FAILURE_MSG] = "" + RxUtils.disposeSubscribe(startAutopiloTimeOut) + mStartAutopilotParams[BusConst.EVENT_PARAM_START_RESULT] = true + MogoAnalyticUtils.track(mStartAutopilotKey, mStartAutopilotParams) + clearStartAutopilotParams() //清空参数数据,防止误传 + } else { + val plateNum = AppConfigInfo.plateNumber + mStartAutopilotParams[BusConst.EVENT_PARAM_SN] = MoGoAiCloudClientConfig.getInstance().sn + mStartAutopilotParams[BusConst.EVENT_PARAM_PLATE_NUM] = if (TextUtils.isEmpty(plateNum)) "" else plateNum + mStartAutopilotParams[BusConst.EVENT_PARAM_ENV_ONLINE] = DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE + mStartAutopilotParams[BusConst.EVENT_PARAM_TIME] = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd_HH_mm_ss) + mStartAutopilotParams[BusConst.EVENT_PARAM_START_NAME] = startName + mStartAutopilotParams[BusConst.EVENT_PARAM_END_NAME] = endName + mStartAutopilotParams[BusConst.EVENT_PARAM_LINE_ID] = lineId + startAutopiloTimeOut = RxUtils.createSubscribeOnOwnThread(BusConst.LOOP_PERIOD_15S) { + // 15s内未开启,上报失败埋点 + triggerStartAutopilotFailureEvent("", "15s后app等待超时") + } + } + } + + /** + * 触发"无法开启自驾已知异常"埋点 + * @param startName + * @param endName + * @param lineId + */ + fun triggerUnableStartAPReasonEvent( + startName: String, endName: String, lineId: Int, + reason: String + ) { + val plateNum = AppConfigInfo.plateNumber + val params = HashMap() + params[BusConst.EVENT_PARAM_SN] = MoGoAiCloudClientConfig.getInstance().sn + params[BusConst.EVENT_PARAM_PLATE_NUM] = if (TextUtils.isEmpty(plateNum)) "" else plateNum + params[BusConst.EVENT_PARAM_ENV_ONLINE] = DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE + params[BusConst.EVENT_PARAM_TIME] = DateTimeUtils.getTimeText(DateTimeUtils.yyyy_MM_dd_HH_mm_ss) + params[BusConst.EVENT_PARAM_START_NAME] = startName + params[BusConst.EVENT_PARAM_END_NAME] = endName + params[BusConst.EVENT_PARAM_LINE_ID] = lineId + params[BusConst.EVENT_PARAM_UNABLE_START_REASON] = reason + MogoAnalyticUtils.track(BusConst.EVENT_KEY_AP_UNABLE_START_REASON, params) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java index 6cf6eb90c4..930045f7bd 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java @@ -93,6 +93,10 @@ public class BusTrajectoryManager { // 5. 轨迹管理_轨迹下载超时 CallerLogger.INSTANCE.d(M_BUS + TAG, "onAutopilotGuardian() 轨迹下载超时"); // ToastUtils.showShort("轨迹下载超时"); + } else if ("ISSM_FUNC_AUTO_PILOT_READY".equals(guardianInfo.getCode())) { + // 收到ssm的自动驾驶变为ready,再次下发轨迹下载.解决:域控重启,或者102域控启动太早,107节点初始化未完成导致的轨迹未进行下载。 + CallerLogger.INSTANCE.d(M_BUS + TAG, "onAutopilotGuardian() ssm ready,再次发起下载"); + syncTrajectoryInfo(); } } diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt index dd5ffce344..91c1194884 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt @@ -30,7 +30,7 @@ import com.mogo.och.common.module.manager.loopmanager.LoopInfo import com.mogo.och.bus.passenger.bean.response.* import com.mogo.och.bus.passenger.callback.* import com.mogo.och.bus.passenger.constant.CharterPassengerConst -import com.mogo.och.common.module.manager.loopmanager.BusPassengerModelLoopManager +import com.mogo.och.common.module.manager.loopmanager.BizLoopManager import com.mogo.och.bus.passenger.net.BusPassengerServiceManager import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.bus.passenger.utils.VoiceFocusManager @@ -186,12 +186,12 @@ object CharterPassengerModel { // 2 、打开空调暖风机灯设置页面 // 3、车控页面、 // 4、打开选择线路页面 - BusPassengerModelLoopManager.removeLoopFunction(TAGLOGIN) + BizLoopManager.removeLoopFunction(TAGLOGIN) CallerLogger.d(M_BUS_P + TAG, "结束登录状态轮询") // 启动订单轮 startOrderLoop() } else { - BusPassengerModelLoopManager.setLoopFunction( + BizLoopManager.setLoopFunction( TAGLOGIN, LoopInfo(3, ::queryLoginStatus) ) @@ -337,7 +337,7 @@ object CharterPassengerModel { * 启动订单轮训 */ private fun startOrderLoop() { - BusPassengerModelLoopManager.setLoopFunction( + BizLoopManager.setLoopFunction( TAGORDER, LoopInfo(3, ::queryOrder) ) @@ -348,7 +348,7 @@ object CharterPassengerModel { * 启动订单轮训 */ private fun endOrderLoop() { - BusPassengerModelLoopManager.removeLoopFunction(TAGORDER) + BizLoopManager.removeLoopFunction(TAGORDER) CallerLogger.d(M_BUS_P + TAG, "结束订单轮询") } @@ -489,7 +489,7 @@ object CharterPassengerModel { * 启动订单轮训 */ private fun startCarStatusLoop() { - BusPassengerModelLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus)) + BizLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus)) CallerLogger.d(M_BUS_P + TAG, "启动车态轮询") } @@ -497,7 +497,7 @@ object CharterPassengerModel { * 启动订单轮训 */ private fun endCarStatusLoop() { - BusPassengerModelLoopManager.removeLoopFunction(TAGCARSTATUS) + BizLoopManager.removeLoopFunction(TAGCARSTATUS) CallerLogger.d(M_BUS_P + TAG, "结束车态轮询") } @@ -548,7 +548,7 @@ object CharterPassengerModel { * 启动时间校准轮训 */ private fun startCalibrationLoop() { - BusPassengerModelLoopManager.setLoopFunction( + BizLoopManager.setLoopFunction( TAGCALIBRATION, LoopInfo(120, ::queryBusinessTime, immediately = true) ) @@ -559,7 +559,7 @@ object CharterPassengerModel { * 停止时间校准轮训 */ private fun endCalibrationLoop() { - BusPassengerModelLoopManager.removeLoopFunction(TAGCALIBRATION) + BizLoopManager.removeLoopFunction(TAGCALIBRATION) CallerLogger.d(M_BUS_P + TAG, "结束时间校准轮询") } @@ -656,7 +656,7 @@ object CharterPassengerModel { * 启动路距计算 */ private fun startCalculateDistanceLoop() { - BusPassengerModelLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance)) + BizLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance)) CallerLogger.d(M_BUS_P + TAG, "开始路距计算") } @@ -667,7 +667,7 @@ object CharterPassengerModel { * ③ 到站成功后 */ private fun endCalculateDistanceLoop() { - BusPassengerModelLoopManager.removeLoopFunction(TAGDISTANCE) + BizLoopManager.removeLoopFunction(TAGDISTANCE) CallerLogger.d(M_BUS_P + TAG, "结束路距计算") } diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt index d7bd2cb1ac..6c6f786838 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt @@ -20,7 +20,7 @@ import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse import com.mogo.och.bus.passenger.model.CharterPassengerModel import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener import com.mogo.och.bus.passenger.model.OrderStatusEnum -import com.mogo.och.common.module.manager.loopmanager.BusPassengerModelLoopManager +import com.mogo.och.common.module.manager.loopmanager.BizLoopManager import com.mogo.och.bus.passenger.net.BusPassengerServiceManager import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1OrderLineFragment import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg @@ -102,80 +102,84 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) : } private fun querySitesByLineId(checkLine: LineInfoResponse.LineInfo) { - BusPassengerServiceManager.queryLineSiteList( - context, - checkLine.lineId.toString(), - object : OchCommonServiceCallback { - override fun onSuccess(data: SiteInfoResponse?) { - if (data?.data == null) return - val siteInfos = data.data - EventBus.getDefault().post(EventLineSites(checkLine,siteInfos,false)) - if (siteInfos.isNotEmpty()) { - // 计算当前站点是那个 - val calculateCurrentSite = - CharterPassengerModel.calculateCurrentSite(siteInfos) - val first = calculateCurrentSite.first// 可用站点 - if(first<0){ - // 所有站点不可用 - currentSite = siteInfos[siteInfos.size-1] - currentSite!!.isNear = calculateCurrentSite.second - mView?.siteAdapterEnableIndex(siteInfos.size-1) - }else{ - // - val index = if(first==0) { - 0 - }else if (first <= siteInfos.size-1) { - first-1 - } else { - siteInfos.size - 1 + context?.let { + BusPassengerServiceManager.queryLineSiteList( + context, + checkLine.lineId.toString(), + object : OchCommonServiceCallback { + override fun onSuccess(data: SiteInfoResponse?) { + if (data?.data == null) return + val siteInfos = data.data + EventBus.getDefault().post(EventLineSites(checkLine,siteInfos,false)) + if (siteInfos.isNotEmpty()) { + // 计算当前站点是那个 + val calculateCurrentSite = + CharterPassengerModel.calculateCurrentSite(siteInfos) + val first = calculateCurrentSite.first// 可用站点 + if(first<0){ + // 所有站点不可用 + currentSite = siteInfos[siteInfos.size-1] + currentSite!!.isNear = calculateCurrentSite.second + mView?.siteAdapterEnableIndex(siteInfos.size-1) + }else{ + // + val index = if(first==0) { + 0 + }else if (first <= siteInfos.size-1) { + first-1 + } else { + siteInfos.size - 1 + } + currentSite = siteInfos[index] + currentSite!!.isNear = calculateCurrentSite.second + mView?.siteAdapterEnableIndex(index) } - currentSite = siteInfos[index] - currentSite!!.isNear = calculateCurrentSite.second - mView?.siteAdapterEnableIndex(index) - } - siteInfos.forEach { - if (it.siteId == checkSite?.siteId) { - it.isCheck = true - return@forEach + siteInfos.forEach { + if (it.siteId == checkSite?.siteId) { + it.isCheck = true + return@forEach + } } } + mView?.siteAdapterSetData(siteInfos) } - mView?.siteAdapterSetData(siteInfos) + + override fun onFail(code: Int, msg: String?) { + ToastCharterUtils.showShort("查询站点失败") + mView?.setVisableByTrun(showNetError = true) + } + + override fun onError() { + super.onError() + ToastCharterUtils.showShort("查询站点失败") + mView?.setVisableByTrun(showNetError = true) + } + }) + } + } + + private fun queryLineList() { + mView?.setVisableByTrun(showLoading = true) + context?.let { + BusPassengerServiceManager.queryLineList(it, object : + OchCommonServiceCallback { + override fun onSuccess(data: LineInfoListResponse?) { + if (data?.data == null) return + mView?.setVisableByTrun(showBiz = true) + mView?.lineAdapterSetData(data.data,checkLine) } - override fun onFail(code: Int, msg: String?) { - ToastCharterUtils.showShort("查询站点失败") + override fun onFail(code: Int, msg: String) { + ToastCharterUtils.showShort("查询线路失败") mView?.setVisableByTrun(showNetError = true) } override fun onError() { super.onError() - ToastCharterUtils.showShort("查询站点失败") mView?.setVisableByTrun(showNetError = true) } }) - } - - private fun queryLineList() { - mView?.setVisableByTrun(showLoading = true) - BusPassengerServiceManager.queryLineList(context, object : - OchCommonServiceCallback { - override fun onSuccess(data: LineInfoListResponse?) { - if (data?.data == null) return - mView?.setVisableByTrun(showBiz = true) - mView?.lineAdapterSetData(data.data,checkLine) - } - - override fun onFail(code: Int, msg: String) { - ToastCharterUtils.showShort("查询线路失败") - mView?.setVisableByTrun(showNetError = true) - } - - override fun onError() { - super.onError() - mView?.setVisableByTrun(showNetError = true) - } - }) + } } override fun onResume(owner: LifecycleOwner) { @@ -187,7 +191,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) : CallerLogger.d(M_BUS_P + TAG, "onDestroy") RxUtils.disposeSubscribe(subscribeSelectLine) RxUtils.disposeSubscribe(subscribeSelectSite) - BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + BizLoopManager.removeLoopFunction(TAGLINELOOP) CharterPassengerModel.setStatusChangeListener(TAG,null) CallerTelematicListenerManager.removeListener(TAG) } @@ -230,7 +234,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) : mView?.hideDataDriverRefuse() } RxUtils.disposeSubscribe(subscribeSelectSite) - BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + BizLoopManager.removeLoopFunction(TAGLINELOOP) } } } @@ -270,7 +274,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) : } mView?.hideDataWaitDriverMsg() // 启动查看和司机端链接 - BusPassengerModelLoopManager.setLoopFunction( + BizLoopManager.setLoopFunction( TAGLINELOOP, LoopInfo(3, ::checkServerStatus) ) @@ -284,7 +288,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderLineFragment?) : private fun checkServerStatus() { if (!CallerTelematicManager.getClientConnStatus()) { ToastCharterUtils.showShort("断开和司机端连接、请联系安全员") - BusPassengerModelLoopManager.removeLoopFunction(TAGLINELOOP) + BizLoopManager.removeLoopFunction(TAGLINELOOP) mView?.hideDataDriverRefuse() CallerLogger.d(M_BUS_P + TAG, "endAni666") } diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/DebugWatchDogPresenter.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/DebugWatchDogPresenter.kt deleted file mode 100644 index f451a04c96..0000000000 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/DebugWatchDogPresenter.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.bus.passenger.presenter - -import com.mogo.och.bus.passenger.ui.dialogfragment.DebugViewWatchDogFragment -import com.mogo.och.bus.passenger.ui.dialogfragment.M1CarUserNoOrderFragment - -class DebugWatchDogPresenter(view: DebugViewWatchDogFragment?) : - BusBasePassengerFunctionDevicePresenter(view){ - companion object { - private const val TAG = "BusPassengerFunctionPresenter" - } - - -} \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt index ae0b1ccadc..b4f975f9f9 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt @@ -9,7 +9,6 @@ import com.amap.api.maps.model.LatLng import com.mogo.commons.AbsMogoApplication import com.mogo.commons.mvp.MvpFragment import com.mogo.eagle.core.data.config.HdMapBuildConfig -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController import com.mogo.eagle.core.function.hmi.ui.msgbox.MMsgBoxButtonView import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView @@ -25,7 +24,7 @@ import com.mogo.och.bus.passenger.bean.event.EventLineSites import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse import com.mogo.och.bus.passenger.model.CharterPassengerModel import com.mogo.och.bus.passenger.presenter.BusPassengerPresenter -import com.mogo.och.bus.passenger.ui.dialogfragment.DebugViewWatchDogFragment +import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment import com.mogo.och.bus.passenger.ui.dialogfragment.M1CarUserNoOrderFragment import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment import com.mogo.och.bus.passenger.ui.dialogfragment.NoviceGuidanceFragment diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt index a3d1cde613..3d27d3906b 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt @@ -25,6 +25,7 @@ import com.mogo.och.bus.passenger.ui.view.bottom.BottomBar import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.common.module.biz.constant.LoginStatusManager +import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment import kotlinx.android.synthetic.main.m1_contain_fragment.* import org.greenrobot.eventbus.EventBus diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt index c6477b0ee9..47fbeac622 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt @@ -2,6 +2,7 @@ package com.mogo.och.bus.passenger.ui.dialogfragment.fragment import android.animation.ObjectAnimator import android.animation.ValueAnimator +import android.annotation.SuppressLint import android.content.Context import android.graphics.BitmapFactory import android.graphics.drawable.ClipDrawable @@ -31,7 +32,7 @@ import com.mogo.och.bus.passenger.ui.layoutmanage.PagerCenterSnapHelper import com.mogo.och.bus.passenger.view.HorizontalDecoration import com.mogo.och.bus.passenger.view.PickerLayoutManager import com.mogo.och.common.module.utils.SoundPoolHelper -import com.yangyakun.main.ui.loading.drawable.MineGradientDrawable +import com.mogo.och.common.module.wigets.MineGradientDrawable import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -476,7 +477,7 @@ class M1SoftFragment : CallerLogger.d(SceneConstant.M_BUS_P + TAG, "打开暖风") heaterAirEnable(false) closeAircondition()//关闭空调 - var switch = 1; + val switch: Int when (rg_setting_windspeed.checkedRadioButtonId) { R.id.rb_wind_speed_low -> { rb_wind_speed_middle.tag = touchTag @@ -615,12 +616,12 @@ class M1SoftFragment : // region 声音 private var mAudioManager: AudioManager? = null - private var mMaxVolume: Int? = 100; + private var mMaxVolume: Int? = 100 + @SuppressLint("NewApi") private fun setVoiceInfo() { val dp2px = AutoSizeUtils.dp2px(context, 26f)//进度条高度 - R.color.bus_p_m1_47576e val color2CBFFC = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_2cbffc) val color1060FF = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_1060ff) val color96A5C2 = ContextCompat.getColor(requireContext(), R.color.bus_p_m1_96a5c2) @@ -641,7 +642,7 @@ class M1SoftFragment : mMaxVolume?.let { var currnetValue = ((progress.toFloat() / 100) * it).toInt() if (currnetValue <= 0) { - currnetValue = 1; + currnetValue = 1 } mAudioManager?.setStreamVolume( AudioManager.STREAM_MUSIC, diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt index 73c5ba7cb7..02b27b0bca 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt @@ -93,8 +93,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { // layoutParams.height = 320 // mTopContainer.layoutParams = layoutParams val background = layoutBottom.background as GradientDrawable - val x = arrayOf(12f, 12f,12f, 12f,12f, 12f,12f, 12f) - background.cornerRadii = x.toFloatArray() + val x = floatArrayOf(12f, 12f,12f, 12f,12f, 12f,12f, 12f) + background.cornerRadii = x layoutBottom.background = background //fullscreenButton.setPadding(0,0,0,0) diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt index df96f0bc00..39498449c5 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/manager/CharterTrajectoryManager.kt @@ -78,6 +78,10 @@ object CharterTrajectoryManager { // 5. 轨迹管理_轨迹下载超时 d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() 轨迹下载超时") // ToastUtils.showShort("轨迹下载超时"); + } else if ("ISSM_FUNC_AUTO_PILOT_READY" == guardianInfo.getCode()) { + // 收到ssm的自动驾驶变为ready,再次下发轨迹下载.解决:域控重启,或者102域控启动太早,107节点初始化未完成导致的轨迹未进行下载。 + d(SceneConstant.M_CHARTER_D + TAG, "onAutopilotGuardian() ssm ready,再次发起下载") + syncTrajectoryInfo(get().getBusOrderResult()?.lineId!!) } } diff --git a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt index e77143325d..d03324e646 100644 --- a/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt +++ b/OCH/mogo-och-charter/src/driverm1/java/com/magic/mogo/och/charter/model/DriverM1Model.kt @@ -860,4 +860,8 @@ class DriverM1Model { return mCurrentRoute } + + fun getBusOrderResult(): QueryCurrentOrderResponse.Result?{ + return mCurrentOrder + } } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java index e97c0b6b34..a82b3b7b70 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/OCHAdasAbilityManager.java @@ -2,27 +2,36 @@ package com.mogo.och.common.module.manager; import android.content.Context; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotActionsListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatisticsListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +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.CallerAutopilotActionsListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; +import system_master.SystemStatusInfo; + /** * Created on 2022/10/9 * 工控机状态信息回调(判断是否能否启动自动驾驶的回调) * 目前定的是3秒回调一次 */ -public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMoGoAutopilotStatisticsListener { +public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMoGoAutopilotStatisticsListener, IMoGoAutopilotStatusListener { private static final String TAG = OCHAdasAbilityManager.class.getSimpleName(); - private boolean isAutopilotAbility = true; - private String autopilotAbilityReason = ""; + private boolean isAutopilotAbility; + private String autopilotAbilityReason; private String startFailedCode = ""; private String startFailedMessage = ""; @@ -37,6 +46,7 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo } public void init(Context context) { + ipcConnectStatusChanged(); initListeners(); } @@ -64,11 +74,18 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo //2022.10.9 工控机状态信息回调(判断是否能否启动自动驾驶的回调), 目前定的是3秒回调一次 CallerAutopilotActionsListenerManager.INSTANCE.addListener(TAG, this); CallerAutopilotStatisticsListenerManager.INSTANCE.addListener(TAG,this); + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); } private void releaseListeners() { CallerAutopilotActionsListenerManager.INSTANCE.removeListener(this); CallerAutopilotStatisticsListenerManager.INSTANCE.removeListener(this); + CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(this); + } + + private void ipcConnectStatusChanged() { + this.isAutopilotAbility = CallerAutoPilotControlManager.INSTANCE.isConnected(); + this.autopilotAbilityReason = isAutopilotAbility ? "" : "未连接自动驾驶系统"; } @Override @@ -95,4 +112,41 @@ public class OCHAdasAbilityManager implements IMoGoAutopilotActionsListener, IMo public void release() { releaseListeners(); } + + @Override + public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + ipcConnectStatusChanged(); + } + + @Override + public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) { + } + + @Override + public void onAutopilotStatusResponse(int state) { + } + + @Override + public void onAutopilotDockerInfo(@NonNull String dockerVersion) { + } + + @Override + public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) { + } + + @Override + public void onAutopilotSNRequest() { + } + + @Override + public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { + } + + @Override + public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + } + + @Override + public void onAutopilotRouteLineId(long lineId) { + } } diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/DebugViewWatchDogFragment.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/debug/DebugViewWatchDogFragment.kt similarity index 94% rename from OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/DebugViewWatchDogFragment.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/debug/DebugViewWatchDogFragment.kt index 8f8026b9f3..51ddc897f0 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/DebugViewWatchDogFragment.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/debug/DebugViewWatchDogFragment.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.dialogfragment +package com.mogo.och.common.module.manager.debug import android.content.DialogInterface import android.os.Bundle @@ -17,10 +17,8 @@ import com.mogo.eagle.core.utilcode.util.AppStateManager import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.ClickUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils -import com.mogo.och.bus.passenger.utils.ToastCharterUtils -import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.presenter.DebugWatchDogPresenter -import com.mogo.och.bus.passenger.ui.MainFragment +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.R import kotlinx.android.synthetic.main.m1_debugview_pass.* /** @@ -45,7 +43,7 @@ class DebugViewWatchDogFragment : actv_password_submit.setOnClickListener { val text = acet_close.text if(text==null||text.isEmpty()){ - ToastCharterUtils.showShort("请输入密码") + ToastUtils.showShort("请输入密码") }else{ if(text.toString() == "123987"){ dismissAllowingStateLoss() @@ -54,7 +52,7 @@ class DebugViewWatchDogFragment : } ToggleDebugView.toggleDebugView.toggle(requireContext()) }else{ - ToastCharterUtils.showShort("请输入正确密码") + ToastUtils.showShort("请输入正确密码") } } } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/debug/DebugWatchDogPresenter.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/debug/DebugWatchDogPresenter.kt new file mode 100644 index 0000000000..c43cb5d864 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/debug/DebugWatchDogPresenter.kt @@ -0,0 +1,12 @@ +package com.mogo.och.common.module.manager.debug + +import com.mogo.commons.mvp.Presenter + +class DebugWatchDogPresenter(view: DebugViewWatchDogFragment?) : + Presenter(view){ + companion object { + private const val TAG = "BusPassengerFunctionPresenter" + } + + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt index d199f69d5b..ec647b77f8 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/IDistanceListener.kt @@ -6,7 +6,8 @@ interface IDistanceListener { /** * @param distance 距离终点坐标的距离 */ - fun distanceCallback(distance: Float) + fun distanceCallback(distance: Float){} + fun stationDistanceCallback(stationDistance:Float){} } interface ITrajectoryListener{ diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt index 72a72bd85e..6f858d0ef3 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/TrajectoryAndDistanceManager.kt @@ -12,10 +12,11 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON import com.mogo.eagle.core.utilcode.util.CoordinateUtils -import com.mogo.och.common.module.manager.loopmanager.BusPassengerModelLoopManager +import com.mogo.och.common.module.manager.loopmanager.BizLoopManager import com.mogo.och.common.module.manager.loopmanager.LoopInfo import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.zhjt.service.chain.ChainLog +import io.reactivex.schedulers.Schedulers import mogo.telematics.pad.MessagePad import java.util.concurrent.ConcurrentHashMap @@ -56,8 +57,11 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ @Volatile private var mRoutePoints: MutableList? = ArrayList() + // 0-1 1-2 2-3 各个轨迹点的距离 private var mRoutePointsDistance: MutableList? = ArrayList() + // 所有轨迹点距离的和 private var maxDistanceAllPoint:Double = 0.0 + private val stationDistance: ConcurrentHashMap = ConcurrentHashMap() @Volatile private var lineId:Long? = null @@ -154,14 +158,17 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ this.endStationInfo.stationPoint = null this.startStationInfo.stationPoint = null this.lineId = null + stationDistance.clear() }else{ if(isSameStation(this.startStationInfo.stationPoint,startStationInfo)&& isSameStation(this.endStationInfo.stationPoint,endStationInfo)){ if(this.lineId!=lineId){ resetStation() + stationDistance.clear() } }else{ resetStation() + stationDistance.clear() } this.endStationInfo.stationPoint = endStationInfo this.startStationInfo.stationPoint = startStationInfo @@ -214,7 +221,9 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ * 启动路距计算 */ private fun startCalculateDistanceLoop() { - BusPassengerModelLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance)) + BizLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance, + scheduler = Schedulers.computation() + )) d(SceneConstant.M_BUS_P + TAG, "开始路距计算") } @@ -222,7 +231,7 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ * 结束启动路距计算 */ private fun endCalculateDistanceLoop() { - BusPassengerModelLoopManager.removeLoopFunction(TAGDISTANCE) + BizLoopManager.removeLoopFunction(TAGDISTANCE) d(SceneConstant.M_BUS_P + TAG, "结束路距计算") } @@ -269,6 +278,22 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ writeLog(calculateData, locationInfo) } + try { + if (endStationInfo.stationPoint != null + && endStationInfo.isNext!= null + && endStationInfo.index != null + && endStationInfo.distance != null + && startStationInfo.stationPoint != null + && startStationInfo.isNext != null + && startStationInfo.index != null + && startStationInfo.distance != null + ) { + calculateStationDistance() + } + }catch (e:Exception){ + e(M_OCHCOMMON+ TAG,"计算两个站点间的距离") + } + val carLocationInfo:Triple if(endStationInfo.isNext==true){ // 计算车的位置在轨迹中的信息 这个是一个变量可以缓存 @@ -331,6 +356,56 @@ object TrajectoryAndDistanceManager: IMoGoPlanningRottingListener{ } + /** + * 计算站点间距离 + */ + private fun calculateStationDistance() { + var lastSumLength = 0f + val key = getKey() + if (stationDistance[key] !=null) { + return + } + + val stationIndex = endStationInfo.index?:0 + if (startStationInfo.index!! < stationIndex-1) { + // subList 是[) 需要的是[] + val subList = mRoutePoints!!.subList(startStationInfo.index!!, stationIndex + 1) + // 轨迹点所有的距离 + lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(subList) + val stationDistance = endStationInfo.distance ?: 0f + if (endStationInfo.isNext == true) {// isNext = true + lastSumLength -= stationDistance + } else {// isNext = false + lastSumLength += stationDistance + } + if (startStationInfo.isNext==true) {// 是否是下一个 true 下一个 + lastSumLength += startStationInfo.distance!! + } else { + lastSumLength -= startStationInfo.distance!! + } + } else { + val lastPoints = endStationInfo.stationPoint + lastSumLength = CoordinateUtils.calculateLineDistance( + startStationInfo.stationPoint!!.longitude, startStationInfo.stationPoint!!.latitude, + lastPoints!!.longitude, lastPoints.latitude + ) + } + d(M_OCHCOMMON+ TAG,"两站点距离:$lastSumLength") + stationDistance[key] = lastSumLength + + if(distanceListeners.size>0) { + distanceListeners.forEach { + //val tag = it.key + val listener = it.value + listener.stationDistanceCallback(lastSumLength) + } + } + } + + private fun getKey(): String { + return "${startStationInfo.stationPoint!!.longitude}${startStationInfo.stationPoint!!.latitude}${endStationInfo.stationPoint!!.longitude}${endStationInfo.stationPoint!!.latitude}" + } + private fun invokeDistance( carLocationInfo: Triple, diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/BusPassengerModelLoopManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/BizLoopManager.kt similarity index 70% rename from OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/BusPassengerModelLoopManager.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/BizLoopManager.kt index aaacdf7319..ff512902fa 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/BusPassengerModelLoopManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/BizLoopManager.kt @@ -4,6 +4,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P import com.mogo.och.common.module.utils.RxUtils import io.reactivex.Observable +import io.reactivex.Observer import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import java.util.concurrent.ConcurrentHashMap @@ -14,7 +15,7 @@ import java.util.concurrent.TimeUnit * * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) */ -object BusPassengerModelLoopManager { +object BizLoopManager { private val TAG = "BusPassengerModelLoopManager" @@ -66,8 +67,21 @@ object BusPassengerModelLoopManager { aLong?.let { if (it % loopInfo.interval == 0L) { try { - loopInfo.function.invoke() - CallerLogger.d(TAG, "${aLong}对象${loopInfo}正在执行方法${tag}") + if(loopInfo.scheduler!=null) { + Observable.just(tag).observeOn(loopInfo.scheduler) + .subscribe(object :Observer{ + override fun onSubscribe(d: Disposable) {} + override fun onError(e: Throwable) {} + override fun onComplete() { + loopInfo.function.invoke() + CallerLogger.d(TAG, "${aLong}正在执行方法${tag}_${Thread.currentThread().name}") + } + override fun onNext(t: String) {} + }) + }else{ + loopInfo.function.invoke() + CallerLogger.d(TAG, "${aLong}正在执行方法${tag}_${Thread.currentThread().name}") + } }catch (e:Throwable){ e.printStackTrace() CallerLogger.e(TAG,"$tag:--$e") diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/LoopInfo.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/LoopInfo.kt index 88aba91287..a987ec2d5c 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/LoopInfo.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/loopmanager/LoopInfo.kt @@ -1,3 +1,11 @@ package com.mogo.och.common.module.manager.loopmanager -data class LoopInfo(val interval:Long,val function: () -> Unit,val immediately:Boolean=false) \ No newline at end of file +import io.reactivex.Scheduler + +/** + * interval 轮训间隔 + * function 轮询执行的方法 + * immediately 是否立刻执行 + * scheduler 轮训执行的线程 + */ +data class LoopInfo(val interval:Long,val function: () -> Unit,val immediately:Boolean=false,var scheduler: Scheduler? = null) \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt index 887729704f..bc16c9fb2b 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt @@ -193,57 +193,57 @@ class CommonAmapNaviVIew @JvmOverloads constructor( amapNaviView.onDestroy() } - var array = arrayOf( - "直行车道", - "左转车道", - "左转或直行车道", - "右转车道", - "右转或直行车道", - "左掉头车道", - "左转或者右转车道", - " 左转或右转或直行车道", - "右转掉头车道", - "直行或左转掉头车道", - "直行或右转掉头车道", - "左转或左掉头车道", - "右转或右掉头车道", - "直行并且车道扩展", - "左转+左掉头+扩展", - "不可以选择该车道", - "直行+左转+左掉头车道", - "右转+左掉头", - "左转+右转+左掉头", - "直行+右转+左掉头", - "左转+右掉头", - "公交车道", - "空车道", - "可变车道" - ) +// var array = arrayOf( +// "直行车道", +// "左转车道", +// "左转或直行车道", +// "右转车道", +// "右转或直行车道", +// "左掉头车道", +// "左转或者右转车道", +// " 左转或右转或直行车道", +// "右转掉头车道", +// "直行或左转掉头车道", +// "直行或右转掉头车道", +// "左转或左掉头车道", +// "右转或右掉头车道", +// "直行并且车道扩展", +// "左转+左掉头+扩展", +// "不可以选择该车道", +// "直行+左转+左掉头车道", +// "右转+左掉头", +// "左转+右转+左掉头", +// "直行+右转+左掉头", +// "左转+右掉头", +// "公交车道", +// "空车道", +// "可变车道" +// ) - var actions = arrayOf( - "直行", - "左转", - "左转或直行", - "右转", - "右转或这行", - "左掉头", - "左转或者右转", - " 左转或右转或直行", - "右转掉头", - "直行或左转掉头", - "直行或右转掉头", - "左转或左掉头", - "右转或右掉头", - "直行并且车道扩展", - "左转+左掉头+扩展", - "不可以选择", - "直行+左转+左掉头", - "右转+左掉头", - "左转+右转+左掉头", - "直行+右转+左掉头", - "左转+右掉头", - "公交车道", - "空车道", - "可变车道" - ) +// var actions = arrayOf( +// "直行", +// "左转", +// "左转或直行", +// "右转", +// "右转或这行", +// "左掉头", +// "左转或者右转", +// " 左转或右转或直行", +// "右转掉头", +// "直行或左转掉头", +// "直行或右转掉头", +// "左转或左掉头", +// "右转或右掉头", +// "直行并且车道扩展", +// "左转+左掉头+扩展", +// "不可以选择", +// "直行+左转+左掉头", +// "右转+左掉头", +// "左转+右转+左掉头", +// "直行+右转+左掉头", +// "左转+右掉头", +// "公交车道", +// "空车道", +// "可变车道" +// ) } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt index cb6cbd7dbd..8d41c08fec 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt @@ -1,11 +1,19 @@ package com.mogo.och.common.module.utils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable +import io.reactivex.exceptions.UndeliverableException +import io.reactivex.plugins.RxJavaPlugins +import java.io.IOException import java.util.concurrent.TimeUnit +import io.reactivex.functions.Consumer object RxUtils { + + private const val TAG = "RxUtils" fun disposeSubscribe(subscribe: Disposable?) { subscribe?.let { if (!it.isDisposed) { @@ -21,6 +29,12 @@ object RxUtils { function.invoke() } } + fun createSubscribeOnOwnThread(delay: Long=2000, function: () -> Unit): Disposable? { + return Observable.timer(delay, TimeUnit.MILLISECONDS) + .subscribe { + function.invoke() + } + } fun isDisposed(disposable: Disposable?):Boolean{ if(disposable!=null){ @@ -29,4 +43,41 @@ object RxUtils { return false } + + // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 + // The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with + fun errCatch(){ + RxJavaPlugins.setErrorHandler(Consumer { e -> + if (e is UndeliverableException) { + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "UndeliverableException") + return@Consumer + } + if (e is IOException) { // + // fine, irrelevant network problem or API that throws on cancellation + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "IOException") + return@Consumer + } + if (e is InterruptedException) { + // fine, some blocking code was interrupted by a dispose call + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "InterruptedException") + return@Consumer + } + if (e is NullPointerException || e is IllegalArgumentException) { + // that's likely a bug in the application + CallerLogger.d( + SceneConstant.M_OCHCOMMON + TAG, + "NullPointerException or IllegalArgumentException" + ) + Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e) + return@Consumer + } + if (e is IllegalStateException) { + // that's a bug in RxJava or in a custom operator + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "IllegalStateException") + Thread.currentThread().uncaughtExceptionHandler?.uncaughtException(Thread.currentThread(), e) + return@Consumer + } + CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "Undeliverable exception") + }) + } } \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/MineGradientDrawable.kt similarity index 90% rename from OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/MineGradientDrawable.kt index fce4124456..9d2d711134 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/view/drawable/MineGradientDrawable.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/MineGradientDrawable.kt @@ -1,8 +1,7 @@ -package com.yangyakun.main.ui.loading.drawable +package com.mogo.och.common.module.wigets import android.graphics.* import android.graphics.drawable.Drawable -import android.util.Log import androidx.core.graphics.toRectF /** @@ -18,7 +17,7 @@ class MineGradientDrawable(colorStart: Int = Color.BLUE,colorEnd:Int = Color.RED private var colorWith = 4f private var transparentWidth = 4f - private var index = arrayOf(0.53,0.76,0.92) + private var index = doubleArrayOf(0.53,0.76,0.92) private var tartHeight = 0 private var heightDex = 0 @@ -29,9 +28,8 @@ class MineGradientDrawable(colorStart: Int = Color.BLUE,colorEnd:Int = Color.RED this.colorStart = colorStart this.colorEnd = colorEnd this.tartHeight = height - Color.TRANSPARENT mPaint.isAntiAlias = true - index.forEachIndexed { index, d -> + index.forEachIndexed { _, d -> currendDex += (1-d)/2 } } @@ -51,14 +49,13 @@ class MineGradientDrawable(colorStart: Int = Color.BLUE,colorEnd:Int = Color.RED var countstep = 0 while (true){ val rectF = rect.toRectF() - var height = 0f - height = if(rect.height()>tartHeight){ + val height: Float = if(rect.height()>tartHeight){ tartHeight.toFloat() }else{ rectF.bottom - rectF.top } // 计算前几个和后几个特殊高度递增和递减 - var dex = 0f; + var dex = 0f if(countstep - + \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_cancle.xml b/OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_cancle.xml similarity index 78% rename from OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_cancle.xml rename to OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_cancle.xml index c061ab1fa0..ebc348c24f 100644 --- a/OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_cancle.xml +++ b/OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_cancle.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_edit_bg.xml b/OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_edit_bg.xml similarity index 78% rename from OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_edit_bg.xml rename to OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_edit_bg.xml index 204ecfe5e2..2cf51a6c09 100644 --- a/OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_edit_bg.xml +++ b/OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_edit_bg.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_submit.xml b/OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_submit.xml similarity index 78% rename from OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_submit.xml rename to OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_submit.xml index cd71d5703f..a62507c38d 100644 --- a/OCH/mogo-och-charter-passenger/src/main/res/drawable/charter_p_debugview_submit.xml +++ b/OCH/mogo-och-common-module/src/main/res/drawable/charter_p_debugview_submit.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-charter-passenger/src/main/res/layout/m1_debugview_pass.xml b/OCH/mogo-och-common-module/src/main/res/layout/m1_debugview_pass.xml similarity index 98% rename from OCH/mogo-och-charter-passenger/src/main/res/layout/m1_debugview_pass.xml rename to OCH/mogo-och-common-module/src/main/res/layout/m1_debugview_pass.xml index 873316e934..d6c0a9bbc7 100644 --- a/OCH/mogo-och-charter-passenger/src/main/res/layout/m1_debugview_pass.xml +++ b/OCH/mogo-och-common-module/src/main/res/layout/m1_debugview_pass.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/bus_p_m1_80000000" + android:background="@color/common_80000000" tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> #66B8BFE8 #3B4577 + + #80000000 + #1466FB + #E0EFFF + #B8C2D7 + #B8C2D8 \ No newline at end of file diff --git a/OCH/mogo-och-shuttle/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java b/OCH/mogo-och-shuttle/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java index aafcea35ee..fed001d399 100644 --- a/OCH/mogo-och-shuttle/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java +++ b/OCH/mogo-och-shuttle/src/main/java/com/mogo/och/bus/util/BusTrajectoryManager.java @@ -92,6 +92,10 @@ public class BusTrajectoryManager { // 5. 轨迹管理_轨迹下载超时 CallerLogger.INSTANCE.d(M_BUS + TAG, "onAutopilotGuardian() 轨迹下载超时"); // ToastUtils.showShort("轨迹下载超时"); + } else if ("ISSM_FUNC_AUTO_PILOT_READY".equals(guardianInfo.getCode())) { + // 收到ssm的自动驾驶变为ready,再次下发轨迹下载.解决:域控重启,或者102域控启动太早,107节点初始化未完成导致的轨迹未进行下载。 + CallerLogger.INSTANCE.d(M_BUS + TAG, "onAutopilotGuardian() ssm ready,再次发起下载"); + syncTrajectoryInfo(); } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml index 84947cad22..667dac6a6b 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/AndroidManifest.xml @@ -1,21 +1,13 @@ + - - - + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ICallback.aidl b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ICallback.aidl deleted file mode 100644 index a3a46acde7..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ICallback.aidl +++ /dev/null @@ -1,12 +0,0 @@ -// ICallback.aidl -package com.mogo.och.taxi.passenger.mulprocess; - -// Declare any non-default types here with import statements - -interface ICallback { - - void onResult(long meters, long timeInSecond,float speed); - - void postEvent(int type); - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl b/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl deleted file mode 100644 index ab9159d363..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/aidl/com/mogo/och/taxi/passenger/mulprocess/ILeftMenuService.aidl +++ /dev/null @@ -1,19 +0,0 @@ -// ILeftMenuService.aidl -package com.mogo.och.taxi.passenger.mulprocess; - -import com.mogo.och.taxi.passenger.mulprocess.ICallback; - -// Declare any non-default types here with import statements - -interface ILeftMenuService { - - /** - * Pass the selected item to the main process - */ - void transmissionIndex(int index); - - void registerCallback(in ICallback cb); - - void unRegisterCallback(in ICallback cb); - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data deleted file mode 100644 index b200669659..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data deleted file mode 100644 index 7aa8fa7b45..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/style.data b/OCH/mogo-och-taxi-passenger/src/main/assets/style.data new file mode 100755 index 0000000000..134c469f17 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/assets/style.data differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/style_extra.data b/OCH/mogo-och-taxi-passenger/src/main/assets/style_extra.data new file mode 100755 index 0000000000..ace8199ee0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/assets/style_extra.data differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java index 27fef64839..1d38df720d 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java @@ -63,19 +63,6 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData { public String txtFileMd5DPQP = ""; //轨迹文件md5,默认“” public long contrailSaveTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 - // !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km - public double travelDistance; - - /** - * @param distance - */ - public void decreaseTravelDistance( double distance ) { - travelDistance = ( ( float ) distance / 1000f ); - if ( travelDistance < 0 ) { - travelDistance = 0; - } - } - @Override public int compareTo(Result o) { boolean isEqual = this.orderNo.equals(o.orderNo); @@ -97,7 +84,7 @@ public class TaxiPassengerOrderQueryRespBean extends BaseData { public int hashCode() { return Objects.hash(orderNo, orderType, orderStatus, businessType, startSiteId, startSiteAddr, startSitePoint, startSiteGcjPoint, endSiteId, endSiteAddr, - endSitePoint, endSiteGcjPoint, carNumber, createTime, startTime, travelDistance); + endSitePoint, endSiteGcjPoint, carNumber, createTime, startTime); } } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java deleted file mode 100644 index df56841e67..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) - */ -public interface IOCHTaxiPassengerADASStatusCallback { - // 自动驾驶触发的已到达目的地:暂未用到 - void onAutopilotArriveEnd(); - - // 自动驾驶可用状态 - void onAutopilotEnable(); - - // 自动驾驶不可用状态 - void onAutopilotDisable(); - - // 自动驾驶运行中 - void onAutopilotRunning(); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java deleted file mode 100644 index badb7dee50..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - - -import com.amap.api.maps.model.LatLng; -import com.mogo.eagle.core.data.map.MogoLocation; - -import java.util.List; - -import mogo.telematics.pad.MessagePad; -/** - * @author: wangmingjun - * @date: 2021/11/1 - */ -public interface IOCHTaxiPassengerAutopilotPlanningCallback { - void setLineMarker(LatLng startStation,LatLng endStation); - void routeResultByServer(List routeArriviedTemp, List routeArrivingTemp, MogoLocation location); - void showRottingMapView(); -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerControllerStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerControllerStatusCallback.java deleted file mode 100644 index dd4b3336fd..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerControllerStatusCallback.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -import com.mogo.eagle.core.data.map.MogoLocation; - -/** - * Created on 2021/9/10 - * - * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) - */ -public interface IOCHTaxiPassengerControllerStatusCallback { - // 是否vr map模式 - void onVRModeChanged(boolean isVRMode); - // 自车定位 - void onCarLocationChanged(MogoLocation location); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt similarity index 53% rename from OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java rename to OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt index d800e68e66..ba2fc56e72 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.kt @@ -1,23 +1,21 @@ -package com.mogo.och.taxi.passenger.callback; +package com.mogo.och.taxi.passenger.callback -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean /** * Created on 2021/9/8 * * Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等) */ -public interface IOCHTaxiPassengerOrderStatusCallback { - +interface IOCHTaxiPassengerOrderStatusCallback { // 当前进行单状态变更:新到进行中订单、进行中单状态变更 - void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order); + fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?){} // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentOrderDistToEndChanged(long meters, long timeInSecond); - - //当前路名字 - void onCurrentRoadName(String currentRoadName); + fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long,stationDistance:Int){} // 司机已确认开启自动驾驶环境 - void onDriverHasCheckedPilotCondition(boolean isBoarded); -} + fun onDriverHasCheckedPilotCondition(isBoarded: Boolean){} + + fun onMessageGo2OverMapview(){} +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITPClickStartAutopilotCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITPClickStartAutopilotCallback.java deleted file mode 100644 index bf55573adc..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITPClickStartAutopilotCallback.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -public interface ITPClickStartAutopilotCallback { - void onClickCallback(); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java deleted file mode 100644 index 8a726a52d2..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerScoreCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean; - -public interface ITaxiPassengerScoreCallback { - void onScoreCallback(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt index 729835b85f..15cc6dad4f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt @@ -20,18 +20,15 @@ class TaxiPassengerConst { const val LOOP_PERIOD_1S = 1 * 1000L const val LOOP_DELAY = 100L - // 订单信息 - const val SP_KEY_OCH_TAXI_ORDER = "SP_KEY_OCH_TAXI_ORDER" - - // 订单总里程 - const val SP_KEY_ORDER_SUM_DIS = "SP_KEY_ORDER_SUM_DIS" - //实时查询订单剩余时间 和 剩余里程 轮询间隔2s const val LOOP_CALCULATEROUTE_2S = 2 * 1000L // 开始服务启动自动驾驶等待时间(埋点上传) const val LOOP_PERIOD_15S = 15 * 1000L + const val TAXI_AVERAGE_SPEED = 38 + + // 埋点key:接管后点击'自动驾驶'按钮启动 const val EVENT_KEY_RESTART_AUTOPILOT = "event_key_och_taxi_restart_autopilot" // 埋点key:开始服务开启自动驾驶(成功/失败) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt index 1e3ec5ccd0..19dfedc935 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt @@ -35,7 +35,7 @@ enum class TaxiPassengerOrderStatusEnum(val code: Int) { companion object { @JvmStatic - fun valueOf(code: Int): TaxiPassengerOrderStatusEnum? { + fun valueOf(code: Int): TaxiPassengerOrderStatusEnum { for (value in values()) { if (value.code == code) { return value diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/UIStatus.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/UIStatus.java deleted file mode 100644 index 83c06dfa6e..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/event/UIStatus.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.taxi.passenger.event; - -public class UIStatus { - - public static final int LIVE = 0; - public static final int OVERVIEW = 1; - public static final int CONSULT = 2; - public static final int MOVIE = 3; - - public int status = LIVE; - - public UIStatus(int status) { - this.status = status; - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt new file mode 100644 index 0000000000..a3b49abe26 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt @@ -0,0 +1,194 @@ +package com.mogo.och.taxi.passenger.model + +import com.elegant.network.utils.GsonUtil +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +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.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.manager.OCHAdasAbilityManager +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.network.TaxiPassengerServiceManager +import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager + +object AutopilotManager : IMoGoAutopilotStatusListener { + + private const val TAG = "AutopilotManager" + + init { + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + } + //检测当前订单 + private fun checkCurrentOCHOrder(): Boolean { + return TaxiPassengerModel.currentOCHOrder != null && TaxiPassengerModel.currentOCHOrder!!.startSiteGcjPoint != null && TaxiPassengerModel.currentOCHOrder!!.endSiteGcjPoint != null + } + + + fun startAutopilot() { + if (!checkCurrentOCHOrder()) { + CallerLogger.e( + SceneConstant.M_TAXI_P + TAG, + "no order or order is empty." + ) + ToastUtils.showShort("当前订单不存在或异常!") + return + } + if (TaxiPassengerModel.currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.code) { + startServicePilotDone() + } + if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().autopilotAbilityStatus) { + ToastUtils.showLong( + OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason + + ", 请稍候重试" + ) + TaxiPassengerAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( + TaxiPassengerModel.currentOCHOrder!!.startSiteAddr, + TaxiPassengerModel.currentOCHOrder!!.endSiteAddr, + TaxiPassengerModel.currentOCHOrder!!.orderNo, + OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason + ) + return + } + val parameters = initAutopilotControlParameters() + if (parameters == null) { + CallerLogger.d( + SceneConstant.M_TAXI_P + TAG, + "AutopilotControlParameters is empty." + ) + return + } + CallerAutoPilotControlManager.startAutoPilot(parameters) + CallerLogger.d( + SceneConstant.M_TAXI_P + TAG, + "start autopilot with parameter: %s", + GsonUtil.jsonFromObject(parameters) + + " ,startSiteName=" + TaxiPassengerModel.currentOCHOrder!!.startSiteAddr + + " ,endSiteName=" + TaxiPassengerModel.currentOCHOrder!!.endSiteAddr + ) + TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent( + false, + false, + TaxiPassengerModel.currentOCHOrder!!.startSiteAddr, + TaxiPassengerModel.currentOCHOrder!!.endSiteAddr, + TaxiPassengerModel.currentOCHOrder!!.orderNo + ) + } + + private fun initAutopilotControlParameters(): AutopilotControlParameters? { + if (!checkCurrentOCHOrder()) { + CallerLogger.e( + SceneConstant.M_TAXI_P + TAG, + "no order or order is empty." + ) + ToastUtils.showShort("当前订单不存在或异常!") + return null + } + val parameters = AutopilotControlParameters() + val startWgsLon = TaxiPassengerModel.currentOCHOrder!!.startSitePoint[0] + val startWgsLat = TaxiPassengerModel.currentOCHOrder!!.startSitePoint[1] + val endWgsLon = TaxiPassengerModel.currentOCHOrder!!.endSitePoint[0] + val endWgsLat = TaxiPassengerModel.currentOCHOrder!!.endSitePoint[1] + parameters.vehicleType = TaxiPassengerModel.currentOCHOrder!!.businessType + parameters.startName = + PinYinUtil.getPinYinHeadChar(TaxiPassengerModel.currentOCHOrder!!.startSiteAddr) // 起点名称拼音首字母大写:科学城B区2号门(KXCBQ2HM) + parameters.endName = + PinYinUtil.getPinYinHeadChar(TaxiPassengerModel.currentOCHOrder!!.endSiteAddr) // 终点名称拼音首字母大写:科学城C区三号门(KXCCQSHM) + parameters.startLatLon = + AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon) + parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon) + if (parameters.autoPilotLine == null) { + parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( + TaxiPassengerModel.currentOCHOrder!!.lineId, + TaxiPassengerModel.currentOCHOrder!!.csvFileUrl, + TaxiPassengerModel.currentOCHOrder!!.csvFileMd5, + TaxiPassengerModel.currentOCHOrder!!.txtFileUrl, + TaxiPassengerModel.currentOCHOrder!!.txtFileMd5, + TaxiPassengerModel.currentOCHOrder!!.contrailSaveTime, + TaxiPassengerModel.currentOCHOrder!!.carModel, + TaxiPassengerModel.currentOCHOrder!!.csvFileUrlDPQP, + TaxiPassengerModel.currentOCHOrder!!.csvFileMd5DPQP, + TaxiPassengerModel.currentOCHOrder!!.txtFileUrlDPQP, + TaxiPassengerModel.currentOCHOrder!!.txtFileMd5DPQP, + TaxiPassengerModel.currentOCHOrder!!.contrailSaveTimeDPQP + ) + } + return parameters + } + + /** + * 将业务订单信息保存,鹰眼可取用 + */ + fun updateAutopilotControlParameters() { + val parameters = initAutopilotControlParameters() + if (null == parameters) { + CallerLogger.e( + SceneConstant.M_TAXI_P + TAG, + "AutopilotControlParameters is empty." + ) + return + } + CallerLogger.d( + SceneConstant.M_TAXI_P + TAG, + "AutopilotControlParameters is update." + ) + CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(parameters) + } + + fun clearAutopilotControlParameters() { + CallerLogger.d( + SceneConstant.M_TAXI_P + TAG, + "AutopilotControlParameters is clear." + ) + CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(null) + } + + override fun onAutopilotStatusResponse(state: Int) { + // 启动自驾成功 + when (state) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { + if (TaxiPassengerModel.currentOCHOrder != null && TaxiPassengerModel.curOrderStatus === TaxiPassengerOrderStatusEnum.UserArriveAtStart) { + TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent( + false, + true, + TaxiPassengerModel.currentOCHOrder!!.startSiteAddr, + TaxiPassengerModel.currentOCHOrder!!.endSiteAddr, + TaxiPassengerModel.currentOCHOrder!!.orderNo + ) + startServicePilotDone() + } + } + else -> {} + } + } + + /** + * 乘客屏启动自动驾驶成功 + */ + fun startServicePilotDone() { + if (TaxiPassengerModel.currentOCHOrder == null) return + val result = TaxiPassengerStartReqBean.Result() + val currentLocation = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02() + result.lat = currentLocation.latitude + result.lon = currentLocation.longitude + TaxiPassengerServiceManager.startServicePilotDone( + TaxiPassengerModel.currentOCHOrder!!.orderNo, result, + object : OchCommonServiceCallback { + override fun onSuccess(data: TaxiPassengerBaseRespBean) { + VoiceNotice.showNotice("坐稳扶好,我们出发咯!", AIAssist.LEVEL2) + } + override fun onFail(code: Int, msg: String) {} + }) + } + + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java deleted file mode 100644 index c43702af78..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.mogo.och.taxi.passenger.model; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.content.Context; - -import com.amap.api.services.core.AMapException; -import com.amap.api.services.core.LatLonPoint; -import com.amap.api.services.geocoder.GeocodeResult; -import com.amap.api.services.geocoder.GeocodeSearch; -import com.amap.api.services.geocoder.RegeocodeQuery; -import com.amap.api.services.geocoder.RegeocodeResult; -import com.amap.api.services.geocoder.RegeocodeRoad; -import com.mogo.eagle.core.network.utils.GsonUtil; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback; - -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; - -/** - * @author: wangmingjun - * @date: 2021/12/6 - */ -public class TaxiPassengerGeocodeSearchModel implements GeocodeSearch.OnGeocodeSearchListener { - - private final String TAG = TaxiPassengerGeocodeSearchModel.class.getSimpleName(); - - private static Context mContext; - - private IOCHTaxiPassengerNaviChangedCallback mNaviChangedCallback; - - GeocodeSearch mGeocodeSearch = null; - - private String roadName = ""; - - private Timer timer ; - - TimerTask timerTask; - - public static TaxiPassengerGeocodeSearchModel getInstance(Context context) { - mContext = context; - return SingletonHolder.INSTANCE; - } - - private static final class SingletonHolder { - private static final TaxiPassengerGeocodeSearchModel INSTANCE = new TaxiPassengerGeocodeSearchModel(); - } - - private TaxiPassengerGeocodeSearchModel(){ - } - - public void initGeocodeSearch(){ - //通过经纬度逆地理编码得到位置 - try { - mGeocodeSearch = new GeocodeSearch(mContext); - mGeocodeSearch.setOnGeocodeSearchListener(this); - } catch (AMapException e) { - e.printStackTrace(); - } - timer = new Timer(); - timerTask = new TimerTask() { - @Override - public void run() { - if (mNaviChangedCallback != null){ - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "roadName道路名称: " + roadName); - mNaviChangedCallback.onCurrentRoadName(roadName); - } - } - }; - try{ - timer.schedule(timerTask,500,2000); - }catch (Exception e){ - e.printStackTrace(); - } - } - - public void searchLocationInfo(double lat, double lon){ - if (null != mGeocodeSearch){ - LatLonPoint latLng = new LatLonPoint(lat, lon); - //第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 - RegeocodeQuery query = new RegeocodeQuery(latLng, 200, GeocodeSearch.AMAP); - mGeocodeSearch.getFromLocationAsyn(query); - } - } - - public void destroyGeocodeSearch(){ - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "destroyGeocodeSearch"); - if (mGeocodeSearch != null){ - mGeocodeSearch = null; - } - if (mNaviChangedCallback != null){ - mNaviChangedCallback = null; - } - if (null != timer){ - timer.cancel(); - } - if (null != timerTask){ - timerTask = null; - } - roadName = ""; - } - - public void setOCHTaciNaviChangedCallback(IOCHTaxiPassengerNaviChangedCallback callback){ - this.mNaviChangedCallback = callback; - } - - @Override - public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {//更新频率几十 ms, 暂定更新UI为2s一次 - if (regeocodeResult != null) { - List roads = regeocodeResult.getRegeocodeAddress().getRoads(); - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "位置roads:" + GsonUtil.jsonFromObject(roads)); - if (roads != null && roads.size() > 0){ - roadName = roads.get(0).getName();//当前路的名字 -// mNaviChangedCallback.onCurrentRoadName(roads.get(0).getName()); - } - } - } - - @Override - public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { - - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java deleted file mode 100644 index f95bba5744..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ /dev/null @@ -1,1078 +0,0 @@ -package com.mogo.och.taxi.passenger.model; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.content.Context; -import android.content.Intent; -import android.net.ConnectivityManager; -import android.os.Looper; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.amap.api.maps.model.LatLng; -import com.amap.api.navi.model.NaviLatLng; -import com.elegant.network.utils.GsonUtil; -import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager; -import com.mogo.commons.module.intent.IMogoIntentListener; -import com.mogo.commons.module.intent.IntentManager; -import com.mogo.commons.module.status.IMogoStatusChangedListener; -import com.mogo.commons.module.status.MogoStatusManager; -import com.mogo.commons.module.status.StatusDescriptor; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.enums.DataSourceType; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.data.msgbox.MsgBoxBean; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener; -import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener; -import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener; -import com.mogo.eagle.core.function.api.datacenter.union.ILimitingVelocityListener; -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.msgbox.CallerMsgBoxEventListenerManager; -import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager; -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.util.CoordinateUtils; -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.mogo.och.common.module.biz.network.OchCommonServiceCallback; -import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; -import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager; -import com.mogo.och.common.module.manager.OCHAdasAbilityManager; -import com.mogo.och.common.module.manager.distancemamager.IDistanceListener; -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.PinYinUtil; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; -import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager; -import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; -import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager; - -import org.jetbrains.annotations.NotNull; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.disposables.Disposable; -import io.reactivex.exceptions.UndeliverableException; -import io.reactivex.functions.Consumer; -import io.reactivex.plugins.RxJavaPlugins; -import mogo.telematics.pad.MessagePad; -import mogo_msg.MogoReportMsg; -import system_master.SystemStatusInfo; - -/** - * Created by pangfan on 2021/8/19 - * - * 网约车 - 出租车业务逻辑处理 - */ -public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback { - - private static final String TAG = TaxiPassengerModel.class.getSimpleName(); - - private static final class SingletonHolder { - private static final TaxiPassengerModel INSTANCE = new TaxiPassengerModel(); - } - - public static TaxiPassengerModel getInstance() { - return SingletonHolder.INSTANCE; - } - - private Context mContext; - private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentOCHOrder; //当前订单 - private volatile List mInServiceList = Collections.emptyList(); //进行中订单 - private volatile List mWaitServiceList = Collections.emptyList(); //待服务订单 - - private IOCHTaxiPassengerADASStatusCallback mADASStatusCallback; //Model->Presenter:自动驾驶状态相关 - private IOCHTaxiPassengerAutopilotPlanningCallback mAutopilotPlanningCallback; //Model->Presenter:自动驾驶线路规划 - - private final Map mOrderStatusCallbackMap = new ConcurrentHashMap<>(); - private final Map mControllerStatusCallbackMap = new ConcurrentHashMap<>(); - - private ITaxiPassengerVeloctityCallback mVeloctityCallback;//道路限速返回 - - private int mPreRouteIndex = 0; - - private Disposable subscribe; - private int delayTime = 2; - - private double mLongitude, mLatitude; - private MogoLocation mLocation = null; - - private final List mLocationsModels = new ArrayList<>(); - - private TaxiPassengerModel() { - } - - public void setMoGoAutopilotPlanningListener(IOCHTaxiPassengerAutopilotPlanningCallback - moGoAutopilotPlanningCallback) { - this.mAutopilotPlanningCallback = moGoAutopilotPlanningCallback; - } - - public void setADASStatusCallback(IOCHTaxiPassengerADASStatusCallback callback) { - this.mADASStatusCallback = callback; - } - - public void setControllerStatusCallback(String tag,IOCHTaxiPassengerControllerStatusCallback callback) { - if (tag == null || "".equals(tag)) return; - - if (callback == null) { - mControllerStatusCallbackMap.remove(tag); - return; - } - - mControllerStatusCallbackMap.put(tag,callback); - - } - - public void setOrderStatusCallback(String tag ,IOCHTaxiPassengerOrderStatusCallback callback) { - if (tag == null || "".equals(tag)) return; - - if (callback == null) { - mOrderStatusCallbackMap.remove(tag); - return; - } - - mOrderStatusCallbackMap.put(tag,callback); - } - - public void setVeloctityCallback(ITaxiPassengerVeloctityCallback callback){ - this.mVeloctityCallback = callback; - } - - public void init( Context context ) { - mContext = context.getApplicationContext(); - initListeners(); - - // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 - // The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with - RxJavaPlugins.setErrorHandler(new Consumer() { - @Override - public void accept(Throwable e) { - if (e instanceof UndeliverableException) { - e = e.getCause(); - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "UndeliverableException"); - } - if ((e instanceof IOException)) {// - // fine, irrelevant network problem or API that throws on cancellation - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "IOException"); - return; - } - if (e instanceof InterruptedException) { - // fine, some blocking code was interrupted by a dispose call - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "InterruptedException"); - return; - } - if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) { - // that's likely a bug in the application - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "NullPointerException or IllegalArgumentException"); - Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); - return; - } - if (e instanceof IllegalStateException) { - // that's a bug in RxJava or in a custom operator - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "IllegalStateException"); - Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); - return; - } - CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"Undeliverable exception"); - } - }); - - startOrStopOrderLoop(); - } - - /** - * 订单轮询 初始化主Fragment的Presenter init 调用 - */ - public void startOrStopOrderLoop(){ - if (NetworkUtils.isConnected(mContext)) { - startOrStopOrderLoop(true); - } - } - - /** - * 关闭订单轮训 页面摧毁时 - */ - public void release() { - startOrStopOrderLoop(false); - startOrStopQueryOrderRemaining(false); - releaseListeners(); - if(subscribe!=null&&!subscribe.isDisposed()){ - subscribe.dispose(); - } - } - - private void initListeners() { - - // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); - IntentManager.getInstance().registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener ); - MogoStatusManager.getInstance().registerStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - // 定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.addListener(TAG,10,mMapLocationListener); - - //2021.11.1 自动驾驶路线规划接口 - CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG,moGoAutopilotPlanningListener); - - //增加限速监听 - CallerLimitingVelocityListenerManager.INSTANCE.addListener(TAG,limitingVelocityListener); - - AbnormalFactorsLoopManager.INSTANCE.startLoopAbnormalFactors(mContext); - - //开启自驾后 异常信息返回 - OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); - - CallerMsgBoxEventListenerManager.INSTANCE.addListener(TAG,iMsgBoxEventListener); - - TrajectoryAndDistanceManager.INSTANCE.addDistanceListener(TAG,distanceListener); - - TrajectoryAndDistanceManager.INSTANCE.addTrajectoryListener(TAG,trajectoryListener); - } - - private void releaseListeners() { - MogoStatusManager.getInstance().unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - - // 注销定位监听 - CallerChassisLocationGCJ02ListenerManager.INSTANCE.removeListener(TAG); - - MogoAiCloudSocketManager.getInstance(mContext) - .unregisterLifecycleListener(10010); - - CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(mGoAutopilotStatusListener); - CallerPlanningRottingListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); - CallerLimitingVelocityListenerManager.INSTANCE.removeListener(limitingVelocityListener); - - AbnormalFactorsLoopManager.INSTANCE.stopLoopAbnormalFactors(); - - OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null); - - CallerMsgBoxEventListenerManager.INSTANCE.removeListener(iMsgBoxEventListener); - - TrajectoryAndDistanceManager.INSTANCE.removeListener(TAG); - } - - /** - * 订单轮训 - * @param start true 开启订单轮训 - * false 关闭订单轮训 - */ - private void startOrStopOrderLoop(boolean start) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startOrStopOrderLoop() " + start); - if (start) { - TaxiPassengerModelLoopManager.getInstance().startInAndWaitOrdersLoop(); - } else { - TaxiPassengerModelLoopManager.getInstance().stopInAndWaitOrdersLoop(); - } - } - - /** - * 查询订单状态:进行中/待服务(轮询防止因crash导致应用重启、断网没收到推送等) - * - * 注:只有在本地缓存mCurrentOCHOrder为null时(已完成or已取消有明确结果)或id相同且status不同时, - * 才更新最新进行中单到本地 - */ - public void queryInAndWaitOrders() { - TaxiPassengerServiceManager.queryOrdersInAndWaitService(mContext, - new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerOrdersInServiceQueryRespBean data) { - if (data == null || data.data == null) { - return; - } - - //1. 处理进行中订单 - mInServiceList = data.data.servicing; - if (data.data.servicing != null && !data.data.servicing.isEmpty()) { - // 1.1. 当存在进行中单时:对本地currentOrder进行更新 - if (mCurrentOCHOrder == null) { - //1.1.1. 当本地无currentOrder(已经完成or取消),则更新currentOrder,并通知ui更新 - updateNativeCurrentOrder(data.data.servicing.get(0)); - if (mOrderStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } - } else { - //1.1.2. 当本地有currentOrder: - //orderId不一致时:通过currentOrder.orderId查询订单状态,并通知ui更新 - //orderId一致且orderStatus不一致时:则更新currentOrder,并通知ui更新 - if (!mCurrentOCHOrder.orderNo.equals(data.data.servicing.get(0).orderNo)) { - queryCurOrderStatus(); -// } else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) { - } else { //todo 订单拦截放到各自实现去做 - updateNativeCurrentOrder(data.data.servicing.get(0)); - if (mOrderStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } - } - } - } else { - // 1.2. 当无进行中订单时:如果本地也无则跳过;如果本地仍存在currentOrder,查询此单(完成or取消)并通知ui更 - if (mCurrentOCHOrder != null) { - queryCurOrderStatus(); - } - recoverNaviInfo(); - } - } - - @Override - public void onError() { - - } - - @Override - public void onFail(int code, String msg) { - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"queryInAndWaitOrders"+code+msg); - } - }); - } - - //仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder - private void queryCurOrderStatus() { - if (mCurrentOCHOrder == null) { - return; - } - final String orderNo = mCurrentOCHOrder.orderNo; - TaxiPassengerServiceManager.queryOrderById(mContext, orderNo, - new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerOrderQueryRespBean data) { - if (data != null && data.data != null - && mCurrentOCHOrder != null && mCurrentOCHOrder.orderNo.equals(data.data.orderNo)) { - if (data.data.orderStatus == TaxiPassengerOrderStatusEnum.Cancel.getCode() - || data.data.orderStatus == TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() - || data.data.orderStatus == TaxiPassengerOrderStatusEnum.None.getCode()) { - if (mOrderStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderStatusChanged(data.data); - } - } - clearCurrentOCHOrder(); - } else { - updateNativeCurrentOrder(data.data); - if (mOrderStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - // 获取当前订单 - public TaxiPassengerOrderQueryRespBean.Result getCurrentOCHOrder() { - return mCurrentOCHOrder; - } - - // 获取当前订单状态 - public TaxiPassengerOrderStatusEnum getCurOrderStatus() { - TaxiPassengerOrderQueryRespBean.Result order = TaxiPassengerModel.getInstance().getCurrentOCHOrder(); - if (order == null) { - return TaxiPassengerOrderStatusEnum.None; - } - return TaxiPassengerOrderStatusEnum.valueOf(order.orderStatus); - } - - //更新本地currentOrder信息,并保存订单到本地避免车机重启丢失数据 - private void updateNativeCurrentOrder(TaxiPassengerOrderQueryRespBean.Result data) { - if (data == null) { - return; - } - mCurrentOCHOrder = data; - SharedPrefsMgr.getInstance(mContext).putString(TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER, - GsonUtil.jsonFromObject(data)); - } - - //清除订单信息 - public void clearCurrentOCHOrder() { - mCurrentOCHOrder = null; - clearAutopilotControlParameters(); - SharedPrefsMgr.getInstance(mContext).remove(TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER); - } - - //检测当前订单 - public boolean checkCurrentOCHOrder() { - if ( mCurrentOCHOrder != null - && mCurrentOCHOrder.startSiteGcjPoint != null - && mCurrentOCHOrder.endSiteGcjPoint != null) { - return true; - } - return false; - } - - // TODO: 2021/9/12 - public void calculateTravelDistance(MogoLocation carLocation){ - if (checkCurrentOCHOrder() && mCurrentOCHOrder.endSiteGcjPoint.size()>0) { - double endLon = mCurrentOCHOrder.endSiteGcjPoint.get(0); - double endLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); - double distance = CoordinateUtils.calculateLineDistance( - endLon, endLat, - carLocation.getLongitude(), carLocation.getLatitude()); - mCurrentOCHOrder.decreaseTravelDistance(distance); - } - } - - - //监听网络变化,避免启动机器时无网导致无法更新订单信息 - private final IDistanceListener distanceListener = distance -> { - - }; - - private final ITrajectoryListener trajectoryListener = (routeArrivied, routeArriving, location) -> { - List routeArriviedTemp = new ArrayList<>(); - List routeArrivingTemp = new ArrayList<>(); - LatLng temp; - for (MogoLocation mogoLocation : routeArrivied) { - temp = new LatLng(mogoLocation.getLatitude(),mogoLocation.getLongitude()); - routeArriviedTemp.add(temp); - } - for (MogoLocation mogoLocation : routeArriving) { - temp = new LatLng(mogoLocation.getLatitude(),mogoLocation.getLongitude()); - routeArrivingTemp.add(temp); - } - mAutopilotPlanningCallback.routeResultByServer(routeArriviedTemp,routeArrivingTemp,location); - setRouteLineMarker(); - }; - private final IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { - @Override - public void onIntentReceived( String intentStr, Intent intent ) { - CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "onIntentReceived = %s", intentStr ); - if ( ConnectivityManager.CONNECTIVITY_ACTION.equals( intentStr ) ) { - if ( NetworkUtils.isConnected( mContext ) ) { - startOrStopOrderLoop(true); - } - } - } - }; - - private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { - // VR mode变更回调 - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (StatusDescriptor.VR_MODE == descriptor) { - if (mControllerStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ - callback.onVRModeChanged(isTrue); - } - } - } - } - }; - - // 自车定位 - private final IMoGoChassisLocationGCJ02Listener mMapLocationListener = new IMoGoChassisLocationGCJ02Listener() { - @Override - public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { - //位置变化时,通过围栏判断是否到达x点 - if (null == gnssInfo) return; - if (checkCurrentOCHOrder()) { - if (getCurOrderStatus() == TaxiPassengerOrderStatusEnum.OnTheWayToEnd) { - calculateTravelDistance(gnssInfo); - } - } - mLongitude = gnssInfo.getLongitude(); - mLatitude = gnssInfo.getLatitude(); - - mLocation = gnssInfo; - // CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"mLongitude = "+mLongitude+", mLatitude = "+mLatitude); - for (IOCHTaxiPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ - callback.onCarLocationChanged(gnssInfo); - } - } - - }; - - private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ - - @Override - public void onAutopilotDockerInfo(@NonNull String dockerVersion) { - } - - @Override - public void onAutopilotRouteLineId(long lineId) { - } - - @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { - } - - @Override - public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { - } - - @Override - public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { - } - - private boolean arriveAtEnd = false; //乘客app专用字段 - - @Override - public void onAutopilotStatusResponse(int state) { -// CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "state = %s", state ); - if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); - if (mCurrentOCHOrder != null - && getCurOrderStatus() == TaxiPassengerOrderStatusEnum.UserArriveAtStart) { - TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, true, - mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); - startServicePilotDone(); - } - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - if (FunctionBuildConfig.isDemoMode - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - // 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态 - if (!arriveAtEnd) { - return; - } else { - arriveAtEnd = false; - } - } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - if (FunctionBuildConfig.isDemoMode - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - // 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态 - if (!arriveAtEnd) { - return; - } else { - arriveAtEnd = false; - } - } - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); - } - } - - @Override - public void onAutopilotSNRequest() { - } - - @Override - public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) { - if (FunctionBuildConfig.isDemoMode - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - arriveAtEnd = true; - } - - if (arrivalNotification == null || !checkCurrentOCHOrder() - || (getCurOrderStatus() == TaxiPassengerOrderStatusEnum.ArriveAtEnd)) { - return; - } - } - - @Override - public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { - } - }; - - private final IMoGoPlanningRottingListener moGoAutopilotPlanningListener = new IMoGoPlanningRottingListener(){ - - @Override - public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { - if (null != routeList && routeList.getWayPointsList().size() > 0){ - calculateRouteLineSum(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,routeList.getWayPointsList())); - startToRouteAndWipe(routeList.getWayPointsList()); - } - } - - }; - - private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() { - @Override - public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) { - TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage); - } - }; - - private final IMsgBoxEventListener iMsgBoxEventListener = new IMsgBoxEventListener() { - @Override - public void onBubbleReportClickEvent(@NonNull MsgBoxBean msgBoxBean) { - - } - - @Override - public void onBubbleV2XClickEvent(@NonNull MsgBoxBean msgBoxBean) { - - } - - @Override - public void onBubbleOperationClickEvent(@NonNull MsgBoxBean msgBoxBean) { - - } - - @Override - public void onUpdateTipEvent(boolean isShow) { - - } - - @Override - public void onSummaryClickEvent() { - if (mCurrentOCHOrder == null){ - ToastUtils.showLong("行程已结束"); - }else { - OverlayLeftViewUtils.INSTANCE.transmissionIndexGet(OverlayLeftViewUtils.OVERVIEW); - } - } - }; - - public void startToRouteAndWipe(List models) { - List locationsModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjLocations(mContext,models); - mLocationsModels.clear(); - mLocationsModels.addAll(locationsModels); - startOrStopRouteAndWipe(true); - showRottingMapView(); - } - - public void showRottingMapView(){ - AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi(); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.showRottingMapView(); - } - } - - public void startNaviByAmap() { - if (mCurrentOCHOrder != null && - mCurrentOCHOrder.orderStatus == TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode()){ - AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi(); - - double orderEndStationLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); - double orderEndStationLng = mCurrentOCHOrder.endSiteGcjPoint.get(0); - NaviLatLng startNaviLatLng = new NaviLatLng(mLatitude, mLongitude); - NaviLatLng endNaviLatLng = new NaviLatLng(orderEndStationLat,orderEndStationLng); - AmapNaviToDestinationModel.getInstance(mContext).initAMapNavi(startNaviLatLng, endNaviLatLng); - AmapNaviToDestinationModel.getInstance(mContext).setVoiceIsMute(false); - } - } - - /** - * 实时轨迹擦除 - * @param isStart - */ - public void startOrStopRouteAndWipe(boolean isStart){ - - } - - /** - * 设置小地图路径的起终点marker - */ - public void setRouteLineMarker(){ - if (mCurrentOCHOrder.startSiteGcjPoint == null || mCurrentOCHOrder.startSiteGcjPoint.isEmpty() || mCurrentOCHOrder.startSiteGcjPoint.size() < 2|| - mCurrentOCHOrder.endSiteGcjPoint == null || mCurrentOCHOrder.endSiteGcjPoint.isEmpty() || mCurrentOCHOrder.endSiteGcjPoint.size() < 2) { - setMarker(null,null); - return; - } - LatLng startStation = new LatLng(mCurrentOCHOrder.startSiteGcjPoint.get(1),mCurrentOCHOrder.startSiteGcjPoint.get(0)); - LatLng endStation = new LatLng(mCurrentOCHOrder.endSiteGcjPoint.get(1),mCurrentOCHOrder.endSiteGcjPoint.get(0)); - setMarker(startStation,endStation); - } - - private void setMarker(LatLng startStation,LatLng endStation){ - if (mAutopilotPlanningCallback != null) { - mAutopilotPlanningCallback.setLineMarker(startStation,endStation); - } - } - - /** - * 限速监听 - */ - private final ILimitingVelocityListener limitingVelocityListener = new ILimitingVelocityListener(){ - - @Override - public void onUnion(int limitingVelocity, @NonNull DataSourceType sourceType) { - - } - - @Override - public void onLimitingVelocityChange(int limitingVelocity, DataSourceType dataSourceType) { - if (mVeloctityCallback != null){ - mVeloctityCallback.onLimitingVelocityChange(limitingVelocity); - } - } - }; - - /** - * 导航订单起点到终点 获得剩余时间,里程,预计到达时间 - */ - public void initGeocodeSearch() { - if (mCurrentOCHOrder != null){ - TaxiPassengerGeocodeSearchModel.getInstance(mContext).initGeocodeSearch(); - TaxiPassengerGeocodeSearchModel.getInstance(mContext).setOCHTaciNaviChangedCallback(this); - } - } - - public void destoryGeocodeSearch(){ - TaxiPassengerGeocodeSearchModel.getInstance(mContext).destroyGeocodeSearch(); - } - - public void startOrStopQueryOrderRemaining(boolean isStart){ - if (isStart){ - TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingLoop(); - }else { - TaxiPassengerModelLoopManager.getInstance().stopQueryOrderRemainingLoop(); - } - } - - /** - * 查询订单剩余里程和时间 - */ - public void queryOrderRemaining(){ - if (mCurrentOCHOrder == null) return; - TaxiPassengerServiceManager.queryOrderRemaining(mContext, mCurrentOCHOrder.orderNo, new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerOrderQueryRemainingResp data) { - if (data != null && data.data!=null){ - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"distance = "+data.data.distance+" ,duration = "+data.data.duration); - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderDistToEndChanged(data.data.distance,data.data.duration); - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - public void queryOrderRouteList() { - if (mCurrentOCHOrder == null) return; - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- queryOrderRouteList"); - TaxiPassengerServiceManager.queryOrderRouteList(mContext, mCurrentOCHOrder.orderNo, new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerQueryOrderRouteResp data) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route---"+GsonUtil.jsonFromObject(data)); - if (data != null && data.data != null && data.data != null && data.data.size() > 0){ - if (mAutopilotPlanningCallback != null){ - calculateRouteLineSum(data.data); -// if (mAutopilotPlanningCallback != null){ -// mAutopilotPlanningCallback.setLineMarker(data.data); -// } - mLocationsModels.clear(); - List locationsModels = CoordinateCalculateRouteUtil. - coordinateConverterLatlngToLocation(data.data); - mLocationsModels.addAll(locationsModels); - startOrStopRouteAndWipe(true); - } - }else { - subscribe = Observable.timer(delayTime, TimeUnit.SECONDS).subscribe(aLong -> { - queryOrderRouteList(); - }); - } - } - - @Override - public void onFail(int code, String msg) { - subscribe = Observable.timer(delayTime, TimeUnit.SECONDS).subscribe(aLong -> { - queryOrderRouteList(); - }); - } - }); - } - - @Override - public void onCurrentRoadName(String currentRoadName) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentRoadName(currentRoadName); - } - } - - /** - * 订单结束或者取消的时候, 刷新导航标识位以及缓存的数据 - */ - public void recoverNaviInfo(){ - SharedPrefsMgr.getInstance(mContext).remove(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS); - } - - public void calculateRouteLineSum(List points){ - float sumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(points); - SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,(int) sumLength); - } - - public void checkPhoneAndUpdateStatus(String phoneTail,ITaxiPassengerCommonCallback commonCallback) { - if (mCurrentOCHOrder == null) return; - TaxiPassengerServiceManager.checkPhoneAndUpdateOrderStatus(mContext, mCurrentOCHOrder.orderNo, - phoneTail, new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerBaseRespBean data) { - if (data != null && data.code == 0 && mCurrentOCHOrder != null){ - //乘客验证成功,更新订单状态为 "乘客已上车", 立马弹出乘客开始行程页面,不再等待轮询 - mCurrentOCHOrder.orderStatus = TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode(); - if (mOrderStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } - } - if(commonCallback!=null) { - commonCallback.onCommonCallback(); - } - - } - - @Override - public void onError() { - ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!"); - } - - @Override - public void onFail(int code, String msg) { - ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!"); - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"提交用户输入的手机后4位、并进行状态扭转 后台结果错误"+code+msg); - } - }); - } - - public void arrivedAndScore(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean , ITaxiPassengerCommonValueCallback commonCallback) { - if (taxiPassengerScoreUpdateOrderReqBean.orderNo == null) return; - TaxiPassengerServiceManager.arrivedAndScore(mContext,taxiPassengerScoreUpdateOrderReqBean, - new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerBaseRespBean data) { - if(commonCallback!=null) { - commonCallback.onCommonCallback(true); - } - } - - @Override - public void onError() { - ToastUtils.showLong("网络错误请稍后再试"); - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"对订单进行打分 1-5分 网络错误"); - if(commonCallback!=null) { - commonCallback.onCommonCallback(false); - } - } - - @Override - public void onFail(int code, String msg) { - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"对订单进行打分 1-5分 后台结果错误"+code+msg); - if(commonCallback!=null) { - commonCallback.onCommonCallback(false); - } - } - }); - } - - public void loopQueryPilotStatus(){ - if (mCurrentOCHOrder == null) return; - TaxiPassengerServiceManager.queryPilotStatus(mContext, mCurrentOCHOrder.orderNo, - new OchCommonServiceCallback() { - @Override - public void onSuccess(TaxiPassengerBaseRespBean data) { - if (data != null && data.code == 0 && data.data.equals(true)) { - updateAutopilotStatus(true); - startOrStopReadyToAutopilotLoop(false); - } - } - - @Override - public void onFail(int code, String msg) { - updateAutopilotStatus(false); - } - }); - } - - public void updateAutopilotStatus(boolean isBoarded){ - if (mOrderStatusCallbackMap.size() > 0) { - for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ - callback.onDriverHasCheckedPilotCondition(isBoarded); - } - } - } - - public void startDriverReadyToAutopilotLoop(){ - if (NetworkUtils.isConnected(mContext)) { - startOrStopReadyToAutopilotLoop(true); - } - } - - public void startOrStopReadyToAutopilotLoop(boolean isStart) { - if (isStart){ - TaxiPassengerModelLoopManager.getInstance().startReadyToAutopilot(); - }else { - TaxiPassengerModelLoopManager.getInstance().stopReadyToAutopilot(); - } - } - - public void startServicePilotDone(){ - if (mCurrentOCHOrder == null) return; - TaxiPassengerStartReqBean.Result result = new TaxiPassengerStartReqBean.Result(); - result.lat = mLatitude; - result.lon = mLongitude; - TaxiPassengerServiceManager.startServicePilotDone(mContext, - mCurrentOCHOrder.orderNo, result, - new OchCommonServiceCallback(){ - - @Override - public void onSuccess(TaxiPassengerBaseRespBean data) { - - } - - @Override - public void onFail(int code, String msg) { -// ToastUtils.showShort(msg); - } - }); - } - - public void startAutopilot() { - if (!checkCurrentOCHOrder()) { - CallerLogger.INSTANCE.e(M_TAXI_P + TAG, "no order or order is empty."); - ToastUtils.showShort("当前订单不存在或异常!"); - return; - } - - if (mCurrentOCHOrder.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode()){ - startServicePilotDone(); - } - - if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().getAutopilotAbilityStatus()) { - ToastUtils.showLong(OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason() + - ", 请稍候重试"); - - TaxiPassengerAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( - mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo, - OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason()); - return; - } - - AutopilotControlParameters parameters = initAutopilotControlParameters(); - if (parameters == null){ - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "AutopilotControlParameters is empty."); - return; - } - - CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters); - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "start autopilot with parameter: %s" - , GsonUtil.jsonFromObject(parameters) - + " ,startSiteName=" + mCurrentOCHOrder.startSiteAddr - + " ,endSiteName=" + mCurrentOCHOrder.endSiteAddr); - - - TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotEvent(false, false, - mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); - } - - private AutopilotControlParameters initAutopilotControlParameters() { - if (!checkCurrentOCHOrder()) { - CallerLogger.INSTANCE.e(M_TAXI_P + TAG, "no order or order is empty."); - ToastUtils.showShort("当前订单不存在或异常!"); - return null; - } - - AutopilotControlParameters parameters = new AutopilotControlParameters(); - double startWgsLon = mCurrentOCHOrder.startSitePoint.get(0); - double startWgsLat = mCurrentOCHOrder.startSitePoint.get(1); - double endWgsLon = mCurrentOCHOrder.endSitePoint.get(0); - double endWgsLat = mCurrentOCHOrder.endSitePoint.get(1); - - parameters.vehicleType = mCurrentOCHOrder.businessType; - parameters.startName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.startSiteAddr); // 起点名称拼音首字母大写:科学城B区2号门(KXCBQ2HM) - parameters.endName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.endSiteAddr); // 终点名称拼音首字母大写:科学城C区三号门(KXCCQSHM) - parameters.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon); - parameters.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon); - - if (parameters.autoPilotLine == null) { - parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( - mCurrentOCHOrder.lineId, - mCurrentOCHOrder.csvFileUrl, mCurrentOCHOrder.csvFileMd5, - mCurrentOCHOrder.txtFileUrl, mCurrentOCHOrder.txtFileMd5, - mCurrentOCHOrder.contrailSaveTime, mCurrentOCHOrder.carModel, - mCurrentOCHOrder.csvFileUrlDPQP, mCurrentOCHOrder.csvFileMd5DPQP, - mCurrentOCHOrder.txtFileUrlDPQP, mCurrentOCHOrder.txtFileMd5DPQP, - mCurrentOCHOrder.contrailSaveTimeDPQP); - } - - return parameters; - } - - /** - * 将业务订单信息保存,鹰眼可取用 - */ - public void updateAutopilotControlParameters() { - - AutopilotControlParameters parameters = initAutopilotControlParameters(); - if (null == parameters){ - CallerLogger.INSTANCE.e(M_TAXI_P + TAG, "AutopilotControlParameters is empty."); - return; - } - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "AutopilotControlParameters is update."); - CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(parameters); - } - - public void clearAutopilotControlParameters(){ - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "AutopilotControlParameters is clear."); - CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(null); - } - - - private void runOnUIThread(Runnable executor) { - if (executor == null) { - return; - } - if (Looper.myLooper() != Looper.getMainLooper()) { - UiThreadHandler.post(executor); - } else { - executor.run(); - } - } - - public void setStation(){ - if(mCurrentOCHOrder!=null){ - MogoLocation startStation = new MogoLocation(); - startStation.setLongitude(mCurrentOCHOrder.startSiteGcjPoint.get(0)); - startStation.setLatitude(mCurrentOCHOrder.startSiteGcjPoint.get(1)); - MogoLocation endStation = new MogoLocation(); - endStation.setLongitude(mCurrentOCHOrder.endSiteGcjPoint.get(0)); - endStation.setLatitude(mCurrentOCHOrder.endSiteGcjPoint.get(1)); - TrajectoryAndDistanceManager.INSTANCE.setStationPoint(startStation,endStation,mCurrentOCHOrder.lineId); - } - } - - public void cleanStation(){ - TrajectoryAndDistanceManager.INSTANCE.setStationPoint(null,null,-1L); - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt new file mode 100644 index 0000000000..fa4b262c37 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.kt @@ -0,0 +1,385 @@ +package com.mogo.och.taxi.passenger.model + +import android.annotation.SuppressLint +import android.content.Context +import android.net.ConnectivityManager +import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager +import com.mogo.commons.module.intent.IMogoIntentListener +import com.mogo.commons.module.intent.IntentManager +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.data.map.MogoLocation +import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener +import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager +import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.callback.OchAdasStartFailureCallback +import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager +import com.mogo.och.common.module.manager.OCHAdasAbilityManager +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener +import com.mogo.och.common.module.manager.distancemamager.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.RxUtils +import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean +import com.mogo.och.taxi.passenger.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.network.TaxiPassengerServiceManager +import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager +import java.util.concurrent.ConcurrentHashMap + +/** + * Created by pangfan on 2021/8/19 + * + * 网约车 - 出租车业务逻辑处理 + */ +@SuppressLint("StaticFieldLeak") +object TaxiPassengerModel { + + private var mContext: Context? = null + + private val TAG = TaxiPassengerModel::class.java.simpleName + + private const val STARTREADYTOAUTOPILOT = "startReadyToAutopilot" + private const val MINANDWAITSERVICE = "mInAndWaitService" + private const val MQUERYORDERREMAINING = "mQueryOrderRemaining" + + // 获取当前订单 + @Volatile + var currentOCHOrder: TaxiPassengerOrderQueryRespBean.Result? = null//当前订单 + + private val mOrderStatusCallbackMap: MutableMap = ConcurrentHashMap() + + fun setOrderStatusCallback(tag: String?, callback: IOCHTaxiPassengerOrderStatusCallback?) { + if (tag == null || "" == tag) return + if (callback == null) { + mOrderStatusCallbackMap.remove(tag) + return + } + mOrderStatusCallbackMap[tag] = callback + } + + fun init(context: Context) { + mContext = context.applicationContext + initListeners() + RxUtils.errCatch() + startOrStopOrderLoop() + } + + /** + * 订单轮询 初始化主Fragment的Presenter init 调用 + */ + private fun startOrStopOrderLoop() { + if (NetworkUtils.isConnected(mContext)) { + startOrStopOrderLoop(true) + } + } + + /** + * 关闭订单轮训 页面摧毁时 + */ + fun release() { + startOrStopOrderLoop(false) + //startOrStopQueryOrderRemaining(false) + releaseListeners() + } + + private fun initListeners() { + + // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 + IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + + AbnormalFactorsLoopManager.startLoopAbnormalFactors(mContext!!) + + //开启自驾后 异常信息返回 + OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener) + CallerMsgBoxEventListenerManager.addListener(TAG, iMsgBoxEventListener) + TrajectoryAndDistanceManager.addDistanceListener(TAG, distanceListener) + } + + private fun releaseListeners() { + MogoAiCloudSocketManager.getInstance(mContext).unregisterLifecycleListener(10010) + AbnormalFactorsLoopManager.stopLoopAbnormalFactors() + OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null) + CallerMsgBoxEventListenerManager.removeListener(iMsgBoxEventListener) + TrajectoryAndDistanceManager.removeListener(TAG) + } + + /** + * 订单轮训 + * @param start true 开启订单轮训 + * false 关闭订单轮训 + */ + private fun startOrStopOrderLoop(start: Boolean) { + d(M_TAXI_P + TAG, "startOrStopOrderLoop() $start") + if (start) { + BizLoopManager.setLoopFunction(MINANDWAITSERVICE,LoopInfo(2, TaxiPassengerModel::queryInAndWaitOrders)) + } else { + BizLoopManager.removeLoopFunction(MINANDWAITSERVICE) + } + } + + /** + * 查询订单状态:进行中/待服务(轮询防止因crash导致应用重启、断网没收到推送等) + * + * 注:只有在本地缓存mCurrentOCHOrder为null时(已完成or已取消有明确结果)或id相同且status不同时, + * 才更新最新进行中单到本地 + */ + private fun queryInAndWaitOrders() { + TaxiPassengerServiceManager.queryOrdersInAndWaitService( + object : OchCommonServiceCallback { + override fun onSuccess(data: TaxiPassengerOrdersInServiceQueryRespBean) { + if (data.data == null) { + if(currentOCHOrder!=null){ + queryCurOrderStatus() + } + return + } + //1. 处理进行中订单 + if (data.data.servicing != null && data.data.servicing.isNotEmpty()) { + // 1.1. 当存在进行中单时:对本地currentOrder进行更新 + val currentOrder = data.data.servicing[0] + if(currentOCHOrder==null||currentOCHOrder?.orderStatus!=currentOrder.orderStatus){ + currentOCHOrder = currentOrder + orderStatusChange() + }else { + currentOCHOrder = currentOrder + } + }else{ + if(currentOCHOrder!=null){ + queryCurOrderStatus() + } + } + } + + override fun onError() { + e(M_TAXI_P + TAG, "queryInAndWaitOrders onError") + } + override fun onFail(code: Int, msg: String) { + e(M_TAXI_P + TAG, "queryInAndWaitOrders$code$msg") + } + }) + } + + //仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder + private fun queryCurOrderStatus() { + currentOCHOrder?.orderNo?.let { + TaxiPassengerServiceManager.queryOrderById( + mContext!!, it, + object : OchCommonServiceCallback { + override fun onSuccess(data: TaxiPassengerOrderQueryRespBean) { + if (data.data != null && currentOCHOrder != null && currentOCHOrder!!.orderNo == data.data.orderNo) { + if (data.data.orderStatus == TaxiPassengerOrderStatusEnum.Cancel.code || data.data.orderStatus == TaxiPassengerOrderStatusEnum.JourneyCompleted.code || data.data.orderStatus == TaxiPassengerOrderStatusEnum.None.code) { + currentOCHOrder = data.data + orderStatusChange() + currentOCHOrder = null + } else { + currentOCHOrder = data.data + orderStatusChange() + } + } + } + + override fun onFail(code: Int, msg: String) {} + }) + } + } + + // 获取当前订单状态 + val curOrderStatus: TaxiPassengerOrderStatusEnum + get() { + val order: TaxiPassengerOrderQueryRespBean.Result = + currentOCHOrder + ?: return TaxiPassengerOrderStatusEnum.None + return valueOf(order.orderStatus) + } + + //监听网络变化,避免启动机器时无网导致无法更新订单信息 + private val distanceListener: IDistanceListener = object : IDistanceListener { + var allDistance = 0f + override fun stationDistanceCallback(stationDistance: Float) { + allDistance = stationDistance + } + + override fun distanceCallback(distance: Float) { + + val lastTime: Double = distance / TaxiPassengerConst.TAXI_AVERAGE_SPEED * 3.6 //秒 + + for (callback in mOrderStatusCallbackMap.values) { + callback.onCurrentOrderDistToEndChanged(distance.toLong(),lastTime.toLong(),allDistance.toInt()) + } + } + } + private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent -> + d(M_TAXI_P + TAG, "onIntentReceived = %s", intentStr) + if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) { + if (NetworkUtils.isConnected(mContext)) { + startOrStopOrderLoop(true) + } + } + } + + private val mAdasStartFailureListener: OchAdasStartFailureCallback = object : OchAdasStartFailureCallback { + override fun onStartAutopilotFailure(startFailedCode: String, startFailedMessage: String) { + TaxiPassengerAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage) + } + } + private val iMsgBoxEventListener: IMsgBoxEventListener = object : IMsgBoxEventListener { + override fun onSummaryClickEvent() { + if (currentOCHOrder == null) { + ToastUtils.showLong("行程已结束") + } else { + for (callback in mOrderStatusCallbackMap.values) { + callback.onMessageGo2OverMapview() + } + } + } + } + + fun checkPhoneAndUpdateStatus( + phoneTail: String?, + commonCallback: ITaxiPassengerCommonCallback? + ) { + if (currentOCHOrder == null) return + TaxiPassengerServiceManager.checkPhoneAndUpdateOrderStatus( + currentOCHOrder!!.orderNo, + phoneTail, object : OchCommonServiceCallback { + override fun onSuccess(data: TaxiPassengerBaseRespBean) { + if (data.code == 0 && currentOCHOrder != null) { + currentOCHOrder!!.orderStatus = TaxiPassengerOrderStatusEnum.UserArriveAtStart.code + //乘客验证成功,更新订单状态为 "乘客已上车", 立马弹出乘客开始行程页面,不再等待轮询 + orderStatusChange() + VoiceNotice.showNotice("验证成功!关闭车门并佩戴安全带后开启行程吧!", AIAssist.LEVEL2) + } + commonCallback?.onCommonCallback() + } + + override fun onFail(code: Int, msg: String) { + ToastUtils.showLong("当前网络异常,请重新验证;若始终异常,请您在手机端取消行程,给您带来不便,十分抱歉!") + e( + M_TAXI_P + TAG, + "提交用户输入的手机后4位、并进行状态扭转 后台结果错误$code$msg" + ) + } + }) + } + + fun orderStatusChange(){ + orderStatusChangeInner() + if (mOrderStatusCallbackMap.isNotEmpty()) { + d(M_TAXI_P + TAG, "最新的状态${curOrderStatus}") + for (callback in mOrderStatusCallbackMap.values) { + callback.onCurrentOrderStatusChanged(currentOCHOrder) + } + } + } + + private fun orderStatusChangeInner() { + when (curOrderStatus) { + TaxiPassengerOrderStatusEnum.OnTheWayToStart -> { + } + TaxiPassengerOrderStatusEnum.ArriveAtStart -> { + } + TaxiPassengerOrderStatusEnum.UserArriveAtStart -> { + //开启轮询司机是否已准备好开启自动驾驶的环境 + setStation() + } + TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { + CallerFuncBizManager.bizProvider.queryV2XEvents() //全览模式的V2X事件轮询开始 + //startOrStopQueryOrderRemaining(true) + AutopilotManager.updateAutopilotControlParameters() + startOrStopReadyToAutopilotLoop(false) + setStation() + CallerOrderListenerManager.invokeOrderStatus(true) + } + TaxiPassengerOrderStatusEnum.ArriveAtEnd -> { + AutopilotManager.clearAutopilotControlParameters() + //startOrStopQueryOrderRemaining(false) + CallerOrderListenerManager.invokeOrderStatus(false) + cleanStation() + } + TaxiPassengerOrderStatusEnum.JourneyCompleted -> { + AutopilotManager.clearAutopilotControlParameters() + //startOrStopQueryOrderRemaining(false) + cleanStation() + } + TaxiPassengerOrderStatusEnum.Cancel -> { + AutopilotManager.clearAutopilotControlParameters() + //startOrStopQueryOrderRemaining(false) + startOrStopReadyToAutopilotLoop(false) + cleanStation() + } + TaxiPassengerOrderStatusEnum.None -> TODO() + } + } + + /** + * 查询司机是否已确认可开启自动驾驶 + */ + private fun loopQueryPilotStatus() { + if (currentOCHOrder == null) return + TaxiPassengerServiceManager.queryPilotStatus( + currentOCHOrder!!.orderNo, + object : OchCommonServiceCallback { + override fun onSuccess(data: TaxiPassengerBaseRespBean) { + if (data.code == 0 && data.data == true) { + updateAutopilotStatus(true) + startOrStopReadyToAutopilotLoop(false) + } + } + + override fun onFail(code: Int, msg: String) { + updateAutopilotStatus(false) + } + }) + } + + fun updateAutopilotStatus(isBoarded: Boolean) { + if (mOrderStatusCallbackMap.isNotEmpty()) { + for (callback in mOrderStatusCallbackMap.values) { + callback.onDriverHasCheckedPilotCondition(isBoarded) + } + } + } + + fun startOrStopReadyToAutopilotLoop(isStart: Boolean) { + if (isStart) { + BizLoopManager.setLoopFunction(STARTREADYTOAUTOPILOT, LoopInfo(1, TaxiPassengerModel::loopQueryPilotStatus)) + CallerLogger.i(M_TAXI_P + TAG, "startReadyToAutopilot()") + } else { + BizLoopManager.removeLoopFunction(STARTREADYTOAUTOPILOT) + CallerLogger.i(M_TAXI_P + TAG, "stopReadyToAutopilot()") + } + } + + fun setStation() { + if (currentOCHOrder != null) { + val startStation = MogoLocation() + startStation.longitude = currentOCHOrder!!.startSiteGcjPoint[0] + startStation.latitude = currentOCHOrder!!.startSiteGcjPoint[1] + val endStation = MogoLocation() + endStation.longitude = currentOCHOrder!!.endSiteGcjPoint[0] + endStation.latitude = currentOCHOrder!!.endSiteGcjPoint[1] + TrajectoryAndDistanceManager.setStationPoint(startStation, endStation, currentOCHOrder!!.lineId) + } + } + + fun cleanStation() { + TrajectoryAndDistanceManager.setStationPoint(null, null, -1L) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java deleted file mode 100644 index bb3ebec0dc..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.mogo.och.taxi.passenger.model; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; - -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; -import io.reactivex.schedulers.Schedulers; - -/** - * Created on 2021/9/10 - * - * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) - */ -public class TaxiPassengerModelLoopManager { - - private static final String TAG = TaxiPassengerModelLoopManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final TaxiPassengerModelLoopManager INSTANCE = new TaxiPassengerModelLoopManager(); - } - - public static TaxiPassengerModelLoopManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询 - private Disposable mQueryOrderRemainingDisposable; //心跳轮询 - private CompositeDisposable mRouteWipeDisposable; //轨迹擦除 - private Disposable mReadyToAutopilotDisposable; //轮询是否可开启自动驾驶 - - public void startReadyToAutopilot() { - if (mReadyToAutopilotDisposable != null && !mReadyToAutopilotDisposable.isDisposed()) { - return; - } - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startReadyToAutopilot()"); - mReadyToAutopilotDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, - TaxiPassengerConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> TaxiPassengerModel.getInstance().loopQueryPilotStatus()); - } - - public void stopReadyToAutopilot() { - if (mReadyToAutopilotDisposable != null) { - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopReadyToAutopilot()"); - mReadyToAutopilotDisposable.dispose(); - mReadyToAutopilotDisposable = null; - } - } - - public void stopRouteAndWipe() { - if (mRouteWipeDisposable != null) { - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopRouteAndWipe()"); - mRouteWipeDisposable.dispose(); - mRouteWipeDisposable = null; - } - } - - public void startInAndWaitOrdersLoop() { - if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { - return; - } - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startInAndWaitOrdersLoop()"); - mInAndWaitServiceDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, - TaxiPassengerConst.LOOP_PERIOD_2S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> TaxiPassengerModel.getInstance().queryInAndWaitOrders()); - } - - public void stopInAndWaitOrdersLoop() { - if (mInAndWaitServiceDisposable != null) { - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopInAndWaitOrdersLoop()"); - mInAndWaitServiceDisposable.dispose(); - mInAndWaitServiceDisposable = null; - } - } - - /** - * 轮训查下 查询订单剩余里程和时间 - */ - public void startQueryOrderRemainingLoop() { - if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) { - return; - } - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingLoop()"); - mQueryOrderRemainingDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, - TaxiPassengerConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> TaxiPassengerModel.getInstance().queryOrderRemaining()); - } - - public void stopQueryOrderRemainingLoop() { - if (mQueryOrderRemainingDisposable != null) { - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopQueryOrderRemainingLoop()"); - mQueryOrderRemainingDisposable.dispose(); - mQueryOrderRemainingDisposable = null; - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java deleted file mode 100644 index c1d1c3c5bd..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderCursor.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.mogo.och.taxi.passenger.mulprocess; - -import android.database.MatrixCursor; -import android.os.Bundle; -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; - -public class BinderCursor extends MatrixCursor { - - static final String KEY_BINDER = "binder"; - - Bundle mBinderExtra = new Bundle(); - - public static class BinderParcelable implements Parcelable { - - public IBinder mBinder; - - public static final Creator CREATOR = new Creator() { - @Override - public BinderParcelable createFromParcel(Parcel source) { - return new BinderParcelable(source); - } - - @Override - public BinderParcelable[] newArray(int size) { - return new BinderParcelable[size]; - } - }; - - BinderParcelable(IBinder binder) { - mBinder = binder; - } - - BinderParcelable(Parcel source) { - mBinder = source.readStrongBinder(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeStrongBinder(mBinder); - } - } - - public BinderCursor(String[] columnNames, IBinder binder) { - super(columnNames); - - if (binder != null) { - Parcelable value = new BinderParcelable(binder); - mBinderExtra.putParcelable(KEY_BINDER, value); - } - } - - @Override - public Bundle getExtras() { - return mBinderExtra; - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java deleted file mode 100644 index a5aedc83b1..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/BinderProvider.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.mogo.och.taxi.passenger.mulprocess; - -import static android.os.Binder.getCallingUid; - -import android.content.ContentProvider; -import android.content.ContentValues; -import android.database.Cursor; -import android.net.Uri; -import android.os.IBinder; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - - -public class BinderProvider extends ContentProvider { - - public static final String TAG = BinderProvider.class.getSimpleName(); - - public static final String AUTHORITY = "com.mogo.och.taxi.passenger.leftmenu"; - public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/binder"); - public static final String SERVICE_LEFTMENU = "lefmenu"; - - @Override - public boolean onCreate() { - return true; - } - - - @Override - public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { - getCallingUid(); - IBinder binder; - if (selectionArgs[0].equals(BinderProvider.SERVICE_LEFTMENU)) { - binder = new OrderServiceImpl(); - } else { - return null; - } - BinderCursor cursor = new BinderCursor(new String[]{"service"}, binder); - return cursor; - } - - - @Override - public String getType(Uri uri) {return null;} - - - @Override - public Uri insert(Uri uri, ContentValues values) {return null;} - - @Override - public int delete(Uri uri, String selection, String[] selectionArgs) {return 0;} - - @Override - public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {return 0;} -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/EmptyService.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/EmptyService.kt deleted file mode 100644 index 5d3a6ff53c..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/EmptyService.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.mogo.och.taxi.passenger.mulprocess - -import android.app.Service -import android.content.Context -import android.content.Intent -import android.os.IBinder - -class EmptyService: Service() { - - companion object{ - fun startService(context: Context){ - //预加载视频进程 - val intent = Intent(context, EmptyService::class.java) - context.startService(intent) - } - } - - override fun onBind(intent: Intent?): IBinder? { - // 加载进程的空Service - return null - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java deleted file mode 100644 index f98ac9cc33..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/mulprocess/OrderServiceImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.mogo.och.taxi.passenger.mulprocess; - -import android.os.RemoteException; - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen; -import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; - -public class OrderServiceImpl extends ILeftMenuService.Stub { - - public static final String TAG = "mulprocessOrderServiceImpl"; - - @Override - public void transmissionIndex(int index) throws RemoteException { - CallerLogger.INSTANCE.d(SceneConstant.M_TAXI_P + TAG, "跨进程 transmissionIndex"+index); - UiThreadHandler.post(() -> { - OverlayLeftViewUtils.INSTANCE.transmissionIndexGet(index); - }); - } - - @Override - public void registerCallback(ICallback cb) throws RemoteException { - CallerLogger.INSTANCE.d(SceneConstant.M_TAXI_P + TAG, "跨进程 registerCallback"); - LeftMenuOpen.INSTANCE.registerCallbackHost(cb); - } - - @Override - public void unRegisterCallback(ICallback cb) throws RemoteException { - CallerLogger.INSTANCE.d(SceneConstant.M_TAXI_P + TAG, "跨进程 unRegisterCallback"); - LeftMenuOpen.INSTANCE.unregisterCallbackHost(cb); - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java deleted file mode 100644 index e7c366c18a..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.mogo.och.taxi.passenger.network; -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.TaxiPassengerQueryOrderRouteResp; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean; - -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 by pangfan on 2021/8/19 - * - * 网约车-出租车接口定义 - */ -interface TaxiPassengerServiceApi { - - /** - * 查询全部服务中/待服务订单(没有的时候返回code 0,空列表) - * @param driverSn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET("/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderInService/query") - - Observable queryOrdersInAndWaitService(@Header("appId") String appId, @Header("ticket") String ticket, @Query("driverSn") String driverSn); - - - /** - * 通过orderNo查询订单信息(用于本地已经有orderNo时) - * @param data - * @return - * @deprecated v2.1_0930需求中暂不再使用此接口 - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/queryOrderById" ) - Observable queryOrderById(@Header ("appId") String appId,@Header("ticket") String ticket,@Body TaxiPassengerOrderQueryReqBean data); - - /** - * 查询订单剩余里程和时间 - * @param appId - * @param ticket - * @param orderNo - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining") - Observable queryOrderRemaining(@Header("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); - - /** - * 查询订单全路径 - * @param appId - * @param ticket - * @param orderNo - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) - @GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" ) - Observable queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); - - /** - * 提交用户输入的手机后4位、并进行状态扭转 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/verification/phone" ) - Observable checkPhoneAndUpdateOrderStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerCheckPhoneUpdateOrderReqBean data); - - /** - * 对订单进行打分 1-5分 加上文案评论 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/evaluation/info/driver/taxi/submit" ) - Observable arrivedAndScore(@Header ("appId") String appId, @Header("ticket") String ticket, @Body TaxiPassengerScoreUpdateOrderReqBean data); - - /** - * 获取星星对应的文案(所有文案) - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/evaluation/label/driver/taxi/list" ) - Observable getWorldAllStar(@Header ("appId") String appId, @Header("ticket") String ticket); - /** - * 获取星星对应的文案(和星星一一对应) - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/evaluation/label/driver/taxi/listByStar" ) - Observable getWorldByStar(@Header ("appId") String appId, @Header("ticket") String ticket,@Query("star") String star); - - /** - * 查询司机是否已确认可开启自动驾驶 - * @param appId - * @param ticket - * @param orderNo - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/pilot/status" ) - Observable queryPilotStatus(@Header ("appId") String appId - , @Header("ticket") String ticket,@Query("orderNo") String orderNo); - - /** - * 乘客屏启动自动驾驶成功 - * @param appId - * @param ticket - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/startServicePilot" ) - Observable startServicePilotDone(@Header ("appId") String appId - , @Header("ticket") String ticket,@Body TaxiPassengerStartReqBean data); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt new file mode 100644 index 0000000000..83c145f6d4 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.kt @@ -0,0 +1,146 @@ +package com.mogo.och.taxi.passenger.network + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +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 +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.Headers +import retrofit2.http.POST +import retrofit2.http.Query + +/** + * Created by pangfan on 2021/8/19 + * + * 网约车-出租车接口定义 + */ +internal interface TaxiPassengerServiceApi { + /** + * 查询全部服务中/待服务订单(没有的时候返回code 0,空列表) + * @param driverSn + * @return + */ + @Headers("Content-type:application/json;charset=UTF-8") + @GET("/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderInService/query") + fun queryOrdersInAndWaitService( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token, + @Query("driverSn") driverSn: String + ): Observable + + /** + * 通过orderNo查询订单信息(用于本地已经有orderNo时) + * @param data + * @return + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/order/v2/driver/taxi/passenger/queryOrderById") + fun queryOrderById( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token, + @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=MoGoAiCloudClientConfig.getInstance().token, + @Query("orderNo") orderNo: String + ): Observable + + /** + * 提交用户输入的手机后4位、并进行状态扭转 + * @param data + * @return + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/verification/phone") + fun checkPhoneAndUpdateOrderStatus( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token, + @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=MoGoAiCloudClientConfig.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=MoGoAiCloudClientConfig.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=MoGoAiCloudClientConfig.getInstance().token, + @Query("star") star: String + ): Observable + + /** + * 查询司机是否已确认可开启自动驾驶 + * @param appId + * @param ticket + * @param orderNo + * @return + */ + @Headers("Content-type:application/json;charset=UTF-8") + @GET("/autopilot-car-hailing/cab/flow/v1/driver/taxi/pilot/status") + fun queryPilotStatus( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String=MoGoAiCloudClientConfig.getInstance().token, + @Query("orderNo") orderNo: String + ): Observable + + /** + * 乘客屏启动自动驾驶成功 + * @param appId + * @param ticket + * @param data + * @return + */ + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/cab/flow/v1/driver/taxi/passenger/startServicePilot") + fun startServicePilotDone( + @Header("appId") appId: String = MoGoAiCloudClientConfig.getInstance().serviceAppId, + @Header("ticket") ticket: String= MoGoAiCloudClientConfig.getInstance().token, + @Body data: TaxiPassengerStartReqBean + ): Observable +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt index abd2453751..0adbc768ee 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt @@ -1,40 +1,61 @@ package com.mogo.och.taxi.passenger.network import android.content.Context -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean -import com.mogo.cloud.passport.MoGoAiCloudClientConfig +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.TaxiPassengerQueryOrderRouteResp -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean 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 +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P 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 +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean /** * Created by pangfan on 2021/8/19 */ object TaxiPassengerServiceManager { - private val mOCHTaxiServiceApi: TaxiPassengerServiceApi = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create( - TaxiPassengerServiceApi::class.java - ) + private val mOCHTaxiServiceApi: TaxiPassengerServiceApi = + MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(TaxiPassengerServiceApi::class.java) + + private const val TAG = "TaxiPassengerServiceManager" + + private var draiverSnCacher = "" /** - * 获取司机端的sn + * 获取Bus司机端的sn * @return */ - private val driverAppSn: String - get() = getServerToken() + val draiverSn: String + get(){ + val serverToken = CallerTelematicManager.getServerToken() + if (serverToken != draiverSnCacher && serverToken.isNotEmpty()) { + draiverSnCacher = serverToken + } + return draiverSnCacher + } + val context:Context + get() { + return AbsMogoApplication.getApp() + } + private fun beforeNet():Boolean{ + if (draiverSn.isBlank()) { + CallerLogger.e(M_TAXI_P + TAG, "没有司机屏sn 请稍等在请求") + return true + } + return false + } /** * 查询全部服务中/待服务订单列表 * @param context @@ -42,14 +63,12 @@ object TaxiPassengerServiceManager { */ @JvmStatic fun queryOrdersInAndWaitService( - context: Context, callback: OchCommonServiceCallback? ) { - mOCHTaxiServiceApi.queryOrdersInAndWaitService( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - driverAppSn - ) //获取到司机端的sn + if(beforeNet()){ + return + } + mOCHTaxiServiceApi.queryOrdersInAndWaitService(driverSn = draiverSn) //获取到司机端的sn .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrdersInAndWaitService")) } @@ -62,31 +81,70 @@ object TaxiPassengerServiceManager { */ @JvmStatic fun queryOrderRemaining( - context: Context, - orderNo: String?, + orderNo: String, callback: OchCommonServiceCallback? ) { - mOCHTaxiServiceApi.queryOrderRemaining( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - orderNo - ) + mOCHTaxiServiceApi.queryOrderRemaining(orderNo= orderNo) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRemaining")) } + @JvmStatic - fun queryOrderRouteList( - context: Context, + fun checkPhoneAndUpdateOrderStatus( orderNo: String?, - callback: OchCommonServiceCallback? + phone: String?, + callback: OchCommonServiceCallback? ) { - mOCHTaxiServiceApi.queryOrderRoute( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - orderNo - ) + mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus(data= TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo, phone)) .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRouteList")) + .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, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.queryPilotStatus(orderNo = orderNo) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryPilotStatus")) + } + @JvmStatic + fun startServicePilotDone( + orderNo: String?, loc: TaxiPassengerStartReqBean.Result?, + callback: OchCommonServiceCallback? + ) { + if(beforeNet()){ + return + } + mOCHTaxiServiceApi.startServicePilotDone(data = TaxiPassengerStartReqBean(draiverSn, orderNo, loc)) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "startServicePilotDone")) + } + @JvmStatic + fun getWorldByStar( + start: String, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.getWorldByStar(star=start) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) } /** @@ -96,104 +154,19 @@ object TaxiPassengerServiceManager { * @param callback */ @JvmStatic - @Deprecated("v2.1_0930需求中暂不再使用此接口") fun queryOrderById( context: Context, orderNo: String?, callback: OchCommonServiceCallback? ) { + if(beforeNet()){ + return + } mOCHTaxiServiceApi.queryOrderById( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - TaxiPassengerOrderQueryReqBean(driverAppSn, orderNo) + data=TaxiPassengerOrderQueryReqBean(draiverSn, orderNo) ) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderById")) } - @JvmStatic - fun checkPhoneAndUpdateOrderStatus( - context: Context, - orderNo: String?, - phone: String?, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo, phone) - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) - } - @JvmStatic - fun arrivedAndScore( - context: Context, - taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean?, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.arrivedAndScore( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - taxiPassengerScoreUpdateOrderReqBean - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) - } - @JvmStatic - fun getAllScoreWorld( - context: Context, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.getWorldAllStar( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "arrivedAndScore")) - } - @JvmStatic - fun queryPilotStatus( - context: Context, - orderNo: String?, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.queryPilotStatus( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - orderNo - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "queryPilotStatus")) - } - @JvmStatic - fun startServicePilotDone( - context: Context, - orderNo: String?, - loc: TaxiPassengerStartReqBean.Result?, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.startServicePilotDone( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - TaxiPassengerStartReqBean( - driverAppSn, orderNo, loc - ) - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "startServicePilotDone")) - } - @JvmStatic - fun getWorldByStar( - context: Context, - start: String?, - callback: OchCommonServiceCallback? - ) { - mOCHTaxiServiceApi.getWorldByStar( - MoGoAiCloudClientConfig.getInstance().serviceAppId, - MoGoAiCloudClientConfig.getInstance().token, - start - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) - } - + + } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java deleted file mode 100644 index 655a1a1f6c..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.mogo.och.taxi.passenger.presenter; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.os.Looper; - -import androidx.annotation.NonNull; -import androidx.lifecycle.LifecycleOwner; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.mvp.Presenter; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.common.module.manager.OCHAdasAbilityManager; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; -import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel; -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; -import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; -import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen; - -/** - * @author: wangmingjun - * @date: 2022/3/4 - */ -public class BaseTaxiPassengerPresenter extends Presenter implements - IOCHTaxiPassengerADASStatusCallback, IOCHTaxiPassengerControllerStatusCallback, - IOCHTaxiPassengerOrderStatusCallback { - - private static final String TAG = BaseTaxiPassengerPresenter.class.getSimpleName(); - - private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentPassengerOrder = null; //当前订单 - - public BaseTaxiPassengerPresenter(TaxiPassengerBaseFragment view) { - super(view); - TaxiPassengerModel.getInstance().init(AbsMogoApplication.getApp()); - OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); - initListeners(); - } - - @Override - public void onCreate( @NonNull LifecycleOwner owner ) { - super.onCreate( owner ); - CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "网约车-出租车拿到订单" ); - } - - @Override - public void onDestroy( @NonNull LifecycleOwner owner ) { - super.onDestroy( owner ); - - releaseListeners(); - TaxiPassengerModel.getInstance().release(); - OCHAdasAbilityManager.getInstance().release(); - } - - private void initListeners() { - TaxiPassengerModel.getInstance().setADASStatusCallback(this); - TaxiPassengerModel.getInstance().setOrderStatusCallback("BaseTaxiPassengerPresenter",this); - TaxiPassengerModel.getInstance().setControllerStatusCallback("BaseTaxiPassengerPresenter",this); - } - - private void releaseListeners() { - TaxiPassengerModel.getInstance().setADASStatusCallback(null); - TaxiPassengerModel.getInstance().setOrderStatusCallback("BaseTaxiPassengerPresenter",null); - TaxiPassengerModel.getInstance().setControllerStatusCallback("BaseTaxiPassengerPresenter",null); - } - - private void runOnUIThread( Runnable executor ) { - if ( executor == null ) { - return; - } - if ( Looper.myLooper() != Looper.getMainLooper() ) { - UiThreadHandler.post( executor ); - } else { - executor.run(); - } - } - - // 获取当前订单状态 - public TaxiPassengerOrderStatusEnum getCurOrderStatus() { - return TaxiPassengerModel.getInstance().getCurOrderStatus(); - } - - public void startOrStopOrderLoop(){ - TaxiPassengerModel.getInstance().startOrStopOrderLoop(); - } - - @Override - public void onAutopilotArriveEnd() { - - } - - @Override - public void onAutopilotEnable() { - runOnUIThread(() -> mView.onAutopilotStatusChanged( - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)); - } - - @Override - public void onAutopilotDisable() { - runOnUIThread(() -> mView.onAutopilotStatusChanged( - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)); - } - - @Override - public void onAutopilotRunning() { - runOnUIThread(() -> mView.onAutopilotStatusChanged( - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)); - } - - @Override - public void onVRModeChanged(boolean isVRMode) { - runOnUIThread(() -> mView.switchVRFlatMode(isVRMode)); - } - - @Override - public void onCarLocationChanged(MogoLocation location) { - // 速度不用展示 - // LeftMenuOpen.INSTANCE.callCallBack(-1,-1,location.getSpeed()); - } - - @Override - public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { -// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order)); - if (mCurrentPassengerOrder == null){ - mCurrentPassengerOrder = order; //当前无订单 - updateOrderView(order); - }else if (mCurrentPassengerOrder.orderStatus != order.orderStatus) { - mCurrentPassengerOrder = order; - updateOrderView(order); - } - } - - @Override - public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { - LeftMenuOpen.INSTANCE.callCallBack(meters,timeInSecond,-1); - } - - @Override - public void onCurrentRoadName(String currentRoadName) { - - } - - @Override - public void onDriverHasCheckedPilotCondition(boolean isBoarded) { - CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"isBoarded = "+isBoarded); - runOnUIThread(() -> { - mView.updateStartAutopilotBtnStatus(isBoarded); - }); - } - - private void updateOrderView(TaxiPassengerOrderQueryRespBean.Result order) { - CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"updateOrderView = "+order.orderStatus); - // 70 取消订单 - if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus){ - runOnUIThread(() -> { - mView.showOrHideServingOrderFragment(false,true); - mView.showOrHideOverMapViewFragment(false); - mView.showOrHideStartAutopilotView(false,false); - mView.showOrHidePressengerCheckPager(false, "", - "", "", "", ""); - mView.showOrHideArrivedEndLayout(false,"",""); - }); - TaxiPassengerModel.getInstance().recoverNaviInfo(); - TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); - TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotLoop(false); - TaxiPassengerModel.getInstance().cleanStation(); - return; - } - // 20 司机到达上车点 - if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus) { - runOnUIThread(() -> { - mView.preOrderThankPageTenlogic(order.startSiteAddr, - order.endSiteAddr, order.passengerNum, order.carNumber, order.passengerPhone); - }); - return; - } - // TODO: 2022/6/10 若乘客端确认已经上车,则显示开始行程按钮 并且不可点击 暗 - // TODO: 2022/6/10 乘客已上车 需要开启轮询司机确认可以开启自动驾驶的接口 - // TODO: 2022/6/10 若司机端已经确认,则显示开始行程按钮 并且可点击,第二步的轮询停止 - //TODO: 2022/6/10 若订单取消或者隐藏则关掉开始行程界面,轮询也要取消 - if (TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus){ - runOnUIThread(() ->{ - CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"UserArriveAtStart"); - mView.showOrHideStartAutopilotView(true,false); - }); - //开启轮询司机是否已准备好开启自动驾驶的环境 - TaxiPassengerModel.getInstance().startDriverReadyToAutopilotLoop(); - TaxiPassengerModel.getInstance().setStation(); - } - if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ - runOnUIThread(() ->{ - mView.showOrHideStartAutopilotView(false,false); - mView.showOrHideServingOrderFragment(true,true); - }); - TaxiPassengerModel.getInstance().startOrStopReadyToAutopilotLoop(false); - TaxiPassengerModel.getInstance().setStation(); - } - // 30 用户到达上车点 并通过了手机号后四位验证 - // 40 服务中 - if (TaxiPassengerOrderStatusEnum.UserArriveAtStart.getCode() == order.orderStatus - || TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ - runOnUIThread(() -> { - mView.showOrHideArrivedEndLayout(false,"",""); - mView.showOrHidePressengerCheckPager(false, "", - "", "", "", ""); - if(TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ - CallerOrderListenerManager.INSTANCE.invokeOrderStatus(true); - } - }); - return; - } - - // 50 到达终点 乘客可以评价 - if (TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus){ - TaxiPassengerModel.getInstance().recoverNaviInfo(); - TaxiPassengerModel.getInstance().startOrStopRouteAndWipe(false); - TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); - mView.showOrHideOverMapViewFragment(false); - runOnUIThread(() -> { - mView.showOrHideServingOrderFragment(false,true); - mView.showOrHideArrivedEndLayout(true, order.endSiteAddr,order.orderNo); - CallerOrderListenerManager.INSTANCE.invokeOrderStatus(false); - }); - TaxiPassengerModel.getInstance().cleanStation(); - return; - } - // 60 服务完成 页面 - if (TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){ - TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); - mCurrentPassengerOrder = null; - TaxiPassengerModel.getInstance().cleanStation(); - return; - } - } - - public void checkAndUpdateStatus(String phone){ - TaxiPassengerModel.getInstance().checkPhoneAndUpdateStatus(phone, new ITaxiPassengerCommonCallback() { - @Override - public void onCommonCallback() { - mView.showOrHidePressengerCheckPager(false,"","","","",""); - } - }); - } - - /** - * 封装请求 - */ - public void arrivedAndScore(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean){ - TaxiPassengerModel.getInstance().arrivedAndScore(taxiPassengerScoreUpdateOrderReqBean,aBoolean -> mView.showArrivedEndLayout2Thank(aBoolean)); - } - - /** - * 开启自动驾驶 - */ - public void startAutopilot(){ - TaxiPassengerModel.getInstance().startAutopilot(); - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt new file mode 100644 index 0000000000..11d638c265 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.kt @@ -0,0 +1,160 @@ +package com.mogo.och.taxi.passenger.presenter + +import androidx.lifecycle.LifecycleOwner +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.mvp.Presenter +import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager +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.common.module.manager.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.model.AutopilotManager +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment + +/** + * @author: wangmingjun + * @date: 2022/3/4 + */ +class BaseTaxiPassengerPresenter(view: TaxiPassengerBaseFragment?) : + Presenter(view), IOCHTaxiPassengerOrderStatusCallback { + + init { + TaxiPassengerModel.init(AbsMogoApplication.getApp()) + OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()) + initListeners() + } + + override fun onCreate(owner: LifecycleOwner) { + super.onCreate(owner) + d(SceneConstant.M_TAXI_P + TAG, "网约车-出租车拿到订单") + } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + releaseListeners() + TaxiPassengerModel.release() + OCHAdasAbilityManager.getInstance().release() + } + + private fun initListeners() { + TaxiPassengerModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", this) + } + + private fun releaseListeners() { + TaxiPassengerModel.setOrderStatusCallback("BaseTaxiPassengerPresenter", null) + } + + override fun onCurrentOrderStatusChanged(order: TaxiPassengerOrderQueryRespBean.Result?) { + order?.let { + updateOrderView(order) + } + } + + override fun onCurrentOrderDistToEndChanged( + meters: Long, + timeInSecond: Long, + stationDistance: Int + ) { + } + + private fun updateOrderView(order: TaxiPassengerOrderQueryRespBean.Result?) { + order?.let { + setItineraryVisibility() + when (TaxiPassengerModel.curOrderStatus) { + TaxiPassengerOrderStatusEnum.ArriveAtStart -> { + // 20 司机到达上车点 + mView?.showOrHideArrivedEndLayout(isShow = false) + mView?.showOrHidePressengerCheckPager(true, order.startSiteAddr, + order.endSiteAddr, order.passengerNum, order.carNumber, order.passengerPhone) + mView?.showOrHideStartAutopilotView(isShow = false) + } + + TaxiPassengerOrderStatusEnum.UserArriveAtStart -> { + // 30 乘客到达上车点 + mView?.showOrHideArrivedEndLayout(isShow = false) + mView?.showOrHidePressengerCheckPager(isShow = false) + mView?.showOrHideStartAutopilotView(isShow = true) + } + + TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { + // 服务中(去往目的地) + mView?.showOrHideArrivedEndLayout(isShow = false) + mView?.showOrHidePressengerCheckPager(isShow = false) + mView?.showOrHideStartAutopilotView(isShow = false) + overMapViewShow() + } + + TaxiPassengerOrderStatusEnum.ArriveAtEnd -> { + // 50 到达终点 乘客可以评价 + mView?.showOrHideArrivedEndLayout(true) + mView?.showOrHidePressengerCheckPager(isShow = false) + mView?.showOrHideStartAutopilotView(isShow = false) + overMapViewClear() + } + TaxiPassengerOrderStatusEnum.JourneyCompleted -> { + // 60 行程完成 + mView?.showOrHideStartAutopilotView(isShow = false) + mView?.showOrHidePressengerCheckPager(isShow = false) + mView?.showOrHideArrivedEndLayout(false) + overMapViewClear() + } + TaxiPassengerOrderStatusEnum.Cancel -> { + // 70 取消订单 + mView?.showOrHideStartAutopilotView(isShow = false) + mView?.showOrHidePressengerCheckPager(isShow = false) + mView?.showOrHideArrivedEndLayout(isShow = false) + overMapViewClear() + } + else -> {} + } + } + } + + private fun overMapViewShow(){ + CallerFuncBizManager.bizProvider.getAllV2XEvents() + } + private fun overMapViewClear(){ + CallerFuncBizManager.bizProvider.stopQueryV2XEvents() + mView?.showOrHideOverMapView() + } + + fun checkAndUpdateStatus(phone: String?) { + TaxiPassengerModel.checkPhoneAndUpdateStatus(phone) { + mView?.showOrHidePressengerCheckPager(isShow = false) + } + } + + /** + * 开启自动驾驶 + */ + fun startAutopilot() { + AutopilotManager.startAutopilot() + } + + fun setItineraryVisibility() { + UiThreadHandler.post { + when (TaxiPassengerModel.curOrderStatus) { + TaxiPassengerOrderStatusEnum.None, + TaxiPassengerOrderStatusEnum.OnTheWayToStart, + TaxiPassengerOrderStatusEnum.ArriveAtStart, + TaxiPassengerOrderStatusEnum.JourneyCompleted, + TaxiPassengerOrderStatusEnum.ArriveAtEnd, + TaxiPassengerOrderStatusEnum.Cancel -> mView?.showOrHideServingOrderFragment(false) + TaxiPassengerOrderStatusEnum.UserArriveAtStart, + TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> mView?.showOrHideServingOrderFragment(true) + } + } + } + + override fun onMessageGo2OverMapview() { + mView?.showOverMapView() + } + + companion object { + private val TAG = BaseTaxiPassengerPresenter::class.java.simpleName + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java deleted file mode 100644 index e0e6edf5e9..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.mogo.och.taxi.passenger.presenter; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.os.Build; -import android.os.Looper; - -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; -import androidx.lifecycle.LifecycleOwner; - -import com.amap.api.maps.model.LatLng; -import com.mogo.commons.mvp.Presenter; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager; -import com.mogo.eagle.core.network.utils.GsonUtil; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback; -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; -import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel; -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; -import com.mogo.och.taxi.passenger.ui.TaxiPassengerServingOrderFragment; - -import java.util.List; - -import mogo.telematics.pad.MessagePad; - -/** - * @author: wangmingjun - * @date: 2022/3/14 - */ -public class TaxiPassengerServingOrderPresenter extends Presenter - implements IOCHTaxiPassengerAutopilotPlanningCallback, IOCHTaxiPassengerOrderStatusCallback - , IOCHTaxiPassengerControllerStatusCallback, ITaxiPassengerVeloctityCallback { - - private static final String TAG = TaxiPassengerServingOrderPresenter.class.getSimpleName(); - - private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentPassengerOrder = null; //当前订单 - - public TaxiPassengerServingOrderPresenter(TaxiPassengerServingOrderFragment view) { - super(view); - initListener(); - } - - @Override - public void onResume(@NonNull LifecycleOwner owner) { - super.onResume(owner); - } - - private void initListener() { - // 设置起点和终点marker和实时车辆位置 - TaxiPassengerModel.getInstance().setMoGoAutopilotPlanningListener(this); - TaxiPassengerModel.getInstance().setOrderStatusCallback("TaxiPassengerServingOrderPresenter",this); - TaxiPassengerModel.getInstance().setControllerStatusCallback("TaxiPassengerServingOrderPresenter",this); - // 获取道路限速 - TaxiPassengerModel.getInstance().setVeloctityCallback(this); - } - - public void releaseListener(){ - TaxiPassengerModel.getInstance().setMoGoAutopilotPlanningListener(null); - TaxiPassengerModel.getInstance().setOrderStatusCallback("TaxiPassengerServingOrderPresenter",null); - TaxiPassengerModel.getInstance().setControllerStatusCallback("TaxiPassengerServingOrderPresenter",null); - TaxiPassengerModel.getInstance().setVeloctityCallback(null); - - } - - @Override - public void setLineMarker(LatLng startStation,LatLng endStation) { - if (startStation == null || endStation == null) return; - runOnUIThread(() -> mView.setLineMarker(startStation,endStation)); - } - - @Override - public void routeResultByServer(List routeArriviedTemp, List routeArrivingTemp, MogoLocation location) { - runOnUIThread(() ->mView.routeResultByServer(routeArriviedTemp,routeArrivingTemp,location)); - } - - @Override - public void showRottingMapView() { - runOnUIThread(() ->mView.showRottingMapView()); - } - - - @Override - public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order)); - - if (mCurrentPassengerOrder == null || mCurrentPassengerOrder.orderStatus != order.orderStatus){ - if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ - TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(true); - if (mCurrentPassengerOrder == null){ - TaxiPassengerModel.getInstance().queryOrderRouteList(); - } - TaxiPassengerModel.getInstance().updateAutopilotControlParameters(); - CallerFuncBizManager.getBizProvider().queryV2XEvents();//全览模式的V2X事件轮询开始 - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "OnTheWayToEnd"); - } - - if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus - || TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus - || TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){ - TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(false); - TaxiPassengerModel.getInstance().clearAutopilotControlParameters(); - CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "Cancel or ArriveAtEnd or JourneyCompleted"); - } - - mCurrentPassengerOrder = order; //当前无订单 - runOnUIThread(() ->mView.updateOrderStatusView(order)); - } - } - - @RequiresApi(api = Build.VERSION_CODES.N) - @Override - public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { - runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters, timeInSecond)); - } - - @Override - public void onCurrentRoadName(String currentRoadName) { - runOnUIThread(() -> mView.onCurrentRoadName(currentRoadName)); - } - - @Override - public void onDriverHasCheckedPilotCondition(boolean isBoarded) { - - } - - @Override - public void onVRModeChanged(boolean isVRMode) { - - } - - private long startTime = 0; - private static final long TIMEINTERVAL = 4000; - - @Override - public void onCarLocationChanged(MogoLocation location) { - if (location != null){ - runOnUIThread(() -> mView.onCarLocationChanged(location)); - long currentTimeMillis = System.currentTimeMillis(); - if(currentTimeMillis-startTime + * 根据优先级控制显示 window view. + */ +@Route( path = MogoServicePaths.PATH_STATUS_VIEW_MANAGER ) +public class StatusViewManager implements IStatusViewLayout { + + + @NonNull + @Override + public View getStatusView(Context context) { + return new StatusBarView(context); + } + + @Override + public void init(Context context) { + + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/CustomSeekBar.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/CustomSeekBar.java deleted file mode 100644 index c551fd993d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/CustomSeekBar.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.content.Context; -import android.graphics.Canvas; -import android.util.AttributeSet; -import android.view.MotionEvent; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatSeekBar; - -/** - * @author: wangmingjun - * @date: 2022/3/21 - */ -public class CustomSeekBar extends AppCompatSeekBar { - - private boolean touch = false; //是否支持拖动, 默认为不可以 - - public CustomSeekBar(@NonNull Context context) { - super(context); - } - - public CustomSeekBar(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public CustomSeekBar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected synchronized void onDraw(Canvas canvas) { - super.onDraw(canvas); - } - - public void setTouch(boolean touch) { - this.touch = touch; - } - - /** - * onTouchEvent 处理 - */ - @Override - public boolean onTouchEvent(MotionEvent event) { - if (touch) { - return super.onTouchEvent(event); - } - return false; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.kt deleted file mode 100644 index 4db01025e5..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.mogo.och.taxi.passenger.ui - -import com.amap.api.maps.model.LatLng - -/** - * @author xiaoyuzhou - * @date 2021/6/24 11:33 上午 - */ -interface ITaxiPassengerMapDirectionView { - /** - * 绘制路径线 - */ - fun drawablePolyline() - - /** - * 清除路径线 - */ - fun clearPolyline() - - /** - * 设置路径中起终点marker - */ - fun setLineMarker(startStation: LatLng, endStation: LatLng) -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OverviewFragment.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OverviewFragment.kt deleted file mode 100644 index 7fdd99ff80..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OverviewFragment.kt +++ /dev/null @@ -1,133 +0,0 @@ -package com.mogo.och.taxi.passenger.ui - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import com.mogo.commons.mvp.BaseFragment -import com.mogo.eagle.core.function.call.biz.CallerFuncBizManager -import com.mogo.eagle.core.function.view.OverMapView -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable -import java.util.concurrent.TimeUnit - -class OverviewFragment : BaseFragment() { - - private var overmapview: OverMapView?=null - - private var lifeVisable2User = false - private var finalVisable2User = false - - private var subscribe: Disposable?=null - - override fun onResume() { - super.onResume() - overmapview?.onResume() - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"onResume") - lifeVisable2User = true - checkVisable() - } - - override fun onPause() { - super.onPause() - overmapview?.onPause() - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"onPause") - lifeVisable2User = false - checkVisable() - } - - private fun checkVisable() { - - subscribe?.let { - if (!it.isDisposed) { - it.dispose() - } - } - subscribe = Observable.timer(500, TimeUnit.MILLISECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { - if(lifeVisable2User){//展示 - if(!finalVisable2User){ - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"正在展示") - finalVisable2User = true - statusChange(TaxiPassengerModel.getInstance().curOrderStatus) - } - - }else{//没有展示 - if(finalVisable2User){ - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"已经隐藏") - finalVisable2User = false - } - } - } - } - - override fun onDestroy() { - super.onDestroy() - overmapview?.onDestroy() - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"onDestroy") - } - - private fun statusChange(currentStatusEnum: TaxiPassengerOrderStatusEnum){ - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"状态变更最新状态:$currentStatusEnum") - when (currentStatusEnum) { - TaxiPassengerOrderStatusEnum.OnTheWayToEnd -> { - CallerFuncBizManager.bizProvider.getAllV2XEvents() - } - TaxiPassengerOrderStatusEnum.ArriveAtEnd,TaxiPassengerOrderStatusEnum.JourneyCompleted, - TaxiPassengerOrderStatusEnum.Cancel -> { - // stop clear - stopAndClear() - } - else -> {} - } - } - - private fun stopAndClear(){ - CallerFuncBizManager.bizProvider.stopQueryV2XEvents() - UiThreadHandler.post({ - overmapview?.clearV2XMarkers() - overmapview?.clearCustomPolyline() - }, UiThreadHandler.MODE.QUEUE) - } - - - override fun getLayoutId(): Int { - return R.layout.taxi_p_overmap_fragment - } - - override fun getTagName(): String { - return TAG - } - - override fun initViews() { - - } - - override fun initViews(savedInstanceState: Bundle?) { - super.initViews(savedInstanceState) - overmapview = findViewById(R.id.overMapView) - overmapview?.onCreateView(savedInstanceState) - - CallerLogger.d(SceneConstant.M_TAXI_P + TAG,"onCreateView") - statusChange(TaxiPassengerModel.getInstance().curOrderStatus) - } - - companion object{ - private const val TAG = "OverviewFragment" - @JvmStatic - fun newInstance(): OverviewFragment { - val args = Bundle() - val fragment = OverviewFragment() - fragment.arguments = args - return fragment - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPSettingView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPSettingView.kt new file mode 100644 index 0000000000..9f7b164b0f --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPSettingView.kt @@ -0,0 +1,180 @@ +package com.mogo.och.taxi.passenger.ui + +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.graphics.drawable.ClipDrawable +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable +import android.media.AudioManager +import android.provider.Settings +import android.text.TextUtils +import android.util.AttributeSet +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.widget.SeekBar +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import com.mogo.commons.module.intent.IMogoIntentListener +import com.mogo.commons.module.intent.IntentManager +import com.mogo.commons.module.receiver.MogoReceiver +import com.mogo.commons.module.receiver.MogoReceiver.ACTION_VOLUME_CHANGE +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.setting.CallerRequestActivityHandleManager +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 kotlinx.android.synthetic.main.taxi_p_setting_view.view.* +import me.jessyan.autosize.utils.AutoSizeUtils + +class TaxiPSettingView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener, + IMogoIntentListener { + + companion object { + const val TAG = "TaxiPSettingView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_p_setting_view, this, true) + initView() + } + + private var mAudioManager: AudioManager? = null + private var mMaxVolume: Int? = 15 + + @SuppressLint("NewApi") + private fun initView() { + sb_light_bar.setProgressDrawableTiled(getDrawable()) + sb_light_bar.max = 100 + sb_light_bar.min = 5 + sb_light_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + tvSoundPer.text = "$progress%" + if (fromUser) { + if (!Settings.System.canWrite(context)) { + CallerRequestActivityHandleManager.requestPermission( + TAG, + Settings.ACTION_MANAGE_WRITE_SETTINGS + ) + return + } + if (BrightnessUtils.isAutoBrightnessEnabled()) { + BrightnessUtils.setBrightness(((progress.toFloat() / 100) * 255).toInt()) + } else { + BrightnessUtils.setAutoBrightnessEnabled(true) + } + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) {} + override fun onStopTrackingTouch(seekBar: SeekBar?) {} + }) + sb_light_bar.progress = (BrightnessUtils.getBrightness() * 100) / 255 + + sb_voice_bar.setProgressDrawableTiled(getDrawable()) + sb_voice_bar.max = 100 + sb_voice_bar.min = 5 + sb_voice_bar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + tvVoicePer.text = "$progress%" + if (fromUser) { + mMaxVolume?.let { + var currentValue = ((progress.toFloat() / 100) * it).toInt() + if (currentValue <= 0) { + currentValue = 1 + } + mAudioManager?.setStreamVolume( + AudioManager.STREAM_MUSIC, + currentValue, + AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE + ) + } + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) {} + override fun onStopTrackingTouch(seekBar: SeekBar?) {} + }) + + context?.let { + mAudioManager = it.getSystemService(Context.AUDIO_SERVICE) as AudioManager + mMaxVolume = mAudioManager?.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + updateVolume() + } + } + + private fun updateVolume() { + val mCurrentVolume = mAudioManager?.getStreamVolume(AudioManager.STREAM_MUSIC) + mMaxVolume?.let { max -> + mCurrentVolume?.let { current -> + if (current == 1) { + sb_voice_bar.progress = 5 + tvVoicePer.text = "5%" + } else { + val fl = current.toFloat() / max * 100 + sb_voice_bar.progress = fl.toInt() + tvVoicePer.text = "${fl.toInt()}%" + } + } + } + } + + 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 temp03 = MineGradientDrawable(color2CBFFC, color1060FF, dp2px) + val clipDrawable3 = ClipDrawable(temp03, Gravity.START, ClipDrawable.HORIZONTAL) + val temp01 = MineGradientDrawable(color96A5C2, color96A5C2, dp2px) + val arr = arrayOf(temp01, clipDrawable3) + val ld = LayerDrawable(arr) + ld.setDrawableByLayerId(android.R.id.background, temp01) + ld.setDrawableByLayerId(android.R.id.progress, clipDrawable3) + return ld + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + IntentManager.getInstance().registerIntentListener(ACTION_VOLUME_CHANGE, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + IntentManager.getInstance().unregisterIntentListener(ACTION_VOLUME_CHANGE, this) + } + + override fun onWindowVisibilityChanged(visibility: Int) { + super.onWindowVisibilityChanged(visibility) + if (visibility == View.VISIBLE) { + sb_light_bar.progress = (BrightnessUtils.getBrightness() * 100) / 255 + } + } + + override fun onWindowFocusChanged(hasWindowFocus: Boolean) { + super.onWindowFocusChanged(hasWindowFocus) + if (hasWindowFocus) { + sb_light_bar.progress = (BrightnessUtils.getBrightness() * 100) / 255 + } + } + + override fun onIntentReceived(intentStr: String?, intent: Intent?) { + if (TextUtils.equals(ACTION_VOLUME_CHANGE, intentStr)) { + if (intent!!.getIntExtra( + MogoReceiver.EXTRA_VOLUME_STREAM_TYPE, -1 + ) == AudioManager.STREAM_MUSIC + ) { + ThreadUtils.runOnUiThread { + updateVolume() + } + } + } + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java deleted file mode 100644 index 42c739cee9..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ /dev/null @@ -1,521 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentTransaction; -import androidx.lifecycle.Lifecycle; - -import com.mogo.commons.module.status.MogoStatusManager; -import com.mogo.commons.mvp.MvpFragment; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; -import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView; -import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxButtonView; -import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxListView; -import com.mogo.eagle.core.function.hmi.ui.widget.RomaPassengerView; -import com.mogo.eagle.core.function.view.MapBizView; -import com.mogo.eagle.core.utilcode.util.DeviceUtils; -import com.mogo.eagle.core.utilcode.util.OverlayViewUtils; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.map.listener.IMogoMapListener; -import com.mogo.map.uicontroller.IMogoMapUIController; -import com.mogo.map.uicontroller.VisualAngleMode; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback; -import com.mogo.och.taxi.passenger.event.UIStatus; -import com.mogo.och.taxi.passenger.mulprocess.EmptyService; -import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter; -import com.mogo.och.taxi.passenger.ui.comment.TaxiPassengerArrivedView; -import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.lang.ref.WeakReference; -import java.util.Objects; - - -/** - * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 - *

- * 部分业务放在了此处处理 - * - * @author tongchenfei - */ -public class TaxiPassengerBaseFragment extends MvpFragment - implements IMogoMapListener, TaxiPassengerTaxiView, ITPClickStartAutopilotCallback { - - public static final String TAG = "TaxiPassengerBaseFragment"; - - private MapBizView mapBizView; - private ImageView mAutopilotImage; - private ImageView mMapswitchBtn; - private RomaPassengerView romaPView; - - private WeakReference mArrivedEndView; - private WeakReference mArrivedCheckView; - private WeakReference mStartAutopilotView; - protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null; - - protected OverviewFragment overviewFragment = null; - //消息盒子 - private PassengerMsgBoxButtonView viewPassengerMsgBoxButton; - private PassengerMsgBoxBubbleView viewPassengerMsgBoxBubble; - private PassengerMsgBoxListView viewPassengerMsgBoxList; - - private final Handler mHandler = new Handler(Looper.getMainLooper()); - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - EventBus.getDefault().register(this); - return super.onCreateView(inflater, container, savedInstanceState); - } - - @Override - protected int getLayoutId() { - return R.layout.taxi_p_base_fragment; - } - - @Override - public String getTagName() { - return "BaseOchTaxiPassengerFragment"; - } - - @Override - protected void initViews() { - mapBizView = findViewById(R.id.mapBizView); - mAutopilotImage = findViewById(R.id.module_och_autopilot_iv); - mMapswitchBtn = findViewById(R.id.module_och_taxi_swich_map_iv); - romaPView = findViewById(R.id.romaPView); - if(DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()){ - romaPView.setVisibility(View.VISIBLE); - }else{ - romaPView.setVisibility(View.GONE); - } - - updateSwitchMapIcon(); - initListener(); - - onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState()); - - switchVRFlatMode(MogoStatusManager.getInstance().isVrMode()); - //预加载视频进程 - EmptyService.Companion.startService(getContext()); - - //消息盒子 - viewPassengerMsgBoxButton = findViewById(R.id.viewPassengerMsgBoxButton); - viewPassengerMsgBoxBubble = findViewById(R.id.viewPassengerMsgBoxBubble); - viewPassengerMsgBoxList = findViewById(R.id.viewPassengerMsgBoxList); - viewPassengerMsgBoxButton.setClickListener(show -> { - if (show) { - viewPassengerMsgBoxList.setVisibility(View.VISIBLE); - viewPassengerMsgBoxBubble.setVisibility(View.GONE); - viewPassengerMsgBoxBubble.isShowData(false); - } else { - viewPassengerMsgBoxList.setVisibility(View.GONE); - viewPassengerMsgBoxBubble.setVisibility(View.VISIBLE); - viewPassengerMsgBoxBubble.isShowData(true); - } - }); - } - - @Override - protected void initViews(Bundle savedInstanceState) { - super.initViews(savedInstanceState); - mapBizView.onCreate(savedInstanceState); - } - - private void updateSwitchMapIcon() { - IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController(); - if (controller != null) { - if (controller.getCurrentMapVisualAngle().isLongSight()) { - mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_long); - } else if (controller.getCurrentMapVisualAngle().isMediumSight()) { - mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium); - } else { - mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium); - } - } - } - - private void initListener() { - mMapswitchBtn.setOnClickListener(v -> { - IMogoMapUIController controller = CallerMapUIServiceManager.INSTANCE.getMapUIController(); - if (controller != null) { - //切换地图的远近视图 - if (controller.getCurrentMapVisualAngle().isLongSight()) { - Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(true); - controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); - mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium); - } else if (controller.getCurrentMapVisualAngle().isMediumSight()) { - Objects.requireNonNull(CallerMapUIServiceManager.INSTANCE.getMapUIController()).setLockMode(false); - controller.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); - mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_long); - } else { - controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); - mMapswitchBtn.setImageResource(R.drawable.taxi_p_switch_map_medium); - } - } - //OverlayLeftViewUtils.INSTANCE.dismissOverlayView(); - }); - findViewById(R.id.iv_temp).setOnClickListener(view -> { - OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity(), 0, true, -1, true); - //showOrHideArrivedEndLayout(true, "北京北京北京", "1527481606997577728"); - //showOrHidePressengerCheckPager(true, "开始站点开", "开始站点开始站点开始", "2", "京A888888", "18811539480"); - //OCHFloatWindowManager.getInstance().ShowFloatWindow(getContext()); - }); - } - - private void initArrivedView() { - mArrivedEndView = new WeakReference<>(new TaxiPassengerArrivedView(getContext())); - mArrivedEndView.get().setITaxiPassengerScoreCallback((taxiPassengerScoreUpdateOrderReqBean) -> getPresenter().arrivedAndScore(taxiPassengerScoreUpdateOrderReqBean)); - } - - private void initCheckView() { - mArrivedCheckView = new WeakReference<>(new TaxiPassengerCheckView(getContext())); - mArrivedCheckView.get().setITaxiPassengerCommonValueCallback(phoneTail -> getPresenter().checkAndUpdateStatus(phoneTail)); - } - - @Override - public void onResume() { - super.onResume(); - mapBizView.onResume(); -// mPresenter.startOrStopOrderLoop(); -// showOrHideServingOrderFragment(true,false); -// showOrHideStartAutopilotView(true,true); - } - - /** - * VR mode 转换 - * - * @param isVRMode - */ - public void switchVRFlatMode(boolean isVRMode) { - if (mRootView != null) { - mRootView.setVisibility(isVRMode ? View.VISIBLE : View.GONE); - } - } - - /** - * 改变自动驾驶状态 - * - * @param status 2 - running 1 - enable 2 - disable - */ - private int mPrevAPStatus = -1; - - public void onAutopilotStatusChanged(int status) { - getActivity().runOnUiThread(() -> { - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status) { - // 1. 主动开启自动驾驶中,不为2(为0、1)则继续loading - return; - } - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status - && mPrevAPStatus != status) { - // 2. 主动开启自动驾驶中,为2则停止loading,并isStarting = false - onAutopilotStatusSuccessDone(); - } - // 3. 其他过程直接更新 - if (mPrevAPStatus != status) { - autopilotStatusAnimchanged(status); - } - mPrevAPStatus = status; - }); - } - - public void autopilotStatusAnimchanged(int status) { -// mAutopilotTv.setText(isInAutopilot?"自动驾驶":"开启自动驾驶"); - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) { - mAutopilotImage.setImageResource(R.drawable.taxi_p_auto_nor); - } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) { - mAutopilotImage.setImageResource(R.drawable.taxi_p_un_auto_nor); - } else { - mAutopilotImage.setImageResource(R.drawable.taxi_p_un_auto_nor); - } - - } - - private void startAutopilotDone(boolean success) { - mHandler.postDelayed(() -> onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState()), 1000L); - } - - @NonNull - @Override - protected BaseTaxiPassengerPresenter createPresenter() { - return new BaseTaxiPassengerPresenter(this); - } - - @Override - public void onLowMemory() { - super.onLowMemory(); - mapBizView.onLowMemory(); - } - - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - mapBizView.onSaveInstanceState(outState); - } - - @Override - public void onPause() { - super.onPause(); - mapBizView.onPause(); - } - - @Override - public void onDestroyView() { - mapBizView.onDestroy(); - super.onDestroyView(); - EventBus.getDefault().unregister(this); - removeListener(); - } - - private void removeListener() { - if (mStartAutopilotView == null || mStartAutopilotView.get() == null) { - return; - } - mStartAutopilotView.get().setOnClickStartAutopilotBtnCallback(null); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void changeOverview(UIStatus uiStatus) { - if (uiStatus.status == UIStatus.LIVE) { - showOrHideOverMapViewFragment(false); - showOrHideServingOrderFragment(true, false); - } else if (uiStatus.status == UIStatus.OVERVIEW) { - showOrHideOverMapViewFragment(true); - showOrHideServingOrderFragment(false, false); - } - } - - @Override - public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) { - //todo ui 切换 - } - - /** - * 显示或隐藏订单信息 - * - * @param isShow - */ - public void showOrHideServingOrderFragment(boolean isShow, boolean showOrHideLefeMenu) { - - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - if (isShow) { - if (ochServingOrderFragment == null) { - ochServingOrderFragment = TaxiPassengerServingOrderFragment.newInstance(); - } - if (showOrHideLefeMenu) { - OverlayLeftViewUtils.INSTANCE.showOverlayView(getActivity(), 0, true, -1, true); - } - if (ochServingOrderFragment.isHidden()) { - transaction - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .show(ochServingOrderFragment).commitAllowingStateLoss(); - return; - } - if (ochServingOrderFragment.isAdded()) { - transaction - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .show(ochServingOrderFragment).commitAllowingStateLoss(); - return; - } - transaction - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .add(R.id.module_mogo_och_navi_panel_container, ochServingOrderFragment) - .show(ochServingOrderFragment).commitAllowingStateLoss(); - - } else { - if (ochServingOrderFragment != null) { - transaction - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) - .hide(ochServingOrderFragment).commitAllowingStateLoss(); - } - if (showOrHideLefeMenu) { - OverlayLeftViewUtils.INSTANCE.dismissOverlayView(true); - } - } - } - - /** - * 显示或隐藏全局概览 - * - * @param isShow - */ - public void showOrHideOverMapViewFragment(boolean isShow) { - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - if (isShow) { - if (overviewFragment == null) { - overviewFragment = OverviewFragment.newInstance(); - } - if (overviewFragment.isHidden()) { - transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .show(overviewFragment).commitAllowingStateLoss(); - transaction.setMaxLifecycle(overviewFragment, Lifecycle.State.RESUMED); - return; - } - if (overviewFragment.isAdded()) { - transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .show(overviewFragment).commitAllowingStateLoss(); - transaction.setMaxLifecycle(overviewFragment, Lifecycle.State.RESUMED); - return; - } - transaction - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .add(R.id.fl_container_overview, overviewFragment) - .show(overviewFragment).commitAllowingStateLoss(); - transaction.setMaxLifecycle(overviewFragment, Lifecycle.State.RESUMED); - } else { - if (overviewFragment != null) { - transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) - .hide(overviewFragment).commitAllowingStateLoss(); - transaction.setMaxLifecycle(overviewFragment, Lifecycle.State.STARTED); - } - } - } - - /** - * 显示或者隐藏乘客可点击自动驾驶页面 - * 乘客验证成功,页面显示,按钮置于不可点击 - * 司机端确认可点击开启自动驾驶, 按钮置为可点击 - * 订单前往目的地,页面消失 - * - * @param isShow - */ - public void showOrHideStartAutopilotView(boolean isShow, boolean isClickable) { - if (isShow) { - if (mStartAutopilotView == null || mStartAutopilotView.get() == null) { - mStartAutopilotView = new WeakReference<>(new TaxiPassengerStartAutopilotView(getContext())); - } - mStartAutopilotView.get().setOnClickStartAutopilotBtnCallback(this); - OverlayViewUtils.showOverlayView(getActivity(), mStartAutopilotView.get()); - updateStartAutopilotBtnStatus(isClickable); - } else { - if (mStartAutopilotView == null || mStartAutopilotView.get() == null) { - return; - } - mStartAutopilotView.get().setOnClickStartAutopilotBtnCallback(null); - mStartAutopilotView.get().closeAllAnimsAndView(); - mStartAutopilotView = null; - } - } - - public void updateStartAutopilotBtnStatus(boolean isClickable) { - if (mStartAutopilotView == null || mStartAutopilotView.get() == null) { - return; - } - mStartAutopilotView.get().handleStartAutopilotBtnStatus(isClickable); - } - - public void onAutopilotStatusSuccessDone() { - if (mStartAutopilotView == null || mStartAutopilotView.get() == null) { - return; - } - mStartAutopilotView.get().onAutopilotStatusSuccess(); - } - - /** - * 显示或者隐藏到达乘客站点的洁面 - * ① 取消订单 可有可无 - * ② 到达上车点 隐藏到达终点的页面(上一个订单没有评价) - * ③ 到达目的地 显示到达终点的页面 - * ④ debug 使用 - * - * @param isShow true 展示 false 隐藏 - * @param arrivedEndStation 目的地 - * @param orderNo 订单No - */ - public void showOrHideArrivedEndLayout(boolean isShow, String arrivedEndStation, String orderNo) { - if (isShow) { - if (mArrivedEndView == null || mArrivedEndView.get() == null) { - initArrivedView(); - } - OverlayViewUtils.showOverlayView(getActivity(), mArrivedEndView.get(), R.style.och_window_anim_alpha); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - mArrivedEndView.get().setDataAndStartAnimation(arrivedEndStation, orderNo); - } - //如果在全屏 回收需要300毫秒 后期优化使用单独的播放器 - }, 500); - } else { - if (mArrivedEndView == null || mArrivedEndView.get() == null) { - return; - } - OverlayViewUtils.dismissOverlayView(mArrivedEndView.get()); - } - } - - // 20 司机到达上车点 - public void preOrderThankPageTenlogic(String startSiteAddr, - String endSiteAddr, - String passengerNum, - String carNumber, - String phone) { - showOrHideArrivedEndLayout(false, "", ""); - showOrHidePressengerCheckPager(true, startSiteAddr, - endSiteAddr, passengerNum, carNumber, phone); - } - - /** - * ① 取消订单 到达上车点后乘客取消订单 隐藏乘客验证页面 - * ② 司机到达上车点 到达上车点 展示乘客验证页面 - * ③ 乘客到达上车点 手机号验证成功后 隐藏乘客验证页面 - * ④ debug 使用 - */ - public void showOrHidePressengerCheckPager(boolean isShow, String startSiteAddr, - String endSiteAddr, - String passengerNum, - String carNumber, - String phone) { - try { - if (isShow) { - if (mArrivedCheckView == null || mArrivedCheckView.get() == null) { - initCheckView(); - } - mArrivedCheckView.get().setData(startSiteAddr, endSiteAddr, passengerNum, carNumber, phone); - OverlayViewUtils.showOverlayView(getActivity(), mArrivedCheckView.get()); - } else { - if (mArrivedCheckView == null || mArrivedCheckView.get() == null) { - return; - } - OverlayViewUtils.dismissOverlayView(mArrivedCheckView.get()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 用户评分后接口回调 - * - * @param isSuccess true 打分成功 false 打分失败 - */ - public void showArrivedEndLayout2Thank(boolean isSuccess) { - if (mArrivedEndView == null || mArrivedEndView.get() == null) { - initArrivedView(); - } - if (isSuccess) { - mArrivedEndView.get().scoreSuccess(); - } else { - mArrivedEndView.get().scoreFail(); - } - } - - @Override - public void onClickCallback() { - - mPresenter.startAutopilot(); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt new file mode 100644 index 0000000000..c12e1b330a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt @@ -0,0 +1,345 @@ +package com.mogo.och.taxi.passenger.ui + +import android.os.Bundle +import android.view.View +import com.mogo.commons.mvp.MvpFragment +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager +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.OverlayViewUtils +import com.mogo.map.listener.IMogoMapListener +import com.mogo.map.uicontroller.VisualAngleMode +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.callback.ITaxiPassengerCommonValueCallback +import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter +import com.mogo.och.taxi.passenger.ui.arrived.ArrivedView +import com.mogo.och.taxi.passenger.ui.bottom.BottomBar +import com.mogo.och.taxi.passenger.ui.check.TaxiPassengerCheckView +import com.mogo.och.taxi.passenger.ui.startautopilot.StartAutopilotView +import com.mogo.och.taxi.passenger.widget.animutils.AnimationsContainer +import kotlinx.android.synthetic.main.taxi_p_base_fragment.* +import java.lang.ref.WeakReference + +/** + * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 + * + * + * 部分业务放在了此处处理 + * + * @author tongchenfei + */ +class TaxiPassengerBaseFragment() : + MvpFragment(), IMogoMapListener, + TaxiPassengerTaxiView { + + /** + * 到达目的地 + */ + private var mArrivedEndView: WeakReference? = null + + /** + * 手机号后四位验证 + */ + private var mArrivedCheckView: WeakReference? = null + + /** + * 启动自驾页面 + */ + private var mStartAutopilotView: WeakReference? = null + + private var createProgressDialogAnim: AnimationsContainer?=null + + override fun getLayoutId(): Int { + return R.layout.taxi_p_base_fragment + } + + override fun getTagName(): String { + return "BaseOchTaxiPassengerFragment" + } + + override fun initViews() { + initListener() + } + + override fun initViews(savedInstanceState: Bundle?) { + super.initViews(savedInstanceState) + mapBizView!!.onCreate(savedInstanceState) + overMapView.onCreateView(savedInstanceState) + overMapView.hideResetView() + + createProgressDialogAnim = AnimationsContainer(R.array.xiaozhi_normal, 20,aciv_xiaozhi_normal) + createProgressDialogAnim?.setOnAnimStopListener(object :AnimationsContainer.OnAnimationStoppedListener{ + override fun AnimationStopped() { + CallerLogger.d(M_TAXI_P + TAG, "动画暂停") + } + }) + } + + private fun initListener() { + ck_setting.isChecked = false + ck_setting.setOnCheckedChangeListener { _, isChecked -> + clSettingView.visibility = if(isChecked) View.VISIBLE else View.GONE + } + bottom.setOverMapApplyClick(object : BottomBar.ApplyClickLintener{ + override fun onApplyClick(selectItem: BottomBar.SelectView) { + when (selectItem) { + BottomBar.SelectView.PRECISIONMAP -> { + overMapView.visibility = View.GONE + mapBizView.visibility = View.VISIBLE + presenter?.setItineraryVisibility() + ck_setting.visibility = View.VISIBLE + if (DeviceUtils.isLenovoModel() || DeviceUtils.isEB5Model()) { + romaPView.visibility = View.VISIBLE + } else { + romaPView.visibility = View.GONE + } + rv_location_center.visibility = View.VISIBLE + pcnActionView.visibility = View.VISIBLE + CallerHmiManager.showTrafficLightView() + infoVideoView.visibility = View.GONE + CallerHmiManager.showTurnLightView() + } + BottomBar.SelectView.OVERMAPVIEW -> { + overMapView.visibility = View.VISIBLE + mapBizView.visibility = View.GONE + presenter?.setItineraryVisibility() + ck_setting.visibility = View.VISIBLE + romaPView.visibility = View.GONE + rv_location_center.visibility = View.VISIBLE + pcnActionView.visibility = View.VISIBLE + CallerHmiManager.showTrafficLightView() + infoVideoView.visibility = View.GONE + CallerHmiManager.showTurnLightView() + } + BottomBar.SelectView.VIDEO -> { + overMapView.visibility = View.GONE + mapBizView.visibility = View.GONE + presenter?.setItineraryVisibility() + ck_setting.visibility = View.GONE + ck_setting.isChecked = false + romaPView.visibility = View.GONE + rv_location_center.visibility = View.GONE + pcnActionView.visibility = View.GONE + CallerHmiManager.hideTrafficLightView() + infoVideoView.visibility = View.VISIBLE + CallerHmiManager.hideTurnLightView() + } + + else -> {} + } + + } + }) + + rv_location_center.onClick { + when (bottom.getCurrentPage()) { + BottomBar.SelectView.PRECISIONMAP -> { + val controller = CallerMapUIServiceManager.getMapUIController() + if (controller != null) { + //切换到地图中间 + controller.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null) + // 切换缩放到中视角 + controller.changeZoom2(0.8f) + } + } + BottomBar.SelectView.OVERMAPVIEW -> { + overMapView.displayCustomOverView() + } + + else -> {} + } + + } + view?.viewTreeObserver?.addOnWindowFocusChangeListener { + if(it){ + CallerLogger.d(M_TAXI_P + TAG, "windows获取焦点") + createProgressDialogAnim?.start() + }else{ + CallerLogger.d(M_TAXI_P + TAG, "window失去焦点") + createProgressDialogAnim?.stop() + } + } + } + + private fun initCheckView() { + mArrivedCheckView = WeakReference(TaxiPassengerCheckView(context)) + mArrivedCheckView!!.get()!!.iTaxiPassengerCommonValueCallback = + ITaxiPassengerCommonValueCallback { phoneTail: String? -> + getPresenter()!!.checkAndUpdateStatus(phoneTail) + } + } + + override fun onResume() { + super.onResume() + mapBizView!!.onResume() + overMapView.onResume() + CallerLogger.d(M_TAXI_P + TAG, "onResume") + + createProgressDialogAnim?.start() + } + + override fun createPresenter(): BaseTaxiPassengerPresenter { + return BaseTaxiPassengerPresenter(this) + } + + override fun onLowMemory() { + super.onLowMemory() + mapBizView!!.onLowMemory() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapBizView!!.onSaveInstanceState(outState) + } + + override fun onPause() { + super.onPause() + mapBizView!!.onPause() + overMapView?.onPause() + CallerLogger.d(M_TAXI_P + TAG, "onPause") + createProgressDialogAnim?.stop() + } + + override fun onDestroyView() { + mapBizView!!.onDestroy() + overMapView?.onDestroy() + super.onDestroyView() + } + + /** + * 显示或隐藏订单信息 + * + * @param isShow + */ + fun showOrHideServingOrderFragment(isShow: Boolean) { + when (bottom.getCurrentPage()) { + BottomBar.SelectView.OVERMAPVIEW,BottomBar.SelectView.PRECISIONMAP -> { + if (isShow) { + if(itinerary.visibility!=View.VISIBLE) { + itinerary.visibility = View.VISIBLE + } + } else { + if(itinerary.visibility!=View.GONE) { + itinerary.visibility = View.GONE + } + } + } + BottomBar.SelectView.VIDEO,BottomBar.SelectView.NONE -> { + if(itinerary.visibility!=View.GONE) { + itinerary.visibility = View.GONE + } + } + } + } + + /** + * 显示或者隐藏乘客可点击自动驾驶页面 + * 乘客验证成功,页面显示,按钮置于不可点击 + * 司机端确认可点击开启自动驾驶, 按钮置为可点击 + * 订单前往目的地,页面消失 + * + * @param isShow + */ + fun showOrHideStartAutopilotView(isShow: Boolean) { + if (isShow) { + exitFullVideoScreen(false) + if (mStartAutopilotView == null || mStartAutopilotView!!.get() == null) { + mStartAutopilotView = WeakReference(StartAutopilotView(requireContext())) + } + mStartAutopilotView?.get()?.let { + OverlayViewUtils.showOverlayView(activity, it) + it.handleStartAutopilotBtnStatus(false) + } + } else { + mStartAutopilotView?.get()?.closeAllAnimsAndView() + mStartAutopilotView = null + } + } + + /** + * 显示或者隐藏到达乘客站点的洁面 + * ① 取消订单 可有可无 + * ② 到达上车点 隐藏到达终点的页面(上一个订单没有评价) + * ③ 到达目的地 显示到达终点的页面 + * ④ debug 使用 + * + * @param isShow true 展示 false 隐藏 + */ + fun showOrHideArrivedEndLayout(isShow: Boolean) { + if (isShow) { + exitFullVideoScreen(true) + if (mArrivedEndView == null || mArrivedEndView!!.get() == null) { + mArrivedEndView = WeakReference(ArrivedView(context)) + } + mArrivedEndView?.get()?.let { + OverlayViewUtils.showOverlayView(activity, it, R.style.och_window_anim_alpha) + RxUtils.createSubscribe(500) { + it.setDataAndStartAnimation() + VoiceNotice.showNotice("已到达目的地,带好随身物品,右侧下车更安全!期待下次再见", AIAssist.LEVEL2) + } + } + } else { + mArrivedEndView?.get()?.let { + OverlayViewUtils.dismissOverlayView(it) + } + } + } + + private fun exitFullVideoScreen(resetVideoPlayer: Boolean) { + infoVideoView.exitFullScreenMode(resetVideoPlayer) + } + + fun showOrHideOverMapView(){ + overMapView?.clearV2XMarkers() + overMapView?.clearCustomPolyline() + } + + /** + * ① 取消订单 到达上车点后乘客取消订单 隐藏乘客验证页面 + * ② 司机到达上车点 到达上车点 展示乘客验证页面 + * ③ 乘客到达上车点 手机号验证成功后 隐藏乘客验证页面 + * ④ debug 使用 + */ + fun showOrHidePressengerCheckPager( + isShow: Boolean, + startSiteAddr: String? = "", + endSiteAddr: String? = "", + passengerNum: String? = "", + carNumber: String? = "", + phone: String? = "" + ) { + try { + if (isShow) { + exitFullVideoScreen(false) + if (mArrivedCheckView == null || mArrivedCheckView!!.get() == null) { + initCheckView() + } + mArrivedCheckView!!.get()!! + .setData(startSiteAddr, endSiteAddr, passengerNum, carNumber, phone) + OverlayViewUtils.showOverlayView(activity, mArrivedCheckView!!.get()) + } else { + if (mArrivedCheckView == null || mArrivedCheckView!!.get() == null) { + return + } + OverlayViewUtils.dismissOverlayView(mArrivedCheckView!!.get()) + } + } catch (e: Exception) { + e.printStackTrace() + } + } + + fun showOverMapView() { + bottom.setCheckIndex(BottomBar.SelectView.OVERMAPVIEW) + } + + companion object { + @JvmField + val TAG = "TaxiPassengerBaseFragment" + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.kt deleted file mode 100644 index 0536e8e49d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.kt +++ /dev/null @@ -1,271 +0,0 @@ -package com.mogo.och.taxi.passenger.ui - -import android.content.Context -import android.os.Bundle -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.MotionEvent -import android.widget.RelativeLayout -import com.amap.api.maps.AMap -import com.amap.api.maps.CameraUpdate -import com.amap.api.maps.CameraUpdateFactory -import com.amap.api.maps.TextureMapView -import com.amap.api.maps.model.BitmapDescriptor -import com.amap.api.maps.model.BitmapDescriptorFactory -import com.amap.api.maps.model.CameraPosition -import com.amap.api.maps.model.CustomMapStyleOptions -import com.amap.api.maps.model.LatLng -import com.amap.api.maps.model.LatLngBounds -import com.amap.api.maps.model.Marker -import com.amap.api.maps.model.MarkerOptions -import com.amap.api.maps.model.Polyline -import com.amap.api.maps.model.PolylineOptions -import com.mogo.eagle.core.data.map.MogoLocation -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager -import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager.addListener -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback -import com.mogo.och.taxi.passenger.utils.TaxiPassengerMapAssetStyleUtil - -/** - * 乘客屏小地图 - */ -class TaxiPassengerMapDirectionView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : RelativeLayout(context, attrs, defStyleAttr), IMoGoChassisLocationGCJ02Listener, - ITaxiPassengerMapDirectionView, AMap.OnCameraChangeListener { - - companion object { - //小地图名称 - const val TAG = "TaxiPassengerMapDirectionView" - private const val zoomLevel = 13.0f - } - - private lateinit var mAMapNaviView: TextureMapView - private lateinit var mAMap: AMap - private lateinit var mCarMarker: Marker - private lateinit var mStartMarker: Marker - private lateinit var mEndMarker: Marker - private lateinit var mArrivedRes: BitmapDescriptor - private lateinit var mUnArrivedRes: BitmapDescriptor - - private val mCoordinatesLatLng: MutableList = ArrayList() - private var mPolyline: Polyline? = null - private var mCameraUpdate: CameraUpdate? = null - private var mContext: Context? = null - var textureList: MutableList = ArrayList() - var texIndexList: MutableList = ArrayList() - private var mITaxiPassengerMapViewCallback: ITaxiPassengerMapViewCallback? = null - - private val routeArrivied: MutableList = ArrayList() - private val routeArriving: MutableList = ArrayList() - private var location: MogoLocation? = null - - init { - initView(context) - } - - fun setTaxiPassengerMapViewCallback(ITaxiPassengerMapViewCallback: ITaxiPassengerMapViewCallback?) { - mITaxiPassengerMapViewCallback = ITaxiPassengerMapViewCallback - } - - private fun initView(context: Context) { - d(SceneConstant.M_TAXI_P + TAG, "initView") - mContext = context - LayoutInflater.from(context).inflate(R.layout.taxi_p_map_view, this) - mAMapNaviView = findViewById(R.id.taxi_p_order_amap_view) - initAMapView() - - // 注册定位监听 - addListener(TAG, 10, this) - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - // 注册定位监听 - CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) - } - - private fun initAMapView() { - mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel) - mAMap = mAMapNaviView.map - // 设置导航地图模式,aMap是地图控制器对象。 - mAMap.mapType = AMap.MAP_TYPE_NIGHT - - // 关闭显示实时路况图层,aMap是地图控制器对象。 - mAMap.isTrafficEnabled = false - - // 设置 锚点 图标 - mCarMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_car)).anchor(0.5f, 0.5f)) - mStartMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_start))) - mEndMarker = mAMap.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_end))) - mArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_arrived) - mUnArrivedRes = BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_arrow_un_arrive) - - // 加载自定义样式 - val customMapStyleOptions = CustomMapStyleOptions() - .setEnable(true) - .setStyleData(TaxiPassengerMapAssetStyleUtil.getAssetsStyle(context, "map_style.data")) - .setStyleExtraData(TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data")) - // 设置自定义样式 - mAMap.setCustomMapStyle(customMapStyleOptions) - - //设置希望展示的地图缩放级别 - mAMap.moveCamera(mCameraUpdate) - - // 设置地图的样式 - mAMap.uiSettings.apply { - isZoomControlsEnabled = false // 地图缩放级别的交换按钮 - setAllGesturesEnabled(false) // 所有手势 - isMyLocationButtonEnabled = false // 显示默认的定位按钮 - setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可 - } - - mAMap.setOnMapLoadedListener { - d(SceneConstant.M_TAXI_P + TAG, "smp---onMapLoaded") - // 加载自定义样式 - val options = CustomMapStyleOptions() - .setEnable(true) - .setStyleData( - TaxiPassengerMapAssetStyleUtil.getAssetsStyle(context, "map_style.data") - ) - .setStyleExtraData( - TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(context, "map_style_extra.data") - ) - // 设置自定义样式 - mAMap.setCustomMapStyle(options) - mAMapNaviView.map.setPointToCenter(mAMapNaviView.width / 2, mAMapNaviView.height / 2) - } - - //设置地图状态的监听接口 - mAMap.setOnCameraChangeListener(this) - } - - override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { - return true - } - - override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { - if (mogoLocation == null) { - return - } - val currentLatLng = LatLng(mogoLocation.latitude, mogoLocation.longitude) - if (mPolyline!=null&&!mPolyline!!.points.isNullOrEmpty()) { - //圈定地图显示范围 - val endLatLng = mPolyline!!.points.last() - //存放经纬度 - val boundsBuilder = LatLngBounds.Builder().apply { - include(currentLatLng) - include(endLatLng) - } - //第二个参数为四周留空宽度 - mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100, 100, 100, 100)) - } else { - //设置希望展示的地图缩放级别 - val cameraPosition = CameraPosition.Builder() - .target(mCarMarker.position) - .tilt(0f) - .bearing(mogoLocation.heading.toFloat()) - .zoom(zoomLevel).build() - mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) - } - //更新车辆位置 - mCarMarker.rotateAngle = (360 - mogoLocation.heading).toFloat() - mCarMarker.position = currentLatLng - mCarMarker.setToTop() - } - - override fun setLineMarker(startStation:LatLng,endStation:LatLng) { - mStartMarker.isVisible = false - mEndMarker.isVisible = false - mStartMarker.position = startStation - mStartMarker.isVisible = true - mEndMarker.position = endStation - mEndMarker.isVisible = true - } - - override fun drawablePolyline() { - if (routeArrivied.isEmpty() && routeArriving.isEmpty()) { - d(SceneConstant.M_TAXI + TAG, "没有点") - return - } - texIndexList.clear() - val allPoints = ArrayList(routeArrivied) - for (i in routeArrivied.indices) { - if (routeArrivied.size > 1 && i < routeArrivied.size - 1) { - texIndexList.add(0) - } - } - texIndexList.add(0) - allPoints.add(LatLng(location!!.latitude, location!!.longitude)) - allPoints.addAll(routeArriving) - for (ignored in routeArrivied) { - texIndexList.add(1) - } - if (mPolyline != null) { - mPolyline!!.points = allPoints - mPolyline!!.options.customTextureIndex = texIndexList - return - } - 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) - } - - override fun clearPolyline() { - if (mPolyline != null) { - mPolyline!!.remove() - mPolyline = null - } - mStartMarker.isVisible = false - mEndMarker.isVisible = false - } - - fun onCreateView(savedInstanceState: Bundle?) { - mAMapNaviView.onCreate(savedInstanceState) - } - - fun onResume() { - mAMapNaviView.onResume() - } - - fun onPause() { - mAMapNaviView.onPause() - } - - fun onDestroy() { - mAMapNaviView.onDestroy() - } - - fun setCoordinatesLatLng(routeArrivied: List?, routeArriving: List?, location: MogoLocation?) { - this.routeArrivied.clear() - this.routeArrivied.addAll(routeArrivied!!) - this.routeArriving.clear() - this.routeArriving.addAll(routeArriving!!) - this.location = location - } - - override fun onCameraChange(cameraPosition: CameraPosition) { - mITaxiPassengerMapViewCallback!!.onCameraChange(cameraPosition.bearing) - } - - override fun onCameraChangeFinish(cameraPosition: CameraPosition) {} -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt deleted file mode 100644 index 926ee23f72..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.kt +++ /dev/null @@ -1,370 +0,0 @@ -package com.mogo.och.taxi.passenger.ui - -import android.animation.Animator -import android.animation.AnimatorInflater -import android.os.Build -import android.os.Bundle -import android.view.View -import android.view.animation.Animation -import android.view.animation.RotateAnimation -import android.widget.ImageView -import android.widget.TextView -import androidx.annotation.RequiresApi -import androidx.appcompat.widget.AppCompatSeekBar -import androidx.fragment.app.FragmentTransaction -import com.amap.api.maps.model.LatLng -import com.mogo.commons.mvp.MvpFragment -import com.mogo.eagle.core.data.map.MogoLocation -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr -import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.och.common.module.map.AmapNaviToDestinationModel -import com.mogo.och.common.module.map.CommonAmapNaviVIew -import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.NumberFormatUtil -import com.mogo.och.common.module.wigets.OCHGradientTextView -import com.mogo.och.common.module.wigets.OCHRadiusImageView -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst -import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel -import com.mogo.och.taxi.passenger.presenter.TaxiPassengerServingOrderPresenter -import com.mogo.och.taxi.passenger.utils.TPRouteDataTestUtils -import java.util.Calendar - -/** - * @author: wangmingjun - * @date: 2022/3/8 - */ -class TaxiPassengerServingOrderFragment : - MvpFragment(), - TaxiPassengerTaxiView, ITaxiPassengerMapViewCallback { - private val TAG = TaxiPassengerServingOrderFragment::class.java.simpleName - private var mTPSpeedTv: OCHGradientTextView? = null - private var mTPSpeedTvShadowBg: TextView? = null - private var mTPOrderStatus: TextView? = null - private var mTPOrderStartStation: TextView? = null - private var mTPOrderEndStation: TextView? = null - private var mTPOrderRemainDis: TextView? = null - private var mTPOrderRemainDisUnit: TextView? = null - private var mTPOrderRemainTime: TextView? = null - private var mTPOrderRemainArriveTime: TextView? = null - private var mMapArrowIcon: ImageView? = null - private var mMapRottingView: TaxiPassengerMapDirectionView? = null - private var mAmapNaviVIew: CommonAmapNaviVIew? = null - private var lastBearing = 0f - private var rotateAnimation: RotateAnimation? = null - private var mProgressSeekBar: AppCompatSeekBar? = null - private var mProgessDes: TextView? = null - private var mSpeedLayoutBg: OCHRadiusImageView? = null - @Volatile - private var mLimitingVelocity = 0 // 返回的道路限速值 - override fun getLayoutId(): Int { - return R.layout.taxi_p_activity_serving_order_view - } - - override fun getTagName(): String { - return "TaxiPassengerServingOrderFragment" - } - - override fun initViews() { - mTPSpeedTv = findViewById(R.id.taxi_p_speed_tv) - mTPSpeedTvShadowBg = findViewById(R.id.taxi_p_speed_tv_bg) - mTPSpeedTv!!.setVertrial(true) - mTPSpeedTv!!.setmColorList( - intArrayOf( - resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor( - R.color.taxi_p_speed_normal_color2 - ) - ) - ) - mTPSpeedTv!!.text = 0.toString() - mTPSpeedTvShadowBg!!.text = 0.toString() - mTPOrderStatus = findViewById(R.id.taxi_p_order_status_tv) - mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv) - mTPOrderEndStation = findViewById(R.id.taxi_p_order_status_end_station_tv) - mTPOrderRemainDis = findViewById(R.id.taxi_p_order_remain_distance) - mTPOrderRemainDisUnit = findViewById(R.id.taxi_p_order_remain_distance_unit) - mTPOrderRemainTime = findViewById(R.id.taxi_p_order_remain_time) - mTPOrderRemainArriveTime = findViewById(R.id.taxi_p_order_remain_arrive_time) - mMapArrowIcon = findViewById(R.id.taxi_p_arrow_nor) - mProgressSeekBar = findViewById(R.id.taxi_p_seekbar) - mProgessDes = findViewById(R.id.taxi_p_progress_des) - mSpeedLayoutBg = findViewById(R.id.taxi_p_speed_bg) - mTPOrderStatus!!.setOnLongClickListener { - TPRouteDataTestUtils.converToRouteData() - true - } - } - - override fun initViews(savedInstanceState: Bundle?) { - super.initViews(savedInstanceState) - initRouteNaviView(savedInstanceState) - initAmapNaviView(savedInstanceState) - } - - private fun initAmapNaviView(savedInstanceState: Bundle?) { - mAmapNaviVIew = findViewById(R.id.taxi_p_order_amap_navi_view) - mAmapNaviVIew?.onCreate(savedInstanceState) - TaxiPassengerModel.getInstance().startNaviByAmap() - } - - private fun initRouteNaviView(savedInstanceState: Bundle?) { - mMapRottingView = findViewById(R.id.taxi_p_order_rotting_map_view) - mMapRottingView?.onCreateView(savedInstanceState) - mMapRottingView?.setTaxiPassengerMapViewCallback(this) - } - - override fun createPresenter(): TaxiPassengerServingOrderPresenter { - return TaxiPassengerServingOrderPresenter(this) - } - - /** - * 设置进度条最大值为 起点终点首次规划出的值 - */ - private fun setSeekBarMax() { - //计算订单起点和终点距离 - val maxInt = SharedPrefsMgr.getInstance(requireContext()) - .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - d(SceneConstant.M_TAXI_P + TAG, "maxInt = $maxInt") - mProgressSeekBar!!.max = maxInt - } - - /** - * 行驶进度值更新 - */ - @RequiresApi(api = Build.VERSION_CODES.N) - private fun updateDriveProcessLoading(progressLoading: Int) { - val progressInt = SharedPrefsMgr.getInstance(requireContext()) - .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - progressLoading - d(SceneConstant.M_TAXI_P + TAG, "progressInt = $progressInt") - mProgressSeekBar?.setProgress(progressInt, true) - mProgressSeekBar?.jumpDrawablesToCurrentState() - } - - private fun updateDriveRoadName(currentRoadName: String) { - mProgessDes?.text = currentRoadName - } - - override fun onResume() { - super.onResume() - mMapRottingView?.onResume() - mAmapNaviVIew?.onResume() - TaxiPassengerModel.getInstance().initGeocodeSearch() - } - - override fun onHiddenChanged(hidden: Boolean) { - super.onHiddenChanged(hidden) - if (hidden) { //fragment 隐藏, 导航取消c - clearPolyline() - TaxiPassengerModel.getInstance().destoryGeocodeSearch() - } else { //fragment 显示, 导航开始 - e(SceneConstant.M_TAXI_P + "TaxiPassengerNaviTo", "initGeocodeSearch") - TaxiPassengerModel.getInstance().initGeocodeSearch() - } - } - - override fun onPause() { - super.onPause() - mMapRottingView?.onPause() - mAmapNaviVIew?.onPause() - } - - override fun onDestroy() { - super.onDestroy() - mMapRottingView?.onDestroy() - mAmapNaviVIew?.onDestroy() - AmapNaviToDestinationModel.getInstance(context).destroyAmaNavi() - TaxiPassengerModel.getInstance().destoryGeocodeSearch() - } - - fun showRottingMapView() { - if (mAmapNaviVIew != null && mAmapNaviVIew!!.visibility == View.VISIBLE) { - mAmapNaviVIew!!.visibility = View.GONE - } - if (mMapRottingView != null && mMapRottingView!!.visibility == View.GONE) { - mMapRottingView!!.visibility = View.VISIBLE - } - } - - fun setLineMarker(startStation: LatLng?, endStation: LatLng?) { - if (startStation != null && endStation != null) { - UiThreadHandler.post { mMapRottingView?.setLineMarker(startStation, endStation) } - } else { - clearPolyline() - } - } - - fun routeResultByServer( - routeArriviedTemp: List?, - routeArrivingTemp: List?, - location: MogoLocation - ) { - if (routeArriviedTemp.isNullOrEmpty()||routeArrivingTemp.isNullOrEmpty()) { - clearPolyline() - } else { - drawablePolylineByServerRoute(routeArriviedTemp, routeArrivingTemp,location) - } - } - - private fun drawablePolylineByServerRoute(routeArrivied: List?, - routeArriving: List?, - location: MogoLocation?) { - mMapRottingView?.setCoordinatesLatLng(routeArrivied, routeArriving,location) - UiThreadHandler.post { mMapRottingView?.drawablePolyline() } - } - - private fun clearPolyline() { - UiThreadHandler.post { mMapRottingView?.clearPolyline() } - } - - fun updateOrderStatusView(order: TaxiPassengerOrderQueryRespBean.Result) { - mTPOrderStartStation!!.text = order.startSiteAddr - mTPOrderEndStation!!.text = order.endSiteAddr - if (TaxiPassengerOrderStatusEnum.ArriveAtStart.code == order.orderStatus) { - mTPOrderStatus!!.text = getString(R.string.taxi_p_arrive_to_start) - mTPOrderRemainDis!!.text = "--" - mTPOrderRemainTime!!.text = "--" - mTPOrderRemainArriveTime!!.text = "--" - setSeekBarMax() - return - } - if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.code == order.orderStatus) { - mTPOrderStatus!!.setText(R.string.taxi_p_start_to_end) - setSeekBarMax() - return - } - } - - /** - * 剩余里程,剩余时间,当前定位点所在道路 - * @param meters 单位 米 - * @param remainTime 单位 秒 - */ - @RequiresApi(api = Build.VERSION_CODES.N) - fun onCurrentOrderDistToEndChanged(meters: Long, remainTime: Long) { - var disUnit = "公里" - var remainDis = "0" - if (meters > 0) { - if (meters / 1000 < 1) { - disUnit = "米" - remainDis = Math.round(meters.toFloat()).toString() - } else { - disUnit = "公里" - remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) - } - } - val time = Math.ceil(remainTime.toDouble() / 60f).toInt() - val beforeTime = Calendar.getInstance() - beforeTime.add(Calendar.MINUTE, time) - val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.HH_mm) - updateOrderDisAndTimeView(remainDis, disUnit, time, arriveTime) - updateDriveProcessLoading(meters.toInt()) - } - - fun onCurrentRoadName(roadName: String) { - updateDriveRoadName(roadName) - } - - private fun updateOrderDisAndTimeView( - remainDis: String, - remainDisUnit: String, - remainTime: Int, - arriveTime: String - ) { - mTPOrderRemainDis!!.text = remainDis - mTPOrderRemainDisUnit!!.text = remainDisUnit - mTPOrderRemainTime!!.text = remainTime.toString() - mTPOrderRemainArriveTime!!.text = arriveTime - } - - fun onCarLocationChanged(location: MogoLocation) { - updateSpeedView(location.gnssSpeed) - } - - fun onLimitingVelocityChange(limitingVelocity: Int) { - mLimitingVelocity = limitingVelocity - } - - /** - * 更新速度 - * - * @param newSpeed - */ - private fun updateSpeedView(newSpeed: Float) { - val speed = (Math.abs(newSpeed) * 3.6f).toInt() // 倒车时工控机反馈定位信息中speed为负值 - d(SceneConstant.M_TAXI_P + TAG, "mLimitingVelocity = $mLimitingVelocity") - mTPSpeedTv?.setmColorList( - intArrayOf( - resources.getColor(R.color.taxi_p_speed_normal_color1), resources.getColor( - R.color.taxi_p_speed_normal_color2 - ) - ) - ) - mTPSpeedTv?.text = speed.toString() - mTPSpeedTvShadowBg?.text = speed.toString() - mSpeedLayoutBg?.setImageResource(R.drawable.taxi_p_speed_light_green_bg) - } - - override fun onCameraChange(bearing: Float) { - startIvCompass(360-bearing) - } - - /** - * 设置指南针旋转 - * - * @param bearing - */ - private fun startIvCompass(bearing: Float) { - d(SceneConstant.M_TAXI_P + TAG, "startIvCompass: $bearing") - rotateAnimation = RotateAnimation( - lastBearing, bearing, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f - ) - rotateAnimation!!.fillAfter = true - mMapArrowIcon!!.startAnimation(rotateAnimation) - lastBearing = bearing - } - - override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? { - if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) { - return if (enter) { //普通的进入的动作 - AnimatorInflater.loadAnimator( - context, - R.animator.alpha_hide_show_f - ) - } else { //比如一个已经Fragmen被另一个replace,是一个进入动作,被replace的那个就是false - AnimatorInflater.loadAnimator( - context, - R.animator.alpha_hide_hide_f - ) - } - } else if (FragmentTransaction.TRANSIT_FRAGMENT_CLOSE == transit) { - return if (enter) { //之前被replace的重新进入到界面或者Fragment回到栈顶 - AnimatorInflater.loadAnimator( - context, - R.animator.alpha_hide_show_f - ) - } else { //Fragment退出,出栈 - AnimatorInflater.loadAnimator( - context, - R.animator.alpha_hide_hide_f - ) - } - } - return super.onCreateAnimator(transit, enter, nextAnim) - } - - companion object { - @JvmStatic - fun newInstance(): TaxiPassengerServingOrderFragment { - val args = Bundle() - val fragment = TaxiPassengerServingOrderFragment() - fragment.arguments = args - return fragment - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java deleted file mode 100644 index 29c26ae3c7..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java +++ /dev/null @@ -1,289 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.elegant.utils.UiThreadHandler; -import com.mogo.commons.AbsMogoApplication; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.OverlayViewUtils; -import com.mogo.eagle.core.utilcode.util.ToastUtils; -import com.mogo.och.common.module.utils.AnimatorDrawableUtil; -import com.mogo.och.common.module.wigets.sfv.FrameSurfaceView; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.callback.ITPClickStartAutopilotCallback; - -import java.util.Arrays; - -/** - * @author: wangmingjun - * @date: 2022/6/14 - */ -public class TaxiPassengerStartAutopilotView extends RelativeLayout implements View.OnClickListener { - - private static final String TAG = TaxiPassengerStartAutopilotView.class.getSimpleName(); - - private TextView mStartAutopilotBtn; - private ImageView mAutopilotBtnBg; - private ImageView mCloseIV; - private ITPClickStartAutopilotCallback mClickCallback; - public boolean isStarting = false; - private static final long TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L; - private Context mContext; - private View view; - private AnimatorDrawableUtil mAnimationDrawable ; - private AnimatorDrawableUtil mCarAnimationDrawable ; - private ImageView mCarIv; - private Integer[] startingAnimIds = new Integer[]{ - R.drawable.light_00000, - R.drawable.light_00001, - R.drawable.light_00002, - R.drawable.light_00003, - R.drawable.light_00004, - R.drawable.light_00005, - R.drawable.light_00006, - R.drawable.light_00007, - R.drawable.light_00008, - R.drawable.light_00009, - R.drawable.light_00010, - R.drawable.light_00011, - R.drawable.light_00012, - R.drawable.light_00013 - }; - private Integer[] startBtnBgAnimIds = new Integer[]{ - R.drawable.image_00000, R.drawable.image_00001, R.drawable.image_00002, R.drawable.image_00003, - R.drawable.image_00004, R.drawable.image_00005, R.drawable.image_00006, R.drawable.image_00007, - R.drawable.image_00008, R.drawable.image_00009, R.drawable.image_00010, R.drawable.image_00011, - R.drawable.image_00012, R.drawable.image_00013,R.drawable.image_00014,R.drawable.image_00015, - R.drawable.image_00016, R.drawable.image_00017,R.drawable.image_00018,R.drawable.image_00019, - R.drawable.image_00020, R.drawable.image_00021,R.drawable.image_00022,R.drawable.image_00023, - R.drawable.image_00024, R.drawable.image_00025,R.drawable.image_00026,R.drawable.image_00027, - R.drawable.image_00028, R.drawable.image_00029,R.drawable.image_00030,R.drawable.image_00031, - R.drawable.image_00032, R.drawable.image_00033,R.drawable.image_00034,R.drawable.image_00035, - R.drawable.image_00036, R.drawable.image_00037,R.drawable.image_00038,R.drawable.image_00039, - R.drawable.image_00040, R.drawable.image_00041,R.drawable.image_00042,R.drawable.image_00043, - R.drawable.image_00044, R.drawable.image_00045,R.drawable.image_00046,R.drawable.image_00047, - R.drawable.image_00048, R.drawable.image_00049,R.drawable.image_00050,R.drawable.image_00051, - R.drawable.image_00052, R.drawable.image_00053,R.drawable.image_00054,R.drawable.image_00055, - R.drawable.image_00056, R.drawable.image_00057,R.drawable.image_00058,R.drawable.image_00059, - R.drawable.image_00060, R.drawable.image_00061,R.drawable.image_00062,R.drawable.image_00063, - R.drawable.image_00064, R.drawable.image_00065,R.drawable.image_00066,R.drawable.image_00067, - R.drawable.image_00068,R.drawable.image_00069,R.drawable.image_00070, R.drawable.image_00071, - R.drawable.image_00072,R.drawable.image_00073, R.drawable.image_00074, R.drawable.image_00075, - R.drawable.image_00076,R.drawable.image_00077,R.drawable.image_00078,R.drawable.image_00079, - R.drawable.image_00080, R.drawable.image_00081, R.drawable.image_00082,R.drawable.image_00083, - R.drawable.image_00084, R.drawable.image_00085, R.drawable.image_00086,R.drawable.image_00087, - R.drawable.image_00088, R.drawable.image_00089, R.drawable.image_00090,R.drawable.image_00091, - R.drawable.image_00092, R.drawable.image_00093, R.drawable.image_00094,R.drawable.image_00095, - R.drawable.image_00096, R.drawable.image_00097, R.drawable.image_00098,R.drawable.image_00099, - }; - - public TaxiPassengerStartAutopilotView(Context context) { - super(context); - mContext = context; - initView(context); - } - - private void initView(Context context) { - view = LayoutInflater.from(context).inflate(R.layout.taxi_p_start_autopilot_view, this,true); - mStartAutopilotBtn = view.findViewById(R.id.taxi_p_start_autopilot); - mStartAutopilotBtn.setOnClickListener(this); - - mCloseIV = view.findViewById(R.id.starting_autopilot_view_close); - mCloseIV.setOnClickListener(this); - - mAutopilotBtnBg = view.findViewById(R.id.taxi_p_autopilot_btn_bg); - mCarIv = view.findViewById(R.id.taxi_p_autopilot_starting); - -// initBtnAnimatonDrawable(); -// -// initCarStartingFrame(); - } - - private void initCarStartingFrame() { - mCarAnimationDrawable = new AnimatorDrawableUtil(); - mCarAnimationDrawable.setAnimation(mCarIv,Arrays.asList(startingAnimIds)); - } - - private void initBtnAnimatonDrawable() { - mAnimationDrawable = new AnimatorDrawableUtil(); - mAnimationDrawable.setAnimation(mAutopilotBtnBg,Arrays.asList(startBtnBgAnimIds)); - } - - public void setOnClickStartAutopilotBtnCallback(ITPClickStartAutopilotCallback clickCallback){ - this.mClickCallback = clickCallback; - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.taxi_p_start_autopilot){ - //开启动画和自动驾驶 - if (!(boolean)mStartAutopilotBtn.getTag()){ - ToastUtils.showLong(R.string.taxi_p_start_autopilot_un_click_tip); - return; - } - if (!isStarting){ - if (mClickCallback == null){ - CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"mClickCallback = null"); - return; - } - startOrStopLoadingAnim(true); - mClickCallback.onClickCallback(); - } - }else if (v.getId() == R.id.starting_autopilot_view_close){ - closeAllAnimsAndView(); - } - } - - @SuppressLint("UseCompatLoadingForDrawables") - public void handleStartAutopilotBtnStatus(boolean isClickable){ - - if (mCarIv != null){ - mCarIv.setBackgroundResource(R.drawable.light_00000); - } - if (mStartAutopilotBtn == null) return; - - updateStartAutopilotBtnStatus(isClickable); - - if (isClickable){ //高亮可点击状态下动画一直进行 - startAutopilotBgAnimatorDrawable(true); - }else {// 置灰色可点击状态下动画停止 - startAutopilotBgAnimatorDrawable(false); - } - } - - public void updateStartAutopilotBtnStatus(boolean isClickable){ - if (mContext == null) return; - if (isClickable){ - mStartAutopilotBtn.setTextColor( - mContext.getResources().getColor(R.color.taxi_p_start_autopilot_txt_color)); - mStartAutopilotBtn.setBackground(null); - }else { - mStartAutopilotBtn.setBackground( - mContext.getResources().getDrawable(R.drawable.taxi_p_start_autopilot_txt_btn_bg)); - mAutopilotBtnBg.setBackground(null); - mStartAutopilotBtn.setTextColor( - mContext.getResources().getColor(R.color.taxi_p_start_autopilot_txt_un_color)); - } - mStartAutopilotBtn.setTag(isClickable); - mStartAutopilotBtn.setText( - mContext.getResources().getString(R.string.taxi_p_start_autopilot_txt)); - } - - public void startAutopilotBgAnimatorDrawable(boolean isStart){ - - if (isStart){ - if (mAnimationDrawable == null){ - initBtnAnimatonDrawable(); - } - if (mAnimationDrawable != null){ - mAnimationDrawable.start(true, 30, null); - } - }else { - clearBgAnimDrawable(); - } - } - - private void startingCarBgAnimatorDrawable(boolean isStart){ - if (isStart){ - if (mCarAnimationDrawable == null){ - initCarStartingFrame(); - } - mCarIv.setBackgroundResource(0); - mCarAnimationDrawable.start(true,40, null); - }else { - if (mCarAnimationDrawable != null){ - mCarAnimationDrawable.stop(); - } - mCarIv.setBackgroundResource(R.drawable.light_00000); - } - } - - public void startOrStopLoadingAnim(boolean start) { - - startingCarBgAnimatorDrawable(start); - - if (start) { - isStarting = true; - mStartAutopilotBtn.setText(getResources().getString(R.string.taxi_p_start_autopilot_loading)); - mStartAutopilotBtn.setTextColor(getResources().getColor(R.color.taxi_p_start_autopilot_txt_color)); - - startingAutopilotCountDown(); - } else { - clearBgAnimDrawable(); - isStarting = false; - handleStartAutopilotBtnStatus(true); - } - } - - public void clearBgAnimDrawable() { - if (mAnimationDrawable != null){ - mAnimationDrawable.stop(); - } - } - - public void closeAllAnimsAndView(){ - isStarting = false; - clearStartingAnimFrame(); - clearBgAnimDrawable(); - OverlayViewUtils.dismissOverlayView(this); - mContext = null; - } - - public void clearStartingAnimFrame(){ - if (mCarAnimationDrawable != null){ - mCarAnimationDrawable.stop(); - } - } - public void onAutopilotStatusSuccess(){ - startOrStopLoadingAnim(false); - } - - private void startingAutopilotCountDown() { - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { //未启动成功20s后做处理 - if (isStarting){ //判断动画是否在进行 - ToastUtils.showLong(R.string.taxi_p_start_autopilot_fail_10s_tip); -// startOrStopLoadingAnim(false); - updateStatusCountDownOver(); - } - - } - },TIMER_START_AUTOPILOT_INTERVAL); - } - - private void updateStatusCountDownOver() { - if (mContext == null) return; - isStarting = false; - startingCarBgAnimatorDrawable(false); - mStartAutopilotBtn.setText( - mContext.getResources().getString(R.string.taxi_p_start_autopilot_txt)); - } - - @Override - protected void onDetachedFromWindow() { - isStarting = false; - clearStartingAnimFrame(); - clearBgAnimDrawable(); - mContext = null; - super.onDetachedFromWindow(); - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - try { - mContext = AbsMogoApplication.getApp(); - }catch (Exception e){ - e.printStackTrace(); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTrafficLightView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTrafficLightView.kt deleted file mode 100644 index 464e7a67a2..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTrafficLightView.kt +++ /dev/null @@ -1,200 +0,0 @@ -package com.mogo.och.taxi.passenger.ui - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import android.widget.LinearLayout -import com.mogo.eagle.core.data.enums.DataSourceType -import com.mogo.eagle.core.data.enums.TrafficLightEnum -import com.mogo.eagle.core.function.api.datacenter.union.IMoGoTrafficLightListener -import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager -import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.och.taxi.passenger.R -import kotlinx.android.synthetic.main.taxi_p_traffic_light_view.view.* - -/** - * Taxi乘客端:红绿灯view - * - * Created on 2022/3/14 - */ -class TaxiPassengerTrafficLightView @JvmOverloads constructor( - context: Context?, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : LinearLayout(context, attrs, defStyleAttr), IMoGoTrafficLightListener { - - companion object { - private const val TAG = "TaxiPassengerTrafficLightView" - } - - private var mCurrentLightId = TrafficLightEnum.BLACK - - init { - init(context) - } - - private fun init(context: Context?) { - LayoutInflater.from(context).inflate(R.layout.taxi_p_traffic_light_view, this, true) - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - CallerTrafficLightListenerManager.addListener(TAG, this) - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - CallerTrafficLightListenerManager.removeListener(TAG) - } - - /** - * 展示红绿灯预警 - * - * @param checkLightId 0-都是默认,1-红,2-黄,3-绿 - * @param lightSource 1:云端下发;2:自车感知 - */ - override fun showTrafficLight(checkLightId: TrafficLightEnum, lightSource: DataSourceType) { - super.showTrafficLight(checkLightId, lightSource) - mCurrentLightId = checkLightId - updateTrafficLightIcon(checkLightId) - } - - /** - * 关闭红绿灯预警展示,并重制灯态 - */ - override fun disableTrafficLight() { - super.disableTrafficLight() - UiThreadHandler.post { - mCurrentLightId = TrafficLightEnum.BLACK - this@TaxiPassengerTrafficLightView.visibility = GONE - } - } - - /** - * @param redNum 红灯倒计时 - * @param yellowNum 黄灯倒计时 - * @param greenNum 绿灯倒计时 - */ - override fun changeCountdownTrafficLightNum(redNum: Int, yellowNum: Int, greenNum: Int) { - super.changeCountdownTrafficLightNum(redNum, yellowNum, greenNum) - resetView() - when (mCurrentLightId) { - TrafficLightEnum.RED -> changeCountdownRed(redNum) - TrafficLightEnum.YELLOW -> changeCountdownYellow(yellowNum) - TrafficLightEnum.GREEN -> changeCountdownGreen(greenNum) - else -> UiThreadHandler.post { taxi_p_traffic_light_time_tv.text = "" } - } - } - - override fun changeCountdownRed(redNum: Int) { - super.changeCountdownRed(redNum) - UiThreadHandler.post { - if (redNum > 0) { - resetView() - taxi_p_traffic_light_time_tv.setVertrial(true) - taxi_p_traffic_light_time_tv.setmColorList( - intArrayOf( - resources.getColor(R.color.taxi_p_traffic_light_red_color_up), - resources.getColor(R.color.taxi_p_traffic_light_red_color_down) - ) - ) - taxi_p_traffic_light_time_tv.text = redNum.toString() - } else { - disableTrafficLightCountDown() - taxi_p_traffic_light_time_tv.text = "" - } - } - } - - override fun changeCountdownGreen(greenNum: Int) { - super.changeCountdownGreen(greenNum) - UiThreadHandler.post { - if (greenNum > 0) { - resetView() - taxi_p_traffic_light_time_tv.setVertrial(true) - taxi_p_traffic_light_time_tv.setmColorList( - intArrayOf( - resources.getColor(R.color.taxi_p_traffic_light_green_color_up), - resources.getColor(R.color.taxi_p_traffic_light_green_color_down) - ) - ) - taxi_p_traffic_light_time_tv.text = greenNum.toString() - } else { - disableTrafficLightCountDown() - taxi_p_traffic_light_time_tv.text = "" - } - } - } - - override fun changeCountdownYellow(yellowNum: Int) { - super.changeCountdownYellow(yellowNum) - UiThreadHandler.post { - if (yellowNum > 0) { - resetView() - taxi_p_traffic_light_time_tv.setVertrial(true) - taxi_p_traffic_light_time_tv.setmColorList( - intArrayOf( - resources.getColor(R.color.taxi_p_traffic_light_yellow_color_up), - resources.getColor(R.color.taxi_p_traffic_light_yellow_color_down) - ) - ) - taxi_p_traffic_light_time_tv.text = yellowNum.toString() - } else { - disableTrafficLightCountDown() - taxi_p_traffic_light_time_tv.text = "" - } - } - } - - /** - * 更新红绿灯icon - * - * @param lightId 0-都是默认,1-红,2-黄,3-绿 - */ - private fun updateTrafficLightIcon(lightId: TrafficLightEnum) { - UiThreadHandler.post { - when (lightId) { - TrafficLightEnum.RED -> { - taxi_p_traffic_light_iv.setBackgroundResource(R.drawable.taxi_p_light_red_nor) - this@TaxiPassengerTrafficLightView.visibility = VISIBLE - } - TrafficLightEnum.YELLOW -> { - taxi_p_traffic_light_iv.setBackgroundResource(R.drawable.taxi_p_lightyellow_nor) - this@TaxiPassengerTrafficLightView.visibility = VISIBLE - } - TrafficLightEnum.GREEN -> { - taxi_p_traffic_light_iv.setBackgroundResource(R.drawable.taxi_p_light_green_nor) - this@TaxiPassengerTrafficLightView.visibility = VISIBLE - } - else -> this@TaxiPassengerTrafficLightView.visibility = GONE - } - } - } - - override fun disableTrafficLightCountDown() { - super.disableTrafficLightCountDown() - UiThreadHandler.post { - val layoutParams = layoutParams - if (layoutParams is MarginLayoutParams) { - layoutParams.width = - resources.getDimension(R.dimen.taxi_p_traffic_light_icon_size).toInt() - setLayoutParams(layoutParams) - taxi_p_traffic_light_time_tv.visibility = GONE - taxi_p_traffic_light_bg.layoutParams.width = - resources.getDimension(R.dimen.dp_124).toInt() - } - } - } - - private fun resetView() { - val layoutParams = layoutParams - if (layoutParams is MarginLayoutParams) { - val lp = layoutParams - lp.width = resources.getDimension(R.dimen.taxi_p_traffic_light_layout_width).toInt() - setLayoutParams(lp) - taxi_p_traffic_light_time_tv.visibility = VISIBLE - taxi_p_traffic_light_bg.layoutParams.width = - resources.getDimension(R.dimen.taxi_p_traffic_light_bg_width).toInt() - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java deleted file mode 100644 index c05c0d4fad..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mogo.eagle.core.data.enums.SidePattern; -import com.mogo.eagle.core.function.api.hmi.view.IViewNotification; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.taxi.passenger.R; - -import org.jetbrains.annotations.Nullable; - -/** - * V2X预警事件view:通过FloatWindow呈现,无需加入到自定义layout中 - * - * Created on 2022/3/16 - */ -public class TaxiPassengerV2XNotificationView extends IViewNotification { - - private ImageView mV2XNotificationIcon; - private TextView mV2XNotificationText; - - public TaxiPassengerV2XNotificationView(@Nullable Context context) { - this(context, null, 0); - } - - public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs, - int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - - private void init(Context context) { - LayoutInflater.from(context).inflate(R.layout.taxi_p_v2x_notification_view, this, - true); - - mV2XNotificationIcon = findViewById(R.id.taxi_p_v2x_notification_icon_iv); - mV2XNotificationText = findViewById(R.id.taxi_p_v2x_notification_text_tv); - - // 设置View的出场位置 - setSidePattern(SidePattern.LEFT); - setLayoutGravity(Gravity.LEFT | Gravity.TOP); - // 设置View的停留位置:相对屏幕左上角的位置 -// setOffsetX(getResources(). -// getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left)); -// setOffsetY(getResources(). -// getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top)); - setPadding(getResources(). - getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left), getResources(). - getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top), 0, 0); - } - - @Override - public void setWarningIcon(int warningIcon) { - super.setWarningIcon(warningIcon); - UiThreadHandler.post(() -> { - mV2XNotificationIcon.setImageResource(warningIcon); - }); - } - - @Override - public void setWarningIcon(@Nullable Drawable drawable) { - super.setWarningIcon(drawable); - UiThreadHandler.post(() -> { - mV2XNotificationIcon.setImageDrawable(drawable); - }); - } - - @Override - public void setWarningContent(@Nullable CharSequence warningContent) { - super.setWarningContent(warningContent); - UiThreadHandler.post(() -> { - mV2XNotificationText.setText(warningContent); - }); - } - - @Override - public void setWarningContent(int warningContentId) { - super.setWarningContent(warningContentId); - UiThreadHandler.post(() -> { - mV2XNotificationText.setText(warningContentId); - }); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/AroundProviderImpl.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/AroundProviderImpl.kt new file mode 100644 index 0000000000..834505adc6 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/AroundProviderImpl.kt @@ -0,0 +1,135 @@ +package com.mogo.och.taxi.passenger.ui.arrived + +import android.content.* +import android.graphics.BitmapFactory +import android.util.* +import androidx.core.util.Pools +import com.mogo.eagle.core.data.config.* +import com.mogo.eagle.core.function.api.autopilot.* +import com.mogo.eagle.core.function.api.lookaround.* +import com.mogo.eagle.core.function.api.lookaround.data.* +import com.mogo.eagle.core.function.call.autopilot.* +import com.mogo.eagle.core.utilcode.mogo.* +import com.zhjt.mogo.adas.data.* +import com.zhjt.mogo.adas.data.bean.* +import kotlinx.coroutines.* +import kotlinx.coroutines.channels.* +import kotlinx.coroutines.channels.Channel.Factory.CONFLATED +import kotlinx.coroutines.flow.* +import java.util.concurrent.atomic.AtomicInteger +import kotlin.concurrent.* + +internal class AroundProviderImpl: IMoGoBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener { + + companion object { + private const val TAG = "AroundProviderImpl" + } + + @OptIn(ExperimentalCoroutinesApi::class) + private var channel: Channel = Channel(CONFLATED) + get() { + return if (field.isClosedForReceive || field.isClosedForSend) { + Channel(CONFLATED) + } else { + field + } + } + + private val pool by lazy { Pools.SynchronizedPool(10) } + + private val bitmapWidth by lazy { AtomicInteger(0) } + + private val bitmapHeight by lazy { AtomicInteger(0) } + + //276,319,147,366 + private val targetX by lazy { AtomicInteger(0) } + + private val targetY by lazy { AtomicInteger(0) } + + private val targetWidth by lazy { AtomicInteger(0) } + + private val targetHeight by lazy { AtomicInteger(0) } + + private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) } + + @Volatile + private var job: Job? = null + + fun init() { + CallerBackCameraVideoListenerManager.addListener(TAG, this) + CallerRoboBusJinlvM1StitchedVideoListenerManager.addListener(TAG, this) + } + fun removeListener() { + CallerBackCameraVideoListenerManager.removeListener(TAG) + CallerRoboBusJinlvM1StitchedVideoListenerManager.removeListener(TAG) + } + + @OptIn(ExperimentalCoroutinesApi::class) + fun flow(): Flow = channelFlow { + val iterator = this@AroundProviderImpl.channel.iterator() + while (iterator.hasNext()) { + send(iterator.next()) + } + }.flowOn(Dispatchers.IO) + + override fun onRoboBusJinlvM1StitchedVideo(data: ByteArray) { + if (bitmapWidth.get() == 0 || bitmapHeight.get() == 0) { + val options = BitmapFactory.Options() + options.inJustDecodeBounds = true + BitmapFactory.decodeByteArray(data,0 , data.size, options) + bitmapWidth.set(options.outWidth) + bitmapHeight.set(options.outHeight) + } + Log.d(TAG, "-- onRoboBusJinlvM1StitchedVideo -- bitmap:[${bitmapWidth.get()}, ${bitmapHeight.get()}] -- data: ${data.size}") + var old = pool.acquire() + try { + if (old == null) { + old = LookAroundData(data, bitmapWidth.get(), bitmapHeight.get(), targetX.get(), targetY.get(), targetWidth.get(), targetHeight.get()) + } else { + old.data = data + old.bitmapWidth = bitmapWidth.get() + old.bitmapHeight = bitmapHeight.get() + old.targetX = targetX.get() + old.targetY = targetY.get() + old.targetWidth = targetWidth.get() + old.targetHeight = targetHeight.get() + } + channel.trySend(old) + } finally { + if (old != null) { + pool.release(old) + } + } + + } + + override fun onBackCameraVideo(data: ByteArray) { + if (bitmapWidth.get() == 0 || bitmapHeight.get() == 0) { + val options = BitmapFactory.Options() + options.inJustDecodeBounds = true + BitmapFactory.decodeByteArray(data,0 , data.size, options) + bitmapWidth.set(options.outWidth) + bitmapHeight.set(options.outHeight) + } + Log.d(TAG, "-- onSweeperFutianBackCameraVideo -- bitmap:[${bitmapWidth.get()}, ${bitmapHeight.get()}] -- data: ${data.size}") + var old = pool.acquire() + try { + if (old == null) { + old = LookAroundData(data, bitmapWidth.get(), bitmapHeight.get(), targetX.get(), targetY.get(), targetWidth.get(), targetHeight.get()) + } else { + old.data = data + old.bitmapWidth = bitmapWidth.get() + old.bitmapHeight = bitmapHeight.get() + old.targetX = targetX.get() + old.targetY = targetY.get() + old.targetWidth = targetWidth.get() + old.targetHeight = targetHeight.get() + } + channel.trySend(old) + } finally { + if (old != null) { + pool.release(old) + } + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt new file mode 100644 index 0000000000..6239737409 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedView.kt @@ -0,0 +1,131 @@ +package com.mogo.och.taxi.passenger.ui.arrived + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.lifecycle.ViewModelProvider +import com.mogo.commons.AbsMogoApplication +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.OverlayViewUtils +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout +import com.mogo.och.taxi.passenger.widget.animutils.AnimationsContainer +import com.shuyu.gsyvideoplayer.GSYVideoManager +import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder +import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack +import io.reactivex.disposables.Disposable +import kotlinx.android.synthetic.main.taxi_p_arrived_end_panel.view.aciv_close +import kotlinx.android.synthetic.main.taxi_p_arrived_end_panel.view.actv_endstation +import kotlinx.android.synthetic.main.taxi_p_arrived_end_panel.view.iv_xiaozhi_belt +import kotlinx.android.synthetic.main.taxi_p_arrived_end_panel.view.svp_frame +import kotlinx.android.synthetic.main.taxi_p_arrived_end_panel.view.v_video_right_rear_view + + +/** + * + * 评价View + * Created on 2022/5/16 + */ +class ArrivedView : WindowRelativeLayout, ArrivedViewModel.ArrivedViewCallback { + + 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 subscribe: Disposable?=null + + private val gsyVideoOptionBuilder = GSYVideoOptionBuilder() + + private var taxiPxiaozhiLove: AnimationsContainer?=null + + private fun initView() { + d(SceneConstant.M_TAXI_P + TAG, "initView") + LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_end_panel, this, true) + svp_frame.setBackgroundResource(R.drawable.tail_ani_0000) + svp_frame.setIsTouchWiget(false) + svp_frame.setIsTouchWigetFull(false) + svp_frame.enableshowProgressDialog = false + svp_frame.enableDoubleClick = false + GSYVideoManager.instance().enableRawPlay(AbsMogoApplication.getApp()) + val url = "android.resource://" + context.packageName + "/" + R.raw.end_video + gsyVideoOptionBuilder.setUrl(url) + .setCacheWithPlay(false) + .setPlayTag("TaxiPassengerArrivedView") + .build(svp_frame) + + aciv_close.onClick { + OverlayViewUtils.dismissOverlayView(this) + } + + taxiPxiaozhiLove = AnimationsContainer(R.array.xiaozhi_love, 20,iv_xiaozhi_belt) + taxiPxiaozhiLove?.setOnAnimStopListener(object :AnimationsContainer.OnAnimationStoppedListener{ + override fun AnimationStopped() { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") + } + }) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val viewModel = ViewModelProvider(this).get(ArrivedViewModel::class.java) + viewModel.setViewCallback(this) + taxiPxiaozhiLove?.start() + v_video_right_rear_view.resetView() + } + + override fun onDetachedFromWindow() { + svp_frame.setBackgroundResource(R.drawable.tail_ani_0000) + svp_frame.setVideoAllCallBack(null) + svp_frame.onVideoReset() + svp_frame.release() + taxiPxiaozhiLove?.stop() + v_video_right_rear_view.resetView() + + super.onDetachedFromWindow() + subscribe?.let { + if (!it.isDisposed) { + it.dispose() + } + } + } + + /** + * 设置目的地重置星星状态 + */ + fun setDataAndStartAnimation() { + svp_frame.setVideoAllCallBack(object : GSYSampleCallBack() { + override fun onAutoComplete(url: String?, vararg objects: Any?) { + svp_frame.setBackgroundResource(R.drawable.tail_ani_0090) + } + }) + svp_frame.startPlayLogic() + RxUtils.createSubscribe(60_000) { + OverlayViewUtils.dismissOverlayView(this@ArrivedView) + } + } + + companion object { + const val TAG = "TaxiPassengerArrivedView" + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun setEndStation(stationName: String) { + actv_endstation.text = stationName + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedViewModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedViewModel.kt new file mode 100644 index 0000000000..0181c883ac --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/ArrivedViewModel.kt @@ -0,0 +1,32 @@ +package com.mogo.och.taxi.passenger.ui.arrived + +import androidx.lifecycle.ViewModel +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel + +class ArrivedViewModel: ViewModel() { + + private val TAG = ArrivedViewModel::class.java.simpleName + + private var viewCallback:ArrivedViewCallback?=null + + init { + + } + + fun setViewCallback(viewCallback: ArrivedViewCallback){ + this.viewCallback = viewCallback + TaxiPassengerModel.currentOCHOrder?.endSiteAddr?.let { + this.viewCallback?.setEndStation(it) + } + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + + interface ArrivedViewCallback{ + fun setEndStation(stationName:String) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamSurfaceView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamSurfaceView.kt new file mode 100644 index 0000000000..273dd793ab --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamSurfaceView.kt @@ -0,0 +1,171 @@ +package com.mogo.och.taxi.passenger.ui.arrived + +import android.content.* +import android.graphics.* +import android.graphics.Paint.Style.STROKE +import android.os.Handler +import android.os.HandlerThread +import android.os.SystemClock +import android.util.* +import android.view.SurfaceHolder +import android.view.SurfaceView +import android.widget.Toast +import com.mogo.eagle.core.function.api.autopilot.* +import com.mogo.eagle.core.function.api.lookaround.data.* +import com.mogo.eagle.core.function.call.autopilot.* +import com.mogo.eagle.core.function.call.devatools.* +import com.mogo.eagle.core.utilcode.kotlin.* +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.Utils +import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider +import kotlinx.coroutines.* +import kotlinx.coroutines.Runnable +import kotlinx.coroutines.flow.* +import java.util.concurrent.atomic.AtomicReference +import kotlin.math.* + +class RightRearCamSurfaceView: SurfaceView, SurfaceHolder.Callback, Runnable { + + constructor(context: Context?) : super(context) + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + companion object { + private const val TAG = "M1LookAroundView" + } + + init { + holder.addCallback(this) + } + + private val handler by lazy { AtomicReference() } + + private val lookAroundDataProvider by lazy { AroundProviderImpl() } + + private val bitmapPaint by lazy { Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG).also { it.xfermode = null } } + + + @Volatile + private var surfaceWidth = 0 + + @Volatile + private var surfaceHeight = 0 + + @Volatile + private var isSurfaceValid = false + + @Volatile + private var data: LookAroundData? = null + + override fun surfaceCreated(holder: SurfaceHolder) { + val old = handler.get() + if (old == null) { + handler.set(HandlerThread("look-around-drawer").let { it.start(); Handler(it.looper) }) + } else { + old.looper.quitSafely() + handler.set(HandlerThread("look-around-drawer").let { it.start(); Handler(it.looper) }) + } + handler.get()?.removeCallbacks(this) + handler.get()?.post(this) + isSurfaceValid = true + } + + override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) { + this.surfaceWidth = width + this.surfaceHeight = height + } + + override fun surfaceDestroyed(holder: SurfaceHolder) { + isSurfaceValid = false + } + + override fun run() { + var isTimedBlock = false + try { + if (!isSurfaceValid) { + isTimedBlock = true + return + } + if (this.surfaceWidth <= 0 || this.surfaceHeight <= 0) { + isTimedBlock = true + return + } + val data = this.data ?: return + val bitmapWidth = data.bitmapWidth + val bitmapHeight = data.bitmapHeight + val scaleX = this.surfaceWidth * 1.0f / bitmapWidth + val scaleY = this.surfaceHeight * 1.0f / bitmapHeight + val bytes = data.data + if (bytes == null) { + isTimedBlock = true + return + } + val canvas = holder.lockCanvas() + try { + if (canvas == null) { + isTimedBlock = true + return + } + //1. 绘制图片 + val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size) + if (bitmap == null) { + isTimedBlock = true + return + } + try { + canvas.save() + canvas.scale(scaleX, scaleY) + canvas.drawBitmap(bitmap, 0f, 0f, bitmapPaint) + } finally { + canvas.restore() + if (!bitmap.isRecycled) { + bitmap.recycle() + } + } + + } finally { + if (canvas != null) { + holder.unlockCanvasAndPost(canvas) + } + } + } finally { + if (isTimedBlock) { + try { + Thread.sleep(2000) + } catch (ignore: Exception) { } + } + handler.get().post(this) + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + Log.d(TAG, "--- 发起订阅 ---") + CallerAutoPilotControlManager.setIsSubscribeBackCameraVideoVideo(1, true) + lookAroundDataProvider.init() + scope.launch(ThreadUtils.getCpuPool().asCoroutineDispatcher()) { + lookAroundDataProvider.flow().also { flow -> + flow.onEach { + Log.d(TAG, "-- onEach ---:$it") + //if (it.isValid()) { + data = it + //} + }.collect() + } + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + Log.d(TAG, "--- 取消订阅 ---") + CallerAutoPilotControlManager.setIsSubscribeBackCameraVideoVideo(1, false) + lookAroundDataProvider.removeListener() + handler.get()?.looper?.quitSafely() + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + outlineProvider = TextureVideoViewOutlineProvider(36f) + clipToOutline = true + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt new file mode 100644 index 0000000000..6449fc6f0c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/arrived/RightRearCamView.kt @@ -0,0 +1,162 @@ +package com.mogo.och.taxi.passenger.ui.arrived + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.drawable.BitmapDrawable +import android.util.AttributeSet +import android.util.Log +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.api.autopilot.IMoGoBackCameraVideoListener +import com.mogo.eagle.core.function.api.autopilot.IMoGoRoboBusJinlvM1StitchedVideoListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.setIsSubscribeBackCameraVideoVideo +import com.mogo.eagle.core.function.call.autopilot.CallerBackCameraVideoListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StitchedVideoListenerManager +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.eagle.core.widget.media.video.TextureVideoViewOutlineProvider +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.taxi_p_right_rear_cam.view.actv_cam_position_group +import kotlinx.android.synthetic.main.taxi_p_right_rear_cam.view.v_video_right_rear + +/** + * + * 评价View + * Created on 2022/5/16 + */ +class RightRearCamView : ConstraintLayout , IMoGoBackCameraVideoListener, + IMoGoRoboBusJinlvM1StitchedVideoListener,Runnable { + + 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 mBitmap: Bitmap? = null + + private var mBitmapOptions: BitmapFactory.Options? = null //Bitmap管理类,可有效减少Bitmap的OOM问题 + + + private fun initView() { + d(SceneConstant.M_TAXI_P + TAG, "initView") + LayoutInflater.from(context).inflate(R.layout.taxi_p_right_rear_cam, this, true) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + setIsSubscribeBackCameraVideoVideo(1, true) + CallerBackCameraVideoListenerManager.addListener(TAG, this) + CallerRoboBusJinlvM1StitchedVideoListenerManager.addListener(TAG, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + setIsSubscribeBackCameraVideoVideo(1, false) + CallerBackCameraVideoListenerManager.removeListener(this) + CallerRoboBusJinlvM1StitchedVideoListenerManager.removeListener(this) + } + + companion object { + const val TAG = "RightRearCamView" + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + fun resetView(){ + actv_cam_position_group.visibility = GONE + v_video_right_rear.setImageResource(R.drawable.taxi_p_right_rear_cam) + } + + override fun onBackCameraVideo(data: ByteArray) { + decodeData(data) + } + + override fun onRoboBusJinlvM1StitchedVideo(data: ByteArray) { + decodeData(data) + } + + var preTime :Long=System.currentTimeMillis() + + @Synchronized + private fun decodeData(data: ByteArray){ + val currentTimeMillis = System.currentTimeMillis() + val dexTime = currentTimeMillis - preTime + preTime = currentTimeMillis + if(dexTime<20){ + return + } + d(SceneConstant.M_TAXI_P + TAG, "图片频率:$dexTime") + if (mBitmapOptions == null) { + val bmp = (v_video_right_rear.drawable as BitmapDrawable).bitmap + val width = bmp.width + val height = bmp.height + val config = bmp.config + mBitmap = Bitmap.createBitmap(width, height, config) + mBitmapOptions = BitmapFactory.Options() + //设置Bitmap内存复用 + mBitmapOptions!!.inBitmap = mBitmap //Bitmap复用内存块,类似对象池,避免不必要的内存分配和回收 + mBitmapOptions!!.inMutable = true //解码时返回可变Bitmap + + val options = BitmapFactory.Options() + options.inJustDecodeBounds = true + BitmapFactory.decodeByteArray(data, 0, data.size, options) + mBitmapOptions!!.inSampleSize = calculateInSampleSize(options, width, height) + } + mBitmapOptions?.let { + try { + val preTime = System.currentTimeMillis() + BitmapFactory.decodeByteArray(data, 0, data.size, mBitmapOptions) + d(SceneConstant.M_TAXI_P + TAG, "decode时间:${System.currentTimeMillis()-preTime}") + UiThreadHandler.post(this) + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + private fun calculateInSampleSize(options: BitmapFactory.Options, reqWidth: Int, reqHeight: Int): Int { + val width = options.outWidth + val height = options.outHeight + Log.i(TAG, "calculateInSampleSize: out width and height is $width height $height") + var inSampleWidth = 1 + if (height > reqHeight || width > reqWidth) { + val halfHeight = height / 2 + val halfWidth = width / 2 + // 采样率设置为2的指数 + while (halfHeight / inSampleWidth >= reqHeight && halfWidth / inSampleWidth >= reqWidth) { + inSampleWidth *= 2 + } + } + + while (width/inSampleWidth>reqWidth||height/inSampleWidth>reqHeight){ + inSampleWidth++ + } + + return inSampleWidth + } + + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + outlineProvider = TextureVideoViewOutlineProvider(36f) + clipToOutline = true + } + + override fun run() { + if(actv_cam_position_group?.visibility == GONE) { + actv_cam_position_group?.visibility = VISIBLE + } + v_video_right_rear?.setImageBitmap(mBitmap) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/bottom/BottomBar.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/bottom/BottomBar.kt new file mode 100644 index 0000000000..49681bafa2 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/bottom/BottomBar.kt @@ -0,0 +1,81 @@ +package com.mogo.och.taxi.passenger.ui.bottom + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_overmap +import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_precisionmap +import kotlinx.android.synthetic.main.taxi_p_bottom_bar.view.actv_video + +class BottomBar @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + private var checkIndex = SelectView.NONE + private var overMapViewApply:ApplyClickLintener?=null + + init { + isClickable = true + LayoutInflater.from(context).inflate(R.layout.taxi_p_bottom_bar, this, true) + setBackgroundResource(R.drawable.taxi_p_bottom_bar_bg) + actv_precisionmap.setOnClickListener { + setCheckIndex(SelectView.PRECISIONMAP) + } + actv_overmap.setOnClickListener { + setCheckIndex(SelectView.OVERMAPVIEW) + } + actv_video.setOnClickListener { + setCheckIndex(SelectView.VIDEO) + } + } + + fun getCurrentPage():SelectView{ + return checkIndex + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + setCheckIndex(SelectView.PRECISIONMAP) + } + + fun setOverMapApplyClick(overMapViewApply:ApplyClickLintener){ + this.overMapViewApply = overMapViewApply + } + + fun setCheckIndex(index: SelectView){ + if(checkIndex==index){ + return + }else{ + checkIndex = index + } + overMapViewApply?.onApplyClick(checkIndex) + if(checkIndex == SelectView.OVERMAPVIEW){ + actv_overmap.setCheckItem(true) + }else{ + actv_overmap.setCheckItem(false) + } + if(checkIndex == SelectView.VIDEO){ + actv_video.setCheckItem(true) + }else{ + actv_video.setCheckItem(false) + } + if(checkIndex == SelectView.PRECISIONMAP){ + actv_precisionmap.setCheckItem(true) + }else{ + actv_precisionmap.setCheckItem(false) + } + } + + enum class SelectView{ + NONE,PRECISIONMAP,OVERMAPVIEW,VIDEO + } + + interface ApplyClickLintener{ + fun onApplyClick(selectItem:SelectView) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/bottom/BottomCheckView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/bottom/BottomCheckView.kt new file mode 100644 index 0000000000..78dd252f72 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/bottom/BottomCheckView.kt @@ -0,0 +1,92 @@ +package com.mogo.och.bus.passenger.ui.view.bottom + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.m1_bottom_check.view.aciv_center_image +import kotlinx.android.synthetic.main.m1_bottom_check.view.actv_title + +open class BottomCheckView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + companion object { + private const val TAG = "StopSiteView" + } + + private var backageViewId: Int = -1 + private var bottomTitle: String = "" + private var selectedDrawable: Int = -1 + private var normalDrawable: Int = -1 + private var bottomTitleNormalColor:Int = -1 + private var bottomTitleCheckedColor:Int = -1 + private var backageView: View? = null + + private var isCheck = false + + init { + LayoutInflater.from(context).inflate(R.layout.m1_bottom_check, this, true) + try { + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.BottomSelectView) + backageViewId = typedArray.getResourceId(R.styleable.BottomSelectView_backageViewId, -1) + bottomTitle = typedArray.getString(R.styleable.BottomSelectView_bottomTitle) ?: "" + selectedDrawable = typedArray.getResourceId(R.styleable.BottomSelectView_selectedDrawable, -1) + normalDrawable = typedArray.getResourceId(R.styleable.BottomSelectView_normalDrawable, -1) + bottomTitleNormalColor = typedArray.getColor(R.styleable.BottomSelectView_bottomTitleNormalColor, + ContextCompat.getColor(context,R.color.white)) + bottomTitleCheckedColor = typedArray.getColor(R.styleable.BottomSelectView_bottomTitleCheckedColor, + ContextCompat.getColor(context,R.color.white)) + typedArray.recycle() + initView(context) + } catch (e: Exception) { + e.printStackTrace() + } + + } + + private fun initView(context: Context) { + if (selectedDrawable > 0) { + aciv_center_image.setImageResource(normalDrawable) + } + actv_title.text = bottomTitle + } + + fun setCheckItem(isCheck: Boolean) { + if (isCheck != this.isCheck) { + this.isCheck = isCheck + notifiBackageView() + } + } + + private fun notifiBackageView() { + if (isCheck) { + backageView?.visibility = View.VISIBLE + aciv_center_image.setImageResource(selectedDrawable) + actv_title.setTextColor(bottomTitleCheckedColor) + } else { + backageView?.visibility = View.GONE + aciv_center_image.setImageResource(normalDrawable) + actv_title.setTextColor(bottomTitleNormalColor) + } + } + + 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 + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerCheckView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/check/TaxiPassengerCheckView.kt similarity index 63% rename from OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerCheckView.kt rename to OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/check/TaxiPassengerCheckView.kt index 68fe7170da..ba7274a282 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerCheckView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/check/TaxiPassengerCheckView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.passenger.ui +package com.mogo.och.taxi.passenger.ui.check import android.content.Context import android.graphics.Typeface @@ -10,11 +10,32 @@ import android.view.LayoutInflater import android.view.View import android.widget.RelativeLayout import android.widget.TextView +import com.mogo.commons.voice.AIAssist 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.ToastUtils +import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_passenger_count +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_passenger_end +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_passenger_start +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_back +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_eight +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_first +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_five +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_four +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_fourth +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_nine +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_one +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_second +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_seven +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_six +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_submit +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_third +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_three +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_two +import kotlinx.android.synthetic.main.taxi_p_passenger_check_panel.view.tv_taxi_passenger_number_zero /** * V2X预警事件view:通过FloatWindow呈现,无需加入到自定义layout中 @@ -33,14 +54,6 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { var iTaxiPassengerCommonValueCallback: ITaxiPassengerCommonValueCallback?=null - private lateinit var tvPassengerCount: TextView - private lateinit var tvPassengerStart: TextView - private lateinit var tvPassengerEnd: TextView - private lateinit var tvTaxiNumber: TextView - private lateinit var tvTaxiPassengerNumberfirst: TextView - private lateinit var tvTaxiPassengerNumberSecond: TextView - private lateinit var tvTaxiPassengerNumberThird: TextView - private lateinit var tvTaxiPassengerNumberFourth: TextView private var index = 0 private var phone = "" @@ -50,39 +63,31 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { private fun initView(context: Context) { d(SceneConstant.M_TAXI_P + TAG, "initView") LayoutInflater.from(context).inflate(R.layout.taxi_p_passenger_check_panel, this, true) - tvPassengerCount = findViewById(R.id.tv_passenger_count) - tvPassengerStart = findViewById(R.id.tv_passenger_start) - tvPassengerEnd = findViewById(R.id.tv_passenger_end) - tvTaxiNumber = findViewById(R.id.tv_taxi_number) - tvTaxiPassengerNumberfirst = findViewById(R.id.tv_taxi_passenger_number_first) - tvTaxiPassengerNumberSecond = findViewById(R.id.tv_taxi_passenger_number_second) - tvTaxiPassengerNumberThird = findViewById(R.id.tv_taxi_passenger_number_third) - tvTaxiPassengerNumberFourth = findViewById(R.id.tv_taxi_passenger_number_fourth) keyBoardLogic() - numSelectTextView[0] = tvTaxiPassengerNumberfirst - numSelectTextView[1] = tvTaxiPassengerNumberSecond - numSelectTextView[2] = tvTaxiPassengerNumberThird - numSelectTextView[3] = tvTaxiPassengerNumberFourth + numSelectTextView[0] = tv_taxi_passenger_number_first + numSelectTextView[1] = tv_taxi_passenger_number_second + numSelectTextView[2] = tv_taxi_passenger_number_third + numSelectTextView[3] = tv_taxi_passenger_number_fourth } private fun keyBoardLogic() { - findViewById(R.id.tv_taxi_passenger_number_one).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_two).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_three).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_four).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_five).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_six).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_seven).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_eight).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_nine).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_zero).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_back).setOnClickListener(this) - findViewById(R.id.tv_taxi_passenger_number_submit).setOnClickListener(this) + tv_taxi_passenger_number_one.setOnClickListener(this) + tv_taxi_passenger_number_two.setOnClickListener(this) + tv_taxi_passenger_number_three.setOnClickListener(this) + tv_taxi_passenger_number_four.setOnClickListener(this) + tv_taxi_passenger_number_five.setOnClickListener(this) + tv_taxi_passenger_number_six.setOnClickListener(this) + tv_taxi_passenger_number_seven.setOnClickListener(this) + tv_taxi_passenger_number_eight.setOnClickListener(this) + tv_taxi_passenger_number_nine.setOnClickListener(this) + tv_taxi_passenger_number_zero.setOnClickListener(this) + tv_taxi_passenger_number_back.setOnClickListener(this) + tv_taxi_passenger_number_submit.setOnClickListener(this) - tvTaxiPassengerNumberfirst.setOnClickListener(this) - tvTaxiPassengerNumberSecond.setOnClickListener(this) - tvTaxiPassengerNumberThird.setOnClickListener(this) - tvTaxiPassengerNumberFourth.setOnClickListener(this) + tv_taxi_passenger_number_first.setOnClickListener(this) + tv_taxi_passenger_number_second.setOnClickListener(this) + tv_taxi_passenger_number_third.setOnClickListener(this) + tv_taxi_passenger_number_fourth.setOnClickListener(this) } @@ -112,6 +117,7 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { val numberStr = "${numSelect[0]}${numSelect[1]}${numSelect[2]}${numSelect[3]}" if(!phone.endsWith(numberStr)){ ToastUtils.showLong("请输入正确的手机尾号") + VoiceNotice.showNotice("验证失败!再检查一下吧~", AIAssist.LEVEL2) return } iTaxiPassengerCommonValueCallback?.onCommonCallback(numberStr) @@ -196,10 +202,9 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { Typeface.NORMAL,100, resources.getColorStateList(R.color.taxi_p_check_passenger_number) ,null ), 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE) - tvPassengerCount.text = sb - tvPassengerStart.text = "起 点 : $startSiteAddr" - tvPassengerEnd.text = "终 点 : $endSiteAddr" - tvTaxiNumber.text = "蘑菇 " + carNumber + "为您服务" + tv_passenger_count.text = sb + tv_passenger_start.text = "起 点 : $startSiteAddr" + tv_passenger_end.text = "终 点 : $endSiteAddr" for(i in numSelect.indices){ numSelect[i] = null } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt deleted file mode 100644 index 545947b0ef..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt +++ /dev/null @@ -1,479 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.comment - -import android.animation.* -import android.content.Context -import android.graphics.drawable.AnimationDrawable -import android.util.AttributeSet -import android.view.LayoutInflater -import android.view.View -import android.view.animation.Animation -import android.view.animation.AnimationUtils -import android.widget.ImageView -import android.widget.RelativeLayout -import android.widget.TextView -import androidx.appcompat.widget.AppCompatButton -import androidx.appcompat.widget.AppCompatImageView -import androidx.constraintlayout.widget.ConstraintLayout -import androidx.recyclerview.widget.RecyclerView -import com.amap.api.navi.view.PoiInputSearchWidget -import com.google.android.flexbox.FlexWrap -import com.google.android.flexbox.FlexboxLayoutManager -import com.google.android.flexbox.JustifyContent -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.OverlayViewUtils -import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer -import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.common.module.wigets.OCHBorderShadowLayout -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback -import com.mogo.och.taxi.passenger.callback.ITaxiPassengerScoreCallback -import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager -import com.mogo.och.taxi.passenger.ui.comment.adapter.CommentAdapter -import com.mogo.och.taxi.passenger.widget.ResizeAnimation -import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder -import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable -import java.util.concurrent.TimeUnit - - -/** - * - * 评价View - * Created on 2022/5/16 - */ -class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { - - constructor(context: Context?) : super(context) - - constructor(context: Context?, attributeSet: AttributeSet) : super(context, attributeSet) - - constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) - - constructor(context: Context?, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) - - private lateinit var mArrivedEndStation: TextView - private lateinit var tvFeel: TextView - private lateinit var ochShadowLayout: OCHBorderShadowLayout - private lateinit var ochThankShadowLayout: OCHBorderShadowLayout - private lateinit var ivStarFirst: ImageView - private lateinit var ivStarSecond: ImageView - private lateinit var ivStarThird: ImageView - private lateinit var ivStarFourth: ImageView - private lateinit var ivStarFifth: ImageView - private lateinit var ivAnimalList: ImageView - private lateinit var btnSubmit: AppCompatButton - private lateinit var rvCommentList: RecyclerView - private lateinit var acivClose: AppCompatImageView - private lateinit var svpFrame: SimpleVideoPlayer - private lateinit var clCommentContain: ConstraintLayout - private var subscribe: Disposable?=null - private var orderNo = "" - private var currentFraction = 1 - - private val gsyVideoOptionBuilder = GSYVideoOptionBuilder() - - - var iTaxiPassengerScoreCallback: ITaxiPassengerScoreCallback?=null - - var taxiPassengerCommonCallback: ITaxiPassengerCommonCallback?=null - var left2Right: Animation = AnimationUtils.loadAnimation( - context, R.anim.left_to_right - ) - var right2Left: Animation = AnimationUtils.loadAnimation( - context, R.anim.right_to_left - ) - var alphaAnimation: Animation = AnimationUtils.loadAnimation( - context, R.anim.alpha_hide_show - ) - - private var allStartOrdered = mutableListOf() - - var showThanks:Boolean = false - var allStarWithWorld: TaxiPassengerAllStarWorld?=null - - private fun initView(context: Context) { - d(SceneConstant.M_TAXI_P + TAG, "initView") - LayoutInflater.from(context).inflate(R.layout.taxi_p_arrived_end_panel, this, true) - mArrivedEndStation = findViewById(R.id.arrived_end_station) - tvFeel = findViewById(R.id.tv_feel) - ochShadowLayout = findViewById(R.id.och_shadow_layout) - ochThankShadowLayout = findViewById(R.id.och_thank_shadow_layout) - ivAnimalList = findViewById(R.id.iv_animal_list) - acivClose = findViewById(R.id.aciv_close) - svpFrame = findViewById(R.id.svp_frame) - rvCommentList = findViewById(R.id.rv_comment_list) - clCommentContain = findViewById(R.id.cl_comment_contain) - btnSubmit = findViewById(R.id.btn_submit) - svpFrame.setBackgroundResource(R.drawable.tail_ani_0000) - svpFrame.setIsTouchWiget(false) - svpFrame.setIsTouchWigetFull(false) - svpFrame.enableshowProgressDialog = false - svpFrame.enableDoubleClick = false - - allStartOrdered = mutableListOf() - initCommentList() - initScore() - - findViewById(R.id.tv_please_score).setOnClickListener(this) - - - acivClose.setOnClickListener { - ochShadowLayout.visibility = View.GONE - OverlayViewUtils.dismissOverlayView(this@TaxiPassengerArrivedView) - } - - val url = "android.resource://" + context.packageName + "/" + R.raw.end_video - gsyVideoOptionBuilder.setUrl(url) - .setCacheWithPlay(false) - .setPlayTag("TaxiPassengerArrivedView") - .build(svpFrame) - } - - private fun initCommentList() { - val recyclerVideoAdapter = CommentAdapter(context, mutableListOf()) - rvCommentList.adapter = recyclerVideoAdapter - val manager = FlexboxLayoutManager(context) - manager.justifyContent = JustifyContent.CENTER - manager.flexWrap = FlexWrap.WRAP - rvCommentList.layoutManager = manager - btnSubmit.setOnClickListener(this) - } - - private fun initScore() { - ivStarFirst = findViewById(R.id.iv_star_first) - ivStarSecond = findViewById(R.id.iv_star_second) - ivStarThird = findViewById(R.id.iv_star_third) - ivStarFourth = findViewById(R.id.iv_star_fourth) - ivStarFifth = findViewById(R.id.iv_star_fifth) - ivStarFirst.setOnClickListener(this) - ivStarSecond.setOnClickListener(this) - ivStarThird.setOnClickListener(this) - ivStarFourth.setOnClickListener(this) - ivStarFifth.setOnClickListener(this) - - allStartOrdered.add(ivStarFirst) - allStartOrdered.add(ivStarSecond) - allStartOrdered.add(ivStarThird) - allStartOrdered.add(ivStarFourth) - allStartOrdered.add(ivStarFifth) - - // 请求文案 - requestStarWord() - } - - - override fun onDetachedFromWindow() { - svpFrame.setBackgroundResource(R.drawable.tail_ani_0000) - svpFrame.setVideoAllCallBack(null) - svpFrame.onVideoReset() - svpFrame.release() - tvFeel.text = "" - rvCommentList.visibility = View.INVISIBLE - btnSubmit.visibility = View.INVISIBLE - clCommentContain.getLayoutParams().height = 748 - clCommentContain.requestLayout() - super.onDetachedFromWindow() - subscribe?.let { - if (!it.isDisposed) { - it.dispose() - } - } - } - - override fun onClick(v: View?) { - when (v?.id) { - R.id.tv_please_score -> { - //iTaxiPassengerScoreCallback?.onScoreCallback(2,orderNo) - } - R.id.iv_star_first -> {commitAndStartAnimation(1,"非常差")} - R.id.iv_star_second -> {commitAndStartAnimation(2,"差")} - R.id.iv_star_third -> {commitAndStartAnimation(3,"一般")} - R.id.iv_star_fourth -> {commitAndStartAnimation(4,"舒适")} - R.id.iv_star_fifth -> {commitAndStartAnimation(5,"非常棒")} - R.id.btn_submit -> {submitScore()} - else -> {} - } - } - - /** - * 提交到后台 - */ - private fun submitScore() { - val commentAdapter = rvCommentList.adapter as CommentAdapter - val selectComment = commentAdapter.getSelectComment() - if(selectComment.isEmpty()){ - ToastUtils.showLong("请选择评价内容") - return - } - iTaxiPassengerScoreCallback?.onScoreCallback(TaxiPassengerScoreUpdateOrderReqBean(orderNo,currentFraction,selectComment)) - } - - private fun commitAndStartAnimation(fraction: Int,title:String) { - resetStar() - allStartOrdered.forEach { - it.isEnabled = false - } - currentFraction = fraction - tvFeel.text = title - if(allStarWithWorld!=null&&allStarWithWorld!!.data!=null&&allStarWithWorld!!.data!!.size>0){ - // 已经请求到总量了 - val filter = allStarWithWorld!!.data.filter { - it.isSelect = false - it.star == fraction.toString() - } - val commentAdapter = rvCommentList.adapter as CommentAdapter - commentAdapter.addAll(filter.toMutableList()) - startStartAnimation(fraction) - }else{ - // 总量请求失败 单独去取 - requestStarWordByStar(fraction) - } - } - private var currentAnimarion = 0 - private var maxIndex = 0 - private fun startStartAnimation(fraction: Int) { - currentAnimarion = 0 - maxIndex = fraction-1 - try { - animation(fraction) - } catch (e: Exception) { - e.printStackTrace() - } - } - - /** - * 星星动画 - */ - private fun animation(fraction: Int) { - - val showView = allStartOrdered[currentAnimarion] - showView.setImageResource(R.drawable.taxi_p_passenger_star_check) - val alpha = ObjectAnimator.ofFloat(showView, "alpha", 0.1f, 1f) - .setDuration(120) - alpha.addUpdateListener(object : ValueAnimator.AnimatorUpdateListener{ - var isStart = false - override fun onAnimationUpdate(animation: ValueAnimator) { - val animatedValue = animation?.getAnimatedValue("alpha") - animatedValue as Float - if(animatedValue>0.45&&!isStart){ - isStart = true - //开始下一个 - if(currentAnimarion==maxIndex){ - return - } - currentAnimarion++ - animation(fraction) - } - } - - }) - - val keyframe1 = Keyframe.ofFloat(0f,1f) - val keyframe3 = Keyframe.ofFloat(0.9f,1.2f) - val keyframe4 = Keyframe.ofFloat(1f,1f) - val holderX = PropertyValuesHolder.ofKeyframe( - "scaleX", keyframe1, keyframe3, keyframe4 - ) - val holderY = PropertyValuesHolder.ofKeyframe( - "scaleY", keyframe1, keyframe3, keyframe4 - ) - val scaleX = ObjectAnimator.ofPropertyValuesHolder(showView, holderX).setDuration(240) - val scaleY = ObjectAnimator.ofPropertyValuesHolder(showView, holderY).setDuration(240) - - - val set = AnimatorSet() - set.play(scaleX).with(scaleY).with(alpha) - if(currentAnimarion==maxIndex) { - // 最后一个动画结束后提交积分 - set.addListener(object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator) { - super.onAnimationEnd(animation) - // 启动变高动画 - startChangeHeightAnimarion() - } - }) - } - set.start() - } - - private fun startChangeHeightAnimarion() { - // 815 除了 点评的高度 - val resizeAnimation = ResizeAnimation(clCommentContain,913+rvCommentList.height, clCommentContain.height) - resizeAnimation.duration = 300 - resizeAnimation.setAnimationListener(object :Animation.AnimationListener{ - override fun onAnimationStart(animation: Animation?) { - rvCommentList.visibility = View.VISIBLE - } - - override fun onAnimationEnd(animation: Animation?) { - allStartOrdered.forEach { - it.isEnabled = true - } - if(btnSubmit.visibility==View.GONE||btnSubmit.visibility==View.INVISIBLE) { - btnSubmit.visibility = View.VISIBLE - val showAnimator = ObjectAnimator.ofFloat(btnSubmit, "alpha", 0.1f, 1f) - showAnimator.duration = 600 - showAnimator.start() - } - - } - - override fun onAnimationRepeat(animation: Animation?) { - - } - - }) - clCommentContain.startAnimation(resizeAnimation) - } - - /** - * 设置目的地重置星星状态 - */ - fun setDataAndStartAnimation(endSiteAddr: String?,orderId:String) { - mArrivedEndStation.text = endSiteAddr - ochThankShadowLayout.visibility = View.GONE - ivAnimalList.visibility = View.GONE - svpFrame.setVideoAllCallBack(object : GSYSampleCallBack() { - override fun onAutoComplete(url: String?, vararg objects: Any?) { - svpFrame.setBackgroundResource(R.drawable.tail_ani_0090) - } - }) - svpFrame.startPlayLogic() - postDelayed({ - ochShadowLayout.visibility = View.VISIBLE - ochShadowLayout.startAnimation(left2Right) - },1928) - - showThanks = false - this.orderNo = orderId - resetStar() - } - - /** - * 评论成功 向左移动并消失 消失后感谢页面透明度0-1 然后开始小手的动画 - */ - fun scoreSuccess(){ - right2Left.setAnimationListener(object :PoiInputSearchWidget.AnimationListenerAdapter(){ - override fun onAnimationEnd(p0: Animation?) { - ochShadowLayout.visibility = View.GONE - ochThankShadowLayout.startAnimation(alphaAnimation) - ivAnimalList.startAnimation(alphaAnimation) - alphaAnimation.setAnimationListener(object : PoiInputSearchWidget.AnimationListenerAdapter(){ - override fun onAnimationStart(p0: Animation?) { - ochThankShadowLayout.visibility = View.VISIBLE - ivAnimalList.visibility = View.VISIBLE - showThanks = true - } - override fun onAnimationEnd(p0: Animation?) { - val animationDrawable = ivAnimalList.drawable as AnimationDrawable - animationDrawable.start() - } - }) - } - }) - ochShadowLayout.startAnimation(right2Left) - - // 10s 后逻辑 - subscribe = Observable.timer(10000, TimeUnit.MILLISECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { - // 正在展示感谢页面 - if (taxiPassengerCommonCallback == null) { - // 没有用户确定页面 - OverlayViewUtils.dismissOverlayView(this@TaxiPassengerArrivedView) - } else { - // 有排队展示的用户确定页面 - taxiPassengerCommonCallback?.onCommonCallback() - } - } - } - - /** - * 评论失败 重置状态 - */ - fun scoreFail(){ - scoreSuccess() -// tvFeel.text = "" -// resetStar() - } - - private fun resetStar() { - allStartOrdered.forEach { - it.setImageResource(R.drawable.taxi_p_passenger_star) - it.isEnabled = true - } - } - - private fun requestStarWord() { - TaxiPassengerServiceManager.getAllScoreWorld(context, - object : OchCommonServiceCallback { - override fun onError() { - CallerLogger.e( - SceneConstant.M_TAXI_P + TAG, - "/autopilot-car-hailing/evaluation/label/driver/taxi/list 接口 onError" - ) - } - - override fun onFail(code: Int, msg: String) { - CallerLogger.e( - SceneConstant.M_TAXI_P + TAG, - "/autopilot-car-hailing/evaluation/label/driver/taxi/list 接口:${code}---${msg}" - ) - } - - override fun onSuccess(data: TaxiPassengerAllStarWorld?) { - allStarWithWorld = data - } - - }) - } - - private fun requestStarWordByStar(start:Int) { - TaxiPassengerServiceManager.getWorldByStar(context,start.toString(), - object : OchCommonServiceCallback { - override fun onError() { - CallerLogger.e( - SceneConstant.M_TAXI_P + TAG, - "/autopilot-car-hailing/evaluation/label/driver/taxi/listByStar 接口 onError" - ) - } - - override fun onFail(code: Int, msg: String) { - CallerLogger.e( - SceneConstant.M_TAXI_P + TAG, - "/autopilot-car-hailing/evaluation/label/driver/taxi/listByStar 接口:${code}---${msg}" - ) - } - - override fun onSuccess(data: TaxiPassengerAllStarWorld?) { - if(data?.data != null &&data.data!!.size>0){ - val commentAdapter = rvCommentList.adapter as CommentAdapter - commentAdapter.addAll(data.data.toMutableList()) - startStartAnimation(start) - } - } - - }) - } - - - companion object { - const val TAG = "TaxiPassengerArrivedView" - } - - init { - try { - initView(context) - } catch (e: Exception) { - e.printStackTrace() - } - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/adapter/CommentAdapter.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/adapter/CommentAdapter.kt deleted file mode 100644 index 71334c1f80..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/adapter/CommentAdapter.kt +++ /dev/null @@ -1,74 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.comment.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld.TaxiPassengerStarWorld - -class CommentAdapter(private val context: Context?,private val itemDataList: MutableList) : - RecyclerView.Adapter() { - - fun add(taxiPassengerStarWorld: TaxiPassengerStarWorld) { - itemDataList.add(taxiPassengerStarWorld) - notifyItemInserted(itemDataList.size) - } - - fun addAll(itemDataList: MutableList){ - this.itemDataList.clear() - this.itemDataList.addAll(itemDataList) - // region 临时代码 - var needMove:TaxiPassengerStarWorld?=null - itemDataList.forEachIndexed { index, taxiPassengerStarWorld -> - if(taxiPassengerStarWorld.labelInfo=="频繁急停急刹"){ - needMove = taxiPassengerStarWorld - return@forEachIndexed - } - } - needMove?.let { - this.itemDataList.remove(it) - this.itemDataList.add(this.itemDataList.size-1,it) - } - // endregion - this.notifyDataSetChanged() - } - fun getSelectComment(): List { - return itemDataList.filter { - if(it.isSelect==null){ - it.isSelect = false - } - it.isSelect - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemCommentHolder { - val v = LayoutInflater.from(context).inflate(R.layout.list_comment_item, parent, false) - return ItemCommentHolder(context, v) - } - - override fun onBindViewHolder(holder: ItemCommentHolder, position: Int) { - val taxiPassengerStarWorld = itemDataList[position] - holder.commentItem.text = taxiPassengerStarWorld.labelInfo - if (taxiPassengerStarWorld.isSelect!=null&&taxiPassengerStarWorld.isSelect) { - taxiPassengerStarWorld.isSelect = true - holder.commentItem.setBackgroundResource(R.drawable.taxi_p_comment_selected) - } else { - taxiPassengerStarWorld.isSelect = false - holder.commentItem.setBackgroundResource(R.drawable.taxi_p_comment_select) - } - holder.commentItem.setOnClickListener { v: View? -> - taxiPassengerStarWorld.isSelect = !taxiPassengerStarWorld.isSelect - notifyItemChanged(holder.bindingAdapterPosition) - } - } - - override fun getItemCount(): Int { - return itemDataList.size - } - - companion object { - private const val TAG = "RecyclerBaseAdapter" - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/adapter/ItemCommentHolder.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/adapter/ItemCommentHolder.java deleted file mode 100644 index b09b073cde..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/adapter/ItemCommentHolder.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.comment.adapter; - -import android.content.Context; -import android.view.View; -import android.widget.CheckBox; - -import androidx.recyclerview.widget.RecyclerView; - -import com.mogo.och.taxi.passenger.R; - -public class ItemCommentHolder extends RecyclerView.ViewHolder { - - public final static String TAG = "ItemCommentHolder"; - - protected Context context; - - public CheckBox commentItem; - - public ItemCommentHolder(Context context, View v) { - super(v); - this.context = context; - commentItem = v.findViewById(R.id.tv_comment); - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugEvent.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugEvent.kt new file mode 100644 index 0000000000..ce7b533953 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugEvent.kt @@ -0,0 +1,4 @@ +package com.mogo.och.taxi.passenger.ui.debug + +class DebugEvent { +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt new file mode 100644 index 0000000000..125e245b99 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/debug/DebugView.kt @@ -0,0 +1,91 @@ +package com.mogo.och.taxi.passenger.ui.debug + +import android.content.Context +import android.os.SystemClock +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.fragment.app.FragmentActivity +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +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.function.hmi.ui.setting.ToggleDebugView +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.util.ActivityUtils +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_phone_check +import kotlinx.android.synthetic.main.taxi_p_debug.view.tv_show_start_autopilot +import kotlinx.android.synthetic.main.taxi_p_statusview.view.iv_biz_icon +import me.jessyan.autosize.utils.AutoSizeUtils +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode +import java.lang.ref.WeakReference + +class DebugView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener { + + companion object { + const val TAG = "DebugView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_p_debug, this, true) + visibility = GONE + } + + private var fragment:TaxiPassengerBaseFragment?=null + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + EventBus.getDefault().register(this) + + val activityByContext = ActivityUtils.getActivityByContext(context) + if(activityByContext is FragmentActivity){ + val fragment = + activityByContext.supportFragmentManager.findFragmentByTag(TaxiPassengerBaseFragment.TAG) + if(fragment is TaxiPassengerBaseFragment){ + this.fragment = fragment + } + } + + tv_show_arrive.onClick { + fragment?.showOrHideArrivedEndLayout(true) + } + tv_show_phone_check.onClick { + fragment?.showOrHidePressengerCheckPager(isShow = true,"13号路口终(鹰眼专用)","13号路口终(鹰眼专用)","2","2","18811539480") + } + tv_show_start_autopilot.onClick { + fragment?.showOrHideStartAutopilotView(true) + } + + } + @Subscribe(threadMode = ThreadMode.MAIN) + fun changeOverview(debugEvent: DebugEvent) { + if(visibility== VISIBLE){ + visibility = GONE + }else{ + visibility = VISIBLE + } + } + + + + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + EventBus.getDefault().unregister(this) + } + +} + diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt deleted file mode 100644 index f9cd1a55b8..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ItemViewTouchListener.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.leftmenu - -import android.annotation.SuppressLint -import android.view.MotionEvent -import android.view.View -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant - -class ItemViewTouchListener : - View.OnTouchListener { - // 判断并放跑点击事件 - private var dragTime = 0L - @SuppressLint("ClickableViewAccessibility") - override fun onTouch(view: View, motionEvent: MotionEvent): Boolean { - try { - when (motionEvent.action) { - MotionEvent.ACTION_DOWN -> { - LeftMenuOpen.dragAndOpen(motionEvent.rawX.toInt(),motionEvent.action) - dragTime = System.currentTimeMillis() - } - MotionEvent.ACTION_MOVE -> { - if (LeftMenuOpen.dragAndOpen(motionEvent.rawX.toInt(),motionEvent.action)) { - return false - } - } - MotionEvent.ACTION_UP -> { - LeftMenuOpen.dragAndOpen(motionEvent.rawX.toInt(),motionEvent.action) - if (System.currentTimeMillis() - dragTime > 500) { - dragTime = 0 - return true - } - } - else -> {} - } - } catch (e: Exception) { - CallerLogger.e(SceneConstant.M_TAXI_P + TAG, e.message) - e.printStackTrace() - } - return false - } - - companion object { - const val TAG = "ItemViewTouchListener" - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt deleted file mode 100644 index a3ac772d40..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/LeftMenuOpen.kt +++ /dev/null @@ -1,448 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.leftmenu - -import android.annotation.SuppressLint -import android.content.ContentResolver -import android.database.Cursor -import android.os.DeadObjectException -import android.os.IBinder -import android.os.RemoteCallbackList -import android.os.RemoteException -import android.view.MotionEvent -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P -import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.eagle.core.utilcode.util.Utils -import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.NumberFormatUtil -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.event.FinishActivity -import com.mogo.och.taxi.passenger.mulprocess.BinderCursor -import com.mogo.och.taxi.passenger.mulprocess.BinderProvider -import com.mogo.och.taxi.passenger.mulprocess.ICallback -import com.mogo.och.taxi.passenger.mulprocess.ILeftMenuService -import com.mogo.och.taxi.passenger.ui.video.FloatingDistanceInfoUtils -import com.mogo.och.taxi.passenger.ui.video.VideoActivity -import org.greenrobot.eventbus.EventBus -import rx.Observable -import rx.Observer -import rx.exceptions.OnCompletedFailedException -import rx.schedulers.Schedulers -import java.util.* - - -@SuppressLint("StaticFieldLeak") -object LeftMenuOpen { - - const val TAG = "mulprocessLeftMenuOpen" - - private var windowView: View? = null - private var wl: WindowManager.LayoutParams? = null - private var windowManager: WindowManager? = null - private var close: ((view: View, windowManager: WindowManager?) -> Unit)? = null - private var open: ((view: View, windowManager: WindowManager?) -> Unit)? = null - - - // 两部分主进程和子进程 - private var dragList = mutableSetOf() - - private var orderService: ILeftMenuService? = null - - private var icallbacks: RemoteCallbackList? = null - - var checkIndex = OverlayLeftViewUtils.LIVE - private var lastClickTime = 0L - private const val FAST_CLICK_DELAY_TIME = 1300 // 防止事件发送过快 - - - fun setValue( - windowView: View, - wl: WindowManager.LayoutParams?, - windowManager: WindowManager?, - close: (view: View, windowManager: WindowManager?) -> Unit, - open: (view: View, windowManager: WindowManager?) -> Unit, - isMainProcess: Boolean - ) { - this.open = open - this.close = close - this.windowView = windowView - this.windowManager = windowManager - this.wl = wl - dragList.forEach { - registerDragView(it) - } - if(!isMainProcess) { - registerC() - } - } - - fun clearValue() { - this.open = null - this.close = null - this.windowView = null - this.windowManager = null - this.wl = null - - orderService = null - - val iterator = dragList.iterator() - while (iterator.hasNext()) { - val next = iterator.next() - unRegisterDragView(next,false) - iterator.remove() - } - } - - - private var x = 0 - - // 判断并放跑点击事件 - private const val DEVIATION = 10 - private const val NEGATIVEDEVIATION = -10 - - fun dragAndOpen(newX: Int, action: Int): Boolean { - when (action) { - MotionEvent.ACTION_DOWN -> { - x = newX - } - MotionEvent.ACTION_MOVE -> { - val nowX = newX - val movedX = nowX - x - x = nowX - wl?.let { it -> - it.x += movedX - if (it.x > 0 || it.x < OverlayLeftViewUtils.DEVIATION_WIDTH) { - it.apply { - x -= movedX - } - return true - } - windowView?.let { windowView -> - windowManager?.let { windowManager -> - if (it.x > NEGATIVEDEVIATION && movedX > 0) { - open?.let { it1 -> - UiThreadHandler.post { - it1(windowView, windowManager) - } - } - } else { - //更新悬浮球控件位置 - UiThreadHandler.post { - windowManager.updateViewLayout(windowView, it) - } - } - if (it.x < OverlayLeftViewUtils.DEVIATION_WIDTH + DEVIATION && movedX < 0) { - close?.let { it1 -> - UiThreadHandler.post { - it1(windowView, windowManager) - } - } - } else { - //更新悬浮球控件位置 - UiThreadHandler.post { - windowManager.updateViewLayout(windowView, it) - } - } - } - - } - - } - } - MotionEvent.ACTION_UP -> { - wl?.let { wl -> - val startX = wl.x - if (startX > OverlayLeftViewUtils.DEVIATION_WIDTH / 2 && startX < 0) { - //拖动距离大于一半 自动打开 - open?.let { - UiThreadHandler.post { - it(windowView!!, windowManager) - } - } - } else if (startX < OverlayLeftViewUtils.DEVIATION_WIDTH / 2 && startX >= OverlayLeftViewUtils.DEVIATION_WIDTH) { - // 拖动距离小于一半自动关闭 - close?.let { - UiThreadHandler.post { - it(windowView!!, windowManager) - } - } - } else { - - } - } - } - } - return false - } - - fun registerDragView(view: View?) { - if (view != null) { - dragList.add(view) - view.setOnTouchListener(ItemViewTouchListener()) - view.setOnClickListener { - open?.let { it1 -> it1(windowView!!, windowManager) } - } - } - } - - fun unRegisterDragView(view: View?,remove:Boolean) { - if(remove) { - dragList.remove(view) - } - view?.let { - it.setOnTouchListener(null) - it.setOnClickListener(null) - if(it.id==R.id.ids_video_anchor){ - val parent = it.parent as ViewGroup - parent.removeView(it) - } - } - } - - fun transmissionIndex(index:Int){ - Observable.empty().subscribeOn(Schedulers.io()) - .subscribe(object : Observer { - override fun onCompleted() { - try { - CallerLogger.d(M_TAXI_P + TAG, "tran--transmissionIndex---$index") - if (orderService == null) { - registerC() - } - orderService?.transmissionIndex(index) - }catch (ill:IllegalStateException){ - ill.printStackTrace() - }catch (onCo: OnCompletedFailedException){ - onCo.printStackTrace() - }catch (deadobjectexception: DeadObjectException){ - deadobjectexception.printStackTrace() - } - } - override fun onError(e: Throwable?) {} - override fun onNext(t: String?) {} - }) - } - - /** - * 主进程调用 - */ - fun registerCallbackHost(cb:ICallback?){ - if(icallbacks==null){ - icallbacks = RemoteCallbackList() - } - cb?.let { - icallbacks?.register(it) - } - } - - /** - * 主进程调用 反注册 - */ - fun unregisterCallbackHost(cb:ICallback?){ - cb?.let { - icallbacks?.unregister(it) - } - icallbacks?.kill() - icallbacks = null - } - - /** - * 子进程调用 注册回调 主进程中调用 - * 方便主进程传递到子进程 速度、剩余公里、剩余时间、到达时间 - */ - fun registerCallback(cb:ICallback?){ - Observable.empty().subscribeOn(Schedulers.io()) - .subscribe(object : Observer { - override fun onCompleted() { - try { - CallerLogger.d(M_TAXI_P + TAG, "tran--registerCallback--注册") - if (orderService == null) { - registerC() - } - cb?.let { - orderService?.registerCallback(it) - } - }catch (ill:IllegalStateException){ - ill.printStackTrace() - }catch (onCo: OnCompletedFailedException){ - onCo.printStackTrace() - }catch (deadobjectexception: DeadObjectException){ - deadobjectexception.printStackTrace() - } - - } - override fun onError(e: Throwable?) {} - override fun onNext(t: String?) {} - }) - } - - /** - * 子进程调用 反注册 - */ - fun unregisterCallback(cb:ICallback?){ - Observable.empty().subscribeOn(Schedulers.io()) - .subscribe(object : Observer { - override fun onCompleted() { - CallerLogger.d(M_TAXI_P + TAG, "tran--unregisterCallback--反注册") - cb?.let { - try { - orderService?.unRegisterCallback(it) - }catch (ill:IllegalStateException){ - ill.printStackTrace() - }catch (onCo: OnCompletedFailedException){ - onCo.printStackTrace() - }catch (deadobjectexception: DeadObjectException){ - deadobjectexception.printStackTrace() - } - } - } - override fun onError(e: Throwable?) {} - override fun onNext(t: String?) {} - }) - } - - /** - * 主进程调用 向子进程传输 剩余距离、剩余时间、和速度 - */ - fun callCallBack(meters: Long,timeInSecond: Long,speed:Float){ - if(checkIndex == OverlayLeftViewUtils.CONSULT||checkIndex == OverlayLeftViewUtils.MOVIE) { - if (System.currentTimeMillis() - lastClickTime < FAST_CLICK_DELAY_TIME){ - return - } - lastClickTime = System.currentTimeMillis() - - Observable.empty().subscribeOn(Schedulers.io()) - .subscribe(object : Observer { - override fun onCompleted() { - CallerLogger.d(M_TAXI_P + TAG, "callCallBack$meters--$timeInSecond--$speed") - try { - val len = icallbacks?.beginBroadcast() - len?.let { - for (i in 0 until len) { - try { - icallbacks?.getBroadcastItem(i)?.onResult(meters, timeInSecond, speed) - } catch (e: RemoteException) { - e.printStackTrace() - } - } - } - icallbacks?.finishBroadcast() - }catch (e:Exception){ - CallerLogger.e(M_TAXI_P + TAG, "callCallBack${e.message}") - } - } - override fun onError(e: Throwable?) {} - override fun onNext(t: String?) {} - }) - } - } - - fun invoKeyByEventType(typeID:Int){ - Observable.empty().subscribeOn(Schedulers.io()) - .subscribe(object : Observer { - override fun onCompleted() { - val len = icallbacks?.beginBroadcast() - len?.let { - for (i in 0 until it) { - try { - icallbacks?.getBroadcastItem(i)?.postEvent(typeID) - } catch (e: RemoteException) { - e.printStackTrace() - } - } - } - icallbacks?.finishBroadcast() - } - override fun onError(e: Throwable?) {} - override fun onNext(t: String?) {} - }) - } - - /** - * 主进程、video进程都得调用 - * 主进程在显示是主动调用 - * video进程在天津View是判断是否调用了 - */ - @Synchronized - private fun registerC() { - if(orderService!=null){ - return - } - CallerLogger.d(M_TAXI_P + TAG, "tran--registerC--获取jni") - val resolver: ContentResolver = Utils.getApp().contentResolver - - val cu = resolver.query( - BinderProvider.CONTENT_URI, - null, - null, - arrayOf(BinderProvider.SERVICE_LEFTMENU), - null - ) ?: return - - val binder: IBinder = getBinder(cu) - try { - try { - orderService = ILeftMenuService.Stub.asInterface(binder) - }catch (ill:IllegalStateException){ - ill.printStackTrace() - }catch (onCo: OnCompletedFailedException){ - onCo.printStackTrace() - }catch (deadobjectexception: DeadObjectException){ - deadobjectexception.printStackTrace() - } - - } catch (e: RemoteException) { - e.printStackTrace() - } finally { - cu.close() - } - } - - private fun getBinder(cursor: Cursor): IBinder { - val extras = cursor.extras - extras.classLoader = BinderCursor.BinderParcelable::class.java.classLoader - val w = extras.getParcelable("binder") - return w!!.mBinder - } - - val callBack = object : ICallback.Stub() { - override fun onResult(meters :Long, timeInSecond:Long,speed:Float) { - if(speed<0){ - // 距离单位 - var disUnit = "公里" - // 距离 - var remainDis: String? = "0" - - if (meters > 0) { - if (meters / 1000 < 1) { - disUnit = "米" - remainDis = Math.round(meters.toFloat()).toString() - } else { - disUnit = "公里" - remainDis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) - } - } - // 剩余时间 - val time = Math.ceil(timeInSecond.toDouble() / 60f).toInt() - - val beforeTime = Calendar.getInstance() - beforeTime.add(Calendar.MINUTE, time) - //到达时间 - val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.HH_mm) - FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime) - }else{ - FloatingDistanceInfoUtils.setSpeed(speed) - } - } - - override fun postEvent(type: Int) { - when (type) { - VideoActivity.EVENT_FINISH -> { - EventBus.getDefault().post(FinishActivity()) - } - else -> {} - } - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt deleted file mode 100644 index 93b2aa0ed1..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/ListAdapter.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.leftmenu - -import android.content.Context -import android.view.View -import android.view.ViewGroup -import android.widget.BaseAdapter -import android.widget.ImageView -import com.mogo.och.taxi.passenger.ui.leftmenu.model.LeftMenuModel - -class ListAdapter(private val context: Context,val list: MutableList) : BaseAdapter() { - - override fun getCount(): Int { - return list.size - } - - override fun getItem(position: Int): Any { - return list[position] - } - - override fun getItemId(position: Int): Long { - return position.toLong() - } - - override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { - val imageView = ImageView(context) - val leftMenuModel = list[position] - if (leftMenuModel.isChecked) { - imageView.setImageResource(leftMenuModel.selected) - } else { - imageView.setImageResource(leftMenuModel.select) - } - imageView.setOnClickListener { - setSelectIndex(position,true) - } - return imageView - } - - /** - * 多进程调用 - */ - fun setSelectIndex(index: Int,needStartActivity: Boolean) { - for (i in list.indices) { - if(index==i){ - if(!list[i].isChecked){ - list[i].selectListener.onSelect(needStartActivity) - OverlayLeftViewUtils.transmissionIndex(index) - } - } - list[i].isChecked = index == i - } - notifyDataSetChanged() - } - - interface OnTabSelectListener { - fun onSelect(isCurrentProcess:Boolean) - } - -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt deleted file mode 100644 index d833aab94a..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/OverlayLeftViewUtils.kt +++ /dev/null @@ -1,432 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.leftmenu - -import android.animation.Animator -import android.animation.ValueAnimator -import android.annotation.SuppressLint -import android.app.Activity -import android.content.Context.WINDOW_SERVICE -import android.graphics.PixelFormat -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.WindowManager -import android.view.animation.LinearInterpolator -import android.widget.FrameLayout -import android.widget.ListView -import androidx.appcompat.widget.AppCompatImageView -import androidx.constraintlayout.widget.ConstraintLayout -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.storage.SharedPrefsMgr -import com.mogo.eagle.core.utilcode.util.* -import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst -import com.mogo.och.taxi.passenger.event.FinishActivity -import com.mogo.och.taxi.passenger.event.UIStatus -import com.mogo.och.taxi.passenger.mulprocess.EmptyService -import com.mogo.och.taxi.passenger.ui.leftmenu.model.LeftMenuModel -import com.mogo.och.taxi.passenger.ui.video.VideoActivity -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable -import org.greenrobot.eventbus.EventBus -import java.util.concurrent.TimeUnit - -/** - * 遮罩层工具类 - * - * @author mogoauto - */ -@SuppressLint("StaticFieldLeak") -object OverlayLeftViewUtils { - private const val TAG = "OverlayViewUtils" - private var windowManager: WindowManager? = null - - @Volatile - private var isShowing = false - - private var params:WindowManager.LayoutParams?=null - - const val WIDTH = 810 - const val DEVIATION_WIDTH = -669 - - const val LIVE = 0 - const val OVERVIEW = 1 - const val CONSULT = 2 - const val MOVIE = 3 - - - private var overlayView: View?=null - - private var subscribe: Disposable?=null - private var subscribeLive: Disposable?=null - private var subscribeOVERVIEW: Disposable?=null - - private var acivOpenClose: AppCompatImageView?=null - - /** - * 添加覆盖View在Activity上面 - */ - @JvmOverloads - fun showOverlayView(context: Activity,checkIndex:Int = LIVE,isOpen: Boolean=true, ani: Int = -1,isMainProcess: Boolean = false) { - if (isShowing) { - return - } - if (windowManager == null) { - windowManager = context.getSystemService(WINDOW_SERVICE) as WindowManager - } - - overlayView = LayoutInflater.from(context) - .inflate(R.layout.taxi_p_window_float_interphone, null) as ConstraintLayout - overlayView?.let { view -> - // 设置View显示模式,沉浸式的侵入到状态栏,导航栏 - view.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - or View.SYSTEM_UI_FLAG_LAYOUT_STABLE - or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) - layoutParams(ani,view, isOpen) - - // 如果正在展示中,并且lastOverlayView不为null,先做移除操作,保证覆盖在最上面的View只有一个,防止叠加导致无法移除 - dismissOverlayView(false) - - val vDragField = view.findViewById(R.id.v_drag_field) - acivOpenClose = view.findViewById(R.id.aciv_open_close) - vDragField.setOnTouchListener(ItemViewTouchListener()) - vDragField.setOnClickListener { - val start: Int = params!!.x - if (start > DEVIATION_WIDTH /2 && start < 10) { - close(view, windowManager) - } else if (start < DEVIATION_WIDTH /2 && start >= DEVIATION_WIDTH) { - open(view, windowManager) - } - } - - val lvSelectItem = view.findViewById(R.id.lv_select_item) - val integers = mutableListOf() - - val liveSelected = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(isCurrentProcess:Boolean) { - LeftMenuOpen.checkIndex = LIVE - if(isCurrentProcess) { - close(view, windowManager) - }else { - LeftMenuOpen.invoKeyByEventType(VideoActivity.EVENT_FINISH) - } - if(isMainProcess){ - //主进程 建议Eventbus实现 - subscribeLive = Observable.timer(300, TimeUnit.MILLISECONDS) - .subscribe { - EventBus.getDefault().post(UIStatus(UIStatus.LIVE)) - } - }else{ - EventBus.getDefault().post(FinishActivity()) - } - } - } - - val overViewSelected = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(isCurrentProcess:Boolean) { - LeftMenuOpen.checkIndex = OVERVIEW - if(isCurrentProcess) { - close(view, windowManager) - }else { - LeftMenuOpen.invoKeyByEventType(VideoActivity.EVENT_FINISH) - } - if(isMainProcess){ - //主进程 建议Eventbus实现 - subscribeOVERVIEW = Observable.timer(300, TimeUnit.MILLISECONDS) - .subscribe { - EventBus.getDefault().post(UIStatus(UIStatus.OVERVIEW)) - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "发送Eventbus subscribeOVERVIEW") - } - }else{ - EventBus.getDefault().post(FinishActivity()) - } - } - } - - val consultSelect = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(isCurrentProcess:Boolean) { - LeftMenuOpen.checkIndex = CONSULT - if(isCurrentProcess) { - close(view, windowManager) - //计算订单起点和终点距离 - val sumDis = SharedPrefsMgr.getInstance(context).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - VideoActivity.startActivity(context, VideoActivity.VIDEOTYPE_CONSULT,sumDis) - } - } - } - - val entertainmentSelect = object :ListAdapter.OnTabSelectListener{ - override fun onSelect(isCurrentProcess:Boolean) { - LeftMenuOpen.checkIndex = MOVIE - if(isCurrentProcess) { - close(view, windowManager) - val sumDis = SharedPrefsMgr.getInstance(context).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - VideoActivity.startActivity(context, VideoActivity.VIDEOTYPE_MOIES,sumDis) - } - } - } - - integers.add(LeftMenuModel(R.drawable.shape_size_live_select, R.drawable.shape_size_live_selected,false,liveSelected)) - integers.add(LeftMenuModel(R.drawable.shape_size_overview_select, R.drawable.shape_size_overview_selected,false,overViewSelected)) - integers.add(LeftMenuModel(R.drawable.shape_size_consult_select, R.drawable.shape_size_consult_selected,false,consultSelect)) - integers.add(LeftMenuModel(R.drawable.shape_size_entertainment_select, R.drawable.shape_size_entertainment_selected,false,entertainmentSelect)) - integers.forEachIndexed { index, leftMenuModel -> - leftMenuModel.isChecked = index == checkIndex - } - lvSelectItem.adapter = ListAdapter(context, integers) - - addTarget(context) - - LeftMenuOpen.setValue(view, params, windowManager,::close,::open,isMainProcess) - try { - windowManager!!.addView(overlayView, params) - checkProcess() - isShowing = true - } catch (e: WindowManager.BadTokenException) { - isShowing = true; - dismissOverlayView(false) - } catch (e: Exception) { - e.printStackTrace() - } - } - } - - private fun addTarget(context: Activity) { - try { - val content = - context.window.decorView.findViewById(android.R.id.content) - val textView = View(context) - textView.id = R.id.ids_video_anchor - addDragTarget(textView) - val param: FrameLayout.LayoutParams = - FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT) - param.gravity = Gravity.CENTER_VERTICAL - param.width = 143 - param.height = 308 - textView.layoutParams = param - content.addView(textView) - } catch (e: java.lang.Exception) { - e.printStackTrace() - } - } - - /** - * 打开状态栏 - */ - private fun open(overlayView: View,windowManager: WindowManager?) { - checkProcess() - val valueAnimator = ValueAnimator.ofInt(params!!.x, 0) - valueAnimator.duration = 100 - valueAnimator.interpolator = LinearInterpolator() - valueAnimator.addUpdateListener { - params?.x = it.animatedValue as Int - windowManager?.updateViewLayout(overlayView, params) - } - valueAnimator.addListener(object : Animator.AnimatorListener { - override fun onAnimationStart(animation: Animator) {} - override fun onAnimationEnd(animation: Animator) { - acivOpenClose?.apply { - pivotX = (width /2).toFloat() - pivotY = (height /2).toFloat() - rotation = 0f - } - closeByTime(overlayView, windowManager) - params?.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or - WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - windowManager?.updateViewLayout(overlayView, params) - } - override fun onAnimationCancel(animation: Animator) {} - override fun onAnimationRepeat(animation: Animator) {} - }) - valueAnimator.start() - } - - private fun checkProcess() { - ThreadPoolService.execute { - val currentProcessName = ProcessUtils.getCurrentProcessName() - if (currentProcessName.contains(":video")) { - return@execute - } - val allBackgroundProcesses = ProcessUtils.getAllBackgroundProcesses() - var haveProcess = false - allBackgroundProcesses.forEach { - if (it.contains(":video")) { - haveProcess = true - return@forEach - } - } - if (!haveProcess) { - EmptyService.startService(Utils.getApp()) - } - } - } - - fun addDragTarget(view :View?){ - LeftMenuOpen.registerDragView(view) - } - - fun removeDragTarget(view: View?){ - LeftMenuOpen.unRegisterDragView(view,true) - } - - /** - * - */ - fun transmissionIndex(index:Int){ - // TODO 需要与,杨亚坤,确认为啥要限制仅在主进程 -// if(!ProcessUtils.isMainProcess(Utils.getApp())) { - LeftMenuOpen.transmissionIndex(index) -// } - } - - fun transmissionIndexGet(index: Int){ - overlayView?.let { - val lvSelectItem = it.findViewById(R.id.lv_select_item) - val listAdapter = lvSelectItem.adapter as ListAdapter - listAdapter.setSelectIndex(index,false) - } - - } - - private fun closeByTime( - overlayView: View, - windowManager: WindowManager? - ) { - subscribe?.let { - if (!it.isDisposed) { - it.dispose() - } - } - subscribe = Observable.timer(3000, TimeUnit.MILLISECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { - if (params?.x == 0) { - close(overlayView, windowManager) - } - } - } - - /** - * 关闭状态栏 - */ - private fun close(overlayView: View,windowManager: WindowManager?) { - val valueAnimator = ValueAnimator.ofInt(params!!.x, DEVIATION_WIDTH) - valueAnimator.duration = 100 - valueAnimator.interpolator = LinearInterpolator() - valueAnimator.addUpdateListener { - params?.let { paramsIn-> - paramsIn.x = it.animatedValue as Int - windowManager?.updateViewLayout(overlayView, paramsIn) - } - } - valueAnimator.addListener(object : Animator.AnimatorListener { - override fun onAnimationStart(animation: Animator) {} - override fun onAnimationEnd(animation: Animator) { - acivOpenClose?.apply { - pivotX = (width /2).toFloat() - pivotY = (height /2).toFloat() - rotation = 180f - } - params?.let { - it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or - WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or - WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE or - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - windowManager?.updateViewLayout(overlayView, it) - } - - } - override fun onAnimationCancel(animation: Animator) {} - override fun onAnimationRepeat(animation: Animator) {} - }) - valueAnimator.start() - } - - private fun layoutParams(ani: Int,view :View,isOpen: Boolean) { - if(params ==null) { - params = WindowManager.LayoutParams() - } - params = WindowManager.LayoutParams() - params?.let { - it.width = WIDTH - it.height = WindowManager.LayoutParams.MATCH_PARENT - it.alpha = 1.0f - it.gravity = Gravity.START or Gravity.CENTER_HORIZONTAL - if(isOpen) { - it.x = 0 - }else{ - it.x = DEVIATION_WIDTH - } - it.y = 0 - it.format = PixelFormat.RGBA_8888 - // 设置窗口类型为应用子窗口,和PopupWindow同类型 - it.type = WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL - // 没有边界限制,允许窗口扩展到屏幕外 - it.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or - WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - if (ani != -1) { - it.windowAnimations = ani - } - closeByTime(view, windowManager) - } - } - - fun getStatus():Boolean{ - return isShowing - } - - /** - * 移除覆盖View在Activity上面 - */ - fun dismissOverlayView(isMain:Boolean) { - if (!isShowing) { - return - } - releaseDelay(subscribe) - releaseDelay(subscribeLive) - releaseDelay(subscribeOVERVIEW) - subscribe = null - subscribeLive = null - subscribeOVERVIEW = null - // 管理的要关闭都得关闭 - if(isMain) { - LeftMenuOpen.invoKeyByEventType(VideoActivity.EVENT_FINISH) - } - - LeftMenuOpen.clearValue() - try { - if (windowManager != null && overlayView != null) { - windowManager!!.removeViewImmediate(overlayView) - params = null - } - if(windowManager!=null){ - windowManager = null - } - if(params!=null){ - params = null - } - if (overlayView!=null) { - overlayView = null - } - if (acivOpenClose!=null) { - acivOpenClose = null - } - isShowing = false - } catch (e: Exception) { - e.printStackTrace() - } - } - - private fun releaseDelay(subscribe: Disposable?) { - subscribe?.let { - if (!it.isDisposed) { - it.dispose() - } - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/model/LeftMenuModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/model/LeftMenuModel.kt deleted file mode 100644 index 6907442c5d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/leftmenu/model/LeftMenuModel.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.mogo.och.taxi.passenger.ui.leftmenu.model - -import com.mogo.och.taxi.passenger.ui.leftmenu.ListAdapter - -data class LeftMenuModel( - val select: Int, - val selected: Int, - var isChecked: Boolean, - val selectListener: ListAdapter.OnTabSelectListener -) \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt new file mode 100644 index 0000000000..3eb347961b --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/ItineraryView.kt @@ -0,0 +1,148 @@ +package com.mogo.och.taxi.passenger.ui.orderinfo + +import android.content.Context +import android.graphics.drawable.GradientDrawable +import android.graphics.drawable.LayerDrawable +import android.graphics.drawable.ScaleDrawable +import android.os.Build +import android.util.AttributeSet +import android.view.Gravity +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_arrived_time +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_distance +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_distance_unit +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_endstation +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_speed_value +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_surplus_time +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.actv_surplus_time_unit +import kotlinx.android.synthetic.main.taxi_p_itinerary.view.progress_distance +import me.jessyan.autosize.utils.AutoSizeUtils + +class ItineraryView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback { + + private val TAG = "ItineraryView" + + 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_itinerary, this, true) + setDrawable(true) + + progress_distance.progress = 0 + progress_distance.max = 100 + + } + + private fun setDrawable(normal:Boolean) { + val gradientDrawable = GradientDrawable() + gradientDrawable.shape = GradientDrawable.RECTANGLE + val corner = AutoSizeUtils.dp2px(context, 40f).toFloat() + val cornerTop = AutoSizeUtils.dp2px(context, 20f).toFloat() + if(normal) { + gradientDrawable.cornerRadii = + floatArrayOf(0f, 0f, cornerTop, cornerTop, cornerTop, cornerTop, corner, corner) + }else { + gradientDrawable.cornerRadii = + floatArrayOf(0f, 0f, 0f, 0f, corner, corner, corner, corner) + } + val firstColor = ContextCompat.getColor(context, R.color.taxi_p_OF5FFF) + val setondColor = ContextCompat.getColor(context, R.color.taxi_p_44C8FF) + val thirdColor = ContextCompat.getColor(context, R.color.taxi_p_8AE4ED) + val fourceColor = ContextCompat.getColor(context, R.color.taxi_p_C8F3F4) + val bottomColor = ContextCompat.getColor(context, R.color.taxi_p_66476FBE) + gradientDrawable.colors = intArrayOf(firstColor, setondColor, thirdColor, fourceColor) + gradientDrawable.orientation = GradientDrawable.Orientation.LEFT_RIGHT + + val temp01 = GradientDrawable() + temp01.cornerRadii = floatArrayOf(0f, 0f, 0f, 0f, corner, corner, corner, corner) + temp01.colors = intArrayOf(bottomColor, bottomColor) + + val scaleDrawable3 = ScaleDrawable(gradientDrawable, Gravity.START, 1f, -1f) + val arr = arrayOf(temp01, scaleDrawable3) + val ld = LayerDrawable(arr) + ld.setDrawableByLayerId(android.R.id.background, temp01) + ld.setDrawableByLayerId(android.R.id.progress, scaleDrawable3) + progress_distance.setProgressDrawableTiled(ld) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(OrderInfoViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + override fun setSpeed(speedValue:String){ + actv_speed_value.text = speedValue + } + override fun setEndStation(endStation:String){ + if(endStation.length>9){ + actv_endstation.text = "${endStation.subSequence(0,9)}…" + }else { + actv_endstation.text = endStation + } + } + + var prePercentage = 0f + val needChangeStyleNumber = 0.99 + + override fun setDistanceInfo(surplusdistance:String,distanceUnit:String, + surplusTime:String,surplusTimeUnit:String, + arrivedTime:String,alreadyGone:Int,stationDistance:Int + ){ + actv_distance.text = surplusdistance + actv_distance_unit.text = distanceUnit + actv_surplus_time .text= surplusTime + actv_surplus_time_unit.text = surplusTimeUnit + actv_arrived_time.text= arrivedTime + + if(stationDistance>0&&alreadyGoneneedChangeStyleNumber) xor (currentPercentage>needChangeStyleNumber)){ + if(currentPercentage>needChangeStyleNumber){ + setDrawable(false) + }else{ + setDrawable(true) + } + progress_distance.progress = alreadyGone + }else{ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + progress_distance.setProgress(alreadyGone,true) + }else{ + progress_distance.progress = alreadyGone + } + } + prePercentage = currentPercentage + } + + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt new file mode 100644 index 0000000000..11f3e8a07d --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/orderinfo/OrderInfoViewModel.kt @@ -0,0 +1,106 @@ +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.callback.IOCHTaxiPassengerOrderStatusCallback +import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import kotlin.math.abs +import kotlin.math.ceil + +class OrderInfoViewModel: ViewModel(), IMoGoChassisLocationGCJ02Listener, + IOCHTaxiPassengerOrderStatusCallback { + + private val TAG = OrderInfoViewModel::class.java.simpleName + + private var viewCallback:ItineraryViewCallback?=null + + private var disUnit:String + private var surplusTimeUnit:String + + init { + disUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_distance_unit_km) + surplusTimeUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_surplustime) + // 设置起点和终点marker和实时车辆位置 + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this) + TaxiPassengerModel.setOrderStatusCallback(TAG,this) + } + + fun setDistanceCallback(viewCallback:ItineraryViewCallback){ + this.viewCallback = viewCallback + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + TaxiPassengerModel.setOrderStatusCallback(TAG,null) + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + mogoLocation?.let { + UiThreadHandler.post { + val speedKM = (abs(it.gnssSpeed) * 3.6f).toInt() + viewCallback?.setSpeed(speedKM.toString()) + } + } + } + + interface ItineraryViewCallback{ + fun setDistanceInfo(surplusdistance:String,distanceUnit:String, + surplusTime:String,surplusTimeUnit:String, + arrivedTime:String,alreadyGone:Int,distance:Int + ) + fun setEndStation(endStation:String) + fun setSpeed(speedValue: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" + if (meters > 0) { + if (meters / 1000 < 1) { + disUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_distance_unit_m) + dis = Math.round(meters.toFloat()).toString() + } else { + disUnit = AbsMogoApplication.getApp().getString(R.string.taxi_p_distance_unit_km) + dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) + } + } + val time = ceil(timeInSecond / 60f).toInt() + val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt()) + + UiThreadHandler.post { + viewCallback?.setDistanceInfo( + dis!!,disUnit,time.toString(),surplusTimeUnit,arriveTime,stationDistance-meters.toInt(),stationDistance) + } + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt new file mode 100644 index 0000000000..a0d0556852 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt @@ -0,0 +1,242 @@ +package com.mogo.och.taxi.passenger.ui.startautopilot + +import android.annotation.SuppressLint +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.core.content.res.ResourcesCompat +import androidx.lifecycle.ViewModelProvider +import com.elegant.utils.UiThreadHandler +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 +import com.mogo.eagle.core.utilcode.util.OverlayViewUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.utils.AnimatorDrawableUtil +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment +import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout +import com.mogo.och.taxi.passenger.widget.animutils.AnimationsContainer +import kotlinx.android.synthetic.main.taxi_p_base_fragment.aciv_xiaozhi_normal +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_front_left_door +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_front_right_door +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_orderinfo +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_rear_left_door +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_rear_right_door +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.starting_autopilot_view_close +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_autopilot_btn_bg +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_autopilot_starting +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_start_autopilot +import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.v_xiaozhi_belt_info_bg +import java.util.Arrays + +/** + * @author: wangmingjun + * @date: 2022/6/14 + */ +class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback{ + + 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 { + private val TAG = StartAutopilotView::class.java.simpleName + private const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L + } + + var isStarting = false + + private var taxiPStartAutopilot: AnimationsContainer?=null + private var taxiPStartAutopilotCar: AnimationsContainer?=null + + + init { + initView() + } + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_start_autopilot_view, this, true) + taxiPStartAutopilotCar = AnimationsContainer(R.array.taxi_p_start_autopilot_car, 20,taxi_p_autopilot_starting) + taxiPStartAutopilotCar?.setOnAnimStopListener(object :AnimationsContainer.OnAnimationStoppedListener{ + override fun AnimationStopped() { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") + } + }) + taxiPStartAutopilot = AnimationsContainer(R.array.taxi_p_start_autopilot, 15,taxi_p_autopilot_btn_bg) + taxiPStartAutopilot?.setOnAnimStopListener(object :AnimationsContainer.OnAnimationStoppedListener{ + override fun AnimationStopped() { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") + } + }) + } + + fun startAutopilotBgAnimatorDrawable(isStart: Boolean) { + if (isStart) { + taxiPStartAutopilot?.start() + } else { + taxiPStartAutopilot?.stop() + } + } + + @SuppressLint("UseCompatLoadingForDrawables") + override fun handleStartAutopilotBtnStatus(isClickable: Boolean) { + taxi_p_autopilot_starting?.setImageResource(R.drawable.light_00003) + updateStartAutopilotBtnStatus(isClickable) + if (isClickable) { //高亮可点击状态下动画一直进行 + startAutopilotBgAnimatorDrawable(true) + } else { // 置灰色可点击状态下动画停止 + startAutopilotBgAnimatorDrawable(false) + } + } + + override fun setOrderInfo(show: String) { + actv_orderinfo.text = show + } + + override fun setDoorStatus( + doorPosition: StartAutopilotViewModel.DoorPosition, + isOpen: Boolean + ) { + when (doorPosition) { + StartAutopilotViewModel.DoorPosition.FRONT_LEFT -> { + if(isOpen){ + actv_front_left_door.visibility = VISIBLE + }else{ + actv_front_left_door.visibility = GONE + } + } + StartAutopilotViewModel.DoorPosition.FRONT_RIGHT -> { + if(isOpen){ + actv_front_right_door.visibility = VISIBLE + }else{ + actv_front_right_door.visibility = GONE + } + } + StartAutopilotViewModel.DoorPosition.REAR_LEFT -> { + if(isOpen){ + actv_rear_left_door.visibility = VISIBLE + }else{ + actv_rear_left_door.visibility = GONE + } + } + StartAutopilotViewModel.DoorPosition.REAR_RIGHT -> { + if(isOpen){ + actv_rear_right_door.visibility = VISIBLE + }else{ + actv_rear_right_door.visibility = GONE + } + } + else ->{ + + } + } + } + + fun closeAllAnimsAndView() { + isStarting = false + clearStartingAnimFrame() + clearBgAnimDrawable() + OverlayViewUtils.dismissOverlayView(this) + } + + fun updateStartAutopilotBtnStatus(isBoarded: Boolean) { + taxi_p_start_autopilot?.let { + if (isBoarded) { + it.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_color)) + it.background = null + } else { + it.background = ResourcesCompat.getDrawable(resources,R.drawable.taxi_p_start_autopilot_txt_btn_bg,null) + taxi_p_autopilot_btn_bg!!.background = null + it.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_un_color)) + } + it.tag = isBoarded + it.text = resources.getString(R.string.taxi_p_start_autopilot_txt) + } + } + + + + private fun startingCarBgAnimatorDrawable(isStart: Boolean) { + if (isStart) { + taxi_p_autopilot_starting!!.setImageResource(0) + taxiPStartAutopilotCar?.start() + } else { + taxiPStartAutopilotCar?.stop() + taxi_p_autopilot_starting!!.setImageResource(R.drawable.light_00003) + } + } + + private fun startOrStopLoadingAnim(start: Boolean) { + startingCarBgAnimatorDrawable(start) + if (start) { + isStarting = true + taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_loading) + taxi_p_start_autopilot?.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_color)) + startingAutopilotCountDown() + } else { + clearBgAnimDrawable() + isStarting = false + handleStartAutopilotBtnStatus(true) + } + } + + private fun clearBgAnimDrawable() { + taxiPStartAutopilot?.stop() + } + + fun clearStartingAnimFrame() { + taxiPStartAutopilotCar?.stop() + } + + private fun startingAutopilotCountDown() { + UiThreadHandler.postDelayed({ + //未启动成功20s后做处理 + if (isStarting) { //判断动画是否在进行 + ToastUtils.showLong(R.string.taxi_p_start_autopilot_fail_10s_tip) + updateStatusCountDownOver() + } + }, TIMER_START_AUTOPILOT_INTERVAL) + } + + private fun updateStatusCountDownOver() { + isStarting = false + startingCarBgAnimatorDrawable(false) + taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_txt) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val viewModel = ViewModelProvider(this).get(StartAutopilotViewModel::class.java) + viewModel.setStartAutopilotCallback(this) + taxi_p_start_autopilot.onClick { + //开启动画和自动驾驶 + if (!(taxi_p_start_autopilot!!.tag as Boolean)) { + ToastUtils.showLong(R.string.taxi_p_start_autopilot_un_click_tip) + return@onClick + } + if (!isStarting) { + startOrStopLoadingAnim(true) + viewModel.startAutopilot() + } + } + starting_autopilot_view_close.onClick { + closeAllAnimsAndView() + } + v_xiaozhi_belt_info_bg.onClick { + handleStartAutopilotBtnStatus(true) + } + } + + + override fun onDetachedFromWindow() { + isStarting = false + clearStartingAnimFrame() + clearBgAnimDrawable() + super.onDetachedFromWindow() + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt new file mode 100644 index 0000000000..5482ef3dda --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt @@ -0,0 +1,137 @@ +package com.mogo.och.taxi.passenger.ui.startautopilot + +import androidx.lifecycle.ViewModel +import chassis.Chassis +import chassis.Chassis.DoorNumber +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback +import com.mogo.och.taxi.passenger.model.AutopilotManager +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel + +class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback, + IMoGoChassisDoorStateListener { + + private val TAG = StartAutopilotViewModel::class.java.simpleName + + private var viewCallback: StartAutopilotCallback? = null + + init { + TaxiPassengerModel.setOrderStatusCallback(TAG, this) + CallerChassisDoorStateListenerManager.addListener(TAG, this) + } + + fun setStartAutopilotCallback(viewCallback: StartAutopilotCallback) { + this.viewCallback = viewCallback + TaxiPassengerModel.startOrStopReadyToAutopilotLoop(true) + setOrderInfo() + setDoorInfo() + } + + private fun setDoorInfo() { + val doorList = CallerChassisDoorStateListenerManager.getDoorList() + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化初始化:${doorList}") + doorList?.forEach { + when (it.number) { + DoorNumber.FRONT_LEFT -> { + viewCallback?.setDoorStatus(DoorPosition.FRONT_LEFT,it.status==1) + } + + DoorNumber.FRONT_RIGHT -> { + viewCallback?.setDoorStatus(DoorPosition.FRONT_RIGHT,it.status==1) + } + + DoorNumber.REAR_LEFT -> { + viewCallback?.setDoorStatus(DoorPosition.REAR_LEFT,it.status==1) + } + + DoorNumber.REAR_RIGHT -> { + viewCallback?.setDoorStatus(DoorPosition.REAR_RIGHT,it.status==1) + } + + DoorNumber.MIDDLE -> { + viewCallback?.setDoorStatus(DoorPosition.MIDDLE,it.status==1) + } + + else -> {} + } + } + } + + private fun setOrderInfo() { + val currentOCHOrder = TaxiPassengerModel.currentOCHOrder + currentOCHOrder?.let { + val phone = it.passengerPhone + var show = "" + if (phone.length > 8) { + //截取电话号码前三位 + val phoneNumPre = phone.substring(0, 3); + //截取电话号码后四位 + val phoneNumFix = phone.substring(7); + + show = "用户:$phoneNumPre****$phoneNumFix 目的地:${it.endSiteAddr}" + } else { + show = "用户:${phone} 目的地:${it.endSiteAddr}" + } + viewCallback?.setOrderInfo(show) + } + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + TaxiPassengerModel.setOrderStatusCallback(TAG, null) + CallerChassisDoorStateListenerManager.removeListener(TAG) + } + + override fun onDriverHasCheckedPilotCondition(isBoarded: Boolean) { + viewCallback?.handleStartAutopilotBtnStatus(isBoarded) + } + + /** + * 开启自动驾驶 + */ + fun startAutopilot() { + AutopilotManager.startAutopilot() + } + + override fun onAutopilotSingleDoorState(num: Chassis.DoorNumber, open: Boolean) { + super.onAutopilotSingleDoorState(num, open) + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${open}") + when (num) { + DoorNumber.FRONT_LEFT -> { + viewCallback?.setDoorStatus(DoorPosition.FRONT_LEFT,open) + } + + DoorNumber.FRONT_RIGHT -> { + viewCallback?.setDoorStatus(DoorPosition.FRONT_RIGHT,open) + } + + DoorNumber.REAR_LEFT -> { + viewCallback?.setDoorStatus(DoorPosition.REAR_LEFT,open) + } + + DoorNumber.REAR_RIGHT -> { + viewCallback?.setDoorStatus(DoorPosition.REAR_RIGHT,open) + } + + DoorNumber.MIDDLE -> { + viewCallback?.setDoorStatus(DoorPosition.MIDDLE,open) + } + + else -> {} + } + } + + interface StartAutopilotCallback { + fun handleStartAutopilotBtnStatus(isBoarded: Boolean) + fun setOrderInfo(show: String) + fun setDoorStatus(doorPosition: DoorPosition,isOpen:Boolean) + } + + enum class DoorPosition { + FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/statusview/StatusBarView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/statusview/StatusBarView.kt new file mode 100644 index 0000000000..8528a5541f --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/statusview/StatusBarView.kt @@ -0,0 +1,106 @@ +package com.mogo.och.taxi.passenger.ui.statusview + +import android.content.Context +import android.os.SystemClock +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.fragment.app.FragmentActivity +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +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.function.hmi.ui.setting.ToggleDebugView +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.util.ActivityUtils +import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.ui.debug.DebugEvent +import kotlinx.android.synthetic.main.taxi_p_statusview.view.iv_biz_icon +import kotlinx.android.synthetic.main.taxi_p_statusview.view.vShowDebugView +import me.jessyan.autosize.utils.AutoSizeUtils +import org.greenrobot.eventbus.EventBus +import java.lang.ref.WeakReference + +class StatusBarView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener { + + companion object { + const val TAG = "StatusBarView" + private const val COUNTS = 4 // 点击次数 + private const val DURATION: Long = 1000 // 规定有效时间 + const val bizz = "bizz" // 业务debug + const val debugView = "debugView" // 业务debug + } + + private var debugViewWatchDogFragment: WeakReference? = null + + private var mHits = LongArray(COUNTS) + + private fun continuousClick(type:String) { + if (ToggleDebugView.toggleDebugView.isShowIng()) { + ToggleDebugView.toggleDebugView.dismiss() + return + } + //每次点击时,数组向前移动一位 + System.arraycopy(mHits, 1, mHits, 0, mHits.size - 1) + //为数组最后一位赋值 + mHits[mHits.size - 1] = SystemClock.uptimeMillis() + if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) { + mHits = LongArray(COUNTS) //重新初始化数组 + showDebugView() + } + } + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_p_statusview, this, true) + setBackgroundResource(R.drawable.taxi_p_status_bg) + isClickable = true + isFocusable = true + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + post { + val params: ViewGroup.LayoutParams = layoutParams + params.height = AutoSizeUtils.dp2px(context,120f) + layoutParams = params + } + + CallerAutoPilotStatusListenerManager.addListener(TAG, this) + + iv_biz_icon.setOnClickListener { continuousClick(debugView) } + vShowDebugView.setOnLongClickListener { + EventBus.getDefault().post(DebugEvent()) + false + } + + } + + private fun showDebugView() { + if (debugViewWatchDogFragment?.get() == null) { + debugViewWatchDogFragment = WeakReference(DebugViewWatchDogFragment.newInstance()) + } + val debugViewFragment = debugViewWatchDogFragment?.get() + if (ActivityUtils.getTopActivity() is FragmentActivity) { + val fragmentActivity = ActivityUtils.getTopActivity() as FragmentActivity + DebugViewWatchDogFragment.showDebugView(fragmentActivity.supportFragmentManager,fragmentActivity.supportFragmentManager,debugViewFragment) + } + + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerHmiViewControlListenerManager.removeListener(TAG) + CallerSkinModeListenerManager.removeListener(TAG) + CallerDevaToolsManager.hideStatusBar() + } + +} + diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/statusview/TaxiPBlueToothView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/statusview/TaxiPBlueToothView.kt new file mode 100644 index 0000000000..b27eeb0c21 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/statusview/TaxiPBlueToothView.kt @@ -0,0 +1,66 @@ +package com.mogo.och.taxi.passenger.ui.statusview + +import android.annotation.SuppressLint +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.RelativeLayout +import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.taxi_p_blue_tooth.view.mofangView + +/** + * 魔戒蓝牙控件 + * 放置于StatusBar右侧位置 + * todo arrow + */ +class TaxiPBlueToothView : RelativeLayout, IMoGoMoFangProvider.OnMoFangStatusListener { + + companion object{ + const val TAG = "TaxiPBlueToothView" + } + + + constructor(context: Context) : this(context, null) + constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : this(context, attrs, defStyleAttr, 0) + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_p_blue_tooth, this, true) + } + + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerDevaToolsManager.mofang()?.registerMoFangStatusListener(TAG, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerDevaToolsManager.mofang()?.unRegisterMoFangStatusListener(this) + } + + override fun onMoFangConnected() { + mofangView.setImageResource(R.drawable.taxi_p_blue_tooth_close) + } + + override fun onMoFangDisconnected() { + mofangView.setImageResource(R.drawable.taxi_p_blue_tooth_open) + } + + @SuppressLint("SetTextI18n") + override fun onMoFangBatteryChanged(battery: Int) { + + } + + override fun onMoFangClicked(keyCode: Int) {} + + override fun onMoFangLongClicked(keyCode: Int) {} + + override fun onMoFangCombineClicked(vararg keyCodes: Int) {} + + override fun onMoFangStatusError(msg: String) {} + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/InfoVideoView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/InfoVideoView.kt new file mode 100644 index 0000000000..a94fe96e70 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/InfoVideoView.kt @@ -0,0 +1,218 @@ +package com.mogo.och.taxi.passenger.ui.video + +import android.content.Context +import android.graphics.Color +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.FrameLayout +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.recyclerview.widget.RecyclerView +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay +import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager +import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselZoomPostLayoutListener +import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CenterScrollListener +import com.mogo.och.taxi.passenger.widget.ConsultVideoPlayer +import com.mogo.och.taxi.passenger.widget.indicator.IndicatorView +import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorOrientation +import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorSlideMode +import com.mogo.och.taxi.passenger.widget.indicator.enums.IndicatorStyle +import com.shuyu.gsyvideoplayer.video.base.GSYVideoView +import kotlin.math.floor + +/** + * @author ChenFufeng + * 蘑菇资讯视频 + */ +internal class InfoVideoView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : FrameLayout( + context, + attrs, + defStyleAttr +) { + + companion object{ + private const val TAG = "VideoView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_p_mogo_video_layout, this, true) + initView() + } + + private var rvVideoPlaylist: RecyclerView? = null + private lateinit var indicatorView: IndicatorView + private lateinit var clContain: ConstraintLayout + + private val arrayListOf by lazy { + arrayListOf().apply { + add(TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png", + "蘑菇车联覆盖生活的方方面面" + )) + add(TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", + "蘑菇车联之红旗车队" + )) + add( + com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png", + "蘑菇车联牵手成都大运会" + ) + ) + add( + TaxiPassengerVideoPlay( + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", + "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png", + "多视角体验蘑菇车联自动驾驶" + ) + ) + } + } + + fun exitFullScreenMode(resetVideoPlayer: Boolean) { + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + player?.let { + it.exitFullScreenMode() + it.onVideoPause() + if(resetVideoPlayer) { + it.onVideoReset() + } + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + configPage() + } + + override fun onVisibilityChanged(changedView: View, visibility: Int) { + super.onVisibilityChanged(changedView, visibility) + val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + when (visibility) { + View.VISIBLE -> { + player?.let { + if (!player.isIfCurrentIsFullscreen) { + when (player.currentState) { + GSYVideoView.CURRENT_STATE_PAUSE -> { + player.onVideoResume(false) + } + else -> {} + } + } + } + } + else -> { + player?.let { + if (!player.isIfCurrentIsFullscreen) { + player.onVideoPause() + } + } + } + } + } + + private fun initView() { + rvVideoPlaylist = findViewById(R.id.infoVideoPlaylist) + indicatorView = findViewById(R.id.infoIndicatorView) + clContain = findViewById(R.id.infoContainer) + } + + private fun configPage() { +// FullVideoUtils.dismissOverlayView(true) + initData() + } + + private fun initData() { + val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) + carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener()) + carouselLayoutManager.maxVisibleItems = 1 + indicatorView.notifyDataChanged(arrayListOf.size) + indicatorView.setSlideMode(IndicatorSlideMode.SCALE) + indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) + indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) + indicatorView.setSliderColor( + Color.parseColor("#80000000"), Color.parseColor("#3FACFD"), + Color.parseColor("#3FACFD") + ) + indicatorView.setSliderWidth(9f, 54f) + indicatorView.setSliderHeight(9f) + indicatorView.setSliderGap(36f) + rvVideoPlaylist?.addOnScrollListener(object : CenterScrollListener() { + var prePlayerPosition = 0 + override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { + //播放视频 + val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) + indicatorView.onPageSelected(centerItemPosition) + if (player is ConsultVideoPlayer) { + if (prePlayerPosition != centerItemPosition) { + if (player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) { + player.onVideoReset() + } + val playerHolder = + carouselLayoutManager.findViewByPosition(prePlayerPosition) + val prePlayer = + playerHolder?.findViewById(R.id.video_item_player) + prePlayer?.onVideoReset() + val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] + } else { + player.onVideoResume(false) + } + } + prePlayerPosition = centerItemPosition + } + + override fun pageStop() { + val (_: Int, player) = getPlayer(carouselLayoutManager) + if (player is ConsultVideoPlayer) { + player.onVideoPause() + } + } + + }) + carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> + val fl = adapterPosition - floor(adapterPosition) + var currentIndex = currentPosition + if (fl > 0.5) { + if (currentPosition == 0) { + currentIndex = rvVideoPlaylist?.adapter!!.itemCount - 1 + } else { + currentIndex -= 1 + } + } + indicatorView.onPageScrolled(currentIndex, fl, 0) + } + val recyclerVideoAdapter = RecyclerVideoAdapter(context, arrayListOf, rvVideoPlaylist) + recyclerVideoAdapter.setOnThumbImageClilckListener { + val (_: Int, player) = getPlayer(carouselLayoutManager) + if (player is ConsultVideoPlayer) { + player.onVideoReset() + player.thumbImageViewLayout.visibility = View.VISIBLE + } + rvVideoPlaylist?.smoothScrollToPosition(it) + } + rvVideoPlaylist?.layoutManager = carouselLayoutManager + rvVideoPlaylist?.setHasFixedSize(true) + rvVideoPlaylist?.adapter = recyclerVideoAdapter + } + + private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { + val centerItemPosition: Int = carouselLayoutManager.centerItemPosition + val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) + val player = playerHolder?.findViewById(R.id.video_item_player) + return Pair(centerItemPosition, player) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java index 49fac8a530..fb8e3c05b1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/RecyclerVideoAdapter.java @@ -52,7 +52,7 @@ public class RecyclerVideoAdapter extends RecyclerView.Adapter() - - - companion object { - const val VIDEOTYPE = "VIDEOTYPE" - const val VIDEOTYPE_CONSULT = 0 - const val VIDEOTYPE_MOIES = 1 - const val VIDEOTYPE_CLOSE = 2 - - const val EVENT_FINISH = 0 - - fun startActivity(context: Context, videoType: Int, sumDis: Int) { - val intent = Intent(context, VideoActivity::class.java) - intent.putExtra(VIDEOTYPE, videoType) - intent.putExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, sumDis) - context.startActivity(intent) - } - } - - private var videotype = VIDEOTYPE_CONSULT - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - EventBus.getDefault().register(this) - setContentView(R.layout.taxi_p_arrived_mogo_consult) - initView() - configPage() - } - - override fun onNewIntent(intent: Intent?) { - super.onNewIntent(intent) - setIntent(intent) - configPage() - } - - private fun configPage() { - FullVideoUtils.dismissOverlayView(true) - releaseOnNewInstance() - when (intent.getIntExtra(VIDEOTYPE, VIDEOTYPE_CONSULT)) { - VIDEOTYPE_CONSULT -> { - videotype = VIDEOTYPE_CONSULT - acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_consult_title_icon) - tvTitle.text = "蘑菇资讯" - initConsultData() - } - VIDEOTYPE_MOIES -> { - videotype = VIDEOTYPE_MOIES - acivTitleIcon.setImageResource(R.drawable.taxi_p_mogo_movies_title_icon) - tvTitle.text = "影视娱乐" - initMoviesData() - } - } - initListener() - initData() - LeftMenuOpen.registerCallback(LeftMenuOpen.callBack) - } - - private fun initConsultData() { - arrayListOf.clear() - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708596763/全车型混剪增加红旗车队.m4v", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969511280/车队.png", - "蘑菇车联覆盖生活的方方面面" - ) - ) - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708554279/红旗车队.m4v", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969553174/红旗重新排版.png", - "蘑菇车联之红旗车队" - ) - ) - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png", - "蘑菇车联牵手成都大运会" - ) - ) - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708409810/20210610重新排版3屏.m4v", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969579713/三屏.png", - "多视角体验蘑菇车联自动驾驶" - ) - ) - } - - private fun initMoviesData() { - arrayListOf.clear() - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558672856/小宝宝.mp4", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559345882/1.png", - "小宝宝" - ) - ) - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558697055/小猫.mp4", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559367261/2.png", - "小猫" - ) - ) - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558730074/星空.mp4", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559406169/4.png", - "星空" - ) - ) - arrayListOf.add( - TaxiPassengerVideoPlay( - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656558644708/海浪.mp4", - "https://img.zhidaohulian.com/fileServer/online_car_hailing/1656559384635/3.png", - "星空" - ) - ) - } - - private fun initData() { - val carouselLayoutManager = CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true) - carouselLayoutManager.setPostLayoutListener(CarouselZoomPostLayoutListener()) - carouselLayoutManager.maxVisibleItems = 1 - indicatorView.notifyDataChanged(arrayListOf.size) - indicatorView.setSlideMode(IndicatorSlideMode.SCALE) - indicatorView.setOrientation(IndicatorOrientation.INDICATOR_HORIZONTAL) - indicatorView.setIndicatorStyle(IndicatorStyle.ROUND_RECT) - indicatorView.setSliderColor( - Color.parseColor("#FFFFFF"), Color.parseColor("#26C5FD"), - Color.parseColor("#26C5FD") - ) - indicatorView.setSliderWidth(9f, 54f) - indicatorView.setSliderHeight(9f) - indicatorView.setSliderGap(36f) - rvVideoPlaylist?.addOnScrollListener(object : CenterScrollListener() { - var prePlayerPosition = 0 - override fun pageSelect(recyclerView: RecyclerView?, newState: Int) { - //播放视频 - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - indicatorView.onPageSelected(centerItemPosition) - if (player is ConsultVideoPlayer) { - if (prePlayerPosition != centerItemPosition) { - if (player.currentState == GSYVideoView.CURRENT_STATE_PAUSE) { - player.onVideoReset() - } - val playerHolder = - carouselLayoutManager.findViewByPosition(prePlayerPosition) - val prePlayer = - playerHolder?.findViewById(R.id.video_item_player) - prePlayer?.onVideoReset() - val taxiPassengerVideoPlay = arrayListOf[centerItemPosition] - setBackageAndPlayNext(taxiPassengerVideoPlay) - } else { - player.onVideoResume(false) - } - } - prePlayerPosition = centerItemPosition - } - - override fun pageStop() { - val (_: Int, player) = getPlayer(carouselLayoutManager) - if (player is ConsultVideoPlayer) { - player.onVideoPause() - } - } - - }) - carouselLayoutManager.addOnDargAutoDiffListener { adapterPosition, currentPosition -> - val fl = adapterPosition - floor(adapterPosition) - var currentIndex = currentPosition - if (fl > 0.5) { - if (currentPosition == 0) { - currentIndex = rvVideoPlaylist?.adapter!!.itemCount - 1 - } else { - currentIndex -= 1 - } - } - indicatorView.onPageScrolled(currentIndex, fl, 0) - } - val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf, rvVideoPlaylist) - recyclerVideoAdapter.setOnThumbImageClilckListener { - val (_: Int, player) = getPlayer(carouselLayoutManager) - if (player is ConsultVideoPlayer) { - player.onVideoReset() - player.thumbImageViewLayout.visibility = View.VISIBLE - } - rvVideoPlaylist?.smoothScrollToPosition(it) - } - rvVideoPlaylist?.layoutManager = carouselLayoutManager - rvVideoPlaylist?.setHasFixedSize(true) - rvVideoPlaylist?.adapter = recyclerVideoAdapter - } - - private fun getPlayer(carouselLayoutManager: CarouselLayoutManager): Pair { - val centerItemPosition: Int = carouselLayoutManager.centerItemPosition - val playerHolder = carouselLayoutManager.findViewByPosition(centerItemPosition) - val player = playerHolder?.findViewById(R.id.video_item_player) - return Pair(centerItemPosition, player) - } - - private fun initListener() { - } - - private fun initView() { - rvVideoPlaylist = findViewById(R.id.rv_video_playlist) - indicatorView = findViewById(R.id.indicatorView) - clContain = findViewById(R.id.cl_contain) - acivTitleIcon = findViewById(R.id.aciv_title_icon) - tvTitle = findViewById(R.id.tv_mogo_consult) - acivTitleIcon.setOnClickListener { - //finish() - } - } - - - private fun setBackageAndPlayNext(taxiPassengerVideoPlay: TaxiPassengerVideoPlay) { - // 设置背景图片 - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - when (videotype) { - VIDEOTYPE_CONSULT -> { - OverlayLeftViewUtils.showOverlayView( - this, - isOpen = false, - checkIndex = OverlayLeftViewUtils.CONSULT - ) - } - VIDEOTYPE_MOIES -> { - OverlayLeftViewUtils.showOverlayView( - this, - isOpen = false, - checkIndex = OverlayLeftViewUtils.MOVIE - ) - } - } - val sumDis = intent.getIntExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - FloatingDistanceInfoUtils.showOverlayView(this, sumDis = sumDis) - } - - override fun onResume() { - super.onResume() - val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if (centerItemPosition < 0) { - setBackageAndPlayNext(arrayListOf[0]) - } - player?.let { - if (player.isIfCurrentIsFullscreen) {// 全屏了 - - } else { - when (player.currentState) { - GSYVideoView.CURRENT_STATE_PAUSE -> { - player.onVideoResume(false) - } - GSYVideoView.CURRENT_STATE_PLAYING -> { - } - else -> { - - } - } - } - - } - subscribe = Observable.interval(2, 8, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(object : Observer { - override fun onCompleted() {} - override fun onError(e: Throwable?) {} - override fun onNext(t: Long?) { - if (!OverlayLeftViewUtils.getStatus()) { - when (videotype) { - VIDEOTYPE_CONSULT -> { - OverlayLeftViewUtils.showOverlayView( - this@VideoActivity, - isOpen = false, - checkIndex = OverlayLeftViewUtils.CONSULT - ) - } - VIDEOTYPE_MOIES -> { - OverlayLeftViewUtils.showOverlayView( - this@VideoActivity, - isOpen = false, - checkIndex = OverlayLeftViewUtils.MOVIE - ) - } - } - } - } - }) - } - - override fun onPause() { - super.onPause() - val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager - val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - if (player is ConsultVideoPlayer) { - // 离开应用 暂停视频 - // 关闭 onDetachedFromWindow 会reset - if (player.isIfCurrentIsFullscreen) {// 全屏了 - } else { - player.onVideoPause() - } - } - } - cancleSubscribe() - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun finishActivity(event: FinishActivity) { - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "finishActivity(event)") - cancleSubscribe() - val intent = Intent() - val parse = Uri.parse("mogo://launcher/main/switch2?type=launch") - intent.data = parse - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP - startActivity(intent) - finish() - } - - override fun onDestroy() { - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDestroy()") - super.onDestroy() - EventBus.getDefault().unregister(this) - LeftMenuOpen.unregisterCallback(LeftMenuOpen.callBack) - releaseOnNewInstance() - OverlayLeftViewUtils.dismissOverlayView(false) - FloatingDistanceInfoUtils.dismissOverlayView() - FixMemoryLeak.fixLeak(this) - cancleSubscribe() - } - - private fun cancleSubscribe() { - subscribe?.let { - if (!it.isUnsubscribed) { - it.unsubscribe() - } - } - } - - private fun releaseOnNewInstance() { - if (rvVideoPlaylist != null && rvVideoPlaylist?.layoutManager != null) { - val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager - val (_: Int, player) = getPlayer(carouselLayoutManager) - player?.let { - player.currentPlayer.release() - player.onVideoReset() - } - } - FullVideoUtils.dismissOverlayView(true) - } - - override fun onBackPressed() {} - - override fun getResources(): Resources? { - if (Looper.myLooper() == Looper.getMainLooper()) { - AutoSizeCompat.autoConvertDensityOfGlobal(super.getResources()) - } - return super.getResources() - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java deleted file mode 100644 index d837a76b89..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - -import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.List; - -import mogo.telematics.pad.MessagePad; - -/** - * @author: wangmingjun - * @date: 2022/4/13 - */ -public class TPRouteDataTestUtils { - - static String jsonStr ="{\n" + - " \"models\": [\n" + - " {\n" + - " \"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927760268911,\"lon\":116.73512607061035,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927736555187,\"lon\":116.73498243020299,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927135941599,\"lon\":116.73482951462647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199260672670036,\"lon\":116.73468429259535,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199251260349946,\"lon\":116.73453933465,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924691997577,\"lon\":116.7343756435551,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199247953493625,\"lon\":116.73421240809087,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924986849947,\"lon\":116.73400425509712,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199249431152175,\"lon\":116.73378579041055,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199248921305724,\"lon\":116.73357811807278,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925012387371,\"lon\":116.73337650020184,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252270195075,\"lon\":116.73318223781153,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992521615169,\"lon\":116.73298632625203,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925202633083,\"lon\":116.73279582043983,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199261230205735,\"lon\":116.73263403473568,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199327991681926,\"lon\":116.73251962434813,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19944850496711,\"lon\":116.73249661840195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199582026896415,\"lon\":116.73251038561487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199743326352014,\"lon\":116.73253087453938,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199908347167394,\"lon\":116.73255070500186,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200065950595445,\"lon\":116.7325720694418,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20022747460407,\"lon\":116.73259461416663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384057310536,\"lon\":116.73261575018056,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20053849777916,\"lon\":116.73263451936387,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200696919444624,\"lon\":116.7326540541723,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2008524952796,\"lon\":116.7326743511824,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20101429705625,\"lon\":116.73269393580199,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118279997041,\"lon\":116.73271564378308,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201342388452076,\"lon\":116.73273653366076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201476063822355,\"lon\":116.73275292393079,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163479199852,\"lon\":116.73277440686762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181243476041,\"lon\":116.7328052766508,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201991767093304,\"lon\":116.7328453845644,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20215573733484,\"lon\":116.73287624009339,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202313648759784,\"lon\":116.73289887933315,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434745374454,\"lon\":116.7329182210956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253164952098,\"lon\":116.73297539811277,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258043275509,\"lon\":116.73312335324984,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258233576585,\"lon\":116.73331077089557,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20257107560234,\"lon\":116.73351244039137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202561578580514,\"lon\":116.73370176209845,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20256256788661,\"lon\":116.73391325024126,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20255633158834,\"lon\":116.73413195000244,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202543311179575,\"lon\":116.73436614303907,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253067346457,\"lon\":116.73458032609663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20251776111356,\"lon\":116.73477082198242,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202503997557805,\"lon\":116.73498624001282,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20249129260376,\"lon\":116.73518976336872,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247877796589,\"lon\":116.73537786253135,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246651610268,\"lon\":116.73559239130266,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245754388014,\"lon\":116.73574239922202,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20244749208,\"lon\":116.73589674090469,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243806550113,\"lon\":116.73607057284322,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243550556816,\"lon\":116.73628106525871,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243654127756,\"lon\":116.7364949950665,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243738221016,\"lon\":116.7367061649993,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243672476754,\"lon\":116.73691115930336,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243590788176,\"lon\":116.73710722104272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202436434375336,\"lon\":116.73730688607075,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243749821501,\"lon\":116.73750140347998,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243625962803,\"lon\":116.73771330926793,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434515480725,\"lon\":116.73791895606205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024326561388,\"lon\":116.73815206945737,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243092086137,\"lon\":116.73838655528765,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202430876006126,\"lon\":116.73861890759498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242914053177,\"lon\":116.73882029918758,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242843336561,\"lon\":116.73904465495175,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242661219026,\"lon\":116.73922453252953,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426462811076,\"lon\":116.7393708046956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242687134937,\"lon\":116.73954685547025,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242694967377,\"lon\":116.73975021183773,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202424630601236,\"lon\":116.73999740812975,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202422502184625,\"lon\":116.74028266774337,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202419634158936,\"lon\":116.7405942561498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241975959762,\"lon\":116.7409069557092,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241920524113,\"lon\":116.74120156191647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241765540262,\"lon\":116.74149288504978,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241569149764,\"lon\":116.7418080096762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202414529497084,\"lon\":116.74210262897205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241419532155,\"lon\":116.74241767661879,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202413879360954,\"lon\":116.7427571218185,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241287045245,\"lon\":116.7431284691325,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241214965105,\"lon\":116.74343354359334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241141271715,\"lon\":116.7437220210538,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024080520075,\"lon\":116.74399113498052,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202391714280026,\"lon\":116.74427625698272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20238163805639,\"lon\":116.74452083315958,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379293010274,\"lon\":116.74475703837204,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379007817086,\"lon\":116.7449961645494,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20237814181231,\"lon\":116.7452036063558,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202375477619896,\"lon\":116.74539567654291,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2023632396621,\"lon\":116.74555457589031,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20229396554444,\"lon\":116.7456716047369,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20217800547467,\"lon\":116.74574081942625,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202047498095304,\"lon\":116.74573659255675,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20188573786706,\"lon\":116.74571018281719,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201738240263026,\"lon\":116.74568463148606,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20157507049073,\"lon\":116.74565525041498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20137985142042,\"lon\":116.745619970576,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201187335613575,\"lon\":116.74558631350607,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20098251429043,\"lon\":116.74555055587679,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2007748533628,\"lon\":116.74551426934663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20057082986032,\"lon\":116.74547749663195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20036944224329,\"lon\":116.74544156175533,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016365229035,\"lon\":116.74540577510051,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1999958572445,\"lon\":116.74537505807076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19984100521566,\"lon\":116.7453433678602,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1996863960282,\"lon\":116.74529675648621,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19953919567943,\"lon\":116.74525916493474,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19940587189373,\"lon\":116.74523402869453,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19929047792381,\"lon\":116.74518617038383,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922141745155,\"lon\":116.74506912884067,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920798885308,\"lon\":116.744896716334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920912644279,\"lon\":116.74467216715483,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199209186509314,\"lon\":116.74448257515108,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920910709997,\"lon\":116.74430613406223,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992100786082,\"lon\":116.74410888316238,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921081961254,\"lon\":116.74391968819582,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921040855518,\"lon\":116.7437082083402,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921085053439,\"lon\":116.74346931155634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921197237373,\"lon\":116.74325149697013,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921248248983,\"lon\":116.74301103786591,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992139724646,\"lon\":116.74277237066539,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215818352386,\"lon\":116.74253219408898,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216175018876,\"lon\":116.74228853120842,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215970354246,\"lon\":116.74204663206451,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216627492966,\"lon\":116.74183871233049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921789170398,\"lon\":116.74165788334192,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922000138535,\"lon\":116.74144512197054,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199221559127494,\"lon\":116.741249370491,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922287231889,\"lon\":116.7410525810756,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922229019589,\"lon\":116.74085266662037,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992216995901,\"lon\":116.74061957723823,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922263073874,\"lon\":116.74041638149129,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922478093337,\"lon\":116.7402123910757,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199227066091595,\"lon\":116.74003419421553,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199228634241756,\"lon\":116.73985841944678,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922951636012,\"lon\":116.7397079274105,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252095329484,\"lon\":116.73956265582487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199346162997905,\"lon\":116.73944690416265,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199470799628024,\"lon\":116.73941941053417,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19962513314346,\"lon\":116.7394280706812,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199780626058924,\"lon\":116.73944255215424,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199961525343376,\"lon\":116.73945856750177,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016196947193,\"lon\":116.73947572081121,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384479551936,\"lon\":116.7394949225795,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200595083817475,\"lon\":116.73951027963179,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200792203321086,\"lon\":116.73952526850614,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200985930701684,\"lon\":116.73954125209579,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20115978977055,\"lon\":116.73955610094161,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201321019536124,\"lon\":116.7395695239138,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20147117943043,\"lon\":116.7395823299481,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163699848565,\"lon\":116.73959633422596,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20178484338371,\"lon\":116.7396085776486,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201962185646316,\"lon\":116.73962351991214,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021018923927,\"lon\":116.7396354059821,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2022137620686,\"lon\":116.73964348380458,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20232600820075,\"lon\":116.73961190446633,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241090270993,\"lon\":116.73951649703137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245777783807,\"lon\":116.73937664238166,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246906634823,\"lon\":116.73920146119093,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470916682884,\"lon\":116.73898763065634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247034830421,\"lon\":116.73878158418357,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246978204673,\"lon\":116.73857680142473,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247082638905,\"lon\":116.73834517890637,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202471943178196,\"lon\":116.7381047689514,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247131648035,\"lon\":116.73787761484981,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470799473765,\"lon\":116.73766230702478,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247013054322,\"lon\":116.73743619407796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246999515433,\"lon\":116.73724916823292,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247199652478,\"lon\":116.73704888970806,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202473960263525,\"lon\":116.73684083235807,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202474504753205,\"lon\":116.73665462440796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247501354581,\"lon\":116.73650710371837,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246541231906,\"lon\":116.73635807696789,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426768984274,\"lon\":116.73622283382787,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20236638788854,\"lon\":116.73610589402243,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20227106919894,\"lon\":116.73600895001849,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021428343084,\"lon\":116.73596816020945,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20197815580698,\"lon\":116.73594623645097,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181789535303,\"lon\":116.73593148707488,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201667906886954,\"lon\":116.73591743008926,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201505897730755,\"lon\":116.7359002912543,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20135083580946,\"lon\":116.73588579696379,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118617904595,\"lon\":116.73586970398149,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20102374028594,\"lon\":116.73585314703226,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20085554043743,\"lon\":116.73583763953049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20069451888229,\"lon\":116.73582073901778,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200530837344964,\"lon\":116.73580314359012,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2003608457064,\"lon\":116.73578183888779,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20021770046798,\"lon\":116.73575292592922,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20003454701824,\"lon\":116.7357174959358,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19986125116602,\"lon\":116.73569499961796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19969408518737,\"lon\":116.73567725223492,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19955533048882,\"lon\":116.73566375985422,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19943174810538,\"lon\":116.73564927714162,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19933167546824,\"lon\":116.735595995086,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199280357603875,\"lon\":116.73546293260645,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927848361656,\"lon\":116.73531579486274,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19928127892504,\"lon\":116.73505848474375,\"speed\": 0.0\n" + - " }\n" + - " ]\n" + - "}"; - public static void converToRouteData(){ - List 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("lat")); - builder.setLongitude(s.getDouble("lon")); - list.add(builder.build()); - } - TaxiPassengerModel.getInstance().startToRouteAndWipe(list); - } catch (JSONException e) { - e.printStackTrace(); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 4b46f036bf..20cf8b4e41 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -17,11 +17,12 @@ 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.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.TimeTransformUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider import com.mogo.och.taxi.passenger.R -import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils +import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils import com.mogo.och.taxi.passenger.utils.ZoomDrawable import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack @@ -30,6 +31,7 @@ import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer import com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer import com.shuyu.gsyvideoplayer.video.base.GSYVideoView +import me.jessyan.autosize.utils.AutoSizeUtils import java.lang.reflect.Constructor /** @@ -50,6 +52,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { private var fullVideoPlayer:ConsultVideoPlayer?=null var smalllPlayer:ConsultVideoPlayer?=null + private var statusBarView: StatusBarView? = null private var currentTime = 0 @@ -83,7 +86,6 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { private fun addDrageAnchor(){ vPpenLeft.visibility = VISIBLE - OverlayLeftViewUtils.addDragTarget(vPpenLeft) layoutBottom.post { val layoutParams = layoutBottom.layoutParams as ConstraintLayout.LayoutParams layoutParams.setMargins(333,0,333,90) @@ -96,11 +98,11 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { layoutParams.height = 320 mTopContainer.layoutParams = layoutParams val background = layoutBottom.background as GradientDrawable - val x = arrayOf(12f, 12f,12f, 12f,12f, 12f,12f, 12f) - background.cornerRadii = x.toFloatArray() + val x = floatArrayOf(12f, 12f,12f, 12f,12f, 12f,12f, 12f) + background.cornerRadii = x + layoutBottom.background = background - fullscreenButton.setPadding(92,0,92,0) titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 50f) val layoutParams1 = titleTextView.layoutParams as ConstraintLayout.LayoutParams layoutParams1.marginStart = 80 @@ -113,6 +115,13 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { mProgressBar.maxHeight = 6 mProgressBar.minHeight = 6 } + + val layoutParams2 = fullscreenButton.layoutParams as ConstraintLayout.LayoutParams + layoutParams2.topMargin = AutoSizeUtils.dp2px(context,119f) + layoutParams2.rightMargin = AutoSizeUtils.dp2px(context,70f) + layoutParams2.height = AutoSizeUtils.dp2px(context,108f) + layoutParams2.width = AutoSizeUtils.dp2px(context,108f) + fullscreenButton.layoutParams = layoutParams2 } } @@ -143,13 +152,13 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onWindowFocusChanged(hasWindowFocus: Boolean) { super.onWindowFocusChanged(hasWindowFocus) - if(isIfCurrentIsFullscreen&&smalllPlayer!=null){ - if(hasWindowFocus){//获取焦点 - onVideoResume() - }else{ - onVideoPause() - } - } +// if(isIfCurrentIsFullscreen&&smalllPlayer!=null){ +// if(hasWindowFocus){//获取焦点 +// onVideoResume() +// }else{ +// onVideoPause() +// } +// } } override fun touchDoubleUp() { @@ -159,15 +168,43 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun changeUiToNormal() { super.changeUiToNormal() setViewShowState(fullscreenButton, INVISIBLE) + this.statusBarView?.visibility = View.VISIBLE + } + + override fun changeUiToPreparingShow() { + super.changeUiToPreparingShow() + this.statusBarView?.visibility = View.VISIBLE } override fun changeUiToPlayingShow() { super.changeUiToPlayingShow() setViewShowState(fullscreenButton, VISIBLE) + this.statusBarView?.visibility = View.VISIBLE + } + + override fun changeUiToPlayingClear() { + super.changeUiToPlayingClear() + this.statusBarView?.visibility = View.GONE + } + + override fun changeUiToPauseShow() { + super.changeUiToPauseShow() + this.statusBarView?.visibility = View.VISIBLE + } + + override fun changeUiToPlayingBufferingShow() { + super.changeUiToPlayingBufferingShow() + this.statusBarView?.visibility = View.VISIBLE + } + + override fun changeUiToCompleteShow() { + super.changeUiToCompleteShow() + this.statusBarView?.visibility = View.VISIBLE } public override fun hideAllWidget() { super.hideAllWidget() + this.statusBarView?.visibility = View.GONE } override fun setProgressAndTime( @@ -207,7 +244,6 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { setVideoAllCallBack(null) } dismissProgressDialog() - OverlayLeftViewUtils.removeDragTarget(vPpenLeft) super.onDetachedFromWindow() } @@ -300,11 +336,18 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { super.onSizeChanged(w, h, oldw, oldh) if (!mIfCurrentIsFullscreen) { - this.outlineProvider = TextureVideoViewOutlineProvider(38F) + this.outlineProvider = TextureVideoViewOutlineProvider(12F) this.clipToOutline = true } } + fun exitFullScreenMode() { + fullVideoPlayer?.let { + clearFullscreenLayout(it) + FullVideoUtils.dismissOverlayView(false) + } + } + private fun startWindowFullscreenOwn(context:Context){ val gsyBaseVideoPlayer = startWindowFullscreen(context) gsyBaseVideoPlayer?.let { @@ -388,10 +431,14 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } } } + // 点击视频不展示状态栏 + gsyVideoPlayer.isHideKey = false gsyVideoPlayer.smalllPlayer = this frameLayout.setBackgroundColor(Color.BLACK) val lp = LayoutParams(width, height) frameLayout.addView(gsyVideoPlayer, lp) + gsyVideoPlayer.statusBarView = StatusBarView(context) + frameLayout.addView(gsyVideoPlayer.statusBarView) FullVideoUtils.showOverlayView(context as Activity,frameLayout,R.style.och_window_anim_alpha) gsyVideoPlayer.visibility = INVISIBLE frameLayout.visibility = INVISIBLE @@ -454,10 +501,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } fun clearFullscreenLayout(gsyVideoPlayer:ConsultVideoPlayer) { - mIfCurrentIsFullscreen = false - val delay = 100 - gsyVideoPlayer.smalllPlayer = null - mInnerHandler.postDelayed({ resolveNormalVideoShow(gsyVideoPlayer) }, delay.toLong()) + if (mIfCurrentIsFullscreen) { + mIfCurrentIsFullscreen = false + val delay = 100 + gsyVideoPlayer.smalllPlayer = null + mInnerHandler.postDelayed({ resolveNormalVideoShow(gsyVideoPlayer) }, delay.toLong()) + } } private fun resolveNormalVideoShow(gsyVideoPlayer: GSYVideoPlayer) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/WindowRelativeLayout.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/WindowRelativeLayout.kt new file mode 100644 index 0000000000..31313e52f7 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/WindowRelativeLayout.kt @@ -0,0 +1,30 @@ +package com.mogo.och.taxi.passenger.widget + +import android.content.Context +import android.util.AttributeSet +import android.widget.RelativeLayout +import androidx.lifecycle.ViewModelStore +import androidx.lifecycle.ViewModelStoreOwner + +open class WindowRelativeLayout: RelativeLayout, ViewModelStoreOwner { + + 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) + + //定义ViewModelStore变量 + private var mViewModelStore: ViewModelStore = ViewModelStore() + + override fun getViewModelStore(): ViewModelStore { + return mViewModelStore + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + mViewModelStore.clear() + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/animutils/AnimationsContainer.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/animutils/AnimationsContainer.kt new file mode 100644 index 0000000000..eab32ba7d0 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/animutils/AnimationsContainer.kt @@ -0,0 +1,146 @@ +package com.mogo.och.taxi.passenger.widget.animutils + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.drawable.BitmapDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.mogo.commons.AbsMogoApplication +import java.lang.ref.SoftReference + +class AnimationsContainer(resId: Int, fps: Int, imageView: ImageView) { + private lateinit var mFrames: IntArray // 帧数组 + private var mIndex = 0 // 当前帧 + private var mShouldRun = false // 开始/停止播放用 + private var mIsRunning = false // 动画是否正在播放,防止重复播放 + private var mSoftReferenceImageView: SoftReference? = null // 软引用ImageView,以便及时释放掉 + private var mHandler: Handler? = null + private var mDelayMillis = 0 + private var mOnAnimationStoppedListener: OnAnimationStoppedListener? = null//播放停止监听 + private var mBitmap: Bitmap? = null + private var mBitmapOptions: BitmapFactory.Options? = null //Bitmap管理类,可有效减少Bitmap的OOM问题 + + init { + createAnimation(imageView, getData(resId), fps) + } + + private fun createAnimation(imageView: ImageView, frames: IntArray, fps: Int) { + mHandler = Handler(Looper.myLooper()!!) + mFrames = frames + mIndex = -1 + mSoftReferenceImageView = SoftReference(imageView) + mShouldRun = false + mIsRunning = false + mDelayMillis = 1000 / fps //帧动画时间间隔,毫秒 + imageView.setImageResource(mFrames[0]) + + // 当图片大小类型相同时进行复用,避免频繁GC + val bmp = (imageView.drawable as BitmapDrawable).bitmap + val width = bmp.width + val height = bmp.height + val config = bmp.config + mBitmap = Bitmap.createBitmap(width, height, config) + mBitmapOptions = BitmapFactory.Options() + //设置Bitmap内存复用 + mBitmapOptions!!.inBitmap = mBitmap //Bitmap复用内存块,类似对象池,避免不必要的内存分配和回收 + mBitmapOptions!!.inMutable = true //解码时返回可变Bitmap + mBitmapOptions!!.inSampleSize = 1 //缩放比例 + } + + //循环读取下一帧 + private val next: Int + get() { + mIndex++ + if (mIndex >= mFrames.size) mIndex = 0 + return mFrames[mIndex] + } + + /** + * 播放动画,同步锁防止多线程读帧时,数据安全问题 + */ + @Synchronized + fun start() { + mShouldRun = true + if (mIsRunning) return + val runnable: Runnable = object : Runnable { + override fun run() { + val imageView = mSoftReferenceImageView!!.get() + if (!mShouldRun || imageView == null) { + mIsRunning = false + if (mOnAnimationStoppedListener != null) { + mOnAnimationStoppedListener!!.AnimationStopped() + } + return + } + mIsRunning = true + //新开线程去读下一帧 + mHandler!!.postDelayed(this, mDelayMillis.toLong()) + if (imageView.isShown) { + val imageRes: Int = next + 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 + } + } else { + imageView.setImageResource(imageRes) + } + } + } + } + mHandler!!.post(runnable) + } + + /** + * 停止播放 + */ + @Synchronized + fun stop() { + mShouldRun = false + } + + /** + * 设置停止播放监听 + * @param listener 设置监听 + */ + fun setOnAnimStopListener(listener: OnAnimationStoppedListener?) { + mOnAnimationStoppedListener = listener + } + + /** + * 从xml中读取帧数组 + * @param resId + * @return + */ + private 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 + } + + /** + * 停止播放监听 + */ + interface OnAnimationStoppedListener { + fun AnimationStopped() + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrived_glide.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrived_glide.png new file mode 100644 index 0000000000..adc24a4587 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrived_glide.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_blue_tooth_close.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_blue_tooth_close.png new file mode 100644 index 0000000000..f114ddbb67 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_blue_tooth_close.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_blue_tooth_open.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_blue_tooth_open.png new file mode 100644 index 0000000000..55896f8433 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_blue_tooth_open.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_bar_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_bar_bg.png new file mode 100644 index 0000000000..e57ab24b01 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_bar_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_bar_select_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_bar_select_bg.png new file mode 100644 index 0000000000..80a15f7f0b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_bar_select_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_overmap_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_overmap_normal.png new file mode 100644 index 0000000000..039096dd66 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_overmap_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_overmap_press.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_overmap_press.png new file mode 100644 index 0000000000..5996ff1b61 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_overmap_press.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_precisionmap_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_precisionmap_normal.png new file mode 100644 index 0000000000..ebc9258cb7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_precisionmap_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_precisionmap_press.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_precisionmap_press.png new file mode 100644 index 0000000000..1406939d8e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_precisionmap_press.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_video_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_video_normal.png new file mode 100644 index 0000000000..92ed61f399 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_video_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_video_press.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_video_press.png new file mode 100644 index 0000000000..22f03e303b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_bottom_video_press.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png index a70be0cdd8..1504bbc816 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_full.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png index b3ceb81fb6..3f24949883 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_change_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_front_left_door_bg.9.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_front_left_door_bg.9.png new file mode 100644 index 0000000000..b34a60c25e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_front_left_door_bg.9.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_front_right_door_bg.9.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_front_right_door_bg.9.png new file mode 100644 index 0000000000..0fe4112c52 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_front_right_door_bg.9.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_itinerary_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_itinerary_bg.png new file mode 100644 index 0000000000..8d08d98530 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_itinerary_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png deleted file mode 100755 index 232b525cc9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_left_flow_bg.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_location_center.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_location_center.png new file mode 100644 index 0000000000..2aa805a7c2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_location_center.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png index dedaf093e9..3dc7578590 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car_light.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car_light.png new file mode 100644 index 0000000000..c980c18981 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car_light.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_select.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_select.png deleted file mode 100644 index efa5c92cff..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_select.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_selected.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_selected.png deleted file mode 100644 index a920f867bf..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_consult_selected.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_entertainment_select.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_entertainment_select.png deleted file mode 100644 index f1fcd94d06..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_entertainment_select.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_entertainment_selected.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_entertainment_selected.png deleted file mode 100644 index 8777558ee2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_entertainment_selected.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_live_select.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_live_select.png deleted file mode 100644 index 7571b33968..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_live_select.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_live_selected.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_live_selected.png deleted file mode 100644 index 7b309b5815..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_live_selected.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_logo.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_logo.png new file mode 100644 index 0000000000..7497c10064 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_logo.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_overview_select.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_overview_select.png deleted file mode 100644 index 42d3500f40..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_overview_select.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_overview_selected.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_overview_selected.png deleted file mode 100644 index 9d8c093a92..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogo_overview_selected.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_arrived_close.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_arrived_close.png index 2d9221c90e..77bac9388b 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_arrived_close.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_arrived_close.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_input_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_input_bg.png new file mode 100644 index 0000000000..72c0f0fc40 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_input_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.png deleted file mode 100755 index 49567f10c2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.webp new file mode 100644 index 0000000000..8736cf5d06 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_check_panel_bg.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png index 7121f26751..784a482dcf 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_passenger_start_panel_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_pnc_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_pnc_bg.png new file mode 100644 index 0000000000..f3892d99b1 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_pnc_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_rear_left_door_bg.9.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_rear_left_door_bg.9.png new file mode 100644 index 0000000000..bfa9354128 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_rear_left_door_bg.9.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_rear_right_door_bg.9.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_rear_right_door_bg.9.png new file mode 100644 index 0000000000..9dae84147d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_rear_right_door_bg.9.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_right_rear_cam.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_right_rear_cam.png new file mode 100755 index 0000000000..cc4cdceca5 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_right_rear_cam.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_roma_checked.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_roma_checked.png new file mode 100644 index 0000000000..7377fd23a7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_roma_checked.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_roma_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_roma_normal.png new file mode 100644 index 0000000000..38e78514d9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_roma_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_setting_checked.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_setting_checked.png new file mode 100644 index 0000000000..017decf57c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_setting_checked.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_setting_normal.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_setting_normal.png new file mode 100644 index 0000000000..c317fdc045 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_setting_normal.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_status_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_status_bg.png new file mode 100644 index 0000000000..9ef3dedd65 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_status_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_light_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_light_bg.png new file mode 100644 index 0000000000..e9f0ea0090 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_video_light_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml index c8e2cecfca..f061a263fd 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml @@ -1,305 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml index d38d49055a..d86b36b5c1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_bg.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_light_bg_shape.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_light_bg_shape.xml new file mode 100644 index 0000000000..387f89e2eb --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_video_light_bg_shape.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_score_success.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_score_success.xml deleted file mode 100644 index 530c056746..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_score_success.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00004.png deleted file mode 100755 index f7dd0c6b25..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00004.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00006.png deleted file mode 100755 index 70108e3707..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00006.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00008.png deleted file mode 100755 index a0877d0acc..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00008.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00010.png deleted file mode 100755 index f297f5d342..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00010.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00012.png deleted file mode 100755 index 68f2afcae2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00012.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00014.png deleted file mode 100755 index 831402be08..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00014.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00016.png deleted file mode 100755 index 267f43b0f3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00016.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00018.png deleted file mode 100755 index 090e0f5956..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00018.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00020.png deleted file mode 100755 index 79dcb2bd7d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00020.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00022.png deleted file mode 100755 index f0bdfebe51..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00022.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00024.png deleted file mode 100755 index f2849724a9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00024.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00026.png deleted file mode 100755 index 61ced03693..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00026.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00028.png deleted file mode 100755 index 267f43b0f3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00028.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00030.png deleted file mode 100755 index 6ace3723e0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00030.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00032.png deleted file mode 100755 index 7bf472281c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00032.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00034.png deleted file mode 100755 index b4f6621cf1..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00034.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00036.png deleted file mode 100755 index c7b712902f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00036.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00038.png deleted file mode 100755 index 948889745a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00038.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00040.png deleted file mode 100755 index 642dc60de2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00040.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00042.png deleted file mode 100755 index 58fd5e0e7e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00042.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00044.png deleted file mode 100755 index 19bcbac261..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00044.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00046.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00046.png deleted file mode 100755 index acd43f4298..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00046.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00048.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00048.png deleted file mode 100755 index 170eb808a3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00048.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00050.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00050.png deleted file mode 100755 index 4be63ceae0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00050.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00052.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00052.png deleted file mode 100755 index e32c7f0f05..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00052.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00054.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00054.png deleted file mode 100755 index 261498d77c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00054.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00056.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00056.png deleted file mode 100755 index 6e86e9562e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00056.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00058.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00058.png deleted file mode 100755 index eccea55da7..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00058.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00060.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00060.png deleted file mode 100755 index 84f0a318ec..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00060.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00062.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00062.png deleted file mode 100755 index 638959b769..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00062.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00064.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00064.png deleted file mode 100755 index 6cd7a9c5e3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00064.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00066.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00066.png deleted file mode 100755 index 7c98a6bc11..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00066.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00068.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00068.png deleted file mode 100755 index 1e29bf4ff5..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/hand_00068.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/ic_baseline_arrow.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/ic_baseline_arrow.png deleted file mode 100644 index 54e593579f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/ic_baseline_arrow.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00000.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00000.png old mode 100755 new mode 100644 index a87ce28353..7d887647ed Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00000.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00000.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00001.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00001.png old mode 100755 new mode 100644 index ed4d3febae..9cf5bda880 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00001.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00001.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00002.png old mode 100755 new mode 100644 index 978dc8cbea..6077a2c08f Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00002.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00002.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00003.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00003.png old mode 100755 new mode 100644 index b41c810c2b..047b3c3d2c Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00003.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00003.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00004.png old mode 100755 new mode 100644 index 15180e4954..4f615372d7 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00004.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00004.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00005.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00005.png old mode 100755 new mode 100644 index 128c2b10d5..959dbd6c57 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00005.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00005.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00006.png old mode 100755 new mode 100644 index dcb1b8db55..59aa3aa5a7 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00006.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00006.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00007.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00007.png old mode 100755 new mode 100644 index d980c36eb3..d623763a76 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00007.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00007.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00008.png old mode 100755 new mode 100644 index 041bb2aca4..8f548bfbf0 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00008.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00008.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00009.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00009.png old mode 100755 new mode 100644 index 4516a22b5c..6127862fcd Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00009.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00009.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00010.png old mode 100755 new mode 100644 index e60876958b..d12a204bd3 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00010.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00010.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00011.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00011.png old mode 100755 new mode 100644 index 330a294670..ba1ec584d3 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00011.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00011.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00012.png old mode 100755 new mode 100644 index b09f0594f8..9f8ef18110 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00012.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00012.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00013.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00013.png old mode 100755 new mode 100644 index 201cc1c734..a6c4c29ca6 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00013.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00013.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00014.png old mode 100755 new mode 100644 index 020e85e414..4d686d6906 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00014.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00014.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00015.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00015.png old mode 100755 new mode 100644 index a6234edea5..229d90ea91 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00015.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00015.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00016.png old mode 100755 new mode 100644 index 2909dba853..76566ef4cf Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00016.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00016.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00017.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00017.png old mode 100755 new mode 100644 index ae44921498..0c737824f2 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00017.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00017.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00018.png old mode 100755 new mode 100644 index b2d383af4f..ed21f50463 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00018.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00018.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00019.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00019.png old mode 100755 new mode 100644 index 143aa7cebf..6c3d2f36d1 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00019.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00019.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00020.png old mode 100755 new mode 100644 index cfa12dffeb..79ba9c2d55 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00020.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00020.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00021.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00021.png old mode 100755 new mode 100644 index 504524e687..344298c6fa Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00021.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00021.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00022.png old mode 100755 new mode 100644 index 01d2a11339..d4a3aa37ac Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00022.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00022.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00023.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00023.png old mode 100755 new mode 100644 index ef12f3bcc2..bf16bc01e3 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00023.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00023.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00024.png old mode 100755 new mode 100644 index bfd526d29d..4393d89daa Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00024.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00024.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00025.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00025.png old mode 100755 new mode 100644 index f71f6f8f67..0d806f46f3 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00025.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00025.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00026.png old mode 100755 new mode 100644 index 93b68757d2..1d66ff5f0f Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00026.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00026.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00027.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00027.png old mode 100755 new mode 100644 index e24cae142d..48cb04e811 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00027.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00027.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00028.png old mode 100755 new mode 100644 index 563899a67c..346985a730 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00028.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00028.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00029.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00029.png old mode 100755 new mode 100644 index eba1e12d7f..fa5570051b Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00029.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00029.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00030.png old mode 100755 new mode 100644 index 754efe49f3..e3a021bcdd Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00030.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00030.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00031.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00031.png old mode 100755 new mode 100644 index b7a9549bfb..997acf4628 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00031.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00031.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00032.png old mode 100755 new mode 100644 index fffdf50984..c203740591 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00032.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00032.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00033.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00033.png old mode 100755 new mode 100644 index 1155c66997..60c9ca07c1 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00033.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00033.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00034.png old mode 100755 new mode 100644 index 6db7d709b8..c1c8de33df Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00034.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00034.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00035.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00035.png deleted file mode 100755 index 3935487014..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00035.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00036.png deleted file mode 100755 index 115ebdf8af..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00036.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00037.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00037.png deleted file mode 100755 index c98ebf4193..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00037.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00038.png deleted file mode 100755 index c264ceffb7..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00038.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00039.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00039.png deleted file mode 100755 index 669efb8d98..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00039.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00040.png deleted file mode 100755 index 2c6e016b9f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00040.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00041.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00041.png deleted file mode 100755 index e538dd53cb..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00041.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00042.png deleted file mode 100755 index bc36edd235..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00042.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00043.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00043.png deleted file mode 100755 index b29f386a92..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00043.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00044.png deleted file mode 100755 index d736ccb16a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00044.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00045.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00045.png deleted file mode 100755 index 218e22c9a6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00045.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00046.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00046.png deleted file mode 100755 index b200be7006..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00046.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00047.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00047.png deleted file mode 100755 index 0a470eea86..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00047.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00048.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00048.png deleted file mode 100755 index d0779a8a7e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00048.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00049.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00049.png deleted file mode 100755 index e50740e8f4..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00049.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00050.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00050.png deleted file mode 100755 index 53210cf36b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00050.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00051.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00051.png deleted file mode 100755 index 34134d06c2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00051.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00052.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00052.png deleted file mode 100755 index 7a5302f935..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00052.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00053.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00053.png deleted file mode 100755 index 8eb919b142..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00053.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00054.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00054.png deleted file mode 100755 index 14ab151b49..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00054.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00055.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00055.png deleted file mode 100755 index f11a308e8a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00055.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00056.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00056.png deleted file mode 100755 index c024ce35fd..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00056.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00057.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00057.png deleted file mode 100755 index a976742cf4..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00057.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00058.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00058.png deleted file mode 100755 index ff13384b26..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00058.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00059.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00059.png deleted file mode 100755 index 5143406284..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00059.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00060.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00060.png deleted file mode 100755 index 5bab1626c4..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00060.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00061.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00061.png deleted file mode 100755 index 4d0c7e8722..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00061.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00062.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00062.png deleted file mode 100755 index 166e930576..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00062.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00063.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00063.png deleted file mode 100755 index dd7d56e8a2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00063.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00064.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00064.png deleted file mode 100755 index 17b9be0d8a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00064.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00065.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00065.png deleted file mode 100755 index f49f9d380f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00065.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00066.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00066.png deleted file mode 100755 index 69aa04e719..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00066.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00067.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00067.png deleted file mode 100755 index 331b058002..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00067.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00068.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00068.png deleted file mode 100755 index 6a98bda7ba..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00068.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00069.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00069.png deleted file mode 100755 index 5f27ad1be8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00069.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00070.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00070.png deleted file mode 100755 index 79d0ac3e8f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00070.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00071.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00071.png deleted file mode 100755 index 313a84a454..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00071.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00072.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00072.png deleted file mode 100755 index cb1a5e4413..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00072.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00073.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00073.png deleted file mode 100755 index 8888c9e9b0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00073.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00074.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00074.png deleted file mode 100755 index 2372d3e02e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00074.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00075.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00075.png deleted file mode 100755 index 1e0a555772..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00075.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00076.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00076.png deleted file mode 100755 index e14570c663..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00076.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00077.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00077.png deleted file mode 100755 index d0e8ea44b9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00077.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00078.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00078.png deleted file mode 100755 index 76acdb2656..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00078.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00079.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00079.png deleted file mode 100755 index d6b7f2f763..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00079.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00080.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00080.png deleted file mode 100755 index 23e27dd5fc..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00080.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00081.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00081.png deleted file mode 100755 index ff98b43352..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00081.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00082.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00082.png deleted file mode 100755 index 5d4f9a02b0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00082.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00083.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00083.png deleted file mode 100755 index f055ccbe7f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00083.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00084.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00084.png deleted file mode 100755 index 5ab712a882..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00084.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00085.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00085.png deleted file mode 100755 index a22dc3cbf8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00085.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00086.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00086.png deleted file mode 100755 index 5c09770aaf..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00086.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00087.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00087.png deleted file mode 100755 index 87ac76f7e3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00087.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00088.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00088.png deleted file mode 100755 index 9a3f190563..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00088.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00089.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00089.png deleted file mode 100755 index 80f112da1d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00089.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00090.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00090.png deleted file mode 100755 index 9850e77781..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00090.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00091.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00091.png deleted file mode 100755 index 616b646b62..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00091.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00092.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00092.png deleted file mode 100755 index a43e39ea97..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00092.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00093.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00093.png deleted file mode 100755 index 7778157981..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00093.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00094.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00094.png deleted file mode 100755 index 8c99dbdf76..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00094.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00095.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00095.png deleted file mode 100755 index f14091c81c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00095.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00096.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00096.png deleted file mode 100755 index ed6966a4a8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00096.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00097.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00097.png deleted file mode 100755 index 96bb2b66dc..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00097.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00098.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00098.png deleted file mode 100755 index b8231a865d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00098.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00099.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00099.png deleted file mode 100755 index b9bb05078b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/image_00099.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_increase_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_increase_set.png new file mode 100644 index 0000000000..5ec15568b0 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_increase_set.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_set.png new file mode 100644 index 0000000000..de1f7f064f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_set.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_roma_passenger_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_roma_passenger_bg.png deleted file mode 100644 index 41378d1b41..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_roma_passenger_bg.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_roma_taxi_passenger_press_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_roma_taxi_passenger_press_bg.png deleted file mode 100644 index 59c45b7c18..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_roma_taxi_passenger_press_bg.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_increase_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_increase_set.png new file mode 100644 index 0000000000..7e62e77a05 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_increase_set.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_set.png new file mode 100644 index 0000000000..c0f586f35e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_set.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00000.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00000.png old mode 100755 new mode 100644 index 383fd3ce6a..5aae3fd86e Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00000.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00000.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00001.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00001.png old mode 100755 new mode 100644 index 9017b26f03..ea026b1519 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00001.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00001.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00002.png old mode 100755 new mode 100644 index 485d79cc9c..0c759d3144 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00002.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00002.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00003.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00003.png old mode 100755 new mode 100644 index 283b069fcf..3ec26bf793 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00003.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00003.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00004.png old mode 100755 new mode 100644 index 9690363efc..bbeeaab0e9 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00004.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00004.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00005.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00005.png old mode 100755 new mode 100644 index d066263bce..4a33f8d9b1 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00005.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00005.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00006.png old mode 100755 new mode 100644 index de9763c559..6f4cc5ba4f Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00006.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00006.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00007.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00007.png old mode 100755 new mode 100644 index bcab58b3a9..2a8b59e10d Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00007.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00007.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00008.png old mode 100755 new mode 100644 index 9c5f0994d3..0d41d05357 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00008.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00008.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00009.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00009.png old mode 100755 new mode 100644 index b543a650cd..dbea71933f Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00009.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00009.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00010.png old mode 100755 new mode 100644 index e51ae88287..640b30dc9f Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00010.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00010.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00011.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00011.png old mode 100755 new mode 100644 index 426caaa5d6..2ab41deea3 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00011.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00011.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00012.png old mode 100755 new mode 100644 index 64cbc675c6..ba65b3bb1a Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00012.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00012.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00013.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00013.png old mode 100755 new mode 100644 index 6f272fa759..4a90fbf8e8 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00013.png and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/light_00013.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/roma_taxi_p_bg_selector.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/roma_taxi_p_bg_selector.xml index 05c96dc351..f51169b6b9 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/roma_taxi_p_bg_selector.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/roma_taxi_p_bg_selector.xml @@ -1,8 +1,8 @@ - - - - - + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_consult_select.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_consult_select.xml deleted file mode 100644 index 6995d42e96..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_consult_select.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_consult_selected.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_consult_selected.xml deleted file mode 100644 index 7ec7d6aeab..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_consult_selected.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_entertainment_select.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_entertainment_select.xml deleted file mode 100644 index 1aea2aa656..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_entertainment_select.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_entertainment_selected.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_entertainment_selected.xml deleted file mode 100644 index d4e519b304..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_entertainment_selected.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_live_select.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_live_select.xml deleted file mode 100644 index 1c2ff76819..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_live_select.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_live_selected.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_live_selected.xml deleted file mode 100644 index 8ce0bb1be3..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_live_selected.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_overview_select.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_overview_select.xml deleted file mode 100644 index 8555fe032d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_overview_select.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_overview_selected.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_overview_selected.xml deleted file mode 100644 index 0f7ecd3028..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/shape_size_overview_selected.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.webp index dc6d9e6bcd..1448922144 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.webp and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0000.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.webp index 5bc925da38..d10da861a8 100644 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.webp and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/tail_ani_0090.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_function_voice_humb.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_function_voice_humb.png new file mode 100644 index 0000000000..347bb58d46 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_function_voice_humb.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml new file mode 100644 index 0000000000..1c98f8cad6 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_function_voice_right_process_humb.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_setting_selector.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_setting_selector.xml new file mode 100644 index 0000000000..8058cbece5 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_setting_selector.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_setting_view_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_setting_view_bg.png new file mode 100644 index 0000000000..3b9fadf64c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_setting_view_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_start_autopilot_bottom_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_start_autopilot_bottom_bg.xml new file mode 100644 index 0000000000..54909012c8 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_start_autopilot_bottom_bg.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xiaozhibelt_info.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xiaozhibelt_info.xml new file mode 100644 index 0000000000..a5287f9968 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xiaozhibelt_info.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xiaozhibelt_info_ball.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xiaozhibelt_info_ball.xml new file mode 100644 index 0000000000..f5013dd9f1 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xiaozhibelt_info_ball.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xioazhi_normal.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xioazhi_normal.xml new file mode 100644 index 0000000000..a19a723558 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_xioazhi_normal.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml new file mode 100644 index 0000000000..ce20af2572 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_power_size_seekbar_style.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml index c7f6f83c1c..30ed19fa3c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_video_seekbar_style.xml @@ -3,22 +3,22 @@ xmlns:android="http://schemas.android.com/apk/res/android"> - - + + - - + + - + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_000.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_000.png new file mode 100755 index 0000000000..8f41f3ef17 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_000.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_001.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_001.png new file mode 100755 index 0000000000..8974bdb433 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_001.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_002.png new file mode 100755 index 0000000000..c27cff4a08 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_002.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_003.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_003.png new file mode 100755 index 0000000000..480226c096 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_003.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_004.png new file mode 100755 index 0000000000..d241bc3600 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_004.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_005.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_005.png new file mode 100755 index 0000000000..043772caef Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_005.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_006.png new file mode 100755 index 0000000000..e6141a5912 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_006.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_007.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_007.png new file mode 100755 index 0000000000..08157b8d6a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_007.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_008.png new file mode 100755 index 0000000000..518a163ee1 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_008.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_009.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_009.png new file mode 100755 index 0000000000..0c00e4aec3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_009.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_010.png new file mode 100755 index 0000000000..e2a82962be Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_010.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_011.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_011.png new file mode 100755 index 0000000000..e4725814d1 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_011.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_012.png new file mode 100755 index 0000000000..dd4c443901 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_012.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_013.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_013.png new file mode 100755 index 0000000000..7bcd528ef6 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_013.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_014.png new file mode 100755 index 0000000000..edf6a2a82f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_014.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_015.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_015.png new file mode 100755 index 0000000000..6d19a79755 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_015.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_016.png new file mode 100755 index 0000000000..13ca6cd6d7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_016.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_017.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_017.png new file mode 100755 index 0000000000..11ec920c66 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_017.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_018.png new file mode 100755 index 0000000000..5e747ba4db Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_018.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_019.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_019.png new file mode 100755 index 0000000000..b1a7577d77 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_019.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_020.png new file mode 100755 index 0000000000..281c7e819c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_020.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_021.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_021.png new file mode 100755 index 0000000000..6c1da40819 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_021.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_022.png new file mode 100755 index 0000000000..af5c969a1c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_022.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_023.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_023.png new file mode 100755 index 0000000000..f0e0032234 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_023.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_024.png new file mode 100755 index 0000000000..6dcdd8b73d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_024.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_025.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_025.png new file mode 100755 index 0000000000..5a6f07be8c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_025.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_026.png new file mode 100755 index 0000000000..f19df657d2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_026.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_027.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_027.png new file mode 100755 index 0000000000..bedc1f5560 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_027.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_028.png new file mode 100755 index 0000000000..9cdfd7d0c6 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_028.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_029.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_029.png new file mode 100755 index 0000000000..dd15bcfc8b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_029.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_030.png new file mode 100755 index 0000000000..ec47b415ea Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_030.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_031.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_031.png new file mode 100755 index 0000000000..0b79143e97 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_031.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_032.png new file mode 100755 index 0000000000..50f98af14f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_032.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_033.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_033.png new file mode 100755 index 0000000000..a067948510 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_033.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_034.png new file mode 100755 index 0000000000..2a1654747f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_034.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_035.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_035.png new file mode 100755 index 0000000000..58e547f24d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_035.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_036.png new file mode 100755 index 0000000000..2a9683d1a7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_036.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_037.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_037.png new file mode 100755 index 0000000000..937add65e7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_037.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_038.png new file mode 100755 index 0000000000..e266a7f591 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_038.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_039.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_039.png new file mode 100755 index 0000000000..e5e902e036 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_039.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_040.png new file mode 100755 index 0000000000..3cb905752f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_040.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_041.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_041.png new file mode 100755 index 0000000000..143b9c8d90 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_041.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_042.png new file mode 100755 index 0000000000..a389ab571f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_042.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_043.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_043.png new file mode 100755 index 0000000000..1cb679d5b3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_043.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_044.png new file mode 100755 index 0000000000..8831f72e30 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_044.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_045.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_045.png new file mode 100755 index 0000000000..1dc2743f91 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_045.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_046.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_046.png new file mode 100755 index 0000000000..89a8a71f68 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_046.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_047.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_047.png new file mode 100755 index 0000000000..8162689ff4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_047.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_048.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_048.png new file mode 100755 index 0000000000..0942909715 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_048.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_049.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_049.png new file mode 100755 index 0000000000..5dc09ffd53 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_049.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_050.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_050.png new file mode 100755 index 0000000000..701eb4430a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_050.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_051.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_051.png new file mode 100755 index 0000000000..85589aa923 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_051.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_052.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_052.png new file mode 100755 index 0000000000..6fde977d5d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_052.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_053.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_053.png new file mode 100755 index 0000000000..af7b3c073b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_053.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_054.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_054.png new file mode 100755 index 0000000000..73420b4b16 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_054.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_055.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_055.png new file mode 100755 index 0000000000..337d51bd7a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_055.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_056.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_056.png new file mode 100755 index 0000000000..baa1f32c72 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_056.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_057.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_057.png new file mode 100755 index 0000000000..bf048e1eff Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_057.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_058.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_058.png new file mode 100755 index 0000000000..a2fa4696b3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_058.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_059.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_059.png new file mode 100755 index 0000000000..5886f3c427 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_love_059.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal002.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal002.webp new file mode 100644 index 0000000000..f884ab93d7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal002.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal004.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal004.webp new file mode 100644 index 0000000000..df14aa223b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal004.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal006.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal006.webp new file mode 100644 index 0000000000..77274eaa4d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal006.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal008.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal008.webp new file mode 100644 index 0000000000..4f5c85d539 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal008.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal010.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal010.webp new file mode 100644 index 0000000000..4adbad5fb8 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal010.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal012.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal012.webp new file mode 100644 index 0000000000..fc528eb53a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal012.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal014.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal014.webp new file mode 100644 index 0000000000..4fcb94ef98 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal014.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal016.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal016.webp new file mode 100644 index 0000000000..f5a93b0804 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal016.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal018.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal018.webp new file mode 100644 index 0000000000..02e0e93241 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal018.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal020.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal020.webp new file mode 100644 index 0000000000..98e72da076 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal020.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal022.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal022.webp new file mode 100644 index 0000000000..e2d81a7334 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal022.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal024.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal024.webp new file mode 100644 index 0000000000..7a1b164bf8 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal024.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal026.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal026.webp new file mode 100644 index 0000000000..5e6aaed2f8 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal026.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal028.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal028.webp new file mode 100644 index 0000000000..6eb257211d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal028.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal030.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal030.webp new file mode 100644 index 0000000000..a5edb81360 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal030.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal032.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal032.webp new file mode 100644 index 0000000000..08c77712cb Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal032.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal034.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal034.webp new file mode 100644 index 0000000000..014091014e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal034.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal036.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal036.webp new file mode 100644 index 0000000000..1cc0f71711 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal036.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal038.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal038.webp new file mode 100644 index 0000000000..049594af92 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal038.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal040.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal040.webp new file mode 100644 index 0000000000..b0a4fd1620 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal040.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal042.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal042.webp new file mode 100644 index 0000000000..65dc7c66a7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal042.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal044.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal044.webp new file mode 100644 index 0000000000..007f0c5bd2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal044.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal046.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal046.webp new file mode 100644 index 0000000000..f64218b62e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal046.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal048.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal048.webp new file mode 100644 index 0000000000..ce7aa5b09b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal048.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal050.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal050.webp new file mode 100644 index 0000000000..2483b5cc85 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal050.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal052.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal052.webp new file mode 100644 index 0000000000..2d6bbb3a28 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal052.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal054.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal054.webp new file mode 100644 index 0000000000..073c631800 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal054.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal056.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal056.webp new file mode 100644 index 0000000000..85ece9e86c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal056.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal058.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal058.webp new file mode 100644 index 0000000000..8ea05e04c9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal058.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal060.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal060.webp new file mode 100644 index 0000000000..7128d98d60 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal060.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal062.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal062.webp new file mode 100644 index 0000000000..05d022bc56 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal062.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal064.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal064.webp new file mode 100644 index 0000000000..090a4dc753 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal064.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal066.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal066.webp new file mode 100644 index 0000000000..ff190083fd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal066.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal068.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal068.webp new file mode 100644 index 0000000000..0071c33280 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal068.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal070.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal070.webp new file mode 100644 index 0000000000..b3fa5a1881 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal070.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal072.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal072.webp new file mode 100644 index 0000000000..d5896737f6 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal072.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal074.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal074.webp new file mode 100644 index 0000000000..7ff64b5711 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal074.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal076.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal076.webp new file mode 100644 index 0000000000..ec56210221 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal076.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal078.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal078.webp new file mode 100644 index 0000000000..e6ec711416 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal078.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal080.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal080.webp new file mode 100644 index 0000000000..e8fa9e5d36 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal080.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal082.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal082.webp new file mode 100644 index 0000000000..d8ef9b37a7 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal082.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal084.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal084.webp new file mode 100644 index 0000000000..da08363a67 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal084.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal086.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal086.webp new file mode 100644 index 0000000000..c496ae20cc Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal086.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal088.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal088.webp new file mode 100644 index 0000000000..27a41260df Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal088.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal090.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal090.webp new file mode 100644 index 0000000000..65f9302aed Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal090.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal092.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal092.webp new file mode 100644 index 0000000000..f7651dbf15 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal092.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal094.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal094.webp new file mode 100644 index 0000000000..dd5570c9a9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal094.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal096.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal096.webp new file mode 100644 index 0000000000..4680be2c1c Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal096.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal098.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal098.webp new file mode 100644 index 0000000000..76723aa3f3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal098.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal100.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal100.webp new file mode 100644 index 0000000000..49969ff350 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal100.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal102.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal102.webp new file mode 100644 index 0000000000..533855c47f Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal102.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal104.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal104.webp new file mode 100644 index 0000000000..ee31412bd6 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal104.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal106.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal106.webp new file mode 100644 index 0000000000..8efe589ede Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal106.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal108.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal108.webp new file mode 100644 index 0000000000..1f6ff9aee6 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal108.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal110.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal110.webp new file mode 100644 index 0000000000..3566c675d9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal110.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal112.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal112.webp new file mode 100644 index 0000000000..c9e23f1f69 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal112.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal114.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal114.webp new file mode 100644 index 0000000000..be60094f54 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal114.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal116.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal116.webp new file mode 100644 index 0000000000..e5dff07f9a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal116.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal118.webp b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal118.webp new file mode 100644 index 0000000000..aba89b659b Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_normal118.webp differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_safety_belt.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_safety_belt.png new file mode 100644 index 0000000000..1f44f3d499 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/xiaozhi_safety_belt.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/font/din.ttf b/OCH/mogo-och-taxi-passenger/src/main/res/font/din.ttf new file mode 100644 index 0000000000..db558e4dbc Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/font/din.ttf differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_light.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_light.xml new file mode 100644 index 0000000000..eaca7d4b4a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/list_video_item_light.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/m1_bottom_check.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/m1_bottom_check.xml new file mode 100644 index 0000000000..d2841dbbd4 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/m1_bottom_check.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml deleted file mode 100644 index 4e47d76e53..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml index 7fb2bc5d21..54b4bd2d17 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_end_panel.xml @@ -19,305 +19,88 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" android:src="@drawable/taxi_p_passenger_arrived_close" - android:layout_marginEnd="@dimen/dp_70" - android:layout_marginTop="@dimen/dp_140" + android:layout_marginEnd="@dimen/dp_50" + android:layout_marginTop="@dimen/dp_50" android:layout_width="@dimen/dp_120" android:layout_height="@dimen/dp_120"/> - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginStart="@dimen/dp_90" + android:layout_marginBottom="@dimen/dp_90" + android:layout_width="@dimen/dp_900" + android:layout_height="@dimen/dp_506"/> - + + - + android:layout_height="wrap_content"/> - - - + - - - + android:id="@+id/iv_xiaozhi_belt" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + android:layout_marginEnd="@dimen/dp_46" + android:layout_marginBottom="@dimen/dp_10" + android:layout_width="@dimen/dp_300" + android:layout_height="@dimen/dp_300"/> + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml deleted file mode 100644 index 30c569cd84..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_arrived_mogo_consult.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml index a5533567ba..eb7cbdbcd4 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_base_fragment.xml @@ -5,197 +5,153 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + - - - - - - + + + + + + app:roma_open="@drawable/taxi_p_roma_checked" /> - - - - - - - - - - -