From 71da9d5a2486062740da5e1ffc2ef98168769c5c Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 13 Sep 2024 19:37:59 +0800 Subject: [PATCH] [6.7.0] [fea] [runningtask] --- .../weaknet/callback/IBusLinesCallback.java | 15 +- .../mogo/och/weaknet/model/BusLineModel.kt | 10 +- .../com/mogo/och/weaknet/model/OrderModel.kt | 58 +++----- .../och/weaknet/presenter/BusPresenter.kt | 2 +- .../och/weaknet/ui/bizswitch/SwitchBizView.kt | 52 ++++--- .../weaknet/ui/bizswitch/SwtichBizeModel.kt | 36 ++++- .../weaknet/ui/switchline/SwitchLineView.kt | 12 +- .../weaknet/ui/switchtask/SwitchTaskView.kt | 10 +- .../weaknet/ui/switchtask/SwtichTaskModel.kt | 4 - .../ui/taskrunning/TaskRunningAdapter.kt | 129 ++++++++++++++++++ .../ui/taskrunning/TaskRunningModel.kt | 41 ++++++ .../weaknet/ui/taskrunning/TaskRunningView.kt | 96 +++++++++++++ .../och/weaknet/view/BizLeaveStationView.kt | 129 ++++++++++++++++++ .../{ui/loading => view}/LoadingViewBig.kt | 2 +- .../{ui/loading => view}/LoadingViewSmall.kt | 2 +- .../drawable-nodpi/bus_runnint_task_end.png | Bin 0 -> 1798 bytes .../bus_runnint_task_middle.png | Bin 0 -> 610 bytes .../drawable-nodpi/bus_runnint_task_past.png | Bin 0 -> 261 bytes .../drawable-nodpi/bus_runnint_task_start.png | Bin 0 -> 1606 bytes .../bus_task_leave_station_slide_bg.png | Bin 0 -> 6507 bytes .../drawable/bus_task_current_station_bg.xml | 6 + .../drawable/bus_task_leave_station_slede.xml | 8 ++ ...shuttle_weak_running_station_list_item.xml | 60 ++++++++ .../res/layout/shuttle_weak_switch_biz.xml | 15 +- .../res/layout/shuttle_weak_switch_task.xml | 2 +- .../shuttle_weak_task_leave_station_view.xml | 31 +++++ .../res/layout/shuttle_weak_task_running.xml | 65 +++++++++ .../src/main/res/values/colors.xml | 2 + .../src/main/res/values/strings.xml | 1 + 29 files changed, 690 insertions(+), 98 deletions(-) create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningAdapter.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningModel.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/BizLeaveStationView.kt rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/{ui/loading => view}/LoadingViewBig.kt (98%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/{ui/loading => view}/LoadingViewSmall.kt (97%) create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_end.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_middle.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_past.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_start.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_task_leave_station_slide_bg.png create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_current_station_bg.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_leave_station_slede.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_running_station_list_item.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_task_leave_station_view.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_task_running.xml diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/callback/IBusLinesCallback.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/callback/IBusLinesCallback.java index 41d43009ee..68d9afcd74 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/callback/IBusLinesCallback.java +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/callback/IBusLinesCallback.java @@ -1,7 +1,12 @@ package com.mogo.och.weaknet.callback; +import com.mogo.och.data.bean.BusStationBean; import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse; import com.mogo.och.weaknet.bean.BusQueryLinesResponse; +import com.mogo.och.weaknet.database.bean.TaskDataBean; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -11,10 +16,14 @@ import java.util.List; */ public interface IBusLinesCallback { default void onBusLinesChange(List data){} - void onChangeLineIdSuccess(); + default void onChangeLineIdSuccess(){} default void onBusLineTasks(List o){} - void onRefreshSuccess(long currentTimeStamp); + default void onRefreshSuccess(long currentTimeStamp){} - void onChangeLineIdFail(); + default void onChangeLineIdFail(){} + + default void onNoRunningTask(){} + + default void onRunningTask(){} } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/BusLineModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/BusLineModel.kt index 18eeb09bc3..53e5d70ba4 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/BusLineModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/BusLineModel.kt @@ -323,6 +323,9 @@ object BusLineModel { val contraiInfoTemp = ContraiRepository.queryAutopilotInfoByLineid(it) ContrailDataBean.save2Common(contraiInfoTemp) } + mBusLinesCallbackMap.forEach { callback-> + callback.value.onRunningTask() + } } } @@ -341,7 +344,7 @@ object BusLineModel { it.status = TaskDataBean.used } TaskRepository.addOrUpdate(*tempList.toTypedArray()) - OrderModel.queryBusRoutes() + loadStartedTaskAndDefaultInfo() OchChainLogManager.writeChainLogDb("加载任务", "异常情况:多个正在进行的任务 task:${runningTaskInfo} event:${queryLastData.taskId}有一个和event表对应使用相同的一个 另一个置为已使用") return } @@ -359,6 +362,11 @@ object BusLineModel { mContext?.let { contextit -> OrderServiceManager.queryBusRoutes(contextit,object :OchCommonServiceCallback{ override fun onSuccess(response: BusRoutesResponse?) { + if(response?.data == null){ + mBusLinesCallbackMap.forEach { callback-> + callback.value.onNoRunningTask() + } + } response?.data?.let { if (!it.sites.isNullOrEmpty()&&it.sites.size>1) { val queryTaskById = TaskRepository.queryTaskById(it.taskId.toLong()) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt index a0ae00d32f..8bb51c8630 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt @@ -320,30 +320,6 @@ object OrderModel { BusLineModel.sendTaskDetailsToClients() } - /** - * 离站上报成功后渲染站点 - * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, - * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理,不能直接渲染 - */ - private fun leaveStationSuccess() { - onStartAutopilot() - LineManager.getStations { start, end -> - leaveTTSTips(end.name, end.nameKr) - //给bus外屏发送 - LedScreenManager.sendTripInfo2Led( - LedScreenManager.LEAVE_STATION, - LineManager.lineInfos!!.lineName, - start.name, - end.name, - BusLineModel.isLastStation()==true - ) - } - - BusLineModel.leaveStation() - - updateBusStatus() - } - private fun onStartAutopilot() { //开启自动驾驶 2.10.0: 如果自动驾驶状态下开启, 非自动驾驶状态下不开启,需手动点击自动驾驶按钮开启 isGoingToNextStation = true @@ -468,18 +444,6 @@ object OrderModel { updateBusStatus() } - /** - * 离站上报 - */ - private fun leaveStation() { - if (LineManager.endStation==null) { - OchChainLogManager.writeChainLog("滑动出发", "未设置终点坐标") - return - } - isArrivedStation = false - leaveStationSuccess() - } - //车站10s后播报 private fun leaveTTSTips(nextStation: String?, nextStationKr: String?) { UiThreadHandler.postDelayed({ //延迟10s播报 @@ -518,7 +482,27 @@ object OrderModel { abortTask() return } - leaveStation() + if (LineManager.endStation==null) { + OchChainLogManager.writeChainLog("滑动出发", "未设置终点坐标") + return + } + isArrivedStation = false + onStartAutopilot() + LineManager.getStations { start, end -> + leaveTTSTips(end.name, end.nameKr) + //给bus外屏发送 + LedScreenManager.sendTripInfo2Led( + LedScreenManager.LEAVE_STATION, + LineManager.lineInfos!!.lineName, + start.name, + end.name, + BusLineModel.isLastStation()==true + ) + } + + BusLineModel.leaveStation() + + updateBusStatus() } /** diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusPresenter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusPresenter.kt index 5859665413..7805905fbd 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusPresenter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusPresenter.kt @@ -214,7 +214,7 @@ class BusPresenter(view: ShuttleFragment?) : Presenter(view), override fun onStatusChange(currentStatus: LoginStatusEnum) { d(SceneConstant.M_BUS + TAG, " loginStatus =" + isLogin()) if (isLogin()) { - OrderModel.queryBusRoutes() + //OrderModel.queryBusRoutes() } else { BusTrajectoryManager.getInstance().stopTrajReqLoop() BusTrajectoryManager.getInstance().stopTrajReqLoop() diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt index 72b45359be..7b5e9ad019 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt @@ -14,6 +14,7 @@ import com.mogo.och.weaknet.bean.BusQueryLinesResponse import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.loading_biz import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.swtichLine import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.swtichTask +import kotlinx.android.synthetic.main.shuttle_weak_switch_biz.view.taskRunning class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallback { @@ -66,60 +67,55 @@ class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.SwtichLineViewCallbac * 初始化数据 */ override fun loadLineData() { - showLoadingView() swtichLine.loadingDatas() } - override fun showSwitchTaskByLineInfo(lineInfo: BusQueryLinesResponse.Result) { // 展示loading showLoadingView() swtichTask.queryTaskByLineInfo(lineInfo) } + // 展示选择任务页面 override fun showSwitchTaskInfo() { val endLoading = System.currentTimeMillis() - val dex = endLoading - startLoading + + val dex = (100-(endLoading - startLoading)).takeIf { it>=0 }?:0 CallerLogger.d(TAG,"展示线路任务 lading 展示了 ${dex}毫秒") - if(dex <100){ - ThreadUtils.runOnUiThreadDelayed({ - loading_biz.visibility = GONE - swtichLine.visibility = GONE - swtichTask.visibility = VISIBLE - },100-dex,ThreadUtils.MODE.QUEUE) - }else{ + + ThreadUtils.runOnUiThreadDelayed({ loading_biz.visibility = GONE swtichLine.visibility = GONE swtichTask.visibility = VISIBLE - } + taskRunning.visibility = GONE + },dex,ThreadUtils.MODE.QUEUE) } // 展示选择线路页面 override fun showSwtichLineView() { val endLoading = System.currentTimeMillis() - val dex = endLoading - startLoading + val dex = (100-(endLoading - startLoading)).takeIf { it>=0 }?:0 CallerLogger.d(TAG,"展示线路 lading 展示了 ${dex}毫秒") - if(dex <100){ - ThreadUtils.runOnUiThreadDelayed({ - loading_biz.visibility = GONE - swtichLine.visibility = VISIBLE - swtichTask.visibility = GONE - },100-dex,ThreadUtils.MODE.QUEUE) - }else{ + ThreadUtils.runOnUiThreadDelayed({ loading_biz.visibility = GONE swtichLine.visibility = VISIBLE swtichTask.visibility = GONE - } + taskRunning.visibility = GONE + },dex,ThreadUtils.MODE.QUEUE) } - - fun showSwitchTaskView(){ - + // 展示正在进行的任务 + override fun loadRunningTask() { + val endLoading = System.currentTimeMillis() + val dex = (100-(endLoading - startLoading)).takeIf { it>=0 }?:0 + CallerLogger.d(TAG,"展示线路 lading 展示了 ${dex}毫秒") + ThreadUtils.runOnUiThreadDelayed({ + loading_biz.visibility = GONE + swtichLine.visibility = GONE + swtichTask.visibility = GONE + taskRunning.visibility = VISIBLE + taskRunning.showRunningTaskInfo() + },dex,ThreadUtils.MODE.QUEUE) } - fun showRunningTaskView(){ - - } - - } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt index e24cb8cdfe..e7a16205f9 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt @@ -1,8 +1,12 @@ package com.mogo.och.weaknet.ui.bizswitch import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.data.bean.BusStationBean import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.weaknet.callback.IBusLinesCallback +import com.mogo.och.weaknet.database.bean.TaskDataBean import com.mogo.och.weaknet.model.BusLineModel /** @@ -10,22 +14,27 @@ import com.mogo.och.weaknet.model.BusLineModel * @description BadCase录包管理页面 * @since: 2022/12/15 */ -class SwtichBizeModel : ViewModel() { +class SwtichBizeModel : ViewModel(), IBusLinesCallback { private val TAG = SwtichBizeModel::class.java.simpleName - private var viewCallback:SwtichLineViewCallback?=null + private var viewCallback: SwtichLineViewCallback? = null override fun onCleared() { + BusLineModel.setBusLinesCallback(TAG, null) } - fun setDistanceCallback(viewCallback:SwtichLineViewCallback){ + fun setDistanceCallback(viewCallback: SwtichLineViewCallback) { this.viewCallback = viewCallback - this.viewCallback?.loadLineData() + BusLineModel.setBusLinesCallback(TAG, this) + this.viewCallback?.showLoadingView() + ThreadUtils.getIoPool().execute { + BusLineModel.loadStartedTaskAndDefaultInfo() + } } - fun loadingSwitchTask(lineInfo:BusQueryLinesResponse.Result){ + fun loadingSwitchTask(lineInfo: BusQueryLinesResponse.Result) { viewCallback?.showSwitchTaskByLineInfo(lineInfo) } @@ -34,9 +43,11 @@ class SwtichBizeModel : ViewModel() { } fun showSwitchLineInfo() { + viewCallback?.showLoadingView() viewCallback?.loadLineData() } - fun showSwitchLineInfoResult(){ + + fun showSwitchLineInfoResult() { viewCallback?.showSwtichLineView() } @@ -44,13 +55,24 @@ class SwtichBizeModel : ViewModel() { } - interface SwtichLineViewCallback{ + interface SwtichLineViewCallback { fun showSwtichLineView() fun showLoadingView() fun showSwitchTaskByLineInfo(lineInfo: BusQueryLinesResponse.Result) fun showSwitchTaskInfo() fun loadLineData() + fun loadRunningTask() } + + override fun onNoRunningTask() { + this.viewCallback?.loadLineData() + CallerLogger.d(TAG,"没有任务去加载线路") + } + + override fun onRunningTask() { + this.viewCallback?.loadRunningTask() + CallerLogger.d(TAG,"有任务去加载正在执行的任务") + } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt index 72cff90e0a..77c8327af8 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.findViewTreeViewModelStoreOwner import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.view.SpacesItemDecoration import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler @@ -54,6 +55,8 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba private lateinit var linearLayoutManager:LinearLayoutManager + private var animatorStart = System.currentTimeMillis() + init { LayoutInflater.from(context).inflate(R.layout.shuttle_weak_switch_line, this, true) initView() @@ -79,6 +82,7 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba aciv_refresh_task.onClick { viewModel?.refreshTask() + animatorStart = System.currentTimeMillis() if(animator==null) { animator = ObjectAnimator.ofFloat(aciv_refresh_task, "rotation", 0f, 360f) animator?.setDuration(1000) // 设置动画持续时间 @@ -93,6 +97,7 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba * 初始化数据 */ fun loadingDatas() { + CallerLogger.d(TAG,"加载线路去") viewModel?.queryBusLines() viewModel?.setRefreshTime() } @@ -120,6 +125,7 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba showNoData(false) mAdapter.setDataList(data) } + CallerLogger.d(TAG,"加载线路成功") viewbizModel?.showSwitchLineInfoResult() } @@ -144,12 +150,14 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba } override fun refreshDate(formatLongToString: String?) { - UiThreadHandler.post({ + val endTime = System.currentTimeMillis() + val dex = (1000-(endTime - animatorStart)).takeIf { it>=0 }?:0 + UiThreadHandler.postDelayed({ formatLongToString?.let { actv_last_refresh_date.text = ResourcesUtils.getString(R.string.bus_refresh_time,it) animator?.cancel() } - },UiThreadHandler.MODE.QUEUE) + },dex,UiThreadHandler.MODE.QUEUE,) } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt index 7d0b96feb9..d89cf61e50 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt @@ -86,13 +86,6 @@ class SwitchTaskView: WindowRelativeLayout, SwtichTaskModel.SwtichLineViewCallba } } - /** - * 初始化数据 - */ - private fun initDatas() { - viewModel?.queryBusLines() - } - override fun onAttachedToWindow() { super.onAttachedToWindow() @@ -103,13 +96,12 @@ class SwitchTaskView: WindowRelativeLayout, SwtichTaskModel.SwtichLineViewCallba ViewModelProvider(it).get(SwtichBizeModel::class.java) } viewModel?.setDistanceCallback(this) - initDatas() } fun queryTaskByLineInfo(lineInfo: BusQueryLinesResponse.Result) { viewModel?.queryBusLineTasksById(lineInfo) busLineName.text = lineInfo.name - actvLineEndStationName.text = lineInfo.endSiteName + actvLineEndStationName.text = "往${lineInfo.endSiteName}方向" } override fun showTaskByLineIdResult(taskList: MutableList) { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwtichTaskModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwtichTaskModel.kt index a9d06374c6..13917d3e6a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwtichTaskModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwtichTaskModel.kt @@ -35,10 +35,6 @@ class SwtichTaskModel : ViewModel(), IBusLinesCallback { BusLineModel.setBusLinesCallback(TAG,this) } - fun queryBusLines() { - BusLineModel.queryBusLines() - } - fun queryBusLineTasksById(lineInfo: BusQueryLinesResponse.Result) { tasksBelongLine = lineInfo BusLineModel.queryBusLineTasksById(lineInfo.lineId) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningAdapter.kt new file mode 100644 index 0000000000..2047f23ef4 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningAdapter.kt @@ -0,0 +1,129 @@ +package com.mogo.och.weaknet.ui.taskrunning + +import android.annotation.SuppressLint +import android.content.Context +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.AppCompatTextView +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.DiffUtil.Callback +import androidx.recyclerview.widget.RecyclerView +import com.mogo.och.common.module.utils.ResourcesUtils +import com.mogo.och.data.bean.BusStationBean +import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.shuttle.weaknet.R +import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse +import me.jessyan.autosize.utils.AutoSizeUtils + +/** + * 路线列表adapter + */ +class TaskRunningAdapter( + private val mContext: Context, + val mData: MutableList +) : RecyclerView.Adapter() { + + companion object{ + const val TAG = "TaskRunningAdapter" + } + private var startStationIndex:Int = -1 + + @SuppressLint("NotifyDataSetChanged") + fun setDataList(dataList: List, startStationIndex:Int) { + this.startStationIndex = startStationIndex + this.mData.clear() + this.mData.addAll(dataList) + notifyDataSetChanged() + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): TaskRunningViewHolder { + val view = LayoutInflater.from(mContext).inflate( + R.layout.shuttle_weak_running_station_list_item, parent, false + ) + return TaskRunningViewHolder(view) + } + + override fun onBindViewHolder(holder: TaskRunningViewHolder, position: Int) { + val currentPosition = holder.bindingAdapterPosition + val line = mData[currentPosition] + holder.actvStationName.text = line.name + + if(currentPosition { + holder.acivStationHeadBig.visibility = View.VISIBLE + holder.acivStationHead.visibility = View.INVISIBLE + holder.acivStationHeadBig.setImageResource(R.drawable.bus_runnint_task_start) + } + mData.size-1 -> { + holder.acivStationHeadBig.visibility = View.VISIBLE + holder.acivStationHead.visibility = View.INVISIBLE + holder.acivStationHeadBig.setImageResource(R.drawable.bus_runnint_task_end) + } + else -> { + holder.acivStationHeadBig.visibility = View.GONE + holder.acivStationHead.visibility = View.VISIBLE + holder.acivStationHead.setImageResource(R.drawable.bus_runnint_task_middle) + } + } + + } + + override fun getItemCount(): Int { + return mData.size + } + + class TaskRunningViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val actvStationName: AppCompatTextView = itemView.findViewById(R.id.actv_station_name)//站点名称 + val acivStationHead: AppCompatImageView = itemView.findViewById(R.id.aciv_station_head)//线路标识 + val acivStationHeadBig: AppCompatImageView = itemView.findViewById(R.id.aciv_station_head_big)//线路标识 + val actvWriteOffCount: AppCompatTextView = itemView.findViewById(R.id.actv_write_off_count) //此战核销的人数 + } + + interface LineItemClickListener { + fun onItemClick(position: Int,close:Boolean) + } + + inner class MyDiffCallback(private val oldData:List, private val newData:List): + Callback(){ + override fun getOldListSize(): Int { + return oldData.size + } + + override fun getNewListSize(): Int { + return newData.size + } + + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = oldData[oldItemPosition] + val newItem = newData[newItemPosition] + return oldItem == newItem + } + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = oldData[oldItemPosition] + val newItem = newData[newItemPosition] + return oldItem == newItem + } + + } +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningModel.kt new file mode 100644 index 0000000000..6961eabe2d --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningModel.kt @@ -0,0 +1,41 @@ +package com.mogo.och.weaknet.ui.taskrunning + +import androidx.lifecycle.ViewModel +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.weaknet.callback.IBusLinesCallback +import com.mogo.och.weaknet.model.BusLineModel +import com.mogo.och.weaknet.model.BusLineModel.executableChangeTime +import com.mogo.och.weaknet.model.OrderModel + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +class TaskRunningModel : ViewModel() { + + private val TAG = TaskRunningModel::class.java.simpleName + + private var viewCallback:SwtichLineViewCallback?=null + + + override fun onCleared() { + } + + fun setDistanceCallback(viewCallback:SwtichLineViewCallback){ + this.viewCallback = viewCallback + } + + fun leaveStation() { + OrderModel.autoDriveToNextStation() + } + + interface SwtichLineViewCallback{ + + } + +} + diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt new file mode 100644 index 0000000000..55ef1e14af --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/TaskRunningView.kt @@ -0,0 +1,96 @@ +package com.mogo.och.weaknet.ui.taskrunning + +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.utilcode.mogo.view.SpacesItemDecoration +import com.mogo.och.common.module.manager.autopilot.line.LineManager +import com.mogo.och.shuttle.weaknet.R +import com.mogo.och.weaknet.model.BusLineModel +import com.mogo.och.weaknet.ui.bizswitch.SwtichBizeModel +import com.mogo.och.weaknet.ui.switchline.SwitchLineAdapter +import com.mogo.och.weaknet.view.BizLeaveStationView.SlideListener +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_rv +import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.aciv_task_leave_station_slide_bg +import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.actv_running_task_last_station +import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.actv_running_task_time +import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.bus_task_running_line_name +import kotlinx.android.synthetic.main.shuttle_weak_task_running.view.rl_running_task_station_list +import me.jessyan.autosize.utils.AutoSizeUtils + + +class TaskRunningView: ConstraintLayout, TaskRunningModel.SwtichLineViewCallback { + + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + + companion object { + const val TAG = "TaskRunningView" + } + + private var viewModel:TaskRunningModel?=null + private var viewbizModel:SwtichBizeModel?=null + + private lateinit var mAdapter: TaskRunningAdapter + + private var animator:ObjectAnimator?=null + + + private lateinit var linearLayoutManager:LinearLayoutManager + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_task_running, this, true) + initView() + } + + private fun initView(){ + linearLayoutManager = LinearLayoutManager(context) + rl_running_task_station_list.setLayoutManager(linearLayoutManager) + mAdapter = TaskRunningAdapter(context, mutableListOf()) + rl_running_task_station_list.addItemDecoration( + SpacesItemDecoration( + AutoSizeUtils.dp2px(context,20f) + ) + ) + rl_running_task_station_list.setAdapter(mAdapter) + aciv_task_leave_station_slide_bg.setSlideListener(object : SlideListener{ + override fun slideEnd() { + viewModel?.leaveStation() + } + }) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(TaskRunningModel::class.java) + } + viewbizModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SwtichBizeModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + fun showRunningTaskInfo() { + bus_task_running_line_name.text = LineManager.lineInfos?.lineName?:"" + actv_running_task_time.text = BusLineModel.getTaskTime() + BusLineModel.stationList?.takeIf { it.size>2 }?.let { + actv_running_task_last_station.text = "往${it.last().name ?: ""}" + mAdapter.setDataList(it,BusLineModel.startStationIndex) + } + + } +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/BizLeaveStationView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/BizLeaveStationView.kt new file mode 100644 index 0000000000..32d0a3d972 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/BizLeaveStationView.kt @@ -0,0 +1,129 @@ +package com.mogo.och.weaknet.view + +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.MotionEvent +import androidx.appcompat.widget.AppCompatTextView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintSet +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.shuttle.weaknet.R + +class BizLeaveStationView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + companion object { + const val TAG = "LoadingMapStatusView" + } + + + private var initialX = 0f + private var initialY = 0f + private val tempSet = ConstraintSet() + + private var draggableButton: AppCompatTextView + + private var slideListener:SlideListener?=null + + fun setSlideListener(slideListener:SlideListener){ + this.slideListener = slideListener + } + + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_task_leave_station_view, this, true) + draggableButton = findViewById(R.id.actv_draggable) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerLogger.d(TAG,"onAttachedToWindow") + } + + + /** + * 为该组件的触碰事件重写事件处理方法 + */ + override fun onTouchEvent(event: MotionEvent?): Boolean { + when (event?.action) { + MotionEvent.ACTION_DOWN -> { + initialX = event.rawX; + initialY = event.rawY; + } + MotionEvent.ACTION_MOVE -> { + val dx = event.rawX - initialX; + val dy = event.rawY - initialY; + initialX = event.rawX; + initialY = event.rawY; + + if(draggableButton.translationX<0){ + tempSet.clone(this) + tempSet.setTranslationX(draggableButton.id, 0f) + tempSet.applyTo(this) + }else if(draggableButton.translationX>=0&&draggableButton.translationX<=width-draggableButton.width){ + tempSet.clone(this) + val dex = (draggableButton.translationX + dx).takeIf { it>=0 }?:0f + val newDex = dex.takeIf { it<=width-draggableButton.width }?:(width-draggableButton.width).toFloat() + tempSet.setTranslationX(draggableButton.id, newDex) + tempSet.applyTo(this) + }else{ + tempSet.clone(this) + val dex = (draggableButton.translationX + dx).takeIf { it<=width-draggableButton.width }?:(width-draggableButton.width).toFloat() + tempSet.setTranslationX(draggableButton.id, dex) + tempSet.applyTo(this) + } + } + MotionEvent.ACTION_UP -> { + if(draggableButton.translationX<(width-draggableButton.width)){ + ObjectAnimator.ofFloat( + draggableButton, "translationX", draggableButton.translationX, + 0f + ).apply { + duration = 100 + }.start() + }else if (draggableButton.translationX>=(width-draggableButton.width)){ + slideListener?.slideEnd() + }else{ + ObjectAnimator.ofFloat( + draggableButton, "translationX", draggableButton.translationX, + 0f + ).apply { + duration = 100 + }.start() + } + } + else -> {} + } + return true + } + + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + ObjectAnimator.ofFloat( + draggableButton, "translationX", draggableButton.translationX, + 0f + ).apply { + duration = 100 + }.start() + } + } + + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerLogger.d(TAG,"onDetachedFromWindow") + } + + interface SlideListener{ + fun slideEnd() + } + + + +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewBig.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/LoadingViewBig.kt similarity index 98% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewBig.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/LoadingViewBig.kt index 260bf2d547..5f1f12f2d2 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewBig.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/LoadingViewBig.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.loading +package com.mogo.och.weaknet.view import android.animation.ObjectAnimator import android.content.Context diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewSmall.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/LoadingViewSmall.kt similarity index 97% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewSmall.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/LoadingViewSmall.kt index d6cbcdff9d..2a73441215 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewSmall.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/view/LoadingViewSmall.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.loading +package com.mogo.och.weaknet.view import android.animation.ObjectAnimator import android.content.Context diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_end.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_end.png new file mode 100755 index 0000000000000000000000000000000000000000..e54309848ce50051cb99d8ce19ff62b2b1dd20e2 GIT binary patch literal 1798 zcmWlZ2{hZ;9>+7S);z_a3xktVty0w1QA_I;vG?Va|7u?oirR{#$xxlHhIZP{)P!QR zRM9qNETz_{k!Pzlc2ZG^h(~O(>-+nhd(S=hch3F&e&6rC=cZgCI?BnY%HVJ~IcFz= zJGL6^&F}Z`MVgfgakzcCS1yD0*w&@j`T8oPTMR`kqWYyk{04fW5R6<#4ND;x4ivG3 z7*@C?Y@&W&5z7Wps}P7=M}uY%vyb4ZVvx4$LF|KFx}f9vK-3C)bsjM+2X&Yreb>W{ z13P!_#Y04h7Z*1E0BOI4G+qPP5%)pZp$*c=1F%8c@vv`&DVrXFeAv7WJW+%-fRJYq z(`v|P61~8JZ+t^-*)aYU5VeHrl|nl2p|fS~ly8tPAHq`orw6{=17lUJKS9<_5Hx}S z!w7Z9le&eXV<p$-lY|JS)S(?y2TX5H zlV%Y@D`d-tF0i0j2^uz!o+<_~(=cbk#fVJ{MBPROThrcL)awhJu<3E`BY659s969+ zEu(~1m@Ap8Ua2sv1%qc$A0Fa1fMtfylmH{EW1Q7N)^a0u5xfoF*ebU|RP%5o3uq^! z9REN*GO@-TSs(6^^wf%)i-gQPVZqO%_ipoVkvr*$0xHz&=hWsEEAc?aF}pCMK&wWu zOU&t5?P!{7E1jvXTq-Y{FDqEc`%{o{d*pHQ_^)J6tXEr1JU<%l4*GYar~g;v3J2CG z09xmJ+84VjX6kFiA9JSjp9^ww#hLd;e^22)c_d7W>$@K{K)*gpOA^Ih<3@&#h6fIY zL#<&E{2-@Kfq@eNJ|q6b4nJa-XPe278acF)|p8M;KHp zl|mtrNJOHk2_C<9g58plL7|XIuO6nJz~T0{ITLI^C-&X$yL6=hb!qW&SLFl>2Hn!e z29(u4_;)FA36y&KA~GVPIXZjRdu@zNp{zCV7JMhG)UGGxEG%#H5*Kpl@}7qnKPB}y z=A_c))qhHYapmEYvyTsZYla_dY9L&mW6(@iPij9aBCt~wyN|K@nOmd1@x{1psXH?- z<9k%H=bz3iIk06Gw|3uMM~eTbt#o_!^qsfJpJVp^ye>%gmAAjRLx5nQ|J{+c-8i)_7ZrmgnuFrA zm)9tSmtitc>bk?HTt0t@k2X1whIF>dhMI?(o7t^YD}mhbR2qw{urkt2o1a*@)ke0Y zRA#;GHU2RE+?>WzIvQgie*kbjRRb0OWw9RU#k7(>9y6v3mZsY-7+Bvm+t@LP_nR)P zRS*b>)fawLdp}`BwGw3mkz27^bv*&C%s27;`cIrGwY3jhviFR`;PkA?66-MVy!Mn= z*>Mk!J^Ti`1|1$SHqx}-jouF6ReDFp4AlQ)T(2{Dm37)R_F@Pso{(Z(GYXYeO=F2g zzCMa@*01MOJ4ZA1GqfIdR0XJz?bZ+0muD`?t?8c+?`2s3b@P~f$+pIu-7SGh#$`#9 zrX7h{9>{fDWbt@MaYg_gq94uUr2qGUXoQBOA5d%Wygyj3Zu*_Z+hyW!`n6a1G@DK2 zhxQEV3Bf{ey!`%i8@0R(4lmaEZ4CwD8`Ec=_=FtGS#E87FqagjEb3!c|;1UT8}3l{DjYSb$ER$rLt#z>TU9U|Dh)##~E zTbjr^lpN$+Vy^3)b&~HKNMS7}hwLVg-=Tg`DSIB(_;cu~=w@M6UyPKQYyw{K`y{Cs z7guPBS=RD-f*Hj#$(016Ft)tnEO27dugTUi=jv69zSx$a;82xvz39(XrFNV8BGcfx eDvKoUmUR9v*%qJYKbvEp1 zFyX&s(Lc$*XC%x2NX~sHdFhVik8_gMza*!8l)QaI^7A>6?8fIH1wh7{SCU5_O8z?| z(e_>9)g`Iozf#LzOP#nU_4kZa`CqAPx1@fam3(kr^793$;{Q^M-btOgEA{`3!u|US z|MyECcqF;+k<`pjQqw<3E_w?xYS&ZA{f|Kgp1mhI_dUq!>$fEPzerB`B)RpOvz#mW1U z6@MkSJ(E0fPqO^4)rRGVfqvF03GxeO_}tnW%<=j2OCWdz1UGNq+z$jRR`dWtSy@?d zuniD!aNN9ER#s^jz8I+QtEY=&h{pNa)9rc94gxF}7@Mo#@16c--h{NGPT}Khv;X|R zpVGSKv*M0wsZ4im-oCWERhAPquJ1N((P5hzuV);gkPz~NQ=>J)-$c9@EKIo_UG4oaJizH|(88{7m$pad)r7F*`sj(MIlS`IVttUaH)?%N zh{hpX_Jn8iREpF(K58T$SiaxwQsIS){tFDt>)T!kNZfqiu%?k=^YoIkbA692>QBz= moKUzrsONb1)N2xV?6>t#t8-tuXb&&|7(8A5T-G@yGywp2U@QIr literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_past.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_past.png new file mode 100755 index 0000000000000000000000000000000000000000..7e70dbce5792f4de7d024a58c5fa6a441280c88d GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^av;pY3?xs=ZJr3E)B}7%T!C~^X?0Oabx~P$VQF=7 zX$_dH1_~CJS2r{?fMiRnv(0Uu0G0BT1o;IsJo|iee@|;!unotG_c0ZbK=DRT7sn8Z z%gGGQE6;hUP2@2+5L&^;azxzWXK%WK1Jj{YYi4H7gnx1t|4p2v7A|1#tY^yD!6Wql z0TbId;}Z)S8UYg6+3!rkU~aV7s3 t{1(@>xp0`<*v9a%w4i*%BW_zeMuSkHY0)`0eL%-Bc)I$ztaD0e0ss$pT`vFt literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_start.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_runnint_task_start.png new file mode 100755 index 0000000000000000000000000000000000000000..dac86db75d5d5d39e3188578a36bc1813a8db743 GIT binary patch literal 1606 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 S**5EcGgwj%n^l=oFZ>@=%)9*n literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_current_station_bg.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_current_station_bg.xml new file mode 100644 index 0000000000..5d58260925 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_current_station_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_leave_station_slede.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_leave_station_slede.xml new file mode 100644 index 0000000000..902a284ee2 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_task_leave_station_slede.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_running_station_list_item.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_running_station_list_item.xml new file mode 100644 index 0000000000..e42445d0f6 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_running_station_list_item.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_biz.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_biz.xml index bb5bb00351..0887e1fa11 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_biz.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_biz.xml @@ -12,10 +12,10 @@ app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="@dimen/dp_23" android:layout_marginEnd="@dimen/dp_42" - android:layout_width="wrap_content" - android:layout_height="wrap_content"/> + android:layout_width="@dimen/dp_856" + android:layout_height="@dimen/dp_100"/> - + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task.xml index 874cc64731..9223237a19 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task.xml @@ -71,7 +71,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> - + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_task_running.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_task_running.xml new file mode 100644 index 0000000000..a3334a8de2 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_task_running.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml b/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml index 456c3ab8f5..3efe886db4 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml @@ -53,6 +53,8 @@ #80000000 #B3FFFFFF #4D2EACFF + #19E6D4 + #198BF6 #666666 #CCB9C3E9 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml index ade46e7a91..8305a158b5 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml @@ -26,6 +26,7 @@ 往%1$s方向 更换任务成功 更换任务失败 + 滑动出发 起点: 终点: 当前站点: