From 332f9c4e2dcda2b0308881a89574bf40b9582c83 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 4 Sep 2024 17:24:41 +0800 Subject: [PATCH 1/6] Rename .java to .kt --- .../och/bus/bean/{WriteOffPassenger.java => WriteOffPassenger.kt} | 0 .../request/{BusCloseTaskRequest.java => BusCloseTaskRequest.kt} | 0 ...eryLineStationsRequest.java => BusQueryLineStationsRequest.kt} | 0 ...ResetDrivingLineRequest.java => BusResetDrivingLineRequest.kt} | 0 ...lanningUpdateReqBean.java => BusRoutePlanningUpdateReqBean.kt} | 0 ...UpdateSiteStatusRequest.java => BusUpdateSiteStatusRequest.kt} | 0 .../request/{CarHeartbeatReqBean.java => CarHeartbeatReqBean.kt} | 0 ...{BusQueryLineTaskResponse.java => BusQueryLineTaskResponse.kt} | 0 .../{BusQueryLinesResponse.java => BusQueryLinesResponse.kt} | 0 .../response/{BusRoutesResponse.java => BusRoutesResponse.kt} | 0 .../mogo/och/bus/net/{IBascApiService.java => IBascApiService.kt} | 0 .../mogo/och/bus/net/{ISAASApiService.java => ISAASApiService.kt} | 0 .../mogo/och/bus/presenter/{BusPresenter.java => BusPresenter.kt} | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/{WriteOffPassenger.java => WriteOffPassenger.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/{BusCloseTaskRequest.java => BusCloseTaskRequest.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/{BusQueryLineStationsRequest.java => BusQueryLineStationsRequest.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/{BusResetDrivingLineRequest.java => BusResetDrivingLineRequest.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/{BusRoutePlanningUpdateReqBean.java => BusRoutePlanningUpdateReqBean.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/{BusUpdateSiteStatusRequest.java => BusUpdateSiteStatusRequest.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/{CarHeartbeatReqBean.java => CarHeartbeatReqBean.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/{BusQueryLineTaskResponse.java => BusQueryLineTaskResponse.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/{BusQueryLinesResponse.java => BusQueryLinesResponse.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/{BusRoutesResponse.java => BusRoutesResponse.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/net/{IBascApiService.java => IBascApiService.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/net/{ISAASApiService.java => ISAASApiService.kt} (100%) rename OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/{BusPresenter.java => BusPresenter.kt} (100%) diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.kt diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.kt similarity index 100% rename from OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java rename to OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.kt From 856080b3cb86cec47843f8d8def1be934d413f34 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 4 Sep 2024 17:24:42 +0800 Subject: [PATCH 2/6] =?UTF-8?q?[fea]=20[bus=20=E4=BB=A3=E7=A0=81=E5=8F=98?= =?UTF-8?q?=E6=9B=B4]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/bus/bean/WriteOffPassenger.kt | 26 +- .../bus/bean/request/BusCloseTaskRequest.kt | 18 +- .../request/BusQueryLineStationsRequest.kt | 12 +- .../request/BusResetDrivingLineRequest.kt | 17 +- .../request/BusRoutePlanningUpdateReqBean.kt | 32 +- .../request/BusUpdateSiteStatusRequest.kt | 24 +- .../bus/bean/request/CarHeartbeatReqBean.kt | 29 +- .../bean/response/BusQueryLineTaskResponse.kt | 18 +- .../bean/response/BusQueryLinesResponse.kt | 31 +- .../bus/bean/response/BusRoutesResponse.kt | 25 +- .../bus/callback/IBusADASStatusCallback.java | 11 - .../IBusControllerStatusCallback.java | 11 - .../och/bus/callback/IPassengerCallback.java | 19 + .../callback/IRefreshBusStationsCallback.java | 23 - .../callback/ISlidePannelHideCallback.java | 9 - .../com/mogo/och/bus/model/OrderModel.java | 51 +-- .../com/mogo/och/bus/net/IBascApiService.kt | 120 +++-- .../com/mogo/och/bus/net/ISAASApiService.kt | 117 +++-- .../mogo/och/bus/presenter/BusPresenter.kt | 411 ++++++++---------- .../mogo/och/bus/ui/BusSwitchLineActivity.kt | 16 +- .../och/bus/ui/adapter/SwitchLineAdapter.kt | 16 +- 21 files changed, 448 insertions(+), 588 deletions(-) delete mode 100644 OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusADASStatusCallback.java delete mode 100644 OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java delete mode 100644 OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java delete mode 100644 OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.kt index 74f0d90ed0..5f283b341a 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/WriteOffPassenger.kt @@ -1,24 +1,14 @@ -package com.mogo.och.bus.bean; +package com.mogo.och.bus.bean -import java.io.Serializable; +import java.io.Serializable /** * @author: wangmingjun * @date: 2022/9/23 */ -public class WriteOffPassenger implements Serializable { - public String phone; - public String orderNo; - public int passengerSize; - public long writeOffTime; - - @Override - public String toString() { - return "WriteOffPassenger{" + - "phone='" + phone + '\'' + - ", orderNo='" + orderNo + '\'' + - ", passengerSize=" + passengerSize + - ", writeOffTime=" + writeOffTime + - '}'; - } -} +data class WriteOffPassenger( + var phone: String? = null, + var orderNo: String? = null, + @JvmField var passengerSize: Int = 0, + var writeOffTime: Long = 0 +) : Serializable diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.kt index 1a9053b04e..6cf1e3cf95 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusCloseTaskRequest.kt @@ -1,20 +1,8 @@ -package com.mogo.och.bus.bean.request; +package com.mogo.och.bus.bean.request -import com.mogo.commons.storage.SharedPrefsMgr; +import com.mogo.commons.storage.SharedPrefsMgr /** * 中止/结束任务请求 */ -public class BusCloseTaskRequest { - - private String sn; - private int taskId; - public BusCloseTaskRequest(int taskId) { - this.sn = SharedPrefsMgr.getInstance().getSn(); - this.taskId = taskId; - } - - public String getSn() { - return sn; - } -} +data class BusCloseTaskRequest(val taskId: Int, val sn: String = SharedPrefsMgr.getInstance().sn) diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.kt index 3c6d48268d..b385d27322 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusQueryLineStationsRequest.kt @@ -1,6 +1,6 @@ -package com.mogo.och.bus.bean.request; +package com.mogo.och.bus.bean.request -import com.mogo.commons.storage.SharedPrefsMgr; +import com.mogo.commons.storage.SharedPrefsMgr /** * @author congtaowang @@ -8,10 +8,4 @@ import com.mogo.commons.storage.SharedPrefsMgr; * * 根据车机行驶线路站点信息 */ -public class BusQueryLineStationsRequest { - - private String sn; - public BusQueryLineStationsRequest() { - this.sn = SharedPrefsMgr.getInstance().getSn(); - } -} +data class BusQueryLineStationsRequest(private val sn: String = SharedPrefsMgr.getInstance().sn) diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.kt index 0ed1d27039..60e8e88453 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusResetDrivingLineRequest.kt @@ -1,17 +1,12 @@ -package com.mogo.och.bus.bean.request; +package com.mogo.och.bus.bean.request -import com.mogo.commons.storage.SharedPrefsMgr; +import com.mogo.commons.storage.SharedPrefsMgr /** * @author: wangmingjun * @date: 2021/10/18 */ -public class BusResetDrivingLineRequest { - public String sn; - public int taskId; //切换到的线路id - - public BusResetDrivingLineRequest(int taskId) { - this.sn = SharedPrefsMgr.getInstance().getSn(); - this.taskId = taskId; - } -} +data class BusResetDrivingLineRequest(//切换到的线路id + val taskId: Int, + val sn: String = SharedPrefsMgr.getInstance().sn +) diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.kt index f14151bded..083c6f8de0 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusRoutePlanningUpdateReqBean.kt @@ -1,30 +1,16 @@ -package com.mogo.och.bus.bean.request; - -import java.util.List; +package com.mogo.och.bus.bean.request /** * Created by pangfan on 2021/8/19 * * 订单状态更新请求数据结构 */ -public class BusRoutePlanningUpdateReqBean { - public String sn; - public int lineId; - public int startSiteId; - public int endSiteId; - public List points; - - public static class Result { - public Double latitude; - public Double longitude; - } - - public BusRoutePlanningUpdateReqBean(String sn, int lineId, int startSiteId - , int endSiteId, List points) { - this.sn = sn; - this.lineId = lineId; - this.startSiteId = startSiteId; - this.endSiteId = endSiteId; - this.points = points; - } +class BusRoutePlanningUpdateReqBean( + var sn: String, var lineId: Int, var startSiteId: Int, + var endSiteId: Int, var points: List +) { + data class Result( + var latitude: Double? = null, + var longitude: Double? = null + ) } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.kt index 26d26a1351..e1f71ee5c6 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/BusUpdateSiteStatusRequest.kt @@ -1,6 +1,6 @@ -package com.mogo.och.bus.bean.request; +package com.mogo.och.bus.bean.request -import com.mogo.commons.storage.SharedPrefsMgr; +import com.mogo.commons.storage.SharedPrefsMgr /** * @author congtaowang @@ -8,17 +8,9 @@ import com.mogo.commons.storage.SharedPrefsMgr; * * 小巴车运营状态请求参数 */ -public class BusUpdateSiteStatusRequest { - - public String sn; - public int taskId; - public int seq;//站点序号 - public int siteId;//站点id - - public BusUpdateSiteStatusRequest(int taskId,int siteId,int seq) { - this.sn = SharedPrefsMgr.getInstance().getSn(); - this.seq = seq; - this.siteId = siteId; - this.taskId = taskId; - } -} +class BusUpdateSiteStatusRequest( + var taskId: Int, //站点id + var siteId: Int, //站点序号 + var seq: Int, + var sn: String = SharedPrefsMgr.getInstance().sn +) diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.kt index f255254b83..fc6918597e 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/request/CarHeartbeatReqBean.kt @@ -1,26 +1,17 @@ -package com.mogo.och.bus.bean.request; +package com.mogo.och.bus.bean.request -import com.mogo.och.bus.constant.BusConst; - -import java.util.UUID; +import com.mogo.och.bus.constant.BusConst +import java.util.UUID /** * Created on 2021/9/16 * * 上传车机心跳信息请求数据 */ -public class CarHeartbeatReqBean { - public String sn; - public double lon; //经度 - public double lat; //纬度 - public String msgId; //心跳信息唯一标识 - public int interval; //上报间隔,单位秒,非必传,默认60秒 - - public CarHeartbeatReqBean(String sn, double lon, double lat) { - this.sn = sn; - this.lon = lon; - this.lat = lat; - this.msgId = UUID.randomUUID().toString(); - this.interval = (int) (BusConst.LOOP_PERIOD_60S / 1000); - } -} +class CarHeartbeatReqBean( + var sn: String, //经度 + var lon: Double, //纬度 + var lat: Double, + var msgId: String = UUID.randomUUID().toString(), //心跳信息唯一标识 + var interval: Int = (BusConst.LOOP_PERIOD_60S / 1000).toInt() //上报间隔,单位秒,非必传,默认60秒 +) diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.kt index b316f52947..07e3e98a55 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLineTaskResponse.kt @@ -1,19 +1,15 @@ -package com.mogo.och.bus.bean.response; +package com.mogo.och.bus.bean.response -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; +import com.mogo.eagle.core.data.BaseData /** * @author: wangmingjun * @date: 2022/2/9 */ -public class BusQueryLineTaskResponse extends BaseData { +data class BusQueryLineTaskResponse(var data: List?) : BaseData() { - public List data; - - public static class Result { - public int id; - public long taskStartTime; - } + data class Result( + var id: Int = 0, + var taskStartTime: Long = 0, + ) } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.kt index 27f98cc34b..0d78499741 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusQueryLinesResponse.kt @@ -1,27 +1,22 @@ -package com.mogo.och.bus.bean.response; +package com.mogo.och.bus.bean.response -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; +import com.mogo.eagle.core.data.BaseData /** * @author: wangmingjun * @date: 2022/2/9 */ -public class BusQueryLinesResponse extends BaseData { - public List data; +data class BusQueryLinesResponse(var data: MutableList?) : BaseData() { + data class Result( + var lineId: Int = 0, //线路id + var name: String? = null, //线路名字 + var choose: Int = 0, // 1:绑定 2:未被绑定 + var startSiteName: String? = null, //始发站名称 + var endSiteName: String? = null, //终点名称 - public static class Result { + var open: Boolean = false, //true 打开状态 false + var haveTask: Boolean = false, - public int lineId;//线路id - public String name;//线路名字 - public int choose; // 1:绑定 2:未被绑定 - public String startSiteName;//始发站名称 - public String endSiteName;//终点名称 - - public boolean open;//true 打开状态 false - public boolean haveTask; - - public List taskList; - } + var taskList: MutableList? = null + ) } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.kt index 66cf6e707b..ffe81af8f0 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/bean/response/BusRoutesResponse.kt @@ -1,28 +1,11 @@ -package com.mogo.och.bus.bean.response; +package com.mogo.och.bus.bean.response -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.data.bean.BusRoutesResult; +import com.mogo.eagle.core.data.BaseData +import com.mogo.och.data.bean.BusRoutesResult /** * 网约车小巴路线接口请求响应结果 * * @author tongchenfei */ -public class BusRoutesResponse extends BaseData { - private BusRoutesResult data; - - public BusRoutesResult getResult() { - return data; - } - - public void setResult(BusRoutesResult data) { - this.data = data; - } - - @Override - public String toString() { - return "BusRoutesResponse{" + - "data=" + data + - '}'; - } -} +data class BusRoutesResponse(var result: BusRoutesResult) : BaseData() diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusADASStatusCallback.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusADASStatusCallback.java deleted file mode 100644 index 186fc0b5f4..0000000000 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusADASStatusCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mogo.och.bus.callback; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) - */ -public interface IBusADASStatusCallback { - //自驾返回失败 - void onStartAdasFailure(); -} diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java deleted file mode 100644 index 34fdba2b70..0000000000 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mogo.och.bus.callback; - -/** - * Created on 2021/9/10 - * - * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) - */ -public interface IBusControllerStatusCallback { - //开始开启自动驾驶 - void startOpenAutopilot(); -} diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java index 98f4498282..c0a711cb3c 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IPassengerCallback.java @@ -1,6 +1,9 @@ package com.mogo.och.bus.callback; import com.mogo.och.bus.bean.WriteOffPassenger; +import com.mogo.och.data.bean.BusStationBean; + +import java.util.List; /** * @author: wangmingjun @@ -8,4 +11,20 @@ import com.mogo.och.bus.bean.WriteOffPassenger; */ public interface IPassengerCallback { void playPassenger(WriteOffPassenger passenger); + //自驾返回失败 + void onStartAdasFailure(); + void startOpenAutopilot(); + + void updateBusTaskStatus(String lineName,String lintTime, + List stationList, + int arrivingOrArrivedIndex, + boolean isArrived); + + /** + * 结束清理一遍、选择任务后清理一遍 + */ + void clearBusStationsMarkers(); + + void updateEmptyUi(); + void hideSlidePanel(); } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java deleted file mode 100644 index 4f28bf76b9..0000000000 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mogo.och.bus.callback; - -import com.mogo.och.data.bean.BusStationBean; - -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -public interface IRefreshBusStationsCallback { - void updateBusTaskStatus(String lineName,String lintTime, - List stationList, - int arrivingOrArrivedIndex, - boolean isArrived); - - /** - * 结束清理一遍、选择任务后清理一遍 - */ - void clearBusStationsMarkers(); - - void updateEmptyUi(); -} diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java deleted file mode 100644 index 16e6893135..0000000000 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.och.bus.callback; - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -public interface ISlidePannelHideCallback { - void hideSlidePanel(); -} diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java b/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java index fadfc6080d..1b1188a7c4 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/model/OrderModel.java @@ -33,11 +33,7 @@ import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.bus.R; import com.mogo.och.bus.bean.response.BusRoutesResponse; import com.mogo.och.bus.bean.WriteOffPassenger; -import com.mogo.och.bus.callback.IBusADASStatusCallback; -import com.mogo.och.bus.callback.IBusControllerStatusCallback; import com.mogo.och.bus.callback.IPassengerCallback; -import com.mogo.och.bus.callback.IRefreshBusStationsCallback; -import com.mogo.och.bus.callback.ISlidePannelHideCallback; import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.net.OrderServiceManager; import com.mogo.och.bus.presenter.BusModelLoopManager; @@ -116,11 +112,7 @@ public class OrderModel { // 运营类型 private static final int VEHICLE_TYPE = 10; - private IRefreshBusStationsCallback refreshBusStationsCallback; - private ISlidePannelHideCallback slidePanelHideCallback; - private IBusControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 private IPassengerCallback mPassengerCallback; //乘客核销回调 - private IBusADASStatusCallback mADASStatusCallback; private volatile boolean isArrivedStation = false; @@ -298,25 +290,10 @@ public class OrderModel { } }; - public void setAdasStatusCallback(IBusADASStatusCallback callback){ - this.mADASStatusCallback = callback; - } - - public void setRefreshBusStationsCallback(IRefreshBusStationsCallback callback){ - this.refreshBusStationsCallback = callback; - } - public void setPassengerCallback(IPassengerCallback callback) { this.mPassengerCallback = callback; } - public void setSlidePanelHideCallback(ISlidePannelHideCallback callback) { - this.slidePanelHideCallback = callback; - } - - public void setControllerStatusCallback(IBusControllerStatusCallback callback) { - this.mControllerStatusCallback = callback; - } private final ITrajectoryListener trajectoryListener = (routeArrivied, routeArriving, location) -> { @@ -402,9 +379,9 @@ public class OrderModel { @Override public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) { OchAutopilotAnalytics.INSTANCE.triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage, System.currentTimeMillis()); - if (mADASStatusCallback != null && !FunctionBuildConfig.isDemoMode){ + if (mPassengerCallback != null && !FunctionBuildConfig.isDemoMode){ CallerLogger.e( M_BUS + TAG, "mAdasStartFailureListener = "+startFailedMessage ); - mADASStatusCallback.onStartAdasFailure(); + mPassengerCallback.onStartAdasFailure(); } } }; @@ -478,8 +455,8 @@ public class OrderModel { || data.getResult().getSites().isEmpty()) { //当为空时,显示无绑定路线图 CallerLogger.d(M_BUS + TAG, "获取到小巴路线数据:空 "); - if (refreshBusStationsCallback != null) { - refreshBusStationsCallback.updateEmptyUi(); + if (mPassengerCallback != null) { + mPassengerCallback.updateEmptyUi(); } clearAutopilotControlParameters(); closeBeautificationMode(); @@ -558,14 +535,14 @@ public class OrderModel { if (arrivingOrArrivedStationIndex == 0 || arrivingOrArrivedStation.getDrivingStatus() == STATION_STATUS_STOPPED && !arrivingOrArrivedStation.isLeaving()) { - if (refreshBusStationsCallback != null) { - refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(), lineTime, + if (mPassengerCallback != null) { + mPassengerCallback.updateBusTaskStatus(busRoutesResult.getName(), lineTime, stationList, arrivingOrArrivedStationIndex, true); } clearAutopilotControlParameters(); } else { - if (refreshBusStationsCallback != null) { - refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(), lineTime, + if (mPassengerCallback != null) { + mPassengerCallback.updateBusTaskStatus(busRoutesResult.getName(), lineTime, stationList, arrivingOrArrivedStationIndex, false); } updateAutopilotControlParameters(); @@ -759,8 +736,8 @@ public class OrderModel { + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName + "isRestart = " + isRestart); - if (mControllerStatusCallback != null) { - mControllerStatusCallback.startOpenAutopilot(); + if (mPassengerCallback != null) { + mPassengerCallback.startOpenAutopilot(); } } @@ -1029,8 +1006,8 @@ public class OrderModel { } - if (currentStation.isLeaving() && slidePanelHideCallback != null) { - slidePanelHideCallback.hideSlidePanel(); + if (currentStation.isLeaving() && mPassengerCallback != null) { + mPassengerCallback.hideSlidePanel(); } sendTaskDetailsToClients(); @@ -1107,8 +1084,8 @@ public class OrderModel { } public void clearBusStationDatas() { - if (refreshBusStationsCallback != null) { - refreshBusStationsCallback.clearBusStationsMarkers(); + if (mPassengerCallback != null) { + mPassengerCallback.clearBusStationsMarkers(); } } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.kt index 70a22de0ed..5520d1cf83 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/IBascApiService.kt @@ -1,68 +1,84 @@ -package com.mogo.och.bus.net; +package com.mogo.och.bus.net -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.bus.bean.request.BusCloseTaskRequest; -import com.mogo.och.bus.bean.response.BusQueryLineTaskResponse; -import com.mogo.och.bus.bean.response.BusQueryLinesResponse; -import com.mogo.och.bus.bean.request.BusRoutePlanningUpdateReqBean; -import com.mogo.och.bus.bean.response.BusRoutesResponse; -import com.mogo.och.bus.bean.request.CarHeartbeatReqBean; -import com.mogo.och.bus.bean.request.BusQueryLineStationsRequest; -import com.mogo.och.bus.bean.request.BusResetDrivingLineRequest; -import com.mogo.och.bus.bean.request.BusUpdateSiteStatusRequest; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; +import com.mogo.eagle.core.data.BaseData +import com.mogo.och.bus.bean.request.BusCloseTaskRequest +import com.mogo.och.bus.bean.request.BusQueryLineStationsRequest +import com.mogo.och.bus.bean.request.BusResetDrivingLineRequest +import com.mogo.och.bus.bean.request.BusRoutePlanningUpdateReqBean +import com.mogo.och.bus.bean.request.BusUpdateSiteStatusRequest +import com.mogo.och.bus.bean.request.CarHeartbeatReqBean +import com.mogo.och.bus.bean.response.BusQueryLineTaskResponse +import com.mogo.och.bus.bean.response.BusQueryLinesResponse +import com.mogo.och.bus.bean.response.BusRoutesResponse +import io.reactivex.Observable +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.Headers +import retrofit2.http.POST +import retrofit2.http.Query /** * 小巴车相关接口 * * @author tongchenfei - *

+ * + * * wiki: http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48970072 */ -public interface IBascApiService { +interface IBascApiService { /** * 根据车机坐标获取所在区域全部站点信息 * * @param request 请求参数 * @return 接口返回数据 */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/line/v2/driver/bus/lineDataWithDriver/query" ) - Observable queryBusRoutes(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusQueryLineStationsRequest request); + @Headers("Content-Type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/line/v2/driver/bus/lineDataWithDriver/query") + fun queryBusRoutes( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusQueryLineStationsRequest? + ): Observable /** * @param request 请求参数{"destLine":1,"sn":"F803EB2046PZD00229"} 这个接口是重置bus线路的, 不是重置线路中站点的 * @return 返回值是重置后的车站列表 * 开始路线 */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startTask" ) - Observable switchLine(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusResetDrivingLineRequest request); + @Headers("Content-Type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startTask") + fun switchLine( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusResetDrivingLineRequest? + ): Observable /** * 离站,通知服务器 * @param request * @return */ - @Headers({"Content-Type:application/json;charset=UTF-8"}) + @Headers("Content-Type:application/json;charset=UTF-8") @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/leave") - Observable leaveStation(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusUpdateSiteStatusRequest request); + fun leaveStation( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusUpdateSiteStatusRequest? + ): Observable /** * 到站 更新到站信息 * @param request * @return */ - @Headers({"Content-type:application/json;charset=UTF-8"}) + @Headers("Content-type:application/json;charset=UTF-8") @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/arrive") - Observable< BaseData > arriveSiteStation(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusUpdateSiteStatusRequest request); + fun arriveSiteStation( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusUpdateSiteStatusRequest? + ): Observable /** @@ -70,9 +86,13 @@ public interface IBascApiService { * @param data * @return */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/location/v2/driver/bus/heartbeat" ) - Observable runCarHeartbeat(@Header ("appId") String appId,@Header("ticket") String ticket,@Body CarHeartbeatReqBean data); + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/location/v2/driver/bus/heartbeat") + fun runCarHeartbeat( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: CarHeartbeatReqBean? + ): Observable /** * 查询车辆配置的所有路线 @@ -82,7 +102,11 @@ public interface IBascApiService { * @return */ @GET("/autopilot-car-hailing/line/v2/driver/bus/bindLine/query") - Observable queryBusLines(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + fun queryBusLines( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Query("sn") sn: String? + ): Observable /** * 查询路线当天的任务 @@ -92,7 +116,7 @@ public interface IBascApiService { * @return */ @GET("/autopilot-car-hailing/line/v2/driver/bus/task/query") - Observable queryBusTaskByLineId(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("lineId") String lineId); + fun queryBusTaskByLineId(@Header("appId") appId: String?, @Header("ticket") ticket: String?, @Query("lineId") lineId: String?): Observable /** @@ -102,9 +126,13 @@ public interface IBascApiService { * @param data * @return */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/location/v2/driver/bus/saveLineCoordinate" ) - Observable updateOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusRoutePlanningUpdateReqBean data); + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/location/v2/driver/bus/saveLineCoordinate") + fun updateOrderRoute( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: BusRoutePlanningUpdateReqBean? + ): Observable /** * 中止任务 @@ -114,7 +142,11 @@ public interface IBascApiService { * @return */ @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/abortTask") - Observable abortTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + fun abortTask( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: BusCloseTaskRequest? + ): Observable /** * 任务正常跑完结束 @@ -123,8 +155,12 @@ public interface IBascApiService { * @param data * @return */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @Headers("Content-type:application/json;charset=UTF-8") @POST("/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/endTask") - Observable endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + fun endTask( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: BusCloseTaskRequest? + ): Observable } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.kt index 6a931ebe96..13dddf8f0b 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/net/ISAASApiService.kt @@ -1,67 +1,87 @@ -package com.mogo.och.bus.net; +package com.mogo.och.bus.net -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.bus.bean.request.BusCloseTaskRequest; -import com.mogo.och.bus.bean.response.BusQueryLineTaskResponse; -import com.mogo.och.bus.bean.response.BusQueryLinesResponse; -import com.mogo.och.bus.bean.request.BusResetDrivingLineRequest; -import com.mogo.och.bus.bean.request.BusRoutePlanningUpdateReqBean; -import com.mogo.och.bus.bean.response.BusRoutesResponse; -import com.mogo.och.bus.bean.request.BusUpdateSiteStatusRequest; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; +import com.mogo.eagle.core.data.BaseData +import com.mogo.och.bus.bean.request.BusCloseTaskRequest +import com.mogo.och.bus.bean.request.BusResetDrivingLineRequest +import com.mogo.och.bus.bean.request.BusRoutePlanningUpdateReqBean +import com.mogo.och.bus.bean.request.BusUpdateSiteStatusRequest +import com.mogo.och.bus.bean.response.BusQueryLineTaskResponse +import com.mogo.och.bus.bean.response.BusQueryLinesResponse +import com.mogo.och.bus.bean.response.BusRoutesResponse +import io.reactivex.Observable +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.Headers +import retrofit2.http.POST +import retrofit2.http.Query /** * 小巴车相关接口 * * @author tongchenfei - *

+ * + * * wiki: http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48970072 */ -public interface ISAASApiService { +interface ISAASApiService { /** * 根据车机坐标获取所在区域全部站点信息 */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @GET( "/och-bus-cabin/api/business/v1/driver/bus/lineDataWithDriver/query" ) - Observable queryBusRoutes(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + @Headers("Content-Type:application/json;charset=UTF-8") + @GET("/och-bus-cabin/api/business/v1/driver/bus/lineDataWithDriver/query") + fun queryBusRoutes( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Query("sn") sn: String? + ): Observable /** * @param request 请求参数{"destLine":1,"sn":"F803EB2046PZD00229"} 这个接口是重置bus线路的, 不是重置线路中站点的 * @return 返回值是重置后的车站列表 * 开始路线 */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) - @POST( "/och-bus-cabin/cab/flow/v1/bus/driver/startTask" ) - Observable switchLine(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusResetDrivingLineRequest request); + @Headers("Content-Type:application/json;charset=UTF-8") + @POST("/och-bus-cabin/cab/flow/v1/bus/driver/startTask") + fun switchLine( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusResetDrivingLineRequest? + ): Observable /** * 离站,通知服务器 */ - @Headers({"Content-Type:application/json;charset=UTF-8"}) + @Headers("Content-Type:application/json;charset=UTF-8") @POST("/och-bus-cabin/cab/flow/v1/bus/driver/leave") - Observable leaveStation(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusUpdateSiteStatusRequest request); + fun leaveStation( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusUpdateSiteStatusRequest? + ): Observable /** * 到站 更新到站信息 */ - @Headers({"Content-type:application/json;charset=UTF-8"}) + @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-bus-cabin/cab/flow/v1/bus/driver/arrive") - Observable< BaseData > arriveSiteStation(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusUpdateSiteStatusRequest request); + fun arriveSiteStation( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body request: BusUpdateSiteStatusRequest? + ): Observable /** * 查询车辆配置的所有路线 */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @Headers("Content-type:application/json;charset=UTF-8") @GET("/och-bus-cabin/api/business/v1/driver/BusBindLine") - Observable queryBusLines(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + fun queryBusLines( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Query("sn") sn: String? + ): Observable /** * 查询路线当天的任务 @@ -70,17 +90,25 @@ public interface ISAASApiService { * @param lineId 线路id * @return */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @Headers("Content-type:application/json;charset=UTF-8") @GET("/och-bus-cabin/api/business/v1/driver/bus/task/query") - Observable queryBusTaskByLineId(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("lineId") String lineId); + fun queryBusTaskByLineId( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Query("lineId") lineId: String? + ): Observable /** * 上传轨迹信息 */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/location/v2/driver/bus/saveLineCoordinate" ) - Observable updateOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusRoutePlanningUpdateReqBean data); + @Headers("Content-type:application/json;charset=UTF-8") + @POST("/autopilot-car-hailing/location/v2/driver/bus/saveLineCoordinate") + fun updateOrderRoute( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: BusRoutePlanningUpdateReqBean? + ): Observable /** * 中止任务 @@ -89,9 +117,13 @@ public interface ISAASApiService { * @param data * @return */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-bus-cabin/cab/flow/v1/bus/driver/abortTask") - Observable abortTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); + fun abortTask( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: BusCloseTaskRequest? + ): Observable /** * 任务正常跑完结束 @@ -100,9 +132,12 @@ public interface ISAASApiService { * @param data * @return */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @Headers("Content-type:application/json;charset=UTF-8") @POST("/och-bus-cabin/cab/flow/v1/bus/driver/endTask") - Observable endTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusCloseTaskRequest data); - + fun endTask( + @Header("appId") appId: String?, + @Header("ticket") ticket: String?, + @Body data: BusCloseTaskRequest? + ): Observable } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.kt index 9ea86ef602..7391028f87 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/presenter/BusPresenter.kt @@ -1,322 +1,259 @@ -package com.mogo.och.bus.presenter; +package com.mogo.och.bus.presenter -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.LifecycleOwner; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.mvp.Presenter; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.bus.bean.WriteOffPassenger; -import com.mogo.och.bus.callback.IBusADASStatusCallback; -import com.mogo.och.bus.callback.IBusControllerStatusCallback; -import com.mogo.och.bus.callback.IPassengerCallback; -import com.mogo.och.bus.callback.IRefreshBusStationsCallback; -import com.mogo.och.bus.callback.ISlidePannelHideCallback; -import com.mogo.och.bus.fragment.BusFragment; -import com.mogo.och.bus.model.OrderModel; -import com.mogo.och.bus.util.BusTrajectoryManager; -import com.mogo.och.bus.util.BusVoiceManager; -import com.mogo.och.common.module.biz.login.ILoginCallback; -import com.mogo.och.common.module.biz.login.LoginStatusEnum; -import com.mogo.och.common.module.biz.login.LoginStatusManager; -import com.mogo.och.common.module.manager.autopilot.OCHAdasAbilityManager; -import com.mogo.och.common.module.manager.autopilot.autopilot.bean.ArrivedStation; -import com.mogo.och.common.module.manager.autopilot.autopilot.IOchAutopilotStatusListener; -import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotStatusListenerManager; -import com.mogo.och.data.bean.BusStationBean; - -import java.util.ArrayList; -import java.util.List; - -import mogo.telematics.pad.MessagePad; +import androidx.lifecycle.LifecycleOwner +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.mvp.Presenter +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.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.bean.WriteOffPassenger +import com.mogo.och.bus.callback.IPassengerCallback +import com.mogo.och.bus.fragment.BusFragment +import com.mogo.och.bus.model.OrderModel +import com.mogo.och.bus.util.BusTrajectoryManager +import com.mogo.och.bus.util.BusVoiceManager +import com.mogo.och.common.module.biz.login.ILoginCallback +import com.mogo.och.common.module.biz.login.LoginStatusEnum +import com.mogo.och.common.module.biz.login.LoginStatusManager +import com.mogo.och.common.module.manager.autopilot.OCHAdasAbilityManager +import com.mogo.och.common.module.manager.autopilot.autopilot.IOchAutopilotStatusListener +import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotStatusListenerManager +import com.mogo.och.common.module.manager.autopilot.autopilot.bean.ArrivedStation +import com.mogo.och.data.bean.BusStationBean import mogo_msg.MogoReportMsg; /** * 网约车小巴 */ -public class BusPresenter extends Presenter - implements IRefreshBusStationsCallback, ISlidePannelHideCallback - , IBusControllerStatusCallback, ILoginCallback, IPassengerCallback, IBusADASStatusCallback, IOchAutopilotStatusListener { +class BusPresenter(view: BusFragment?) : Presenter(view), ILoginCallback, + IPassengerCallback, IOchAutopilotStatusListener { + private val mStationList: MutableList = ArrayList() + private var mCurrentStation = 0 - private static final String TAG = "BusPresenter"; - - private final List mStationList = new ArrayList<>(); - private int mCurrentStation = 0; - - public BusPresenter(BusFragment view) { - super(view); + init { //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 - OrderModel.getInstance().init(); - OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); - + OrderModel.getInstance().init() + OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()) } - @Override - public void onCreate(@NonNull LifecycleOwner owner) { - super.onCreate(owner); - initModelListener(); + override fun onCreate(owner: LifecycleOwner) { + super.onCreate(owner) + initModelListener() - OrderModel.getInstance().queryBusCacheRoutes(); + OrderModel.getInstance().queryBusCacheRoutes() } - @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - super.onDestroy(owner); - OrderModel.getInstance().release(); - releaseListener(); + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + OrderModel.getInstance().release() + releaseListener() } - public void initModelListener() { - OrderModel.getInstance().setRefreshBusStationsCallback(this); - OrderModel.getInstance().setSlidePanelHideCallback(this); - OrderModel.getInstance().setControllerStatusCallback(this); - OrderModel.getInstance().setPassengerCallback(this); - OrderModel.getInstance().setAdasStatusCallback(this); - OchAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); - LoginStatusManager.INSTANCE.addListener(TAG, this); + fun initModelListener() { + OrderModel.getInstance().setPassengerCallback(this) + OchAutoPilotStatusListenerManager.addListener(TAG, this) + LoginStatusManager.addListener(TAG, this) } - public void releaseListener() { - OrderModel.getInstance().setRefreshBusStationsCallback(null); - OrderModel.getInstance().setSlidePanelHideCallback(null); - OrderModel.getInstance().setControllerStatusCallback(null); - OrderModel.getInstance().setPassengerCallback(null); - OrderModel.getInstance().setAdasStatusCallback(null); - OCHAdasAbilityManager.getInstance().release(); - OchAutoPilotStatusListenerManager.INSTANCE.removeListener(TAG); - LoginStatusManager.INSTANCE.removeListener(TAG); + fun releaseListener() { + OrderModel.getInstance().setPassengerCallback(null) + OCHAdasAbilityManager.getInstance().release() + OchAutoPilotStatusListenerManager.removeListener(TAG) + LoginStatusManager.removeListener(TAG) } - public void abortTask() { - OrderModel.getInstance().abortTask(); + fun abortTask() { + OrderModel.getInstance().abortTask() } - public void autoDriveToNextStation() { - OrderModel.getInstance().autoDriveToNextStation(); + fun autoDriveToNextStation() { + OrderModel.getInstance().autoDriveToNextStation() } - public void restartAutopilot() { - if (OrderModel.getInstance().isGoingToNextStation()) { - OrderModel.getInstance().restartAutopilot(); + fun restartAutopilot() { + if (OrderModel.getInstance().isGoingToNextStation) { + OrderModel.getInstance().restartAutopilot() } } // 登出 - public void logout() { - OrderModel.getInstance().logout(); + fun logout() { + OrderModel.getInstance().logout() } - @Override - public void updateBusTaskStatus(String lineName, String lineTime, - List stationList, - int arrivingOrArrivedIndex, - boolean isArrived) { - mStationList.clear(); - mStationList.addAll(stationList); - if (arrivingOrArrivedIndex == 0 || isArrived) { - mCurrentStation = arrivingOrArrivedIndex; + override fun updateBusTaskStatus( + lineName: String, lineTime: String, + stationList: List, + arrivingOrArrivedIndex: Int, + isArrived: Boolean + ) { + mStationList.clear() + mStationList.addAll(stationList) + mCurrentStation = if (arrivingOrArrivedIndex == 0 || isArrived) { + arrivingOrArrivedIndex } else { - mCurrentStation = arrivingOrArrivedIndex - 1; + arrivingOrArrivedIndex - 1 } - CallerLogger.d(M_BUS + "BusOrderModel =", " mCurrentStation =" + mCurrentStation); - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.updateBusTaskStatus(lineName, lineTime, - stationList, arrivingOrArrivedIndex, isArrived); - } - } - }, UiThreadHandler.MODE.QUEUE); + CallerLogger.d( + SceneConstant.Companion.M_BUS + "BusOrderModel =", + " mCurrentStation =$mCurrentStation" + ) + UiThreadHandler.post({ + mView?.updateBusTaskStatus( + lineName, lineTime, + stationList, arrivingOrArrivedIndex, isArrived + ) + }, UiThreadHandler.MODE.QUEUE) } - @Override - public void updateEmptyUi() { - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.updateLineEmptyUI(); - } - } - }, UiThreadHandler.MODE.QUEUE); + override fun updateEmptyUi() { + UiThreadHandler.post({ + mView?.updateLineEmptyUI() + }, UiThreadHandler.MODE.QUEUE) } - @Override - public void clearBusStationsMarkers() { - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.clearBusStationsMarkers(); - } - } - }, UiThreadHandler.MODE.QUEUE); + override fun clearBusStationsMarkers() { + UiThreadHandler.post({ + mView?.clearBusStationsMarkers() + }, UiThreadHandler.MODE.QUEUE) } - @Override - public void hideSlidePanel() { - if (mView != null) { - mView.hideSlidePanel(); - mView.setArrivedClickable(true); - } + override fun hideSlidePanel() { + mView?.hideSlidePanel() + mView?.setArrivedClickable(true) } - @Override - public void onAutopilotArriveAtStation(ArrivedStation arrivedStation) { - CallerLogger.e(M_BUS + TAG, "行程日志-onAutopilotArriveAtStation arrive"); - arriveStation(arrivedStation, "底盘触发进站"); + override fun onAutopilotArriveAtStation(arrivedStation: ArrivedStation) { + CallerLogger.e( + SceneConstant.Companion.M_BUS + TAG, + "行程日志-onAutopilotArriveAtStation arrive" + ) + arriveStation(arrivedStation, "底盘触发进站") } - public void arriveStation(ArrivedStation arrivedStation, String type) { - OrderModel.getInstance().onArriveAt(arrivedStation, type); + fun arriveStation(arrivedStation: ArrivedStation?, type: String?) { + OrderModel.getInstance().onArriveAt(arrivedStation, type) } - @Override - public void onAutopilotSNRequest(@NonNull MessagePad.BasicInfoReq basicInfoReq) { - } - - @Override - public void onAutopilotStatusResponse(int state) { - switch (state) { - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE: - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE: - case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING: + override fun onAutopilotStatusResponse(state: Int) { + when (state) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> { if (FunctionBuildConfig.isDemoMode - && ( - (mCurrentStation >= 0 && mCurrentStation <= mStationList.size() - 1) - && OrderModel.getInstance().isGoingToNextStation() - ) + && ((mCurrentStation >= 0 && mCurrentStation <= mStationList.size - 1) + && OrderModel.getInstance().isGoingToNextStation + ) ) { - CallerLogger.d(M_BUS + "BusOrderModel=", "有美化功能"); - return; + CallerLogger.d(SceneConstant.Companion.M_BUS + "BusOrderModel=", "有美化功能") + return } // 改变UI自动驾驶状态 - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.onAutopilotStatusChanged(state, CallerAutoPilotControlManager.INSTANCE.isCanStartAutopilot(false, 0)); - } - } - }, UiThreadHandler.MODE.QUEUE); - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING: + UiThreadHandler.post({ + mView?.onAutopilotStatusChanged( + state, + CallerAutoPilotControlManager.isCanStartAutopilot(false, 0) + ) + }, UiThreadHandler.MODE.QUEUE) + } + + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { OrderModel.getInstance().triggerStartServiceEvent( - OrderModel.getInstance().isRestartAutopilot(), true,0); + OrderModel.getInstance().isRestartAutopilot, true, 0 + ) // 改变UI自动驾驶状态 - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.onAutopilotStatusChanged(state, CallerAutoPilotControlManager.INSTANCE.isCanStartAutopilot(false, 0)); - } - } - }, UiThreadHandler.MODE.QUEUE); - break; - default: - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.onAutopilotEnableChange(false); - } - } - }, UiThreadHandler.MODE.QUEUE); - break; + UiThreadHandler.post({ + mView?.onAutopilotStatusChanged( + state, + CallerAutoPilotControlManager.isCanStartAutopilot(false, 0) + ) + }, UiThreadHandler.MODE.QUEUE) + } + + else -> UiThreadHandler.post({ + mView?.onAutopilotEnableChange(false) + }, UiThreadHandler.MODE.QUEUE) } } - @Override - public void onAutopilotStatusResponseFromCan(int state) { + override fun onAutopilotStatusResponseFromCan(state: Int) { if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { OrderModel.getInstance().triggerStartServiceEvent( - OrderModel.getInstance().isRestartAutopilot(), true,1); + OrderModel.getInstance().isRestartAutopilot, true, 1 + ) } } - @Override - public void startOpenAutopilot() { + override fun startOpenAutopilot() { //非美化模式下启动动画 - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if (mView != null) { - mView.startAutopilotAnimation(); - } - } - }, UiThreadHandler.MODE.QUEUE); + UiThreadHandler.post({ + mView?.startAutopilotAnimation() + }, UiThreadHandler.MODE.QUEUE) //中间站点再次开启自驾时, 自动驾驶状态是2未改变, 此次鹰眼底层不再返给业务,需优化按钮动画显示 if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING - == CallerAutoPilotStatusListenerManager.INSTANCE.getState() && mView != null) { - mView.onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState(), CallerAutoPilotControlManager.INSTANCE.isCanStartAutopilot(false, 0)); + == CallerAutoPilotStatusListenerManager.getState() && mView != null + ) { + mView?.onAutopilotStatusChanged( + CallerAutoPilotStatusListenerManager.getState(), + CallerAutoPilotControlManager.isCanStartAutopilot(false, 0) + ) } } /** * 测试使用 */ - public void debugAutoPilotStatus(int status) { - onAutopilotStatusResponse(status); + fun debugAutoPilotStatus(status: Int) { + onAutopilotStatusResponse(status) } - @Override - public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo, long lineId) { - BusTrajectoryManager.getInstance().onAutopilotGuardian(guardianInfo, lineId); + override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?, lineId: Long) { + BusTrajectoryManager.getInstance().onAutopilotGuardian(guardianInfo, lineId) } - @Override - public void onStatusChange(LoginStatusEnum currentStatus) { - CallerLogger.d(M_BUS + TAG, " loginStatus =" + LoginStatusManager.isLogin()); + override fun onStatusChange(currentStatus: LoginStatusEnum) { + CallerLogger.d( + SceneConstant.Companion.M_BUS + TAG, + " loginStatus =" + LoginStatusManager.isLogin() + ) if (LoginStatusManager.isLogin()) { - OrderModel.getInstance().startOrStopOrderLoop(true); - OrderModel.getInstance().queryBusCacheRoutes(); + OrderModel.getInstance().startOrStopOrderLoop(true) + OrderModel.getInstance().queryBusCacheRoutes() } else { - BusTrajectoryManager.getInstance().stopTrajReqLoop(); - OrderModel.getInstance().startOrStopOrderLoop(false); - BusTrajectoryManager.getInstance().stopTrajReqLoop(); - clearBusStationsMarkers(); - if(mView!=null) { - mView.hideSlidePanel(); - } - OrderModel.getInstance().closeBeautificationMode(); + BusTrajectoryManager.getInstance().stopTrajReqLoop() + OrderModel.getInstance().startOrStopOrderLoop(false) + BusTrajectoryManager.getInstance().stopTrajReqLoop() + clearBusStationsMarkers() + mView?.hideSlidePanel() + OrderModel.getInstance().closeBeautificationMode() } } - @Override - public void playPassenger(WriteOffPassenger passenger) { - int passengerNum = passenger.passengerSize; - BusVoiceManager.INSTANCE.writeOffCount(passengerNum); + override fun playPassenger(passenger: WriteOffPassenger) { + val passengerNum = passenger.passengerSize + BusVoiceManager.writeOffCount(passengerNum) } - @Override - public void onStartAdasFailure() { - UiThreadHandler.post(new Runnable() { - @Override - public void run() { - if(mView!=null) { - mView.stopAnimAndUpdateBtnStatus(); - } - } - }, UiThreadHandler.MODE.QUEUE); + override fun onStartAdasFailure() { + UiThreadHandler.post({ + mView?.stopAnimAndUpdateBtnStatus() + }, UiThreadHandler.MODE.QUEUE) } - @Override - public void canStartAutopilot(boolean canStart) { - if(mView!=null) { - mView.onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getState(), canStart); - } + override fun canStartAutopilot(canStart: Boolean) { + mView?.onAutopilotStatusChanged( + CallerAutoPilotStatusListenerManager.getState(), + canStart + ) + } + + companion object { + private const val TAG = "BusPresenter" } } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt index cf4e580bc1..877921a5e0 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.kt @@ -120,10 +120,10 @@ class BusSwitchLineActivity : MvpActivity return } val lastCommitLineid = SharedPrefsMgr.getInstance().getInt(LASTCOMMITLINEID, -1) - if (data.data != null && data.data.size > 0) { + if (data.data != null && data.data.isNullOrEmpty()) { showNoData(false) mData.clear() - mData.addAll(data.data) + mData.addAll(data.data!!) mAdapter.notifyDataSetChanged() if(lastCommitLineid>0){ mData.forEachIndexed { index, line -> @@ -157,17 +157,17 @@ class BusSwitchLineActivity : MvpActivity // 打开操作 mAdapter.notifyItemChanged(position) } else { - if (lineTaskInfo.data == null || lineTaskInfo.data.isEmpty()) { + if (lineTaskInfo.data.isNullOrEmpty()) { result.haveTask = true lineTaskInfo.data = ArrayList() } - if (lineTaskInfo.data.size != result.taskList.size) { // 不相等有变动 重新赋值 - result.taskList.clear() - result.taskList.addAll(lineTaskInfo.data) + if (lineTaskInfo.data!!.size != result.taskList!!.size) { // 不相等有变动 重新赋值 + result.taskList!!.clear() + result.taskList!!.addAll(lineTaskInfo.data!!) if(autoRefresh) { mAdapter.checkTaskId = -1 mAdapter.checkLineId = -1 - lineTaskInfo.data.forEach { + lineTaskInfo.data?.forEach { if (it.id == mAdapter.checkTaskId) { mAdapter.checkTaskId = it.id mAdapter.checkLineId = result.lineId @@ -178,7 +178,7 @@ class BusSwitchLineActivity : MvpActivity mAdapter.notifyItemChanged(position) linearLayoutManager.stackFromEnd = (position==mData.size-1||position==mData.size-2)&&mData.size>6 mLinesListView.smoothScrollToPosition(position) - }else if(lineTaskInfo.data.isEmpty()){ + }else if(lineTaskInfo.data.isNullOrEmpty()){ mAdapter.notifyItemChanged(position) } } diff --git a/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt b/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt index 98e8702189..4ed6b0817d 100644 --- a/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt +++ b/OCH/bus/driver/src/main/java/com/mogo/och/bus/ui/adapter/SwitchLineAdapter.kt @@ -42,15 +42,15 @@ class SwitchLineAdapter( override fun onBindViewHolder(holder: SwitchLineViewHolder, position: Int) { val currentPosition = holder.bindingAdapterPosition val line = mData[currentPosition] - if(line.name!=null&&line.name.length>10){ - line.name = line.name.substring(0,10)+"…" + if(line.name!=null&&line.name!!.length>10){ + line.name = line.name!!.substring(0,10)+"…" } holder.lineName.text = line.name val sb = StringBuilder() - if (line.endSiteName!=null&&line.endSiteName.length>10) { - sb.append(line.endSiteName.substring(0,5)) + if (line.endSiteName!=null&&line.endSiteName!!.length>10) { + sb.append(line.endSiteName!!.substring(0,5)) sb.append("…") - sb.append(line.endSiteName.substring(line.endSiteName.length-5,line.endSiteName.length)) + sb.append(line.endSiteName!!.substring(line.endSiteName!!.length-5,line.endSiteName!!.length)) }else{ sb.append(line.endSiteName) } @@ -66,7 +66,7 @@ class SwitchLineAdapter( try { if (isCheck) { checkLineId = line.lineId - checkTaskId = line.taskList[position].id + checkTaskId = line.taskList!![position].id ?: 0 } else { checkLineId = -1 checkTaskId = -1 @@ -83,7 +83,7 @@ class SwitchLineAdapter( holder.actvShowMore.visibility = View.VISIBLE if(line.open){ - if(line.taskList==null||line.taskList.isEmpty()){ + if(line.taskList.isNullOrEmpty()){ holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_no_task) holder.actvShowMore.setTextColor(ContextCompat.getColor(mContext,R.color.bus_color_4dffffff)) holder.vLineTask.visibility = View.GONE @@ -137,7 +137,7 @@ class SwitchLineAdapter( result.open = false; notifyItemChanged(index) if(result.taskList!=null) { - result.taskList.clear() + result.taskList!!.clear() } if(index==currentPosition){// 点击当前已经打开的item 去关闭定时网络请求 mItemClickListener?.onItemClick(currentPosition,true) From 01658ea385f3011143e142f80db4def57b025632 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Mon, 9 Sep 2024 13:41:46 +0800 Subject: [PATCH 3/6] =?UTF-8?q?[6.6.0]=20[fea]=20[=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=BA=BF=E8=B7=AF=E5=B0=81=E8=A3=85=E4=B8=BAview]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/AndroidManifest.xml | 5 +- .../weaknet/bean/BusQueryLinesResponse.java | 14 + .../och/weaknet/fragment/ShuttleFragment.kt | 6 +- .../mogo/och/weaknet/model/BusLineModel.kt | 5 +- .../och/weaknet/presenter/BusLinePresenter.kt | 124 ---- .../och/weaknet/ui/BusSwitchLineView.java | 26 - .../weaknet/ui/adapter/OpenItemAnimator.java | 643 ------------------ .../SwitchLineAdapter.kt | 46 +- .../SwitchLineTaskAdapter.kt | 4 +- .../SwitchLineView.kt} | 271 ++++---- .../weaknet/ui/switchline/SwtichLineModel.kt | 125 ++++ .../ui/taskrunning/RunningTaskAdapter.kt | 3 - .../ui/taskrunning/RunningTaskManager.kt | 22 + .../ui/taskrunning/RunningTaskManagerView.kt | 5 - 14 files changed, 331 insertions(+), 968 deletions(-) delete mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusLinePresenter.kt delete mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineView.java delete mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/OpenItemAnimator.java rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{adapter => switchline}/SwitchLineAdapter.kt (82%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{adapter => switchline}/SwitchLineTaskAdapter.kt (95%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{BusSwitchLineActivity.kt => switchline/SwitchLineView.kt} (53%) create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt diff --git a/OCH/shuttle/driver_weaknet/src/main/AndroidManifest.xml b/OCH/shuttle/driver_weaknet/src/main/AndroidManifest.xml index 1f7b878d2c..b74a41c09d 100644 --- a/OCH/shuttle/driver_weaknet/src/main/AndroidManifest.xml +++ b/OCH/shuttle/driver_weaknet/src/main/AndroidManifest.xml @@ -2,10 +2,7 @@ package="com.mogo.och.shuttle.weaknet"> - + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java index 6eb4259b9a..dc24f45ae7 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java @@ -40,6 +40,20 @@ public class BusQueryLinesResponse extends BaseData { public boolean haveTask; public List taskList; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Result result = (Result) o; + return lineId == result.lineId; + } + + @Override + public int hashCode() { + return Long.hashCode(lineId); + } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt index 73c6208323..aad5f8de9a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt @@ -36,7 +36,6 @@ import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.constant.BusConst import com.mogo.och.weaknet.presenter.BusPresenter import com.mogo.och.weaknet.ui.BusStationCommonItem -import com.mogo.och.weaknet.ui.BusSwitchLineActivity import com.mogo.och.weaknet.ui.taskrunning.RunningTaskManager import me.jessyan.autosize.utils.AutoSizeUtils import org.greenrobot.eventbus.Subscribe @@ -516,8 +515,9 @@ class ShuttleFragment : BaseShuttleTabFragment( return } if (mSwitchLine!!.tag as Int == 0) { //切换路线 - val intent = Intent(context, BusSwitchLineActivity::class.java) - ActivityUtils.startActivity(intent) + context?.let { + RunningTaskManager.showSwitchLineWindow(it) + } } else { //结束任务 val builder = OCHCommitDialog.Builder() val closeLineConfirmDialog = builder 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 003db0cab4..469cb23a3b 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 @@ -46,7 +46,6 @@ import com.mogo.och.weaknet.database.transform.FRetryWithTime11 import com.mogo.och.weaknet.database.transform.TransformTask import com.mogo.och.weaknet.database.transform.transform4DataBase import com.mogo.och.weaknet.net.OrderServiceManager -import com.mogo.och.weaknet.ui.BusSwitchLineActivity import io.reactivex.Observer import io.reactivex.disposables.Disposable import java.util.concurrent.atomic.AtomicBoolean @@ -68,6 +67,8 @@ object BusLineModel { // 展示上一次刷新时间 const val executableChangeTime = "executablechangetime" + const val LASTCOMMITLINEID = "lastcommitlineid" + var currentTask: TaskDataBean?=null // 当前任务的站点列表 @@ -251,7 +252,7 @@ object BusLineModel { object : TaskRepository.TaskStatusCallback { override fun startSuccess() { SharedPrefsMgr.getInstance() - .putLong(BusSwitchLineActivity.LASTCOMMITLINEID, line.lineId) + .putLong(LASTCOMMITLINEID, line.lineId) EventRepository.saveEventTaskStart(task.id,line.lineId,task.taskStartTime,line.name) mBusLinesCallback?.onChangeLineIdSuccess() } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusLinePresenter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusLinePresenter.kt deleted file mode 100644 index 637d150d39..0000000000 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/presenter/BusLinePresenter.kt +++ /dev/null @@ -1,124 +0,0 @@ -package com.mogo.och.weaknet.presenter - -import androidx.lifecycle.LifecycleOwner -import com.mogo.commons.mvp.Presenter -import com.mogo.commons.storage.SharedPrefsMgr -import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse -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.BusLineModel.queryBusLineTasksById -import com.mogo.och.weaknet.model.BusLineModel.setBusLinesCallback -import com.mogo.och.weaknet.model.OrderModel -import com.mogo.och.weaknet.model.OrderModel.clearBusStationDatas -import com.mogo.och.weaknet.ui.BusSwitchLineView -import io.reactivex.Observable -import io.reactivex.disposables.Disposable -import java.util.concurrent.TimeUnit - -/** - * @author: wangmingjun - * @date: 2022/2/9 - */ -class BusLinePresenter(view: BusSwitchLineView?) : Presenter(view), - IBusLinesCallback { - private var subscribe: Disposable? = null - - init { - BusLineModel.init() - OrderModel.init() - } - - override fun onCreate(owner: LifecycleOwner) { - super.onCreate(owner) - initListener() - initData() - } - - private fun initData() { - BusLineModel.refreshTask() - } - - private fun initListener() { - setBusLinesCallback(this) - } - - override fun onBusLinesChange(data: List) { - mView?.onBusLinesChange(data) - } - - override fun onChangeLineIdSuccess() { - clearBusStationDatas() - UiThreadHandler.post({ - mView?.startTaskState(true) - mView?.onChangeLineIdSuccess() - }, UiThreadHandler.MODE.QUEUE) - } - - fun queryBusLines() { - BusLineModel.queryBusLines() - } - - fun queryBusLineTasks(lineId: Long, position: Int, close: Boolean) { - if (subscribe != null && !subscribe!!.isDisposed) { - subscribe!!.dispose() - } - if (close) { - return - } - queryBusLineTasksById(lineId, position, false) - subscribe = Observable.interval(3, TimeUnit.MINUTES).subscribe { aLong: Long? -> - queryBusLineTasksById(lineId, position, true) - } - } - - fun commitSwitchLineId(taskId: BusQueryLineTaskResponse.Result, lineId: BusQueryLinesResponse.Result) { - BusLineModel.commitSwitchLineId(taskId, lineId) - } - - fun removeListener() { - setBusLinesCallback(null) - } - - fun queryBusRoutes() { - OrderModel.queryBusRoutes() - } - - override fun onDestroy(owner: LifecycleOwner) { - super.onDestroy(owner) - if (subscribe != null && !subscribe!!.isDisposed) { - subscribe!!.dispose() - } - } - - - override fun onBusLineTasks( - o: List, - position: Int, - autoRefresh: Boolean - ) { - mView?.onBusLineTasks(o, position, autoRefresh) - } - - override fun onRefreshSuccess(currentTimeStamp: Long) { - mView?.refreshDate(DateTimeUtil.formatLongToString(currentTimeStamp,DateTimeUtil.yyyy_MM_dd_HH_mm_ss)) - } - - override fun onChangeLineIdFail() { - mView?.startTaskState(false) - } - - fun refreshTask() { - BusLineModel.refreshTask() - } - - fun setRefreshTime() { - val lastUpdateTime = SharedPrefsMgr.getInstance().getLong(executableChangeTime, -1) - if(lastUpdateTime>0){ - onRefreshSuccess(lastUpdateTime) - } - } -} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineView.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineView.java deleted file mode 100644 index 21706e2b16..0000000000 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineView.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mogo.och.weaknet.ui; - -import com.mogo.commons.mvp.IView; -import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse; -import com.mogo.och.weaknet.bean.BusQueryLinesResponse; - -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2022/2/10 - */ -public interface BusSwitchLineView extends IView { - - void onBusLinesChange(List data); - void onChangeLineIdSuccess(); - - void onBusLineTasks(List o, int position,boolean autoRefresh); - - void refreshDate(@Nullable String formatLongToString); - - void startTaskState(boolean b); -} - diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/OpenItemAnimator.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/OpenItemAnimator.java deleted file mode 100644 index 0880562e89..0000000000 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/OpenItemAnimator.java +++ /dev/null @@ -1,643 +0,0 @@ -package com.mogo.och.weaknet.ui.adapter; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.TimeInterpolator; -import android.animation.ValueAnimator; -import android.view.View; -import android.view.ViewPropertyAnimator; - -import androidx.annotation.NonNull; -import androidx.core.view.ViewCompat; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.SimpleItemAnimator; - -import java.util.ArrayList; -import java.util.List; - -/** - * This implementation of {@link RecyclerView.ItemAnimator} provides basic - * animations on remove, add, and move events that happen to the items in - * a RecyclerView. RecyclerView uses a DefaultItemAnimator by default. - * - * @see RecyclerView#setItemAnimator(RecyclerView.ItemAnimator) - */ -public class OpenItemAnimator extends DefaultItemAnimator { - private static final boolean DEBUG = false; - - private static TimeInterpolator sDefaultInterpolator; - - private final ArrayList mPendingRemovals = new ArrayList<>(); - private final ArrayList mPendingAdditions = new ArrayList<>(); - private final ArrayList mPendingMoves = new ArrayList<>(); - private final ArrayList mPendingChanges = new ArrayList<>(); - - ArrayList> mAdditionsList = new ArrayList<>(); - ArrayList> mMovesList = new ArrayList<>(); - ArrayList> mChangesList = new ArrayList<>(); - - ArrayList mAddAnimations = new ArrayList<>(); - ArrayList mMoveAnimations = new ArrayList<>(); - ArrayList mRemoveAnimations = new ArrayList<>(); - ArrayList mChangeAnimations = new ArrayList<>(); - - private static class MoveInfo { - public RecyclerView.ViewHolder holder; - public int fromX, fromY, toX, toY; - - MoveInfo(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { - this.holder = holder; - this.fromX = fromX; - this.fromY = fromY; - this.toX = toX; - this.toY = toY; - } - } - - private static class ChangeInfo { - public RecyclerView.ViewHolder oldHolder, newHolder; - public int fromX, fromY, toX, toY; - private ChangeInfo(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder) { - this.oldHolder = oldHolder; - this.newHolder = newHolder; - } - - ChangeInfo(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, - int fromX, int fromY, int toX, int toY) { - this(oldHolder, newHolder); - this.fromX = fromX; - this.fromY = fromY; - this.toX = toX; - this.toY = toY; - } - - @Override - public String toString() { - return "ChangeInfo{" - + "oldHolder=" + oldHolder - + ", newHolder=" + newHolder - + ", fromX=" + fromX - + ", fromY=" + fromY - + ", toX=" + toX - + ", toY=" + toY - + '}'; - } - } - - @Override - public void runPendingAnimations() { - boolean removalsPending = !mPendingRemovals.isEmpty(); - boolean movesPending = !mPendingMoves.isEmpty(); - boolean changesPending = !mPendingChanges.isEmpty(); - boolean additionsPending = !mPendingAdditions.isEmpty(); - if (!removalsPending && !movesPending && !additionsPending && !changesPending) { - // nothing to animate - return; - } - // First, remove stuff - for (RecyclerView.ViewHolder holder : mPendingRemovals) { - animateRemoveImpl(holder); - } - mPendingRemovals.clear(); - // Next, move stuff - if (movesPending) { - final ArrayList moves = new ArrayList<>(mPendingMoves); - mMovesList.add(moves); - mPendingMoves.clear(); - Runnable mover = () -> { - for (MoveInfo moveInfo : moves) { - animateMoveImpl(moveInfo.holder, moveInfo.fromX, moveInfo.fromY, - moveInfo.toX, moveInfo.toY); - } - moves.clear(); - mMovesList.remove(moves); - }; - if (removalsPending) { - View view = moves.get(0).holder.itemView; - ViewCompat.postOnAnimationDelayed(view, mover, getRemoveDuration()); - } else { - mover.run(); - } - } - // Next, change stuff, to run in parallel with move animations - if (changesPending) { - final ArrayList changes = new ArrayList<>(mPendingChanges); - mChangesList.add(changes); - mPendingChanges.clear(); - Runnable changer = () -> { - for (ChangeInfo change : changes) { - animateChangeImpl(change); - } - changes.clear(); - mChangesList.remove(changes); - }; - if (removalsPending) { - RecyclerView.ViewHolder holder = changes.get(0).oldHolder; - ViewCompat.postOnAnimationDelayed(holder.itemView, changer, getRemoveDuration()); - } else { - changer.run(); - } - } - // Next, add stuff - if (additionsPending) { - final ArrayList additions = new ArrayList<>(mPendingAdditions); - mAdditionsList.add(additions); - mPendingAdditions.clear(); - Runnable adder = () -> { - for (RecyclerView.ViewHolder holder : additions) { - animateAddImpl(holder); - } - additions.clear(); - mAdditionsList.remove(additions); - }; - if (removalsPending || movesPending || changesPending) { - long removeDuration = removalsPending ? getRemoveDuration() : 0; - long moveDuration = movesPending ? getMoveDuration() : 0; - long changeDuration = changesPending ? getChangeDuration() : 0; - long totalDelay = removeDuration + Math.max(moveDuration, changeDuration); - View view = additions.get(0).itemView; - ViewCompat.postOnAnimationDelayed(view, adder, totalDelay); - } else { - adder.run(); - } - } - } - - @Override - public boolean animateRemove(final RecyclerView.ViewHolder holder) { - resetAnimation(holder); - mPendingRemovals.add(holder); - return true; - } - - private void animateRemoveImpl(final RecyclerView.ViewHolder holder) { - final View view = holder.itemView; - final ViewPropertyAnimator animation = view.animate(); - mRemoveAnimations.add(holder); - animation.setDuration(getRemoveDuration()).alpha(0).setListener( - new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animator) { - dispatchRemoveStarting(holder); - } - - @Override - public void onAnimationEnd(Animator animator) { - animation.setListener(null); - view.setAlpha(1); - dispatchRemoveFinished(holder); - mRemoveAnimations.remove(holder); - dispatchFinishedWhenDone(); - } - }).start(); - } - - @Override - public boolean animateAdd(final RecyclerView.ViewHolder holder) { - resetAnimation(holder); - holder.itemView.setAlpha(0); - mPendingAdditions.add(holder); - return true; - } - - void animateAddImpl(final RecyclerView.ViewHolder holder) { - final View view = holder.itemView; - final ViewPropertyAnimator animation = view.animate(); - mAddAnimations.add(holder); - animation.alpha(1).setDuration(getAddDuration()) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animator) { - dispatchAddStarting(holder); - } - - @Override - public void onAnimationCancel(Animator animator) { - view.setAlpha(1); - } - - @Override - public void onAnimationEnd(Animator animator) { - animation.setListener(null); - dispatchAddFinished(holder); - mAddAnimations.remove(holder); - dispatchFinishedWhenDone(); - } - }).start(); - } - - @Override - public boolean animateMove(final RecyclerView.ViewHolder holder, int fromX, int fromY, - int toX, int toY) { - final View view = holder.itemView; - fromX += (int) holder.itemView.getTranslationX(); - fromY += (int) holder.itemView.getTranslationY(); - resetAnimation(holder); - int deltaX = toX - fromX; - int deltaY = toY - fromY; - if (deltaX == 0 && deltaY == 0) { - dispatchMoveFinished(holder); - return false; - } - if (deltaX != 0) { - view.setTranslationX(-deltaX); - } - if (deltaY != 0) { - view.setTranslationY(-deltaY); - } - mPendingMoves.add(new MoveInfo(holder, fromX, fromY, toX, toY)); - return true; - } - - void animateMoveImpl(final RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { - final View view = holder.itemView; - final int deltaX = toX - fromX; - final int deltaY = toY - fromY; - if (deltaX != 0) { - view.animate().translationX(0); - } - if (deltaY != 0) { - view.animate().translationY(0); - } - // TODO: make EndActions end listeners instead, since end actions aren't called when - // vpas are canceled (and can't end them. why?) - // need listener functionality in VPACompat for this. Ick. - final ViewPropertyAnimator animation = view.animate(); - mMoveAnimations.add(holder); - animation.setDuration(getMoveDuration()).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animator) { - dispatchMoveStarting(holder); - } - - @Override - public void onAnimationCancel(Animator animator) { - if (deltaX != 0) { - view.setTranslationX(0); - } - if (deltaY != 0) { - view.setTranslationY(0); - } - } - - @Override - public void onAnimationEnd(Animator animator) { - animation.setListener(null); - dispatchMoveFinished(holder); - mMoveAnimations.remove(holder); - dispatchFinishedWhenDone(); - } - }).start(); - } - - @Override - public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, - int fromX, int fromY, int toX, int toY) { - if (oldHolder == newHolder) { - // Don't know how to run change animations when the same view holder is re-used. - // run a move animation to handle position changes. - return animateMove(oldHolder, fromX, fromY, toX, toY); - } - final float prevTranslationX = oldHolder.itemView.getTranslationX(); - final float prevTranslationY = oldHolder.itemView.getTranslationY(); - final float prevAlpha = oldHolder.itemView.getAlpha(); - resetAnimation(oldHolder); - int deltaX = (int) (toX - fromX - prevTranslationX); - int deltaY = (int) (toY - fromY - prevTranslationY); - // recover prev translation state after ending animation - oldHolder.itemView.setTranslationX(prevTranslationX); - oldHolder.itemView.setTranslationY(prevTranslationY); - oldHolder.itemView.setAlpha(prevAlpha); - if (newHolder != null) { - // carry over translation values - resetAnimation(newHolder); - newHolder.itemView.setTranslationX(-deltaX); - newHolder.itemView.setTranslationY(-deltaY); - newHolder.itemView.setAlpha(0); - } - mPendingChanges.add(new ChangeInfo(oldHolder, newHolder, fromX, fromY, toX, toY)); - return true; - } - - void animateChangeImpl(final ChangeInfo changeInfo) { - final RecyclerView.ViewHolder holder = changeInfo.oldHolder; - final View view = holder == null ? null : holder.itemView; - final RecyclerView.ViewHolder newHolder = changeInfo.newHolder; - final View newView = newHolder != null ? newHolder.itemView : null; - if (view != null) { - final ViewPropertyAnimator oldViewAnim = view.animate().setDuration( - getChangeDuration()); - mChangeAnimations.add(changeInfo.oldHolder); - oldViewAnim.translationX((float)(changeInfo.toX - changeInfo.fromX)); - oldViewAnim.translationY((float)(changeInfo.toY - changeInfo.fromY)); - oldViewAnim.alpha(0).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animator) { - dispatchChangeStarting(changeInfo.oldHolder, true); - } - - @Override - public void onAnimationEnd(Animator animator) { - oldViewAnim.setListener(null); - view.setAlpha(1); - view.setTranslationX(0); - view.setTranslationY(0); - dispatchChangeFinished(changeInfo.oldHolder, true); - mChangeAnimations.remove(changeInfo.oldHolder); - dispatchFinishedWhenDone(); - } - }).start(); - } - if (newView != null) { - final ViewPropertyAnimator newViewAnimation = newView.animate(); - mChangeAnimations.add(changeInfo.newHolder); - newViewAnimation.translationX(0).translationY(0).setDuration(getChangeDuration()) - .alpha(1).setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animator) { - dispatchChangeStarting(changeInfo.newHolder, false); - } - @Override - public void onAnimationEnd(Animator animator) { - newViewAnimation.setListener(null); - newView.setAlpha(1); - newView.setTranslationX(0); - newView.setTranslationY(0); - dispatchChangeFinished(changeInfo.newHolder, false); - mChangeAnimations.remove(changeInfo.newHolder); - dispatchFinishedWhenDone(); - } - }).start(); - } - } - - private void endChangeAnimation(List infoList, RecyclerView.ViewHolder item) { - for (int i = infoList.size() - 1; i >= 0; i--) { - ChangeInfo changeInfo = infoList.get(i); - if (endChangeAnimationIfNecessary(changeInfo, item)) { - if (changeInfo.oldHolder == null && changeInfo.newHolder == null) { - infoList.remove(changeInfo); - } - } - } - } - - private void endChangeAnimationIfNecessary(ChangeInfo changeInfo) { - if (changeInfo.oldHolder != null) { - endChangeAnimationIfNecessary(changeInfo, changeInfo.oldHolder); - } - if (changeInfo.newHolder != null) { - endChangeAnimationIfNecessary(changeInfo, changeInfo.newHolder); - } - } - private boolean endChangeAnimationIfNecessary(ChangeInfo changeInfo, RecyclerView.ViewHolder item) { - boolean oldItem = false; - if (changeInfo.newHolder == item) { - changeInfo.newHolder = null; - } else if (changeInfo.oldHolder == item) { - changeInfo.oldHolder = null; - oldItem = true; - } else { - return false; - } - item.itemView.setAlpha(1); - item.itemView.setTranslationX(0); - item.itemView.setTranslationY(0); - dispatchChangeFinished(item, oldItem); - return true; - } - - @Override - public void endAnimation(RecyclerView.ViewHolder item) { - final View view = item.itemView; - // this will trigger end callback which should set properties to their target values. - view.animate().cancel(); - // TODO if some other animations are chained to end, how do we cancel them as well? - for (int i = mPendingMoves.size() - 1; i >= 0; i--) { - MoveInfo moveInfo = mPendingMoves.get(i); - if (moveInfo.holder == item) { - view.setTranslationY(0); - view.setTranslationX(0); - dispatchMoveFinished(item); - mPendingMoves.remove(i); - } - } - endChangeAnimation(mPendingChanges, item); - if (mPendingRemovals.remove(item)) { - view.setAlpha(1); - dispatchRemoveFinished(item); - } - if (mPendingAdditions.remove(item)) { - view.setAlpha(1); - dispatchAddFinished(item); - } - - for (int i = mChangesList.size() - 1; i >= 0; i--) { - ArrayList changes = mChangesList.get(i); - endChangeAnimation(changes, item); - if (changes.isEmpty()) { - mChangesList.remove(i); - } - } - for (int i = mMovesList.size() - 1; i >= 0; i--) { - ArrayList moves = mMovesList.get(i); - for (int j = moves.size() - 1; j >= 0; j--) { - MoveInfo moveInfo = moves.get(j); - if (moveInfo.holder == item) { - view.setTranslationY(0); - view.setTranslationX(0); - dispatchMoveFinished(item); - moves.remove(j); - if (moves.isEmpty()) { - mMovesList.remove(i); - } - break; - } - } - } - for (int i = mAdditionsList.size() - 1; i >= 0; i--) { - ArrayList additions = mAdditionsList.get(i); - if (additions.remove(item)) { - view.setAlpha(1); - dispatchAddFinished(item); - if (additions.isEmpty()) { - mAdditionsList.remove(i); - } - } - } - - // animations should be ended by the cancel above. - //noinspection PointlessBooleanExpression,ConstantConditions - if (mRemoveAnimations.remove(item) && DEBUG) { - throw new IllegalStateException("after animation is cancelled, item should not be in " - + "mRemoveAnimations list"); - } - - //noinspection PointlessBooleanExpression,ConstantConditions - if (mAddAnimations.remove(item) && DEBUG) { - throw new IllegalStateException("after animation is cancelled, item should not be in " - + "mAddAnimations list"); - } - - //noinspection PointlessBooleanExpression,ConstantConditions - if (mChangeAnimations.remove(item) && DEBUG) { - throw new IllegalStateException("after animation is cancelled, item should not be in " - + "mChangeAnimations list"); - } - - //noinspection PointlessBooleanExpression,ConstantConditions - if (mMoveAnimations.remove(item) && DEBUG) { - throw new IllegalStateException("after animation is cancelled, item should not be in " - + "mMoveAnimations list"); - } - dispatchFinishedWhenDone(); - } - - private void resetAnimation(RecyclerView.ViewHolder holder) { - if (sDefaultInterpolator == null) { - sDefaultInterpolator = new ValueAnimator().getInterpolator(); - } - holder.itemView.animate().setInterpolator(sDefaultInterpolator); - endAnimation(holder); - } - - @Override - public boolean isRunning() { - return (!mPendingAdditions.isEmpty() - || !mPendingChanges.isEmpty() - || !mPendingMoves.isEmpty() - || !mPendingRemovals.isEmpty() - || !mMoveAnimations.isEmpty() - || !mRemoveAnimations.isEmpty() - || !mAddAnimations.isEmpty() - || !mChangeAnimations.isEmpty() - || !mMovesList.isEmpty() - || !mAdditionsList.isEmpty() - || !mChangesList.isEmpty()); - } - - /** - * Check the state of currently pending and running animations. If there are none - * pending/running, call {@link #dispatchAnimationsFinished()} to notify any - * listeners. - */ - void dispatchFinishedWhenDone() { - if (!isRunning()) { - dispatchAnimationsFinished(); - } - } - - @Override - public void endAnimations() { - int count = mPendingMoves.size(); - for (int i = count - 1; i >= 0; i--) { - MoveInfo item = mPendingMoves.get(i); - View view = item.holder.itemView; - view.setTranslationY(0); - view.setTranslationX(0); - dispatchMoveFinished(item.holder); - mPendingMoves.remove(i); - } - count = mPendingRemovals.size(); - for (int i = count - 1; i >= 0; i--) { - RecyclerView.ViewHolder item = mPendingRemovals.get(i); - dispatchRemoveFinished(item); - mPendingRemovals.remove(i); - } - count = mPendingAdditions.size(); - for (int i = count - 1; i >= 0; i--) { - RecyclerView.ViewHolder item = mPendingAdditions.get(i); - item.itemView.setAlpha(1); - dispatchAddFinished(item); - mPendingAdditions.remove(i); - } - count = mPendingChanges.size(); - for (int i = count - 1; i >= 0; i--) { - endChangeAnimationIfNecessary(mPendingChanges.get(i)); - } - mPendingChanges.clear(); - if (!isRunning()) { - return; - } - - int listCount = mMovesList.size(); - for (int i = listCount - 1; i >= 0; i--) { - ArrayList moves = mMovesList.get(i); - count = moves.size(); - for (int j = count - 1; j >= 0; j--) { - MoveInfo moveInfo = moves.get(j); - RecyclerView.ViewHolder item = moveInfo.holder; - View view = item.itemView; - view.setTranslationY(0); - view.setTranslationX(0); - dispatchMoveFinished(moveInfo.holder); - moves.remove(j); - if (moves.isEmpty()) { - mMovesList.remove(moves); - } - } - } - listCount = mAdditionsList.size(); - for (int i = listCount - 1; i >= 0; i--) { - ArrayList additions = mAdditionsList.get(i); - count = additions.size(); - for (int j = count - 1; j >= 0; j--) { - RecyclerView.ViewHolder item = additions.get(j); - View view = item.itemView; - view.setAlpha(1); - dispatchAddFinished(item); - additions.remove(j); - if (additions.isEmpty()) { - mAdditionsList.remove(additions); - } - } - } - listCount = mChangesList.size(); - for (int i = listCount - 1; i >= 0; i--) { - ArrayList changes = mChangesList.get(i); - count = changes.size(); - for (int j = count - 1; j >= 0; j--) { - endChangeAnimationIfNecessary(changes.get(j)); - if (changes.isEmpty()) { - mChangesList.remove(changes); - } - } - } - - cancelAll(mRemoveAnimations); - cancelAll(mMoveAnimations); - cancelAll(mAddAnimations); - cancelAll(mChangeAnimations); - - dispatchAnimationsFinished(); - } - - void cancelAll(List viewHolders) { - for (int i = viewHolders.size() - 1; i >= 0; i--) { - viewHolders.get(i).itemView.animate().cancel(); - } - } - - /** - * {@inheritDoc} - *

- * If the payload list is not empty, DefaultItemAnimator returns true. - * When this is the case: - *

    - *
  • If you override {@link #animateChange(RecyclerView.ViewHolder, RecyclerView.ViewHolder, int, int, int, int)}, both - * ViewHolder arguments will be the same instance. - *
  • - *
  • - * If you are not overriding {@link #animateChange(RecyclerView.ViewHolder, RecyclerView.ViewHolder, int, int, int, int)}, - * then DefaultItemAnimator will call {@link #animateMove(RecyclerView.ViewHolder, int, int, int, int)} and - * run a move animation instead. - *
  • - *
- */ - @Override - public boolean canReuseUpdatedViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, - @NonNull List payloads) { - return !payloads.isEmpty() || super.canReuseUpdatedViewHolder(viewHolder, payloads); - } -} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt similarity index 82% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt index 58c678f23b..e4cb67be3f 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.adapter +package com.mogo.och.weaknet.ui.switchline import android.content.Context import android.view.LayoutInflater @@ -7,20 +7,21 @@ import android.view.ViewGroup import android.widget.ImageView import androidx.appcompat.widget.AppCompatTextView import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.DiffUtil.Callback import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mogo.och.weaknet.bean.BusQueryLinesResponse -import com.mogo.och.weaknet.ui.adapter.SwitchLineAdapter.SwitchLineViewHolder +import com.mogo.och.weaknet.ui.switchline.SwitchLineAdapter.SwitchLineViewHolder import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse -import kotlin.text.StringBuilder /** * 路线列表adapter */ class SwitchLineAdapter( private val mContext: Context, - private val mData: List + val mData: MutableList ) : RecyclerView.Adapter() { companion object{ const val TAG = "SwitchLineAdapter" @@ -29,6 +30,19 @@ class SwitchLineAdapter( private var mItemClickListener: LineItemClickListener? = null var checkLine:BusQueryLinesResponse.Result? = null var checkTask: BusQueryLineTaskResponse.Result? = null + + fun setDataList(dataList: List) { + if (this.mData == dataList) { + // 如果新旧列表一致,则直接返回 + return + } + + val diffResult = DiffUtil.calculateDiff(MyDiffCallback(this.mData, dataList)) + this.mData.clear() + this.mData.addAll(dataList) + diffResult.dispatchUpdatesTo(this) + } + override fun onCreateViewHolder( parent: ViewGroup, viewType: Int @@ -169,4 +183,28 @@ class SwitchLineAdapter( 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/adapter/SwitchLineTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt similarity index 95% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineTaskAdapter.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt index d305583a9f..fed59bb858 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/adapter/SwitchLineTaskAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.adapter +package com.mogo.och.weaknet.ui.switchline import android.content.Context import android.view.LayoutInflater @@ -8,7 +8,7 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.utilcode.util.TimeUtils import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse -import com.mogo.och.weaknet.ui.adapter.SwitchLineTaskAdapter.SwitchLineTaskViewHolder +import com.mogo.och.weaknet.ui.switchline.SwitchLineTaskAdapter.SwitchLineTaskViewHolder import com.mogo.och.shuttle.weaknet.R /** diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineActivity.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt similarity index 53% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineActivity.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt index 9c9a4c7db9..b768d290c4 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/BusSwitchLineActivity.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt @@ -1,106 +1,99 @@ -package com.mogo.och.weaknet.ui +package com.mogo.och.weaknet.ui.switchline import android.animation.ObjectAnimator import android.animation.ValueAnimator +import android.content.Context import android.content.res.ColorStateList import android.graphics.Color -import android.graphics.Point -import android.os.Bundle -import android.view.Gravity +import android.util.AttributeSet +import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import android.widget.ImageView -import android.widget.LinearLayout -import android.widget.TextView -import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import com.mogo.commons.mvp.MvpActivity import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.kotlin.onClick 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 import com.mogo.och.common.module.utils.ResourcesUtils +import com.mogo.och.common.module.wigets.WindowRelativeLayout import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse import com.mogo.och.weaknet.bean.BusQueryLinesResponse -import com.mogo.och.weaknet.presenter.BusLinePresenter -import com.mogo.och.weaknet.ui.adapter.OpenItemAnimator -import com.mogo.och.weaknet.ui.adapter.SwitchLineAdapter -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.aciv_refresh_task -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.actv_last_refresh_date -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.pb_start_task -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.tv_start_task +import com.mogo.och.weaknet.model.BusLineModel +import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.no_order_data_view +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.aciv_refresh_task +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.actv_last_refresh_date +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.pb_start_task +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_btn_commit +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_close +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_rv +import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.tv_start_task -/** - * @author: wangmingjun - * @date: 2022/2/8 - */ -class BusSwitchLineActivity : MvpActivity(), - View.OnClickListener, BusSwitchLineView { +class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallback { - companion object{ - const val LASTCOMMITLINEID = "lastcommitlineid" + + 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 = "BadCaseManagerView" } - private lateinit var mClose: ImageView - private lateinit var mNoDatasView: ConstraintLayout - private lateinit var mLinesListView: RecyclerView - private lateinit var mLineCommitBtn: LinearLayout + private var clickListener:ClickListener?=null + private var viewModel:SwtichLineModel?=null + private lateinit var mAdapter: SwitchLineAdapter - private lateinit var linearLayoutManager:LinearLayoutManager - private val mData: MutableList = ArrayList() + private var animator:ObjectAnimator?=null - override fun getLayoutId(): Int { - return R.layout.shuttle_weak_switch_line - } - override fun createPresenter(): BusLinePresenter { - return BusLinePresenter(this) - } + private lateinit var linearLayoutManager:LinearLayoutManager - override fun initViews() { - initWH() + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_switch_line, this, true) initView() } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - initDatas() - } - - /** - * 初始化view - */ - private fun initView() { - mClose = findViewById(R.id.switch_line_close) - mClose.setOnClickListener(this) - mNoDatasView = findViewById(R.id.no_order_data_view) - mLineCommitBtn = findViewById(R.id.switch_line_btn_commit) - mLineCommitBtn.setOnClickListener(this) - mLinesListView = findViewById(R.id.switch_line_rv) - linearLayoutManager = LinearLayoutManager(this) - mLinesListView.setLayoutManager(linearLayoutManager) - mLinesListView.setItemAnimator(OpenItemAnimator()) - mAdapter = SwitchLineAdapter(applicationContext, mData) - mLinesListView.addItemDecoration( + private fun initView(){ + switch_line_close.onClick { + clickListener?.onClose() + } + switch_line_btn_commit.onClick { + if(mAdapter.checkLine!=null&&mAdapter.checkTask!=null){ + viewModel?.let { + it.commitSwitchLineId(mAdapter.checkTask!!,mAdapter.checkLine!!) + startTaskLoading() + } + }else{ + ToastUtils.showLong("请选择任务") + } + } + linearLayoutManager = LinearLayoutManager(context) + switch_line_rv.setLayoutManager(linearLayoutManager) + mAdapter = SwitchLineAdapter(context, mutableListOf()) + switch_line_rv.addItemDecoration( SpacesItemDecoration( 4 ) ) - mLinesListView.setAdapter(mAdapter) + switch_line_rv.setAdapter(mAdapter) //设置item 点击事件 mAdapter.setOnLineItemClickListener(object : SwitchLineAdapter.LineItemClickListener{ override fun onItemClick(position: Int, close: Boolean) { - mPresenter?.queryBusLineTasks(mData[position].lineId, position, close) + viewModel?.queryBusLineTasks(mAdapter.mData[position].lineId, position, close) } }) + aciv_refresh_task.onClick { - mPresenter?.refreshTask() + viewModel?.refreshTask() if(animator==null) { animator = ObjectAnimator.ofFloat(aciv_refresh_task, "rotation", 0f, 360f) animator?.setDuration(1000) // 设置动画持续时间 @@ -110,51 +103,64 @@ class BusSwitchLineActivity : MvpActivity animator?.start() } pb_start_task.progressTintList = ColorStateList.valueOf(Color.WHITE) - } - /** - * 设置布局宽高 - */ - private fun initWH() { - val window = window - val params = window.attributes - val windowManager = getSystemService(WINDOW_SERVICE) as WindowManager - val point = Point() - windowManager.defaultDisplay.getSize(point) //用于获取屏幕高度 - params.width = (point.x * 0.375).toInt() - params.height = ViewGroup.LayoutParams.MATCH_PARENT - window.attributes = params - window.setGravity(Gravity.START or Gravity.BOTTOM) } /** * 初始化数据 */ private fun initDatas() { - mPresenter?.queryBusLines() - mPresenter?.setRefreshTime() + viewModel?.queryBusLines() + viewModel?.setRefreshTime() + } + + fun setOnClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + + interface ClickListener { + fun onClose() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = ViewModelProvider(this).get(SwtichLineModel::class.java) + viewModel?.setDistanceCallback(this) + initDatas() + } + + fun startTaskLoading(){ + pb_start_task.visibility = View.VISIBLE + tv_start_task.text = "创建中" + } + + override fun startTaskState(success: Boolean) { + pb_start_task.visibility = View.GONE + if(success){ + tv_start_task.text = "创建成功" + }else{ + tv_start_task.text = "创建失败" + UiThreadHandler.postDelayed({ + tv_start_task.text = "确定" + },1_000) + } } - /** - * 查询返回绑定路线集合 - * @param data - */ override fun onBusLinesChange(data: MutableList?) { if (data.isNullOrEmpty()) { showNoData(true) return } - val lastCommitLineid = SharedPrefsMgr.getInstance().getLong(LASTCOMMITLINEID, -1) + val lastCommitLineid = SharedPrefsMgr.getInstance().getLong(BusLineModel.LASTCOMMITLINEID, -1) if (data.size > 0) { showNoData(false) - mData.clear() - mData.addAll(data) - mAdapter.notifyDataSetChanged() + mAdapter.setDataList(data) if(lastCommitLineid>0){ - mData.forEachIndexed { index, line -> + mAdapter.mData.forEachIndexed { index, line -> if(line.lineId==lastCommitLineid){ line.open = true - mPresenter?.queryBusLineTasks(line.lineId,index,false) + viewModel?.queryBusLineTasks(line.lineId,index,false) return } } @@ -164,16 +170,31 @@ class BusSwitchLineActivity : MvpActivity } } + /** + * 有无数据UI显示 + * @param b + */ + private fun showNoData(b: Boolean) { + if (b) { + switch_line_rv.visibility = View.GONE + switch_line_btn_commit.visibility = View.GONE + no_order_data_view.visibility = View.VISIBLE + } else { + switch_line_rv.visibility = View.VISIBLE + switch_line_btn_commit.visibility = View.VISIBLE + no_order_data_view.visibility = View.GONE + } + } + override fun onChangeLineIdSuccess() { ToastUtils.showLong(resources.getString(R.string.bus_change_line_commit_tip_s)) - mPresenter?.queryBusRoutes() + viewModel?.queryBusRoutes() mAdapter.setOnLineItemClickListener(null) - mPresenter?.removeListener() - finish() + clickListener?.onClose() } override fun onBusLineTasks(lineTaskInfo: List, position: Int, autoRefresh:Boolean) { - val result = mData[position] + val result = mAdapter.mData[position] if (result.taskList == null) { result.taskList = ArrayList() } @@ -202,8 +223,9 @@ class BusSwitchLineActivity : MvpActivity } // 打开操作 mAdapter.notifyItemChanged(position) - linearLayoutManager.stackFromEnd = (position==mData.size-1||position==mData.size-2)&&mData.size>6 - mLinesListView.smoothScrollToPosition(position) + linearLayoutManager.stackFromEnd = + (position == mAdapter.itemCount - 1 || position == mAdapter.itemCount - 2) && mAdapter.itemCount > 6 + switch_line_rv.smoothScrollToPosition(position) }else if(lineTaskInfo.isEmpty()){ mAdapter.notifyItemChanged(position) } @@ -221,62 +243,7 @@ class BusSwitchLineActivity : MvpActivity } - /** - * 有无数据UI显示 - * @param b - */ - private fun showNoData(b: Boolean) { - if (b) { - mLinesListView.visibility = View.GONE - mLineCommitBtn.visibility = View.GONE - mNoDatasView.visibility = View.VISIBLE - } else { - mLinesListView.visibility = View.VISIBLE - mLineCommitBtn.visibility = View.VISIBLE - mNoDatasView.visibility = View.GONE - } - } - - override fun onClick(v: View) { - //关闭dialog - if (v.id == R.id.switch_line_close) { - finish() - return - } - //切换路线提交 - if (v.id == R.id.switch_line_btn_commit) { - if(mAdapter.checkLine!=null&&mAdapter.checkTask!=null){ - mPresenter?.let { - it.commitSwitchLineId(mAdapter.checkTask!!,mAdapter.checkLine!!) - startTaskLoading() - } - }else{ - ToastUtils.showLong("请选择任务") - } - } - } - - override fun startTaskState(success: Boolean) { - pb_start_task.visibility = View.GONE - if(success){ - tv_start_task.text = "创建成功" - }else{ - tv_start_task.text = "创建失败" - UiThreadHandler.postDelayed({ - tv_start_task.text = "确定" - },1_000) - } - } - fun startTaskLoading(){ - pb_start_task.visibility = View.VISIBLE - tv_start_task.text = "创建中" - } - - override fun onDestroy() { - mPresenter!!.removeListener() - super.onDestroy() - } -} \ No newline at end of file +} diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt new file mode 100644 index 0000000000..6c88562e6d --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt @@ -0,0 +1,125 @@ +package com.mogo.och.weaknet.ui.switchline + +import androidx.lifecycle.ViewModel +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse +import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.weaknet.bean.WaitUploadLine +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.BusLineModel.queryBusLineTasksById +import com.mogo.och.weaknet.model.EventModel +import com.mogo.och.weaknet.model.OrderModel +import io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +class SwtichLineModel : ViewModel(), IBusLinesCallback { + + private val TAG = SwtichLineModel::class.java.simpleName + + private var viewCallback:SwtichLineViewCallback?=null + + private var subscribe: Disposable? = null + + override fun onCleared() { + RxUtils.disposeSubscribe(subscribe) + BusLineModel.setBusLinesCallback(null) + } + + fun setDistanceCallback(viewCallback:SwtichLineViewCallback){ + this.viewCallback = viewCallback + BusLineModel.setBusLinesCallback(this) + } + + fun queryBusLines() { + BusLineModel.queryBusLines() + } + + fun setRefreshTime() { + val lastUpdateTime = SharedPrefsMgr.getInstance().getLong(executableChangeTime, -1) + if(lastUpdateTime>0){ + this.onRefreshSuccess(lastUpdateTime) + } + } + + fun refreshTask() { + BusLineModel.refreshTask() + } + + fun queryBusLineTasks(lineId: Long, position: Int, close: Boolean) { + if (subscribe != null && !subscribe!!.isDisposed) { + subscribe!!.dispose() + } + if (close) { + return + } + queryBusLineTasksById(lineId, position, false) + subscribe = Observable.interval(3, TimeUnit.MINUTES).subscribe { aLong: Long? -> + queryBusLineTasksById(lineId, position, true) + } + } + + fun commitSwitchLineId(taskId: BusQueryLineTaskResponse.Result, lineId: BusQueryLinesResponse.Result) { + BusLineModel.commitSwitchLineId(taskId, lineId) + } + + fun queryBusRoutes() { + OrderModel.queryBusRoutes() + } + + interface SwtichLineViewCallback{ + fun startTaskState(success: Boolean) + fun onBusLinesChange(data: MutableList?) + fun onChangeLineIdSuccess() + fun onBusLineTasks( + lineTaskInfo: List, + position: Int, + autoRefresh: Boolean + ) + + fun refreshDate(formatLongToString: String?) + } + + override fun onBusLinesChange(data: MutableList?) { + viewCallback?.onBusLinesChange(data) + } + + override fun onChangeLineIdSuccess() { + ThreadUtils.runOnUiThread( { + viewCallback?.onChangeLineIdSuccess() + },ThreadUtils.MODE.QUEUE) + } + + override fun onBusLineTasks( + o: MutableList, + position: Int, + autoRefresh: Boolean + ) { + viewCallback?.onBusLineTasks(o,position,autoRefresh) + } + + override fun onRefreshSuccess(currentTimeStamp: Long) { + viewCallback?.refreshDate( + DateTimeUtil.formatLongToString(currentTimeStamp, DateTimeUtil.yyyy_MM_dd_HH_mm_ss) + ) + } + + override fun onChangeLineIdFail() { + viewCallback?.startTaskState(false) + } +} + diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt index aede9e5aaa..56afb10674 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt @@ -8,10 +8,7 @@ import android.widget.TextView import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil.Callback import androidx.recyclerview.widget.RecyclerView -import com.mogo.eagle.core.function.business.travelreality.EventDrawBean import com.mogo.eagle.core.utilcode.util.TimeUtils -import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse -import com.mogo.och.weaknet.ui.adapter.SwitchLineTaskAdapter.SwitchLineTaskViewHolder import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.bean.WaitUploadLine diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt index aed3a1dc91..1eda1cfc36 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt @@ -25,6 +25,7 @@ import com.mogo.eagle.core.utilcode.kotlin.lifeCycleOwner import com.mogo.eagle.core.utilcode.reminder.Reminder import com.mogo.eagle.core.utilcode.reminder.api.impl.PopupWindowReminder import com.mogo.eagle.core.utilcode.util.* +import com.mogo.och.weaknet.ui.switchline.SwitchLineView import me.jessyan.autosize.utils.AutoSizeUtils import kotlin.math.abs @@ -58,6 +59,27 @@ object RunningTaskManager : LifecycleEventObserver{ } } + /** + * 展示BadCase配置页面 + */ + fun showSwitchLineWindow(context: Context) { + val badCaseConfigView = SwitchLineView(context) + badCaseConfigView.setOnClickListener(object : SwitchLineView.ClickListener { + override fun onClose() { + hideFloat?.invoke() + hideFloat = null + } + }) + enqueuePop( + badCaseConfigView, + AutoSizeUtils.dp2px(context, 960f), + WindowManager.LayoutParams.MATCH_PARENT, + key = "BadCaseConfigView" + ).also { + hideFloat = it + } + } + override fun onStateChanged(source: LifecycleOwner, event: Event) { } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt index 5c94dda2b3..20f0f7d56a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt @@ -1,8 +1,6 @@ package com.mogo.och.weaknet.ui.taskrunning import android.content.Context -import android.graphics.Color -import android.graphics.drawable.ColorDrawable import android.util.AttributeSet import android.view.LayoutInflater import androidx.lifecycle.ViewModelProvider @@ -13,10 +11,8 @@ import com.mogo.och.common.module.utils.ResourcesUtils import com.mogo.och.common.module.wigets.WindowRelativeLayout import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.bean.WaitUploadLine -import com.mogo.och.weaknet.ui.adapter.OpenItemAnimator import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.aciv_show_data import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.actvCurrentDate -import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.clLayout import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.ivTaskRunningClose import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.no_order_data_view import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.rvDataLiet @@ -62,7 +58,6 @@ class RunningTaskManagerView: WindowRelativeLayout, RunningTastViewModel.Running linearLayoutManager = LinearLayoutManager(context) rvDataLiet.setLayoutManager(linearLayoutManager) - rvDataLiet.setItemAnimator(OpenItemAnimator()) mAdapter = RunningTaskAdapter(context, mutableListOf()) rvDataLiet.addItemDecoration( BottomDecoration( From 26eb85ab44a624ac875d906b452ece15def6c3f1 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 12 Sep 2024 16:33:02 +0800 Subject: [PATCH 4/6] =?UTF-8?q?[6.7.0]=20[fea]=20[=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=BA=BF=E8=B7=AF=E5=92=8C=E9=80=89=E6=8B=A9=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/common/module/utils/DateTimeUtil.java | 1 + .../och/common/module/utils/ResourcesUtils.kt | 5 + .../weaknet/bean/BusQueryLinesResponse.java | 1 - .../weaknet/callback/IBusLinesCallback.java | 4 +- .../mogo/och/weaknet/model/BusLineModel.kt | 38 +++-- .../och/weaknet/ui/bizswitch/SwitchBizView.kt | 125 ++++++++++++++ .../weaknet/ui/bizswitch/SwtichBizeModel.kt | 56 +++++++ .../och/weaknet/ui/loading/LoadingViewBig.kt | 69 ++++++++ .../weaknet/ui/loading/LoadingViewSmall.kt | 56 +++++++ .../ui/switchline/SwitchLineAdapter.kt | 107 +----------- .../ui/switchline/SwitchLineTaskAdapter.kt | 76 --------- .../weaknet/ui/switchline/SwitchLineView.kt | 125 ++------------ .../weaknet/ui/switchline/SwtichLineModel.kt | 50 +----- .../ui/switchtask/SwitchLineTaskAdapter.kt | 129 +++++++++++++++ .../weaknet/ui/switchtask/SwitchTaskView.kt | 154 ++++++++++++++++++ .../weaknet/ui/switchtask/SwtichTaskModel.kt | 98 +++++++++++ .../ui/switchtask/TaskBottomDecoration.kt | 46 ++++++ .../ui/taskrunning/RunningTaskManager.kt | 18 +- .../bus_task_submit_text_color_selector.xml | 6 + .../color/bus_task_text_color_selector.xml | 8 + .../main/res/drawable-nodpi/bus_biz_bg.png | Bin 0 -> 317570 bytes .../res/drawable-nodpi/bus_biz_bg_header.png | Bin 0 -> 1948 bytes .../drawable-nodpi/bus_line_task_arrow.png | Bin 491 -> 137 bytes .../bus_switch_biz_loading_big.png | Bin 0 -> 1541 bytes .../bus_switch_biz_loading_samll.png | Bin 0 -> 521 bytes .../bus_switch_line_adapter_point.png | Bin 0 -> 610 bytes .../bus_weak_switch_task_bottom.png | Bin 0 -> 1877 bytes .../drawable-nodpi/shuttle_refresh_task.png | Bin 4386 -> 1671 bytes .../res/drawable-nodpi/shuttle_weak_empty.png | Bin 0 -> 1212 bytes .../bus_shape_select_line_item_bg_normal.xml | 5 +- .../res/drawable/bus_switch_line_normal.xml | 6 + .../res/drawable/bus_switch_line_selected.xml | 8 + .../res/drawable/bus_switch_line_selector.xml | 6 + .../res/drawable/bus_switch_task_normal.xml | 6 + .../res/drawable/bus_switch_task_selected.xml | 6 + .../res/drawable/bus_switch_task_selector.xml | 8 + .../res/layout/shuttle_weak_base_fragment.xml | 6 + .../res/layout/shuttle_weak_empty_view.xml | 32 ++++ .../res/layout/shuttle_weak_loading_view.xml | 31 ++++ .../shuttle_weak_loading_view_samll.xml | 9 + .../res/layout/shuttle_weak_switch_biz.xml | 49 ++++++ .../res/layout/shuttle_weak_switch_line.xml | 86 ++-------- .../shuttle_weak_switch_line_list_item.xml | 82 +++------- .../res/layout/shuttle_weak_switch_task.xml | 115 +++++++++++++ .../layout/shuttle_weak_switch_task_item.xml | 23 +++ .../src/main/res/values/colors.xml | 7 + .../src/main/res/values/strings.xml | 6 +- .../taxi/ui/task/TaxiCurrentTaskViewModel.kt | 1 - .../unmanned/taxi/ui/task/TaxiTaskModel.kt | 4 +- .../src/main/res/values/dimens.xml | 1 + 50 files changed, 1183 insertions(+), 486 deletions(-) create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewBig.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewSmall.kt delete mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwtichTaskModel.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/TaskBottomDecoration.kt create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/color/bus_task_submit_text_color_selector.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/color/bus_task_text_color_selector.xml create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_biz_bg.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_biz_bg_header.png mode change 100644 => 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_line_task_arrow.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_biz_loading_big.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_biz_loading_samll.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_line_adapter_point.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_weak_switch_task_bottom.png mode change 100644 => 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_refresh_task.png create mode 100755 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_weak_empty.png create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_normal.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selected.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selector.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_normal.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selected.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selector.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_empty_view.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view_samll.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_biz.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task.xml create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task_item.xml diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java index 3dd98d36ea..de2f21f05a 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java @@ -23,6 +23,7 @@ public class DateTimeUtil { public static final String yy_MM_dd = "yy.MM.dd"; public static final String yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm"; public static final String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss"; + public static final String HH_mm_ss = "HH:mm:ss"; public static final String MM_dd_HH_mm_china = "yyyy年MM月dd日"; public static String formatCalendarToString(Calendar calendar, String format){ diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/ResourcesUtils.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/ResourcesUtils.kt index fdc1c8bc9a..0af2640eb4 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/ResourcesUtils.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/utils/ResourcesUtils.kt @@ -1,5 +1,6 @@ package com.mogo.och.common.module.utils +import android.content.res.ColorStateList import android.graphics.BitmapFactory import androidx.annotation.ColorRes import androidx.annotation.StringRes @@ -11,6 +12,10 @@ object ResourcesUtils { fun getColor(@ColorRes id: Int): Int { return ContextCompat.getColor(AbsMogoApplication.getApp(),id) } + @JvmStatic + fun getColors(@ColorRes id: Int): ColorStateList? { + return ContextCompat.getColorStateList(AbsMogoApplication.getApp(),id) + } @JvmStatic fun getString(@StringRes id: Int): String { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java index dc24f45ae7..71a885c737 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/bean/BusQueryLinesResponse.java @@ -36,7 +36,6 @@ public class BusQueryLinesResponse extends BaseData { public String startSiteName;//始发站名称 public String endSiteName;//终点名称 - public boolean open;//true 打开状态 false public boolean haveTask; public List taskList; 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 9927dda46c..41d43009ee 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 @@ -10,9 +10,9 @@ import java.util.List; * @date: 2022/2/9 */ public interface IBusLinesCallback { - void onBusLinesChange(List data); + default void onBusLinesChange(List data){} void onChangeLineIdSuccess(); - void onBusLineTasks(List o, int position,boolean autoRefresh); + default void onBusLineTasks(List o){} void onRefreshSuccess(long currentTimeStamp); 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 469cb23a3b..18eeb09bc3 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 @@ -48,6 +48,7 @@ import com.mogo.och.weaknet.database.transform.transform4DataBase import com.mogo.och.weaknet.net.OrderServiceManager import io.reactivex.Observer import io.reactivex.disposables.Disposable +import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicBoolean /** @@ -57,7 +58,9 @@ import java.util.concurrent.atomic.AtomicBoolean @SuppressLint("StaticFieldLeak") object BusLineModel { private var mContext: Context? = null - private var mBusLinesCallback: IBusLinesCallback? = null + + private val mBusLinesCallbackMap: MutableMap = ConcurrentHashMap() + private const val TAG = "BusLineModel" private const val LoopCarInfo = "LoopCarInfo" @@ -101,13 +104,18 @@ object BusLineModel { fun release() { mContext = null EventModel.release() - mBusLinesCallback = null + mBusLinesCallbackMap.clear() BizLoopManager.removeCallback(loopQueryInfo) } @JvmStatic - fun setBusLinesCallback(callback: IBusLinesCallback?) { - mBusLinesCallback = callback + fun setBusLinesCallback(tag:String,callback: IBusLinesCallback?) { + if (tag == null || "" == tag) return + if (callback == null) { + mBusLinesCallbackMap.remove(tag) + return + } + mBusLinesCallbackMap[tag] = callback } fun refreshTask() { @@ -139,7 +147,9 @@ object BusLineModel { SharedPrefsMgr.getInstance().putLong(executableChangeTime, currentTimeStamp) val sameDay = DateTimeUtil.isSameDay(currentTimeStamp, lastUpdateTime) - mBusLinesCallback?.onRefreshSuccess(currentTimeStamp) + mBusLinesCallbackMap.forEach { + it.value.onRefreshSuccess(currentTimeStamp) + } if(isBackground){ if (currentRequest == lastChangeMd5 && sameDay) { return @@ -203,7 +213,9 @@ object BusLineModel { } override fun onNext(data: List) { - mBusLinesCallback?.onBusLinesChange(data) + mBusLinesCallbackMap.forEach { + it.value.onBusLinesChange(data) + } } }) @@ -215,7 +227,7 @@ object BusLineModel { * @param position 位置 */ @JvmStatic - fun queryBusLineTasksById(lineId: Long, position: Int, autoRefresh: Boolean) { + fun queryBusLineTasksById(lineId: Long) { TaskRepository.queryCanUserTask(lineId) ?.transform4DataBase(TransformTask()) ?.subscribe(object : Observer> { @@ -232,8 +244,8 @@ object BusLineModel { } override fun onNext(data: List) { - if (mBusLinesCallback != null) { - mBusLinesCallback!!.onBusLineTasks(data, position, autoRefresh) + mBusLinesCallbackMap.forEach { + it.value.onBusLineTasks(data) } } @@ -254,12 +266,16 @@ object BusLineModel { SharedPrefsMgr.getInstance() .putLong(LASTCOMMITLINEID, line.lineId) EventRepository.saveEventTaskStart(task.id,line.lineId,task.taskStartTime,line.name) - mBusLinesCallback?.onChangeLineIdSuccess() + mBusLinesCallbackMap.forEach { + it.value.onChangeLineIdSuccess() + } } override fun startFail(msg: String) { ToastUtils.showShort("选择任务失败:$msg") - mBusLinesCallback?.onChangeLineIdFail() + mBusLinesCallbackMap.forEach { + it.value.onChangeLineIdFail() + } } }) 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 new file mode 100644 index 0000000000..72b45359be --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwitchBizView.kt @@ -0,0 +1,125 @@ +package com.mogo.och.weaknet.ui.bizswitch + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.utils.ResourcesUtils +import com.mogo.och.common.module.wigets.WindowRelativeLayout +import com.mogo.och.shuttle.weaknet.R +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 + +class SwitchBizView: WindowRelativeLayout, SwtichBizeModel.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 = "SwitchBizView" + } + + private var viewModel: SwtichBizeModel?=null + + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_switch_biz, this, true) + initView() + } + + private fun initView(){ + loading_biz.setEmptyText(ResourcesUtils.getString(R.string.bus_switch_biz_loading)) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SwtichBizeModel::class.java) + } + viewModel?.setDistanceCallback(this) + } + + var startLoading = System.currentTimeMillis() + + // 展示loading页面 + override fun showLoadingView(){ + startLoading = System.currentTimeMillis() + loading_biz.visibility = VISIBLE + swtichLine.visibility = GONE + swtichTask.visibility = GONE + } + + + /** + * 初始化数据 + */ + 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 + 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{ + loading_biz.visibility = GONE + swtichLine.visibility = GONE + swtichTask.visibility = VISIBLE + } + } + + // 展示选择线路页面 + override fun showSwtichLineView() { + val endLoading = System.currentTimeMillis() + val dex = endLoading - startLoading + 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{ + loading_biz.visibility = GONE + swtichLine.visibility = VISIBLE + swtichTask.visibility = GONE + } + + } + + fun showSwitchTaskView(){ + + } + 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 new file mode 100644 index 0000000000..e24cb8cdfe --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/bizswitch/SwtichBizeModel.kt @@ -0,0 +1,56 @@ +package com.mogo.och.weaknet.ui.bizswitch + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.weaknet.model.BusLineModel + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +class SwtichBizeModel : ViewModel() { + + private val TAG = SwtichBizeModel::class.java.simpleName + + private var viewCallback:SwtichLineViewCallback?=null + + + override fun onCleared() { + } + + fun setDistanceCallback(viewCallback:SwtichLineViewCallback){ + this.viewCallback = viewCallback + this.viewCallback?.loadLineData() + } + + fun loadingSwitchTask(lineInfo:BusQueryLinesResponse.Result){ + viewCallback?.showSwitchTaskByLineInfo(lineInfo) + } + + fun showSwitchTaskInfo() { + viewCallback?.showSwitchTaskInfo() + } + + fun showSwitchLineInfo() { + viewCallback?.loadLineData() + } + fun showSwitchLineInfoResult(){ + viewCallback?.showSwtichLineView() + } + + fun showRunningTaskView() { + + } + + interface SwtichLineViewCallback{ + fun showSwtichLineView() + fun showLoadingView() + fun showSwitchTaskByLineInfo(lineInfo: BusQueryLinesResponse.Result) + fun showSwitchTaskInfo() + fun loadLineData() + } + +} + 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/ui/loading/LoadingViewBig.kt new file mode 100644 index 0000000000..260bf2d547 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewBig.kt @@ -0,0 +1,69 @@ +package com.mogo.och.weaknet.ui.loading + +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.animation.LinearInterpolator +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.map.listener.IMogoMapListener +import com.mogo.och.shuttle.weaknet.R +import kotlinx.android.synthetic.main.shuttle_weak_loading_view.view.actv_loading_text +import kotlinx.android.synthetic.main.shuttle_weak_loading_view.view.loading_view + +class LoadingViewBig @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr),IMogoMapListener { + companion object { + const val TAG = "LoadingMapStatusView" + } + + private var autopilotLoadingAnimator: ObjectAnimator? = null + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_loading_view, this, true) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerLogger.d(TAG,"onAttachedToWindow") + if (autopilotLoadingAnimator == null) { + autopilotLoadingAnimator = ObjectAnimator.ofFloat(loading_view, "rotation", 0f, 360f) + autopilotLoadingAnimator?.setInterpolator(LinearInterpolator()) + autopilotLoadingAnimator?.setRepeatCount(-1) //无限循环 + autopilotLoadingAnimator?.setDuration(1000) //设置持续时间 + } + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + autopilotLoadingAnimator?.start() + }else{ + autopilotLoadingAnimator?.cancel() + } + } + + fun setEmptyText(text:CharSequence){ + if (ThreadUtils.isMainThread()) { + actv_loading_text.text = text + }else{ + ThreadUtils.runOnUiThread( { + actv_loading_text.text = text + },ThreadUtils.MODE.QUEUE) + } + } + + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerLogger.d(TAG,"onDetachedFromWindow") + } + + + +} \ No newline at end of file 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/ui/loading/LoadingViewSmall.kt new file mode 100644 index 0000000000..d6cbcdff9d --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/loading/LoadingViewSmall.kt @@ -0,0 +1,56 @@ +package com.mogo.och.weaknet.ui.loading + +import android.animation.ObjectAnimator +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.animation.LinearInterpolator +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.map.listener.IMogoMapListener +import com.mogo.och.shuttle.weaknet.R +import kotlinx.android.synthetic.main.shuttle_weak_loading_view_samll.view.loading_view_samll + +class LoadingViewSmall @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr),IMogoMapListener { + companion object { + const val TAG = "LoadingMapStatusView" + } + + private var autopilotLoadingAnimator: ObjectAnimator? = null + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_loading_view_samll, this, true) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + CallerLogger.d(TAG,"onAttachedToWindow") + if (autopilotLoadingAnimator == null) { + autopilotLoadingAnimator = ObjectAnimator.ofFloat(loading_view_samll, "rotation", 0f, 360f) + autopilotLoadingAnimator?.setInterpolator(LinearInterpolator()) + autopilotLoadingAnimator?.setRepeatCount(-1) //无限循环 + autopilotLoadingAnimator?.setDuration(1000) //设置持续时间 + } + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + autopilotLoadingAnimator?.start() + }else{ + autopilotLoadingAnimator?.cancel() + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerLogger.d(TAG,"onDetachedFromWindow") + } + + + +} \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt index e4cb67be3f..0d7b905afd 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt @@ -60,97 +60,21 @@ class SwitchLineAdapter( holder.lineName.text = line.name val string = mContext.getString(R.string.bus_line_goto_end, line.endSiteName) holder.lineEndName.text = string - holder.rvLineTask.layoutManager = GridLayoutManager(mContext, 3) - val switchLineTaskAdapter = SwitchLineTaskAdapter( - mContext, - if(checkTask==null) -1 else checkTask!!.id, - line.taskList, - object : SwitchLineTaskAdapter.TaskItemClickListener { - override fun onItemClick(position: Int,isCheck:Boolean) { - try { - if(isCheck) { - checkLine = line - checkTask = line.taskList[position] - }else{ - checkLine=null - checkTask=null - } - }catch (e:Exception){ - e.printStackTrace() - checkLine=null - checkTask=null - } - } - }) - holder.rvLineTask.adapter = switchLineTaskAdapter - holder.rvLineTask.isFocusableInTouchMode = false - holder.actvShowMore.visibility = View.VISIBLE - - if(line.open){ - if(line.taskList==null||line.taskList.isEmpty()){ - holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_no_task) - holder.actvShowMore.setTextColor(ContextCompat.getColor(mContext,R.color.bus_color_4dffffff)) - holder.vLineTask.visibility = View.GONE - holder.rvLineTask.visibility = View.GONE - holder.selectIv.visibility = View.INVISIBLE - holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_normal) - }else { - holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_select_task) - holder.actvShowMore.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)) - holder.vLineTask.visibility = View.VISIBLE - holder.rvLineTask.visibility = View.VISIBLE - holder.selectIv.visibility = View.VISIBLE - holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_selected) - holder.selectIv.apply { - pivotX = 9.5f - pivotY = 17f - rotation = 90f - } - } - }else{ - if(line.haveTask){ - holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_no_task) - holder.actvShowMore.setTextColor(ContextCompat.getColor(mContext,R.color.bus_color_4dffffff)) - holder.vLineTask.visibility = View.GONE - holder.rvLineTask.visibility = View.GONE - holder.selectIv.visibility = View.INVISIBLE - holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_normal) - }else { - holder.actvShowMore.text = mContext.getString(R.string.bus_switch_line_select_task) - holder.actvShowMore.setTextColor(ContextCompat.getColor(mContext,android.R.color.white)) - holder.vLineTask.visibility = View.GONE - holder.rvLineTask.visibility = View.GONE - holder.selectIv.visibility = View.VISIBLE - holder.itemView.setBackgroundResource(R.drawable.bus_shape_select_line_item_bg_normal) - holder.selectIv.apply { - pivotX = 9.5f - pivotY = 17f - rotation = 0f - } - } - } //设置item点击事件 holder.itemView.setOnClickListener { - if(holder.actvShowMore.text==mContext.getString(R.string.bus_switch_line_no_task)){ - return@setOnClickListener - } mData.forEachIndexed { index, result -> - if(result.open){ - result.open = false; - notifyItemChanged(index) - if(result.taskList!=null) { - result.taskList.clear() - } - if(index==currentPosition){// 点击当前已经打开的item 去关闭定时网络请求 - mItemClickListener?.onItemClick(currentPosition,true) - return@setOnClickListener - } + notifyItemChanged(index) + if(result.taskList!=null) { + result.taskList.clear() + } + if(index==currentPosition){// 点击当前已经打开的item 去关闭定时网络请求 + mItemClickListener?.onItemClick(currentPosition,true) + return@setOnClickListener } } mItemClickListener?.onItemClick(currentPosition,false) - line.open = holder.rvLineTask.visibility == View.GONE } } @@ -163,21 +87,8 @@ class SwitchLineAdapter( } class SwitchLineViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val selectIv: ImageView - val lineName: AppCompatTextView//线路名称 - val lineEndName: AppCompatTextView //终点 - val actvShowMore: AppCompatTextView //选择时间 - val rvLineTask: RecyclerView// 排班时间 - val vLineTask: View// 白色分割线 - - init { - selectIv = itemView.findViewById(R.id.switch_line_item_select_iv) - lineName = itemView.findViewById(R.id.switch_line_name) - lineEndName = itemView.findViewById(R.id.switch_line_end_station) - rvLineTask = itemView.findViewById(R.id.rv_line_task_list) - vLineTask = itemView.findViewById(R.id.v_line_task) - actvShowMore = itemView.findViewById(R.id.actv_show_more) - } + val lineName: AppCompatTextView = itemView.findViewById(R.id.switch_line_name)//线路名称 + val lineEndName: AppCompatTextView = itemView.findViewById(R.id.switch_line_end_station) //终点 } interface LineItemClickListener { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt deleted file mode 100644 index fed59bb858..0000000000 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineTaskAdapter.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.mogo.och.weaknet.ui.switchline - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.mogo.eagle.core.utilcode.util.TimeUtils -import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse -import com.mogo.och.weaknet.ui.switchline.SwitchLineTaskAdapter.SwitchLineTaskViewHolder -import com.mogo.och.shuttle.weaknet.R - -/** - * 路线列表adapter - */ -class SwitchLineTaskAdapter( - private val mContext: Context, - private var checkTaskId:Long, - private val mData: List?, - private val mTaskItemClickListener: TaskItemClickListener? -) : RecyclerView.Adapter() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SwitchLineTaskViewHolder { - val view = LayoutInflater.from(mContext).inflate( - R.layout.shuttle_weak_switch_line_list_task_item, parent, false - ) - return SwitchLineTaskViewHolder(view) - } - - override fun onBindViewHolder(holder: SwitchLineTaskViewHolder, position: Int) { - val currentPosition = holder.bindingAdapterPosition - val task = mData!![currentPosition] - val taskStartTime = TimeUtils.millis2String(task.taskStartTime, "HH:mm") - holder.lineTask.text = taskStartTime - if(checkTaskId==task.id){ - holder.lineTask.setBackgroundResource(R.drawable.bus_shape_select_line_item_time_bg_selected) - }else{ - holder.lineTask.setBackgroundResource(R.drawable.bus_shape_select_line_item_time_bg) - } - holder.lineTask.setOnClickListener { - if(checkTaskId==task.id){ - checkTaskId = -1 - mTaskItemClickListener?.onItemClick(currentPosition,false) - }else { - resetOther() - checkTaskId = task.id - mTaskItemClickListener?.onItemClick(currentPosition,true) - } - notifyItemChanged(currentPosition) - } - } - - private fun resetOther() { - mData?.forEachIndexed { index, result -> - if(result.id==checkTaskId){ - checkTaskId = -1 - notifyItemChanged(index) - } - } - } - - override fun getItemCount(): Int { - return mData?.size ?: 0 - } - - class SwitchLineTaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val lineTask: TextView // 时间 - init { - lineTask = itemView.findViewById(R.id.actv_line_task) - } - } - - interface TaskItemClickListener { - fun onItemClick(position: Int,isCheck:Boolean) - } -} \ No newline at end of file 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 b768d290c4..72cff90e0a 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 @@ -3,12 +3,11 @@ package com.mogo.och.weaknet.ui.switchline import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.content.Context -import android.content.res.ColorStateList -import android.graphics.Color import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.kotlin.onClick @@ -21,14 +20,12 @@ import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse import com.mogo.och.weaknet.bean.BusQueryLinesResponse import com.mogo.och.weaknet.model.BusLineModel +import com.mogo.och.weaknet.ui.bizswitch.SwtichBizeModel import kotlinx.android.synthetic.main.shuttle_wadk_task_running.view.no_order_data_view import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.aciv_refresh_task import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.actv_last_refresh_date -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.pb_start_task -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_btn_commit -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_close import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.switch_line_rv -import kotlinx.android.synthetic.main.shuttle_weak_switch_line.view.tv_start_task +import me.jessyan.autosize.utils.AutoSizeUtils class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallback { @@ -47,8 +44,8 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba const val TAG = "BadCaseManagerView" } - private var clickListener:ClickListener?=null private var viewModel:SwtichLineModel?=null + private var viewbizModel:SwtichBizeModel?=null private lateinit var mAdapter: SwitchLineAdapter @@ -63,32 +60,20 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba } private fun initView(){ - switch_line_close.onClick { - clickListener?.onClose() - } - switch_line_btn_commit.onClick { - if(mAdapter.checkLine!=null&&mAdapter.checkTask!=null){ - viewModel?.let { - it.commitSwitchLineId(mAdapter.checkTask!!,mAdapter.checkLine!!) - startTaskLoading() - } - }else{ - ToastUtils.showLong("请选择任务") - } - } linearLayoutManager = LinearLayoutManager(context) switch_line_rv.setLayoutManager(linearLayoutManager) mAdapter = SwitchLineAdapter(context, mutableListOf()) switch_line_rv.addItemDecoration( SpacesItemDecoration( - 4 + AutoSizeUtils.dp2px(context,20f) ) ) switch_line_rv.setAdapter(mAdapter) //设置item 点击事件 mAdapter.setOnLineItemClickListener(object : SwitchLineAdapter.LineItemClickListener{ override fun onItemClick(position: Int, close: Boolean) { - viewModel?.queryBusLineTasks(mAdapter.mData[position].lineId, position, close) + viewbizModel?.loadingSwitchTask(mAdapter.mData[position]) + //viewModel?.queryBusLineTasks(mAdapter.mData[position].lineId, position, close) } }) @@ -102,72 +87,40 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba } animator?.start() } - pb_start_task.progressTintList = ColorStateList.valueOf(Color.WHITE) - } /** * 初始化数据 */ - private fun initDatas() { + fun loadingDatas() { viewModel?.queryBusLines() viewModel?.setRefreshTime() } - fun setOnClickListener(clickListener: ClickListener) { - this.clickListener = clickListener - } - - - interface ClickListener { - fun onClose() - } - override fun onAttachedToWindow() { super.onAttachedToWindow() - viewModel = ViewModelProvider(this).get(SwtichLineModel::class.java) - viewModel?.setDistanceCallback(this) - initDatas() - } + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SwtichLineModel::class.java) + } + viewbizModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SwtichBizeModel::class.java) + } - fun startTaskLoading(){ - pb_start_task.visibility = View.VISIBLE - tv_start_task.text = "创建中" + viewModel?.setDistanceCallback(this) } override fun startTaskState(success: Boolean) { - pb_start_task.visibility = View.GONE - if(success){ - tv_start_task.text = "创建成功" - }else{ - tv_start_task.text = "创建失败" - UiThreadHandler.postDelayed({ - tv_start_task.text = "确定" - },1_000) - } + } override fun onBusLinesChange(data: MutableList?) { if (data.isNullOrEmpty()) { showNoData(true) - return - } - val lastCommitLineid = SharedPrefsMgr.getInstance().getLong(BusLineModel.LASTCOMMITLINEID, -1) - if (data.size > 0) { + }else{ showNoData(false) mAdapter.setDataList(data) - if(lastCommitLineid>0){ - mAdapter.mData.forEachIndexed { index, line -> - if(line.lineId==lastCommitLineid){ - line.open = true - viewModel?.queryBusLineTasks(line.lineId,index,false) - return - } - } - } - } else { - showNoData(true) } + viewbizModel?.showSwitchLineInfoResult() } /** @@ -177,11 +130,9 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba private fun showNoData(b: Boolean) { if (b) { switch_line_rv.visibility = View.GONE - switch_line_btn_commit.visibility = View.GONE no_order_data_view.visibility = View.VISIBLE } else { switch_line_rv.visibility = View.VISIBLE - switch_line_btn_commit.visibility = View.VISIBLE no_order_data_view.visibility = View.GONE } } @@ -190,46 +141,6 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba ToastUtils.showLong(resources.getString(R.string.bus_change_line_commit_tip_s)) viewModel?.queryBusRoutes() mAdapter.setOnLineItemClickListener(null) - clickListener?.onClose() - } - - override fun onBusLineTasks(lineTaskInfo: List, position: Int, autoRefresh:Boolean) { - val result = mAdapter.mData[position] - if (result.taskList == null) { - result.taskList = ArrayList() - } - if (lineTaskInfo == null) { - result.haveTask = true - // 打开操作 - mAdapter.notifyItemChanged(position) - } else { - if ( lineTaskInfo.isEmpty()) { - result.haveTask = true - } - if (lineTaskInfo.size != result.taskList.size) { // 不相等有变动 重新赋值 - result.taskList.clear() - result.taskList.addAll(lineTaskInfo) - if(autoRefresh) { - mAdapter.checkTask = null - mAdapter.checkLine = null - lineTaskInfo.forEach {lineTaskInfoInner-> - mAdapter.checkTask?.let { - if (lineTaskInfoInner.id == it.id) { - mAdapter.checkTask = lineTaskInfoInner - mAdapter.checkLine = result - } - } - } - } - // 打开操作 - mAdapter.notifyItemChanged(position) - linearLayoutManager.stackFromEnd = - (position == mAdapter.itemCount - 1 || position == mAdapter.itemCount - 2) && mAdapter.itemCount > 6 - switch_line_rv.smoothScrollToPosition(position) - }else if(lineTaskInfo.isEmpty()){ - mAdapter.notifyItemChanged(position) - } - } } override fun refreshDate(formatLongToString: String?) { diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt index 6c88562e6d..271af171ea 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt @@ -2,25 +2,14 @@ package com.mogo.och.weaknet.ui.switchline import androidx.lifecycle.ViewModel import com.mogo.commons.storage.SharedPrefsMgr -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse import com.mogo.och.weaknet.bean.BusQueryLinesResponse -import com.mogo.och.weaknet.bean.WaitUploadLine 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.BusLineModel.queryBusLineTasksById -import com.mogo.och.weaknet.model.EventModel import com.mogo.och.weaknet.model.OrderModel -import io.reactivex.Observable -import io.reactivex.Observer -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.Disposable -import io.reactivex.schedulers.Schedulers -import java.util.concurrent.TimeUnit /** * @author XuXinChao @@ -33,16 +22,14 @@ class SwtichLineModel : ViewModel(), IBusLinesCallback { private var viewCallback:SwtichLineViewCallback?=null - private var subscribe: Disposable? = null override fun onCleared() { - RxUtils.disposeSubscribe(subscribe) - BusLineModel.setBusLinesCallback(null) + BusLineModel.setBusLinesCallback(TAG,null) } fun setDistanceCallback(viewCallback:SwtichLineViewCallback){ this.viewCallback = viewCallback - BusLineModel.setBusLinesCallback(this) + BusLineModel.setBusLinesCallback(TAG,this) } fun queryBusLines() { @@ -60,23 +47,6 @@ class SwtichLineModel : ViewModel(), IBusLinesCallback { BusLineModel.refreshTask() } - fun queryBusLineTasks(lineId: Long, position: Int, close: Boolean) { - if (subscribe != null && !subscribe!!.isDisposed) { - subscribe!!.dispose() - } - if (close) { - return - } - queryBusLineTasksById(lineId, position, false) - subscribe = Observable.interval(3, TimeUnit.MINUTES).subscribe { aLong: Long? -> - queryBusLineTasksById(lineId, position, true) - } - } - - fun commitSwitchLineId(taskId: BusQueryLineTaskResponse.Result, lineId: BusQueryLinesResponse.Result) { - BusLineModel.commitSwitchLineId(taskId, lineId) - } - fun queryBusRoutes() { OrderModel.queryBusRoutes() } @@ -85,12 +55,6 @@ class SwtichLineModel : ViewModel(), IBusLinesCallback { fun startTaskState(success: Boolean) fun onBusLinesChange(data: MutableList?) fun onChangeLineIdSuccess() - fun onBusLineTasks( - lineTaskInfo: List, - position: Int, - autoRefresh: Boolean - ) - fun refreshDate(formatLongToString: String?) } @@ -104,17 +68,9 @@ class SwtichLineModel : ViewModel(), IBusLinesCallback { },ThreadUtils.MODE.QUEUE) } - override fun onBusLineTasks( - o: MutableList, - position: Int, - autoRefresh: Boolean - ) { - viewCallback?.onBusLineTasks(o,position,autoRefresh) - } - override fun onRefreshSuccess(currentTimeStamp: Long) { viewCallback?.refreshDate( - DateTimeUtil.formatLongToString(currentTimeStamp, DateTimeUtil.yyyy_MM_dd_HH_mm_ss) + DateTimeUtil.formatLongToString(currentTimeStamp, DateTimeUtil.HH_mm_ss) ) } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt new file mode 100644 index 0000000000..31531da6ed --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchLineTaskAdapter.kt @@ -0,0 +1,129 @@ +package com.mogo.och.weaknet.ui.switchtask + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.widget.AppCompatCheckedTextView +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.DiffUtil.Callback +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse +import com.mogo.och.weaknet.ui.switchtask.SwitchLineTaskAdapter.SwitchLineTaskViewHolder +import com.mogo.och.shuttle.weaknet.R + +/** + * 路线列表adapter + */ +@Suppress("UNUSED_EXPRESSION") +class SwitchLineTaskAdapter( + private val mContext: Context, + private var checkTask:BusQueryLineTaskResponse.Result?, + private val mData: MutableList, +) : RecyclerView.Adapter() { + + fun setDataList(dataList: List) { + if (this.mData == dataList) { + // 如果新旧列表一致,则直接返回 + return + } + + checkTask = null + + val diffResult = DiffUtil.calculateDiff(MyDiffCallback(this.mData, dataList)) + this.mData.clear() + this.mData.addAll(dataList) + diffResult.dispatchUpdatesTo(this) + } + + fun getCheckTask():BusQueryLineTaskResponse.Result?{ + return checkTask + } + + private var mTaskItemClickListener: TaskItemClickListener? = null + + fun setOnLineItemClickListener(mTaskItemClickListener: TaskItemClickListener?) { + this.mTaskItemClickListener = mTaskItemClickListener + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SwitchLineTaskViewHolder { + val view = LayoutInflater.from(mContext).inflate( + R.layout.shuttle_weak_switch_task_item, parent, false + ) + return SwitchLineTaskViewHolder(view) + } + + override fun onBindViewHolder(holder: SwitchLineTaskViewHolder, position: Int) { + val currentPosition = holder.bindingAdapterPosition + val task = mData[currentPosition] + val taskStartTime = TimeUtils.millis2String(task.taskStartTime, "HH:mm") + holder.taskTime.text = taskStartTime + + holder.taskTime.isChecked = if(checkTask!=null) checkTask!!.id == task.id else false + holder.taskTime.setOnClickListener { + if(checkTask==null){ + resetOther() + checkTask = task + mTaskItemClickListener?.onItemClick(currentPosition,true) + }else{ + if(checkTask!!.id==task.id){ + checkTask = null + mTaskItemClickListener?.onItemClick(currentPosition,false) + }else { + resetOther() + checkTask = task + mTaskItemClickListener?.onItemClick(currentPosition,true) + } + } + + notifyItemChanged(currentPosition) + } + + } + + private fun resetOther() { + mData.forEachIndexed { index, result -> + if(checkTask!=null && result.id==checkTask!!.id){ + checkTask = null + notifyItemChanged(index) + } + } + } + + override fun getItemCount(): Int { + return mData.size + } + + class SwitchLineTaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val taskTime: AppCompatCheckedTextView = itemView.findViewById(R.id.actv_task_time) // 时间 + } + + interface TaskItemClickListener { + fun onItemClick(position: Int,isCheck: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.id == newItem.id + } + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { + val oldItem = oldData[oldItemPosition] + val newItem = newData[newItemPosition] + return oldItem.id == newItem.id + } + + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000..7d0b96feb9 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwitchTaskView.kt @@ -0,0 +1,154 @@ +package com.mogo.och.weaknet.ui.switchtask + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.mogo.view.SpacesItemDecoration +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.utils.ResourcesUtils +import com.mogo.och.common.module.wigets.WindowRelativeLayout +import com.mogo.och.shuttle.weaknet.R +import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse +import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.weaknet.ui.bizswitch.SwtichBizeModel +import com.mogo.och.weaknet.ui.switchtask.SwitchLineTaskAdapter.TaskItemClickListener +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.actvLineEndStationName +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.actv_cancle_task +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.actv_submit_task +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.busLineName +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.cl_submit_task +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.include_empty +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.loading_start_line +import kotlinx.android.synthetic.main.shuttle_weak_switch_task.view.rv_switch_task +import me.jessyan.autosize.utils.AutoSizeUtils + + +class SwitchTaskView: WindowRelativeLayout, SwtichTaskModel.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 = "BadCaseManagerView" + } + + private var viewModel:SwtichTaskModel?=null + private var viewbizModel:SwtichBizeModel?=null + + private lateinit var mAdapter: SwitchLineTaskAdapter + + private lateinit var linearLayoutManager:LinearLayoutManager + + init { + LayoutInflater.from(context).inflate(R.layout.shuttle_weak_switch_task, this, true) + initView() + } + + private fun initView(){ + linearLayoutManager = GridLayoutManager(context, 3) + rv_switch_task.setLayoutManager(linearLayoutManager) + mAdapter = SwitchLineTaskAdapter(context,null, mutableListOf()) + rv_switch_task.setAdapter(mAdapter) + mAdapter.setOnLineItemClickListener(object : TaskItemClickListener{ + override fun onItemClick(position: Int, isCheck: Boolean) { + + } + }) + //rv_switch_task.setRecycledViewPool(null); + rv_switch_task.addItemDecoration( + TaskBottomDecoration( + AutoSizeUtils.dp2px(context, 174f) + ) + ) + + actv_submit_task.onClick { + val tempCheckTask = mAdapter.getCheckTask() + if(tempCheckTask==null){ + ToastUtils.showShort("请选择任务") + }else{ + viewModel?.changeLineStart(tempCheckTask) + } + } + actv_cancle_task.onClick { + viewbizModel?.showSwitchLineInfo() + } + } + + /** + * 初始化数据 + */ + private fun initDatas() { + viewModel?.queryBusLines() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(SwtichTaskModel::class.java) + } + viewbizModel = findViewTreeViewModelStoreOwner()?.let { + 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 + } + + override fun showTaskByLineIdResult(taskList: MutableList) { + if(taskList.isEmpty()){ + showEmptyView() + }else { + showData() + mAdapter.setDataList(taskList) + } + viewbizModel?.showSwitchTaskInfo() + } + + private fun showData(){ + actv_submit_task.setTextColor(ResourcesUtils.getColors(R.color.bus_task_submit_text_color_selector)) + actv_submit_task.isEnabled = true + rv_switch_task.visibility = VISIBLE + include_empty.visibility = GONE + } + override fun showLoading(){ + loading_start_line.visibility = VISIBLE + actv_submit_task.isEnabled = false + actv_cancle_task.isEnabled = false + } + + override fun hideLoading(){ + loading_start_line.visibility = GONE + actv_submit_task.isEnabled = true + actv_cancle_task.isEnabled = true + } + + override fun startTaskSuccess() { + viewbizModel?.showRunningTaskView() + } + + private fun showEmptyView(){ + actv_submit_task.setTextColor(ResourcesUtils.getColor(R.color.bus_color_66666)) + actv_submit_task.isEnabled = false + rv_switch_task.visibility = GONE + include_empty.visibility = VISIBLE + } + +} 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 new file mode 100644 index 0000000000..a9d06374c6 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/SwtichTaskModel.kt @@ -0,0 +1,98 @@ +package com.mogo.och.weaknet.ui.switchtask + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.weaknet.bean.BusQueryLineTaskResponse +import com.mogo.och.weaknet.bean.BusQueryLinesResponse +import com.mogo.och.weaknet.callback.IBusLinesCallback +import com.mogo.och.weaknet.model.BusLineModel +import io.reactivex.disposables.Disposable + +/** + * @author XuXinChao + * @description BadCase录包管理页面 + * @since: 2022/12/15 + */ +class SwtichTaskModel : ViewModel(), IBusLinesCallback { + + private val TAG = SwtichTaskModel::class.java.simpleName + + private var viewCallback:SwtichLineViewCallback?=null + + private var tasksBelongLine: BusQueryLinesResponse.Result? = null + + private var subscribe: Disposable? = null + + override fun onCleared() { + RxUtils.disposeSubscribe(subscribe) + BusLineModel.setBusLinesCallback(TAG,null) + } + + fun setDistanceCallback(viewCallback:SwtichLineViewCallback){ + this.viewCallback = viewCallback + BusLineModel.setBusLinesCallback(TAG,this) + } + + fun queryBusLines() { + BusLineModel.queryBusLines() + } + + fun queryBusLineTasksById(lineInfo: BusQueryLinesResponse.Result) { + tasksBelongLine = lineInfo + BusLineModel.queryBusLineTasksById(lineInfo.lineId) + } + + interface SwtichLineViewCallback{ + fun showTaskByLineIdResult(taskList: MutableList) + fun showLoading() + fun hideLoading() + fun startTaskSuccess() + } + + override fun onBusLineTasks(o: MutableList) { + viewCallback?.showTaskByLineIdResult(o) + } + + override fun onRefreshSuccess(currentTimeStamp: Long) { + TODO("Not yet implemented") + } + + // 选择线路成功 + override fun onChangeLineIdSuccess() { + if (ThreadUtils.isMainThread()) { + viewCallback?.hideLoading() + viewCallback?.startTaskSuccess() + }else{ + ThreadUtils.runOnUiThread({ + viewCallback?.hideLoading() + viewCallback?.startTaskSuccess() + },ThreadUtils.MODE.QUEUE) + } + + } + // 选择线路失败 + override fun onChangeLineIdFail() { + if (ThreadUtils.isMainThread()) { + viewCallback?.hideLoading() + }else{ + ThreadUtils.runOnUiThread({ + viewCallback?.hideLoading() + },ThreadUtils.MODE.QUEUE) + } + viewCallback?.hideLoading() + } + + fun changeLineStart(checkTask:BusQueryLineTaskResponse.Result) { + if(tasksBelongLine==null){ + ToastUtils.showShort("请重新选择线路") + return + } + viewCallback?.showLoading() + BusLineModel.commitSwitchLineId(checkTask,tasksBelongLine!!) + } + + +} + diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/TaskBottomDecoration.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/TaskBottomDecoration.kt new file mode 100644 index 0000000000..a6d7158f1e --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchtask/TaskBottomDecoration.kt @@ -0,0 +1,46 @@ +package com.mogo.och.weaknet.ui.switchtask + +import android.graphics.Rect +import android.view.View +import android.widget.LinearLayout +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger + +class TaskBottomDecoration(val distance: Int) : RecyclerView.ItemDecoration() { + + private val TAG = "TaskBottomDecoration" + + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + val pos = parent.getChildAdapterPosition(view) + /** + * 通过设置Item左右边距实现第一个左侧和最后一个右侧设置边距,确保显示的视图位于屏幕中间 + */ + val itemCount = parent.adapter!!.itemCount + val layoutManager = parent.layoutManager + + if(layoutManager is GridLayoutManager){ + var lastPathCount = itemCount % layoutManager.spanCount + //2 5 % 3 + CallerLogger.d(TAG,"位置---${pos}_lastPathCount:${lastPathCount}_____itemCount:${itemCount}__spanCount:${layoutManager.spanCount}") + if(lastPathCount==0){ + lastPathCount = layoutManager.spanCount + } + if(pos + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/color/bus_task_text_color_selector.xml b/OCH/shuttle/driver_weaknet/src/main/res/color/bus_task_text_color_selector.xml new file mode 100644 index 0000000000..d25528bf6f --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/color/bus_task_text_color_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_biz_bg.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_biz_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..b65431da08c334ec0c9dcd456a8d78cc8d88636c GIT binary patch literal 317570 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

!o=sTW$ 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

L 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ʐ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 z zt&Ib94FF_sWx`kN)}IwL6DJn6K$-!Ac#<=pY{T<)Y!L)ZYo+Vdjsjv^(sK6|!l+TL zQA4v9%BE(GfRgC#DzoVZssgx;TI;`>#M=!o_u{m#gJ`HVR^I5`uWWFYAZo7j=BKa%F)9Yhz#1tAC3+$wHPQlt)az+Wo zo6iwB#4ILB9wweL8_&Nv!27c+9o84Eln}%)g3ST~;#UOmmkAjggKCRLP|PshY$<7a zd=3kLb()Uof*4+E71N8Tm1(;Sh)>QF1-1(YRwerKjo=s{7Q*_b?+e9D6T}Z>6GQX4 zTj+wWVGawk>t@~_LRRj1As?s+3LsgOGgB7ROnU(E^3;q zO10=ZT-XbB3TSoVq(77g!L6Z}5d$vcDqI^YP=SfkGouJ%xu~_mr@$+svRU1+SA=8N;6T)^I-r!cd2rnXstPgsF$*u)rWA1jah}+-_NwFi?R;N(Q|qmF zldZz>>H-ne_ku7)uJ}24_KHzIhe6E1(3d>p&cXxNm!cX2h4VRieezJjFv_+jvPug# zzJ}~ZLy`MZGudNxY*l(+hK)1xmE!}oqvXkTa|U2z947&<<*E#Iq5+ott6Y4U7BTfu zJ3z9>w2LijVtKAb9A!GQ9c*X{&;Y8x?VC+{LPE{xoB?r5>BWfE5I%yQPL~o^e3GTo zBIAe2*s?#Z7}lv(=eVmRdFU^XpzWu>G~(1W&s&W6_E*nSG;N&+$)=~)I|Rft;SvzL zVk%hY!D&l{%<&*GC+E$M{hBC(xQa9pr#zK?kZ|-%zJ8VZ+->-jG=MStudJ9b zmi*i{PsGhHu{Tz6Q1iL+p@>?>)W5gZEt|Zi*Ls<`qCoC8A|?0OP?rquch!kx8+t1D zwu3T zPRQ7Li0ot%eI|BMD+Lu#{sH1lYb2b|UCjak#H_=S1@Xho06`-FXIg4|cth1?;WXBY zx&HPOSL`r$jx(AGA2@xp;k`MJt9o?%ZKH4)W+U^33^wgzKZdU$VtE)XCSCC`NsvrN zY3cA6ew->iNbqaAO`G4DU>7}!|F*RoYz#vuqSO?;4+`SU9

}i!QcEpu9l1yHVlF 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�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 Hu0mjfK*xJu literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_biz_bg_header.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_biz_bg_header.png new file mode 100755 index 0000000000000000000000000000000000000000..8cc1c9e36ec7fab4a68b39c1802c3e57730c0e54 GIT binary patch literal 1948 zcmbuA`#)6s8plWEGK9p6O_HdFg{j!s?J3#FC630-w2;eKB+Bg^Q!XXOOgHT5h}m9j zHA*tg5{n}{*+k69EtlMN5e|)UFlG`dduIO&=ljF+`9AOO=lMK8esB8voY;o_0gJ(4 zwt2X_5HT1k?7-xIql)&LOk}fgRPP^ zPG_g8nW2e>vF5P3?@kOxdBwx!I4NmNRHXj&K3>~pEy7Gqd}%Xq*H84tWIWgTF!o;! z%w6`q?-Fl#sMeHaXml^7cgFiClyM#F>sJmQEnDsTY{iMT)Oo(Wn<&(Y7cZ+2H*oHU za({PI=&ySqMjS@JU&tNCv(A<2zajZ0chy(2zm(7HQ|!PhR9L{rT6*0=dQU&$rB|nAo4elDQ}^@ex>w64yYo z_~5M}mlbjiqMBx@$_<)~L<$!zub+l8_>Z6Dx79DT{Ilf1_U3L*Q{{h|`<@d+sjhg6 zutU?go|@|UQN{3l!47|jXsY3#7-H4Z@(Wx2Zq->BZK;mKvn6^&z?O1xcPYrV&O_;b z>^xFOWZy4F5z7L41B$nYsR=a0I{LSf)N{?;4{i||PXda=;(J01$3gozXt_a_JwRc%>irx}?uFK^*>-GA`+Sm(&1-1%K9bDj z=hAbSjEBTmf=GmUIoljunPy0H(H;@^1D`KE5e_0?x%Du`EP&2vGn^-FfvFM9z)mZ5 z*K7l?1&J&Bw_}QXK@VSlPYblxyCVEp44_`?ArNb#eX%xdi7mz_)m1V95cMj)kH8fObyxn~ZEb zDq5|RXz@jYerV%?i7U?7D5T&K{R-!S*>tx$4ylTDeZAEp>qnqzCpf*PR|?{$xtzfA z1(V*v+4t~UKifD5UB;!tk0E-k0{T=_5sJUK<4rm_xYPJ77=^o4^!U&LB-6msyJn9g zz-PYL(6ZIJzM=6fBrjGp-VuO@E1LQA!$1u9od6_TIOKl|1}>jW^Jz5F9ylXJYuE3d zeg{+M46>40ZHtOpQHU*>CZ74jmKIkx5v%2({zV8}0L290C_obb+XPX4Ni@^nSkbV9r~08u!haMecgPC+)%;O`7E&7Y|PMY7X8cP?pz7 zOE2y)```tyeP%-I;t5#q{Q|n>p^z8h0Yg-EOAfJjXRf9ko*qD zKYW%56sO=io4M+n{Yvj($8gre{aGRRIH|}B5ehhG9w+*((MMp%XjU!0AihJbPS6qz zf9fcnfORuO6}noy6;#A~~r^7BM<6czS=eIGqo zcJH#U_Hujw$f{`4!)2<7633FxcXL8(YJW&Yd=gk~I3BhyN`wZq5rDXf`45?VW1iop zVU}USvKy~b5N)>#?W{OHd4FISrj2R&d%v8@`na~2KuO!Mirwnw#mXNK^KG1)L!Ty? z@`I1|!ZU-0Bx;#pjDO^e2-rm!+GlJ>wckC5-krM5{H;p@jV3Bf9gd_RXEZE6s-z$^ z4RsG63B=O}`i(%s5cV3=Wx$Cgy+PeG>dca+Q}?`W?uXw}A#MCN2~?*KxEOsxWAR|S zergJ0siE$??*vQAq8>lV5v;$gGKmy@Leub|>aAam=jqhrxmptFy*?1$ErCMx0Yw*S;uz0YvKU5DB^+liU$A|>cGqkpSTS_S+wqaj;-7+brNP;*Viu|KKk`4;!_~*- IiE}9ZFGG)rI{*Lx literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_line_task_arrow.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_line_task_arrow.png old mode 100644 new mode 100755 index b32f0693a6bd437f6e1c5e6039e9f9ef092dcaa3..47c387eb9ffc1cd48cfcc0ad917e0242e8fcdeca GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^LO`s*!VDze2ALiLQv3lvA+A9BKN9G7x|abIVl4^s z3uX{pbvAT%$)i@FfQqM!V~E7%%HDxlcHVajlY WmD9iEa^rQNdInEdKbLh*2~7Y@rY#}> literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^!a%IV!3HGvmOVNGq!^2X+?^QKos)S9xJU2c1fa4|PZ!4! z58k!YZhJX7inQtOUB6p{=W{@cUAzAS=}KLeMwW#gi(Icr|4^Bzv9xm6`=D+2oAgo) zCv8p>`?KNttCez^+OPBCOQV(s$U*6*hMs&A9%+1V6SKe zcg{lwvo!~dHcVxX*v_PV;2PHsMf>mbuP)QG@cHvgmP=ku;3tFklEd$rAM_cUGQ=+a z;K}VW?K02H57B-*xHW1PGIwrfWjwWz^U}pd1wZ249$VZtTTsjHHNCujy@=Ft%U29< zty|_-J}>7;exV?{UgVF%rfG&RyH87-UOwuY5GwNA>+AL1!VL$f@71j;wf^om OKzq9SxvXX!^ZC4<&*z8FkM9CMUr#+9QymZpq=!6x z>a5yMbyKu8)zdTxU8^S04;ARHcH{pp8#KH`{dZ5=S>FJV(SEzk5ck;2TkO+4Vful_ zZrh+|LoE=#*HRK5Lm)Rnpv|X{r%nWBG8b8_;-@x7d7M86{eLdnt}Ryy918E=V1;oDs>Y)kembL$irweGo6>dyBw63`V$J|>yqaA;!Q6;2jd!Q zZXMqlOshFm-uleJ2o=uZiIXc7DJKE{LqWUcnt7jEtC9{qe2UHRhe|7qq#gIW+a1xu}LEw90RII-J_9AvWHfgZQH3NrN6+9T{A{<{*8B+07*BTKdDf{ns)YV1j7I-0?vIOFV z2{)s0^k#dBmND+|*4SJbH=nw$p`u)9`@QJ-3E7i|Vee!a@nB=LtBg6iJ56@p;2d5= zI3v#ro)(RlluzU+AERr|$W6~dx}tIv3AR)?i6-{JnF(jx6&f6uik3(0Hu%suuzc8& zX=ue031(yd@)|0il_~O%mFd2McR{Js;6@-FlD&-}-of#)fy~{*Nj!VTK#=d?Fh#*~ z6ADfu>9g|+=ERPyVfEr-P_adL443&0b|*x*oI~B~VF@0dGynE5WjP1y-Z;3ahnpjw zK65kj%Xh+Bd$j}1mJTg=g0ghBoLAPX`W+Yoi}aC(aC14TCBUo--4MvF>v2plz1J7{ z`kcj1HAgmzeHi1-eDkD@tU+P*)aN)X#4Tw(8%@LmczPq7H3N*1#CE&5U@CJ0I*A2mkV87k1@Fp}Q7U9iWXQDbm9QL)@o~d-gY4g$3Q7oZ z`B4N{^VCaWDhFWy@zP$A(L~#ij~~6{ z+!t>}Iog`=Bjdpl<851RcSqR#OVcagdROR7k9QCWV(x(-ex$WZa^1E4Q`ElV^2(_m zch!)^m((@~q9W5PyjB2lvFVR(SLjrN2Zt?a(|5@Jl~jtt>zA!&y>eH*x}1aW$GGxL zSz&1tWPE_06g!#>ue7!vM%^KP)!hh~)!P>@Xm_pz({25ut?R8z&$OftMGC6q*Ry0Y zwmb;>(%PCtS$q#^BG7FOKlmkMva*Qr>-SqiJq1kGC1uaXjOarfr3Q(sV*8K=G7-u*LtlmRo={&%J-M(zYCLojQU|sKDn-?ZH%SX217K#9NV-B{;kvD;&0p>I5>r&=BI2+O^(BAuHR=5&@@!r1m;Q%WYlO`?n$%9W_ zY&LkGxu+Y|=Y)+|uOsYFn{qA!Ib2?Ky^Ba)1a-geDD1Lkyh6MI{x$&|`ZI97B>ayg zfQ-Q}rH?O3V`;ZXv8^;MTw^C>34N5gQMU48VWsI4l?2twZ^1mrj^rsj6Qf5wcF^Zz zRvfX-^974ffqA|drc@3Zo~L~PmhPV@oY`%4U8UiKp57Yg>&H>&E(q!Fd#cGTBKIFd CNlZ@w literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_biz_loading_samll.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_biz_loading_samll.png new file mode 100755 index 0000000000000000000000000000000000000000..468b00604fafe614cb1e20064c1255d98366e834 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^wm@vd!3-oHJ#eZ6Qr-bRA+A9BKb1i9Om23dagrrL ze!&dNBCKIT?iFUn87{o3rRws*`dqgDQjvu#4Bk&-U|vk zA81xv!Dy$ZJHPPl!A&);AD6u2OWk7SlF}bF|FX#P zyM7b>UM%lr{q?msXUY-r5HarLp6BZ{_b&T%!=%YTSG7RQe4c@31#3^Fl^Nn&xXH~U(A9yn98jH-<8wME<7{9hTGP|#3Y_2Qto$;mj`jm?z zVQ1dw*t5o7P~Y-r(Y019wOsDf9og5boFyt=akR{ E0F49@G5`Po literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_line_adapter_point.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_switch_line_adapter_point.png new file mode 100755 index 0000000000000000000000000000000000000000..b2c4edba60b650806f01199ef6cfd4e261572337 GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TG9|C+rT!FOY_NS7q-z8sNmTdc> 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_weak_switch_task_bottom.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_weak_switch_task_bottom.png new file mode 100755 index 0000000000000000000000000000000000000000..07eae67fbe4e79720cdc52c9cc428e1e7140a739 GIT binary patch literal 1877 zcmbW0X;hQf7KXnNhA;%7Qbh(~RTpin7f}NVWZ(-^f}f&>H%l8Pck2$(`7fC(3_5t1-eBKHOZ_cQ+NTK&5}}w(jX*ntPIwO@>F8l+R|4tCAuIt)Bx8wQpr^23K^6{9xFdd{2Qhf4-JKlh zOe8}ZO2BbE=uPtS#}K@Z`iJ}aM>^u%AxCFdGQHMt}uE#{ffyC482r5`uqG?)bh@Ks|UC1p9nKN1>~?$+0@uXk%9YD^gp77_L}JZU-4J>?FR73hHGXMihX zbXU<&##xEK3avqYzqtcp*s^# zc)CGI%WPc}FWI;BnTV-|^|1GqZ%U9F)lSg-y!zXjisq6zYYm|yO?FInYI!_=AYP5} z?!2b4(fefcIm1EJ9NaTL5-h4%dY2R&s=-%4WQGg}Jl3{UF8)B@d`^^w+HcJmYQ|ZC z<{TKJhQ_ISP3>rtC9!5SJ(Z$IMC;h}wY9a8*Ka=u&39XwP_luTjAYQZs6sW@+bo|h z{^*=&WLua6Lp;fYYsCYfAX{}akT7!EGqbxIXoZP{3OMy6D~C%(BA!E@wia(W}e zbJ4oSpFPECq;GT4W1T%~x7t*DIFaJl13Hvb65D`_K)jLF-U5Bfb{gB~XejL%pLMAQ zve-Djdtq_YMx%UrenYgb{$=+Ewt8SSyhVsvAA@PSEKBX~PItZ%=9IB#lnqnM>K=hi zsUSfA^siQwoSUnumu@BQx!3TwmqFHg+e?bs)tEJLKPd=Zja{)voGe7F>b_CiG;xD_ z&iu}rmyd-luLO9GPj38)sELaQnO%}>?DQt}M^Asb0V|hFT|lPH zN+<5z%_6|p>6~Tt;F%>YbQkXs$fO6u%A3yFR1aoHYN0O-`ZDY=DEQgY(~+or)Sbbc zpQ-S6Z1eAQ#*SNMB7@PBje%3Ju%wWN5jYy#a-Qaa(Y6^rX^a`WQnuq=h>k z!@-j@*`GJ(9xi`tl!8a<ob#v0jq!pXSddVtX5^@){TR_J#S>DIZG~hn(L;DQ36^mqD|uvsw3&OkIj86?@}i zPHU6ecZs*SqW08OpLDetXJwqSYe^^gMwFv9b|&*0v@E6RGZcX)Hk4k z>qCpR0d**8f*&8o?9M(vVMfyuPO!GV1cR1j6R2EN8LvR~mUp`w-rN0XZJ_)4?ZAJ< urYyV19cZ~5pDEeq=)2n8KD&}uu7JDW>7-uVmErU8wRn3{J?^_jU;aOKCwN`} literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_refresh_task.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_refresh_task.png old mode 100644 new mode 100755 index 74006bcc6cb8ab865d88ec41033a4b9d3c172acf..99286987388d9be934ccdb4937407f1cbb393127 GIT binary patch literal 1671 zcmW-gdpy%?9LIMW)#*Z=^y>HhDGFVjZqh}%yjn#TQAr&q-AU43CQj`!`WhI9& zlys(0h)!ChQist@Gh=McW@|Ra+&7!ed3OGIp6B&_UeD|M`F!8s?{jO9kH_>W_!I(x zFnuT4%@>`U&~lzkM7zrpvJ-(Y;p3iNe(or=dN4p>v;aefzm@|<14a3 zI1r-&Z3EmNgy3;dbD%Qf({%F4R&@Xh-%IhZF<^WLRU_o| zm>kB8LY5kWjX1pU_?==C33_Kmp0=(0fKmv(3r zn23p*p#sew7wX#coVQ;^L;O6{*JmHW!i?MKYVXKQakar!GQr!D{Dc$xeO9itv6?Y? zOh2j}8Sd-tQA#^Rd`?64OIm6w^>%z*XlT&6vu95nJ``}!-;?aNb<4&ziydsSA14{c z^m?6cR68^@G}xzB_w=Y#U2>U3A{L9k2?c_-Rvw$pu4l2TKUY`EEjNOw9GG;b9j;LxO`&9{=swp4}chwrqA;>F99I*`J0!VeL-0t$yU1 ztgrC_zI(BWeU^4+!E%uxBv;;iC@-DX^G+j*P@6W(RbF*&KmR0bbMgv4d)-|#H<2W^ zk!dpHCyDft4Ph&?Z*aeH%ZY|X)GSGv{hE(v;U8TWDBjUNchZP5y=*SCm*^~Prm^25Eh z2T0OLM|$C_z#?kbRNU6aJ8ntQMxWKJLw=3C{Urya-}!n^D>i3WsY~kea*Kof%PF<3 zQ9tmBk;jkhxanOM7WyjemD+6k`envwI?3|hI_GF6)8JB)%+q&YvoEx{T@c}yl-NMFn-N>=|NQ%# z4bkp4DU>2y@NY{{k-q>5<8k*zM{ zb5AJ_Q}{&A{cUma*;a=VrcJP`&OA;%!&-b&7c~DZHN%+iT@yTfeaR|PbJ4@3T$}w1 z3_y~tFUUWW9iDvP)?P=B*poUhAR{Ay7I5&U;zBSr=^N!JC2tfS~oz@Mxub&E*$`^7BR9ma&QzXmQN&UpPUWX&O=Tn#OySTJvpUs8n9Z8+tfvYt& zxmzUtmz6Jt^twc^aZ#oF)ySFeDI2buk6BCa)e#O>Om7Gs_{Tg+X1?-Oh-)pOB$Me_ zwC0V!1<~LX7#Q*N_x&f=4Nds8P8dQ@Pj6K%d?2ZP`@l#{aJC)DG3S+_&q&zm?&DUt H?O4ozUx8>X literal 4386 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 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_weak_empty.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/shuttle_weak_empty.png new file mode 100755 index 0000000000000000000000000000000000000000..93393ca8d075092dc9b5e016fe6615ad9576430d GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0vp^$AEYq2Q!e2o6-6eNQDIWgt!9f|I`Ks@ixS04o0cDiM@z4yBKqUV0-qJX~pyo>x>nHLvqv10yzIP~g+6#}Jx7G5rM zC6rYR-8_@>9T`u*jt;WACp>Bo%N1I%AbC-(ZO zgt^82V9CNO6@3>UW)$t;pP07ZP)K0v+qI57cF9X5I}SPX^vES|`5=(Y9{js|qlAI^ z#v z-ZQQG5FnA^u=UXaE-ml5(=*dP|MB?dx8U5l?lk5VE^}UNS8rbTSm+tYDq;7sfbiq2 zPj6LiD6M6PyI216{G&Vb^6uq4{Br5(oO?BUz8?MPaA>DASEcf#&xvz4R~ghkQ9OOq zU-*xIBcB%Q8{zVu&AJAJ$7pGMyNb9tx#F+XKLx2oY&XOcjA=(%4mnSI4!F<;^}z6Qkc z{VUexdT%$IW6t)tIbrtmZ{In>e{aeo=Uduu{`W1?=vt)lD=6l5?&|eb`<#zz@wxWK zXURHd{9XPxZWD+6+GATA*2!!!i^}*tNpXG1_2aq^HeB4-=ybQ-E>ryY)X*!=$Evfk z9Il5RwVuPnXT~Y{-ke!caq-=H!(-V=Jrc^t9uOdT-u)`-SrC2Z-((5Z-oyftFV)-H zrzf-gEqleiHb2K=m*;^jDdpoAH5gCF_igmv5hS2&>)zXv%^K+0zPP(3n|nH-S^{n2e-oQ(`=%=xO=Jl$2|Jshrz9$2>^*_aAbg@+!z@Gd z%76Dd{@k2@$T)w&vGt#qJYr}3#S^2ilwP2=MaG+5@3&N^X-xQb8UH!&jN@MkovWC- zjqQBT_cFtCTN?lD@eg{u^34YiOQY)_A4~ImwmdAqIc6_XpB=wfx>agt_QKF$9j$qc4!lN0`@^82fjN||#v zxw>4L-@i^=E3kC_^p!S&FD1);e;<$BJ4yJ{_Nf}5XviGBer PE*Lyr{an^LB{Ts5gV$;I literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml index 272e718cce..01a809ee6a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_shape_select_line_item_bg_normal.xml @@ -1,7 +1,6 @@ - + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_normal.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_normal.xml new file mode 100644 index 0000000000..01a809ee6a --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_normal.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selected.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selected.xml new file mode 100644 index 0000000000..c236e4a6e4 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selected.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selector.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selector.xml new file mode 100644 index 0000000000..6f1e2e2037 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_line_selector.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_normal.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_normal.xml new file mode 100644 index 0000000000..01a809ee6a --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_normal.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selected.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selected.xml new file mode 100644 index 0000000000..0e6053471f --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selected.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selector.xml b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selector.xml new file mode 100644 index 0000000000..67b7a651be --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/drawable/bus_switch_task_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml index e66b6e78cf..6c307be248 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_base_fragment.xml @@ -364,4 +364,10 @@ app:layout_constraintStart_toStartOf="parent" /> + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_empty_view.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_empty_view.xml new file mode 100644 index 0000000000..a373c03087 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_empty_view.xml @@ -0,0 +1,32 @@ + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view.xml new file mode 100644 index 0000000000..1267ed89a6 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view.xml @@ -0,0 +1,31 @@ + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view_samll.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view_samll.xml new file mode 100644 index 0000000000..90cae6970a --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_loading_view_samll.xml @@ -0,0 +1,9 @@ + + \ 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 new file mode 100644 index 0000000000..bb5bb00351 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_biz.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_line.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_line.xml index a2467b96bf..a2c9d13e8b 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_line.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_line.xml @@ -1,31 +1,20 @@ - - + android:layout_width="@dimen/dp_880" + android:layout_height="@dimen/dp_966" + xmlns:tools="http://schemas.android.com/tools"> - - + android:layout_width="@dimen/dp_60" + android:layout_height="@dimen/dp_50"/> @@ -63,41 +42,12 @@ android:id="@+id/switch_line_rv" android:layout_width="match_parent" android:layout_height="@dimen/dp_0" - app:layout_constraintLeft_toLeftOf="@+id/switch_line_1" + android:layout_marginStart="@dimen/dp_54" + android:layout_marginEnd="@dimen/bus_dp_52" app:layout_constraintTop_toBottomOf="@+id/actv_last_refresh_date" - app:layout_constraintBottom_toTopOf="@+id/switch_line_btn_commit" - android:layout_marginTop="@dimen/dp_50" - android:layout_marginBottom="@dimen/dp_30"/> - - - - - - + android:layout_marginTop="@dimen/dp_22" + android:layout_marginBottom="@dimen/dp_24"/> + android:background="@drawable/bus_switch_line_selector"> - + + @@ -33,15 +31,16 @@ android:id="@+id/switch_line_name" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="@dimen/dp_80" - android:layout_marginTop="@dimen/dp_34" + android:layout_marginStart="@dimen/dp_20" + android:layout_marginEnd="@dimen/dp_20" android:ellipsize="end" android:singleLine="true" android:textColor="@android:color/white" - android:textSize="@dimen/dp_46" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintEnd_toStartOf="@+id/actv_show_more" + android:textSize="@dimen/dp_40" + app:layout_constraintTop_toTopOf="@+id/aciv_line_point" + app:layout_constraintBottom_toBottomOf="@+id/aciv_line_point" + app:layout_constraintStart_toEndOf="@+id/aciv_line_point" + app:layout_constraintEnd_toStartOf="@+id/switch_line_item_select_iv" tools:text="@string/bus_switch_line_name" /> - - - - - \ 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 new file mode 100644 index 0000000000..874cc64731 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task_item.xml b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task_item.xml new file mode 100644 index 0000000000..a015a562d6 --- /dev/null +++ b/OCH/shuttle/driver_weaknet/src/main/res/layout/shuttle_weak_switch_task_item.xml @@ -0,0 +1,23 @@ + + + + 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 6ee14e3379..456c3ab8f5 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/colors.xml @@ -49,9 +49,16 @@ #FFFFE198 #FFFF9B00 #59FFFFFF + #4D000000 + #80000000 + #B3FFFFFF + #4D2EACFF + #666666 #CCB9C3E9 #4Dffffff + #B3ffffff + #2EACFF #8E9DD4 #2B6EFF 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 4d614afe8f..ade46e7a91 100644 --- a/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml +++ b/OCH/shuttle/driver_weaknet/src/main/res/values/strings.xml @@ -5,9 +5,12 @@ 启动成功 启动失败 自动驾驶 - 任务列表 + 请选择任务 暂无任务 选择时间 + 确认班次 + 返回 + 加载中…… 路线: 起点: 终点: @@ -17,6 +20,7 @@ 自动驾驶状态中,不可切换或结束路线 当前行程未完成,不可切换路线 当前车辆无路线\n请联系运营人员绑定 + 暂无任务 起点: 终点: 往%1$s方向 diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt index 5e8c681631..edcfce921e 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt @@ -274,7 +274,6 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), val endStation = MogoLocation() endStation.longitude = curTaskAndOrder.endSite!!.gcjLon endStation.latitude = curTaskAndOrder.endSite!!.gcjLat - LineManager.setLineInfo(LineInfo(result.lineId,"")) TrajectoryAndDistanceManager.setStationPoint( startStation, endStation, diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt index c66d29a8b4..60a0b8b058 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt @@ -1119,6 +1119,9 @@ object TaxiTaskModel { data?.data?.also { mTaskTrajectoryList.addAll(it) mCurrentTaskTrajectory = it.first { currentTaskLineId == it.lineId } + mCurrentTaskTrajectory?.let {traj-> + LineManager.setLineInfo(LineInfo(traj.lineId,traj.lineName)) + } } mTaxiTaskWithOrderCallbackMap.forEach { val listener = it.value @@ -1304,7 +1307,6 @@ object TaxiTaskModel { val endStation = MogoLocation() endStation.longitude = curTaskAndOrder.endSite!!.gcjLon endStation.latitude = curTaskAndOrder.endSite!!.gcjLat - LineManager.setLineInfo(LineInfo(curTaskAndOrder.lineId,"")) TrajectoryAndDistanceManager.setStationPoint( startStation, endStation, diff --git a/core/mogo-core-res/src/main/res/values/dimens.xml b/core/mogo-core-res/src/main/res/values/dimens.xml index a4e640e404..81273f9b37 100644 --- a/core/mogo-core-res/src/main/res/values/dimens.xml +++ b/core/mogo-core-res/src/main/res/values/dimens.xml @@ -1028,6 +1028,7 @@ 1000dp 1003dp 1017dp + 1051dp 1055dp 1090dp 1092dp From b550fb7e9777cb72c626fbbfe0e48d757876242d Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 12 Sep 2024 17:00:44 +0800 Subject: [PATCH 5/6] [6.7.0] [fea] [rename] --- .../java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt | 6 +----- .../ui/{taskrunning => taskrunned}/BottomDecoration.java | 2 +- .../ui/{taskrunning => taskrunned}/RunningTaskAdapter.kt | 2 +- .../ui/{taskrunning => taskrunned}/RunningTaskManager.kt | 3 +-- .../{taskrunning => taskrunned}/RunningTaskManagerView.kt | 2 +- .../ui/{taskrunning => taskrunned}/RunningTastViewModel.kt | 2 +- 6 files changed, 6 insertions(+), 11 deletions(-) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{taskrunning => taskrunned}/BottomDecoration.java (96%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{taskrunning => taskrunned}/RunningTaskAdapter.kt (98%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{taskrunning => taskrunned}/RunningTaskManager.kt (98%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{taskrunning => taskrunned}/RunningTaskManagerView.kt (99%) rename OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/{taskrunning => taskrunned}/RunningTastViewModel.kt (98%) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt index aad5f8de9a..32f913d235 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/fragment/ShuttleFragment.kt @@ -1,8 +1,6 @@ package com.mogo.och.weaknet.fragment -import android.content.Intent import android.graphics.BitmapFactory -import android.os.Bundle import android.view.View import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout @@ -16,7 +14,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager.getOverlayManager 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.ActivityUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.map.MogoMap @@ -36,11 +33,10 @@ import com.mogo.och.shuttle.weaknet.R import com.mogo.och.weaknet.constant.BusConst import com.mogo.och.weaknet.presenter.BusPresenter import com.mogo.och.weaknet.ui.BusStationCommonItem -import com.mogo.och.weaknet.ui.taskrunning.RunningTaskManager +import com.mogo.och.weaknet.ui.taskrunned.RunningTaskManager import me.jessyan.autosize.utils.AutoSizeUtils import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode -import java.util.Objects /** * 网约车小巴界面 diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/BottomDecoration.java similarity index 96% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/BottomDecoration.java index 2416014c64..5611907517 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/BottomDecoration.java +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/BottomDecoration.java @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.taskrunning; +package com.mogo.och.weaknet.ui.taskrunned; import android.graphics.Rect; import android.view.View; diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskAdapter.kt similarity index 98% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskAdapter.kt index 56afb10674..c65c8bcc4a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskAdapter.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.taskrunning +package com.mogo.och.weaknet.ui.taskrunned import android.content.Context import android.view.LayoutInflater diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskManager.kt similarity index 98% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskManager.kt index 9e726404d3..e406f74abc 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManager.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskManager.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.taskrunning +package com.mogo.och.weaknet.ui.taskrunned import android.content.Context @@ -26,7 +26,6 @@ import com.mogo.eagle.core.utilcode.reminder.Reminder import com.mogo.eagle.core.utilcode.reminder.api.impl.PopupWindowReminder import com.mogo.eagle.core.utilcode.util.* import com.mogo.och.weaknet.ui.bizswitch.SwitchBizView -import com.mogo.och.weaknet.ui.switchline.SwitchLineView import me.jessyan.autosize.utils.AutoSizeUtils import kotlin.math.abs diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskManagerView.kt similarity index 99% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskManagerView.kt index 20f0f7d56a..f39b9abd5a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTaskManagerView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTaskManagerView.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.taskrunning +package com.mogo.och.weaknet.ui.taskrunned import android.content.Context import android.util.AttributeSet diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTastViewModel.kt similarity index 98% rename from OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt rename to OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTastViewModel.kt index d2d0af6b72..bf12f0f88d 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunning/RunningTastViewModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/taskrunned/RunningTastViewModel.kt @@ -1,4 +1,4 @@ -package com.mogo.och.weaknet.ui.taskrunning +package com.mogo.och.weaknet.ui.taskrunned import androidx.lifecycle.ViewModel import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger From 71da9d5a2486062740da5e1ffc2ef98168769c5c Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 13 Sep 2024 19:37:59 +0800 Subject: [PATCH 6/6] [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方向 更换任务成功 更换任务失败 + 滑动出发 起点: 终点: 当前站点: