diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java index 9576b73da4..9a25f2e312 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -70,7 +70,7 @@ import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STAT public class BusPassengerModel { private static final String TAG = BusPassengerModel.class.getSimpleName(); - private List mRoutePoints = new ArrayList<>(); + private List mRoutePoints = new ArrayList<>(); private static final class SingletonHolder { private static final BusPassengerModel INSTANCE = new BusPassengerModel(); @@ -88,13 +88,15 @@ public class BusPassengerModel { private IBusPassegerDriverStatusCallback mDriverStatusCallback; //出车收车状态 private IBusPassengerRouteLineInfoCallback mRouteLineInfoCallback; // bus路线信息更新 - private double mLongitude, mLatitude; +// private double mLongitude, mLatitude; + private Location mLocation = null; private BusPassengerRoutesResult routesResult = null; List mStations = new ArrayList<>(); private int mNextStationIndex = 0;// 要到达站的index - private List mTwoStationsRouts = new ArrayList<>(); + private List mTwoStationsRouts = new ArrayList<>(); + private int mPreRouteIndex = 0; private static final int MSG_QUERY_BUS_P_STATION = 1001; private final Handler handler = new Handler(new Handler.Callback() { @@ -307,8 +309,9 @@ public class BusPassengerModel { public void onCarLocationChanged2( Location location ) { //位置变化时,通过围栏判断是否到达x点 // TODO: 2022/3/31 - mLongitude = location.getLongitude(); - mLatitude = location.getLatitude(); +// mLongitude = location.getLongitude(); +// mLatitude = location.getLatitude(); + mLocation = location; for (IBusPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ callback.onCarLocationChanged(location); } @@ -403,8 +406,8 @@ public class BusPassengerModel { public void updateRoutePoints(List routePoints){ mRoutePoints.clear(); - List latLngModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjListCommon(mContext,routePoints); + List latLngModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjLocations(mContext,routePoints); mRoutePoints.addAll(latLngModels); calculateTwoStationsRoute(); } @@ -419,10 +422,12 @@ public class BusPassengerModel { BusPassengerStation stationNext = mStations.get(mNextStationIndex); BusPassengerStation stationCur = mStations.get(mNextStationIndex - 1); //当前站在轨迹中对应的点 - int currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndex(mRoutePoints + int currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew(0 + ,mRoutePoints ,stationCur.getGcjLon(),stationCur.getGcjLat()); //要前往的站在轨迹中对应的点 - int nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndex(mRoutePoints + int nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew(currentRouteIndex + ,mRoutePoints ,stationNext.getGcjLon(),stationNext.getGcjLat()); if (currentRouteIndex < nextRouteIndex){ //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 mTwoStationsRouts.addAll(mRoutePoints.subList(currentRouteIndex,nextRouteIndex)); @@ -448,22 +453,28 @@ public class BusPassengerModel { if (mTwoStationsRouts.size() == 0){ calculateTwoStationsRoute(); } - if (mTwoStationsRouts.size() > 0){ - List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mTwoStationsRouts,mLongitude,mLatitude); - - float lastSumLength = 0; - if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 - lastSumLength = CoordinateUtils.calculateLineDistance( - lastPoints.get(0).longitude, lastPoints.get(0).latitude, - mLongitude, mLatitude); - }else { - lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + if (mTwoStationsRouts.size() > 0 && mLocation != null){ + Map> lastPointsMap = CoordinateCalculateRouteUtil + .getRemainPointListByCompareNew(mPreRouteIndex,mTwoStationsRouts,mLocation); + for (int index: lastPointsMap.keySet()) { + mPreRouteIndex = index; + break; } - double lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 ; //秒 - CallerLogger.INSTANCE.d(M_BUS_P + TAG, "lastSumLength = " + lastSumLength); - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); + + for (List lastPoints: lastPointsMap.values()){ + float lastSumLength = 0; + if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 + lastSumLength = CoordinateUtils.calculateLineDistance( + lastPoints.get(0).getLongitude(), lastPoints.get(0).getLatitude(), + mLocation.getLongitude(), mLocation.getLatitude()); + }else { + lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + } + double lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 ; //秒 + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "lastSumLength = " + lastSumLength); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); + } } } } @@ -490,13 +501,18 @@ public class BusPassengerModel { } public void loopRouteAndWipe() { - if (mRoutePoints != null && mRoutePoints.size() > 0){ + if (mRoutePoints != null && mRoutePoints.size() > 0 && mLocation != null){ int haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndex(mRoutePoints,mLongitude,mLatitude); + .getArrivedPointIndexNew(mPreRouteIndex, + mRoutePoints, + mLocation.getLongitude(), + mLocation.getLatitude()); CallerLogger.INSTANCE.d(M_BUS_P + TAG, "thread = "+ Thread.currentThread().getName()+" haveArrivedIndex== " + haveArrivedIndex); if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routeResult(mRoutePoints,haveArrivedIndex); + List routePoints = CoordinateCalculateRouteUtil + .coordinateConverterLocationToLatLng(mContext,mRoutePoints); + mAutopilotPlanningCallback.routeResult(routePoints,haveArrivedIndex); } } } @@ -505,8 +521,10 @@ public class BusPassengerModel { * 设置小地图路径的起终点marker */ public void setRouteLineMarker(){ - if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.setLineMarker(mRoutePoints); + if (mAutopilotPlanningCallback != null && mRoutePoints != null){ + List routePoints = CoordinateCalculateRouteUtil + .coordinateConverterLocationToLatLng(mContext,mRoutePoints); + mAutopilotPlanningCallback.setLineMarker(routePoints); } } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java index a0fc02d3cf..509f908434 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java @@ -197,10 +197,11 @@ public class BusPassengerMapDirectionView mCarMarker.setToTop(); } + //圈定地图显示范围 + LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); + if (mLinePointsLatLng.size() > 0){ - //圈定地图显示范围 //存放经纬度 - LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); for (int i = 0; i < mLinePointsLatLng.size(); i++) { boundsBuilder.include(mLinePointsLatLng.get(i)); } @@ -208,13 +209,15 @@ public class BusPassengerMapDirectionView //第二个参数为四周留空宽度 mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); - } -// else { -// //设置希望展示的地图缩放级别 + } else { + boundsBuilder.include(currentLatLng); + //第二个参数为四周留空宽度 + mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); + //设置希望展示的地图缩放级别 // CameraPosition cameraPosition = new CameraPosition.Builder() // .target(mCarMarker.getPosition()).tilt(0).bearing(location.getBearing()).zoom(zoomLevel).build(); // mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); -// } + } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index 34192243a7..52f7723cad 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -32,8 +32,10 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; import com.mogo.och.bus.R; @@ -117,9 +119,7 @@ public class BusOrderModel { private volatile int firstStartAutopilot = 0; private LoginService loginService; - - private long prePassengerWriteOffTime = 0; //记录最后查询到乘客核销的时间 - + private final Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { @@ -443,6 +443,7 @@ public class BusOrderModel { clearAutopilotControlParameters(); closeBeautificationMode(); clearStartAutopilotTag(); + removeTipRunnables(); return; } CallerLogger.INSTANCE.d(M_BUS + TAG, "获取到小巴路线数据: " + data); @@ -797,6 +798,11 @@ public class BusOrderModel { BusSendTripInfoManager.INSTANCE.sendBusTripInfo(BusSendTripInfoManager.START_TRIP , busRoutesResult.getName(), "", "", false); } + + //任务选择后首发前给司机提示任务 + if (busRoutesResult != null){ + beforeTaskTips(); + } // startOrStopQueryPassengerWriteOff(true); } @@ -836,6 +842,70 @@ public class BusOrderModel { BusTrajectoryManager.getInstance().syncTrajectoryInfo(); } + private void beforeTaskTips() { + if (busRoutesResult == null) return; + + removeTipRunnables(); + + long taskTime = busRoutesResult.getTaskTime(); + long tip3Time = taskTime- 3*60*1000 - DateTimeUtil.getCurrentTimeStamp(); // 首站离开前3分钟提示 + long tip1Time = taskTime-60*1000 - DateTimeUtil.getCurrentTimeStamp(); // 首站离开前1分钟提示 + + if (tip3Time > 0){ + UiThreadHandler.postDelayed(tip3Runnable,tip3Time); + } + + if (tip1Time > 0){ + UiThreadHandler.postDelayed(tip1Runnable,tip1Time); + } + } + + Runnable tip3Runnable = new Runnable() { + @Override + public void run() { + + if (backgroundCurrentStationIndex == 0 && stationList.get(0).getDrivingStatus() == STATION_STATUS_STOPPED + && !stationList.get(0).isLeaving()){ + tipStartTask("3"); + }else { + removeTipRunnables(); + } + } + }; + + private void tipStartTask(String s) { + String tips = String.format(mContext + .getString(R.string.bus_before_tips_s), s); + //展示在运营消息 + OCHSocketMessageManager.INSTANCE.pushAppOperationalMsgBox( + DateTimeUtil.getCurrentTimeStamp(), + tips); + //语音提示 + VoiceNotice.showNotice(tips); + } + + Runnable tip1Runnable = new Runnable() { + @Override + public void run() { + if (backgroundCurrentStationIndex == 0 && stationList != null && + stationList.get(0).getDrivingStatus() == STATION_STATUS_STOPPED + && !stationList.get(0).isLeaving()){ + tipStartTask("1"); + }else { + removeTipRunnables(); + } + } + }; + + public void removeTipRunnables(){ + if (tip3Runnable != null){ + UiThreadHandler.removeCallbacks(tip3Runnable); + } + if (tip1Runnable != null){ + UiThreadHandler.removeCallbacks(tip1Runnable); + } + } + private void clearStartAutopilotTag() { firstStartAutopilot = 0; } diff --git a/OCH/mogo-och-bus/src/main/res/values/strings.xml b/OCH/mogo-och-bus/src/main/res/values/strings.xml index afe287c645..a7829fce0a 100644 --- a/OCH/mogo-och-bus/src/main/res/values/strings.xml +++ b/OCH/mogo-och-bus/src/main/res/values/strings.xml @@ -47,4 +47,6 @@ 感谢您体验\'蘑菇车联\'自动驾驶小巴车,我们下次再见。 + 距离发车时间还有%1$s分钟 + diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java index 3ab7e47426..879a69086e 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java @@ -21,20 +21,36 @@ import mogo.telematics.pad.MessagePad; */ public class CoordinateCalculateRouteUtil { - public static float calculateRouteSumLength(List points){ + public static float calculateRouteSumLength(List points){ if (null == points || points.size() == 0) return 0; float sumLength = 0; - //计算全路径总距离 - for (int i = 0;i + 1< points.size();i++){ - double preLat = points.get(i).latitude; - double preLon = points.get(i).longitude; - double laLat = points.get(i+1).latitude; - double laLon = points.get(i+1).longitude; + if (points.get(1) instanceof Location){ + //计算全路径总距离 + for (int i = 0;i + 1< points.size();i++){ + Location locationPre = (Location) points.get(i); + Location location = (Location) points.get(i+1); + double preLat = locationPre.getLatitude(); + double preLon = locationPre.getLongitude(); + double laLat = location.getLatitude(); + double laLon = location.getLongitude(); - float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); - sumLength += length; + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } + }else if (points.get(1) instanceof LatLng){ + for (int i = 0;i + 1< points.size();i++){ + LatLng locationPre = (LatLng) points.get(i); + LatLng location = (LatLng) points.get(i+1); + double preLat = locationPre.latitude; + double preLon = locationPre.longitude; + double laLat = location.latitude; + double laLon = location.longitude; + + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } } return sumLength; } @@ -65,75 +81,6 @@ public class CoordinateCalculateRouteUtil { return latLng; } - - /** - * 根据实时定位的坐标确定出已行驶到那个坐标点 todo 有问题 暂不使用 - * @param mRoutePoints - * @param realLon - * @param realLat - * @return 返回剩余路径集合 - */ - @Deprecated - public static List getCurrentPoinByCompare(List mRoutePoints,double realLon,double realLat) { - // 疑似坐标 先以坐标中间1/2为第一个比对点 - int currentIndex = Math.round(mRoutePoints.size()/2); - LatLng currentLatLng = mRoutePoints.get(currentIndex); - - //差值初始化 - float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat - ,currentLatLng.longitude,currentLatLng.latitude);// lon,lat, prelon, prelat - - List latePoints = new ArrayList<>(); - //与选中点左右比较 - if (currentIndex -1 >= 0 && currentIndex+1<= mRoutePoints.size()-1){ - LatLng leftCurrentLatLng = mRoutePoints.get(currentIndex -1); - LatLng rightCurentLatLng = mRoutePoints.get(currentIndex + 1); - float leftDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat - ,leftCurrentLatLng.longitude,leftCurrentLatLng.latitude); - float rightDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat,rightCurentLatLng.longitude,rightCurentLatLng.latitude); - - if (rightDiffDis < leftDiffDis){ //靠近了右半边 - baseDiffDis = rightDiffDis; - for (int i = currentIndex +1; i+1 coordinateConverterLocationToLatLng(Context mContext, List models) { + //转成MogoLatLng集合 + List list = new ArrayList<>(); + for (Location m : models) { + LatLng mogoLatLng = coordinateConverterWgsToGcj(mContext, m.getLongitude(),m.getLatitude()); + list.add(mogoLatLng); + } + return list; + } + + /** + * 根据前一个index,经纬度航向角,确认剩余轨迹 + * @param preIndex + * @param mRoutePoints + * @param realLocation + * @return + */ + public static Map> getRemainPointListByCompareNew(int preIndex, List mRoutePoints, Location realLocation) { - Map> routePonits = new HashMap<>(); - List latePoints = new ArrayList<>(); // 剩余轨迹集合 + Map> routePonits = new HashMap<>(); + List latePoints = new ArrayList<>(); // 剩余轨迹集合 int currentIndex = 0; //记录疑似点 if (mRoutePoints.size() > preIndex){ //基础点 @@ -269,13 +245,13 @@ public class CoordinateCalculateRouteUtil { Logger.d( "calculateRouteSumLength", "点:"+currentIndex+"-------是最近的点------ "); if (currentIndex == mRoutePoints.size()-1){ Location location = mRoutePoints.get(currentIndex); - LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); - latePoints.add(latLng); +// LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + latePoints.add(location); }else { List locations = mRoutePoints.subList(currentIndex,mRoutePoints.size()-1); for (Location location: locations) { - LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); - latePoints.add(latLng); +// LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + latePoints.add(location); } } routePonits.put(currentIndex,latePoints); @@ -284,27 +260,27 @@ public class CoordinateCalculateRouteUtil { return routePonits; } - public static int getArrivedPointIndexNew(List mRoutePoints, - Location realLocation) { - int currentIndex = 0; //记录疑似点 //基础点 + public static int getArrivedPointIndexNew(int preIndex, List mRoutePoints, + double realLon,double realLat) { + int currentIndex = preIndex; //记录疑似点 //基础点 Location baseLatLng = mRoutePoints.get(0); - float baseDiffDis = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), - realLocation.getLatitude() + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon, + realLat , baseLatLng.getLongitude(), baseLatLng.getLongitude());// lon,lat, prelon, prelat for (int i = 0; i < mRoutePoints.size(); i++) { Location latLng = mRoutePoints.get(i); //todo 先看index对应点的方向和realLocation方向是否一致, 方向角度不能过90度 - if (Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90) { - float diff = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), - realLocation.getLatitude(), +// if (Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90) { + float diff = CoordinateUtils.calculateLineDistance(realLon, + realLat, latLng.getLongitude(), latLng.getLatitude()); - if (baseDiffDis > diff) { + if (baseDiffDis > diff && i>currentIndex) { // Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); baseDiffDis = diff; currentIndex = i; } - } +// } } Logger.d("calculateRouteSumLength", "点:" + currentIndex + "-------是最近的点------ "); return currentIndex; diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java index 96893ef697..310b8cb3bd 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/DateTimeUtil.java @@ -4,6 +4,7 @@ import com.mogo.eagle.core.utilcode.util.DateTimeUtils; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Date; /** * @author: wangmingjun @@ -89,4 +90,13 @@ public class DateTimeUtil { int minute = (int)(seconds % 3600)/60; return String.valueOf(minute); } + + + /** + * 返回当前时间 + * @return + */ + public static long getCurrentTimeStamp(){ + return new Date().getTime(); + } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index a25cc52a39..c1fddf11d7 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -116,12 +116,14 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback private ITaxiPassengerVeloctityCallback mVeloctityCallback;//道路限速返回 + private int mPreRouteIndex = 0; + private Disposable subscribe; private int delayTime = 2; private double mLongitude, mLatitude; - private List mLocationsModels = new ArrayList<>(); + private List mLocationsModels = new ArrayList<>(); private TaxiPassengerModel() { } @@ -425,21 +427,6 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } } - /** - * 计算订单起终距离 - * @return - */ - public int calculateOrderDistanceSum(){ - double endLon = mCurrentOCHOrder.endSiteGcjPoint.get(0); - double endLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); - double startLon = mCurrentOCHOrder.startSiteGcjPoint.get(0); - double startLat = mCurrentOCHOrder.startSiteGcjPoint.get(1); - double distance = CoordinateUtils.calculateLineDistance( - endLon, endLat, - startLon, startLat); - return new Double(distance).intValue(); - } - //监听网络变化,避免启动机器时无网导致无法更新订单信息 private final IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { @Override @@ -596,10 +583,10 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback }; public void startToRouteAndWipe(List models) { - List latLngModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjListCommon(mContext,models); + List locationsModels = CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjLocations(mContext,models); mLocationsModels.clear(); - mLocationsModels.addAll(latLngModels); + mLocationsModels.addAll(locationsModels); startOrStopRouteAndWipe(true); showRottingMapView(); } @@ -622,7 +609,6 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback NaviLatLng endNaviLatLng = new NaviLatLng(orderEndStationLat,orderEndStationLng); AmapNaviToDestinationModel.getInstance(mContext).initAMapNavi(startNaviLatLng, endNaviLatLng); AmapNaviToDestinationModel.getInstance(mContext).setVoiceIsMute(false); -// AmapNaviToDestinationModel.getInstance(mContext).setOCHTaciNaviChangedCallback(this); } } @@ -641,9 +627,16 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void loopRouteAndWipe() { if (mLocationsModels != null && mLocationsModels.size() > 0){ int haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndex(mLocationsModels,mLongitude,mLatitude); + .getArrivedPointIndexNew(mPreRouteIndex, + mLocationsModels, + mLongitude, + mLatitude); + mPreRouteIndex = haveArrivedIndex; if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routeResultByServer(mLocationsModels,haveArrivedIndex); + List latLngsModels = CoordinateCalculateRouteUtil + .coordinateConverterLocationToLatLng(mContext, + mLocationsModels); + mAutopilotPlanningCallback.routeResultByServer(latLngsModels,haveArrivedIndex); } } } @@ -731,7 +724,9 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback mAutopilotPlanningCallback.setLineMarker(data.data); } mLocationsModels.clear(); - mLocationsModels.addAll(data.data); + List locationsModels = CoordinateCalculateRouteUtil. + coordinateConverterLatlngToLocation(data.data); + mLocationsModels.addAll(locationsModels); startOrStopRouteAndWipe(true); } }else { diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index da35077c43..715e9d2d7e 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -86,6 +86,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import io.reactivex.exceptions.UndeliverableException; import io.reactivex.functions.Consumer; @@ -127,9 +128,11 @@ public class TaxiModel { private volatile boolean isRestartAutopilot = false; - private List mRoutePoints = new ArrayList<>(); + private List mRoutePoints = new ArrayList<>(); + private int mPreRouteIndex = 0; private double mLongitude, mLatitude; + private Location mLocation = null; private LoginService loginService; @@ -737,8 +740,8 @@ public class TaxiModel { public void confirmAutopilotConditionByDriver() { if (mCurrentOCHOrder == null) return; TaxiOrPassengerReadyReqBean.Result result = new TaxiOrPassengerReadyReqBean.Result(); - result.lat = mLatitude; - result.lon = mLongitude; +// result.lat = mLatitude; +// result.lon = mLongitude; TaxiServiceManager.confirmAutopilotConditionByDriver(mContext, mCurrentOCHOrder.orderNo, result, @@ -1064,6 +1067,7 @@ public class TaxiModel { mLongitude = location.getLongitude(); mLatitude = location.getLatitude(); + mLocation = location; if (mControllerStatusCallback != null) { mControllerStatusCallback.onCarLocationChanged(location); } @@ -1333,7 +1337,8 @@ public class TaxiModel { if (mRoutePoints.size() > 0){ mRoutePoints.clear(); } - mRoutePoints.addAll(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext, models)); + mRoutePoints.addAll(CoordinateCalculateRouteUtil + .coordinateConverterWgsToGcjLocations(mContext, models)); startDynamicCalculateRouteInfo(); } @@ -1367,47 +1372,57 @@ public class TaxiModel { * 实时计算当前剩余里程和时间 */ public void dynamicCalculateRouteInfo() { - if (mLatitude <= 0.0 || mLongitude <= 0.0){ + if (mLocation == null){ return; } - if (mRoutePoints.size() > 0){ - List lastPoints = CoordinateCalculateRouteUtil - .getRemainPointListByCompare(mRoutePoints, mLongitude, mLatitude); + if (mRoutePoints.size() > 0 && mLocation != null){ + Map> lastPointsMap = CoordinateCalculateRouteUtil + .getRemainPointListByCompareNew(mPreRouteIndex,mRoutePoints, mLocation); - float lastSumLength = 0; - - if (lastPoints.size() == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 - lastSumLength = CoordinateUtils.calculateLineDistance( - lastPoints.get(0).longitude, lastPoints.get(0).latitude, - mLongitude, mLatitude); - } else { - lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + for (int index: lastPointsMap.keySet()) { + mPreRouteIndex = index; + break; } + for (List lastPoints: lastPointsMap.values()){ + float lastSumLength = 0; + if (lastPoints.size() == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 + lastSumLength = CoordinateUtils.calculateLineDistance( + lastPoints.get(0).getLongitude(), lastPoints.get(0).getLatitude(), + mLocation.getLongitude(), mLocation.getLatitude()); + } else { + lastSumLength = CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + } - double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6; //秒 - CallerLogger.INSTANCE.d(M_TAXI + "dynamicCalculateRouteInfo" - , "---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime - + " thread = "+ Thread.currentThread().getName()); + double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6; //秒 + CallerLogger.INSTANCE.d(M_TAXI + "dynamicCalculateRouteInfo" + , "---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime + + " thread = "+ Thread.currentThread().getName()); - mCurrentOCHOrder.decreaseTravelDistance(lastSumLength); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) lastSumLength, (long) lastTime); + mCurrentOCHOrder.decreaseTravelDistance(lastSumLength); + if (mOrderStatusCallback != null) { + mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) lastSumLength, (long) lastTime); + } + + reportOrderRemain((long) lastSumLength, (long) lastTime); + break; } - - reportOrderRemain((long) lastSumLength, (long) lastTime); - routeAndWipe(); } } private void routeAndWipe() { - if (mRoutePoints != null && mRoutePoints.size() > 0){ + if (mRoutePoints != null && mRoutePoints.size() > 0 && mLocation != null){ int haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndex(mRoutePoints,mLongitude,mLatitude); + .getArrivedPointIndexNew(mPreRouteIndex, + mRoutePoints, + mLocation.getLongitude(), + mLocation.getLatitude()); + List routePoints = CoordinateCalculateRouteUtil + .coordinateConverterLocationToLatLng(mContext,mRoutePoints); if (mAutopilotPlanningCallback != null){ - mAutopilotPlanningCallback.routeResult(mRoutePoints,haveArrivedIndex); + mAutopilotPlanningCallback.routeResult(routePoints,haveArrivedIndex); } - setRouteLineMarker(mRoutePoints); + setRouteLineMarker(routePoints); } } @@ -1422,7 +1437,9 @@ public class TaxiModel { public void onSuccess(QueryOrderRouteResp data) { if (data != null && data.data != null && mRoutePoints.size() == 0) { mRoutePoints.clear(); - mRoutePoints.addAll(data.data); + List routePoints = CoordinateCalculateRouteUtil + .coordinateConverterLatlngToLocation(data.data); + mRoutePoints.addAll(routePoints); } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java index 21e62525d1..ac21cdf9f1 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/BaseTaxiTabFragment.java @@ -157,7 +157,6 @@ public abstract class BaseTaxiTabFragment您好,本次行程共%1$s%2$s,预计需要%3$d分钟,我们即将出发。出于安全考虑,建议您尽量不要与安全员交谈,后排落座,并系好安全带 即将到达目的地,请拿好随身物品,准备下车 您好,我们已到达目的地,本次体验结束。车辆停稳,请带好随身物品,谨防遗漏。感谢您的乘坐 + + 自动驾驶状态中,不可结束路线 + \ No newline at end of file diff --git a/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt b/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt index 4e8ad77f6a..a3a37c3b0d 100644 --- a/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt @@ -203,7 +203,7 @@ class HttpDnsStartUp : AndroidStartup() { clientConfig.token = token // 由于存在token过期问题,在更新后会回调至此处,增加二次判定 if(!gotToken){ - CallerLogger.d(SceneConstant.M_MAP + TAG, "onTokenGot ") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "onTokenGot ") CallerCloudListenerManager.invokeCloudTokenGot(token) // 异步初始化NetConfig asyncInit() @@ -217,7 +217,7 @@ class HttpDnsStartUp : AndroidStartup() { override fun onError(code: Int, msg: String) { CallerLogger.d( - SceneConstant.M_HMI + TAG, + SceneConstant.M_MAIN + TAG, "初始化MogoAiCloudSdk failed ,reason : $msg , 未能开启长链服务和初始化Modules服务" ) } @@ -270,7 +270,7 @@ class HttpDnsStartUp : AndroidStartup() { HttpDnsConst.HTTP_DNS_ADDRESS_TYPE_HTTP ) ?: return if (dnsCacheIp != cacheIp) { - CallerLogger.d("TEST_SOCKET", "获取缓存Dns IP : $dnsCacheIp , 原缓存 IP : $cacheIp") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "获取缓存Dns IP : $dnsCacheIp , 原缓存 IP : $cacheIp") startSocketService() cacheIp = dnsCacheIp } @@ -295,7 +295,7 @@ class HttpDnsStartUp : AndroidStartup() { } private fun startSocketService() { - CallerLogger.d(SceneConstant.M_HMI + TAG, "startSocketService") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "startSocketService") val location = CallerMapUIServiceManager.getSingletonLocationClient(AbsMogoApplication.getApp())!! .lastKnowLocation @@ -313,7 +313,7 @@ class HttpDnsStartUp : AndroidStartup() { clientPkFileName = "sn" ) override fun onConnectFailure() { - CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectFailure") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "socket-onConnectFailure") DebugConfig.setDownloadSnapshot(false) } @@ -326,7 +326,7 @@ class HttpDnsStartUp : AndroidStartup() { clientPkFileName = "sn" ) override fun onConnectSuccess() { - CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectSuccess") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "socket-onConnectSuccess") DebugConfig.setDownloadSnapshot(true) } @@ -339,7 +339,7 @@ class HttpDnsStartUp : AndroidStartup() { clientPkFileName = "sn" ) override fun onConnectLost() { - CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectLost") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "socket-onConnectLost") DebugConfig.setDownloadSnapshot(false) } @@ -352,7 +352,7 @@ class HttpDnsStartUp : AndroidStartup() { clientPkFileName = "sn" ) override fun onError(code: String, msg: String?) { - CallerLogger.d(SceneConstant.M_HMI + TAG, "socket-onConnectLost") + CallerLogger.d(SceneConstant.M_MAIN + TAG, "socket-onError code : $code , msg : $msg") } }) // 开启Socket长链服务 diff --git a/config.gradle b/config.gradle index d4ec3c05d0..79ebbd27c3 100644 --- a/config.gradle +++ b/config.gradle @@ -97,7 +97,7 @@ ext { // obu sdk obusdk : "com.zhidao.enterprise.smartv2x:smartv2x:1.0.0.3", mogoobuold : 'com.zhidao.support.obu:mogoobu:1.0.0.33', - mogoobu : 'com.mogo.support.obu:mogo-obu:1.0.3', + mogoobu : 'com.mogo.support.obu:mogo-obu:1.0.4', mogoami : 'com.zhidao.support.obu.ami:mogoami:1.0.0.24', // google diff --git a/core/function-impl/mogo-core-function-bindingcar/build.gradle b/core/function-impl/mogo-core-function-bindingcar/build.gradle index 111633d37e..e498d7efa5 100644 --- a/core/function-impl/mogo-core-function-bindingcar/build.gradle +++ b/core/function-impl/mogo-core-function-bindingcar/build.gradle @@ -52,12 +52,8 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation rootProject.ext.dependencies.kotlinstdlibjdk7 - implementation rootProject.ext.dependencies.androidxccorektx - implementation rootProject.ext.dependencies.androidxappcompat - implementation rootProject.ext.dependencies.androidxconstraintlayout implementation rootProject.ext.dependencies.arouter implementation rootProject.ext.dependencies.rxandroid - implementation rootProject.ext.dependencies.androidxrecyclerview implementation rootProject.ext.dependencies.androidxroomruntime implementation rootProject.ext.dependencies.androidxroomktx implementation rootProject.ext.dependencies.litezxing @@ -71,7 +67,6 @@ dependencies { implementation rootProject.ext.dependencies.mogo_core_data implementation rootProject.ext.dependencies.mogo_core_utils - implementation rootProject.ext.dependencies.mogo_core_res implementation rootProject.ext.dependencies.mogo_core_network implementation rootProject.ext.dependencies.mogo_core_function_call } else { @@ -81,7 +76,6 @@ dependencies { implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-utils') - implementation project(':core:mogo-core-res') implementation project(':core:mogo-core-network') implementation project(':core:mogo-core-function-call') } diff --git a/core/function-impl/mogo-core-function-carcorder/build.gradle b/core/function-impl/mogo-core-function-carcorder/build.gradle index d612fd342f..dbef31ffe6 100644 --- a/core/function-impl/mogo-core-function-carcorder/build.gradle +++ b/core/function-impl/mogo-core-function-carcorder/build.gradle @@ -47,7 +47,6 @@ dependencies { implementation rootProject.ext.dependencies.coroutinescore implementation rootProject.ext.dependencies.arouter kapt rootProject.ext.dependencies.aroutercompiler - implementation rootProject.ext.dependencies.mogologlib if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.mogoserviceapi diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/report/IPCReportManager.kt b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/report/IPCReportManager.kt index 899ee755a8..e691962e86 100644 --- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/report/IPCReportManager.kt +++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/report/IPCReportManager.kt @@ -1,10 +1,13 @@ package com.mogo.eagle.core.function.report import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.report.ReportEntity import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.util.TimeUtils import mogo_msg.MogoReportMsg @@ -48,7 +51,6 @@ class IPCReportManager : IMoGoAutopilotStatusListener { */ override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { guardianInfo?.let{ - //Error 弹窗并有提示音 if(it.resultList.contains(RESULT_AUTOPILOT_DISABLE) || it.resultList.contains(RESULT_AUTOPILOT_SYSTEM_UNSTARTED) @@ -56,9 +58,10 @@ class IPCReportManager : IMoGoAutopilotStatusListener { if(ipcErrorReportList.size>19){ ipcErrorReportList.removeLast() } - ipcErrorReportList.add(0, - ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()), - it.src,it.level,it.msg,it.code,it.resultList,it.actionsList)) + val reportEntity = ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()), + it.src,it.level,it.msg,it.code,it.resultList,it.actionsList) + CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.REPORT, reportEntity)) + ipcErrorReportList.add(0, reportEntity) //当前不处于美化模式时,展示监控节点上报 if(!FunctionBuildConfig.isDemoMode){ if(FunctionBuildConfig.isReportWarning){ diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index a20e15fcd9..6aedc92099 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -104,6 +104,7 @@ dependencies { api rootProject.ext.dependencies.mogo_core_function_carcorder api rootProject.ext.dependencies.mogo_core_function_call api rootProject.ext.dependencies.mogo_core_function_api + api rootProject.ext.dependencies.mogo_core_function_msgbox implementation project(':libraries:map-usbcamera') implementation project(':libraries:mogo-adas-other') @@ -134,6 +135,7 @@ dependencies { api project(':core:function-impl:mogo-core-function-dispatch') api project(':core:function-impl:mogo-core-function-chat') api project(':core:function-impl:mogo-core-function-bindingcar') + api project(':core:function-impl:mogo-core-function-msgbox') api project(':core:mogo-core-function-call') api project(':core:mogo-core-function-api') diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java index 65724e8c34..ea279ade8b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java @@ -31,9 +31,5 @@ public class WaringConst { public static String BROADCAST_V2X_LIMITING_VELOCITY_IS_SHOW__EXTRA_KEY = "limitingVelocityIsShow"; // 限速的速度 public static String BROADCAST_V2X_LIMITING_VELOCITY_SPEED__EXTRA_KEY = "limitingVelocitySpeed"; - // 交警任务 - public static String NOTICE_FOR_TRAFFIC_KEY = "noticeForTraffic"; - //普通公告弹框 - public static String NOTICE_FOR_NORMAL_KEY = "noticeForNotice"; } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt index 9a52b93f15..bec65df4af 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/NoticeNormalBroadcastReceiver.kt @@ -3,8 +3,11 @@ package com.mogo.eagle.core.function.hmi.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.utilcode.util.SharedPrefs /** @@ -47,7 +50,6 @@ class NoticeNormalBroadcastReceiver : BroadcastReceiver() { data.content = contentTv data.videoUrl = videoUrl data.fileType = fileType - CallerHmiManager.showNoticeNormalData(data) } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/V2XWarningBroadcastReceiver.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/V2XWarningBroadcastReceiver.kt index 7486583818..7eb5d55f3d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/V2XWarningBroadcastReceiver.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/receiver/V2XWarningBroadcastReceiver.kt @@ -8,6 +8,10 @@ import com.mogo.eagle.core.function.hmi.WaringConst import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.data.enums.EventTypeEnum +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.V2XMsg +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager /** * V2X 预警广播接收。用于跨应用,跨进程,内部也可以通过这种方式弹出预警提示框 @@ -53,7 +57,7 @@ class V2XWarningBroadcastReceiver : BroadcastReceiver() { * 分发处理关闭场景 */ private fun dispatchCloseWaring(tag: String?) { - CallerHmiManager.disableWarningV2X(tag) +// CallerHmiManager.disableWarningV2X(tag) } /** @@ -73,6 +77,13 @@ class V2XWarningBroadcastReceiver : BroadcastReceiver() { if (EventTypeEnum.TYPE_USECASE_ID_IVP.poiType == v2xType.toString()) { CallerHmiManager.showLimitingVelocity(1) } - CallerHmiManager.showWarningV2X(v2xType.toString(), alertContent, ttsContent, tag, null, true, 5000L) + CallerMsgBoxManager.saveMsgBox( + MsgBoxBean( + MsgBoxType.V2X, + V2XMsg(v2xType.toString(), alertContent, ttsContent) + ) + ) + CallerHmiManager.warningV2X(v2xType.toString(), alertContent, ttsContent, + tag, null, true, 5000L) } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 754de2d65e..5844a486fa 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -23,7 +23,6 @@ import com.alibaba.android.arouter.launcher.ARouter import com.mogo.cloud.passport.MoGoAiCloudClient import com.mogo.commons.AbsMogoApplication import com.mogo.commons.debug.DebugConfig -import com.mogo.eagle.core.data.enums.EventTypeEnum import com.mogo.commons.mvp.BaseFragment import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.voice.* @@ -36,10 +35,14 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.constants.MoGoFragmentPaths import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I +import com.mogo.eagle.core.data.enums.EventTypeEnum import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.data.enums.SidePattern.* import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.map.Infrastructure +import com.mogo.eagle.core.data.msgbox.MsgBoxBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.RecordBagMsg import com.mogo.eagle.core.data.notice.NoticeNormalData import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData import com.mogo.eagle.core.data.report.ReportEntity @@ -63,9 +66,9 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.hmi.WaringConst import com.mogo.eagle.core.function.hmi.notification.WarningFloat import com.mogo.eagle.core.function.hmi.notification.anim.DefaultAnimator import com.mogo.eagle.core.function.hmi.ui.bindingcar.ModifyBindingCarDialog @@ -73,8 +76,8 @@ import com.mogo.eagle.core.function.hmi.ui.bindingcar.ToBindingCarDialog import com.mogo.eagle.core.function.hmi.ui.bindingcar.UpgradeAppDialog import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog -import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView -import com.mogo.eagle.core.function.hmi.ui.notice.NoticeNormalBannerView +import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog +import com.mogo.eagle.core.function.hmi.ui.notice.NoticeTrafficDialog import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView import com.mogo.eagle.core.function.hmi.ui.setting.IPCReportWindow import com.mogo.eagle.core.function.hmi.ui.setting.ReportListFloatWindow @@ -137,8 +140,6 @@ class MoGoHmiFragment : MvpFragment(), //StatusView private var statusBarView: StatusBarView? = null - private var mNoticeFloat: WarningFloat.Builder? = null - // 超视距、路侧、前车直播 private var cameraListView: CameraListView? = null private var cameraViewFloat: WarningFloat.Builder? = null @@ -276,15 +277,19 @@ class MoGoHmiFragment : MvpFragment(), //美化模式隐藏开关 viewDemoModeSwitch.setOnClickListener { //只在司机端设置美化模式开关功能 - if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { //单次查询,是否有行程信息(订单进行中时点击不生效),autopilotControlParameters为null代表不处于自动驾驶状态下 - if(CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().autopilotControlParameters == null){ + if (CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().autopilotControlParameters == null) { FunctionBuildConfig.isDemoMode = !FunctionBuildConfig.isDemoMode context?.let { - CallerHmiManager.updateStatusBarRightView(FunctionBuildConfig.isDemoMode, "demoMode", DemoModeView(it)) + CallerHmiManager.updateStatusBarRightView( + FunctionBuildConfig.isDemoMode, + "demoMode", + DemoModeView(it) + ) } CallerAutoPilotManager.setDemoMode(FunctionBuildConfig.isDemoMode) - if(!FunctionBuildConfig.isDemoMode){ + if (!FunctionBuildConfig.isDemoMode) { //关闭美化模式时,通知工控机 CallerAutoPilotManager.setIPCDemoMode(FunctionBuildConfig.isDemoMode) } @@ -318,6 +323,14 @@ class MoGoHmiFragment : MvpFragment(), override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { CallerLogger.d("$M_HMI$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat}") + CallerMsgBoxManager.saveMsgBox( + MsgBoxBean( + MsgBoxType.RECORD, RecordBagMsg( + recordPanel.key, recordPanel.stat, recordPanel.id, + recordPanel.type, recordPanel.filename, recordPanel.note + ) + ) + ) if (BadCaseConfig.recordKeyList.contains(recordPanel.key)) { if (recordPanel.stat == 100 || recordPanel.stat == 101) { //成功结束录制 @@ -505,7 +518,7 @@ class MoGoHmiFragment : MvpFragment(), .setGravity(Gravity.LEFT) .setImmersionStatusBar(true) .setWindowHeight(LayoutParams.MATCH_PARENT) - .setWindowWidth(AutoSizeUtils.dp2px(context,960f)) + .setWindowWidth(AutoSizeUtils.dp2px(context, 960f)) .setAnimator(object : DefaultAnimator() { override fun enterAnim( view: View, @@ -688,8 +701,8 @@ class MoGoHmiFragment : MvpFragment(), .setSidePattern(side) .setGravity(gravity, offsetY = 70) .setImmersionStatusBar(true) - .setWindowHeight(AutoSizeUtils.dp2px(context,1100f)) - .setWindowWidth(AutoSizeUtils.dp2px(context,800f)) + .setWindowHeight(AutoSizeUtils.dp2px(context, 1100f)) + .setWindowWidth(AutoSizeUtils.dp2px(context, 800f)) .setAnimator(object : DefaultAnimator() { override fun enterAnim( view: View, @@ -741,8 +754,8 @@ class MoGoHmiFragment : MvpFragment(), .setSidePattern(side) .setGravity(gravity, offsetY = 70) .setImmersionStatusBar(true) - .setWindowWidth(AutoSizeUtils.dp2px(context,800f)) - .setWindowHeight(AutoSizeUtils.dp2px(context,1100f)) + .setWindowWidth(AutoSizeUtils.dp2px(context, 800f)) + .setWindowHeight(AutoSizeUtils.dp2px(context, 1100f)) .setAnimator(object : DefaultAnimator() { override fun enterAnim( view: View, @@ -898,6 +911,71 @@ class MoGoHmiFragment : MvpFragment(), } } + /** + * 不展示顶部弹窗,其它保留 + */ + @Synchronized + override fun warningV2X( + v2xType: String, + alertContent: CharSequence?, + ttsContent: String?, + tag: String?, + listener: IMoGoWarningStatusListener?, + playTts: Boolean, + expireTime: Long + ) { + val playTTS = + playTts && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) + activity?.let { + val warningContent = alertContent + ?: EventTypeEnum.getWarningContent(v2xType) + + //占道施工预警 + if (v2xType.equals("10006") || v2xType.equals("100061")) { + val currentTime = System.currentTimeMillis() / 1000 + val oldTime = + context?.let { it -> SharedPrefsMgr.getInstance(it).getLong("roadwork", 0) } + if (currentTime - oldTime!! > 60) { //超过一分钟,才会继续播报重复提醒 + context?.let { it -> + SharedPrefsMgr.getInstance(it) + .putLong("roadwork", System.currentTimeMillis() / 1000) + } + CallerAutoPilotManager.sendTripInfo(5, "", "", "", false); + } + } + + if (warningContent.isEmpty()) { + CallerLogger.e("$M_HMI$TAG", "Show warningContent is null or empty!") + return + } + listener?.onShow() + CallerLogger.d( + "$M_HMI$TAG", + "--- show v2x dialog 1 ---: info -> v2x-type: $v2xType : expireTime: $expireTime" + ) + + lastShowV2XJob?.safeCancel() + lastSpeakJob?.safeCancel() + + lifecycleScope.launch { + delay(expireTime) + }.also { itx -> + lastShowV2XJob = itx + }.invokeOnCompletion { _ -> + listener?.onDismiss() + showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + } + + if (ttsContent != null && !TextUtils.isEmpty(ttsContent) && playTTS) { + lifecycleScope.launch { + speak(it, ttsContent) + }.also { itx -> + lastSpeakJob = itx + } + } + } + } + private suspend fun speak(ctx: Context, text: String) = suspendCancellableCoroutine { try { val voiceCallback = object : IMogoVoiceCmdCallBack { @@ -1055,105 +1133,37 @@ class MoGoHmiFragment : MvpFragment(), clearAnimation(flV2XWarningView) } + private var noticeTrafficDialog: NoticeTrafficDialog? = null + /** - * 展示云公告顶部弹窗 + * 展示云公告交警详情 * @param trafficStylePushData */ override fun showNoticeForTrafficWithData(trafficStylePushData: NoticeTrafficStylePushData?) { + if (trafficStylePushData == null) { + return + } ThreadUtils.runOnUiThread { - activity?.let { - val noticeBannerView = this.context?.let { it1 -> NoticeBannerView(it1) } - noticeBannerView?.refreshWithData(trafficStylePushData) - mNoticeFloat = it?.let { it1 -> - noticeBannerView?.let { it2 -> - WarningFloat.with(it1) - .setTag(WaringConst.NOTICE_FOR_TRAFFIC_KEY) - .setLayout(it2) - .setSidePattern(SidePattern.TOP) - .setCountDownTime(60 * 1000 * 3) - .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) - .setImmersionStatusBar(true) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onShow() { - // 创建弹窗成功才进行TTS播报 -// AIAssist.getInstance(activity) -// .speakTTSVoice("") - } - - }) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } - - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .show() - } - } + context?.let { + noticeTrafficDialog = NoticeTrafficDialog(it, trafficStylePushData) + noticeTrafficDialog?.show() } } } - override fun showNoticeNormalData(normalData: NoticeNormalData?) { - ThreadUtils.runOnUiThread { - activity?.let { - val noticeBannerView = this.context?.let { it1 -> NoticeNormalBannerView(it1) } - noticeBannerView?.setPushData(normalData) - mNoticeFloat = it.let { it1 -> - noticeBannerView?.let { it2 -> - WarningFloat.with(it1) - .setTag(WaringConst.NOTICE_FOR_NORMAL_KEY) - .setLayout(it2) - .setSidePattern(SidePattern.TOP) - .setCountDownTime(10000) - .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) - .setImmersionStatusBar(true) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onShow() { - // 创建弹窗成功才进行TTS播报 - // AIAssist.getInstance(activity) - // .speakTTSVoice("") - } - }) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + private var pushCheckDialog: NoticeCheckDialog? = null - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .show() - } - } + /** + * 展示云公告详情 + */ + override fun showNoticeNormalData(normalData: NoticeNormalData?) { + if (normalData == null) { + return + } + ThreadUtils.runOnUiThread { + context?.let { + pushCheckDialog = NoticeCheckDialog(it) + pushCheckDialog?.showCheckDialog(normalData) } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeBannerView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeBannerView.java index 7b0271d048..20bcb27dac 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeBannerView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeBannerView.java @@ -12,11 +12,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; -import com.mogo.eagle.core.data.notice.NoticeTrafficStyleInfo; import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData; import com.mogo.eagle.core.function.hmi.R; -import com.mogo.eagle.core.function.hmi.WaringConst; -import com.mogo.eagle.core.function.hmi.notification.WarningFloat; import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp; import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform; import com.mogo.eagle.core.utilcode.util.BitmapHelper; @@ -67,14 +64,11 @@ public class NoticeBannerView extends ConstraintLayout { (30f, GlideRoundedCornersTransform.CornerType.LEFT)).into(styleImageView); } else { iconImageView.setVisibility(View.VISIBLE); - new Thread(new Runnable() { - @Override - public void run() { - Bitmap firstBitmap = BitmapHelper.getVideoThumbnail(mPushData.getPoiImgUrl());/*获取第一帧图*/ - ThreadUtils.runOnUiThread(()->{ - styleImageView.setImageBitmap(firstBitmap); - }); - } + new Thread(() -> { + Bitmap firstBitmap = BitmapHelper.getVideoThumbnail(mPushData.getPoiImgUrl());/*获取第一帧图*/ + ThreadUtils.runOnUiThread(()->{ + styleImageView.setImageBitmap(firstBitmap); + }); }); }; } @@ -89,12 +83,7 @@ public class NoticeBannerView extends ConstraintLayout { noticeBannerCheck.setOnClickListener(v -> { mNoticeTrafficDialog = new NoticeTrafficDialog(mContext, mPushData); mNoticeTrafficDialog.show(); - WarningFloat.dismiss(WaringConst.NOTICE_FOR_TRAFFIC_KEY); }); } - //数据改变刷新UI - public void pushBeanChanged(NoticeTrafficStyleInfo info) { - - } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt index ae92070f39..d5779981bd 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeCheckDialog.kt @@ -19,7 +19,6 @@ import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTran import com.mogo.eagle.core.utilcode.util.BitmapHelper import com.mogo.eagle.core.widget.media.video.NoticeSimpleVideoPlayer import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog -import com.mogo.service.IMogoServiceApis import com.shuyu.gsyvideoplayer.GSYVideoManager import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack @@ -43,7 +42,6 @@ class NoticeCheckDialog(context: Context) : BaseFloatDialog(context), LifecycleO private var mVideoUrl: String = "" private var playErrorImageView: ImageView? = null private var connectTextView: TextView? = null - private var mServiceApis: IMogoServiceApis? = null private val statusChangedListenerForCheckNotice = IMogoStatusChangedListener { descriptor, isTrue -> if (descriptor == StatusDescriptor.MAIN_PAGE_IS_BACKGROUND) { dismiss() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeNormalBannerView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeNormalBannerView.java index a6d3af65ed..2344915d7b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeNormalBannerView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/notice/NoticeNormalBannerView.java @@ -13,8 +13,6 @@ import androidx.constraintlayout.widget.ConstraintLayout; import com.mogo.eagle.core.data.notice.NoticeNormalData; import com.mogo.eagle.core.function.hmi.R; -import com.mogo.eagle.core.function.hmi.WaringConst; -import com.mogo.eagle.core.function.hmi.notification.WarningFloat; import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp; import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform; @@ -80,7 +78,6 @@ public class NoticeNormalBannerView extends ConstraintLayout { } pushCheckDialog.showCheckDialog(mPushData); - WarningFloat.dismiss(WaringConst.NOTICE_FOR_NORMAL_KEY); }); } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 070a9421e2..7d0d1bd056 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -570,10 +570,11 @@ class DebugSettingView @JvmOverloads constructor( } } - Log.i( - "1026-emArrow", - "debug setting FunctionBuildConfig.isDemoMode : ${FunctionBuildConfig.isDemoMode}" - ) + btnDrawFusion.isChecked = FunctionBuildConfig.isFusionColor + btnDrawFusion.setOnCheckedChangeListener{_, isChecked -> + FunctionBuildConfig.isFusionColor = isChecked + } + // 演示模式,上一次勾选的数据 tbIsDemoMode.isChecked = FunctionBuildConfig.isDemoMode @@ -685,6 +686,7 @@ class DebugSettingView @JvmOverloads constructor( 1 -> R.id.trackerIPC 2 -> R.id.trackerIPCObu 3 -> R.id.trackerIPCV2I + 4 -> R.id.trackerIPCV2nRsm else -> R.id.trackerIPCUnion } ) @@ -694,6 +696,7 @@ class DebugSettingView @JvmOverloads constructor( R.id.trackerIPC -> FunctionBuildConfig.trackerIPCProvider = 1 R.id.trackerIPCObu -> FunctionBuildConfig.trackerIPCProvider = 2 R.id.trackerIPCV2I -> FunctionBuildConfig.trackerIPCProvider = 3 + R.id.trackerIPCV2nRsm -> FunctionBuildConfig.trackerIPCProvider = 4 } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt index 50f2e8a817..a507b08ac2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt @@ -62,7 +62,7 @@ class TurnLightViewStatus @JvmOverloads constructor( if (directionLight == 1 || directionLight == 2) { if (!isVisualAngleChanged) { isVisualAngleChanged = true - CallerVisualAngleManager.changeVisualAngle(Turning) + CallerVisualAngleManager.changeVisualAngle(Turning(true)) } } @@ -96,7 +96,7 @@ class TurnLightViewStatus @JvmOverloads constructor( } else { //消失 if (isVisualAngleChanged) { isVisualAngleChanged = false - CallerVisualAngleManager.changeVisualAngle(Default()) + CallerVisualAngleManager.changeVisualAngle(Turning(false)) } if (!isDisappare) { isDisappare = true diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedChartView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedChartView.java index 6560fadda6..f6d69a53ee 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedChartView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedChartView.java @@ -13,7 +13,6 @@ import android.view.View; import androidx.annotation.Nullable; import com.mogo.eagle.core.function.hmi.R; -import com.mogo.eagle.core.function.hmi.ui.notice.NoticeBannerView; /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 141f627fcf..cde0dcdca9 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -64,17 +64,12 @@ class SystemVersionView @JvmOverloads constructor( showCurrentPadVersion() showCurrentAdVersion() - val builder = NotificationCompat.Builder(context) - builder.setSmallIcon(R.mipmap.icon1001) - builder.setContentTitle("下载") - builder.setContentText("正在下载") - val manager: NotificationManager? = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager? - //鹰眼版本视图点击事件 ivPadVersion.setOnClickListener { CallerLogger.i("$M_HMI$$TAG", "pad version view clicked") CallerBindingcarManager.getBindingcarProvider().queryAppUpgrade() + //弹框和下载回调 // showUpgradeDialog( // "", // "", @@ -82,11 +77,17 @@ class SystemVersionView @JvmOverloads constructor( // "", // "1" // ) + +// val builder = NotificationCompat.Builder(context) +// builder.setSmallIcon(R.mipmap.icon1001) +// builder.setContentTitle("下载") +// builder.setContentText("正在下载") +// val manager: NotificationManager? = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager? // // CallerDevaToolsUpgradeListenerManager.registerDevaToolsUpgradeListener(TAG, // object : IMogoDevaToolsUpgradeListener { // override fun onStart(url: String?) { -// Log.d("Package-DownLoad", " SystemVersionView onStart --------> ") +//// Log.d("Package-DownLoad", " SystemVersionView onStart --------> ") // } // // override fun onPause(url: String?) { @@ -94,36 +95,27 @@ class SystemVersionView @JvmOverloads constructor( // } // // override fun onProgress(url: String?, length: Int) { -// Log.d("Package-DownLoad", " SystemVersionView onProgress length = $length") +//// Log.d("Package-DownLoad", " SystemVersionView onProgress length = $length") // builder.setProgress(100, length,false) // manager?.notify(0x3,builder.build()) // //下载进度提示 -// if (length == 99) { -// UiThreadHandler.postDelayed({ -// length == 100 -// builder.setContentText("已下载" + length + "%") -// -// UiThreadHandler.postDelayed({ -// manager?.cancel(0x3) -// }, 1000L) -// -// }, 1500L) -// } -// // builder.setContentText("已下载" + length + "%") // } // // override fun onFinished(url: String?) { -// Log.d("Package-DownLoad", " SystemVersionView onFinished ------> ") +//// Log.d("Package-DownLoad", " SystemVersionView onFinished ------> ") +// builder.setContentText("已下载" + 100 + "%") +// UiThreadHandler.postDelayed({ +// manager?.cancel(0x3) +// }, 500L) // } // // override fun onError(url: String?, errorMsg: String?) { -// Log.d("Package-DownLoad", " errorMsg = $errorMsg") +//// Log.d("Package-DownLoad", " errorMsg = $errorMsg") // } // }) } - //工控机版本视图点击事件 ivAdVersion.setOnClickListener { CallerLogger.i("$M_HMI$$TAG", "ad version view clicked") diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index 09593b6a28..b256c4308b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -37,6 +37,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.rousetime.android_startup.model.CostTimesModel; import com.zhjt.service.chain.ChainLog; import com.zhjt.service.chain.TracingConstants; @@ -60,7 +61,7 @@ import me.jessyan.autosize.utils.AutoSizeUtils; * @author tongchenfei */ public class MainLauncherActivity extends MainActivity implements IMogoIntentListener, IMoGoSkinModeChangeListener { - private static final String TAG = "liyz"; + private static final String TAG = "MainLauncherActivity"; protected boolean mIsHomeKeyDown = false; private final static Handler handlerV2XEvent = new Handler(); private static Runnable runnableV2XEvent; @@ -71,17 +72,20 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis private BluetoothMonitorReceiver mBluetoothReceiver = null; private BluetoothAdapter mBluetoothAdapter; - // private List mAreadlyConnectedList = new ArrayList<>();//已连接设备集合 - private int numberA = 0; - private boolean isLongPressA = false; - private int numberB = 0; - private boolean isLongPressB = false; - private int numberC = 0; - private boolean isLongPressC = false; - private int numberD = 0; - private boolean isLongPressD = false; - private int numberE = 0; - private boolean isLongPressE = false; + private boolean isShowToast = false; //toast 控制 + private long startPressTime = 0; //开始按减时间 + private boolean isPressEnd = false; //按键是否结束 + private volatile int isCombinationKey = 0; //是否是组合按键 1单击,2长按,3组合 + private long pressADownTime = 0; + private long pressAUpTime = 0; + private long pressBDownTime = 0; + private long pressBUpTime = 0; + private long pressCDownTime = 0; + private long pressCUpTime = 0; + private long pressDDownTime = 0; + private long pressDUpTime = 0; + private long pressEDownTime = 0; + private long pressEUpTime = 0; @Override @@ -90,7 +94,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis DebugConfig.setNeedRequestUserInfo(true); EventBus.getDefault().register(this); CallerLogger.INSTANCE.i(M_HMI + TAG, "onCreate"); - } @Override @@ -114,7 +117,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { FrameLayout frameLayout = findViewById(R.id.module_main_id_map_fragment_container); - frameLayout.setPadding(0, 0, AutoSizeUtils.dp2px(getContext(),700), 0); + frameLayout.setPadding(0, 0, AutoSizeUtils.dp2px(getContext(), 700), 0); } } @@ -214,16 +217,12 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis return super.onKeyDown(keyCode, event); } - private long startPressTime = 0; //开始按减时间 - private boolean isPressEnd = false; //按键是否结束 - private boolean isCombinationKey = false; //是否是组合按键 - - private long pressADownTime = 0; - private long pressAUpTime = 0; - private long pressBDownTime = 0; - private long pressBUpTime = 0; - - + /** + * 魔方按键分发 + * + * @param event + * @return + */ @Override public boolean dispatchKeyEvent(KeyEvent event) { // Log.d(TAG, "dispatchKeyEvent code = " + event.getKeyCode() + "--action = " + event.getAction() + "----" + event); @@ -231,137 +230,164 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis if (!isPressEnd) { Log.e(TAG, "dispatchKeyEvent bluetoothName = " + bluetoothName); } - if (bluetoothName.equals("MINI_KEYBOARD")) { if (!isPressEnd) { isPressEnd = true; startPressTime = System.currentTimeMillis(); } - if (event.getKeyCode() == KeyEvent.KEYCODE_A) { //单击向左变道,长按-1 + if (event.getKeyCode() == KeyEvent.KEYCODE_A) { //单击 -1,长按无操作,AB组合-2 if (event.getAction() == KeyEvent.ACTION_DOWN) { pressADownTime = System.currentTimeMillis(); Log.d(TAG, "dispatchKeyEvent A down pressADownTime = " + pressADownTime + "---" + (pressADownTime - startPressTime) + "----isCombinationKey = " + isCombinationKey + "--pressBDownTime = " + pressBDownTime); - if ((pressADownTime - startPressTime) > 550 && (pressADownTime - startPressTime) < 1900 && pressBDownTime > 0) { - ToastUtils.showShort("方块 A 按AB组合 -2 "); + if ((pressADownTime - startPressTime) > 320 && (pressADownTime - startPressTime) < 1300 && pressBDownTime > 0) { + if (isShowToast) { + ToastUtils.showShort("方块 A 按AB组合 -2 "); + } sendAcc(true, -2); - isCombinationKey = true; + isCombinationKey = 3; } - if (!isCombinationKey) { - if ((pressADownTime - startPressTime) > 2000) { - ToastUtils.showShort("方块 长按A 无操作 "); + if (isCombinationKey != 3 && isCombinationKey != 1) { + if ((pressADownTime - startPressTime) > 1320) { + if (isShowToast) { + ToastUtils.showShort("方块 长按A 无 操作 "); + } + isCombinationKey = 2; } } } else if (event.getAction() == KeyEvent.ACTION_UP) { pressAUpTime = System.currentTimeMillis(); - isPressEnd = false; - isCombinationKey = false; Log.e(TAG, "dispatchKeyEvent A up pressAUpTime = " + pressAUpTime + "---" + (pressAUpTime - startPressTime) + "--pressBDownTime = " + pressBDownTime); - if ((pressAUpTime - startPressTime) < 500) { - ToastUtils.showShort("方块 单击A -1 "); + if ((pressAUpTime - startPressTime) < 300 && isCombinationKey != 3) { + isCombinationKey = 1; + if (isShowToast) { + ToastUtils.showShort("方块 单击A -1 "); + } sendAcc(true, -1); } - pressAUpTime = 0; + pressADownTime = 0; + isPressEnd = false; + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + isCombinationKey = 0; + } + }, 300); } return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_B) { //单击向右变道,长按-2 + } else if (event.getKeyCode() == KeyEvent.KEYCODE_B) {//单击复原,长按+1,AB组合-2 if (event.getAction() == KeyEvent.ACTION_DOWN) { pressBDownTime = System.currentTimeMillis(); Log.d(TAG, "dispatchKeyEvent B down pressBDownTime = " + pressBDownTime + "--差-" + (pressBDownTime - startPressTime) + "---isCombinationKey = " + isCombinationKey + "--pressADownTime = " + pressADownTime); - if ((pressBDownTime - startPressTime) > 550 && (pressBDownTime - startPressTime) < 1900 && pressADownTime > 0) { - ToastUtils.showShort("方块 B 按AB组合 "); + if ((pressBDownTime - startPressTime) > 320 && (pressBDownTime - startPressTime) < 1300 && pressADownTime > 0) { + if (isShowToast) { + ToastUtils.showShort("方块 B 按AB组合 "); + } sendAcc(true, -2); - isCombinationKey = true; + isCombinationKey = 3; } - - if (!isCombinationKey) { - if ((pressBDownTime - startPressTime) > 2000) { - ToastUtils.showShort("方块 长按B =1 "); + if (isCombinationKey != 3 && isCombinationKey != 1) { + if ((pressBDownTime - startPressTime) > 1320) { + if (isShowToast) { + ToastUtils.showShort("方块 长按B +1 "); + } sendAcc(true, +1); + isCombinationKey = 2; } } - } else if (event.getAction() == KeyEvent.ACTION_UP) { pressBUpTime = System.currentTimeMillis(); - isPressEnd = false; - isCombinationKey = false; Log.e(TAG, "dispatchKeyEvent B up pressBUpTime = " + pressBUpTime + "--差-" + (pressBUpTime - startPressTime) + "--pressADownTime = " + pressADownTime); - if ((pressBUpTime - startPressTime) < 500) { - ToastUtils.showShort("方块 单击B 0 "); + if ((pressBUpTime - startPressTime) < 300 && isCombinationKey != 3) { + if (isShowToast) { + ToastUtils.showShort("方块 单击B 0 "); + } sendAcc(false, 0.0); + isCombinationKey = 1; } - pressBDownTime = 0; + isPressEnd = false; + + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + isCombinationKey = 0; + } + }, 300); } return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_C) { //单击鸣笛, + } else if (event.getKeyCode() == KeyEvent.KEYCODE_C) { //单击左变道,长按无操作 if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberC++; - if (numberC > 2) { - if (!isLongPressC) { -// ToastUtils.showShort("方块 长按C 无操作"); - isLongPressC = true; + pressCDownTime = System.currentTimeMillis(); + if ((pressCDownTime - startPressTime) > 1320) { + if (isShowToast) { + ToastUtils.showShort("方块 长按C 无操作 "); } } } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberC == 1) { -// ToastUtils.showShort("方块 单击C ← 向左变道 "); + pressCUpTime = System.currentTimeMillis(); + isPressEnd = false; + if ((pressCUpTime - startPressTime) < 300) { + if (isShowToast) { + ToastUtils.showShort("方块 单击C ← 向左变道 "); + } CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); } - numberC = 0; - isLongPressC = false; } return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_D) { //单击开启自动驾驶, + } else if (event.getKeyCode() == KeyEvent.KEYCODE_D) { //单击向右变道,双击无操作 if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberD++; - if (numberD > 2) { - if (!isLongPressD) { -// ToastUtils.showShort("方块 长按D 无操作"); - isLongPressD = true; + pressDDownTime = System.currentTimeMillis(); + if ((pressDDownTime - startPressTime) > 1320) { + if (isShowToast) { + ToastUtils.showShort("方块 长按D 无操作 "); } } } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberD == 1) { -// ToastUtils.showShort("方块 单击D → 向右变道 "); + pressDUpTime = System.currentTimeMillis(); + isPressEnd = false; + if ((pressDUpTime - startPressTime) < 300) { + if (isShowToast) { + ToastUtils.showShort("方块 单击D → 向右变道 "); + } CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); } - numberD = 0; - isLongPressD = false; } + return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_E) { //单击复原, + } else if (event.getKeyCode() == KeyEvent.KEYCODE_E) { //单击启动自驾,长按鸣笛 if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberE++; - if (numberE > 2) { - if (!isLongPressE) { -// ToastUtils.showShort("方块 长按E 鸣笛 "); - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); - if (timerHorn == null) { - timerHorn = new Timer(); - } - timerHorn.schedule(new TimerTask() { - @Override - public void run() { - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); - timerHorn = null; - } - }, 500); - isLongPressE = true; + pressEDownTime = System.currentTimeMillis(); + if ((pressEDownTime - startPressTime) > 1320) { + if (isShowToast) { + ToastUtils.showShort("方块 长按E 鸣笛 "); } + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); + if (timerHorn == null) { + timerHorn = new Timer(); + } + timerHorn.schedule(new TimerTask() { + @Override + public void run() { + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); + timerHorn = null; + } + }, 500); } } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberE == 1) { -// ToastUtils.showShort("方块 单击E 开启自动驾驶 "); -// CallerAutoPilotManager.INSTANCE.setControlAutopilotCarAuto(true); + pressEUpTime = System.currentTimeMillis(); + isPressEnd = false; + if ((pressEUpTime - startPressTime) < 300) { + if (isShowToast) { + ToastUtils.showShort("方块 单击E 开启自动驾驶 "); + } CallerAutoPilotManager.INSTANCE.startAutoPilot(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getAutopilotControlParameters()); } - numberE = 0; - isLongPressE = false; } + return true; } } @@ -416,7 +442,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis * 查找蓝牙连接过的蓝牙设备 */ private void showBondedDevice(BluetoothAdapter bluetoothAdapter) { -// mAreadlyConnectedList.clear(); Set deviceList = bluetoothAdapter.getBondedDevices(); for (BluetoothDevice device : deviceList) { try { @@ -424,27 +449,14 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis Method isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null); isConnectedMethod.setAccessible(true); // boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null); -// mAreadlyConnectedList.add(device); Log.d(TAG, "-- device.getName() = " + device.getName()); //device.getAddress() if (device.getName().equals("MINI_KEYBOARD")) { SharedPrefsMgr.getInstance(getContext()).putString("BLUETOOTH", device.getName()); } } catch (NoSuchMethodException e) { e.printStackTrace(); -// } catch (IllegalAccessException e) { -// e.printStackTrace(); -// } catch (InvocationTargetException e) { -// e.printStackTrace(); } } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onAutoConnection(ConnectBluetoothEvent event) { -// connectBluetooth(); - } - - } - - diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index 3fc2839ae2..8e88df6202 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -2,9 +2,14 @@ package com.mogo.eagle.core.function.main; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI; +import android.app.NotificationManager; +import android.annotation.SuppressLint; import android.content.Context; import android.os.Process; +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; + import com.bytedance.boost_multidex.BoostMultiDex; import com.elegant.utils.UiThreadHandler; import com.mogo.cloud.socket.SocketBuildConfig; @@ -17,14 +22,19 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.constants.MoGoConfig; import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.function.api.chat.biz.ChatConsts; +import com.mogo.eagle.core.function.api.devatools.IMogoDevaToolsUpgradeListener; import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsUpgradeListenerManager; +import com.mogo.eagle.core.function.hmi.R; +import com.mogo.eagle.core.function.msgbox.db.MsgBoxDb; import com.mogo.eagle.core.function.overview.OverviewDb; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.ProcessUtils; +import com.mogo.eagle.core.utilcode.util.SPUtils; import com.mogo.map.MapApiPath; import com.zhidao.support.obu.ami.AmiClientManager; import com.zhjt.mogo_core_function_devatools.monitor.db.CpuInfo; @@ -32,6 +42,8 @@ import com.zhjt.mogo_core_function_devatools.monitor.db.MemInfo; import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb; import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; /** @@ -62,7 +74,9 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { } //查询是否有版本的更新 queryAppUpgrade(); + clearMessageBoxTable(); checkMonitorDb(); + upgradeProgressListener(); } @Override @@ -80,6 +94,24 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { },9000); } + @SuppressLint("SimpleDateFormat") + private void clearMessageBoxTable() { + new Thread(() -> { + String lastLaunchTimeStr = SPUtils.getInstance().getString("last_launch", ""); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + if (lastLaunchTimeStr != null && !lastLaunchTimeStr.isEmpty()) { + Date currDate = new Date(System.currentTimeMillis()); + String currTimeStr = format.format(currDate); + boolean isSameDay = currTimeStr.equals(lastLaunchTimeStr); + // 超过一天需要清除消息盒子中的数据,并把时间戳存入SP + if (!isSameDay) { + this.deleteDatabase(MsgBoxDb.INTERNAL_DB_NAME); + SPUtils.getInstance().put("last_launch", currTimeStr); + } + } + }).start(); + } + private void checkMonitorDb() { new Thread(() -> { long limitId = 50001; @@ -92,6 +124,50 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { }).start(); } + private void upgradeProgressListener() { + final NotificationCompat.Builder builder = new NotificationCompat.Builder(this); + builder.setSmallIcon(R.mipmap.icon1001); + builder.setContentTitle("下载"); + builder.setContentText("正在下载"); + final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + CallerDevaToolsUpgradeListenerManager.INSTANCE.registerDevaToolsUpgradeListener(TAG, new IMogoDevaToolsUpgradeListener() { + @Override + public void onStart(@Nullable String url) { + + } + + @Override + public void onPause(@Nullable String url) { + + } + + @Override + public void onProgress(@Nullable String url, int length) { + builder.setProgress(100, length,false); + manager.notify(0x3, builder.build()); + //下载进度提示 + builder.setContentText("已下载" + length + "%"); + } + + @Override + public void onFinished(@Nullable String url) { + builder.setContentText("已下载" + 100 + "%"); + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + manager.cancel(0x3); + } + }, 1000); + } + + @Override + public void onError(@Nullable String url, @Nullable String errorMsg) { + + } + }); + } + private void initKoom() { KoomInitTask.INSTANCE.init(this); } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index ec80635375..6a2021f4bd 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -1508,6 +1508,20 @@ app:layout_constraintRight_toLeftOf="@id/btnDrawTrolley" app:layout_constraintTop_toBottomOf="@id/reset_changesight" /> + +