diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/IMogoOCH.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/IMogoOCH.java deleted file mode 100644 index fb146e17c3..0000000000 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/IMogoOCH.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mogo.och.bus.passenger; - -import androidx.annotation.IdRes; -import androidx.fragment.app.FragmentActivity; - -import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; - -/** - * 网约车抽象接口 - * - * Created on 2022/3/29 - */ -interface IMogoOCH extends IMoGoFunctionProvider { - - /** - * 初始化网约车容器 - * - * @param activity - * @param containerId 容器ID - */ - void createCoverage(FragmentActivity activity, @IdRes int containerId); -} diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.kt index e7733e8b20..b61064656a 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.kt @@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentManager import com.alibaba.android.arouter.facade.annotation.Route +import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getMapUIController import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager.stepInDayMode import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d @@ -18,11 +19,10 @@ import com.mogo.och.bus.passenger.ui.MainFragment * Created on 2022/3/29 */ @Route(path = CharterPassengerConst.PATH) -class MogoOCHBusPassenger : IMogoOCH { +class MogoOCHBusPassenger : IMoGoFunctionProvider { private var mActivity: FragmentActivity? = null private var mContainerId = 0 private var mPassengerFragment: MainFragment? = null - override fun createCoverage(activity: FragmentActivity, containerId: Int) {} override fun createCoverage(activity: FragmentActivity?, containerId: Int?): Fragment? { mActivity = activity mContainerId = containerId!! @@ -42,15 +42,6 @@ class MogoOCHBusPassenger : IMogoOCH { } - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - private fun stepIntoVrMode() { - d(SceneConstant.M_TAXI_P + TAG, "进入vr模式") - getMapUIController()?.stepInVrMode(true) // 白天模式 - stepInDayMode() //白天模式 状态栏字体颜色变黑 - } - private fun showFragment() { val supportFragmentManager: FragmentManager? = mActivity?.supportFragmentManager diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/bean/event/DebugView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/bean/event/DebugView.kt deleted file mode 100644 index b2a2aa2c15..0000000000 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/bean/event/DebugView.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.mogo.och.bus.passenger.bean.event - -data class DebugView(val type: String) \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/callback/IClearViewCallback.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/callback/IClearViewCallback.kt new file mode 100644 index 0000000000..e53f0f4e2c --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/callback/IClearViewCallback.kt @@ -0,0 +1,5 @@ +package com.mogo.och.bus.passenger.callback + +interface IClearViewCallback { + fun goneAllView() +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt index 91c1194884..de418e60b7 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/model/CharterPassengerModel.kt @@ -19,7 +19,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.network.utils.GsonUtil -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 @@ -187,7 +186,7 @@ object CharterPassengerModel { // 3、车控页面、 // 4、打开选择线路页面 BizLoopManager.removeLoopFunction(TAGLOGIN) - CallerLogger.d(M_BUS_P + TAG, "结束登录状态轮询") + d(M_BUS_P + TAG, "结束登录状态轮询") // 启动订单轮 startOrderLoop() } else { @@ -195,7 +194,7 @@ object CharterPassengerModel { TAGLOGIN, LoopInfo(3, ::queryLoginStatus) ) - CallerLogger.d(M_BUS_P + TAG, "启动登录状态轮询") + d(M_BUS_P + TAG, "启动登录状态轮询") } } }) @@ -225,7 +224,7 @@ object CharterPassengerModel { } override fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) { - CallerLogger.d(M_BUS_P + TAG, "底盘给到站信息") + d(M_BUS_P + TAG, "底盘给到站信息") arriveDest() } } @@ -323,7 +322,7 @@ object CharterPassengerModel { //监听网络变化,避免启动机器时无网导致无法更新订单信息 private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent -> - CallerLogger.d(M_BUS_P + TAG, "onIntentReceived = %s", intentStr) + d(M_BUS_P + TAG, "onIntentReceived = %s", intentStr) if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) { if (NetworkUtils.isConnected(mContext)) { queryLoginStatus() @@ -341,7 +340,7 @@ object CharterPassengerModel { TAGORDER, LoopInfo(3, ::queryOrder) ) - CallerLogger.d(M_BUS_P + TAG, "启动订单轮询") + d(M_BUS_P + TAG, "启动订单轮询") } /** @@ -349,7 +348,7 @@ object CharterPassengerModel { */ private fun endOrderLoop() { BizLoopManager.removeLoopFunction(TAGORDER) - CallerLogger.d(M_BUS_P + TAG, "结束订单轮询") + d(M_BUS_P + TAG, "结束订单轮询") } /** @@ -359,7 +358,7 @@ object CharterPassengerModel { BusPassengerServiceManager.queryOrderInfo( mContext, object : OchCommonServiceCallback { override fun onSuccess(data: OrderInfoResponse?) { - CallerLogger.d(M_BUS_P + TAG, "订单信息:$data") + d(M_BUS_P + TAG, "订单信息:$data") if (data?.data == null) { if (orderInfo != null) { // 启动车辆服务状态 @@ -386,7 +385,7 @@ object CharterPassengerModel { //设置车模 if (this.orderInfo?.productType != orderData.productType) { this.carTypeChageListener?.setCarChangeListener(orderData.productType) - CallerLogger.d(M_BUS_P + TAG, "设置车模") + d(M_BUS_P + TAG, "设置车模") } if (this.orderInfo?.siteId != orderData.siteId) { val coordinateConverterWgsToGcj = @@ -440,11 +439,11 @@ object CharterPassengerModel { ) // 小于15m到站 if (calculateLineDistance < CharterPassengerConst.ARRIVE_AT_START_STATION_DISTANCE && calculateLineDistance > 0) { - CallerLogger.d(M_BUS_P + TAG, "小于15米到站1") + d(M_BUS_P + TAG, "小于15米到站1") arriveDest() } if (calculateLineDistance < CharterPassengerConst.ARRIVE_SOON_AT_START_STATION_DISTANCE && calculateLineDistance > 0) { - CallerLogger.d(M_BUS_P + TAG, "小于100米到站") + d(M_BUS_P + TAG, "小于100米到站") arriveDestSoon() } } @@ -490,7 +489,7 @@ object CharterPassengerModel { */ private fun startCarStatusLoop() { BizLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus)) - CallerLogger.d(M_BUS_P + TAG, "启动车态轮询") + d(M_BUS_P + TAG, "启动车态轮询") } /** @@ -498,7 +497,7 @@ object CharterPassengerModel { */ private fun endCarStatusLoop() { BizLoopManager.removeLoopFunction(TAGCARSTATUS) - CallerLogger.d(M_BUS_P + TAG, "结束车态轮询") + d(M_BUS_P + TAG, "结束车态轮询") } /** @@ -552,7 +551,7 @@ object CharterPassengerModel { TAGCALIBRATION, LoopInfo(120, ::queryBusinessTime, immediately = true) ) - CallerLogger.d(M_BUS_P + TAG, "启动时间校准轮询") + d(M_BUS_P + TAG, "启动时间校准轮询") } /** @@ -560,7 +559,7 @@ object CharterPassengerModel { */ private fun endCalibrationLoop() { BizLoopManager.removeLoopFunction(TAGCALIBRATION) - CallerLogger.d(M_BUS_P + TAG, "结束时间校准轮询") + d(M_BUS_P + TAG, "结束时间校准轮询") } /** @@ -597,7 +596,7 @@ object CharterPassengerModel { .getString(R.string.m1_end_order_5min), 2 ) VoiceManager.surplus5min(VoiceFocusManager.getVoiceCmdCallBack()) - CallerLogger.d(M_BUS_P + TAG, "倒计时5分钟${it.orderNo}") + d(M_BUS_P + TAG, "倒计时5分钟${it.orderNo}") SharedPrefs.getInstance(mContext) .putBoolean("${it.orderNo}$min5Speak", true) } @@ -615,7 +614,7 @@ object CharterPassengerModel { } else { invokeOrderLeftTimeListeners(millisUntilFinished) } - CallerLogger.d(M_BUS_P + TAG, "订单倒计时${millisUntilFinished}") + d(M_BUS_P + TAG, "订单倒计时${millisUntilFinished}") } } } @@ -636,8 +635,8 @@ object CharterPassengerModel { //设置全局轨迹信息 locusInfo = data.data - CallerLogger.d(M_BUS_P + TAG, "查询自动驾驶轨迹信息") - CallerLogger.d( + d(M_BUS_P + TAG, "查询自动驾驶轨迹信息") + d( M_BUS_P + TAG, GsonUtil.jsonFromObject( locusInfo ) @@ -657,7 +656,7 @@ object CharterPassengerModel { */ private fun startCalculateDistanceLoop() { BizLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance)) - CallerLogger.d(M_BUS_P + TAG, "开始路距计算") + d(M_BUS_P + TAG, "开始路距计算") } /** @@ -668,7 +667,7 @@ object CharterPassengerModel { */ private fun endCalculateDistanceLoop() { BizLoopManager.removeLoopFunction(TAGDISTANCE) - CallerLogger.d(M_BUS_P + TAG, "结束路距计算") + d(M_BUS_P + TAG, "结束路距计算") } /** @@ -678,17 +677,17 @@ object CharterPassengerModel { //mLocation gcj坐标 mLocationGCJ02?.let { orderInfo?.let { order -> - CallerLogger.d(M_BUS_P + "calculateDistance", "订单信息:$order") + d(M_BUS_P + "calculateDistance", "订单信息:$order") if (order.siteId == null || order.siteId == 0L || order.wgs84Lat == null || order.wgs84Lat == 0.0 || order.wgs84Lon == null || order.wgs84Lon == 0.0 ) { - CallerLogger.d(M_BUS_P + "calculateDistance", "站点信息未获得") + d(M_BUS_P + "calculateDistance", "站点信息未获得") return } newCheckedSite?.let { if (it.siteId != order.siteId) { - CallerLogger.d(M_BUS_P + "calculateDistance", "站点和已选不吻合") + d(M_BUS_P + "calculateDistance", "站点和已选不吻合") return } } @@ -710,11 +709,11 @@ object CharterPassengerModel { mogoLocation.longitude, mogoLocation.latitude ) - CallerLogger.d(M_BUS_P + "calculateDistance", "两点距离和站点的直线距离:${lastSumLength}") + d(M_BUS_P + "calculateDistance", "两点距离和站点的直线距离:${lastSumLength}") if (lastSumLength > 100) { if (mRoutePoints == null || mRoutePoints?.size == 0) { //ToastCharterUtils.showLong("缺少轨迹数据暂停计算") - CallerLogger.d( + d( M_BUS_P + "calculateDistance两点距离", "缺少轨迹数据" ) @@ -727,11 +726,11 @@ object CharterPassengerModel { it, mogoLocation ) - CallerLogger.d( + d( M_BUS_P + TAG, "使用轨迹轨迹:${mRoutePoints?.size}--第一个点${mRoutePoints!![0]}--最后一个点:${mRoutePoints!!.last()}" ) - CallerLogger.d(M_BUS_P + "calculateDistance", "轨迹计算的距离$templastSumLength") + d(M_BUS_P + "calculateDistance", "轨迹计算的距离$templastSumLength") if (templastSumLength > 100) { lastSumLength = templastSumLength } @@ -740,16 +739,16 @@ object CharterPassengerModel { val lastTime: Double = lastSumLength / CharterPassengerConst.Charter_AVERAGE_SPEED * 3.6 //秒 - CallerLogger.d( + d( M_BUS_P + "calculateDistance", "最终信息:lastSumLength: ${lastSumLength}lastTime : $lastTime thread = ${Thread.currentThread().name}" ) if (lastSumLength < CharterPassengerConst.ARRIVE_SOON_AT_START_STATION_DISTANCE && lastSumLength > 0) { - CallerLogger.d(M_BUS_P + TAG, "小于100米到站2") + d(M_BUS_P + TAG, "小于100米到站2") arriveDestSoon() } if (lastSumLength < CharterPassengerConst.ARRIVE_AT_START_STATION_DISTANCE && lastSumLength > 0) { - CallerLogger.d(M_BUS_P + TAG, "小于15米到站2") + d(M_BUS_P + TAG, "小于15米到站2") arriveDest() return } @@ -766,7 +765,7 @@ object CharterPassengerModel { private fun setOrderStatus(orderStatus: OrderStatusEnum) { if (this.orderStatus != orderStatus) { - CallerLogger.d(M_BUS_P + TAG, "${this.orderInfo?.orderNo}新的状态:$orderStatus") + d(M_BUS_P + TAG, "${this.orderInfo?.orderNo}新的状态:$orderStatus") this.orderStatus = orderStatus for (callback in orderStatusChangeListeners.values) { callback.onStatusChange(this.orderStatus) @@ -825,7 +824,7 @@ object CharterPassengerModel { } } for (mutableEntry in distanceMap) { - CallerLogger.d(M_BUS_P + TAG, "距离:${mutableEntry.key}-----第几个站点${mutableEntry.value}") + d(M_BUS_P + TAG, "距离:${mutableEntry.key}-----第几个站点${mutableEntry.value}") } var middle = -1 if (distanceMap.size >= 2) { @@ -905,7 +904,7 @@ object CharterPassengerModel { if (order != null && lineId != null && siteId != null) { val requestSuccessSign = "${siteId}$endKey" val requestIngSign = "${siteId}$endKeyRequestIng"//正在请求中 - CallerLogger.d( + d( M_BUS_P + BaseDPMsg.TAG, "requestSuccessSign${isSuccess(requestSuccessSign)}---requestIngSign${ isSuccess( @@ -983,7 +982,7 @@ object CharterPassengerModel { OchCommonConst.BUSINESS_STRING, GsonUtils.toJson(msg).toByteArray() ) - CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "到站发送数据${msg}") + d(M_BUS_P + BaseDPMsg.TAG, "到站发送数据${msg}") } RxUtils.disposeSubscribe(switchLine5minWait) @@ -1031,7 +1030,7 @@ object CharterPassengerModel { fun cleanbroadcastListInfo(checkSite: SiteInfoResponse.SiteInfo?) { RxUtils.disposeSubscribe(switchLine5minWait) switchLine5minWait = RxUtils.createSubscribe(5 * 60 * 1000) { - CallerLogger.d(M_BUS_P + BaseDPMsg.TAG, "5分钟倒计时可以选择线路了") + d(M_BUS_P + BaseDPMsg.TAG, "5分钟倒计时可以选择线路了") } newCheckedSite = checkSite cleanRoutePoints() @@ -1088,7 +1087,7 @@ object CharterPassengerModel { val parameters = initAutopilotControlParameters() if (null == parameters) { ToastCharterUtils.showShort("请选择站点") - CallerLogger.e( + e( SceneConstant.M_BUS + TAG, "行程日志-AutopilotControlParameters is empty." ) @@ -1097,7 +1096,7 @@ object CharterPassengerModel { ToastCharterUtils.showShort("启动自动驾驶中") cleanRoutePoints() startAutoPilot(parameters) - CallerLogger.d( + d( SceneConstant.M_BUS + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName + @@ -1110,7 +1109,7 @@ object CharterPassengerModel { private fun initAutopilotControlParameters(): AutopilotControlParameters? { if (!checkCurrentOCHOrder()) { - CallerLogger.e(M_BUS_P + TAG, "no order or order is empty.") + e(M_BUS_P + TAG, "no order or order is empty.") return null } mLocationGCJ02?.let { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt index 6c6f786838..945a62fe48 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionOrderPresenter.kt @@ -22,7 +22,7 @@ import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener import com.mogo.och.bus.passenger.model.OrderStatusEnum 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.bus.passenger.ui.selectline.M1OrderLineFragment import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg import com.mogo.och.common.module.bean.dpmsg.ChangeDestMsg import com.mogo.och.common.module.bean.dpmsg.DPMsgType diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt index 34f47d9982..02c063dd99 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionSoftPresenter.kt @@ -5,7 +5,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager 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.bus.passenger.ui.dialogfragment.fragment.M1SoftFragment +import com.mogo.och.bus.passenger.ui.softcontrol.M1SoftFragment import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt index cdc59f1886..48a1e275b9 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerFunctionVideoPresenter.kt @@ -1,6 +1,6 @@ package com.mogo.och.bus.passenger.presenter -import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1VideoFragment +import com.mogo.och.bus.passenger.ui.video.M1VideoFragment class BusPassengerFunctionVideoPresenter(view: M1VideoFragment?) : BusBasePassengerFunctionDevicePresenter(view) \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt index a06052e277..ac4bf8becc 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BusPassengerPresenter.kt @@ -7,7 +7,6 @@ import android.view.View import androidx.lifecycle.LifecycleOwner import com.amap.api.maps.model.LatLng import com.mogo.commons.voice.AIAssist -import com.mogo.eagle.core.data.map.MogoLocation 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 @@ -23,8 +22,6 @@ import com.mogo.och.bus.passenger.bean.response.LineInfoResponse import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse import com.mogo.och.bus.passenger.bean.response.TrajectoriesResponse -import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback -import com.mogo.och.bus.passenger.callback.IDistanceCallback import com.mogo.och.bus.passenger.callback.IOrderChangeCallback import com.mogo.och.bus.passenger.model.CharterPassengerModel import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener @@ -32,23 +29,20 @@ import com.mogo.och.bus.passenger.model.OrderStatusEnum import com.mogo.och.bus.passenger.receive.DriverMessage import com.mogo.och.bus.passenger.ui.MainFragment import com.mogo.och.bus.passenger.utils.ToastCharterUtils -import com.mogo.och.bus.passenger.view.MakerWithSiteName -import com.mogo.och.bus.passenger.view.MakerWithSiteNamewithCheck +import com.mogo.och.bus.passenger.ui.overmapview.MakerWithSiteName +import com.mogo.och.bus.passenger.ui.overmapview.MakerWithSiteNamewithCheck import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.manager.StopSideStatusManager import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil -import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.NumberFormatUtil import com.mogo.och.common.module.voice.VoiceNotice import me.jessyan.autosize.utils.AutoSizeUtils import java.util.concurrent.ConcurrentHashMap -import kotlin.math.ceil class BusPassengerPresenter(view: MainFragment?) : BusBasePassengerFunctionDevicePresenter(view), - IDistanceCallback, IOrderChangeCallback, IOrderStatusChangeListener, - StopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback, IBusPassengerControllerStatusCallback { + IOrderChangeCallback, IOrderStatusChangeListener, + StopSideStatusManager.OCHPlanningActionsCallback, LightAirconditionDoorCallback { private val lindIdAndView = ConcurrentHashMap() @@ -57,12 +51,11 @@ class BusPassengerPresenter(view: MainFragment?) : const val KEY4SHOWNOVICEGUIDANCE = "showNoviceGuidanceOrderNor" } + override fun onCreate(owner: LifecycleOwner) { super.onCreate(owner) CharterPassengerModel.init() // 定位监听 - CharterPassengerModel.setStationDistanceListener(TAG, this) - CharterPassengerModel.setControllerStatusCallback(TAG,this) CharterPassengerModel.setCarTypeChangeListener(this) CharterPassengerModel.setStatusChangeListener(TAG, this) CallerTelematicListenerManager.addListener(TAG, DriverMessage) @@ -73,71 +66,25 @@ class BusPassengerPresenter(view: MainFragment?) : override fun onDestroy(owner: LifecycleOwner) { super.onDestroy(owner) - CharterPassengerModel.setStationDistanceListener(TAG, null) CharterPassengerModel.setCarTypeChangeListener(null) CallerTelematicListenerManager.removeListener(TAG) StopSideStatusManager.removeListener(TAG) } - override fun onCarLocationChanged(location: MogoLocation?) { - location?.let { - setSpeed(it.gnssSpeed) - } - } - - private fun setSpeed(speed: Float) { - UiThreadHandler.post { - val speedKM = (Math.abs(speed) * 3.6f).toInt() - mView?.setSpeed(speedKM.toString()) - } - } - - private fun setDistanceAndTime( - distance: String, - distanceUnit: String, - leftTime: String, - arriveTime: String - ) { - UiThreadHandler.post { - mView?.setDistanceAndTime(distance, distanceUnit, leftTime, arriveTime) - } - } - - /** - * 计算剩余距离和剩余时间 - */ - override fun setDistancecAndTime(meters: Long, timeInSecond: Long) { - if (meters < 0 && timeInSecond < 0) { - setDistanceAndTime("--", context.getString(R.string.m1_distance_unit_km), "--", "--") - return - } - var dis: String? = "0" - var disUnit = "KM" - if (meters > 0) { - if (meters / 1000 < 1) { - disUnit = context.getString(R.string.m1_distance_unit_m) - dis = Math.round(meters.toFloat()).toString() - } else { - disUnit = context.getString(R.string.m1_distance_unit_km) - dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) - } - } - val time = ceil(timeInSecond / 60f).toInt() - val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt()) - setDistanceAndTime(dis.toString(), disUnit, time.toString(), arriveTime) - } - override fun setCarChangeListener(productType: Int?) { when (productType) { OrderInfoResponse.M1_LOVE -> { mView?.setCarModle(R.raw.aiqinghao) } + OrderInfoResponse.M1_FAMILY -> { mView?.setCarModle(R.raw.jiatinghao) } + OrderInfoResponse.M1_FRIENDLY -> { mView?.setCarModle(R.raw.pengyouhao) } + else -> { mView?.setCarModle(R.raw.m1) } @@ -157,33 +104,36 @@ class BusPassengerPresenter(view: MainFragment?) : clearShowNoviceGuidanceSharedPrefs() } } + OrderStatusEnum.OrderNoLine -> { CallerOrderListenerManager.invokeOrderRemoval(); showNoviceGuidance() } + OrderStatusEnum.OrdersWithLine -> {} OrderStatusEnum.NoOrderUse -> { when (CallerAutoPilotStatusListenerManager.getState()) { IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可自动驾驶 ToastCharterUtils.showShort("设备未就绪请稍等,请安全员主动停止车辆") } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {// ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆") } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { // 靠边停车 订单结束 靠边停车 CallerAutoPilotControlManager.sendPlanningCmd(1) } + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> { ToastCharterUtils.showShort("因车辆正在平行驾驶中无法靠边停车,请安全员主动停止车辆") } + else -> {} } UiThreadHandler.post { - UiThreadHandler.post { - mView?.showOpenAndCloseDoor() - setDistancecAndTime(-1, -1) - } + mView?.showOpenAndCloseDoor() } } } @@ -196,21 +146,21 @@ class BusPassengerPresenter(view: MainFragment?) : private fun showNoviceGuidance() { CallerLogger.d(M_BUS_P + TAG, "showNoviceGuidance") val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo() - currentOrderInfo?.orderNo?.let {order-> + currentOrderInfo?.orderNo?.let { order -> val stringSet = SharedPrefs.getInstance(context).getStringSet(KEY4SHOWNOVICEGUIDANCE) - if(stringSet==null){ + if (stringSet == null) { - }else{ + } else { if (stringSet.contains(order)) { return - }else{ + } else { } } UiThreadHandler.post({ mView?.showNoviceGuidanceFragment() - },UiThreadHandler.MODE.QUEUE) + }, UiThreadHandler.MODE.QUEUE) } } @@ -236,15 +186,18 @@ class BusPassengerPresenter(view: MainFragment?) : StopSideStatusManager.Status.NOSTART -> { ToastCharterUtils.showShort(errorInfo) } + StopSideStatusManager.Status.START -> { VoiceNotice.showNotice( context.getString(R.string.m1_stop_site_zh), AIAssist.LEVEL0 ) } + StopSideStatusManager.Status.DOING -> { // 正在靠边停车 } + StopSideStatusManager.Status.EndingSuccess -> { ToastCharterUtils.showShort("靠边停车成功") VoiceNotice.showNotice( @@ -252,6 +205,7 @@ class BusPassengerPresenter(view: MainFragment?) : AIAssist.LEVEL0 ) } + StopSideStatusManager.Status.EndingFaile -> { ToastCharterUtils.showShort("车辆系统繁忙,请稍后再试") } @@ -273,65 +227,90 @@ class BusPassengerPresenter(view: MainFragment?) : lineInfo: LineInfoResponse.LineInfo, sites: List ) { - CharterPassengerModel.getLineTrajectory(lineInfo.lineId!!,object : OchCommonServiceCallback { - override fun onSuccess(data: TrajectoriesResponse?) { - if (null != data && 0 == data.code) { - data.data?.let { - CallerLogger.d(M_BUS_P + TAG, "getLineTrajectory轨迹点:${data.data.size}") - val trajectoryList = mutableListOf() - it.forEach {latLngMain -> - trajectoryList.add(latLngMain.exchangeData()) + CharterPassengerModel.getLineTrajectory(lineInfo.lineId!!, + object : OchCommonServiceCallback { + override fun onSuccess(data: TrajectoriesResponse?) { + if (null != data && 0 == data.code) { + data.data?.let { + CallerLogger.d( + M_BUS_P + TAG, + "getLineTrajectory轨迹点:${data.data.size}" + ) + val trajectoryList = mutableListOf() + it.forEach { latLngMain -> + trajectoryList.add(latLngMain.exchangeData()) + } + drawStationInfo(sites) + mView?.drawOverMapViewTrajectory(trajectoryList) } - drawStationInfo(sites) - mView?.drawOverMapViewTrajectory(trajectoryList) } } - } - override fun onFail(code: Int, msg: String) { - ToastCharterUtils.showShort("$code:$msg") - } - }) + override fun onFail(code: Int, msg: String) { + ToastCharterUtils.showShort("$code:$msg") + } + }) } - fun drawStationInfo(sites: List){ + fun drawStationInfo(sites: List) { val stationsList: MutableList = mutableListOf() val stationsNameList: MutableList = mutableListOf() - val stationIcon = BitmapFactory.decodeResource(context.resources, R.drawable.map_staton_icon) + val stationIcon = + BitmapFactory.decodeResource(context.resources, R.drawable.map_staton_icon) sites.forEach { - stationsList.add(SiteMarkerBean(LatLng(it.GcjLat!!,it.GcjLon!!),stationIcon,0.5f,1f)) - val bitmap = getBitmap(it.siteId!!,it.siteName ?: "", it.isCheck) - stationsNameList.add(SiteMarkerBean(LatLng(it.GcjLat,it.GcjLon),bitmap,0.0f,0.2f)) + stationsList.add( + SiteMarkerBean( + LatLng(it.GcjLat!!, it.GcjLon!!), + stationIcon, + 0.5f, + 1f + ) + ) + val bitmap = getBitmap(it.siteId!!, it.siteName ?: "", it.isCheck) + stationsNameList.add(SiteMarkerBean(LatLng(it.GcjLat, it.GcjLon), bitmap, 0.0f, 0.2f)) } - mView?.drawOverMapViewStation(stationsList,stationsNameList) + mView?.drawOverMapViewStation(stationsList, stationsNameList) } - private fun getBitmap(siteId:Long,siteName: String,isCheck:Boolean): Bitmap { + private fun getBitmap(siteId: Long, siteName: String, isCheck: Boolean): Bitmap { var siteView = lindIdAndView[siteId] - if(siteView==null){ + if (siteView == null) { val marker = MakerWithSiteName(context) - marker.setTextAndCheck(siteName,isCheck) + marker.setTextAndCheck(siteName, isCheck) marker.measure( - View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 145f), View.MeasureSpec.UNSPECIFIED), - View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 34f), View.MeasureSpec.EXACTLY) + View.MeasureSpec.makeMeasureSpec( + AutoSizeUtils.dp2px(context, 145f), + View.MeasureSpec.UNSPECIFIED + ), + View.MeasureSpec.makeMeasureSpec( + AutoSizeUtils.dp2px(context, 34f), + View.MeasureSpec.EXACTLY + ) ) marker.layout(0, 0, marker.measuredWidth, marker.measuredHeight) val bitmap = Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888) marker.draw(Canvas(bitmap)) - siteView = MakerWithSiteNamewithCheck(isCheck,marker,bitmap) + siteView = MakerWithSiteNamewithCheck(isCheck, marker, bitmap) lindIdAndView[siteId] = siteView - }else{ + } else { CallerLogger.d(M_BUS_P + TAG, "缓存View:$siteName---${siteView.isCheck}-----$isCheck") if (siteView.isCheck != isCheck) { val marker = siteView.makerWithSiteName - marker.setTextAndCheck(siteName,isCheck) + marker.setTextAndCheck(siteName, isCheck) marker.measure( - View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 145f), View.MeasureSpec.UNSPECIFIED), - View.MeasureSpec.makeMeasureSpec(AutoSizeUtils.dp2px(context, 34f), View.MeasureSpec.UNSPECIFIED) + View.MeasureSpec.makeMeasureSpec( + AutoSizeUtils.dp2px(context, 145f), + View.MeasureSpec.UNSPECIFIED + ), + View.MeasureSpec.makeMeasureSpec( + AutoSizeUtils.dp2px(context, 34f), + View.MeasureSpec.UNSPECIFIED + ) ) marker.layout(0, 0, marker.measuredWidth, marker.measuredHeight) - val bitmap = Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888) + val bitmap = + Bitmap.createBitmap(marker.width, marker.height, Bitmap.Config.ARGB_8888) marker.draw(Canvas(bitmap)) siteView.isCheck = isCheck siteView.bitmapView = bitmap @@ -351,7 +330,10 @@ class BusPassengerPresenter(view: MainFragment?) : it.wgs84Lat!! ) - val latLng = LatLng(coordinateConverterWgsToGcj.latitude, coordinateConverterWgsToGcj.longitude) + val latLng = LatLng( + coordinateConverterWgsToGcj.latitude, + coordinateConverterWgsToGcj.longitude + ) mView?.drawEndStation(latLng) } } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/OrderInfoPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/OrderInfoPresenter.kt index 3b47ae8b55..b17d1dd43d 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/OrderInfoPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/presenter/OrderInfoPresenter.kt @@ -9,7 +9,7 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.bus.passenger.callback.ITimeCallback import com.mogo.och.bus.passenger.model.CharterPassengerModel -import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.OrderInfoFragment +import com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoFragment import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg import com.mogo.och.common.module.bean.dpmsg.EndOrderMsg import com.mogo.och.common.module.biz.constant.OchCommonConst diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/provider/StatusViewManager.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/provider/StatusViewManager.java index 3355370d12..34a11778aa 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/provider/StatusViewManager.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/provider/StatusViewManager.java @@ -3,7 +3,7 @@ package com.mogo.och.bus.passenger.provider; import android.content.Context; import android.view.View; -import com.mogo.och.bus.passenger.view.statusbar.StatusBarView; +import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView; import androidx.annotation.NonNull; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt index b4f975f9f9..bf0c577ea2 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/MainFragment.kt @@ -11,25 +11,21 @@ import com.mogo.commons.mvp.MvpFragment import com.mogo.eagle.core.data.config.HdMapBuildConfig 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 import com.mogo.eagle.core.function.view.SiteMarkerBean 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.bus.passenger.utils.ToastCharterUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.uicontroller.VisualAngleMode import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.bean.event.DebugView 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.callback.IClearViewCallback import com.mogo.och.bus.passenger.presenter.BusPassengerPresenter +import com.mogo.och.bus.passenger.ui.bottom.BottomBar +import com.mogo.och.bus.passenger.ui.bottom.BottomClickView 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 -import com.mogo.och.bus.passenger.view.statusbar.StatusBarView -import com.mogo.och.common.module.biz.constant.LoginStatusManager import kotlinx.android.synthetic.main.m1_main_fragment.* import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe @@ -44,7 +40,6 @@ class MainFragment : MvpFragment() { private var bpFunctionGroupDialogFragment: WeakReference? = null - private var debugViewWatchDogFragment: WeakReference? = null private var m1CarUserNoOrderFragment: WeakReference? = null private var noviceGuidanceFragment: WeakReference? = null @@ -55,6 +50,12 @@ class MainFragment : BitmapFactory.decodeResource(AbsMogoApplication.getApp().resources, R.drawable.charter_p_trajectory_line) + private val goneView = object : IClearViewCallback{ + override fun goneAllView() { + bb_boorombar.setCheckIndex(BottomBar.SelectView.NONE) + } + } + override fun getLayoutId(): Int { return R.layout.m1_main_fragment } @@ -89,23 +90,28 @@ class MainFragment : }) - bb_boorombar.setSettingClickListener{ - openSettingPage(M1ContainFragment.SETTINGSOFTTAB) - } - bb_boorombar.setOrderInfoClickListener{ - if (LoginStatusManager.isLogin()) { - if(mPresenter?.haveOrder()==true){ - openSettingPage(M1ContainFragment.ORDERINFO) - }else{ - ToastCharterUtils.showShort("请确认订单") + bb_boorombar.setCheckChangeListener(object :BottomBar.ApplyClickLintener{ + override fun onApplyClick(selectItem: BottomBar.SelectView) { + when (selectItem) { + BottomBar.SelectView.ORDERINFO -> showBizView(orderinfo = true) + BottomBar.SelectView.SETTING -> showBizView(softControl = true) + BottomBar.SelectView.LINE -> showBizView(selectLine = true) + //BottomBar.SelectView.VIDEO -> TODO() + else ->{ + showBizView() + } } - }else{ - ToastCharterUtils.showShort(AbsMogoApplication.getApp().getString(R.string.m1_please_login_driver)) } - } - bb_boorombar.setLineClickListener{ - openSettingPage(M1ContainFragment.SELECTLINE) - } + }) + bb_boorombar.setApplyClickListener(object : BottomClickView.ApplyClickLintener{ + override fun onApplyClick() { + bb_boorombar.setCheckIndex(BottomBar.SelectView.NONE) + } + }) + biz_orderinfo.goneViewListener = goneView + biz_softcontrol.goneViewListener = goneView + biz_selectline.goneViewListener = goneView + aciv_enter_video.setOnClickListener{ openSettingPage(M1ContainFragment.VIDEOTAB) } @@ -119,34 +125,27 @@ class MainFragment : controller.changeZoom2(0.8f) } } + } - debug_arrive_dest.setOnClickListener { - CharterPassengerModel.arriveDest() - } - debug_show_noviceGuidance.setOnClickListener { - showNoviceGuidanceFragment() - } - debug_change_modle.setOnClickListener { - ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆") - when (HdMapBuildConfig.currentCarVrIconRes) { - R.raw.aiqinghao -> { - mPresenter?.setCarChangeListener(OrderInfoResponse.M1_FAMILY) - } - R.raw.jiatinghao -> { - mPresenter?.setCarChangeListener(OrderInfoResponse.M1_FRIENDLY) - } - R.raw.pengyouhao -> { - mPresenter?.setCarChangeListener(0) - } - else -> { - mPresenter?.setCarChangeListener(OrderInfoResponse.M1_LOVE) - } - } + fun setCarMode(type: Int){ + mPresenter?.setCarChangeListener(type) + } + private fun showBizView(orderinfo:Boolean=false,softControl:Boolean=false,selectLine:Boolean=false){ + if(orderinfo){ + biz_orderinfo.visibility = View.VISIBLE + }else{ + biz_orderinfo.visibility = View.GONE } - - debug_show_endview.setOnClickListener { - showOpenAndCloseDoor() + if(softControl){ + biz_softcontrol.visibility = View.VISIBLE + }else{ + biz_softcontrol.visibility = View.GONE + } + if(selectLine){ + biz_selectline.visibility = View.VISIBLE + }else{ + biz_selectline.visibility = View.GONE } } @@ -158,31 +157,6 @@ class MainFragment : M1ContainFragment.openSettingPage(childFragmentManager,parentFragmentManager,bpFunctionGroup,tab) } - private fun showDebugView() { - if (debugViewWatchDogFragment?.get() == null) { - debugViewWatchDogFragment = WeakReference(DebugViewWatchDogFragment.newInstance()) - } - val debugViewFragment = debugViewWatchDogFragment?.get() - DebugViewWatchDogFragment.showDebugView(childFragmentManager,parentFragmentManager,debugViewFragment) - } - - - fun setSpeed(speed: String) { - tv_speed.text = speed - } - - fun setDistanceAndTime( - distance: String, - distanceUnit: String, - leftTime:String, - arriveTime:String - ) { - tv_distance.text = distance - tv_distance_unit.text = distanceUnit - tv_distance_surplus_time.text = leftTime - tv_distance_arrive_time.text = arriveTime - } - fun setCarModle(rawInfo: Int){ getMapUIController()?.changeCurrentIcon(rawInfo) HdMapBuildConfig.currentCarVrIconRes = rawInfo @@ -283,28 +257,6 @@ class MainFragment : } } - @Subscribe(threadMode = ThreadMode.MAIN) - fun changeDebugView(debugView: DebugView) { - when (debugView.type) { - StatusBarView.bizz -> { - if(group_debug.visibility==View.GONE|| - group_debug.visibility==View.INVISIBLE){ - group_debug.visibility = View.VISIBLE - }else{ - group_debug.visibility = View.GONE - } - } - else -> { - if (ToggleDebugView.toggleDebugView.isShowIng()) { - ToggleDebugView.toggleDebugView.dismiss() - }else { - showDebugView() - } - } - } - - } - fun drawOverMapViewStation(stationsList: MutableList,siteMarkers: List?){ omvOverMap?.clearSiteMarkers() omvOverMap?.clearSiteNameViews() @@ -318,6 +270,7 @@ class MainFragment : } companion object { - public const val TAG = "BusPassengerRouteFragment" + const val TAG = "BusPassengerRouteFragment" } + } \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomBar.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomBar.kt similarity index 62% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomBar.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomBar.kt index 95937be4ea..bb0ea7fb70 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomBar.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomBar.kt @@ -1,9 +1,10 @@ -package com.mogo.och.bus.passenger.ui.view.bottom +package com.mogo.och.bus.passenger.ui.bottom import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.och.bus.passenger.R import kotlinx.android.synthetic.main.m1_bottom_bar.view.* @@ -18,33 +19,40 @@ class BottomBar @JvmOverloads constructor( setBackgroundResource(R.drawable.charter_p_bottom_bar_bg) } - private var checkIndex = SelectView.VIDEO + private var checkIndex = SelectView.NONE + + private var overMapViewApply:ApplyClickLintener?=null override fun onAttachedToWindow() { super.onAttachedToWindow() + cl_order_time.onClick { + setCheckIndex(SelectView.ORDERINFO) + } + actv_setting.onClick { + setCheckIndex(SelectView.SETTING) + } + actv_line.onClick { + setCheckIndex(SelectView.LINE) + } } - fun setOrderInfoClickListener(click:OnClickListener){ - cl_order_time.setOnClickListener(click) - } - fun setSettingClickListener(click:OnClickListener){ - actv_setting.setOnClickListener(click) - } - fun setLineClickListener(click:OnClickListener){ - actv_line.setOnClickListener(click) + fun setCheckChangeListener(overMapViewApply:ApplyClickLintener){ + this.overMapViewApply = overMapViewApply } - fun setApplyClickListener(click:BottomClickView.ApplyClickLintener){ + fun setApplyClickListener(click: BottomClickView.ApplyClickLintener){ aciv_center_image.applyClickListener=click actv_stop_site.applyClickListener=click actv_close_door.applyClickListener=click actv_open_door.applyClickListener=click } - fun setCheckIndex(index:SelectView){ + fun setCheckIndex(index: SelectView){ if(checkIndex==index){ - return + checkIndex = SelectView.NONE + }else{ + checkIndex = index } - checkIndex = index + overMapViewApply?.onApplyClick(checkIndex) if(checkIndex == SelectView.ORDERINFO){ cl_order_time_press.visibility = VISIBLE cl_order_time.setCheck(true) @@ -66,7 +74,11 @@ class BottomBar @JvmOverloads constructor( } enum class SelectView{ - ORDERINFO,SETTING,LINE,VIDEO + NONE,ORDERINFO,SETTING,LINE,VIDEO + } + + interface ApplyClickLintener{ + fun onApplyClick(selectItem:SelectView) } } \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomCheckView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomCheckView.kt similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomCheckView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomCheckView.kt index a211f57c7e..f3cedfde3e 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomCheckView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomCheckView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.view.bottom +package com.mogo.och.bus.passenger.ui.bottom import android.content.Context import android.util.AttributeSet diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomClickView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomClickView.kt similarity index 97% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomClickView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomClickView.kt index 46d541ca12..4109b128a9 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomClickView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomClickView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.view.bottom +package com.mogo.och.bus.passenger.ui.bottom import android.annotation.SuppressLint import android.content.Context @@ -28,7 +28,7 @@ open class BottomClickView @JvmOverloads constructor( private var normalDrawable: Int = -1 private var backageView: View? = null - var applyClickListener:ApplyClickLintener?=null + var applyClickListener: ApplyClickLintener?=null init { LayoutInflater.from(context).inflate(R.layout.m1_bottom_stop_site, this, true) diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomOrderInfoView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomOrderInfoView.kt similarity index 97% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomOrderInfoView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomOrderInfoView.kt index d444f3c354..b1e40752c7 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/BottomOrderInfoView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/BottomOrderInfoView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.view.bottom +package com.mogo.och.bus.passenger.ui.bottom import android.content.Context import android.util.AttributeSet @@ -16,7 +16,6 @@ import com.mogo.och.bus.passenger.model.OrderStatusEnum import com.mogo.och.common.module.utils.DateTimeUtil import kotlinx.android.synthetic.main.m1_bottom_orderinfo.view.* import java.util.UUID -import kotlin.random.Random open class BottomOrderInfoView @JvmOverloads constructor( context: Context, diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/CloseDoorView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/CloseDoorView.kt similarity index 87% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/CloseDoorView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/CloseDoorView.kt index 437beb5442..dd4533437a 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/CloseDoorView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/CloseDoorView.kt @@ -1,10 +1,10 @@ -package com.mogo.och.bus.passenger.ui.view.bottom.impl +package com.mogo.och.bus.passenger.ui.bottom.impl import android.content.Context import android.util.AttributeSet import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView +import com.mogo.och.bus.passenger.ui.bottom.BottomClickView import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager import com.mogo.och.common.module.utils.SoundPoolHelper diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/GoViewWithArrive.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/GoViewWithArrive.kt similarity index 97% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/GoViewWithArrive.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/GoViewWithArrive.kt index bd02492dd7..6176fd01f3 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/GoViewWithArrive.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/GoViewWithArrive.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.view.bottom.impl +package com.mogo.och.bus.passenger.ui.bottom.impl import android.annotation.SuppressLint import android.content.Context @@ -6,7 +6,6 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.MotionEvent import android.view.View -import androidx.appcompat.widget.AppCompatTextView import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener @@ -20,7 +19,7 @@ import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.callback.ICharterPassengerAutoStatusChangeCallback import com.mogo.och.bus.passenger.model.CharterPassengerModel -import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView +import com.mogo.och.bus.passenger.ui.bottom.BottomClickView import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.utils.SoundPoolHelper diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/OpenDoorView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/OpenDoorView.kt similarity index 82% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/OpenDoorView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/OpenDoorView.kt index f7e374ac61..1a220ec336 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/OpenDoorView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/OpenDoorView.kt @@ -1,11 +1,10 @@ -package com.mogo.och.bus.passenger.ui.view.bottom.impl +package com.mogo.och.bus.passenger.ui.bottom.impl import android.content.Context import android.util.AttributeSet -import androidx.appcompat.widget.AppCompatTextView import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView +import com.mogo.och.bus.passenger.ui.bottom.BottomClickView import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorManager import com.mogo.och.common.module.utils.SoundPoolHelper diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/StopSiteView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/StopSiteView.kt similarity index 94% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/StopSiteView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/StopSiteView.kt index 8266b48292..1f7ca44fcb 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/bottom/impl/StopSiteView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/bottom/impl/StopSiteView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.view.bottom.impl +package com.mogo.och.bus.passenger.ui.bottom.impl import android.content.Context import android.util.AttributeSet @@ -8,7 +8,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.ui.view.bottom.BottomClickView +import com.mogo.och.bus.passenger.ui.bottom.BottomClickView import com.mogo.och.common.module.utils.SoundPoolHelper class StopSiteView @JvmOverloads constructor( diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/debugview/DebugEvent.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/debugview/DebugEvent.kt new file mode 100644 index 0000000000..4a48f3dc2e --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/debugview/DebugEvent.kt @@ -0,0 +1,3 @@ +package com.mogo.och.bus.passenger.ui.debugview + +data class DebugEvent(val type: String) \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/debugview/DebugView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/debugview/DebugView.kt new file mode 100644 index 0000000000..003d300a4c --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/debugview/DebugView.kt @@ -0,0 +1,131 @@ +package com.mogo.och.bus.passenger.ui.debugview + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.fragment.app.FragmentActivity +import com.mogo.eagle.core.data.config.HdMapBuildConfig +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.hmi.ui.setting.ToggleDebugView +import com.mogo.eagle.core.utilcode.util.ActivityUtils +import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.ui.debugview.DebugView +import com.mogo.och.bus.passenger.bean.response.OrderInfoResponse +import com.mogo.och.bus.passenger.model.CharterPassengerModel +import com.mogo.och.bus.passenger.ui.MainFragment +import com.mogo.och.bus.passenger.ui.statusbar.StatusBarView +import com.mogo.och.bus.passenger.utils.ToastCharterUtils +import com.mogo.och.common.module.manager.debug.DebugViewWatchDogFragment +import kotlinx.android.synthetic.main.m1_p_debug.view.debug_arrive_dest +import kotlinx.android.synthetic.main.m1_p_debug.view.debug_change_modle +import kotlinx.android.synthetic.main.m1_p_debug.view.debug_show_endview +import kotlinx.android.synthetic.main.m1_p_debug.view.debug_show_noviceGuidance +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.m1_p_debug, this, true) + visibility = GONE + } + + private var fragment: MainFragment?=null + + private var debugViewWatchDogFragment: WeakReference? = null + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + EventBus.getDefault().register(this) + + val activityByContext = ActivityUtils.getActivityByContext(context) + if(activityByContext is FragmentActivity){ + val fragment = activityByContext.supportFragmentManager.findFragmentByTag(MainFragment.TAG) + if(fragment is MainFragment){ + this.fragment = fragment + } + } + + debug_arrive_dest.setOnClickListener { + CharterPassengerModel.arriveDest() + } + debug_show_noviceGuidance.setOnClickListener { + fragment?.showNoviceGuidanceFragment() + } + debug_change_modle.setOnClickListener { + ToastCharterUtils.showShort("因车辆正在人工驾驶中无法靠边停车,请安全员主动停止车辆") + when (HdMapBuildConfig.currentCarVrIconRes) { + R.raw.aiqinghao -> { + fragment?.setCarMode(OrderInfoResponse.M1_FAMILY) + } + R.raw.jiatinghao -> { + fragment?.setCarMode(OrderInfoResponse.M1_FRIENDLY) + } + R.raw.pengyouhao -> { + fragment?.setCarMode(0) + } + else -> { + fragment?.setCarMode(OrderInfoResponse.M1_LOVE) + } + } + + } + + debug_show_endview.setOnClickListener { + fragment?.showOpenAndCloseDoor() + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun changeOverview(debugEvent: DebugEvent) { + when (debugEvent.type) { + StatusBarView.bizz -> { + if(visibility== View.GONE|| + visibility== View.INVISIBLE){ + visibility = View.VISIBLE + }else{ + visibility = View.GONE + } + } + else -> { + if (ToggleDebugView.toggleDebugView.isShowIng()) { + ToggleDebugView.toggleDebugView.dismiss() + }else { + showDebugView() + } + } + } + } + + private fun showDebugView() { + if (debugViewWatchDogFragment?.get() == null) { + debugViewWatchDogFragment = WeakReference(DebugViewWatchDogFragment.newInstance()) + } + val debugViewFragment = debugViewWatchDogFragment?.get() + fragment?.let { + DebugViewWatchDogFragment.showDebugView(it.childFragmentManager,it.parentFragmentManager,debugViewFragment) + } + } + + + + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + EventBus.getDefault().unregister(this) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt index 3d27d3906b..08d9af1fe0 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/M1ContainFragment.kt @@ -17,12 +17,12 @@ import com.mogo.eagle.core.utilcode.util.* import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.event.EventLineSites import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionPresenter -import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1OrderLineFragment -import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1SoftFragment -import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.M1VideoFragment -import com.mogo.och.bus.passenger.ui.dialogfragment.fragment.OrderInfoFragment -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.ui.selectline.M1OrderLineFragment +import com.mogo.och.bus.passenger.ui.softcontrol.M1SoftFragment +import com.mogo.och.bus.passenger.ui.video.M1VideoFragment +import com.mogo.och.bus.passenger.ui.orderinfo.OrderInfoFragment +import com.mogo.och.bus.passenger.ui.bottom.BottomBar +import com.mogo.och.bus.passenger.ui.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 @@ -114,45 +114,45 @@ class M1ContainFragment : cl_container.setOnClickListener { dismissAllowingStateLoss() } - bb_bottom_bar.setSettingClickListener{ - CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab") - if(tab==SETTINGSOFTTAB) { - dismissAllowingStateLoss() - }else{ - tab = SETTINGSOFTTAB - setCheckView() - } - } - bb_bottom_bar.setLineClickListener{ - CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab") - if(tab==SELECTLINE) { - dismissAllowingStateLoss() - }else{ - tab = SELECTLINE - setCheckView() - } - } - bb_bottom_bar.setOrderInfoClickListener{ - if (LoginStatusManager.isLogin()) { - if(mPresenter?.haveOrder()==true){ - - }else{ - ToastCharterUtils.showShort("请确认订单") - return@setOrderInfoClickListener - } - }else{ - ToastCharterUtils.showShort(AbsMogoApplication.getApp().getString(R.string.m1_please_login_driver)) - return@setOrderInfoClickListener - } - - CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab") - if(tab==ORDERINFO) { - dismissAllowingStateLoss() - }else{ - tab = ORDERINFO - setCheckView() - } - } +// bb_bottom_bar.setSettingClickListener{ +// CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab") +// if(tab==SETTINGSOFTTAB) { +// dismissAllowingStateLoss() +// }else{ +// tab = SETTINGSOFTTAB +// setCheckView() +// } +// } +// bb_bottom_bar.setLineClickListener{ +// CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab") +// if(tab==SELECTLINE) { +// dismissAllowingStateLoss() +// }else{ +// tab = SELECTLINE +// setCheckView() +// } +// } +// bb_bottom_bar.setOrderInfoClickListener{ +// if (LoginStatusManager.isLogin()) { +// if(mPresenter?.haveOrder()==true){ +// +// }else{ +// ToastCharterUtils.showShort("请确认订单") +// return@setOrderInfoClickListener +// } +// }else{ +// ToastCharterUtils.showShort(AbsMogoApplication.getApp().getString(R.string.m1_please_login_driver)) +// return@setOrderInfoClickListener +// } +// +// CallerLogger.d(M_BUS_P+ TAG, "initViews---$tab") +// if(tab==ORDERINFO) { +// dismissAllowingStateLoss() +// }else{ +// tab = ORDERINFO +// setCheckView() +// } +// } bb_bottom_bar.setApplyClickListener(object : BottomClickView.ApplyClickLintener{ override fun onApplyClick() { dismissAllowingStateLoss() diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/itinerary/ItineraryView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/itinerary/ItineraryView.kt new file mode 100644 index 0000000000..f02829b5c1 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/itinerary/ItineraryView.kt @@ -0,0 +1,69 @@ +package com.mogo.och.bus.passenger.ui.itinerary + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.och.bus.passenger.R +import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance +import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_arrive_time +import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_surplus_time +import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_distance_unit +import kotlinx.android.synthetic.main.m1_itinerary_info.view.tv_speed + +class ItineraryView : ConstraintLayout, ItineraryViewModel.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.m1_itinerary_info, this, true) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(ItineraryViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + override fun setSpeed(speed: String) { + tv_speed.text = speed + } + + override fun setDistanceAndTime( + distance: String, + distanceUnit: String, + leftTime:String, + arriveTime:String + ) { + tv_distance.text = distance + tv_distance_unit.text = distanceUnit + tv_distance_surplus_time.text = leftTime + tv_distance_arrive_time.text = arriveTime + } + + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/itinerary/ItineraryViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/itinerary/ItineraryViewModel.kt new file mode 100644 index 0000000000..1c773f0624 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/itinerary/ItineraryViewModel.kt @@ -0,0 +1,107 @@ +package com.mogo.och.bus.passenger.ui.itinerary + +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.bus.passenger.R +import com.mogo.och.bus.passenger.callback.IDistanceCallback +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.utils.DateTimeUtil +import com.mogo.och.common.module.utils.NumberFormatUtil +import kotlin.math.abs +import kotlin.math.ceil + +class ItineraryViewModel : ViewModel(), IMoGoChassisLocationGCJ02Listener, IDistanceCallback, + IOrderStatusChangeListener { + + private val TAG = ItineraryViewModel::class.java.simpleName + + private var viewCallback: ItineraryViewCallback? = null + + init { + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 4, this) + CharterPassengerModel.setStationDistanceListener(TAG, this) + CharterPassengerModel.setStatusChangeListener(TAG, this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + CallerChassisLocationGCJ02ListenerManager.removeListener(TAG) + CharterPassengerModel.setStationDistanceListener(TAG, null) + CharterPassengerModel.setStatusChangeListener(TAG, null) + } + + + fun setDistanceCallback(viewCallback: ItineraryViewCallback) { + this.viewCallback = viewCallback + } + + override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { + mogoLocation?.let { + UiThreadHandler.post { + val speedKM = (abs(it.gnssSpeed) * 3.6f).toInt() + viewCallback?.setSpeed(speedKM.toString()) + } + } + } + + override fun setDistancecAndTime(meters: Long, timeInSecond: Long) { + val unitKm = AbsMogoApplication.getApp().getString(R.string.m1_distance_unit_km) + if (meters < 0 && timeInSecond < 0) { + setDistanceAndTime("--", unitKm, "--", "--") + return + } + var dis: String? = "0" + var disUnit = "KM" + if (meters > 0) { + if (meters / 1000 < 1) { + disUnit = AbsMogoApplication.getApp().getString(R.string.m1_distance_unit_m) + dis = Math.round(meters.toFloat()).toString() + } else { + disUnit = unitKm + dis = NumberFormatUtil.formatLong(meters.toDouble() / 1000) + } + } + val time = ceil(timeInSecond / 60f).toInt() + val arriveTime = DateTimeUtil.getAfterSecondTime(timeInSecond.toInt()) + setDistanceAndTime(dis.toString(), disUnit, time.toString(), arriveTime) + } + + private fun setDistanceAndTime( + distance: String, + distanceUnit: String, + leftTime: String, + arriveTime: String + ) { + UiThreadHandler.post { + viewCallback?.setDistanceAndTime(distance, distanceUnit, leftTime, arriveTime) + } + } + + override fun onStatusChange(currentStatus: OrderStatusEnum) { + when (currentStatus) { + OrderStatusEnum.NoOrderUse -> { + UiThreadHandler.post { + setDistancecAndTime(-1, -1) + } + } + else ->{} + } + } + + interface ItineraryViewCallback { + fun setSpeed(speed: String) + fun setDistanceAndTime( + distance: String, + distanceUnit: String, + leftTime: String, + arriveTime: String + ) + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/OrderInfoFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoFragment.kt similarity index 97% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/OrderInfoFragment.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoFragment.kt index ff9a178037..6985d281ee 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/OrderInfoFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoFragment.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.dialogfragment.fragment +package com.mogo.och.bus.passenger.ui.orderinfo import android.os.Bundle import android.view.View diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoView.kt new file mode 100644 index 0000000000..4b5186f1ed --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoView.kt @@ -0,0 +1,111 @@ +package com.mogo.och.bus.passenger.ui.orderinfo + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.callback.IClearViewCallback +import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_contain_order +import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_end_order +import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_end_order_submit +import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_left_time +import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_order_phone +import kotlinx.android.synthetic.main.m1_devices_fragment.view.actv_order_times +import kotlinx.android.synthetic.main.m1_devices_fragment.view.cl_order_info +import kotlinx.android.synthetic.main.m1_devices_fragment.view.cl_order_info_endorder_comfit + +class OrderInfoView : ConstraintLayout, OrderInfoViewModel.ItineraryViewCallback { + + private val TAG = "OrderInfoView" + + 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){ + initView() + } + + var goneViewListener: IClearViewCallback?=null + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.m1_devices_fragment, this, true) + onClick { + setViewGone() + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(OrderInfoViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + + actv_end_order_submit.setOnClickListener { + viewModel?.endOrder() + } + + actv_contain_order.setOnClickListener { + setViewGone() + } + + actv_end_order.setOnClickListener { + cl_order_info.visibility = View.GONE + cl_order_info_endorder_comfit.visibility = View.VISIBLE + } + } + + override fun setViewGone(){ + goneViewListener?.goneAllView() + } + + override fun setLeftTime(leftTime:String){ + actv_left_time.text = "剩余时间 $leftTime" + } + + override fun setStartTimeAndEndTime(startTime:String,endTime:String){ + actv_order_times.text = "$startTime-$endTime" + } + + override fun setPhone(phone:String){ + if(phone.length>8) { + //截取电话号码前三位 + val phoneNumPre = phone.substring(0, 3); + //截取电话号码后四位 + val phoneNumFix = phone.substring(7); + actv_order_phone.text = "$phoneNumPre****$phoneNumFix" + }else{ + actv_order_phone.text = phone + } + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoViewModel.kt new file mode 100644 index 0000000000..24d554f2a9 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/orderinfo/OrderInfoViewModel.kt @@ -0,0 +1,91 @@ +package com.mogo.och.bus.passenger.ui.orderinfo + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.och.bus.passenger.callback.ITimeCallback +import com.mogo.och.bus.passenger.model.CharterPassengerModel +import com.mogo.och.bus.passenger.utils.ToastCharterUtils +import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg +import com.mogo.och.common.module.bean.dpmsg.EndOrderMsg +import com.mogo.och.common.module.biz.constant.OchCommonConst +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.utils.DateTimeUtil + +class OrderInfoViewModel: ViewModel(), ITimeCallback { + + private val TAG = OrderInfoViewModel::class.java.simpleName + + private var viewCallback:ItineraryViewCallback?=null + + + init { + CharterPassengerModel.setOrderLeftTimeListeners(TAG,this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + CharterPassengerModel.setOrderLeftTimeListeners(TAG,null) + } + + fun setDistanceCallback(viewCallback:ItineraryViewCallback){ + this.viewCallback = viewCallback + getDataInfo() + } + + private fun getDataInfo() { + val currentOrderInfo = CharterPassengerModel.getCurrentOrderInfo() + currentOrderInfo?.let { + viewCallback?.setPhone(it.passengerPhone?:"") + try { + viewCallback?.setStartTimeAndEndTime( + DateTimeUtil.formatLongToString(it.startTime!!, DateTimeUtil.HH_mm), + DateTimeUtil.formatLongToString(it.endTime!!, DateTimeUtil.HH_mm)) + }catch (e:Exception){ + e.printStackTrace() + } + } + } + + override fun setOrderTimeCallBack(timeInSecond: Long) { + val leftTime = DateTimeUtil.second2Time(timeInSecond) + viewCallback?.setLeftTime(leftTime) + } + + + fun endOrder() { + CharterPassengerModel.endOrder(object : OchCommonServiceCallback { + override fun onSuccess(data: BaseData?) { + if (null != data && 0 == data.code) { + ToastCharterUtils.showShort("结束成功") + CharterPassengerModel.setEndOrderStatus() + viewCallback?.setViewGone() + val msg = EndOrderMsg( + CharterPassengerModel.getCurrentOrderInfo()?.orderNo?:"", + ) + CallerTelematicManager.sendMsgToServer( + OchCommonConst.BUSINESS_STRING, + GsonUtils.toJson(msg).toByteArray() + ) + CallerLogger.d(SceneConstant.M_BUS_P + BaseDPMsg.TAG, "发送数据:结束订单${msg}") + } + } + + override fun onFail(code: Int, msg: String) { + ToastCharterUtils.showShort("$code:$msg") + } + }) + } + + interface ItineraryViewCallback{ + fun setPhone(phone:String) + fun setViewGone() + fun setLeftTime(leftTime:String) + fun setStartTimeAndEndTime(startTime:String,endTime:String) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/MakerWithSiteName.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/overmapview/MakerWithSiteName.kt similarity index 77% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/MakerWithSiteName.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/overmapview/MakerWithSiteName.kt index 3e978b0448..b11ee93faf 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/MakerWithSiteName.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/overmapview/MakerWithSiteName.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view +package com.mogo.och.bus.passenger.ui.overmapview import android.content.Context import android.graphics.Bitmap @@ -8,6 +8,9 @@ import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.och.bus.passenger.R import kotlinx.android.synthetic.main.view_maker_sitename.view.* +/** + * 全览地图中使用的view + */ class MakerWithSiteName @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, @@ -28,4 +31,4 @@ class MakerWithSiteName @JvmOverloads constructor( } } -data class MakerWithSiteNamewithCheck(var isCheck: Boolean,val makerWithSiteName:MakerWithSiteName,var bitmapView: Bitmap) \ No newline at end of file +data class MakerWithSiteNamewithCheck(var isCheck: Boolean, val makerWithSiteName: MakerWithSiteName, var bitmapView: Bitmap) \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1OrderLineFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/M1OrderLineFragment.kt similarity index 96% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1OrderLineFragment.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/M1OrderLineFragment.kt index 54a1b26ed8..db54130a35 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1OrderLineFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/M1OrderLineFragment.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.dialogfragment.fragment +package com.mogo.och.bus.passenger.ui.selectline import android.animation.ObjectAnimator import android.graphics.drawable.AnimationDrawable @@ -16,12 +16,11 @@ import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.response.LineInfoResponse import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse import com.mogo.och.bus.passenger.model.CharterPassengerModel -import com.mogo.och.bus.passenger.model.OrderStatusEnum import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionOrderPresenter -import com.mogo.och.bus.passenger.ui.adapter.OrderLineItemAdapter -import com.mogo.och.bus.passenger.ui.adapter.OrderSiteItemAdapter +import com.mogo.och.bus.passenger.ui.selectline.adapter.OrderLineItemAdapter +import com.mogo.och.bus.passenger.ui.selectline.adapter.OrderSiteItemAdapter import com.mogo.och.bus.passenger.ui.dialogfragment.M1ContainFragment -import com.mogo.och.bus.passenger.view.BottomDecoration +import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.BottomDecoration import com.mogo.och.common.module.utils.RxUtils import io.reactivex.disposables.Disposable import kotlinx.android.synthetic.main.m1_order_fragment.* diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/SelectLineView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/SelectLineView.kt new file mode 100644 index 0000000000..d534322188 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/SelectLineView.kt @@ -0,0 +1,278 @@ +package com.mogo.och.bus.passenger.ui.selectline + +import android.animation.ObjectAnimator +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.LinearInterpolator +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import androidx.recyclerview.widget.LinearLayoutManager +import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.bean.response.LineInfoResponse +import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse +import com.mogo.och.bus.passenger.callback.IClearViewCallback +import com.mogo.och.bus.passenger.model.CharterPassengerModel +import com.mogo.och.bus.passenger.ui.selectline.adapter.OrderLineItemAdapter +import com.mogo.och.bus.passenger.ui.selectline.adapter.OrderSiteItemAdapter +import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.BottomDecoration +import com.mogo.och.bus.passenger.utils.ToastCharterUtils +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable +import kotlinx.android.synthetic.main.m1_order_fragment.view.aciv_driver_refuse_group +import kotlinx.android.synthetic.main.m1_order_fragment.view.g_lines_sites_data +import kotlinx.android.synthetic.main.m1_order_fragment.view.g_loading_group +import kotlinx.android.synthetic.main.m1_order_fragment.view.g_side_cancle_submit_group +import kotlinx.android.synthetic.main.m1_order_fragment.view.group_driver_agrenn_line +import kotlinx.android.synthetic.main.m1_order_fragment.view.iv_loading_wait_driver +import kotlinx.android.synthetic.main.m1_order_fragment.view.lsv_line_site +import kotlinx.android.synthetic.main.m1_order_fragment.view.m1_order_loading +import kotlinx.android.synthetic.main.m1_order_fragment.view.m1_order_neterror +import kotlinx.android.synthetic.main.m1_order_fragment.view.m1_order_noorder +import kotlinx.android.synthetic.main.m1_order_fragment.view.rlv_line_list +import kotlinx.android.synthetic.main.m1_order_fragment.view.rv_site_list +import kotlinx.android.synthetic.main.m1_order_fragment.view.tv_site_cancle +import kotlinx.android.synthetic.main.m1_order_fragment.view.tv_site_submit +import kotlinx.android.synthetic.main.m1_order_loading.view.iv_loading_wait_ent +import me.jessyan.autosize.utils.AutoSizeUtils + +class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallback { + + private val TAG = "OrderInfoView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) + + constructor( + context: Context, + attributeSet: AttributeSet, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) + + + var goneViewListener: IClearViewCallback?=null + + private lateinit var lineAdapter: OrderLineItemAdapter + private lateinit var siteAdapter: OrderSiteItemAdapter + + private val lineList = mutableListOf() + private val siteList = mutableListOf() + + private var subscribeDirverAgree: Disposable? = null + private var subscribeDirverRefuse: Disposable? = null + + private val loadingAni = + ObjectAnimator.ofFloat(iv_loading_wait_ent, "rotation", 0f, 90f, 180f, 270f, 360f) + .apply { + repeatCount = -1 + interpolator = LinearInterpolator() + duration = 1000 + } + + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.m1_order_fragment, this, true) + + onClick { + setViewGone() + } + + lineAdapter = OrderLineItemAdapter(context, lineList) + siteAdapter = OrderSiteItemAdapter(context, siteList) + loadingAni.target = iv_loading_wait_ent + rlv_line_list.layoutManager = + LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + rlv_line_list.addItemDecoration( + BottomDecoration( + AutoSizeUtils.dp2px(context, 60f) + ) + ) + rlv_line_list.adapter = lineAdapter + + rv_site_list.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + rv_site_list.addItemDecoration( + BottomDecoration( + AutoSizeUtils.dp2px(context, 90f) + ) + ) + rv_site_list.adapter = siteAdapter + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SelectLineViewModel::class.java) + } + + viewModel?.setVIewCallback(this) + + lineAdapter.checkChangeListener = object : OrderLineItemAdapter.CheckListener { + override fun canSwitchLine(): Boolean { + return true + } + + override fun onCheckListener(lineInfo: LineInfoResponse.LineInfo) { + viewModel?.checkLineClick(lineInfo) + siteAdapter.clearCheck() + } + } + siteAdapter.checkChangeListener = object : OrderSiteItemAdapter.CheckListener { + override fun canSwitchLine(): Boolean { + return viewModel?.canSwitchLine()?:true + } + + override fun onCheckListener(siteInfo: SiteInfoResponse.SiteInfo?) { + // 设置临时选中的 + viewModel?.checkSiteClick(siteInfo) + } + + } + tv_site_cancle.onClick { + viewModel?.resetData() + } + tv_site_submit.onClick { + CharterPassengerModel.switchLine5minWait?.let { + if (!it.isDisposed) { + ToastCharterUtils.showShort("选择线路后5分钟内不可用选") + return@onClick + } + } + viewModel?.changeSites(siteList) + } + + } + + private fun showSelectData() { + UiThreadHandler.post { + g_lines_sites_data?.visibility = View.VISIBLE + g_loading_group?.visibility = View.GONE + group_driver_agrenn_line?.visibility = View.GONE + aciv_driver_refuse_group?.visibility = View.GONE + } + } + + override fun hideDataWaitDriverMsg() { + g_lines_sites_data?.visibility = View.GONE + g_loading_group?.visibility = View.VISIBLE + iv_loading_wait_driver?.let { + val animationDrawable = it.drawable as AnimationDrawable + animationDrawable.start() + } + } + + override fun setVisableByTrun( + showBiz: Boolean, + showNetError: Boolean, + showNorOrder: Boolean, + showLoading: Boolean + ) { + if(showBiz){ + // 选择线路页面 + m1_order_noorder?.visibility = View.GONE + m1_order_neterror?.visibility = View.GONE + lsv_line_site?.visibility = View.VISIBLE + m1_order_loading?.visibility = View.GONE + return + } + if(showNetError){ + m1_order_noorder?.visibility = View.GONE + m1_order_neterror?.visibility = View.VISIBLE + lsv_line_site?.visibility = View.GONE + m1_order_loading?.visibility = View.GONE + return + } + if(showNorOrder){ + m1_order_noorder?.visibility = View.VISIBLE + m1_order_neterror?.visibility = View.GONE + lsv_line_site?.visibility = View.GONE + m1_order_loading?.visibility = View.GONE + return + } + if(showLoading){ + m1_order_noorder?.visibility = View.GONE + m1_order_neterror?.visibility = View.GONE + lsv_line_site?.visibility = View.GONE + m1_order_loading?.visibility = View.VISIBLE + if (!loadingAni.isRunning) { + loadingAni.start() + } + } + } + + override fun hideDataDriverAgree() { + group_driver_agrenn_line?.visibility = View.VISIBLE + aciv_driver_refuse_group?.visibility = View.GONE + g_loading_group?.visibility = View.GONE + g_lines_sites_data?.let { + it.visibility = View.GONE + subscribeDirverAgree = RxUtils.createSubscribe(3_000) { + setViewGone() + } + } + } + + override fun setEnableSiteStatus(cancleAndSubmit: Boolean) { + if (cancleAndSubmit) { + g_side_cancle_submit_group?.visibility = View.VISIBLE + } else { + g_side_cancle_submit_group?.visibility = View.GONE + } + } + + override fun lineAdapterSubmit(lineInfo: LineInfoResponse.LineInfo) { + lineAdapter.submitLine(lineInfo) + } + + override fun hideDataDriverRefuse() { + group_driver_agrenn_line?.visibility = View.GONE + aciv_driver_refuse_group?.visibility = View.VISIBLE + g_loading_group?.visibility = View.GONE + g_lines_sites_data?.let { + it.visibility = View.GONE + subscribeDirverRefuse = RxUtils.createSubscribe(3_000) { + showSelectData() + } + } + } + + override fun lineAdapterSetData( + lineInfo: List, + checkLine: LineInfoResponse.LineInfo? + ) { + lineAdapter.setDataList(lineInfo,checkLine) + } + + override fun siteAdapterEnableIndex(index: Int) { + siteAdapter.setEnableIndex(index) + } + + override fun siteAdapterSetData(siteInfo: List) { + siteAdapter.setDataList(siteInfo) + } + + private fun setViewGone(){ + goneViewListener?.goneAllView() + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/SelectLineViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/SelectLineViewModel.kt new file mode 100644 index 0000000000..bfa58d615a --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/SelectLineViewModel.kt @@ -0,0 +1,419 @@ +package com.mogo.och.bus.passenger.ui.selectline + +import androidx.lifecycle.ViewModel +import com.elegant.utils.UiThreadHandler +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.och.bus.passenger.bean.event.EventLineSites +import com.mogo.och.bus.passenger.bean.response.LineInfoListResponse +import com.mogo.och.bus.passenger.bean.response.LineInfoResponse +import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse +import com.mogo.och.bus.passenger.callback.ITimeCallback +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.bus.passenger.net.BusPassengerServiceManager +import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionOrderPresenter +import com.mogo.och.bus.passenger.utils.ToastCharterUtils +import com.mogo.och.common.module.bean.dpmsg.BaseDPMsg +import com.mogo.och.common.module.bean.dpmsg.ChangeDestMsg +import com.mogo.och.common.module.bean.dpmsg.DPMsgType +import com.mogo.och.common.module.bean.dpmsg.EndOrderMsg +import com.mogo.och.common.module.bean.dpmsg.LineSite +import com.mogo.och.common.module.biz.constant.OchCommonConst +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.manager.StopSideStatusManager +import com.mogo.och.common.module.manager.loopmanager.BizLoopManager +import com.mogo.och.common.module.manager.loopmanager.LoopInfo +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable +import org.greenrobot.eventbus.EventBus + +class SelectLineViewModel : ViewModel(), IOrderStatusChangeListener { + + private val TAG = SelectLineViewModel::class.java.simpleName + + private val TAGLINELOOP = "LineSiteViewLineLoop" + + private var viewCallback: SelectLineViewCallback? = null + + + // 成功提交给后台得线路 + private var checkLine: LineInfoResponse.LineInfo? = null + + // 成功提交给后台得终点站点 + private var checkSite: SiteInfoResponse.SiteInfo? = null + + // 下一个站点 + private var currentSite: SiteInfoResponse.SiteInfo? = null + + // 向司机端端提交的临时线路 + private var tempCheckLine: LineInfoResponse.LineInfo? = null + + // 向司机端临时提交的终点站点 + private var tempCheckSite: SiteInfoResponse.SiteInfo? = null + + + private var subscribeSelectLine: Disposable? = null + private var subscribeSelectSite: Disposable? = null + + /** + * 接收司机屏反馈信息 + */ + private val msgReceived = object : IReceivedMsgListener { + override fun onReceivedMsg(type: Int, byteArray: ByteArray) { + UiThreadHandler.post { + if (type == OchCommonConst.BUSINESS_STRING) { + val msg = GsonUtils.fromJson( + String(byteArray), + BaseDPMsg::class.java + ) as BaseDPMsg + if (msg.type == DPMsgType.TYPE_CHANGE_DEST.type) { + val msg = GsonUtils.fromJson( + String(byteArray), + ChangeDestMsg::class.java + ) as ChangeDestMsg + CallerLogger.d( + SceneConstant.M_BUS_P + BaseDPMsg.TAG, + "接受数据:切换站点${msg}" + ) + if (msg.isConfirmed) { + if (msg.arriveStatus == 2) { + return@post + } + ToastCharterUtils.showShort("站点确定") + viewCallback?.setEnableSiteStatus(true) + checkLine = tempCheckLine + checkSite = tempCheckSite + tempCheckLine = null + tempCheckSite = null + checkLine?.let { + viewCallback?.lineAdapterSubmit(it) + } + viewCallback?.hideDataDriverAgree() + CharterPassengerModel.cleanbroadcastListInfo(checkSite) + CharterPassengerModel.queryOrder() + } else { + ToastCharterUtils.showShort("司机端拒绝请重新选择") + viewCallback?.hideDataDriverRefuse() + } + RxUtils.disposeSubscribe(subscribeSelectSite) + BizLoopManager.removeLoopFunction(BusPassengerFunctionOrderPresenter.TAGLINELOOP) + } + } + } + } + } + + init { + CharterPassengerModel.setStatusChangeListener(TAG, this) + CallerTelematicListenerManager.addListener(TAG, msgReceived) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + RxUtils.disposeSubscribe(subscribeSelectLine) + RxUtils.disposeSubscribe(subscribeSelectSite) + BizLoopManager.removeLoopFunction(TAGLINELOOP) + CharterPassengerModel.setStatusChangeListener(TAG, null) + CallerTelematicListenerManager.removeListener(TAG) + } + + override fun onStatusChange(currentStatus: OrderStatusEnum) { + UiThreadHandler.post { + needRunUI(currentStatus) + } + } + + + fun setVIewCallback(viewCallback: SelectLineViewCallback) { + this.viewCallback = viewCallback + val currentOrderStatus = CharterPassengerModel.getCurrentOrderStatus() + needRunUI(currentOrderStatus) + extracted() + } + + fun checkLineClick(lineInfo: LineInfoResponse.LineInfo) { + checkLine4View() + tempCheckLine = lineInfo + querySitesByLineId(lineInfo) + } + + private fun checkLine4View() { + tempCheckSite = null + viewCallback?.setEnableSiteStatus(false) + } + + private fun extracted() { + val currentOrderStatus = CharterPassengerModel.getCurrentOrderStatus() + if (currentOrderStatus == OrderStatusEnum.OrderNoLine || currentOrderStatus == OrderStatusEnum.OrdersWithLine) { + val hasSetLineAndSite = CharterPassengerModel.hasSetLineAndSite() + if (hasSetLineAndSite != null) {// 已经设置了线路和站点 + checkLine = hasSetLineAndSite.first + checkSite = hasSetLineAndSite.second + } + viewCallback?.setEnableSiteStatus(false) + queryLineList() + } + } + + private fun needRunUI(currentStatus: OrderStatusEnum) { + when (currentStatus) { + OrderStatusEnum.OrderNoLine -> { + viewCallback?.setVisableByTrun(showBiz = true) + extracted() + } + + OrderStatusEnum.OrdersWithLine -> { + viewCallback?.setVisableByTrun(showBiz = true) + } + + else -> { + viewCallback?.setVisableByTrun(showNorOrder = true) + } + } + } + + private fun queryLineList() { + viewCallback?.setVisableByTrun(showLoading = true) + BusPassengerServiceManager.queryLineList(AbsMogoApplication.getApp(), object : + OchCommonServiceCallback { + override fun onSuccess(data: LineInfoListResponse?) { + if (data?.data == null) return + viewCallback?.setVisableByTrun(showBiz = true) + viewCallback?.lineAdapterSetData(data.data, checkLine) + } + + override fun onFail(code: Int, msg: String) { + ToastCharterUtils.showShort("查询线路失败") + viewCallback?.setVisableByTrun(showNetError = true) + } + + override fun onError() { + super.onError() + viewCallback?.setVisableByTrun(showNetError = true) + } + }) + } + + fun changeSites(siteList: MutableList) { + if (!CallerTelematicManager.getClientConnStatus()) { + ToastCharterUtils.showLong("乘客屏无法连接司机屏请联系安全员") + return + } + val sentDataSite: MutableList = mutableListOf() + siteList.forEach { + sentDataSite.add(it.copy2Mas()) + } + + tempCheckSite?.let { siteInfo -> + val orderNo = CharterPassengerModel.getCurrentOrderInfo()?.orderNo ?: "" + val msg = ChangeDestMsg( + orderNo, + siteInfo.lineId!!.toInt(), + siteInfo.lineName!!, + currentSite!!.siteId!!.toInt(), + currentSite!!.siteName!!, + siteInfo.siteId!!.toInt(), + siteInfo.siteName!!, + false, + 1, + 0, + sentDataSite + ) + CallerTelematicManager.sendMsgToServer( + OchCommonConst.BUSINESS_STRING, + GsonUtils.toJson(msg).toByteArray() + ) + CallerLogger.d(SceneConstant.M_BUS_P + BaseDPMsg.TAG, "发送数据:切换站点${msg}") + } + viewCallback?.hideDataWaitDriverMsg() + // 启动查看和司机端链接 + BizLoopManager.setLoopFunction( + BusPassengerFunctionOrderPresenter.TAGLINELOOP, + LoopInfo(3, ::checkServerStatus) + ) + + RxUtils.disposeSubscribe(subscribeSelectSite) + subscribeSelectSite = RxUtils.createSubscribe(120_000) { + ToastCharterUtils.showShort("请联系安全员确认") + viewCallback?.hideDataDriverRefuse() + } + } + + private fun querySitesByLineId(checkLine: LineInfoResponse.LineInfo) { + BusPassengerServiceManager.queryLineSiteList( + AbsMogoApplication.getApp(), + 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 + viewCallback?.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 + viewCallback?.siteAdapterEnableIndex(index) + } + siteInfos.forEach { + if (it.siteId == checkSite?.siteId) { + it.isCheck = true + return@forEach + } + } + } + viewCallback?.siteAdapterSetData(siteInfos) + } + + override fun onFail(code: Int, msg: String?) { + ToastCharterUtils.showShort("查询站点失败") + viewCallback?.setVisableByTrun(showNetError = true) + } + + override fun onError() { + super.onError() + ToastCharterUtils.showShort("查询站点失败") + viewCallback?.setVisableByTrun(showNetError = true) + } + }) + } + + private fun checkServerStatus() { + if (!CallerTelematicManager.getClientConnStatus()) { + ToastCharterUtils.showShort("断开和司机端连接、请联系安全员") + BizLoopManager.removeLoopFunction(BusPassengerFunctionOrderPresenter.TAGLINELOOP) + viewCallback?.hideDataDriverRefuse() + CallerLogger.d( + SceneConstant.M_BUS_P + BusPassengerFunctionOrderPresenter.TAG, + "endAni666" + ) + } + } + + /** + * 重置数据 + */ + fun resetData() { + tempCheckLine = null + tempCheckSite = null + if(checkLine==null){// 没有提交线路 + queryLineList() + viewCallback?.setEnableSiteStatus(true) + }else{ + checkLine?.let { + viewCallback?.setEnableSiteStatus(false) + viewCallback?.lineAdapterSubmit(it) + querySitesByLineId(it) + } + } + } + + fun checkSiteClick(siteInfo: SiteInfoResponse.SiteInfo?) { + tempCheckSite = siteInfo + if(checkSite!=null){ + checkSite?.let { + if (it.siteId == siteInfo?.siteId) {// 站点相同 隐藏所有提交按钮 + viewCallback?.setEnableSiteStatus(false) + } else { + if(it.lineId == siteInfo?.lineId){// 线路相同显示单独提交 + viewCallback?.setEnableSiteStatus(true) + }else{ + if(siteInfo==null){//没有选站点隐藏所有提交 + viewCallback?.setEnableSiteStatus(false) + }else { + viewCallback?.setEnableSiteStatus(true) + } + } + } + } + }else{ + viewCallback?.setEnableSiteStatus(true) + } + } + fun canSwitchLine():Boolean { + val gnssSpeed = + CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().gnssSpeed + if (gnssSpeed < 0.5) { + when (CallerAutoPilotStatusListenerManager.getState()) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可自动驾驶 + return true + } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> {// + return true + } + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { + // 自动驾驶中 + return when (StopSideStatusManager.stopSiteStatus) { + StopSideStatusManager.Status.EndingSuccess -> { + true + } + else ->{ + ToastCharterUtils.showShort("自动驾驶中无法切换线路") + false + } + } + } + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> { + ToastCharterUtils.showShort("因车辆正在平行驾驶中无法切换线路") + return false + } + else -> {} + } + } else { + ToastCharterUtils.showShort("请停车后再修改目的地~") + return false + } + return true + } + + interface SelectLineViewCallback { + fun hideDataWaitDriverMsg() + fun setVisableByTrun( + showBiz: Boolean = false, + showNetError: Boolean = false, + showNorOrder: Boolean = false, + showLoading: Boolean = false + ) + + fun hideDataDriverAgree() + fun setEnableSiteStatus(cancleAndSubmit: Boolean) + fun lineAdapterSubmit(lineInfo: LineInfoResponse.LineInfo) + fun hideDataDriverRefuse() + fun lineAdapterSetData( + lineInfo: List, + checkLine: LineInfoResponse.LineInfo? + ) + fun siteAdapterEnableIndex(index: Int) + fun siteAdapterSetData(siteInfo: List) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/OrderLineItemAdapter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/adapter/OrderLineItemAdapter.kt similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/OrderLineItemAdapter.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/adapter/OrderLineItemAdapter.kt index 405168a0b7..bac61fde81 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/OrderLineItemAdapter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/adapter/OrderLineItemAdapter.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.adapter +package com.mogo.och.bus.passenger.ui.selectline.adapter import android.content.Context import android.view.LayoutInflater diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/adapter/OrderSiteItemAdapter.kt similarity index 97% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/adapter/OrderSiteItemAdapter.kt index 76413221d5..b821955fd0 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/OrderSiteItemAdapter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/adapter/OrderSiteItemAdapter.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.adapter +package com.mogo.och.bus.passenger.ui.selectline.adapter import android.content.Context import android.view.LayoutInflater @@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView import com.mogo.och.bus.passenger.utils.ToastCharterUtils import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.event.EventLineSites -import com.mogo.och.bus.passenger.bean.response.LineInfoResponse import com.mogo.och.bus.passenger.bean.response.SiteInfoResponse import org.greenrobot.eventbus.EventBus diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/BottomDecoration.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/layoutmanage/BottomDecoration.java similarity index 95% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/BottomDecoration.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/layoutmanage/BottomDecoration.java index 55c4d28cd1..803bf98a69 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/BottomDecoration.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/layoutmanage/BottomDecoration.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view; +package com.mogo.och.bus.passenger.ui.selectline.layoutmanage; import android.graphics.Rect; import android.view.View; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/layoutmanage/PickerLayoutManager.java similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/layoutmanage/PickerLayoutManager.java index a22305d837..ae81c22d68 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/PickerLayoutManager.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/selectline/layoutmanage/PickerLayoutManager.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view; +package com.mogo.och.bus.passenger.ui.selectline.layoutmanage; import android.content.Context; import android.util.DisplayMetrics; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/M1SoftFragment.kt similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/M1SoftFragment.kt index 47fbeac622..29b352dc9e 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1SoftFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/M1SoftFragment.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.dialogfragment.fragment +package com.mogo.och.bus.passenger.ui.softcontrol import android.animation.ObjectAnimator import android.animation.ValueAnimator @@ -27,10 +27,10 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.Temperature import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionSoftPresenter -import com.mogo.och.bus.passenger.ui.adapter.TemperatureAdapter -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.bus.passenger.ui.softcontrol.adapter.TemperatureAdapter +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.PagerCenterSnapHelper +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.HorizontalDecoration +import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.PickerLayoutManager import com.mogo.och.common.module.utils.SoundPoolHelper import com.mogo.och.common.module.wigets.MineGradientDrawable import io.reactivex.Observable @@ -239,11 +239,7 @@ class M1SoftFragment : pickerLayoutManager.scaleDownDistance = 0.8f val data = getData() - val adapter = TemperatureAdapter( - requireContext(), - data, - rv_aircondition_temperature - ) + val adapter = TemperatureAdapter(requireContext(), data, rv_aircondition_temperature) val snapHelper = PagerCenterSnapHelper() snapHelper.attachToRecyclerView(rv_aircondition_temperature) rv_aircondition_temperature.layoutManager = pickerLayoutManager diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/SoftControlView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/SoftControlView.kt new file mode 100644 index 0000000000..b9dea77481 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/SoftControlView.kt @@ -0,0 +1,762 @@ +package com.mogo.och.bus.passenger.ui.softcontrol + +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 +import android.graphics.drawable.LayerDrawable +import android.media.AudioManager +import android.util.AttributeSet +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.animation.LinearInterpolator +import android.widget.RadioButton +import android.widget.SeekBar +import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.ClickUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.bus.passenger.R +import com.mogo.och.bus.passenger.bean.Temperature +import com.mogo.och.bus.passenger.callback.IClearViewCallback +import com.mogo.och.bus.passenger.ui.selectline.layoutmanage.PickerLayoutManager +import com.mogo.och.bus.passenger.ui.softcontrol.adapter.TemperatureAdapter +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.HorizontalDecoration +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.PagerCenterSnapHelper +import com.mogo.och.bus.passenger.utils.ToastCharterUtils +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.common.module.utils.SoundPoolHelper +import com.mogo.och.common.module.wigets.MineGradientDrawable +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import kotlinx.android.synthetic.main.m1_soft_fragment.view.dbv_wind +import kotlinx.android.synthetic.main.m1_soft_fragment.view.g_aircondition_setting +import kotlinx.android.synthetic.main.m1_soft_fragment.view.g_light_setting +import kotlinx.android.synthetic.main.m1_soft_fragment.view.g_voice_setting +import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_bottom_light_setting +import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_end_voice +import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_loading +import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_temperature_select +import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_top_light_setting +import kotlinx.android.synthetic.main.m1_soft_fragment.view.iv_voice +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_automatic +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_heating +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_refrigeration +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_pattern_ventilate +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_wind_speed_high +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_wind_speed_low +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rb_wind_speed_middle +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rg_select_function +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rg_setting_pattern +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rg_setting_windspeed +import kotlinx.android.synthetic.main.m1_soft_fragment.view.rv_aircondition_temperature +import kotlinx.android.synthetic.main.m1_soft_fragment.view.sb_voice_bar +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_aircondition_switch +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_current_voice_value +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_light_atmosphere +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_light_top_01 +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_light_top_02 +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_setting_aircondition +import kotlinx.android.synthetic.main.m1_soft_fragment.view.tv_temperature_title +import me.jessyan.autosize.utils.AutoSizeUtils +import java.util.concurrent.TimeUnit + +class SoftControlView : ConstraintLayout, SoftControlViewModel.SoftControlCallback { + + private val TAG = "OrderInfoView" + + private var viewModel:SoftControlViewModel?=null + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) + + constructor( + context: Context, + attributeSet: AttributeSet, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) + + var goneViewListener: IClearViewCallback?=null + + private var currentTemperature: Temperature? = null + + private var subscribeAir: Disposable? = null + private var subscribeLightTop1: Disposable? = null + private var subscribeLightTop2: Disposable? = null + private var subscribeAtmosphere: Disposable? = null + private var subscribeAnimator: Disposable? = null + + private var animator1: ObjectAnimator? = null + + private val loadingAni = ObjectAnimator.ofFloat(iv_loading, "rotation", 0f, 90f ,180f, 270f, 360f).apply { + repeatCount = -1 + interpolator = LinearInterpolator() + duration = 1000 + } + + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.m1_soft_fragment, this, true) + onClick { + setViewGone() + } + } + + private fun setViewGone(){ + goneViewListener?.goneAllView() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SoftControlViewModel::class.java) + } + + rg_select_function.setOnCheckedChangeListener { _, checkedId -> + when (checkedId) { + R.id.tv_setting_aircondition -> { + g_light_setting.visibility = View.GONE + g_voice_setting.visibility = View.GONE + if(loadingAni.isRunning){ + iv_loading.visibility = View.VISIBLE + g_aircondition_setting.visibility = View.GONE + }else{ + g_aircondition_setting.visibility = View.VISIBLE + } + } + R.id.tv_setting_lighting -> { + g_light_setting.visibility = View.VISIBLE + g_voice_setting.visibility = View.GONE + g_aircondition_setting.visibility = View.GONE + iv_loading.visibility = View.GONE + } + R.id.tv_setting_voice -> { + g_voice_setting.visibility = View.VISIBLE + g_aircondition_setting.visibility = View.GONE + g_light_setting.visibility = View.GONE + iv_loading.visibility = View.GONE + } + else -> {} + } + if(rb_pattern_heating.isChecked){ + iv_temperature_select.visibility = View.GONE + } + } + rg_select_function.check(R.id.tv_setting_aircondition) + setAirconditionListener(viewModel) + setAirConditionAni() + setLightListener(viewModel) + setVoiceInfo() + } + + + fun setWind(check: RadioButton, resource:Int){ + check.isChecked = true + dbv_wind.setDrawableImage(BitmapFactory.decodeResource(resources,resource)) + } + + /** + * 关闭暖风机 + */ + private fun closeHeater() { + CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "关闭暖风") + heaterAirEnable(true) + viewModel?.closeHeader() + } + + private fun heaterAirEnable(enable: Boolean) { + tv_temperature_title.isEnabled = enable + rv_aircondition_temperature.isEnabled = enable + val layoutManager = rv_aircondition_temperature.layoutManager + if (layoutManager is PickerLayoutManager) { + layoutManager.setHorizontallyScroll(enable) + } + val adapter = rv_aircondition_temperature.adapter as TemperatureAdapter + if(enable){ + adapter.setEnable(true) + if(tv_setting_aircondition.isChecked) { + if(iv_loading.visibility==View.GONE){ + iv_temperature_select.visibility = View.VISIBLE + } + } + rb_wind_speed_low.setTextColor(ContextCompat.getColorStateList(context,R.color.bus_p_function_airconditon_pattern_text_color_selector)) + }else{ + adapter.setEnable(false) + iv_temperature_select.visibility = View.GONE + rb_wind_speed_low.setTextColor(ContextCompat.getColor(context,R.color.bus_p_m1_6647576e)) + } + } + + /** + * 开启暖风机 + */ + private fun openHeater() { + CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "打开暖风") + heaterAirEnable(false) + closeAircondition()//关闭空调 + val switch: Int + when (rg_setting_windspeed.checkedRadioButtonId) { + R.id.rb_wind_speed_low -> { + rb_wind_speed_middle.tag = M1SoftFragment.touchTag + rb_wind_speed_middle.toggle() + switch = 1 + } + R.id.rb_wind_speed_middle -> { + switch = 1 + } + R.id.rb_wind_speed_high -> { + switch = 2 + } + else -> { + rb_wind_speed_middle.tag = M1SoftFragment.touchTag + rb_wind_speed_middle.toggle() + switch = 1 + } + } + if (!tv_aircondition_switch.isChecked) { + return + } + viewModel?.openAndSetHeader(switch) + } + + /** + * 关闭空调 + */ + private fun closeAircondition() { + CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "关闭空调") + var modeCmd = 0 + var windSpeedCmd = 0 + val temperatureCmd = currentTemperature?.value ?: 26 + closeHeater()//关闭暖风 + when (rg_setting_pattern.checkedRadioButtonId) { + R.id.rb_pattern_automatic -> modeCmd = 1 // 自动 + R.id.rb_pattern_refrigeration -> modeCmd = 2 // 制冷 + R.id.rb_pattern_ventilate -> modeCmd = 3 // 通风 + else -> {} + } + when (rg_setting_windspeed.checkedRadioButtonId) { + R.id.rb_wind_speed_low -> windSpeedCmd = 1 // 1档 + R.id.rb_wind_speed_middle -> windSpeedCmd = 2 // 2档 + R.id.rb_wind_speed_high -> windSpeedCmd = 3 // 3档 + else -> {} + } + viewModel?.closeAircondition(modeCmd, windSpeedCmd, temperatureCmd) + } + + fun showAni(){ + iv_loading.visibility = View.VISIBLE + loadingAni.target = iv_loading + loadingAni.start() + g_aircondition_setting.visibility = View.GONE + subscribeAnimator = Observable.timer(10000, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + loadingAni.cancel() + iv_loading.visibility = View.GONE + if(tv_setting_aircondition.isChecked){ + g_aircondition_setting.visibility = View.VISIBLE + if(rb_pattern_heating.isChecked){ + iv_temperature_select.visibility = View.GONE + } + } + } + } + + /** + * 开启空调 + */ + private fun openAircondition() { + CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "打开空调") + var modeCmd = 0 + var windSpeedCmd = 0 + val temperatureCmd = currentTemperature?.value ?: 26 + closeHeater()//关闭暖风 + when (rg_setting_pattern.checkedRadioButtonId) { + R.id.rb_pattern_automatic -> modeCmd = 1 // 自动 + R.id.rb_pattern_refrigeration -> modeCmd = 2 // 制冷 + R.id.rb_pattern_ventilate -> modeCmd = 3 // 通风 + else -> {} + } + when (rg_setting_windspeed.checkedRadioButtonId) { + R.id.rb_wind_speed_low -> windSpeedCmd = 1 // 1档 + R.id.rb_wind_speed_middle -> windSpeedCmd = 2 // 2档 + R.id.rb_wind_speed_high -> windSpeedCmd = 3 // 3档 + else -> {} + } + if (!tv_aircondition_switch.isChecked) { + return + } + viewModel?.openAndSetAircondition(modeCmd, windSpeedCmd, temperatureCmd) + } + + private fun setCheckAir(adapter: TemperatureAdapter, tag:Temperature){ + adapter.setCheckIndex(tag.index) + currentTemperature = tag + if (rv_aircondition_temperature.tag == M1SoftFragment.touchTag) { + rv_aircondition_temperature.tag = null + return + } else { + SoundPoolHelper.getSoundPoolHelper() + .playSoundWithRedId(context, R.raw.bus_di) + } + openAircondition() + } + + + // region 灯 + private fun setLightListener(viewModel: SoftControlViewModel?) { + tv_light_top_01.setOnCheckedChangeListener { buttonView, isChecked -> + if(!buttonView.isPressed){ + return@setOnCheckedChangeListener + } + tv_light_top_01.isEnabled = false + subscribeLightTop1 = Observable.timer(2000, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + tv_light_top_01.isEnabled = true + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + viewModel?.setLightData1(isChecked) + setLightTop1View(isChecked,true) + setLightView(isChecked,tv_light_top_02.isChecked) + } + tv_light_top_02.setOnCheckedChangeListener { buttonView, isChecked -> + if(!buttonView.isPressed){ + return@setOnCheckedChangeListener + } + tv_light_top_02.isEnabled = false + subscribeLightTop2 = Observable.timer(2000, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + tv_light_top_02.isEnabled = true + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + viewModel?.setLightData2(isChecked) + setLightTop2View(isChecked,true) + setLightView(tv_light_top_01.isChecked,isChecked) + } + tv_light_atmosphere.setOnCheckedChangeListener { buttonView, isChecked -> + if(!buttonView.isPressed){ + return@setOnCheckedChangeListener + } + tv_light_atmosphere.isEnabled = false + subscribeAtmosphere = Observable.timer(2000, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + tv_light_atmosphere.isEnabled = true + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + viewModel?.setAtmosphereLightData2(isChecked) + setLightAtmosphereView(isChecked,true) + } + } + + override fun setLightTop1View(leftLight: Boolean, isFirst: Boolean){ + tv_light_top_01?.let { + if (leftLight) { + tv_light_top_01.text = context.getString(R.string.bus_p_m1_close_light1) + tv_light_top_01.isChecked = true + if(!isFirst) ToastCharterUtils.showShort("打开顶灯1") + } else { + tv_light_top_01.text = context.getString(R.string.bus_p_m1_open_light1) + tv_light_top_01.isChecked = false + if(!isFirst) ToastCharterUtils.showShort("关闭顶灯1") + } + } + } + override fun setLightTop2View(rightLight: Boolean, isFirst: Boolean){ + tv_light_top_02?.let { + if (rightLight) { + tv_light_top_02.text = context.getString(R.string.bus_p_m1_close_light2) + tv_light_top_02.isChecked = true + if(!isFirst) ToastCharterUtils.showShort("打开顶灯2") + } else { + tv_light_top_02.text = context.getString(R.string.bus_p_m1_open_light2) + tv_light_top_02.isChecked = false + if(!isFirst) ToastCharterUtils.showShort("关闭顶灯2") + } + } + } + override fun setLightAtmosphereView(atmosphereLight: Boolean, isFirst: Boolean){ + tv_light_atmosphere?.let { + if (atmosphereLight) { + tv_light_atmosphere.text = context.getString(R.string.bus_p_m1_close_atmosphere) + tv_light_atmosphere.isChecked = true + iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_select) + if(!isFirst) ToastCharterUtils.showShort("打开氛围灯") + } else { + tv_light_atmosphere.text = context.getString(R.string.bus_p_m1_open_atmosphere) + tv_light_atmosphere.isChecked = false + iv_bottom_light_setting.setImageResource(R.drawable.bus_p_function_atmosphere_nor) + if(!isFirst) ToastCharterUtils.showShort("关闭氛围灯") + } + } + } + + /** + * 灯的UI发生变化 + */ + override fun setLightView(leftLight: Boolean, rightLight: Boolean) { + iv_top_light_setting?.let { + if (leftLight && rightLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_middle_selected)// 都打开 + } else if (!leftLight && !rightLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_nor)// 都关闭 + } else { + if (leftLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_left)// 左面开 + } + if (rightLight) { + iv_top_light_setting.setImageResource(R.drawable.bus_p_function_light_select_right)// 左面开 + } + } + } + } + // endregion + + // region 声音 + private var mAudioManager: AudioManager? = null + private var mMaxVolume: Int? = 100 + + + @SuppressLint("NewApi") + private fun setVoiceInfo() { + val dp2px = AutoSizeUtils.dp2px(context, 26f)//进度条高度 + val color2CBFFC = ContextCompat.getColor(context, R.color.bus_p_m1_2cbffc) + val color1060FF = ContextCompat.getColor(context, R.color.bus_p_m1_1060ff) + val color96A5C2 = ContextCompat.getColor(context, R.color.bus_p_m1_96a5c2) + val temp03 = MineGradientDrawable(color2CBFFC, color1060FF, dp2px) + val scaleDrawable3 = ClipDrawable(temp03, Gravity.START, ClipDrawable.HORIZONTAL) + val temp01 = MineGradientDrawable(color96A5C2, color96A5C2, dp2px) + val arr = arrayOf(temp01, scaleDrawable3) + val ld = LayerDrawable(arr) + ld.setDrawableByLayerId(android.R.id.background, temp01) + ld.setDrawableByLayerId(android.R.id.progress, scaleDrawable3) + sb_voice_bar.setProgressDrawableTiled(ld) + 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) { + tv_current_voice_value.text = "$progress%" + if (fromUser) { + mMaxVolume?.let { + var currnetValue = ((progress.toFloat() / 100) * it).toInt() + if (currnetValue <= 0) { + currnetValue = 1 + } + mAudioManager?.setStreamVolume( + AudioManager.STREAM_MUSIC, + currnetValue, + AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE + ) + } + } + if (progress == 0) { + iv_voice.setImageResource(R.drawable.bus_p_function_voice_middle_select) + iv_end_voice.setImageResource(R.drawable.bus_p_function_voice_min) + } else { + iv_voice.setImageResource(R.drawable.bus_p_function_voice_middle_selected) + iv_end_voice.setImageResource(R.drawable.bus_p_function_voice_max) + } + + } + + 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) + val mCurrentVolume = mAudioManager?.getStreamVolume(AudioManager.STREAM_MUSIC) + mMaxVolume?.let { max -> + mCurrentVolume?.let { current -> + if (current == 1) { + sb_voice_bar.progress = 5 + tv_current_voice_value.text = "5%" + } else { + val fl = current.toFloat() / max * 100 + sb_voice_bar.progress = fl.toInt() + tv_current_voice_value.text = "${fl.toInt()}%" + } + } + } + + } + } + // endregion + + + + private fun setAirConditionAni() { + dbv_wind.post { + dbv_wind?.let { + val measuredHeight = it.measuredHeight + animator1 = ObjectAnimator.ofInt(it, "showHeight", 0, measuredHeight).apply { + duration = 1000 + repeatCount = ValueAnimator.INFINITE + if(rg_setting_windspeed.checkedRadioButtonId!=0&&tv_aircondition_switch.isChecked){ + start() + } + } + } + } + } + + private fun setAirconditionListener(viewModel: SoftControlViewModel?) { + // 开关空调或暖风机 + tv_aircondition_switch.setOnCheckedChangeListener { buttonView, isChecked -> + if(!buttonView.isPressed){ + return@setOnCheckedChangeListener + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + if(isChecked){//打开 + tv_aircondition_switch.setText("关闭空调") + if (rg_setting_pattern.checkedRadioButtonId == R.id.rb_pattern_heating) { + openHeater()// 打开暖风机 + } else { + openAircondition()// 打开空调 + } + showAni() + }else{// 关闭 + tv_aircondition_switch.setText("打开空调") + closeHeater()// 关闭暖风机 + closeAircondition()//关闭空调 + } + } + // 模式调节 + rg_setting_pattern.setOnCheckedChangeListener { group, checkedId -> + CallerLogger.d(SceneConstant.M_BUS_P + M1SoftFragment.TAG, "调节模式") + when (checkedId) { + R.id.rb_pattern_heating -> { + if(!rb_pattern_heating.isPressed){ + return@setOnCheckedChangeListener + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + openHeater() + } + R.id.rb_pattern_automatic->{ + if(!rb_pattern_automatic.isPressed){ + return@setOnCheckedChangeListener + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + openAircondition() + } + R.id.rb_pattern_refrigeration->{ + if(!rb_pattern_refrigeration.isPressed){ + return@setOnCheckedChangeListener + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + openAircondition() + } + R.id.rb_pattern_ventilate->{ + if(!rb_pattern_ventilate.isPressed){ + return@setOnCheckedChangeListener + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + openAircondition() + } + else -> { + openAircondition() + } + } + if(tv_aircondition_switch.isChecked) { + showAni() + } + } + + // 风速调节 + rg_setting_windspeed.setOnCheckedChangeListener { group, checkedId -> + when (checkedId) { + R.id.rb_wind_speed_low-> { + if(!rb_wind_speed_low.isPressed){ + return@setOnCheckedChangeListener + } + } + R.id.rb_wind_speed_middle-> { + if(!rb_wind_speed_middle.isPressed){ + return@setOnCheckedChangeListener + } + } + R.id.rb_wind_speed_high-> { + if(!rb_wind_speed_high.isPressed){ + return@setOnCheckedChangeListener + } + } + else -> {} + } + SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(context, R.raw.bus_di) + if (rg_setting_pattern.checkedRadioButtonId == R.id.rb_pattern_heating) {//暖风机 + openHeater() + } else { + openAircondition() + } + } + val pickerLayoutManager = + PickerLayoutManager( + context, + PickerLayoutManager.HORIZONTAL, + false + ) + pickerLayoutManager.isChangeAlpha = true + pickerLayoutManager.scaleDownBy = 0.29f + pickerLayoutManager.scaleDownDistance = 0.8f + + val data = getData() + val adapter = TemperatureAdapter(context, data, rv_aircondition_temperature) + val snapHelper = PagerCenterSnapHelper() + snapHelper.attachToRecyclerView(rv_aircondition_temperature) + rv_aircondition_temperature.layoutManager = pickerLayoutManager + rv_aircondition_temperature.adapter = adapter + HorizontalDecoration.distance = SharedPrefsMgr.getInstance(context).getInt( + HorizontalDecoration.distancekey,0) + val space = AutoSizeUtils.dp2px(context, 15f) + rv_aircondition_temperature.addItemDecoration( + HorizontalDecoration( + space, + data.size - 1 + ) + ) + + pickerLayoutManager.setOnScrollStopListener { view -> + if (view is TextView) { + // 未拖到中点、自动滚动到中点会短时间触发两次 + val tag = view.tag + if (tag is Temperature) { + RxUtils.disposeSubscribe(subscribeAir) + if(tag.index==0||tag.index==adapter.data.size-1){ + subscribeAir = Observable.timer(200, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + setCheckAir(adapter,tag) + } + }else { + if (ClickUtils.isClickTooFrequent(rv_aircondition_temperature)) { + return@setOnScrollStopListener + } + setCheckAir(adapter,tag) + } + } + + } + } + if(HorizontalDecoration.distance!=0){ + rv_aircondition_temperature.scrollToPosition(data.size-1) + adapter.setCheckIndex(data.size-1) + } + } + + fun getData(): MutableList { + val mutableListOf = mutableListOf() + mutableListOf.add(Temperature(0, 16, "16°")) + mutableListOf.add(Temperature(1, 17, "17°")) + mutableListOf.add(Temperature(2, 18, "18°")) + mutableListOf.add(Temperature(3, 19, "19°")) + mutableListOf.add(Temperature(4, 20, "20°")) + mutableListOf.add(Temperature(5, 21, "21°")) + mutableListOf.add(Temperature(6, 22, "22°")) + mutableListOf.add(Temperature(7, 23, "23°")) + mutableListOf.add(Temperature(8, 24, "24°")) + mutableListOf.add(Temperature(9, 25, "25°")) + mutableListOf.add(Temperature(10, 26, "26°")) + return mutableListOf + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + /** + * 根据车的状态会写页面状态 + */ + override fun setAirconditionHeaterView( + airIsOpen: Boolean, + heaterIsOpen: Boolean, + temperatureCmd: Int, + pattern: Int, + windSpeed: Int + ) { + tv_aircondition_switch?.let { + if (!airIsOpen && !heaterIsOpen) { + tv_aircondition_switch.text = "打开空调" + tv_aircondition_switch.isChecked = false + dbv_wind.visibility = View.GONE + } else { + tv_aircondition_switch.text = "关闭空调" + tv_aircondition_switch.isChecked = true + dbv_wind.visibility = View.VISIBLE + } + if (airIsOpen) { + val adapter = rv_aircondition_temperature.adapter + if (adapter is TemperatureAdapter) { + adapter.data.forEach { + if (it.value == temperatureCmd) { + rv_aircondition_temperature.tag = M1SoftFragment.touchTag + UiThreadHandler.postDelayed({ + rv_aircondition_temperature?.smoothScrollToPosition(it.index) + },500) + } + } + } + when (pattern) {//1: 自动模式, 2: 制冷模式, 3: 通风模式(仅送风,无温度) + 1 -> {rb_pattern_automatic.isChecked = true} + 2 -> {rb_pattern_refrigeration.isChecked = true} + 3 -> {rb_pattern_ventilate.isChecked = true} + else -> {} + } + heaterAirEnable(true) + when (windSpeed) {//1: 1档,2: 2档,3:3档 + 1 -> { + setWind(rb_wind_speed_low,R.drawable.bus_pm1_aircondition_wind_low) + } + 2 -> { + setWind(rb_wind_speed_middle,R.drawable.bus_pm1_aircondition_wind_middle) + } + 3 -> { + setWind(rb_wind_speed_high,R.drawable.bus_pm1_aircondition_wind_high) + } + else -> {} + } + } + if (heaterIsOpen) { + rb_pattern_heating.isChecked = true + heaterAirEnable(false) + when (windSpeed) {//1: 1档,2: 2档 + 1 -> { + setWind(rb_wind_speed_middle,R.drawable.bus_pm1_warm_wind_middle) + } + 2 -> { + setWind(rb_wind_speed_high,R.drawable.bus_pm1_warm_wind_high) + } + else -> {} + } + } + } + } + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/SoftControlViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/SoftControlViewModel.kt new file mode 100644 index 0000000000..e1ed48616f --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/SoftControlViewModel.kt @@ -0,0 +1,270 @@ +package com.mogo.och.bus.passenger.ui.softcontrol + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +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.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.bus.passenger.utils.ToastCharterUtils +import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback +import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager +import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus +import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue +import com.mogo.och.common.module.manager.devicemanage.data.LightStatus +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable + +class SoftControlViewModel: ViewModel(), LightAirconditionDoorCallback { + + private val TAG = SoftControlViewModel::class.java.simpleName + + private var viewCallback:SoftControlCallback?=null + + private var subscribeLightTop1: Disposable?=null + private var subscribeLightTop2: Disposable?=null + private var subscribeLightAtmosphere: Disposable?=null + + private var airconditionDisposable: Disposable?=null + private var heaterDisposable: Disposable?=null + + + init { + + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + LightAirconditionDoorStatusManager.removeListener(TAG) + } + + fun setViewCallback(viewCallback:SoftControlCallback){ + this.viewCallback = viewCallback + LightAirconditionDoorStatusManager.addListener(TAG, this) + } + + /** + * 空调状态变化 + */ + override fun onAirconditionStatusCallback(heaterIsOpen: Boolean, airconditionStatus: AirconditionStatus, isFirst: Boolean) { + CallerLogger.d(M_BUS_P + TAG, + "回写--空调开关:${LightAirconditionDoorStatusManager.airconditionStatus.isOpen}、" + + "空调温度:${LightAirconditionDoorStatusManager.airconditionStatus.temperature}" + + "空调模式:${LightAirconditionDoorStatusManager.airconditionStatus.pattert}" + + "空调风速:${LightAirconditionDoorStatusManager.airconditionStatus.windSpeed}") + UiThreadHandler.post { + if(airconditionStatus.isOpen){ + viewCallback?.setAirconditionHeaterView( + airconditionStatus.isOpen, + heaterIsOpen, + airconditionStatus.temperature, + airconditionStatus.pattert, + airconditionStatus.windSpeed + ) + }else{ + viewCallback?.setAirconditionHeaterView( + airconditionStatus.isOpen, + heaterIsOpen, + airconditionStatus.temperature, + 0, + 0 + ) + } + } + } + /** + * 暖风机状态变化 + */ + override fun onHeaterStatusCallback(airconditionIsOpen:Boolean, heaterStatue: HeaterStatue, isFirst: Boolean) { + CallerLogger.d(M_BUS_P + TAG, + "回写--暖风机开关:${heaterStatue.isOpen}、" + + "风速:${heaterStatue.windSpeed}") + UiThreadHandler.post { + if(heaterStatue.isOpen) { + viewCallback?.setAirconditionHeaterView( + airconditionIsOpen, + heaterStatue.isOpen, + 0, + 0, + heaterStatue.windSpeed + ) + }else{ + viewCallback?.setAirconditionHeaterView( + airconditionIsOpen, + heaterStatue.isOpen, + 0, + 0, + 0 + ) + } + } + } + /** + * 灯状态变化 + */ + override fun onLightTop1Callback(lightStatus: LightStatus, isFirst: Boolean) { + CallerLogger.d(M_BUS_P + TAG, + "回写--顶灯1开关:${lightStatus.isOpenLight1}、" + + "顶灯2开关:${lightStatus.isOpenLight2}、" + + "氛围灯开关:${lightStatus.isOpenatmosphere}、") + UiThreadHandler.post { + viewCallback?.setLightTop1View(lightStatus.isOpenLight1,isFirst) + } + } + /** + * 灯状态变化 + */ + override fun onLightTop2Callback(lightStatus: LightStatus, isFirst: Boolean) { + CallerLogger.d(M_BUS_P + TAG, + "回写--顶灯1开关:${lightStatus.isOpenLight1}、" + + "顶灯2开关:${lightStatus.isOpenLight2}、" + + "氛围灯开关:${lightStatus.isOpenatmosphere}、") + UiThreadHandler.post { + viewCallback?.setLightTop2View(lightStatus.isOpenLight2,isFirst) + viewCallback?.setLightView(lightStatus.isOpenLight1,lightStatus.isOpenLight2) + } + } + /** + * 灯状态变化 + */ + override fun onLightAtmosphereCallback(lightStatus: LightStatus, isFirst: Boolean) { + CallerLogger.d(M_BUS_P + TAG, + "回写--顶灯1开关:${lightStatus.isOpenLight1}、" + + "顶灯2开关:${lightStatus.isOpenLight2}、" + + "氛围灯开关:${lightStatus.isOpenatmosphere}、") + UiThreadHandler.post { + viewCallback?.setLightAtmosphereView(lightStatus.isOpenatmosphere,isFirst) + } + } + + /** + * 设置空调 + */ + fun openAndSetAircondition(modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) { + CallerLogger.d(M_BUS_P + TAG, "" + + "打开空调,模式$modeCmd--档位${windSpeedCmd}--温度:$temperatureCmd") + CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(1,modeCmd,windSpeedCmd,temperatureCmd) + RxUtils.disposeSubscribe(airconditionDisposable) + airconditionDisposable = RxUtils.createSubscribe(10000){ + if (!LightAirconditionDoorStatusManager.airconditionStatus.isOpen&& + LightAirconditionDoorStatusManager.airconditionStatus.windSpeed!=windSpeedCmd&& + LightAirconditionDoorStatusManager.airconditionStatus.temperature!=temperatureCmd&& + LightAirconditionDoorStatusManager.airconditionStatus.pattert!=modeCmd) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + } + fun closeAircondition(modeCmd: Int, windSpeedCmd: Int, temperatureCmd: Int) { + CallerLogger.d(M_BUS_P + TAG, "关闭空调") + CallerAutoPilotControlManager.sendRoboBusJinlvM1AirConditionerCmd(2,modeCmd,windSpeedCmd,temperatureCmd) + RxUtils.disposeSubscribe(airconditionDisposable) + airconditionDisposable = RxUtils.createSubscribe(10000){ + if (LightAirconditionDoorStatusManager.airconditionStatus.isOpen) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + } + /** + * 设置暖风 + */ + fun openAndSetHeader(windSpeedCmd: Int) { + CallerLogger.d(M_BUS_P + TAG, "打开暖风机、档位${windSpeedCmd}") + CallerAutoPilotControlManager.sendRoboBusJinlvM1HeaderCmd(1,windSpeedCmd) + RxUtils.disposeSubscribe(heaterDisposable) + heaterDisposable = RxUtils.createSubscribe(10000){ + if (!LightAirconditionDoorStatusManager.heaterStatue.isOpen&& + LightAirconditionDoorStatusManager.heaterStatue.windSpeed!=windSpeedCmd) { + ToastCharterUtils.showShort("暖风机操作未生效,请稍后重试吧~") + } + } + } + + fun closeHeader(){ + CallerLogger.d(M_BUS_P + TAG, "关闭暖风机") + CallerAutoPilotControlManager.sendRoboBusJinlvM1HeaderCmd(2,0) + RxUtils.disposeSubscribe(heaterDisposable) + heaterDisposable = RxUtils.createSubscribe(10000){ + if (LightAirconditionDoorStatusManager.heaterStatue.isOpen) { + ToastCharterUtils.showShort("暖风机操作未生效,请稍后重试吧~")//还是开着的 + } + } + } + + fun setLightData1(leftLight: Boolean){ + CallerLogger.d(M_BUS_P + TAG, "顶灯2:$leftLight") + RxUtils.disposeSubscribe(subscribeLightTop1) + subscribeLightTop1 = if(leftLight){ + CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp1Cmd(1) + RxUtils.createSubscribe{ + if (!LightAirconditionDoorStatusManager.lightStatus.isOpenLight1) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + }else{ + CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp1Cmd(2) + RxUtils.createSubscribe{ + if (LightAirconditionDoorStatusManager.lightStatus.isOpenLight1) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + } + } + fun setLightData2(rightLight: Boolean){ + CallerLogger.d(M_BUS_P + TAG, "顶灯1:$rightLight") + RxUtils.disposeSubscribe(subscribeLightTop2) + subscribeLightTop2 = if(rightLight){ + CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp2Cmd(1) + RxUtils.createSubscribe{ + if (!LightAirconditionDoorStatusManager.lightStatus.isOpenLight2) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + }else{ + CallerAutoPilotControlManager.sendRoboBusJinlvM1MainLamp2Cmd(2) + RxUtils.createSubscribe{ + if (LightAirconditionDoorStatusManager.lightStatus.isOpenLight2) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + } + } + fun setAtmosphereLightData2(atmosphereLight: Boolean){ + CallerLogger.d(M_BUS_P + TAG, "氛围灯:$atmosphereLight") + RxUtils.disposeSubscribe(subscribeLightAtmosphere) + subscribeLightAtmosphere = if (atmosphereLight) { + CallerAutoPilotControlManager.sendRoboBusJinlvM1SmallLampCmd(1) + RxUtils.createSubscribe{ + if (!LightAirconditionDoorStatusManager.lightStatus.isOpenatmosphere) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + } else { + CallerAutoPilotControlManager.sendRoboBusJinlvM1SmallLampCmd(2) + RxUtils.createSubscribe{ + if (LightAirconditionDoorStatusManager.lightStatus.isOpenatmosphere) { + ToastCharterUtils.showShort("控制系统繁忙,请稍后再试") + } + } + } + } + + + + interface SoftControlCallback{ + /** + * 根据车的状态会写页面状态 + */ + fun setAirconditionHeaterView( + airIsOpen: Boolean, + heaterIsOpen: Boolean, + temperatureCmd: Int, + pattern: Int, + windSpeed: Int + ) + fun setLightTop1View(leftLight: Boolean, isFirst: Boolean) + fun setLightTop2View(rightLight: Boolean, isFirst: Boolean) + fun setLightView(leftLight: Boolean, rightLight: Boolean) + fun setLightAtmosphereView(atmosphereLight: Boolean, isFirst: Boolean) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/TemperatureAdapter.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/adapter/TemperatureAdapter.java similarity index 97% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/TemperatureAdapter.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/adapter/TemperatureAdapter.java index 51ea20f509..dc969d07ed 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/TemperatureAdapter.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/adapter/TemperatureAdapter.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.adapter; +package com.mogo.och.bus.passenger.ui.softcontrol.adapter; import android.content.Context; import android.graphics.Color; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CarouselLayoutManager.java similarity index 99% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CarouselLayoutManager.java index 334e0ede44..341a00cc13 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselLayoutManager.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CarouselLayoutManager.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.layoutmanage; +package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage; import android.graphics.PointF; import android.os.Build; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselZoomPostLayoutListener.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CarouselZoomPostLayoutListener.java similarity index 96% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselZoomPostLayoutListener.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CarouselZoomPostLayoutListener.java index 7d56c32af3..0e7475e192 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CarouselZoomPostLayoutListener.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CarouselZoomPostLayoutListener.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.layoutmanage; +package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage; import android.view.View; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CenterScrollListener.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CenterScrollListener.java similarity index 96% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CenterScrollListener.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CenterScrollListener.java index 2e69dd400e..30b4eaa280 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/CenterScrollListener.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/CenterScrollListener.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.layoutmanage; +package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/HorizontalDecoration.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/HorizontalDecoration.java similarity index 96% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/HorizontalDecoration.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/HorizontalDecoration.java index 7fdc6b4c4e..913c47c9e2 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/HorizontalDecoration.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/HorizontalDecoration.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view; +package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage; import android.graphics.Rect; import android.view.View; @@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.och.bus.passenger.ui.adapter.TemperatureAdapter; +import com.mogo.och.bus.passenger.ui.softcontrol.adapter.TemperatureAdapter; public class HorizontalDecoration extends RecyclerView.ItemDecoration { private int space = 0; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/ItemTransformation.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/ItemTransformation.java similarity index 88% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/ItemTransformation.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/ItemTransformation.java index 7d09aa4b92..b77e0fa8f2 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/ItemTransformation.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/ItemTransformation.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.layoutmanage; +package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage; public class ItemTransformation { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/PagerCenterSnapHelper.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/PagerCenterSnapHelper.kt similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/PagerCenterSnapHelper.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/PagerCenterSnapHelper.kt index f0a3f564db..537586bb54 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/layoutmanage/PagerCenterSnapHelper.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/layoutmanage/PagerCenterSnapHelper.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.layoutmanage +package com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage import android.view.View import androidx.recyclerview.widget.OrientationHelper diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/DrawBitmapView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/view/DrawBitmapView.kt similarity index 96% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/DrawBitmapView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/view/DrawBitmapView.kt index 7fb326490b..be17245bc4 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/DrawBitmapView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/view/DrawBitmapView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view +package com.mogo.och.bus.passenger.ui.softcontrol.view import android.content.Context import android.graphics.Bitmap diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/DrawableCheckBox.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/view/DrawableCheckBox.java similarity index 90% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/DrawableCheckBox.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/view/DrawableCheckBox.java index b208883823..21fe0abb8a 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/DrawableCheckBox.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/softcontrol/view/DrawableCheckBox.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view; +package com.mogo.och.bus.passenger.ui.softcontrol.view; import android.content.Context; import android.graphics.Bitmap; @@ -18,27 +18,15 @@ import java.lang.ref.WeakReference; public class DrawableCheckBox extends androidx.appcompat.widget.AppCompatCheckBox { public DrawableCheckBox(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - -// TODO Auto-generated constructor stub - } public DrawableCheckBox(Context context, AttributeSet attrs) { - super(context, attrs); - -// TODO Auto-generated constructor stub - } public DrawableCheckBox(Context context) { - super(context); - -// TODO Auto-generated constructor stub - } @Override @@ -59,11 +47,8 @@ public class DrawableCheckBox extends androidx.appcompat.widget.AppCompatCheckBo int y = getWidth(); canvas.translate((getWidth() - bodyWidth) / 2, 0); } - } - super.onDraw(canvas); - } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/statusbar/M1BlueToothView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/statusbar/M1BlueToothView.kt similarity index 95% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/statusbar/M1BlueToothView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/statusbar/M1BlueToothView.kt index e193fa8785..7a28fb5cc1 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/statusbar/M1BlueToothView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/statusbar/M1BlueToothView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view.statusbar +package com.mogo.och.bus.passenger.ui.statusbar import android.content.Context import android.util.AttributeSet diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/statusbar/StatusBarView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/statusbar/StatusBarView.kt similarity index 96% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/statusbar/StatusBarView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/statusbar/StatusBarView.kt index 0b82c76464..3da32a8467 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/statusbar/StatusBarView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/statusbar/StatusBarView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view.statusbar +package com.mogo.och.bus.passenger.ui.statusbar import android.annotation.SuppressLint import android.content.Context @@ -23,7 +23,8 @@ import com.mogo.eagle.core.function.hmi.ui.widget.DemoModeView import com.mogo.eagle.core.utilcode.util.ClickUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.och.bus.passenger.R -import com.mogo.och.bus.passenger.bean.event.DebugView +import com.mogo.och.bus.passenger.ui.debugview.DebugEvent +import com.mogo.och.bus.passenger.ui.debugview.DebugView import kotlinx.android.synthetic.main.m1_statusview_datetime.view.* import me.jessyan.autosize.utils.AutoSizeUtils import org.greenrobot.eventbus.EventBus @@ -52,7 +53,7 @@ class StatusBarView @JvmOverloads constructor( mHits[mHits.size - 1] = SystemClock.uptimeMillis() if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) { mHits = LongArray(COUNTS) //重新初始化数组 - EventBus.getDefault().post(DebugView(type)) + EventBus.getDefault().post(DebugEvent(type)) } } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/ToastCharterView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/toast/ToastCharterView.kt similarity index 93% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/ToastCharterView.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/toast/ToastCharterView.kt index 314280bcf7..b566f20f10 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/ToastCharterView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/toast/ToastCharterView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view +package com.mogo.och.bus.passenger.ui.toast import android.content.Context import android.util.AttributeSet diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/ConsultVideoPlayer.kt similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/ConsultVideoPlayer.kt index 02b27b0bca..f5360314cb 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/ConsultVideoPlayer.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/ConsultVideoPlayer.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.view +package com.mogo.och.bus.passenger.ui.video import android.app.Activity import android.content.Context @@ -47,8 +47,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { private lateinit var layoutBottom: ConstraintLayout private lateinit var vPpenLeft: View - private var fullVideoPlayer:ConsultVideoPlayer?=null - var smalllPlayer:ConsultVideoPlayer?=null + private var fullVideoPlayer: ConsultVideoPlayer?=null + var smalllPlayer: ConsultVideoPlayer?=null private var currentTime = 0 @@ -457,7 +457,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { return Math.ceil((25 * context.resources.displayMetrics.density).toDouble()).toInt() } - fun clearFullscreenLayout(gsyVideoPlayer:ConsultVideoPlayer) { + fun clearFullscreenLayout(gsyVideoPlayer: ConsultVideoPlayer) { mIfCurrentIsFullscreen = false val delay = 100 gsyVideoPlayer.smalllPlayer = null diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1VideoFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/M1VideoFragment.kt similarity index 91% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1VideoFragment.kt rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/M1VideoFragment.kt index 6708be7aef..746548ad23 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/dialogfragment/fragment/M1VideoFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/M1VideoFragment.kt @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.dialogfragment.fragment +package com.mogo.och.bus.passenger.ui.video import android.os.Bundle import android.view.View @@ -7,11 +7,10 @@ import com.mogo.commons.mvp.MvpFragment import com.mogo.och.bus.passenger.R import com.mogo.och.bus.passenger.bean.TaxiPassengerVideoPlay import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionVideoPresenter -import com.mogo.och.bus.passenger.ui.adapter.RecyclerVideoAdapter -import com.mogo.och.bus.passenger.ui.layoutmanage.CarouselLayoutManager -import com.mogo.och.bus.passenger.ui.layoutmanage.CarouselZoomPostLayoutListener -import com.mogo.och.bus.passenger.ui.layoutmanage.CenterScrollListener -import com.mogo.och.bus.passenger.view.ConsultVideoPlayer +import com.mogo.och.bus.passenger.ui.video.adapter.RecyclerVideoAdapter +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.CarouselLayoutManager +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.CarouselZoomPostLayoutListener +import com.mogo.och.bus.passenger.ui.softcontrol.layoutmanage.CenterScrollListener import com.shuyu.gsyvideoplayer.video.base.GSYVideoView import kotlinx.android.synthetic.main.m1_video_fragment.* import kotlin.math.floor @@ -67,7 +66,7 @@ class M1VideoFragment : } override fun pageStop() { - val (_: kotlin.Int, player) = getPlayer(carouselLayoutManager) + val (_, player) = getPlayer(carouselLayoutManager) if (player is ConsultVideoPlayer) { player.onVideoPause() } @@ -92,7 +91,7 @@ class M1VideoFragment : rvVideoPlaylist ) recyclerVideoAdapter.setOnThumbImageClilckListener { - val (_: kotlin.Int, player) = getPlayer(carouselLayoutManager) + val (_, player) = getPlayer(carouselLayoutManager) if (player is ConsultVideoPlayer) { player.onVideoReset() player.thumbImageViewLayout.visibility = View.VISIBLE diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/RecyclerItemVideoHolder.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/adapter/RecyclerItemVideoHolder.java similarity index 86% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/RecyclerItemVideoHolder.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/adapter/RecyclerItemVideoHolder.java index 8092e7b046..784e57ec53 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/RecyclerItemVideoHolder.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/adapter/RecyclerItemVideoHolder.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.adapter; +package com.mogo.och.bus.passenger.ui.video.adapter; import android.content.Context; import android.view.View; @@ -6,7 +6,7 @@ import android.view.View; import androidx.recyclerview.widget.RecyclerView; import com.mogo.och.bus.passenger.R; -import com.mogo.och.bus.passenger.view.ConsultVideoPlayer; +import com.mogo.och.bus.passenger.ui.video.ConsultVideoPlayer; import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder; public class RecyclerItemVideoHolder extends RecyclerView.ViewHolder { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/RecyclerVideoAdapter.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/adapter/RecyclerVideoAdapter.java similarity index 98% rename from OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/RecyclerVideoAdapter.java rename to OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/adapter/RecyclerVideoAdapter.java index 8fac0b6982..b9a9eec122 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/adapter/RecyclerVideoAdapter.java +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/video/adapter/RecyclerVideoAdapter.java @@ -1,4 +1,4 @@ -package com.mogo.och.bus.passenger.ui.adapter; +package com.mogo.och.bus.passenger.ui.video.adapter; import android.content.Context; import android.view.LayoutInflater; diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/EndOrderView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/EndOrderView.kt deleted file mode 100644 index 9473c6e425..0000000000 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/ui/view/EndOrderView.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.bus.passenger.ui.view - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import com.mogo.eagle.core.function.hmi.ui.widget.BlueToothView -import com.mogo.och.bus.passenger.R - -class EndOrderView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr) { - init { - LayoutInflater.from(context).inflate(R.layout.m1_order_end, this, true) - } -} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/FullVideoUtils.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/FullVideoUtils.kt index 9aa6058d9d..0202dabf41 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/FullVideoUtils.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/FullVideoUtils.kt @@ -2,10 +2,9 @@ package com.mogo.och.bus.passenger.utils import android.annotation.SuppressLint import android.app.Activity -import android.content.Context import android.view.View import android.view.WindowManager -import com.mogo.och.bus.passenger.view.ConsultVideoPlayer +import com.mogo.och.bus.passenger.ui.video.ConsultVideoPlayer import com.shuyu.gsyvideoplayer.GSYVideoManager import java.lang.Exception diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/ToastCharterUtils.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/ToastCharterUtils.kt index 93f17a75f9..0478c0c252 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/ToastCharterUtils.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/utils/ToastCharterUtils.kt @@ -3,7 +3,7 @@ package com.mogo.och.bus.passenger.utils import android.view.View import com.mogo.eagle.core.utilcode.util.ActivityUtils import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.bus.passenger.view.ToastCharterView +import com.mogo.och.bus.passenger.ui.toast.ToastCharterView import me.jessyan.autosize.utils.AutoSizeUtils object ToastCharterUtils { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/RecyclerViewCornerRadius.java b/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/RecyclerViewCornerRadius.java deleted file mode 100644 index 1d84288d1c..0000000000 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/bus/passenger/view/RecyclerViewCornerRadius.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.mogo.och.bus.passenger.view; -import android.graphics.Canvas; -import android.graphics.Path; -import android.graphics.RectF; -import android.graphics.Region; -import android.os.Build; -import android.view.ViewTreeObserver; - -import androidx.recyclerview.widget.RecyclerView; - -/** - * 为RecyclerView设置圆角 - */ -public class RecyclerViewCornerRadius extends RecyclerView.ItemDecoration { - public static final String TAG = "RecyclerViewCornerRadius"; - - private RectF rectF; - private Path path; - - private int topLeftRadius = 0; - private int topRightRadius = 0; - private int bottomLeftRadius = 0; - private int bottomRightRadius = 0; - - public RecyclerViewCornerRadius(final RecyclerView recyclerView) { - recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { - @Override - public void onGlobalLayout() { - rectF = new RectF(0, 0, recyclerView.getMeasuredWidth(), recyclerView.getMeasuredHeight()); - - path = new Path(); - path.reset(); - path.addRoundRect(rectF, new float[]{ - topLeftRadius, topLeftRadius, - topRightRadius, topRightRadius, - bottomLeftRadius, bottomLeftRadius, - bottomRightRadius, bottomRightRadius - }, Path.Direction.CCW); - - recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this); - } - }); - } - - public void setCornerRadius(int radius) { - this.topLeftRadius = radius; - this.topRightRadius = radius; - this.bottomLeftRadius = radius; - this.bottomRightRadius = radius; - } - - public void setCornerRadius(int topLeftRadius, int topRightRadius, int bottomLeftRadius, int bottomRightRadius) { - this.topLeftRadius = topLeftRadius; - this.topRightRadius = topRightRadius; - this.bottomLeftRadius = bottomLeftRadius; - this.bottomRightRadius = bottomRightRadius; - } - - @Override - public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { - c.clipRect(rectF); - - - if (Build.VERSION.SDK_INT >= 28) { - c.clipPath(path); - } else { - c.clipPath(path, Region.Op.REPLACE); - } - } -} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/m1_bottom_bar.xml b/OCH/charter/passenger/src/main/res/layout/m1_bottom_bar.xml index 2d9cca558f..73237c41d1 100644 --- a/OCH/charter/passenger/src/main/res/layout/m1_bottom_bar.xml +++ b/OCH/charter/passenger/src/main/res/layout/m1_bottom_bar.xml @@ -8,7 +8,7 @@ tools:ignore="MissingDefaultResource"> - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/m1_main_fragment.xml b/OCH/charter/passenger/src/main/res/layout/m1_main_fragment.xml index 814d50d16b..ff2cd87e1b 100644 --- a/OCH/charter/passenger/src/main/res/layout/m1_main_fragment.xml +++ b/OCH/charter/passenger/src/main/res/layout/m1_main_fragment.xml @@ -57,146 +57,43 @@ app:layout_constraintEnd_toEndOf="@+id/mapBizView" app:layout_constraintStart_toStartOf="parent" /> - - + app:layout_constraintStart_toStartOf="parent" + android:layout_width="wrap_content" + android:layout_height="wrap_content"/> - - - - - + - + - - - - - - - - - - - - - - - + - - - - - - - - - \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/m1_order_fragment.xml b/OCH/charter/passenger/src/main/res/layout/m1_order_fragment.xml index 932725b461..6df7a84dd7 100644 --- a/OCH/charter/passenger/src/main/res/layout/m1_order_fragment.xml +++ b/OCH/charter/passenger/src/main/res/layout/m1_order_fragment.xml @@ -8,14 +8,12 @@ + app:layout_constraintStart_toStartOf="parent"> + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/m1_soft_fragment.xml b/OCH/charter/passenger/src/main/res/layout/m1_soft_fragment.xml index 1334bfb082..6cee245295 100644 --- a/OCH/charter/passenger/src/main/res/layout/m1_soft_fragment.xml +++ b/OCH/charter/passenger/src/main/res/layout/m1_soft_fragment.xml @@ -82,7 +82,7 @@ app:layout_constraintStart_toStartOf="@+id/gl_left" app:layout_constraintTop_toTopOf="parent" /> - - - - - ? = null // 运营单(接驾任务和送驾任务的轨迹集合) + private var mOrderContrails: MutableList? = + null // 运营单(接驾任务和送驾任务的轨迹集合) - private var mCurTaskContrail : ContrailListRespBean.Result? = null //当前在跑的任务的轨迹信息 + private var mCurTaskContrail: ContrailListRespBean.Result? = null //当前在跑的任务的轨迹信息 private var mADASStatusCallback //Model->Presenter:自动驾驶状态相关 : ITaxiADASStatusCallback? = null @@ -196,8 +199,6 @@ object TaxiModel { } fun release() { -// startOrStopOrderLoop(false) - startOrStopCalculateRouteInfo(false) releaseListeners() loginService = null } @@ -272,15 +273,19 @@ object TaxiModel { return valueOf(order.orderStatus) } - fun getCurTaskAndOrder(): QueryCurrentTaskRespBean.Result?{ - return mCurrentTaskAndOrder + fun getCurTaskAndOrder(): QueryCurrentTaskRespBean.Result? { + return mCurrentTaskAndOrder } - fun getCurOrderContrails(): MutableList?{ + fun getCurUntruthTask(): StartServiceRespBean.Result? { + return mUntruthTask + } + + fun getCurOrderContrails(): MutableList? { return mOrderContrails } - fun getCurTaskContrail(): ContrailListRespBean.Result?{ + fun getCurTaskContrail(): ContrailListRespBean.Result? { return mCurTaskContrail } @@ -298,7 +303,7 @@ object TaxiModel { val currentOrder = mCurrentTaskAndOrder!!.order - if (currentOrder != null){ + if (currentOrder != null) { if (currentOrder!!.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code) { if (FunctionBuildConfig.isDemoMode) { // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true @@ -316,7 +321,7 @@ object TaxiModel { } clearAutopilotControlParameters() } - }else{ + } else { if (FunctionBuildConfig.isDemoMode) { d(SceneConstant.M_TAXI + TAG, "setIPCDemoMode:false") setIPCDemoMode(false) @@ -343,18 +348,17 @@ object TaxiModel { updateAutopilotControlParameters(null) } - fun updateCurrentTaskAndOrder(result: QueryCurrentTaskRespBean.Result?){ + fun updateCurrentTaskAndOrder(result: QueryCurrentTaskRespBean.Result?) { mCurrentTaskAndOrder = result updateNativeCurrentOrder(result) } - fun updateUntruthTask(untruthTask : StartServiceRespBean.Result?) { + fun updateUntruthTask(untruthTask: StartServiceRespBean.Result?) { mUntruthTask = untruthTask } //清除任务订单信息 fun clearCurrentOCHOrder() { - startOrStopCalculateRouteInfo(false) mCurrentTaskAndOrder = null clearAutopilotControlParameters() TaxiTrajectoryManager.getInstance().syncTrajectoryInfo() @@ -395,7 +399,7 @@ object TaxiModel { return } - if (mCurTaskContrail == null){ + if (mCurTaskContrail == null) { e(SceneConstant.M_TAXI + TAG, "no order or order is empty.") ToastUtils.showShort("轨迹信息不存在!") } @@ -468,7 +472,7 @@ object TaxiModel { return null } - if (mCurTaskContrail == null){ + if (mCurTaskContrail == null) { e(SceneConstant.M_TAXI + TAG, "curTaskContrail is empty.") return null } @@ -488,11 +492,16 @@ object TaxiModel { if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( mCurrentTaskAndOrder!!.lineId, - mCurTaskContrail!!.csvFileUrl, mCurTaskContrail!!.csvFileMd5, - mCurTaskContrail!!.txtFileUrl, mCurTaskContrail!!.txtFileMd5, - mCurTaskContrail!!.contrailSaveTime, "", // todo 这里原来传的是carModel, 现在没有这个信息, 是否传businessType - mCurTaskContrail!!.csvFileUrlDPQP, mCurTaskContrail!!.csvFileMd5DPQP, - mCurTaskContrail!!.txtFileUrlDPQP, mCurTaskContrail!!.txtFileMd5DPQP, + mCurTaskContrail!!.csvFileUrl, + mCurTaskContrail!!.csvFileMd5, + mCurTaskContrail!!.txtFileUrl, + mCurTaskContrail!!.txtFileMd5, + mCurTaskContrail!!.contrailSaveTime, + "", // todo 这里原来传的是carModel, 现在没有这个信息, 是否传businessType + mCurTaskContrail!!.csvFileUrlDPQP, + mCurTaskContrail!!.csvFileMd5DPQP, + mCurTaskContrail!!.txtFileUrlDPQP, + mCurTaskContrail!!.txtFileMd5DPQP, mCurTaskContrail!!.contrailSaveTimeDPQP ) } @@ -521,7 +530,7 @@ object TaxiModel { ).toDouble() i(SceneConstant.M_TAXI + TAG, "judgeTaskStartStation() distance = $distance") if (distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) { - arriveSite(startSite.siteId,false) + arriveSite(startSite.siteId, false) } } } @@ -574,11 +583,11 @@ object TaxiModel { //位置变化时,通过围栏判断是否到达x点 if (null == mogoLocation) return - if (mUntruthTask != null){ - judgeUntruthStation(mUntruthTask,mogoLocation) + if (mUntruthTask != null) { + judgeUntruthStation(mUntruthTask, mogoLocation) } - if (checkCurrentTask()){ + if (checkCurrentTask()) { judgeTaskStartStation(mogoLocation) judgeTaskEndSiteStation(mogoLocation) } @@ -589,45 +598,56 @@ object TaxiModel { } } - private fun judgeUntruthStation(virtualTask: StartServiceRespBean.Result?, currentLocation: MogoLocation) { + private fun judgeUntruthStation( + virtualTask: StartServiceRespBean.Result?, + currentLocation: MogoLocation + ) { if (mUntruthTask == null || virtualTask == null) return val distance = CoordinateUtils.calculateLineDistance( virtualTask.gcjLon, virtualTask.gcjLat, currentLocation.longitude, currentLocation.latitude ).toDouble() - i(SceneConstant.M_TAXI + TAG, "judgeEndStation() ${virtualTask.siteName} distance = $distance") + i( + SceneConstant.M_TAXI + TAG, + "judgeEndStation() ${virtualTask.siteName} distance = $distance" + ) if (distance <= TaxiUnmannedConst.ARRIVE_AT_START_STATION_DISTANCE) { // 15米内到站 arriveSite(virtualTask.siteId, true) } } - private fun arriveSite(siteId: Long, isArriveEndSite: Boolean) { - arriveSite(mContext!!,siteId,object : OchCommonServiceCallback{ + /** + * 到站(起点、终点) + * isArriveEndSite true 终点, false 起点 + */ + fun arriveSite(siteId: Long, isArriveEndSite: Boolean) { + arriveSite(mContext!!, siteId, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { if (data == null || data.code != 0) return - d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data)) + d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data)) mUntruthTask = null - if (isArriveEndSite){ + if (isArriveEndSite) { //到目的站后去查询下一个任务 startPrepareTask(siteId) + cleanStation() } } override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_TAXI + TAG,"$code $msg") + d(SceneConstant.M_TAXI + TAG, "$code $msg") } }) } private fun startTask(lineId: Long) { - startTask(mContext!!, lineId,object : OchCommonServiceCallback{ + startTask(mContext!!, lineId, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data)) + d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data)) } override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_TAXI + TAG,"$code $msg") + d(SceneConstant.M_TAXI + TAG, "$code $msg") } }) @@ -635,20 +655,20 @@ object TaxiModel { private fun startPrepareTask(siteId: Long) { UiThreadHandler.postDelayed({ - prepareTask(mContext!!,siteId,object : OchCommonServiceCallback{ + prepareTask(mContext!!, siteId, object : OchCommonServiceCallback { override fun onSuccess(data: PrepareTaskRespBean?) { - d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data)) + d(SceneConstant.M_TAXI + TAG, GsonUtil.jsonFromObject(data)) if (data == null || data.code != 0) return //去下载轨迹, 下发给工控机下载 queryTaskContrail(Array(1) { data.lineId }) } override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_TAXI + TAG,"$code $msg") + d(SceneConstant.M_TAXI + TAG, "$code $msg") } }) - },TIMER_PREPARE_TASK_INTERVAL) + }, TIMER_PREPARE_TASK_INTERVAL) } private fun judgeTaskEndSiteStation(currentLocation: MogoLocation) { @@ -687,7 +707,7 @@ object TaxiModel { return } i(SceneConstant.M_TAXI + TAG, "judgeEndStation() = 刚过站且在15m内") - arriveSite(endSite.siteId,true) + arriveSite(endSite.siteId, true) } } } @@ -720,7 +740,7 @@ object TaxiModel { ToastUtils.showShort("订单状态不匹配该操作!") return } - arriveSite(mCurrentTaskAndOrder?.startSite!!.siteId,false) + arriveSite(mCurrentTaskAndOrder?.startSite!!.siteId, false) } fun setArriveAtEndStation() { @@ -728,11 +748,11 @@ object TaxiModel { ToastUtils.showShort("无任务!") return } - arriveSite(mCurrentTaskAndOrder?.endSite!!.siteId,true) + arriveSite(mCurrentTaskAndOrder?.endSite!!.siteId, true) } fun toStartTask() { - if (!checkCurrentTask()){ + if (!checkCurrentTask()) { ToastUtils.showShort("无任务!") return } @@ -832,7 +852,10 @@ object TaxiModel { override fun onAutopilotSNRequest() {} override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) { - i(SceneConstant.M_TAXI + TAG, "onAutopilotArriveAtStation = " + arrivalNotification.toString()) + i( + SceneConstant.M_TAXI + TAG, + "onAutopilotArriveAtStation = " + arrivalNotification.toString() + ) if (((arrivalNotification == null) || !checkCurrentTask() || (getCurOrderStatus() === TaxiOrderStatusEnum.ArriveAtEnd)) ) { @@ -855,8 +878,8 @@ object TaxiModel { private fun arriveTerminal() { if (!checkCurrentOrder()) return val endSite = mCurrentTaskAndOrder!!.order!!.orderEndSite - if (endSite != null){ - arriveSite(endSite.siteId,true) + if (endSite != null) { + arriveSite(endSite.siteId, true) } } @@ -880,29 +903,27 @@ object TaxiModel { * */ fun setRouteLineMarker() { - // TODO: 设置地图上的marker 只设置有明确站点marker ,当前执行的任务或者订单的,但是不设置虚拟任务的 -// val currentOCHOrder = getCurrentOrder() -// if (currentOCHOrder != null) { -// if ((currentOCHOrder.startSiteGcjPoint == null) || currentOCHOrder.startSiteGcjPoint.isEmpty() || (currentOCHOrder.startSiteGcjPoint.size < 2) || ( -// currentOCHOrder.endSiteGcjPoint == null) || currentOCHOrder.endSiteGcjPoint.isEmpty() || (currentOCHOrder.endSiteGcjPoint.size < 2) -// ) { -// cleanLineMarker() -// return -// } -// val startStation = LatLng( -// currentOCHOrder.startSiteGcjPoint[1], -// currentOCHOrder.startSiteGcjPoint[0] -// ) -// val endStation = LatLng( -// currentOCHOrder.endSiteGcjPoint[1], -// currentOCHOrder.endSiteGcjPoint[0] -// ) -// if (mAutopilotPlanningCallback != null) { -// mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation) -// } + val curTaskAndOrder = getCurTaskAndOrder() + if (curTaskAndOrder != null) { + if (curTaskAndOrder.startSite == null || curTaskAndOrder.endSite == null) { + cleanLineMarker() + return + } + val startStation = LatLng( + curTaskAndOrder.startSite!!.gcjLat, + curTaskAndOrder.startSite!!.gcjLon + ) + val endStation = LatLng( + curTaskAndOrder.endSite!!.gcjLat, + curTaskAndOrder.endSite!!.gcjLon + ) + if (mAutopilotPlanningCallback != null) { + mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation) + } } + } - fun cleanLineMarker() { + private fun cleanLineMarker() { if (mAutopilotPlanningCallback != null) { mAutopilotPlanningCallback!!.setLineMarker(null, null) } @@ -914,30 +935,29 @@ object TaxiModel { * @param models */ fun updateOrderRouteInfo(models: List) { -// if (models.isEmpty()) return -// if (mCurrentOrder == null) return -// d(SceneConstant.M_TAXI + TAG, "--------计算出sumLength开始---------- ") -// -// //转换成高德坐标系 -// if (mRoutePoints!!.size > 0) { -// mRoutePoints.clear() -// } -// mRoutePoints.addAll(coordinateConverterWgsToGcjLocations(mContext, models)) -// startDynamicCalculateRouteInfo() + if (models.isEmpty()) return + if (mCurrentTaskAndOrder == null || mCurrentTaskAndOrder!!.startSite == null + || mCurrentTaskAndOrder!!.endSite == null) return + d(SceneConstant.M_TAXI + TAG, "--------计算出sumLength开始---------- ") + + //转换成高德坐标系 + if (mRoutePoints!!.size > 0) { + mRoutePoints.clear() + } + mRoutePoints.addAll(coordinateConverterWgsToGcjLocations(mContext, models)) + startDynamicCalculateRouteInfo() } private fun startDynamicCalculateRouteInfo() { -// d( -// SceneConstant.M_TAXI + TAG, -// "--------mCurrentOCHOrder---------- $mCurrentOrder" -// ) -// d(SceneConstant.M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints!!.size) -// //开启实时计算剩余距离,剩余时间,预计时间 -// startOrStopCalculateRouteInfo(true) -// AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi() -// if (mOrderStatusCallback != null) { -// mOrderStatusCallback!!.onNaviToEnd(false, false) -// } + d( + SceneConstant.M_TAXI + TAG, + "--------mCurrentTaskAndOrder---------- $mCurrentTaskAndOrder" + ) + d(SceneConstant.M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints!!.size) + AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi() + if (mOrderStatusCallback != null) { + mOrderStatusCallback!!.onNaviToEnd(false, false) + } } private fun updateDistance(lastSumLength: Float) { @@ -947,15 +967,12 @@ object TaxiModel { ("---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime + " thread = " + Thread.currentThread().name) ) -// if (mCurrentOrder != null) { -// mCurrentOrder!!.decreaseTravelDistance(lastSumLength.toDouble()) -// } -// if (mOrderStatusCallback != null) { -// mOrderStatusCallback!!.onCurrentOrderDistToEndChanged( -// lastSumLength.toLong(), -// lastTime.toLong() -// ) -// } + if (mOrderStatusCallback != null) { + mOrderStatusCallback!!.onCurrentOrderDistToEndChanged( + lastSumLength.toLong(), + lastTime.toLong() + ) + } } private val distanceListener: IDistanceListener = object : IDistanceListener { @@ -981,15 +998,15 @@ object TaxiModel { var temp: LatLng? for (mogoLocation: MogoLocation in routeArrivied) { temp = LatLng( - mogoLocation.getLatitude(), - mogoLocation.getLongitude() + mogoLocation.latitude, + mogoLocation.longitude ) routeArriviedTemp.add(temp) } for (mogoLocation: MogoLocation in routeArriving) { temp = LatLng( - mogoLocation.getLatitude(), - mogoLocation.getLongitude() + mogoLocation.latitude, + mogoLocation.longitude ) routeArrivingTemp.add(temp) } @@ -1003,21 +1020,6 @@ object TaxiModel { } } - /** - * 开始轮询计算剩余里程和时间 - * - * @param isStart - */ - private fun startOrStopCalculateRouteInfo(isStart: Boolean) { - d(SceneConstant.M_TAXI + TAG, "startOrStopOrderLoop() $isStart") - if (isStart) { - TaxiModelLoopManager.getInstance().startCalculateRouteInfoLoop() - } else { - mRoutePoints!!.clear() - TaxiModelLoopManager.getInstance().stopCalculateRouteInfoLoop() - } - } - // 登出 fun logout() { loginService!!.loginOut(getChassisLocationGCJ02().latitude, getChassisLocationGCJ02().longitude) @@ -1025,12 +1027,13 @@ object TaxiModel { //导航去订单终点目的地 fun startNaviToEndStation(isShow: Boolean) { - if (mRoutePoints!!.size > 0) { //使用自驾轨迹 + if (mRoutePoints == null) return + if (mRoutePoints.size > 0) { //使用自驾轨迹 if (mOrderStatusCallback != null) { mOrderStatusCallback!!.onNaviToEnd(false, isShow) } } else { //若直接要显示导航地图则直接导航, 若不是则2s后若无轨迹数据使用高德导航 - if (isShow && mRoutePoints.size == 0 && mOrderStatusCallback != null) { + if (isShow && mOrderStatusCallback != null) { mOrderStatusCallback!!.onNaviToEnd(true, true) } else { UiThreadHandler.postDelayed({ @@ -1041,21 +1044,30 @@ object TaxiModel { } } } - - fun setStation() { -// val currentOCHOrder = getCurrentOrder() -// if (currentOCHOrder != null) { -// val startStation = MogoLocation() -// startStation.longitude = currentOCHOrder.startSiteGcjPoint[0] -// startStation.latitude = currentOCHOrder.startSiteGcjPoint[1] -// val endStation = MogoLocation() -// endStation.longitude = currentOCHOrder.endSiteGcjPoint[0] -// endStation.latitude = currentOCHOrder.endSiteGcjPoint[1] -// setStationPoint(startStation, endStation, currentOCHOrder.lineId) -// } + fun updateStation() { + if (mCurrentTaskAndOrder == null) return + if (mCurrentTaskAndOrder!!.startSite != null && mCurrentTaskAndOrder!!.endSite != null + && mCurrentTaskAndOrder!!.currentStatus <= TaskStatusEnum.StartTask.code){ + setStation() + }else{ + cleanStation() + } } - fun cleanStation() { + private fun setStation() { + val curTaskAndOrder = getCurTaskAndOrder() ?: return + if (curTaskAndOrder.startSite != null && curTaskAndOrder.endSite != null) { + val startStation = MogoLocation() + startStation.longitude = curTaskAndOrder.startSite!!.gcjLon + startStation.latitude = curTaskAndOrder.startSite!!.gcjLat + val endStation = MogoLocation() + endStation.longitude = curTaskAndOrder.endSite!!.gcjLon + endStation.latitude = curTaskAndOrder.endSite!!.gcjLat + setStationPoint(startStation, endStation, curTaskAndOrder.lineId) + } + } + + private fun cleanStation() { setStationPoint(null, null, -1L) } diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java deleted file mode 100644 index 9fd90abb10..0000000000 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiModelLoopManager.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.mogo.och.taxi.model; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.taxi.constant.TaxiUnmannedConst; - -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 TaxiModelLoopManager { - - private static final String TAG = TaxiModelLoopManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final TaxiModelLoopManager INSTANCE = new TaxiModelLoopManager(); - } - - public static TaxiModelLoopManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private CompositeDisposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 - - public void startCalculateRouteInfoLoop() { - - CallerLogger.INSTANCE.i(M_TAXI + TAG, "startCalculateRouteInfoLoop()"); - if (mCalculateRouteDisposable != null) return; - - mCalculateRouteDisposable = new CompositeDisposable(); - - Disposable disposable = loopDynamicCalculateRouteInfo() - .doOnSubscribe(new Consumer() { - @Override - public void accept(Disposable disposable) throws Exception { - - } - }).doOnError(new Consumer() { - @Override - public void accept(Throwable throwable) throws Exception { - } - }) - .delay(TaxiUnmannedConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS, true) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(Integer integer) throws Exception { - } - }); - mCalculateRouteDisposable.add(disposable); - } - - private Observable loopDynamicCalculateRouteInfo(){ - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - if (emitter.isDisposed()) return; -// TaxiModel.INSTANCE.dynamicCalculateRouteInfo(); - emitter.onComplete(); - } - }); - } - - public void stopCalculateRouteInfoLoop() { - if (mCalculateRouteDisposable != null) { - CallerLogger.INSTANCE.i(M_TAXI + TAG, "stopCalculateRouteInfoLoop()"); - mCalculateRouteDisposable.dispose(); - mCalculateRouteDisposable = null; - } - } -} diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt index b80c55d352..07ae7c1258 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/model/TaxiUnmannedViewModel.kt @@ -25,6 +25,7 @@ import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.constant.TaxiUnmannedConst import com.mogo.och.taxi.constant.TaxtServingStatusManager import com.mogo.och.taxi.network.CarServiceManager +import com.mogo.och.taxi.network.CarServiceManager.cancelOrder import com.mogo.och.taxi.network.CarServiceManager.contrailList import com.mogo.och.taxi.network.CarServiceManager.queryCarOrderByOrderNo import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState @@ -72,8 +73,31 @@ class TaxiUnmannedViewModel : BaseViewModel(){ } is UnmannedIntent.CloseOrderByDriver -> { - + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ + val site = mCurrentTaskAndOrder!!.order!!.orderEndSite; + TaxiModel.arriveSite(site!!.siteId,true) + } } + + is UnmannedIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因 + handleCancelOrder() + } + } + } + + private fun handleCancelOrder() { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ + cancelOrder(mContext, mCurrentTaskAndOrder!!.order!!.orderNo, + object : OchCommonServiceCallback{ + override fun onSuccess(data: BaseData?) { + d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() = onSuccess") + } + + override fun onFail(code: Int, msg: String?) { + d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() $code $msg") + } + + }) } } @@ -93,7 +117,7 @@ class TaxiUnmannedViewModel : BaseViewModel(){ //需要将虚拟任务停掉, 虚拟任务会再开始接单后获取新的 updateUntruthTask(null) - if (mCurrentTaskAndOrder != null){ + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null){ VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦") }else{ VoiceNotice.showNotice("暂停接单啦") @@ -129,7 +153,9 @@ class TaxiUnmannedViewModel : BaseViewModel(){ } override fun onFail(code: Int, msg: String?) { - ToastUtilsOch.showWithCodeMessage(code, msg) + ToastUtilsOch.showWithCodeMessage(code, + "$msg curLatitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude}" + + " curLongitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude}") } override fun onError() { @@ -175,20 +201,14 @@ class TaxiUnmannedViewModel : BaseViewModel(){ } private fun updateUntruthTask(result: StartServiceRespBean.Result?) { - TaxiModel.updateUntruthTask(result) - - sendUiState { - copy( - taskAndOrderUiState = TaskAndOrderUiState.UNTRUTHTASK(result) - ) - } } private fun updateTaskAndOrderUi() { sendUiState { copy( - taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder) + taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(mCurrentTaskAndOrder, + TaxiModel.getCurUntruthTask()) ) } } @@ -197,7 +217,8 @@ class TaxiUnmannedViewModel : BaseViewModel(){ sendUiState { copy( - taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null) + taskAndOrderUiState = TaskAndOrderUiState.TASKANDORDER(null, + TaxiModel.getCurUntruthTask()) ) } } @@ -253,6 +274,8 @@ class TaxiUnmannedViewModel : BaseViewModel(){ TaxiModel.updateCurrentTaskAndOrder(result) + TaxiModel.updateStation() + updateTaskAndOrderUi() } @@ -265,7 +288,7 @@ class TaxiUnmannedViewModel : BaseViewModel(){ /** * 查询接驾/送驾任务轨迹集合 - * 注: 运营单刚来的时候, 有可能还在运行一个演练单, 要先跑完演练单才跑运营单 + * 注: 运营单刚来的时候, 有可能还在运行一个演练任务, 要先跑完演练任务才跑运营单 */ private fun queryOrderContrails(planningLines: Array?) { if (planningLines == null) return diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java index 44952b3790..591fb3c080 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/presenter/TaxiPresenter.java @@ -161,7 +161,7 @@ public class TaxiPresenter extends Presenter implements ITaxiADASS @Override public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { - + runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters,timeInSecond)); } @Override diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt index 85f3f8f73c..0f0a7ac692 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiBeingTaskFragment.kt @@ -22,6 +22,7 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverla 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.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.overlay.core.Level import com.mogo.map.overlay.point.Point import com.mogo.och.common.module.map.AmapNaviToDestinationModel @@ -36,6 +37,7 @@ import com.mogo.och.taxi.bean.OrderDetail import com.mogo.och.taxi.bean.OrderQueryRouteInfoRespBean import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean import com.mogo.och.taxi.bean.StartServiceRespBean +import com.mogo.och.taxi.constant.TaskStatusEnum import com.mogo.och.taxi.constant.TaskTypeEnum import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TAXI_END_MAP_MAKER @@ -87,8 +89,8 @@ class TaxiBeingTaskFragment : BaseFragment(), override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - d("viewmodel ==", "TaxiBeingTaskFragment onCreate") - mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(TaxiUnmannedViewModel::class.java) + d("viewModel ==", "TaxiBeingTaskFragment onCreate") + mViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())[TaxiUnmannedViewModel::class.java] } override fun initViews() { @@ -105,34 +107,35 @@ class TaxiBeingTaskFragment : BaseFragment(), //监听返回的数据状态 lifecycleScope.launchWhenStarted { - mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {state -> - d(TAG,"uiStateFlow: $state") - when(state){ + mViewModel.uiStateFlow.map {it.taskAndOrderUiState}.collect {taskAndOrderUiState -> + d(TAG,"uiStateFlow-taskAndOrderUiState: $taskAndOrderUiState") + when(taskAndOrderUiState){ is TaskAndOrderUiState.INIT -> { } is TaskAndOrderUiState.TASKANDORDER -> { - mCurrentTaskAndOrder = state.model - if (state.model == null && mCurrentUntruthTask == null){ - isHaveBeingOrder(false) - return@collect - } - updateCurrentOrderStatusChanged(state.model) - } - is TaskAndOrderUiState.UNTRUTHTASK -> { - mCurrentUntruthTask = state.untruthTask - if (state.untruthTask == null && mCurrentTaskAndOrder == null){ + mCurrentUntruthTask = taskAndOrderUiState.untruthTask + mCurrentTaskAndOrder = taskAndOrderUiState.taskAndOrder + + if ((taskAndOrderUiState.untruthTask == null && mCurrentTaskAndOrder != null + && mCurrentTaskAndOrder!!.endSite == null) || mCurrentTaskAndOrder == null){ isHaveBeingOrder(false) return@collect } + isHaveBeingOrder(true) - updateUntruthTask(state.untruthTask) + if (taskAndOrderUiState.untruthTask != null){ + updateUntruthTask(taskAndOrderUiState.untruthTask) + }else{ + updateCurrentOrderStatusChanged(taskAndOrderUiState.taskAndOrder) + } } is TaskAndOrderUiState.ORDERCANCEL -> { - updateOrderCancelUi(state.isCancel) + updateOrderCancelUi(taskAndOrderUiState.isCancel) + onCurrentOrderCancelDone() } } } @@ -148,13 +151,20 @@ class TaxiBeingTaskFragment : BaseFragment(), if (untruthTask == null) return updateUntruthTaskView() updateUntruthTaskUIData(untruthTask.siteName) + updateUntruthTaskOtherInfo() + } + + private fun updateUntruthTaskOtherInfo() { + if (mCurrentUntruthTask != null){ + startNaviToStation(false, mCurrentUntruthTask!!.gcjLat, + mCurrentUntruthTask!!.gcjLon) + } } private fun updateUntruthTaskUIData(siteName: String) { taskStatus.text = resources.getString(R.string.task_start_to_virtual_site) startStationName.text = resources.getString(R.string.task_current_loc) endStationName.text = siteName -// TODO("剩余历程和时间导航去更新taskOtherInfo") } private fun updateUntruthTaskView() { @@ -179,6 +189,26 @@ class TaxiBeingTaskFragment : BaseFragment(), naviToEnd.setOnClickListener(this) } + private fun updateRemainDistanceAndTime(isVoicePlay: Boolean){ + //根据任务状态计算剩余历程和时间 + if (mCurrentTaskAndOrder == null) return + + if (mCurrentTaskAndOrder!!.endSite != null + && mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code){ + + startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.endSite!!.gcjLat, + mCurrentTaskAndOrder!!.endSite!!.gcjLat) + return + } + + if (mCurrentTaskAndOrder!!.startSite != null + && mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code){ //演练任务和送驾任务 + + startNaviToStation(isVoicePlay,mCurrentTaskAndOrder!!.startSite!!.gcjLat, + mCurrentTaskAndOrder!!.startSite!!.gcjLat) + } + } + /** * 任务和订单信息 */ @@ -193,7 +223,7 @@ class TaxiBeingTaskFragment : BaseFragment(), /** * 根据任务类型判断任务显示, * 虚拟单, 显示在进行中 前往上车点 - * 演练单,显示演练单, 同时有订单显示在待服务中 + * 演练任务,显示演练任务, 同时有订单显示在待服务中 * 当前任务是接驾任务,显示订单状态+运营单 订单显示在进行中, 任务不再显示 */ val taskType = taskAndOrder.taskType // 任务类型 @@ -212,7 +242,6 @@ class TaxiBeingTaskFragment : BaseFragment(), taskTypeTv.text = resources.getString(R.string.task_exercise) startStationName.text = startSite.siteName endStationName.text = endSite.siteName -// TODO("剩余历程和时间导航去更新taskOtherInfo") } TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 送驾/接驾任务任务 if (order == null) return @@ -222,9 +251,10 @@ class TaxiBeingTaskFragment : BaseFragment(), startStationName.text = order.orderStartSite?.siteName endStationName.text = order.orderEndSite?.siteName updateOrderUI(order) -// TODO("剩余历程和时间导航去更新taskOtherInfo") } } + + updateRemainDistanceAndTime(false) } private fun updateOrderUI(order: OrderDetail) { @@ -232,7 +262,7 @@ class TaxiBeingTaskFragment : BaseFragment(), when(order.orderStatus){ TaxiOrderStatusEnum.None.code -> { //无 -// TODO("显示无订单页面") + isHaveBeingOrder(false) } TaxiOrderStatusEnum.Cancel.code -> { //取消 @@ -263,8 +293,6 @@ class TaxiBeingTaskFragment : BaseFragment(), R.raw.end_marker ) } - - clearSmallMapRouteLine() } TaxiOrderStatusEnum.JourneyCompleted.code -> { //服务完成 taskStatus.text = resources.getString(R.string.task_start_end_site) @@ -302,7 +330,6 @@ class TaxiBeingTaskFragment : BaseFragment(), R.raw.end_marker ) } - clearSmallMapRouteLine() } TaxiOrderStatusEnum.OnTheWayToEnd.code -> { //送驾中 taskStatus.text = resources.getString(R.string.task_start_end_site) @@ -427,25 +454,19 @@ class TaxiBeingTaskFragment : BaseFragment(), private fun updateUIShowStatus(taskType: Int, currentStatus: Int, order: OrderDetail?) { when (taskType) { - TaskTypeEnum.VirtualTask.code -> { //演练单 - taskStatus.visibility = View.VISIBLE - taskTypeTv.visibility = View.VISIBLE + TaskTypeEnum.VirtualTask.code -> { //演练任务 + cancelOrder.visibility = View.GONE orderPhoneAndNum.visibility = View.GONE - startStationName.visibility = View.VISIBLE - endStationName.visibility = View.VISIBLE taskClickBtn.visibility = View.GONE // currentStatus 0:空闲 1:获取任务 2:开始任务 3:到达目的地 naviToStart.visibility = View.GONE - naviToEnd.visibility = if (currentStatus == 2) View.VISIBLE else View.GONE - taskOtherInfo.visibility = if (currentStatus == 0) View.GONE else View.VISIBLE + naviToEnd.visibility = if (currentStatus >= TaskStatusEnum.StartTask.code) View.VISIBLE else View.GONE + taskOtherInfo.visibility = if (currentStatus == TaskStatusEnum.GetTask.code) View.GONE else View.VISIBLE } TaskTypeEnum.ToOrderEndTask.code,TaskTypeEnum.ToOrderStartTask.code -> {// 运营单(接驾任务、送驾任务) if (order == null) return - taskStatus.visibility = View.VISIBLE - taskTypeTv.visibility = View.VISIBLE + cancelOrder.visibility = View.VISIBLE orderPhoneAndNum.visibility = View.VISIBLE - startStationName.visibility = View.VISIBLE - endStationName.visibility = View.VISIBLE taskClickBtn.visibility = View.VISIBLE // orderStatus: 0 订单创建(为派单), 10 已派上司机(司机去往上车点), 20 司机到达上车点, // 30 乘客到达上车点, 40 服务中(去往目的地), 50 到达目的地, 60 已完成, 70 已取消 @@ -577,11 +598,6 @@ class TaxiBeingTaskFragment : BaseFragment(), closeOrderDialog.show() } -// showNotice( -// mActivity!!.getString( -// R.string.module_och_taxi_new_order -// ) - private fun clearOrderTag() { taskOtherInfo.text = "距离 - - 公里,用时 - - 分" } @@ -600,13 +616,10 @@ class TaxiBeingTaskFragment : BaseFragment(), if (being) { noTaskData.visibility = View.GONE mBeingOrderLayout.visibility = View.VISIBLE -// mTaxiFragment!!.changeOperationViewVisible(View.GONE) - clearSmallMapRouteLine() } else { noTaskData.visibility = View.VISIBLE noOrderDataTv.text = "暂无进行中订单" mBeingOrderLayout.visibility = View.GONE -// mTaxiFragment!!.changeOperationViewVisible(View.VISIBLE) } } catch (e: NullPointerException) { //可能会出现订单信息已经轮询回来,但进行中页面控件还未初始化完成的情况 TaxiModel.clearCurrentOCHOrder() @@ -618,37 +631,20 @@ class TaxiBeingTaskFragment : BaseFragment(), d(SceneConstant.M_TAXI + TAG, taskStatus.text.toString()) startOrEndService() } else if (v.id == cancelOrder.id) { - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){ - TaxiOrderCancelDialog(mActivity, - mCurrentTaskAndOrder!!.order!!.orderNo,mCurrentTaskAndOrder!!.order!!.orderStatus).show() - } - } else if (v.id == naviToStart.id) { - if (mTaxiFragment != null) { - showNaviToStartStationFragment() - } - } else if (v.id == naviToEnd.id) { - if (mTaxiFragment != null) { - showNaviToEndStationFragment(true) + if (mCurrentTaskAndOrder!!.order != null){ + TaxiOrderCancelDialog(mActivity,mCurrentTaskAndOrder!!.order!!.orderStatus + ) { type, reason -> + mViewModel.sendUiIntent(UnmannedIntent.CancelOrder(type,reason)) + } + .show() } + } else if (v.id == naviToStart.id || v.id == naviToEnd.id) { + showNaviToEndStationFragment(true) } } /** - * 显示/隐藏 前往乘客上车点的导航 - **/ - private fun showNaviToStartStationFragment() { -// if (mCurrentTaskAndOrder != null && -// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code -// ) { -// val orderStartStationLat = mCurrentOrder!!.startSiteGcjPoint[1] -// val orderStartStationLng = mCurrentOrder!!.startSiteGcjPoint[0] -// mTaxiFragment!!.showAmapNaviToStationFragment(true) -// startNaviToStation(true, orderStartStationLat, orderStartStationLng) -// } - } - - /** - * 显示/隐藏 前往乘客目的地的导航 + * 显示/隐藏 前往任务目的地的导航 * * @param isShow */ @@ -656,23 +652,25 @@ class TaxiBeingTaskFragment : BaseFragment(), mTaxiFragment!!.startNaviToEndStation(isShow) } - fun onCurrentOrderCancelDone() { + private fun onCurrentOrderCancelDone() { //去除起终点 - if (mCurrentTaskAndOrder != null) { -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_START_MAP_MAKER, -// mCurrentOrder!!.startSitePoint, -// R.raw.star_marker -// ) -// setOrRemoveMapMaker( -// false, -// TaxiUnmannedConst.TAXI_END_MAP_MAKER, -// mCurrentOrder!!.endSitePoint, -// R.raw.end_marker -// ) + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.startSite != null + && mCurrentTaskAndOrder!!.endSite != null) { + setOrRemoveMapMaker( + false, + TAXI_START_MAP_MAKER, + mCurrentTaskAndOrder!!.startSite!!.gcjLat, + mCurrentTaskAndOrder!!.startSite!!.gcjLon, + R.raw.star_marker + ) + setOrRemoveMapMaker( + false, + TAXI_END_MAP_MAKER, + mCurrentTaskAndOrder!!.endSite!!.gcjLat, + mCurrentTaskAndOrder!!.endSite!!.gcjLon, + R.raw.end_marker + ) } - clearSmallMapRouteLine() //提交取消订单后的回调 ToastUtils.showShort("订单取消成功") //更新界面 @@ -681,10 +679,6 @@ class TaxiBeingTaskFragment : BaseFragment(), clearOrderTag() } - private fun clearSmallMapRouteLine() { -// CallerSmpManager.clearPolyline(); - } - /** * 订单流转debug START */ @@ -698,11 +692,6 @@ class TaxiBeingTaskFragment : BaseFragment(), @RequiresApi(Build.VERSION_CODES.N) override fun onCurrentNaviDistAndTimeChanged(meters: Int, timeInSecond: Long) { updateDistanceAndTime(meters.toLong(), timeInSecond) -// if (mCurrentTaskAndOrder != null -// && mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code -// ) { -// mTaxiFragment!!.reportToEndDisAndTime(meters, timeInSecond) -// } } override fun reInitNaviAmap(isPlay: Boolean, isRestart: Boolean) { @@ -714,42 +703,39 @@ class TaxiBeingTaskFragment : BaseFragment(), mTaxiFragment!!.showAmapNaviToStationFragment(false) return } -// UiThreadHandler.postDelayed({ -// if (mCurrentTaskAndOrder != null && -// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code -// ) { -// val orderStartStationLat = mCurrentOrder!!.startSiteGcjPoint[1] -// val orderStartStationLng = mCurrentOrder!!.startSiteGcjPoint[0] -// startNaviToStation(false, orderStartStationLat, orderStartStationLng) -// } -// }, 2000) -// UiThreadHandler.postDelayed({ -// if (mCurrentTaskAndOrder != null && -// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToStart.code -// ) { -// if (naviToStart.visibility == View.GONE) { -// naviToStart.visibility = View.VISIBLE -// } -// } -// if (mCurrentTaskAndOrder != null && -// mCurrentTaskAndOrder!!.order.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code -// ) { -// if (naviToEnd.visibility == View.GONE) { -// naviToEnd.visibility = View.VISIBLE -// } -// } -// }, 3000) + UiThreadHandler.postDelayed({ + updateRemainDistanceAndTime(false) + }, 2000) + UiThreadHandler.postDelayed({ + if (mCurrentTaskAndOrder != null && + mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.GetTask.code + ) { + if (naviToStart.visibility == View.GONE) { + naviToStart.visibility = View.VISIBLE + } + } + if (mCurrentTaskAndOrder != null && + mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code + ) { + if (naviToEnd.visibility == View.GONE) { + naviToEnd.visibility = View.VISIBLE + } + } + }, 3000) } fun onNaviToEndAmap(isShow: Boolean) { -// if (mCurrentOrder != null && -// mCurrentOrder!!.orderStatus == TaxiOrderStatusEnum.OnTheWayToEnd.code -// ) { -// val orderEndStationLat = mCurrentOrder!!.endSiteGcjPoint[1] -// val orderEndStationLng = mCurrentOrder!!.endSiteGcjPoint[0] -// mTaxiFragment!!.showAmapNaviToStationFragment(isShow) -// startNaviToStation(isShow, orderEndStationLat, orderEndStationLng) -// } + if (mCurrentTaskAndOrder == null) return + + mTaxiFragment!!.showAmapNaviToStationFragment( + if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code) + isShow else true + ) + + updateRemainDistanceAndTime( + if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.StartTask.code) + isShow else true + ) } /** diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt index 812df16e1d..eb66fe52dc 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiFragment.kt @@ -1,12 +1,14 @@ package com.mogo.och.taxi.ui import android.annotation.SuppressLint +import android.os.Build import android.os.Bundle import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView +import androidx.annotation.RequiresApi import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.ViewModelProvider import com.alibaba.android.arouter.launcher.ARouter @@ -19,7 +21,6 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.provider.LoginService import com.mogo.och.taxi.R import com.mogo.och.taxi.base.BaseTaxiTabFragment -import com.mogo.och.taxi.constant.TaxiOrderStatusEnum import com.mogo.och.taxi.model.TaxiModel import com.mogo.och.taxi.model.TaxiUnmannedViewModel import com.mogo.och.taxi.network.LoginBusImpl @@ -28,7 +29,6 @@ import com.mogo.och.taxi.ui.unmanned.UnmannedIntent import com.mogo.och.taxi.utils.TPRouteDataTestUtils import kotlinx.android.synthetic.main.taxi_base_fragment.module_mogo_och_operation_status import kotlinx.android.synthetic.main.taxi_base_fragment.taxi_driver_role_tv -import kotlinx.coroutines.flow.map import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -241,6 +241,12 @@ class TaxiFragment : BaseTaxiTabFragment(), } } + @RequiresApi(Build.VERSION_CODES.N) + fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) { + if (null == serverOrdersFragmentWR || serverOrdersFragmentWR!!.get() == null) return + serverOrdersFragmentWR!!.get()!!.onCurrentOrderDistToEndChanged(meters, timeInSecond) + } + private fun testRouteInfoUpload() { TPRouteDataTestUtils.converToRouteData() } diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiOrderCancelDialog.java b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiOrderCancelDialog.java index 547f4239bc..cb371f43a1 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiOrderCancelDialog.java +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiOrderCancelDialog.java @@ -38,20 +38,18 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi private static final String TAG = "OCHTaxiOrderCancelDial"; protected WeakReference contextWeakReference; - private GridView mContentView; - private TextView mCancelCommitTv; - private TextView mDialogCancelTv; private String mCurrentReason = ""; private ContentAdapter mContentAdapter; private int mOrderStatus;//1:预约单,其他为即时单的状态, 主要是控制乘客上车 乘客下车这几个选项的显示 private String[] mContentArrays; - private String mOrderNo; - protected TaxiOrderCancelDialog(Context context, String orderNo, int orderStatus) { + private CommitReasonListener mCommitListener = null; + + protected TaxiOrderCancelDialog(Context context, int orderStatus,CommitReasonListener commitListener) { super(context,R.style.OrderCancelDialog); - mOrderNo = orderNo; this.mOrderStatus = orderStatus; contextWeakReference = new WeakReference<>(context); + this.mCommitListener = commitListener; initReasonArray(); } @@ -86,15 +84,6 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi } } - protected TaxiOrderCancelDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { - super(context, cancelable, cancelListener); - } - - protected TaxiOrderCancelDialog(Context context, int themeResId) { - super(context, themeResId); - } - - @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -122,11 +111,10 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi window.setAttributes(params); } - @RequiresApi(api = Build.VERSION_CODES.M) private void initView() { - mContentView = findViewById(R.id.module_och_taxi_order_cancel_content_gv); - mCancelCommitTv = findViewById(R.id.order_cancel_commit_tv); - mDialogCancelTv = findViewById(R.id.order_dialog_cancel_tv); + GridView mContentView = findViewById(R.id.module_och_taxi_order_cancel_content_gv); + TextView mCancelCommitTv = findViewById(R.id.order_cancel_commit_tv); + TextView mDialogCancelTv = findViewById(R.id.order_dialog_cancel_tv); mContentAdapter = new ContentAdapter(contextWeakReference.get(), mContentArrays); mContentView.setAdapter(mContentAdapter); mContentView.setSelector(new ColorDrawable(Color.TRANSPARENT)); @@ -140,12 +128,9 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi public void onClick(View v) { if (v.getId() == R.id.order_cancel_commit_tv) {//bt commit if (!TextUtils.isEmpty(mCurrentReason) && TaxiOrderCancelReasons.getType(mCurrentReason) != 0) { - if (1 == mOrderStatus){//订单 -// mOchTaxiFragmentWeak.get().cancelOrderById(mOrderNo, TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason); - //todo 取消还未执行的订单 - }else {//任务 - //todo 取消正在执行的任务 -// mOchTaxiFragmentWeak.get().cancelCurOrder(TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason); + //todo 取消正在执行的任务 + if (mCommitListener != null){ + mCommitListener.cancelCurOrder(TaxiOrderCancelReasons.getType(mCurrentReason),mCurrentReason); } dismiss(); }else { @@ -161,13 +146,13 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi public void onItemClick(AdapterView parent, View view, int position, long id) { CallerLogger.INSTANCE.d(M_TAXI + TAG,"mCurrentReason ="+ mContentArrays[position]); mCurrentReason = mContentArrays[position]; -// GradientDrawable background = (GradientDrawable) mCancelBt.getBackground();//GradientDrawable是Drawable的子类 -// background.setColor(Color.parseColor("#2B6EFF")); -// mCancelBt.setTextColor(Color.parseColor("#FFFFFF")); -// mCancelBt.setClickable(true); mContentAdapter.notifyCurrentReasons(mCurrentReason); } + interface CommitReasonListener{ + void cancelCurOrder(int type, String reason); + } + class ContentAdapter extends BaseAdapter{ private Context context; diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt index 6a531724f4..cddba20469 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiReserveOrderFragment.kt @@ -70,7 +70,7 @@ class TaxiReserveOrderFragment : BaseFragment() { } is TaskAndOrderUiState.TASKANDORDER -> { - updateOrderChanged(state.model) + updateOrderChanged(state.taskAndOrder) } } } diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt index 5b739d84dc..f81e0cee14 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/TaxiServerOrdersFragment.kt @@ -3,10 +3,12 @@ package com.mogo.och.taxi.ui import android.annotation.SuppressLint import android.graphics.Color import android.graphics.Typeface +import android.os.Build import android.os.Bundle import android.util.TypedValue import android.view.View import android.widget.TextView +import androidx.annotation.RequiresApi import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentPagerAdapter @@ -155,6 +157,12 @@ class TaxiServerOrdersFragment : BaseFragment(){ beingTaskFragment!!.onNaviToEndAmap(isShow) } + @RequiresApi(Build.VERSION_CODES.N) + fun onCurrentOrderDistToEndChanged(meters: Long, timeInSecond: Long) { + if (null == beingTaskFragment) return + beingTaskFragment!!.updateDistanceAndTime(meters, timeInSecond) + } + companion object { const val TAG = "TaxiServerOrdersFragment" fun newInstance(): TaxiServerOrdersFragment { diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedIntent.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedIntent.kt index 454b6bcce4..9ce117ba92 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedIntent.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedIntent.kt @@ -8,29 +8,11 @@ import com.mogo.och.taxi.base.IUiIntent */ sealed class UnmannedIntent: IUiIntent{ - //获取接单/暂停接单状态 - object GetReceivingOrderState : UnmannedIntent() - //开始接单 、 暂停接单 object StartOrPauseReceivingOrder : UnmannedIntent() - //获取当前任务信息 - object GetCurrentTask : UnmannedIntent() - - //到站获取下一个执行的任务信息 - object GetNextTask: UnmannedIntent() - - //开始接单后获取要前往的虚拟站点 - object GetVirtualStation: UnmannedIntent() - - //开始执行任务 - object StartTask: UnmannedIntent() - - //到达乘客上车点 - object ArrivedOrderStartStation: UnmannedIntent() - - //到达乘客下车点 - object ArrivedOrderEndStation: UnmannedIntent() + //取消订单 + class CancelOrder(type: Int, reason: String) : UnmannedIntent() //订单服务完成 object JourneyCompleted: UnmannedIntent() diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt index 17551fa41b..9f6f99f052 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/java/com/mogo/och/taxi/ui/unmanned/UnmannedState.kt @@ -1,27 +1,15 @@ package com.mogo.och.taxi.ui.unmanned import com.mogo.och.taxi.base.IUiState -import com.mogo.och.taxi.bean.OrderDetail import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean -import com.mogo.och.taxi.bean.Site import com.mogo.och.taxi.bean.StartServiceRespBean -sealed class TaskUiState { - object INIT : TaskUiState() - data class SUCCESS(val models: List) : TaskUiState() -} -sealed class OrderUiState { - object INIT : OrderUiState() - data class SUCCESS(val models: List) : OrderUiState() -} +data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiState sealed class TaskAndOrderUiState { object INIT : TaskAndOrderUiState() - data class TASKANDORDER(val model: QueryCurrentTaskRespBean.Result?) : TaskAndOrderUiState()//演练、接驾、送驾任务 + data class TASKANDORDER(val taskAndOrder: QueryCurrentTaskRespBean.Result?, val untruthTask: StartServiceRespBean.Result?) : TaskAndOrderUiState()//演练任务、接驾、送驾任务 - data class UNTRUTHTASK(val untruthTask: StartServiceRespBean.Result?) : TaskAndOrderUiState()//伪任务 - data class ORDERCANCEL(var isCancel: Boolean) : TaskAndOrderUiState()//伪任务 + data class ORDERCANCEL(var isCancel: Boolean) : TaskAndOrderUiState()//取消订单 } - -data class UnmannedState(val taskAndOrderUiState: TaskAndOrderUiState) : IUiState diff --git a/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/unmanned_being_order.xml b/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/unmanned_being_order.xml index 1dc02a389f..80e9dcfd34 100644 --- a/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/unmanned_being_order.xml +++ b/OCH/taxi/mogo-och-taxi-unmanned/src/main/res/layout/unmanned_being_order.xml @@ -94,6 +94,7 @@ android:layout_width="@dimen/dp_48" android:layout_height="@dimen/dp_48" android:src="@drawable/taxi_navi_icon" + app:layout_goneMarginEnd="@dimen/dp_40" app:layout_constraintRight_toRightOf="@+id/cancelOrder" app:layout_constraintTop_toTopOf="@+id/startStationName" app:layout_constraintBottom_toBottomOf="@id/startStationName"/> @@ -103,6 +104,7 @@ android:layout_width="@dimen/dp_48" android:layout_height="@dimen/dp_48" android:src="@drawable/taxi_navi_icon" + app:layout_goneMarginEnd="@dimen/dp_40" app:layout_constraintRight_toRightOf="@+id/cancelOrder" app:layout_constraintTop_toTopOf="@+id/endStationName" app:layout_constraintBottom_toBottomOf="@id/endStationName"/>