Merge branch 'dev_robotaxi-d-app-module_260_220304_2.6.0' of gitlab.zhidaoauto.com:zhjt/AndroidApp/MoGoEagleEye into dev_robotaxi-d-app-module_260_220304_2.6.0

This commit is contained in:
xinfengkun
2022-03-17 10:25:35 +08:00
155 changed files with 6247 additions and 1079 deletions

View File

@@ -8,6 +8,7 @@ import androidx.fragment.app.FragmentActivity;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.bus.constant.OchBusConst;
import com.mogo.och.bus.fragment.OchBusFragment;
@@ -36,10 +37,7 @@ public class OchBusProvider implements IMogoOCH {
*/
private void stepIntoVrMode(){
Logger.d( TAG, "进入vr模式" );
MogoApisHandler.getInstance()
.getApis()
.getMapServiceApi()
.getMapUIController()
MogoMapUIController.getInstance()
.openVrMode(false);
}

View File

@@ -30,6 +30,8 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.module.common.MogoApisHandler;
@@ -119,15 +121,13 @@ public abstract class BaseOchBusTabFragment<V extends IView, P extends Presenter
@Override
public void onClickImpl(View v) {
//切换地图的远近视图
if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isLongSight()) {
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).visibleAllMarkers();
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight()) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers();
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
mSwitchText.setText(R.string.bus_map_model_normal);
} else if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isMediumSight()) {
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS);
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
} else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS);
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
mSwitchText.setText(R.string.bus_map_model_faster);
}
}

View File

@@ -17,6 +17,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.bus.R;
@@ -331,12 +332,10 @@ public class OchBusFragment extends BaseOchBusTabFragment<OchBusFragment, OchBus
options.icon(bitmap);
options.latitude(lat);
options.longitude(longi);
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMarkerManager(AbsMogoApplication.getApp()).addMarker(uuid, options);
} else {
Log.d("RemoveMapMaker=", uuid + "=latitude=" + lat + ",longitude=" + longi);
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMarkerManager(AbsMogoApplication.getApp()).removeMarkers(uuid);
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).addMarker(uuid, options);
}else {
Log.d("RemoveMapMaker=",uuid+"=latitude="+lat+",longitude="+longi);
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(uuid);
}
}

View File

@@ -57,6 +57,7 @@ import io.reactivex.exceptions.UndeliverableException;
import io.reactivex.functions.Consumer;
import io.reactivex.plugins.RxJavaPlugins;
import io.reactivex.schedulers.Schedulers;
import mogo.telematics.pad.MessagePad;
/**
* @author congtaowang
@@ -788,7 +789,7 @@ public class OchBusOrderModel {
* 到站
* @param data
*/
public void onArriveAt( AutopilotStationInfo data){
public void onArriveAt( MessagePad.ArrivalNotification data){
if ( currentStationIndex > stationList.size() - 1 ) {
Logger.e( TAG, "到站异常,取消后续操作结束" );
return;

View File

@@ -8,6 +8,7 @@ import androidx.fragment.app.FragmentActivity;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst;
import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment;
@@ -43,10 +44,7 @@ class MogoOCHTaxi implements IMogoOCH, IMogoStatusChangedListener {
*/
private void stepIntoVrMode() {
Logger.d( TAG, "进入vr模式" );
MogoApisHandler.getInstance()
.getApis()
.getMapServiceApi()
.getMapUIController()
MogoMapUIController.getInstance()
.openVrMode( false );
}

View File

@@ -6,6 +6,7 @@ import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.v2x.events.utils.LocationUtils;
import com.mogo.eagle.core.utilcode.util.ColorUtils;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -32,7 +33,7 @@ public class OCHTaxiOverlayManager {
// 引导线颜色
mPolylineColors = new ArrayList<>();
mContext = context;
mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext);
mogoOverlayManager = MogoOverlayManager.getInstance();
}
/**

View File

@@ -4,11 +4,10 @@ package com.mogo.och.taxi.passenger.callback;
import java.util.List;
import mogo.telematics.pad.MessagePad;
/**
* @author: wangmingjun
* @date: 2021/11/1
*/
interface IOCHTaxiAutopilotPlanningCallback {
public interface IOCHTaxiPassengerAutopilotPlanningCallback {
void routeResult(List<MessagePad.Location> models);
}

View File

@@ -4,7 +4,6 @@ import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.net.ConnectivityManager;
import android.text.TextUtils;
import androidx.annotation.Nullable;
@@ -14,7 +13,6 @@ import com.mogo.cloud.commons.utils.CoordinateUtils;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.eagle.core.data.autopilot.ADASTrajectoryInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotGuardianStatusInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo;
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
@@ -57,6 +55,9 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
/**
* Created by pangfan on 2021/8/19
*
@@ -472,6 +473,11 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
private IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){
@Override
public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) {
}
private boolean arriveAtEnd = false; //乘客app专用字段
@Override
@@ -525,18 +531,13 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
}
@Override
public void onAutopilotGuardian(@Nullable AutopilotGuardianStatusInfo autopilotGuardianStatusInfo) {
}
@Override
public void onAutopilotArriveAtStation(@Nullable AutopilotStationInfo data) {
public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) {
if (FunctionBuildConfig.isDemoMode
&& AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
arriveAtEnd = true;
}
if (data == null || !checkCurrentOCHOrder()
if (arrivalNotification == null || !checkCurrentOCHOrder()
|| (getCurOrderStatus() == TaxiPassengerOrderStatusEnum.ArriveAtEndStation)) {
return;
}
@@ -544,28 +545,29 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
// TipToast.shortTip("到达目的地");
}
}
};
private IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){
private final IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){
@Override
public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) {
if (null != routeList && routeList.getWayPointsList().size() > 0){
mAutopilotPlanningCallback.routeResult(routeList.getWayPointsList());
}
}
@Override
public void onAutopilotTrajectory(ArrayList<ADASTrajectoryInfo> trajectoryInfos) {
}
@Override
public void onAutopilotRotting(AutopilotRouteInfo routeList) {
if (null != routeList && routeList.getModels() != null){
mAutopilotPlanningCallback.routeResult(routeList.getModels());
}
}
};
/**
* 限速监听
*/
private LimitingVelocityListener limitingVelocityListener = new LimitingVelocityListener(){
private final LimitingVelocityListener limitingVelocityListener = new LimitingVelocityListener(){
@Override
public void onLimitingVelocityChange(int limitingVelocity) {
@@ -597,7 +599,4 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback
}
/**
* END
*/
}

View File

@@ -8,7 +8,6 @@ import androidx.annotation.RequiresApi;
import androidx.lifecycle.LifecycleOwner;
import com.mogo.commons.mvp.Presenter;
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo;
import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback;
@@ -21,6 +20,8 @@ import com.mogo.och.taxi.passenger.ui.TaxiPassengerServingOrderFragment;
import java.util.ArrayList;
import java.util.List;
import mogo.telematics.pad.MessagePad;
/**
* @author: wangmingjun
* @date: 2022/3/14
@@ -59,11 +60,11 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
}
@Override
public void routeResult(List<AutopilotRouteInfo.RouteModels> models) {
public void routeResult(List<MessagePad.Location> models) {
if (models == null) return;
List<MogoLatLng> latLngList = new ArrayList<>();
for (AutopilotRouteInfo.RouteModels routeModel : models) {
latLngList.add(new MogoLatLng(routeModel.getLat(), routeModel.getLon()));
for (MessagePad.Location routeModel : models) {
latLngList.add(new MogoLatLng(routeModel.getLatitude(), routeModel.getLongitude()));
}
mView.routeResult(latLngList);
}
@@ -81,7 +82,7 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onCurrentOrderDistToEndChanged(int meters, int timeInSecond) {
mView.onCurrentOrderDistToEndChanged(meters,timeInSecond);
mView.onCurrentOrderDistToEndChanged(meters,timeInSecond);
}
@Override
@@ -91,14 +92,14 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
@Override
public void onCarLocationChanged(Location location) {
if (location != null){
mView.onCarLocationChanged(location);
}
if (location != null){
mView.onCarLocationChanged(location);
}
}
@Override
public void onLimitingVelocityChange(int limitingVelocity) {
mView.onLimitingVelocityChange(limitingVelocity);
mView.onLimitingVelocityChange(limitingVelocity);
}
@Override
@@ -106,4 +107,5 @@ public class TaxiPassengerServingOrderPresenter extends Presenter<TaxiPassengerS
super.onDestroy(owner);
releaseListener();
}
}

View File

@@ -15,6 +15,8 @@ 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.map.CallerSmpManager;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.module.common.MogoApisHandler;
@@ -39,6 +41,7 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
private ImageView mAutopilotImage;
private ImageView mMapswitchBtn;
private TaxiPassengerTrafficLightView mTrafficLightView;
private TaxiPassengerV2XNotificationView mV2XNotificationView;
protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null;
@@ -64,24 +67,21 @@ public class TaxiPassengerBaseFragment extends MvpFragment<TaxiPassengerBaseFrag
mTrafficLightView = findViewById(R.id.traffic_light_view);
CallerHmiManager.INSTANCE.setProxyTrafficLightView(mTrafficLightView);
mV2XNotificationView = new TaxiPassengerV2XNotificationView(getContext());
CallerHmiManager.INSTANCE.setProxyNotificationView(mV2XNotificationView);
mMapswitchBtn = findViewById(R.id.module_och_taxi_swich_map_iv);
mMapswitchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//视角切换
if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController()
if (MogoMapUIController.getInstance()
.getCurrentMapVisualAngle().isLongSight()) {
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMarkerManager(AbsMogoApplication.getApp()).visibleAllMarkers();
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
} else if (MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().getCurrentMapVisualAngle().isMediumSight()) {
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMarkerManager(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS);
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers();
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
} else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS);
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
}
}
});

View File

@@ -16,7 +16,6 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import com.mogo.commons.mvp.BaseFragment;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo;
import com.mogo.eagle.core.data.map.MogoLatLng;
@@ -24,11 +23,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.taxi.passenger.R;
import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback;
import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback;
import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback;
import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum;
import com.mogo.och.taxi.passenger.model.TaxiPassengerModel;
import com.mogo.och.taxi.passenger.model.TaxiPassengerNaviToDestinationModel;
@@ -40,6 +35,8 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import mogo.telematics.pad.MessagePad;
/**
* @author: wangmingjun
* @date: 2022/3/8
@@ -91,7 +88,7 @@ public class TaxiPassengerServingOrderFragment extends
protected void initViews() {
mTPSpeedTv = findViewById(R.id.taxi_p_speed_tv);
mTPSpeedTv.setText(getSpeedTextStyle("0",true));
mTPSpeedTv.setText(getSpeedTextStyle("0", true));
mTPOrderStatus = findViewById(R.id.taxi_p_order_status_tv);
mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv);
@@ -106,17 +103,18 @@ public class TaxiPassengerServingOrderFragment extends
mTPOrderStatus.setOnLongClickListener(new View.OnLongClickListener() { //测试用
@Override
public boolean onLongClick(View v) {
List<AutopilotRouteInfo.RouteModels> list = new ArrayList<>();
for (int i = 0; i < 200 ; i++){
List<MessagePad.Location> list = new ArrayList<>();
for (int i = 0; i < 200; i++) {
MessagePad.Location.Builder builder = MessagePad.Location.newBuilder();
AutopilotRouteInfo.RouteModels routeModels = new AutopilotRouteInfo.RouteModels();
if (i <= 100){
routeModels.setLat(40.199248903658166);
routeModels.setLon(116.73435586102245 + i * 0.0001);
}else {
routeModels.setLat(40.199248903658166 + i * 0.0001);
routeModels.setLon(116.73435586102245 + 100 * 0.0001);
if (i <= 100) {
builder.setLatitude(40.199248903658166);
builder.setLongitude(116.73435586102245 + i * 0.0001);
} else {
builder.setLatitude(40.199248903658166 + i * 0.0001);
builder.setLongitude(116.73435586102245 + 100 * 0.0001);
}
list.add(routeModels);
list.add(builder.build());
}
mPresenter.routeResult(list);
return true;
@@ -142,10 +140,10 @@ public class TaxiPassengerServingOrderFragment extends
/**
* 设置进度条最大值为 起点终点首次规划出的值
*/
private void setSeekBarMax(){
private void setSeekBarMax() {
//计算订单起点和终点距离
int maxInt = TaxiPassengerModel.getInstance().calculateOrderDistanceSum();
Logger.d(TAG,"maxInt = "+maxInt);
Logger.d(TAG, "maxInt = " + maxInt);
mProgressSeekBar.setMax(maxInt);
}
@@ -153,7 +151,7 @@ public class TaxiPassengerServingOrderFragment extends
* 行驶进度值更新
*/
@RequiresApi(api = Build.VERSION_CODES.N)
private void updateDriveProcessLoading(int progressLoading){
private void updateDriveProcessLoading(int progressLoading) {
mProgressSeekBar.setProgress(
TaxiPassengerModel.getInstance().calculateOrderDistanceSum() - progressLoading
, true);
@@ -198,6 +196,7 @@ public class TaxiPassengerServingOrderFragment extends
/**
* 绘制
*
* @param coordinates
*/
private void drawablePolyline(List<MogoLatLng> coordinates) {
@@ -212,7 +211,7 @@ public class TaxiPassengerServingOrderFragment extends
}
}
private void clearPolyline(){
private void clearPolyline() {
if (mMapDirectionView != null) {
UiThreadHandler.post(new Runnable() {
@Override
@@ -227,13 +226,13 @@ public class TaxiPassengerServingOrderFragment extends
mTPOrderStartStation.setText(order.startSiteAddr);
mTPOrderEndStation.setText(order.endSiteAddr);
if (TaxiPassengerOrderStatusEnum.ArriveAtStartStation.getCode() == order.orderStatus){
if (TaxiPassengerOrderStatusEnum.ArriveAtStartStation.getCode() == order.orderStatus) {
mTPOrderStatus.setText(getString(R.string.taxi_p_arrive_to_start));
setSeekBarMax();
return;
}
if (TaxiPassengerOrderStatusEnum.OnTheWayToEndStation.getCode() == order.orderStatus){
if (TaxiPassengerOrderStatusEnum.OnTheWayToEndStation.getCode() == order.orderStatus) {
mTPOrderStatus.setText(R.string.taxi_p_start_to_end);
return;
}
@@ -246,7 +245,7 @@ public class TaxiPassengerServingOrderFragment extends
DecimalFormat fnum = new DecimalFormat("##0.00");
String remainDis = fnum.format((float) meters / 1000);
int remainTime = (int) timeInSecond / 60;
updateOrderDisAndTimeView(remainDis,remainTime,arriveTime);
updateOrderDisAndTimeView(remainDis, remainTime, arriveTime);
updateDriveProcessLoading(meters);
}
@@ -266,39 +265,41 @@ public class TaxiPassengerServingOrderFragment extends
/**
* 更新速度
*
* @param newSpeed
*/
private void updateSpeedView(float newSpeed) {
int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值
if (speed < mLimitingVelocity ){
mTPSpeedTv.setText(getSpeedTextStyle(String.valueOf(speed),true));
}else {
if (speed < mLimitingVelocity) {
mTPSpeedTv.setText(getSpeedTextStyle(String.valueOf(speed), true));
} else {
mTPSpeedTv.setText(getSpeedTextStyle(String.valueOf(speed), false));
}
}
/**
* 设置速度的颜色
*
* @param content
* @param isNormal 正常状态 true, 超速状态
* @return
*/
private SpannableStringBuilder getSpeedTextStyle(String content,boolean isNormal){
if (isNormal){
private SpannableStringBuilder getSpeedTextStyle(String content, boolean isNormal) {
if (isNormal) {
return TaxiPassengerUtils.getGradientFontSpan(content
, 0xFFCEEEFF ,0xFFA1DAFF);
}else {//超速
, 0xFFCEEEFF, 0xFFA1DAFF);
} else {//超速
return TaxiPassengerUtils.getGradientFontSpan(content
,0xFFFE2505 ,0xFFFF6F62);
, 0xFFFE2505, 0xFFFF6F62);
}
}
private void runOnUIThread( Runnable executor ) {
if ( executor == null ) {
private void runOnUIThread(Runnable executor) {
if (executor == null) {
return;
}
if ( Looper.myLooper() != Looper.getMainLooper() ) {
UiThreadHandler.post( executor );
if (Looper.myLooper() != Looper.getMainLooper()) {
UiThreadHandler.post(executor);
} else {
executor.run();
}
@@ -311,6 +312,7 @@ public class TaxiPassengerServingOrderFragment extends
/**
* 设置指南针旋转
*
* @param bearing
*/
private void startIvCompass(float bearing) {

View File

@@ -0,0 +1,90 @@
package com.mogo.och.taxi.passenger.ui;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.TextView;
import com.mogo.eagle.core.data.enums.SidePattern;
import com.mogo.eagle.core.function.api.hmi.view.IViewNotification;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.och.taxi.passenger.R;
import org.jetbrains.annotations.Nullable;
/**
* V2X预警事件view通过FloatWindow呈现无需加入到自定义layout中
*
* Created on 2022/3/16
*/
public class TaxiPassengerV2XNotificationView extends IViewNotification {
private ImageView mV2XNotificationIcon;
private TextView mV2XNotificationText;
public TaxiPassengerV2XNotificationView(@Nullable Context context) {
this(context, null, 0);
}
public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
LayoutInflater.from(context).inflate(R.layout.taxi_p_v2x_notification_view, this,
true);
mV2XNotificationIcon = findViewById(R.id.taxi_p_v2x_notification_icon_iv);
mV2XNotificationText = findViewById(R.id.taxi_p_v2x_notification_text_tv);
// 设置View的出场位置
setSidePattern(SidePattern.LEFT);
setLayoutGravity(Gravity.LEFT);
// 设置View的停留位置相对屏幕左上角的位置
setOffsetX(getResources().
getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left));
setOffsetY(getResources().
getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top));
}
@Override
public void setWarningIcon(int warningIcon) {
super.setWarningIcon(warningIcon);
UiThreadHandler.post(() -> {
mV2XNotificationIcon.setImageResource(warningIcon);
});
}
@Override
public void setWarningIcon(@Nullable Drawable drawable) {
super.setWarningIcon(drawable);
UiThreadHandler.post(() -> {
mV2XNotificationIcon.setImageDrawable(drawable);
});
}
@Override
public void setWarningContent(@Nullable CharSequence warningContent) {
super.setWarningContent(warningContent);
UiThreadHandler.post(() -> {
mV2XNotificationText.setText(warningContent);
});
}
@Override
public void setWarningContent(int warningContentId) {
super.setWarningContent(warningContentId);
UiThreadHandler.post(() -> {
mV2XNotificationText.setText(warningContentId);
});
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/taxi_p_v2x_notification_bg_color"/>
<corners android:radius="@dimen/taxi_p_v2x_notification_bg_corner"/>
</shape>

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/taxi_p_v2x_notification_view_padding"
android:background="@drawable/bg_taxi_p_v2x_notification_view">
<ImageView
android:id="@+id/taxi_p_v2x_notification_icon_iv"
android:layout_width="@dimen/taxi_p_v2x_notification_icon_size"
android:layout_height="@dimen/taxi_p_v2x_notification_icon_size"
android:src="@drawable/icon_warning_v2x_abnormal_vehicle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/taxi_p_v2x_notification_text_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/taxi_p_v2x_notification_text_margin_left"
android:text="预警信息"
android:textColor="#FFFFFF"
android:textSize="@dimen/taxi_p_v2x_notification_text_size"
app:layout_constraintBottom_toBottomOf="@+id/taxi_p_v2x_notification_icon_iv"
app:layout_constraintLeft_toRightOf="@+id/taxi_p_v2x_notification_icon_iv"
app:layout_constraintTop_toTopOf="@+id/taxi_p_v2x_notification_icon_iv"
tools:text="前车碰撞预警" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -39,4 +39,12 @@
<dimen name="taxi_p_traffic_light_icon_size">154px</dimen>
<dimen name="taxi_p_traffic_light_time_view_width">127px</dimen>
<dimen name="taxi_p_traffic_light_time_size">60px</dimen>
<dimen name="taxi_p_v2x_notification_view_margin_left">31px</dimen>
<dimen name="taxi_p_v2x_notification_view_margin_top">110px</dimen> <!-- 距离Pad顶部 -->
<dimen name="taxi_p_v2x_notification_view_padding">10px</dimen>
<dimen name="taxi_p_v2x_notification_bg_corner">70px</dimen>
<dimen name="taxi_p_v2x_notification_icon_size">120px</dimen>
<dimen name="taxi_p_v2x_notification_text_size">39px</dimen>
<dimen name="taxi_p_v2x_notification_text_margin_left">20px</dimen>
</resources>

View File

@@ -102,4 +102,12 @@
<dimen name="taxi_p_traffic_light_icon_size">154px</dimen>
<dimen name="taxi_p_traffic_light_time_view_width">127px</dimen>
<dimen name="taxi_p_traffic_light_time_size">60px</dimen>
<dimen name="taxi_p_v2x_notification_view_margin_left">31px</dimen>
<dimen name="taxi_p_v2x_notification_view_margin_top">110px</dimen> <!-- 距离Pad顶部 -->
<dimen name="taxi_p_v2x_notification_view_padding">10px</dimen>
<dimen name="taxi_p_v2x_notification_bg_corner">70px</dimen>
<dimen name="taxi_p_v2x_notification_icon_size">120px</dimen>
<dimen name="taxi_p_v2x_notification_text_size">39px</dimen>
<dimen name="taxi_p_v2x_notification_text_margin_left">20px</dimen>
</resources>

View File

@@ -23,4 +23,6 @@
<color name="taxi_p_traffic_light_green_color_down">#006D43</color>
<color name="taxi_p_traffic_light_yellow_color_up">#FFE198</color>
<color name="taxi_p_traffic_light_yellow_color_down">#FF9B00</color>
<color name="taxi_p_v2x_notification_bg_color">#80000000</color>
</resources>

View File

@@ -100,4 +100,12 @@
<dimen name="taxi_p_traffic_light_icon_size">154px</dimen>
<dimen name="taxi_p_traffic_light_time_view_width">127px</dimen>
<dimen name="taxi_p_traffic_light_time_size">60px</dimen>
<dimen name="taxi_p_v2x_notification_view_margin_left">31px</dimen>
<dimen name="taxi_p_v2x_notification_view_margin_top">110px</dimen> <!-- 距离Pad顶部 -->
<dimen name="taxi_p_v2x_notification_view_padding">10px</dimen>
<dimen name="taxi_p_v2x_notification_bg_corner">70px</dimen>
<dimen name="taxi_p_v2x_notification_icon_size">120px</dimen>
<dimen name="taxi_p_v2x_notification_text_size">39px</dimen>
<dimen name="taxi_p_v2x_notification_text_margin_left">20px</dimen>
</resources>

View File

@@ -9,6 +9,7 @@ import androidx.fragment.app.FragmentActivity;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.taxi.constant.OCHTaxiConst;
import com.mogo.och.taxi.ui.OCHTaxiFragment;
@@ -44,10 +45,7 @@ class MogoOCHTaxi implements IMogoOCH , IMogoStatusChangedListener {
*/
private void stepIntoVrMode() {
Logger.d( TAG, "进入vr模式" );
MogoApisHandler.getInstance()
.getApis()
.getMapServiceApi()
.getMapUIController()
MogoMapUIController.getInstance()
.openVrMode( false );
}

View File

@@ -6,6 +6,7 @@ import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.v2x.events.utils.LocationUtils;
import com.mogo.eagle.core.utilcode.util.ColorUtils;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -32,7 +33,7 @@ public class OCHTaxiOverlayManager {
// 引导线颜色
mPolylineColors = new ArrayList<>();
mContext = context;
mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext);
mogoOverlayManager = MogoOverlayManager.getInstance();
}
/**

View File

@@ -36,6 +36,8 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.map.CallerSmpManager;
import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.module.common.MogoApisHandler;
@@ -115,14 +117,12 @@ public abstract class BaseOchTaxiTabFragment<V extends IView, P extends Presente
@Override
public void onClick(View v) {
//视角切换
if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isLongSight()) {
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).visibleAllMarkers();
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
} else if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isMediumSight()) {
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS);
MogoApisHandler.getInstance().getApis().getMapServiceApi()
.getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight()) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .visibleAllMarkers();
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
} else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS);
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null);
}
}
});

View File

@@ -25,6 +25,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.Logger;
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
import com.mogo.eagle.core.utilcode.util.DateTimeUtils;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.och.taxi.callback.IOCHTaxiNaviChangedCallback;
@@ -534,10 +535,10 @@ public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implem
options.icon(bitmap);
options.latitude(station.get(1));
options.longitude(station.get(0));
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).addMarker(uuid, options);
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .addMarker(uuid, options);
}else {
Log.d("RemoveMapMaker=",uuid+"=latitude="+station.get(1)+",longitude="+station.get(0));
MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).removeMarkers(uuid);
MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .removeMarkers(uuid);
}
}
/**

View File

@@ -19,8 +19,7 @@ import androidx.test.filters.LargeTest
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
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.notification.enums.SidePattern
import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.function.main.MainLauncherActivity
import com.mogo.eagle.core.utilcode.kotlin.shape
import com.mogo.eagle.core.utilcode.reminder.Reminder
@@ -28,7 +27,6 @@ import com.mogo.eagle.core.utilcode.reminder.api.impl.ActivityReminder
import com.mogo.eagle.core.utilcode.reminder.api.impl.PopupWindowReminder
import com.mogo.eagle.core.utilcode.reminder.api.impl.ViewReminder
import com.mogo.eagle.core.utilcode.util.AppStateManager
import com.mogo.module.common.enums.EventTypeEnum
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking

View File

@@ -112,6 +112,8 @@ public class MogoApplication extends MainMoGoApplication {
HmiBuildConfig.isShowLimitingVelocityView = false;
//是否显示 红绿等
HmiBuildConfig.isShowTrafficLightView = false;
//是否显示 路侧监控
HmiBuildConfig.isShowCameraView = false;
}
//och模块
MogoModulePaths.addModuleFunction(new MogoModule("/och/api", "IMoGoFunctionProvider"));

View File

@@ -1 +0,0 @@
/build

View File

@@ -1,21 +0,0 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -110,8 +110,13 @@ class MoGoAutopilotProvider :
NettyClientListener<MogoProtocolMsg> {
override fun onMessageResponseClient(msg: MogoProtocolMsg?, sign: String?) {
// 乘客端收到adas数据直接解析后续分发解析后的数据流程同司机端
msg?.let {
AdasManager.getInstance().parseIPCData(it.body)
try {
msg?.let {
AdasManager.getInstance().parseIPCData(it.body)
}
} catch (e: Exception) {
e.printStackTrace()
CallerLogger.e("$M_ADAS_IMPL$TAG", "乘客屏解析数据流程中出现异常:${e.message}")
}
}
@@ -264,7 +269,7 @@ class MoGoAutopilotProvider :
}
override fun setIPCReboot() {
AdasManager.getInstance().rebootIPC()
AdasManager.getInstance().rebootAPDocker()
}
override fun recordCause(key: String?, name: String?, id: String?, reason: String?) {

View File

@@ -31,6 +31,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListen
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showAdUpgradeStatus
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.showDockerRebootResult
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.module.common.MogoApisHandler
import com.mogo.module.common.datacenter.SnapshotLocationDataCenter
@@ -61,6 +62,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
const val TAG = "OnAdasListenerAdapter"
}
//车前引导线
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
endpoint = PAD,
@@ -90,6 +92,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//感知物体
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -107,6 +110,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//自车定位信息
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -124,7 +128,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
MogoApisHandler.getInstance().apis.adasControllerApi.satelliteTime =
java.lang.Double.valueOf(gnssInfo.satelliteTime).toLong()
if (1 == FunctionBuildConfig.gpsProvider) {
MarkerServiceHandler.getApis().mapServiceApi.mapUIController.syncLocation2Map(
CallerMapUIServiceManager.getMapUIController()?.syncLocation2Map(
gnssInfo
)
SnapshotLocationDataCenter.getInstance().syncAdasLocationInfo(gnssInfo)
@@ -132,6 +136,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//自车状态(底盘),车灯等。
override fun onVehicleState(
header: MessagePad.Header,
vehicleState: VehicleStateOuterClass.VehicleState?
@@ -144,6 +149,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//自动驾驶状态
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -181,6 +187,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//监控
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -205,6 +212,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
invokeAutopilotSNRequest()
}
//工控机基础配置信息
override fun onCarConfigResp(
header: MessagePad.Header,
carConfigResp: MessagePad.CarConfigResp?
@@ -214,6 +222,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//数据采集badCase
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -231,6 +240,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//全局路径规划
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -248,6 +258,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//预警信息
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,
@@ -260,6 +271,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
invokeAutopilotWarnMessage(warn)
}
//到站回调
@ChainLog(
linkCode = CHAIN_LINK_ADAS,
linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA,

View File

@@ -38,6 +38,7 @@ import com.mogo.eagle.core.function.chat.facade.utils.log
import com.mogo.eagle.core.function.chat.facade.voice.VoiceControlFacade
import com.mogo.eagle.core.utilcode.kotlin.safeCancel
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.map.MogoLocationClient
import kotlinx.coroutines.*
import kotlinx.coroutines.android.asCoroutineDispatcher
import kotlinx.coroutines.channels.Channel
@@ -580,7 +581,7 @@ object MoGoChatFacade: IMoGoChatFacade {
}
//告之服务器给发送方下发接收通话消息
try {
val location = BridgeApi.locationClient()?.lastKnowLocation
val location = MogoLocationClient.getInstance(context())?.lastKnowLocation
val response = serverApi.requestConnectStatus(ConnectStatusParam(MoGoAiCloudClientConfig.getInstance().sn, sn, roomId, PUSH_MSG_AGREE_ENTER, CALL_TYPE_VOICE.type).also {
it.nickName = mySelf.get().name
it.headImgUrl = mySelf.get().icon
@@ -811,7 +812,7 @@ object MoGoChatFacade: IMoGoChatFacade {
}
val response = serverApi.inviteJoinVehicleTeam(CallRequestParam().also {
val user = mySelf.get()
val location = BridgeApi.locationClient()?.lastKnowLocation
val location = MogoLocationClient.getInstance(context())?.lastKnowLocation
it.snSender = mySn
it.snReceiver = sn
it.nickName = user.name
@@ -957,7 +958,7 @@ object MoGoChatFacade: IMoGoChatFacade {
}
//告之服务器给发送方下发接收通话消息
try {
val location = BridgeApi.locationClient()?.lastKnowLocation
val location = MogoLocationClient.getInstance(context())?.lastKnowLocation
val response = serverApi.requestConnectStatus(ConnectStatusParam(MoGoAiCloudClientConfig.getInstance().sn, sn, roomId, PUSH_MSG_AGREE_ENTER, CALL_TYPE_VEHICLE_TEAM.type).also {
it.nickName = mySelf.get().name
it.headImgUrl = mySelf.get().icon

View File

@@ -21,8 +21,6 @@ internal object BridgeApi {
internal fun context(): Context = contextHolder?.get() ?: Utils.getApp()
internal fun locationClient() = apis?.mapServiceApi?.getSingletonLocationClient(context())
internal fun intentManager() = apis?.intentManagerApi
internal fun statusManager() = apis?.statusManagerApi

View File

@@ -5,6 +5,7 @@ import com.google.gson.Gson
import com.google.gson.JsonElement
import com.google.gson.JsonObject
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.BaseResponse
import com.mogo.eagle.core.data.chat.UserInfo
import com.mogo.eagle.core.data.constants.MogoServicePaths
@@ -15,6 +16,7 @@ import com.mogo.eagle.core.function.chat.facade.consts.ChatHttp
import com.mogo.eagle.core.function.chat.facade.consts.ChatHttp.Companion.getConfig
import com.mogo.eagle.core.function.chat.facade.net.bean.*
import com.mogo.eagle.core.function.chat.facade.utils.log
import com.mogo.map.MogoLocationClient
import com.mogo.service.IMogoServiceApis
import retrofit2.http.*
import java.lang.IllegalStateException
@@ -72,7 +74,7 @@ internal class ChatServiceModel {
suspend fun requestConnectStatus(params: ConnectStatusParam): BaseResponse<Any> {
val map = hashMapOf<String, String>()
val sn = MoGoAiCloudClientConfig.getInstance().sn
val location = BridgeApi.locationClient()?.lastKnowLocation
val location = MogoLocationClient.getInstance(AbsMogoApplication.getApp())?.lastKnowLocation
if (location != null) {
params.lon = location.longitude
params.lat = location.latitude
@@ -103,7 +105,7 @@ internal class ChatServiceModel {
suspend fun requestRoomInfo(param: CallRequestParam): BaseResponse<RoomInfo> {
val map = hashMapOf<String, String>()
val location = BridgeApi.locationClient()?.lastKnowLocation
val location = MogoLocationClient.getInstance(AbsMogoApplication.getApp())?.lastKnowLocation
if (location != null) {
param.lat = location.latitude
param.lon = location.longitude

View File

@@ -19,8 +19,8 @@ import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.Utils
import com.zhjt.mogo_core_function_devatools.badcase.api.entity.BadCaseResponse.Reason
import com.zhjt.mogo_core_function_devatools.badcase.mvp.BadCasePresenter
import com.zhjt.mogo_core_function_devatools.badcase.mvp.BadCaseView
import com.zhjt.mogo_core_function_devatools.badcase.biz.BadCasePresenter
import com.zhjt.mogo_core_function_devatools.badcase.biz.BadCaseView
import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel

View File

@@ -1,54 +0,0 @@
package com.zhjt.mogo_core_function_devatools.badcase.mvp
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager
import com.zhjt.mogo_core_function_devatools.badcase.api.entity.UploadResult
import com.zhjt.mogo_core_function_devatools.badcase.mvp.biz.IBadCasePresenter
import com.zhjt.mogo_core_function_devatools.badcase.repository.Repository
import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord
internal class BadCasePresenter : IBadCasePresenter {
private val repository by lazy {
Repository()
}
override suspend fun loadBadCases() = repository.loadBadCases()
override suspend fun insertRecord(record: AutoPilotRecord) {
try {
repository.insert(record)
} catch (t: Throwable) {
CallerLogger.e("$M_DEVA${BadCaseManager.TAG}", "-- 插入数据失败 -- msg: $t")
}
}
override suspend fun getUnConsumedRecords(): List<AutoPilotRecord> {
return try {
repository.getAllUnConsumedRecord() ?: emptyList()
} catch (t: Throwable) {
CallerLogger.e("$M_DEVA${BadCaseManager.TAG}", "-- 获取所有未消费的数据失败 -- msg: $t")
emptyList()
}
}
override suspend fun deleteRecord(record: AutoPilotRecord) {
try {
repository.deleteRecord(record)
} catch (t: Throwable) {
CallerLogger.e("$M_DEVA${BadCaseManager.TAG}", "-- 删除某条记录失败 -- msg: $t")
}
}
override suspend fun upload(map: Map<String, String>): UploadResult? = repository.upload(map)
override suspend fun updateLastModified(timestamp: Long) {
repository.uploadLastModified(timestamp)
}
override suspend fun getLastModified(): Long {
CallerLogger.d("$M_DEVA${BadCaseManager.TAG}", " --- 2 ----")
return repository.getLastModified()
}
}

View File

@@ -1,176 +0,0 @@
package com.zhjt.mogo_core_function_devatools.badcase.mvp
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.StateListDrawable
import android.util.AttributeSet
import android.util.StateSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.autopilot.AutoPilotRecordResult
import com.mogo.eagle.core.utilcode.kotlin.*
import com.zhjt.mogo_core_function_devatools.R
import com.zhjt.mogo_core_function_devatools.badcase.api.entity.BadCaseResponse.Reason
import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord
import kotlinx.android.synthetic.main.layout_badcase_collect.view.*
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
internal class BadCaseView: ConstraintLayout {
@Volatile
private var selectCase: Reason? = null
@Volatile
private var cases: List<Reason>? = null
private val presenter by lazy {
BadCasePresenter()
}
private var onDismiss: (() -> Unit)? = null
private var onSelect:(suspend (reason: Reason) -> Unit)? = null
private val scope by lazy {
lifecycleOwner.lifecycleScope
}
private var record: AutoPilotRecord? = null
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
@SuppressLint("SetTextI18n") constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
LayoutInflater.from(context).inflate(R.layout.layout_badcase_collect, this, true)
background = ColorDrawable(Color.parseColor("#F0151D41"))
isClickable = true
layoutParams = ViewGroup.LayoutParams(960.toPixels().toInt(), 1528.toPixels().toInt())
close?.onClick {
onDismiss?.invoke()
}
cancel?.also {
it.background = shape(solid = Color.parseColor("#3B4577"), radius = 16)
it.onClick {
onDismiss?.invoke()
}
}
ok?.also {
val enabled = gradient(radius = 16.toPixels().toInt(), orientation = GradientDrawable.Orientation.LEFT_RIGHT, centerX = 0.06f, startColor = Color.rgb(35, 146, 252), endColor = Color.rgb(28, 75, 252))
val disabled = gradient(radius = 16.toPixels().toInt(), orientation = GradientDrawable.Orientation.LEFT_RIGHT, centerX = 0.06f, startColor = Color.rgb(24, 71, 129), endColor = Color.rgb(21, 46, 129))
it.background = object : StateListDrawable() {}.also { itx ->
itx.addState(intArrayOf(android.R.attr.state_enabled), enabled)
itx.addState(StateSet.WILD_CARD, disabled)
}
it.onClick {
selectCase?.run {
scope.launch {
onSelect?.invoke(this@run)
}
}
}
}
scope.launchWhenCreated {
time_of_take_over?.text = "接管时间:${SimpleDateFormat("yyyy.MM.dd HH:mm", Locale.getDefault()).format(record?.toLongTime() ?: System.currentTimeMillis())}"
showLoading()
presenter.loadBadCases().also {
cases = it
refresh(it)
}
hideLoading()
}
}
private fun refresh(causes: List<Reason>) {
cases = causes
rv_take_over?.let {
it.layoutManager = LinearLayoutManager(it.context, LinearLayoutManager.VERTICAL, false)
it.adapter = object : RecyclerView.Adapter<BadCaseViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BadCaseViewHolder = BadCaseViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_badcase_item, parent, false))
override fun onBindViewHolder(holder: BadCaseViewHolder, position: Int) {
val cases = cases
if (cases == null || cases.isEmpty()) {
return
}
if (position >= cases.size) {
return
}
val case = cases[position]
holder.bindData(case)
}
override fun getItemCount(): Int = cases?.size ?: 0
}
}
}
private fun showLoading() {
pb?.let {
it.visibility = View.VISIBLE
}
}
private fun hideLoading() {
pb?.let {
it.visibility = View.INVISIBLE
}
}
private inner class BadCaseViewHolder(item: View) : RecyclerView.ViewHolder(item) {
private val check: ImageView = item.findViewById(R.id.check)
private val reason: TextView = item.findViewById(R.id.reason)
init {
check.background = StateListDrawable().also {
it.addState(intArrayOf(android.R.attr.state_selected), ContextCompat.getDrawable(itemView.context, R.drawable.icon_ap_badcase_check))
it.addState(StateSet.WILD_CARD, ContextCompat.getDrawable(itemView.context, R.drawable.icon_ap_badcase_default))
}
}
@SuppressLint("NotifyDataSetChanged")
fun bindData(case: Reason) {
check.isSelected = case.isChecked
reason.text = case.reason ?: ""
if (case.isChecked) {
ok?.isSelected = true
}
itemView.onClick {
case.isChecked = !case.isChecked
selectCase = case
cancelOtherChecked(case)
ok?.isEnabled = hasCheckedItem()
rv_take_over?.adapter?.notifyDataSetChanged()
}
}
private fun hasCheckedItem(): Boolean = cases?.find { it.isChecked } != null
private fun cancelOtherChecked(case: Reason) {
val cases = cases
if (cases == null || cases.isEmpty()) {
return
}
cases.filterNot { it == case }.forEach {
it.isChecked = false
}
}
}
fun register(record: AutoPilotRecord?, onDismiss: () -> Unit, onSelect:suspend (reason: Reason) -> Unit) {
this.record = record
this.onDismiss = onDismiss
this.onSelect = onSelect
}
}

View File

@@ -1,24 +0,0 @@
package com.zhjt.mogo_core_function_devatools.badcase.mvp.biz
import com.zhjt.mogo_core_function_devatools.badcase.api.entity.BadCaseResponse.Reason
import com.zhjt.mogo_core_function_devatools.badcase.api.entity.UploadResult
import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord
import kotlinx.coroutines.flow.Flow
internal interface IBadCasePresenter {
suspend fun loadBadCases(): List<Reason>
suspend fun updateLastModified(timestamp: Long)
suspend fun getLastModified(): Long
suspend fun upload(map: Map<String, String>): UploadResult?
suspend fun insertRecord(record: AutoPilotRecord)
suspend fun getUnConsumedRecords(): List<AutoPilotRecord>
suspend fun deleteRecord(record: AutoPilotRecord)
}

View File

@@ -1,5 +1,8 @@
package com.zhjt.mogo_core_function_devatools.scene
//todo 1. SceneLogCache增加模块名称提供场景需要
//todo 2. 对特定场景提供数据, 网约车,调度...
class SceneManager {
companion object {

View File

@@ -6,11 +6,10 @@ import android.view.View
import androidx.appcompat.view.ContextThemeWrapper
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner
import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatAnimator
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.reminder.Reminder
import com.mogo.eagle.core.utilcode.reminder.api.impl.ViewReminder

View File

@@ -12,7 +12,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import com.mogo.eagle.core.function.hmi.notification.anim.AnimatorManager
import com.mogo.eagle.core.function.hmi.notification.enums.ShowPattern
import com.mogo.eagle.core.data.enums.ShowPattern
import com.mogo.eagle.core.function.hmi.notification.widget.ParentFrameLayout
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
@@ -24,8 +24,8 @@ import com.mogo.eagle.core.utilcode.util.WindowUtils
* 弹窗Window 管理
*/
internal class WarningFloatWindowHelper(
val context: Context,
var config: WarningNotificationConfig
val context: Context,
var config: WarningNotificationConfig
) {
var TAG = "WarningFloatWindowHelper"
@@ -85,7 +85,7 @@ internal class WarningFloatWindowHelper(
frameLayout?.tag = config.floatTag
// 将浮窗布局文件添加到父容器frameLayout中并返回该浮窗文件
val floatingView = config.layoutView?.also { frameLayout?.addView(it) }
?: LayoutInflater.from(context).inflate(config.layoutId!!, frameLayout, true)
?: LayoutInflater.from(context).inflate(config.layoutId!!, frameLayout, true)
// 为了避免创建的时候闪一下我们先隐藏视图不能直接设置GONE否则定位会出现问题
floatingView.visibility = View.INVISIBLE
// 将frameLayout添加到系统windowManager中
@@ -142,34 +142,34 @@ internal class WarningFloatWindowHelper(
config.statusListenerMapIMoGo.forEach { listener ->
listener.onShow()
}
if (frameLayout == null|| frameLayout?.isAttachedToWindow == false || config.isAnim) return
if (frameLayout == null || frameLayout?.isAttachedToWindow == false || config.isAnim) return
enterAnimator = AnimatorManager(frameLayout!!, params, windowManager, config)
.enterAnim()?.apply {
// 可以延伸到屏幕外,动画结束按需去除该属性,不然旋转屏幕可能置于屏幕外部
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
.enterAnim()?.apply {
// 可以延伸到屏幕外,动画结束按需去除该属性,不然旋转屏幕可能置于屏幕外部
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {}
addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {}
override fun onAnimationEnd(animation: Animator?) {
config.isAnim = false
if (!config.immersionStatusBar) {
// 不需要延伸到屏幕外了,防止屏幕旋转的时候,浮窗处于屏幕外
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
override fun onAnimationEnd(animation: Animator?) {
config.isAnim = false
if (!config.immersionStatusBar) {
// 不需要延伸到屏幕外了,防止屏幕旋转的时候,浮窗处于屏幕外
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
}
}
}
override fun onAnimationCancel(animation: Animator?) {}
override fun onAnimationCancel(animation: Animator?) {}
override fun onAnimationStart(animation: Animator?) {
floatingView.visibility = View.VISIBLE
config.isAnim = true
}
})
start()
}
override fun onAnimationStart(animation: Animator?) {
floatingView.visibility = View.VISIBLE
config.isAnim = true
}
})
start()
}
if (enterAnimator == null) {
floatingView.visibility = View.VISIBLE
windowManager.updateViewLayout(floatingView, params)
@@ -183,16 +183,16 @@ internal class WarningFloatWindowHelper(
config.statusListenerMapIMoGo.forEach { listener ->
listener.onDismiss()
}
if (frameLayout == null|| frameLayout?.isAttachedToWindow == false || (config.isAnim && enterAnimator == null)) return
if (frameLayout == null || frameLayout?.isAttachedToWindow == false || (config.isAnim && enterAnimator == null)) return
enterAnimator?.cancel()
val animator: Animator? =
AnimatorManager(frameLayout!!, params, windowManager, config).exitAnim()
AnimatorManager(frameLayout!!, params, windowManager, config).exitAnim()
if (animator == null) remove() else {
// 二次判断,防止重复调用引发异常
if (config.isAnim) return
config.isAnim = true
params.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
animator.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {}
@@ -214,7 +214,14 @@ internal class WarningFloatWindowHelper(
config.isAnim = false
WarningFloatWindowManager.remove(config.floatTag)
// removeView是异步删除在Activity销毁的时候会导致窗口泄漏所以使用removeViewImmediate直接删除view
windowManager.run { if (force) removeViewImmediate(frameLayout) else removeView(frameLayout) }
windowManager.run {
frameLayout?.removeAllViews()
if (force) {
removeViewImmediate(frameLayout)
} else {
removeView(frameLayout)
}
}
} catch (e: Exception) {
CallerLogger.e("$M_HMI$TAG", "浮窗关闭出现异常:$e")
}
@@ -235,9 +242,9 @@ internal class WarningFloatWindowHelper(
view.getLocationOnScreen(location)
// 通过绝对高度和相对高度比较,判断包含顶部状态栏
val statusBarHeight =
if (location[1] > params.y) WindowUtils.getStatusBarHeight(view.context.applicationContext) else 0
if (location[1] > params.y) WindowUtils.getStatusBarHeight(view.context.applicationContext) else 0
val parentBottom =
WindowUtils.getScreenHeight(view.context.applicationContext) - statusBarHeight
WindowUtils.getScreenHeight(view.context.applicationContext) - statusBarHeight
when (config.gravity) {
// 右上
Gravity.END, Gravity.END or Gravity.TOP, Gravity.RIGHT, Gravity.RIGHT or Gravity.TOP ->

View File

@@ -3,8 +3,8 @@ package com.mogo.eagle.core.function.hmi.notification
import android.view.View
import android.view.WindowManager
import com.mogo.eagle.core.function.hmi.notification.anim.DefaultAnimator
import com.mogo.eagle.core.function.hmi.notification.enums.ShowPattern
import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern
import com.mogo.eagle.core.data.enums.ShowPattern
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatAnimator
import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatCallbacks
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
@@ -16,55 +16,55 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
*/
data class WarningNotificationConfig(
// 浮窗的xml布局文件
var layoutId: Int? = null,
var layoutView: View? = null,
var layoutId: Int? = null,
var layoutView: View? = null,
// 当前浮窗的tag
var floatTag: String? = null,
var floatTag: String? = null,
// 是否正在执行动画
var isAnim: Boolean = false,
var isAnim: Boolean = false,
// 是否显示
var isShow: Boolean = false,
var isShow: Boolean = false,
// 状态栏沉浸
var immersionStatusBar: Boolean = false,
var immersionStatusBar: Boolean = false,
// 浮窗的吸附方式(默认不吸附,拖到哪里是哪里)
var sidePattern: SidePattern = SidePattern.DEFAULT,
var sidePattern: SidePattern = SidePattern.DEFAULT,
// 浮窗显示类型(默认只在当前页显示)
var showPattern: ShowPattern = ShowPattern.CURRENT_ACTIVITY,
var showPattern: ShowPattern = ShowPattern.CURRENT_ACTIVITY,
// 倒计时关闭window-1 表示不自动关闭, 单位毫秒。1s = 1000ms
var countDownTime: Long = 0,
var countDownTime: Long = 0,
// 浮窗的摆放方式使用系统的Gravity属性
var gravity: Int = 0,
var gravity: Int = 0,
// 坐标的偏移量
var offsetPair: Pair<Int, Int> = Pair(0, 0),
var offsetPair: Pair<Int, Int> = Pair(0, 0),
// 固定的初始坐标,左上角坐标
var locationPair: Pair<Int, Int> = Pair(0, 0),
var locationPair: Pair<Int, Int> = Pair(0, 0),
// ps优先使用固定坐标若固定坐标不为原点坐标gravity属性和offset属性无效
// 四周边界值
var leftBorder: Int = 0,
var topBorder: Int = -999,
var rightBorder: Int = 9999,
var bottomBorder: Int = 9999,
var leftBorder: Int = 0,
var topBorder: Int = -999,
var rightBorder: Int = 9999,
var bottomBorder: Int = 9999,
// 出入动画
var floatAnimator: OnFloatAnimator? = DefaultAnimator(),
var floatAnimator: OnFloatAnimator? = DefaultAnimator(),
// 设置视图状态监听showdismiss
var statusListenerMapIMoGo: ArrayList< IMoGoWarningStatusListener> = ArrayList(),
var statusListenerMapIMoGo: ArrayList< IMoGoWarningStatusListener> = ArrayList(),
// Callbacks
var callbacks: OnFloatCallbacks? = null,
var callbacks: OnFloatCallbacks? = null,
// 窗口宽度
var width: Int = WindowManager.LayoutParams.WRAP_CONTENT,
var width: Int = WindowManager.LayoutParams.WRAP_CONTENT,
// 窗口高度
var height: Int = WindowManager.LayoutParams.WRAP_CONTENT
var height: Int = WindowManager.LayoutParams.WRAP_CONTENT
) {
var isEnqueue: Boolean = false
var isOverride: Boolean = true

View File

@@ -5,7 +5,7 @@ import android.animation.ValueAnimator
import android.graphics.Rect
import android.view.View
import android.view.WindowManager
import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.function.hmi.notification.interfaces.OnFloatAnimator
import com.mogo.eagle.core.utilcode.util.WindowUtils
import kotlin.math.min
@@ -32,11 +32,11 @@ open class DefaultAnimator : OnFloatAnimator {
): Animator? = getAnimator(view, params, windowManager, sidePattern, true)
private fun getAnimator(
view: View,
params: WindowManager.LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern,
isExit: Boolean
view: View,
params: WindowManager.LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern,
isExit: Boolean
): Animator {
val triple = initValue(view, params, windowManager, sidePattern)
// 退出动画的起始值、终点值,与入场动画相反

View File

@@ -3,7 +3,7 @@ package com.mogo.eagle.core.function.hmi.notification.interfaces
import android.animation.Animator
import android.view.View
import android.view.WindowManager
import com.mogo.eagle.core.function.hmi.notification.enums.SidePattern
import com.mogo.eagle.core.data.enums.SidePattern
/**
* @author: donghongyu

View File

@@ -15,31 +15,34 @@ import com.mogo.eagle.core.data.autopilot.AdUpgradeStateHelper
import com.mogo.eagle.core.data.camera.CameraEntity
import com.mogo.eagle.core.data.config.HmiBuildConfig
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.eagle.core.data.notice.NoticeNormalData
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener
import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy
import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity
import com.mogo.eagle.core.function.api.hmi.view.IViewNotification
import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
import com.mogo.eagle.core.function.call.check.CallerCheckManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager
import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager
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.notification.enums.SidePattern
import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView
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.setting.DebugSettingView
import com.mogo.eagle.core.function.hmi.ui.tools.AutoPilotAndCheckView
import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView
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.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.Utils
@@ -56,8 +59,10 @@ import java.util.*
*/
@Route(path = MoGoFragmentPaths.PATH_FRAGMENT_HMI)
class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>(),
IMoGoWaringProvider,
MoGoWarningContract.View, IMoGoAutopilotIdentifyListener {
IMoGoWaringProvider,
IMoGoHmiViewProxy,
MoGoWarningContract.View,
IMoGoAutopilotIdentifyListener {
private val TAG = "MoGoHmiFragment"
// DebugSettingView
@@ -83,8 +88,12 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
private var upgradeTipsView: (() -> View)? = null
// HMI 视图控件代理
// 红绿灯View代理
private var mViewTrafficLightVr: IViewTrafficLight? = null
// 红绿灯 View代理
private var mViewTrafficLight: IViewTrafficLight? = null
// 限速 View代理
private var mViewLimitingVelocity: IViewLimitingVelocity? = null
// V2X预警弹窗 View 代理
private var mViewNotification: IViewNotification? = null
override fun vipIdentification(visible: Boolean) {
@@ -132,7 +141,10 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
activity?.let { CarcorderPreviewView.show(it) }
}, 1000)*/
// 首次初始化使用默认视图
setProxyTrafficLightView(viewTrafficLightVr)
setProxyLimitingSpeedView(viewLimitingVelocity)
setProxyNotificationView(V2XNotificationView(view.context))
}
@OptIn(ExperimentalCoroutinesApi::class)
@@ -180,8 +192,16 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
}
override fun setProxyNotificationView(view: IViewNotification) {
mViewNotification = view
}
override fun setProxyTrafficLightView(view: IViewTrafficLight) {
mViewTrafficLightVr = view
mViewTrafficLight = view
}
override fun setProxyLimitingSpeedView(view: IViewLimitingVelocity) {
mViewLimitingVelocity = view
}
private fun showToolsFloat() {
@@ -279,23 +299,24 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
setToolsViewVisibility(View.GONE)
}
// 控制 BadCase 按钮展示
if (HmiBuildConfig.isShowBadCaseView) {
CallerDevaToolsManager.initBadCase(vsBadCaseToolsView)
}
// 控制 限速UI 展示
if (HmiBuildConfig.isShowLimitingVelocityView) {
showLimitingVelocity(View.VISIBLE)
} else {
showLimitingVelocity(View.GONE)
}
// 控制 红绿灯 展示
if (HmiBuildConfig.isShowTrafficLightView) {
setTrafficLightVrVisibility(View.VISIBLE)
} else {
setTrafficLightVrVisibility(View.GONE)
}
// 控制 远程摄像头图标 展示
if (HmiBuildConfig.isShowCameraView) {
setCameraViewVisibility(View.VISIBLE)
} else {
setCameraViewVisibility(View.GONE)
}
}
override fun getLayoutId(): Int {
@@ -315,7 +336,7 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
}
override fun setTrafficLightVrVisibility(visibility: Int) {
mViewTrafficLightVr?.visibility = visibility
mViewTrafficLight?.visibility = visibility
}
override fun setAutopilotStatusViewVisibility(visibility: Int) {
@@ -330,6 +351,10 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
ivToolsIcon?.visibility = visibility
}
override fun setCameraViewVisibility(visibility: Int) {
ivCameraIcon?.visibility = visibility
}
/**
* 开关DebugView
*/
@@ -399,63 +424,65 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
val floatWindow = mWarningFloat
val showTag = floatWindow?.config?.floatTag
if (floatWindow == null || TextUtils.isEmpty(showTag) || !floatWindow.isShow() || floatWindow.config.floatTag != tag) {
val notificationView = V2XNotificationView(it)
notificationView.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType.toString()))
val warningContent = alertContent
?: EventTypeEnum.getWarningContent(v2xType.toString())
if (warningContent.isEmpty()) {
CallerLogger.e("$M_HMI$TAG", "Show warningContent is null or empty!")
return@launchWhenResumed
} else {
notificationView.setWarningContent(warningContent)
}
if (floatWindow != null && floatWindow.isShow()) {
WarningFloat.dismiss(floatWindow.config.floatTag, true)
}
mWarningFloat = WarningFloat.with(it)
.setTag(tag)
.setLayout(notificationView)
.setSidePattern(SidePattern.RESULT_TOP)
.setCountDownTime(expireTime)
.setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110)
.setImmersionStatusBar(true)
.isEnqueue(true)
.addWarningStatusListener(listenerIMoGo)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
CallerLogger.d(
"$M_HMI$TAG",
"mWarningFloat = $mWarningFloat---ttsContent = $ttsContent"
)
if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) {
CallerLogger.d("$M_HMI$TAG", "---> ttsContent = $ttsContent")
AIAssist.getInstance(activity)
.speakTTSVoice(ttsContent)
}
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: WindowManager.LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)?.apply {
interpolator = OvershootInterpolator()
}
// 代理View初始化了才可以弹窗
mViewNotification?.let { notificationView->
notificationView.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType.toString()))
val warningContent = alertContent
?: EventTypeEnum.getWarningContent(v2xType.toString())
if (warningContent.isEmpty()) {
CallerLogger.e("$M_HMI$TAG", "Show warningContent is null or empty!")
return@launchWhenResumed
} else {
notificationView.setWarningContent(warningContent)
}
if (floatWindow != null && floatWindow.isShow()) {
WarningFloat.dismiss(floatWindow.config.floatTag, true)
}
mWarningFloat = WarningFloat.with(it)
.setTag(tag)
.setLayout(notificationView)
.setSidePattern(notificationView.sidePattern)
.setCountDownTime(expireTime)
.setGravity(notificationView.layoutGravity, offsetX = notificationView.offsetX, offsetY = notificationView.offsetY)
.setImmersionStatusBar(true)
.isEnqueue(true)
.addWarningStatusListener(listenerIMoGo)
.addWarningStatusListener(object : IMoGoWarningStatusListener {
override fun onShow() {
// 创建弹窗成功才进行TTS播报
CallerLogger.d(
"$M_HMI$TAG",
"mWarningFloat = $mWarningFloat---ttsContent = $ttsContent"
)
if (mWarningFloat != null && !TextUtils.isEmpty(ttsContent) && playTts) {
CallerLogger.d("$M_HMI$TAG", "---> ttsContent = $ttsContent")
AIAssist.getInstance(activity)
.speakTTSVoice(ttsContent)
}
}
})
.setAnimator(object : DefaultAnimator() {
override fun enterAnim(
view: View,
params: WindowManager.LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.enterAnim(view, params, windowManager, sidePattern)?.apply {
interpolator = OvershootInterpolator()
}
override fun exitAnim(
view: View,
params: WindowManager.LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
override fun exitAnim(
view: View,
params: WindowManager.LayoutParams,
windowManager: WindowManager,
sidePattern: SidePattern
): Animator? =
super.exitAnim(view, params, windowManager, sidePattern)
?.setDuration(200)
})
.show()
}
} else {
val notification = floatWindow.config.layoutView as? V2XNotificationView
if (alertContent?.isNotEmpty() == true) {
@@ -483,30 +510,30 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
* @param checkLightId 0-都是默认不亮起1-红2-黄3-绿
*/
override fun showWarningTrafficLight(checkLightId: Int) {
mViewTrafficLightVr?.showWarningTrafficLight(checkLightId)
mViewTrafficLight?.showWarningTrafficLight(checkLightId)
}
override fun isWarningTrafficLightShow(): Boolean {
return mViewTrafficLightVr?.visibility == View.VISIBLE
return mViewTrafficLight?.visibility == View.VISIBLE
}
/**
* 关闭红绿灯预警展示,并重制灯态
*/
override fun disableWarningTrafficLight() {
mViewTrafficLightVr?.disableWarningTrafficLight()
mViewTrafficLight?.disableWarningTrafficLight()
}
override fun changeCountdownRed(redNum: Int) {
mViewTrafficLightVr?.changeCountdownRed(redNum)
mViewTrafficLight?.changeCountdownRed(redNum)
}
override fun changeCountdownYellow(yellowNum: Int) {
mViewTrafficLightVr?.changeCountdownYellow(yellowNum)
mViewTrafficLight?.changeCountdownYellow(yellowNum)
}
override fun changeCountdownGreen(greenNum: Int) {
mViewTrafficLightVr?.changeCountdownGreen(greenNum)
mViewTrafficLight?.changeCountdownGreen(greenNum)
}
/**
@@ -515,19 +542,24 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
* @param greenNum 绿灯倒计时
*/
override fun changeCountdownTrafficLightNum(readNum: Int, yellowNum: Int, greenNum: Int) {
mViewTrafficLightVr?.changeCountdownTrafficLightNum(readNum, yellowNum, greenNum)
mViewTrafficLight?.changeCountdownTrafficLightNum(readNum, yellowNum, greenNum)
}
/**
* 控制展示限速标志及内容
*/
override fun showLimitingVelocity(limitingSpeed: Int) {
if (limitingSpeed > 0) {
tvLimitingVelocity?.visibility = View.VISIBLE
tvLimitingVelocity?.text = "$limitingSpeed"
// 控制 限速UI 展示
if (HmiBuildConfig.isShowLimitingVelocityView) {
if (limitingSpeed > 0) {
mViewLimitingVelocity?.visibility = View.VISIBLE
mViewLimitingVelocity?.updateLimitingSpeed(limitingSpeed)
} else {
mViewLimitingVelocity?.visibility = View.INVISIBLE
mViewLimitingVelocity?.updateLimitingSpeed(0)
}
} else {
tvLimitingVelocity?.visibility = View.INVISIBLE
tvLimitingVelocity?.text = "0"
disableLimitingVelocity()
}
}
@@ -535,8 +567,8 @@ class MoGoHmiFragment : MvpFragment<MoGoWarningContract.View?, WaringPresenter?>
* 控制关闭限速标志及内容
*/
override fun disableLimitingVelocity() {
tvLimitingVelocity?.visibility = View.GONE
tvLimitingVelocity?.text = "0"
mViewLimitingVelocity?.visibility = View.GONE
mViewLimitingVelocity?.updateLimitingSpeed(0)
}
/**

View File

@@ -15,7 +15,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.hmi.R
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.notification.enums.SidePattern
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.usbcamera.UVCCameraHelper
import com.serenegiant.usb.ParentPreviewConstraintLayout
import com.serenegiant.usb.widget.CameraViewInterface

View File

@@ -27,6 +27,7 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.call.map.CallerHDMapManager
import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.map.CallerSmpManager
import com.mogo.eagle.core.function.call.obu.CallerOBUManager
import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager
@@ -89,7 +90,7 @@ class DebugSettingView @JvmOverloads constructor(
private var mRouteInfoSize = 0
private val mapUiController by lazy {
MogoApisHandler.getInstance().apis?.mapServiceApi?.mapUIController
CallerMapUIServiceManager.getMapUIController()
}
private var lastVisualAngleMode: VisualAngleMode? = null

View File

@@ -0,0 +1,27 @@
package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_limiting_speed_vr.view.*
/**
* 限速控件
*/
class LimitingVelocityView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : IViewLimitingVelocity(context, attrs, defStyleAttr) {
init {
LayoutInflater.from(context).inflate(R.layout.view_limiting_speed_vr, this, true)
}
override fun updateLimitingSpeed(limitingSpeed: Int) {
super.updateLimitingSpeed(limitingSpeed)
tvLimitingVelocity.text = "$limitingSpeed"
}
}

View File

@@ -7,6 +7,8 @@ import android.view.View
import android.widget.FrameLayout
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.function.hmi.R
import com.mogo.map.MogoMapUIController
import com.mogo.map.MogoMarkerManager
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.module.common.MogoApisHandler
import com.mogo.module.common.constants.DataTypes
@@ -31,19 +33,16 @@ class PerspectiveSwitchView @JvmOverloads constructor(
override fun onClick(v: View?) {
//切换地图的远近视图
if (MogoApisHandler.getInstance().apis.mapServiceApi.mapUIController.currentMapVisualAngle.isLongSight) {
MogoApisHandler.getInstance().apis.mapServiceApi.getMarkerManager(AbsMogoApplication.getApp())
if (MogoMapUIController.getInstance().currentMapVisualAngle.isLongSight) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp())
.visibleAllMarkers()
MogoApisHandler.getInstance().apis.mapServiceApi
.mapUIController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null)
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null)
textSwitch.setText(R.string.module_map_model_normal)
} else if (MogoApisHandler.getInstance().apis.mapServiceApi.mapUIController.currentMapVisualAngle.isMediumSight) {
MogoApisHandler.getInstance().apis.mapServiceApi.getMarkerManager(AbsMogoApplication.getApp())
} else if (MogoMapUIController.getInstance().currentMapVisualAngle.isMediumSight) {
MogoMarkerManager.getInstance(AbsMogoApplication.getApp())
.inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS)
MogoApisHandler.getInstance().apis.mapServiceApi
.mapUIController.changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null)
MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null)
textSwitch.setText(R.string.module_map_model_faster)
}
}
}

View File

@@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.MogoMapUIController
import com.mogo.map.navi.IMogoCarLocationChangedListener2
import com.mogo.service.IMogoServiceApis
import java.util.*
@@ -63,18 +64,13 @@ class SpeedPanelView @JvmOverloads constructor(
private val timerTask = object : TimerTask() {
override fun run() {
if (mLatLng != null) {
if (mMogoServiceApis.mapServiceApi != null && mMogoServiceApis.mapServiceApi.mapUIController != null) {
mSpeedLimmit = mMogoServiceApis.mapServiceApi.mapUIController.getSpeedLimmit(
mLatLng!!.longitude,
mLatLng!!.latitude,
mLatLng!!.bearing
)
UiThreadHandler.post {
val speed = (mLatLng!!.speed * 3.6f).toInt()
mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6"))
mSpeedChartView.setValues(speed)
setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor)
}
mSpeedLimmit = MogoMapUIController.getInstance()
.getSpeedLimmit(mLatLng!!.longitude, mLatLng!!.latitude, mLatLng!!.bearing)
UiThreadHandler.post {
val speed = (mLatLng!!.speed * 3.6f).toInt()
mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6"))
mSpeedChartView.setValues(speed)
setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor)
}
}
}

View File

@@ -3,49 +3,58 @@ package com.mogo.eagle.core.function.hmi.ui.widget
import android.content.Context
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import androidx.annotation.DrawableRes
import androidx.annotation.Nullable
import androidx.annotation.StringRes
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.enums.SidePattern
import com.mogo.eagle.core.function.api.hmi.view.IViewNotification
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.notification_v2x_msg_vr.view.*
/**
* 默认预警弹窗实现
*@author xiaoyuzhou
*@date 2021/8/6 12:25 下午
*/
class V2XNotificationView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : IViewNotification(context, attrs, defStyleAttr) {
init {
LayoutInflater.from(context).inflate(R.layout.notification_v2x_msg_vr, this, true)
// 设置View的出场位置
sidePattern = SidePattern.RESULT_TOP
layoutGravity = Gravity.CENTER_HORIZONTAL
// 设置View的停留位置
offsetX = 0
offsetY = 110
}
fun setWarningIcon(@DrawableRes warningIcon: Int) {
override fun setWarningIcon(@DrawableRes warningIcon: Int) {
UiThreadHandler.post {
ivWaringIcon.setImageResource(warningIcon)
}
}
fun setWarningIcon(@Nullable drawable: Drawable) {
override fun setWarningIcon(@Nullable drawable: Drawable) {
UiThreadHandler.post {
ivWaringIcon.setImageDrawable(drawable)
}
}
fun setWarningContent(@Nullable warningContent: CharSequence) {
override fun setWarningContent(@Nullable warningContent: CharSequence) {
UiThreadHandler.post {
tvWaringContent.text = warningContent
}
}
fun setWarningContent(@StringRes warningContentId: Int) {
override fun setWarningContent(@StringRes warningContentId: Int) {
UiThreadHandler.post {
tvWaringContent.setText(warningContentId)
}

View File

@@ -63,7 +63,7 @@
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="gone" />
tools:visibility="visible" />
<!-- <com.mogo.eagle.core.function.hmi.ui.widget.SpeedLimitStatusView-->
@@ -135,8 +135,8 @@
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<TextView
android:id="@+id/tvLimitingVelocity"
<com.mogo.eagle.core.function.hmi.ui.widget.LimitingVelocityView
android:id="@+id/viewLimitingVelocity"
android:layout_width="130px"
android:layout_height="130px"
android:layout_marginTop="30px"

View File

@@ -148,7 +148,7 @@
android:background="@color/color_FF2966EC"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/llSpeedPosition"
android:visibility="gone"/>
android:visibility="visible"/>
<TextView
android:id="@+id/tvSystemOperation"
@@ -162,7 +162,7 @@
android:textSize="42px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/llSpeedPosition"
android:visibility="gone"/>
android:visibility="visible"/>
<com.mogo.eagle.core.function.hmi.ui.widget.CheckSystemView
android:id="@+id/checkSystemView"
@@ -171,7 +171,7 @@
android:layout_marginTop="40px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSystemOperation"
android:visibility="gone"/>
android:visibility="visible"/>
<View
android:id="@+id/viewSystemVersion"

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvLimitingVelocity"
android:layout_width="130px"
android:layout_height="130px"
android:background="@drawable/bg_waring_limiting_velocity"
android:elevation="@dimen/dp_10"
android:gravity="center"
android:text="60"
android:textColor="#FFFFFF"
android:textSize="@dimen/dp_60"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivCameraIcon"
/>
</LinearLayout>

View File

@@ -70,7 +70,7 @@ dependencies {
api rootProject.ext.dependencies.mogoserviceapi
api rootProject.ext.dependencies.moduleservice
api rootProject.ext.dependencies.mogoservice
api rootProject.ext.dependencies.mapcustom
api rootProject.ext.dependencies.mogomap
api rootProject.ext.dependencies.crashreportupgrade
// api rootProject.ext.dependencies.crashreportbugly
@@ -96,7 +96,7 @@ dependencies {
api project(':services:mogo-service')
api project(':modules:mogo-module-service')
api project(':libraries:map-custom')
api project(':libraries:mogo-map')
api project(':test:crashreport-upgrade')
// api project(':test:crashreport-bugly')
api project(':test:crashreport-apmbyte')

View File

@@ -270,7 +270,6 @@ public class EventDispatchCenter implements
}
}
}
CallerLogger.INSTANCE.i(M_MAIN +TAG, "onMapChanged event cost " + (System.currentTimeMillis() - start) + "ms");
}
@Override

View File

@@ -25,6 +25,7 @@ import com.mogo.commons.mvp.MvpFragment;
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.main.cards.MogoModulesManager;
import com.mogo.eagle.core.function.main.service.MogoMainService;
import com.mogo.eagle.core.function.main.utils.DisplayEffectsHelper;
@@ -34,9 +35,11 @@ import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils;
import com.mogo.eagle.core.utilcode.mogo.toast.ResourcesHelper;
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
import com.mogo.eagle.core.utilcode.util.ProcessUtils;
import com.mogo.map.listener.IMogoHosListenerRegister;
import com.mogo.map.listener.MogoMapListenerHandler;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
@@ -104,14 +107,14 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
// if (CallChatApi.getInstance().getApiProvider() != null) {
// CallChatApi.getInstance().getApiProvider().initVehicleTeamContainer("init", R.id.module_main_id_message_history_fragment_container, this);
// }
//申请悬浮窗权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查是否有悬浮窗权限
if (Settings.canDrawOverlays(this)) {
return;
}
PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG);
}
// //申请悬浮窗权限
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// // 检查是否有悬浮窗权限
// if (Settings.canDrawOverlays(this)) {
// return;
// }
// PermissionsDialogUtils.openAppDetails(this, "显示悬浮窗", REQUEST_CODE_DIALOG);
// }
}
// 隐藏布局
@@ -189,9 +192,10 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
MogoModulesManager.getInstance().init(this);
if (mServiceApis.getMapServiceApi() != null) {
mServiceApis.getMapServiceApi().getHostListenerRegister().registerHostMapListener(EventDispatchCenter.getInstance());
mServiceApis.getMapServiceApi().getHostListenerRegister().registerMarkerClickListener(EventDispatchCenter.getInstance());
IMogoHosListenerRegister listenerRegister = CallerMapUIServiceManager.INSTANCE.getHostListenerRegister();
if (listenerRegister != null) {
listenerRegister.registerHostMapListener(EventDispatchCenter.getInstance());
listenerRegister.registerMarkerClickListener(EventDispatchCenter.getInstance());
}
initAdasControlStatusListener();
@@ -376,8 +380,11 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
@Override
protected void onDestroy() {
super.onDestroy();
mServiceApis.getMapServiceApi().getHostListenerRegister().unregisterMarkerClickListener();
mServiceApis.getMapServiceApi().getHostListenerRegister().unregisterHostMapListener();
IMogoHosListenerRegister listenerRegister = CallerMapUIServiceManager.INSTANCE.getHostListenerRegister();
if (listenerRegister != null) {
listenerRegister.unregisterMarkerClickListener();
listenerRegister.unregisterHostMapListener();
}
mServiceApis.getRegisterCenterApi().unregisterADASControlStatusChangedListener(TAG);
mMogoStatusManager.setMainPageLaunchedStatus(TAG, false);
mMogoStatusManager.setMainPageIsBackgroundStatus(TAG, false);
@@ -386,7 +393,8 @@ public class MainActivity extends MvpActivity<MainView, MainPresenter> implement
mMogoFragmentManager.destroy();
mMogoFragmentManager = null;
}
mServiceApis.getMapServiceApi().getMapUIController().destroy();
IMogoMapUIController mapUIController = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (mapUIController != null) mapUIController.destroy();
AdasConfigApiController.getInstance().release();
mServiceApis.getAdasControllerApi().release();
CallerLogger.INSTANCE.d(M_MAIN + TAG, "destroy.");

View File

@@ -22,11 +22,14 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.api.chat.biz.ChatConsts;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.notice.PushUIConstants;
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils;
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
import com.mogo.eagle.core.utilcode.util.ProcessUtils;
import com.mogo.map.MapApiPath;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
@@ -185,11 +188,11 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
// clientConfig.setUseOriginSocket(true);
clientConfig.setIHttpDnsCurrentLocation(() -> {
MogoLocation mogoLocation =
MogoApisHandler.getInstance()
.getApis().getMapServiceApi()
.getSingletonLocationClient(getApp())
.getLastKnowLocation();
MogoLocation mogoLocation = null;
IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(getApp());
if (locationClient != null) {
mogoLocation = locationClient.getLastKnowLocation();
}
HttpDnsSimpleLocation httpDnsSimpleLocation;
if (mogoLocation != null
&& mogoLocation.getLatitude() != 0
@@ -214,7 +217,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
e.printStackTrace();
httpDnsSimpleLocation = new HttpDnsSimpleLocation("010", 1, 1);
}
CallerLogger.INSTANCE.d(M_MAIN+TAG, "使用缓存GPS信息" + httpDnsSimpleLocation);
CallerLogger.INSTANCE.d(M_MAIN + TAG, "使用缓存GPS信息" + httpDnsSimpleLocation);
}
return httpDnsSimpleLocation;
});
@@ -224,7 +227,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
new IMoGoTokenCallback() {
@Override
public void onTokenGot(String token, String sn) {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "onTokenGot ");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "onTokenGot ");
// 异步初始化NetConfig
asyncInit();
// HttpDns ttl回调 --- socketTTL
@@ -235,7 +238,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
@Override
public void onError(int code, String msg) {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "初始化MogoAiCloudSdk failed ,reason : " + msg + " , 未能开启长链服务和初始化Modules服务");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "初始化MogoAiCloudSdk failed ,reason : " + msg + " , 未能开启长链服务和初始化Modules服务");
}
}
);
@@ -256,33 +259,36 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
if (DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE) {
IMogoServiceApis apis = MogoApisHandler.getInstance().getApis();
apis.getLocationInfoApi().start();
apis.getMapServiceApi().getSingletonLocationClient(getApplicationContext()).addLocationListener(location -> {
apis.getLocationInfoApi().provideLocation(location);
});
IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(getApplicationContext());
if (locationClient != null) {
locationClient.addLocationListener(location -> {
apis.getLocationInfoApi().provideLocation(location);
});
}
}
}
private void startSocketService() {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "startSocketService");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "startSocketService");
IMogoServiceApis apis = MogoApisHandler.getInstance().getApis();
// 关闭长链服务
apis.getSocketManagerApi(getApplicationContext()).destroy();
apis.getSocketManagerApi(this).registerLifecycleListener(10020, new IMogoLifecycleListener() {
@Override
public void onConnectFailure() {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "socket-onConnectFailure");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "socket-onConnectFailure");
DebugConfig.setDownloadSnapshot(false);
}
@Override
public void onConnectSuccess() {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "socket-onConnectSuccess");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "socket-onConnectSuccess");
DebugConfig.setDownloadSnapshot(true);
}
@Override
public void onConnectLost() {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "socket-onConnectLost");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "socket-onConnectLost");
DebugConfig.setDownloadSnapshot(false);
}
});
@@ -297,7 +303,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
}
private void initModules() {
CallerLogger.INSTANCE.d(M_MAIN+TAG, "initModules");
CallerLogger.INSTANCE.d(M_MAIN + TAG, "initModules");
//mogo deva tools
MogoModulePaths.addModule(new MogoModule(MogoServicePaths.PATH_DEVA_TOOLS, "IMoGoDevaToolsProvider"));
// 初始化 bugly 升级
@@ -328,21 +334,10 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
// 推送模块
MogoModulePaths.addModule(new MogoModule(PushUIConstants.PATH, "PUSH_UI"));
/*
* 不同身份加载的特殊模块
*/
switch (FunctionBuildConfig.appIdentityMode) {
// 司机身份专属模块
case 0x00:
// 地图数据收集模块
MogoModulePaths.addModuleFunctionServer(new MogoModule(MogoServicePaths.PATH_MAP_DATA_COLLECT_PROVIDER, "MoGoMapDataCollector"));
break;
case 0x01:
break;
default:
break;
// 司机身份专属模块
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
// 地图数据收集模块
MogoModulePaths.addModuleFunctionServer(new MogoModule(MogoServicePaths.PATH_MAP_DATA_COLLECT_PROVIDER, "MoGoMapDataCollector"));
}
if (!DebugConfig.isLauncher()) {
@@ -350,7 +345,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
.getInstance().initManager(this);
}
CallerLogger.INSTANCE.i(M_MAIN+TAG, "App launch timer cost " + (System.currentTimeMillis() - start) + "ms");
CallerLogger.INSTANCE.i(M_MAIN + TAG, "App launch timer cost " + (System.currentTimeMillis() - start) + "ms");
}
@Override

View File

@@ -6,12 +6,15 @@ import android.os.Message;
import android.os.SystemClock;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.BaseData;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.network.RequestOptions;
import com.mogo.eagle.core.network.SubscribeImpl;
import com.mogo.eagle.core.network.utils.GsonUtil;
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.module.common.MogoApisHandler;
import io.reactivex.schedulers.Schedulers;
@@ -103,7 +106,11 @@ public class DelayCheckUtil implements Handler.Callback {
}
private void startUpload() {
MogoLocation lastLocation = MogoApisHandler.getInstance().getApis().getMapServiceApi().getSingletonLocationClient(context).getLastKnowLocation();
IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(AbsMogoApplication.getApp());
MogoLocation lastLocation = null;
if (locationClient != null) {
lastLocation = locationClient.getLastKnowLocation();
}
if (lastLocation == null) {
handler.sendEmptyMessageDelayed(MSG_START_DELAY_CHECK, DELAY_CHECK_DELAY);
return;

View File

@@ -17,6 +17,7 @@ import com.mogo.eagle.core.function.main.EventDispatchCenter;
import com.mogo.eagle.core.function.main.cards.MogoModulesManager;
import com.mogo.eagle.core.function.main.delaycheck.DelayCheckUtil;
import com.mogo.eagle.core.function.main.monitoring.VehicleMonitoring;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.IMogoLocationListener;
@@ -76,8 +77,8 @@ class MogoMainService extends Service implements IMogoLocationListener {
private void initAndStartLocation() {
CallerLogger.INSTANCE.d(M_MAIN + TAG, "开始定位");
if (mServiceApis != null) {
mLocationClient = mServiceApis.getMapServiceApi().getSingletonLocationClient(AbsMogoApplication.getApp());
mLocationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(AbsMogoApplication.getApp());
if (mLocationClient != null) {
mLocationClient.addLocationListener(this);
mLocationClient.start(2_000L);
}

View File

@@ -68,6 +68,7 @@ dependencies {
implementation rootProject.ext.dependencies.mogomap
implementation rootProject.ext.dependencies.mogomapapi
implementation rootProject.ext.dependencies.moduleservice
} else {
implementation project(':modules:mogo-module-common')
implementation project(':services:mogo-service-api')
@@ -81,6 +82,7 @@ dependencies {
implementation project(":libraries:mogo-map")
implementation project(":libraries:mogo-map-api")
implementation project(':libraries:mogo-adas')
implementation project(':modules:mogo-module-service')
}
}

View File

@@ -1,9 +1,10 @@
package com.mogo.service.impl.map;
package com.mogo.eagle.core.function.impl;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.eagle.core.function.api.map.IMogoMapService;
import com.mogo.map.MogoGeoSearch;
import com.mogo.map.MogoLocationClient;
import com.mogo.map.MogoMap;
@@ -22,7 +23,6 @@ import com.mogo.map.search.poisearch.IMogoPoiSearch;
import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery;
import com.mogo.map.search.traffic.IMogoTrafficSearch;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.service.map.IMogoMapService;
/**
* @author congtaowang

View File

@@ -1,34 +0,0 @@
package com.mogo.eagle.core.function.impl.map
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.function.api.map.location.IMoGoLocationUpdater4AutoPilot
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.module.common.MogoApisHandler
import com.mogo.service.IMogoServiceApis
@Route(path = MogoServicePaths.PATH_MAP_LOCATION_UPDATE_4_AUTO_PILOT)
class MoGoLocationUpdater4AutoPilot: IMoGoLocationUpdater4AutoPilot {
private val TAG = "MoGoLocationUpdater4AutoPilot"
override val functionName = TAG;
private val api: IMogoServiceApis? by lazy {
MogoApisHandler.getInstance().apis
}
override fun updateLocation(location: Any?) {
api?.mapServiceApi?.getSingletonLocationClient(Utils.getApp())?.updateLocation(location);
}
override fun init(context: Context?) {
//DO NOTING
}
override fun onDestroy() {
//DO NOTHING
}
}

View File

@@ -1,16 +1,18 @@
package com.mogo.module.service.marker;
package com.mogo.eagle.core.function.impl.marker;
import android.content.Context;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.eagle.core.function.api.map.marker.IMogoMarkerService;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.drawer.MarkerDrawer;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.service.module.IMogoMarkerService;
import com.mogo.module.service.marker.MapMarkerManager;
/**
* @author congtaowang
@@ -27,7 +29,7 @@ public class MogoMarkerServiceImpl implements IMogoMarkerService {
@Override
public IMogoMarker drawMarker( Object object ) {
if ( object instanceof MarkerShowEntity ) {
return MarkerServiceHandler.getMapMarkerManager().drawMapMarker( ( ( MarkerShowEntity ) object ), MarkerDrawer.MARKER_Z_INDEX_HIGH );
return MapMarkerManager.getInstance().drawMapMarker( ( ( MarkerShowEntity ) object ), MarkerDrawer.MARKER_Z_INDEX_HIGH );
}
return null;
}
@@ -36,4 +38,9 @@ public class MogoMarkerServiceImpl implements IMogoMarkerService {
public void init( Context context ) {
}
@Override
public IMogoMapUIController getMapUIController() {
return MogoMapUIController.getInstance();
}
}

View File

@@ -9,14 +9,17 @@ import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.eagle.core.data.constants.MoGoFragmentPaths;
import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.eagle.core.function.api.map.IMogoMapFrameController;
import com.mogo.eagle.core.function.api.map.hd.IMoGoMapFragmentProvider;
import com.mogo.eagle.core.function.call.base.CallerBase;
import com.mogo.map.IMogoMap;
import com.mogo.map.IMogoUiSettings;
import com.mogo.map.MogoMapView;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.service.map.IMogoMapFrameController;
import com.mogo.service.IMogoServiceApis;
/**
* @author donghongyu
@@ -48,7 +51,7 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
@Override
protected void initViews() {
MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().initDelegate( this );
CallerBase.getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER).initDelegate(this);
}
@Override
@@ -173,7 +176,7 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter >
@Override
public void destroy() {
MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().destroy();
CallerBase.getApiInstance(IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER).destroy();
}
@Override

View File

@@ -4,7 +4,7 @@ import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.service.map.IMogoMapFrameController;
import com.mogo.eagle.core.function.api.map.IMogoMapFrameController;
public
/**

View File

@@ -9,6 +9,7 @@ import android.text.TextUtils;
import com.mogo.cloud.socket.entity.SocketDownData;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.function.monitoring.R;
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
@@ -77,7 +78,7 @@ public class CameraLiveNoticeHelper implements IMogoCloudOnMsgListener {
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon_space, null);
options.icon(bitmap);
mMogoMarker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext)
mMogoMarker = CallerMapUIServiceManager.INSTANCE.getMarkerManager(mContext)
.addMarker(PushDataType.TYPE_PUSH_CAMERA_DATA, options);
if (mMogoMarker != null) {
mMogoMarker.setInfoWindowAdapter(new CameraWindow3DAdapter(AbsMogoApplication.getApp(), options));
@@ -107,7 +108,7 @@ public class CameraLiveNoticeHelper implements IMogoCloudOnMsgListener {
Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.module_camera_normal_traffic, null);
options.icon(bitmap);
mMogoMarker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(mContext)
mMogoMarker = CallerMapUIServiceManager.INSTANCE.getMarkerManager(mContext)
.addMarker(PushDataType.TYPE_PUSH_CAMERA_DATA, options);
if (mMogoMarker != null) {
mMogoMarker.setOwner(PushDataType.TYPE_PUSH_CAMERA_DATA);

View File

@@ -10,6 +10,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.monitoring.net.CameraListServices
import com.mogo.map.MogoLocationClient
import com.mogo.module.common.MogoApisHandler
import com.mogo.module.common.constants.HostConst
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -86,7 +87,7 @@ class CronTaskManager(private var context: Context?) {
* 请求路口一定范围内的设备信息(包含:摄像头、灯)
*/
private fun requestDeviceList() {
MogoApisHandler.getInstance().apis.mapServiceApi.getSingletonLocationClient(context).lastKnowLocation?.let { location ->
MogoLocationClient.getInstance(context).lastKnowLocation?.let { location ->
disposable = netWork.create(CameraListServices::class.java, HostConst.CITY_HOST)
.getDeviceList(location.longitude, location.latitude, 500)
.subscribeOn(Schedulers.io())
@@ -119,7 +120,7 @@ class CronTaskManager(private var context: Context?) {
}
private fun requestCarCameraList() {
MogoApisHandler.getInstance().apis.mapServiceApi.getSingletonLocationClient(context).lastKnowLocation?.let { location ->
MogoLocationClient.getInstance(context).lastKnowLocation?.let { location ->
carDisposable =
netWork.create(CameraListServices::class.java, HostConst.CITY_HOST)
.getCarCameraList(ReqLiveCarBean(location.longitude, location.latitude))

View File

@@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.notice.model.PushBean
import com.mogo.eagle.core.function.notice.utils.HandlerUtils
import com.mogo.eagle.core.function.notice.view.getApis
import com.mogo.eagle.core.function.notice.viewmodel.PushViewModel
import com.mogo.map.MogoLocationClient
import com.mogo.service.statusmanager.IMogoStatusChangedListener
import com.mogo.service.statusmanager.StatusDescriptor
import java.util.*
@@ -48,7 +49,7 @@ class PushRepository(mContext: Context) {
.pushBeanDao()
}
private val locationClient =
getApis(mContext).mapServiceApi.getSingletonLocationClient(appContext)
MogoLocationClient.getInstance(appContext)
private val mHandler = Handler(Looper.getMainLooper())

View File

@@ -12,11 +12,11 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.call.obu.CallerObuListenerManager
import com.mogo.eagle.core.function.obu.mogo.utils.TrafficDataConvertUtils
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.map.MogoMapUIController
import com.mogo.module.common.datacenter.SnapshotLocationDataCenter
import com.mogo.module.common.drawer.TrafficMarkerDrawer
import com.mogo.module.common.enums.EventTypeEnum
import com.mogo.service.IMogoServiceApis
import com.mogo.service.map.IMogoMapService
import com.zhidao.support.obu.MogoObuManager
import com.zhidao.support.obu.OnMogoObuListener
import com.zhidao.support.obu.constants.ObuConstants
@@ -38,7 +38,6 @@ class MogoPrivateObuManager private constructor() {
}
private var mMogoServiceApis: IMogoServiceApis? = null
private var mIMogoMapService: IMogoMapService? = null
private var mContext: Context? = null
private var mObuStatusInfo = CallerObuListenerManager.getObuStatusInfo()
@@ -47,8 +46,6 @@ class MogoPrivateObuManager private constructor() {
mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS)
.navigation(context) as IMogoServiceApis
mContext = context
mIMogoMapService = mMogoServiceApis!!.mapServiceApi
connectObu(context, ipAddress)
MogoObuManager.getInstance().registerListener(mogoObuListener)
}
@@ -179,7 +176,7 @@ class MogoPrivateObuManager private constructor() {
// 使用与渠道配置一样的gps提供者提供的数据,app/productFlavors/fPadLenovo.gradle GPS_PROVIDER 0-Android系统1-工控机2-OBU
if (2 == FunctionBuildConfig.gpsProvider) {
mIMogoMapService?.mapUIController?.syncLocation2Map(data)
MogoMapUIController.getInstance().syncLocation2Map(data)
SnapshotLocationDataCenter.getInstance().syncAdasLocationInfo(data)
}

View File

@@ -21,6 +21,7 @@ import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.v2x.events.alarm.V2XAlarmServer
import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi
import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi.context
@@ -341,7 +342,7 @@ object V2XEventManager : IMoGoMapLocationListener, IMoGoTokenCallback, IV2XCallb
v2xPolyline.points = pointsOdl
//CallerLogger.d("$M_V2X$TAG", "当前地图的缩放比例为:" + zoomLevel);
val zoomLevel: Float = BridgeApi.mapUiController()?.zoomLevel ?: 0.0f
val zoomLevel: Float = CallerMapUIServiceManager.getMapUIController()?.zoomLevel ?: 0.0f
//CallerLogger.d("$M_V2X$TAG", "当前地图的缩放比例为:" + zoomLevel);
if (zoomLevel > 0 && zoomLevel <= 17 && BridgeApi.v2xStatus()?.isRoadEventWindowShow == false) { // 缩放地图
val context: Context = context()

View File

@@ -7,7 +7,6 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths
import com.mogo.eagle.core.function.v2x.events.manager.*
import com.mogo.eagle.core.function.v2x.events.network.V2XRefreshModel
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.map.uicontroller.IMogoMapUIController
import com.mogo.module.common.MogoApisHandler
import com.mogo.service.statusmanager.IMogoStatusManager
import java.lang.ref.WeakReference
@@ -61,18 +60,10 @@ internal object BridgeApi {
fun context(): Context = this.context.get()?.get() ?: Utils.getApp()
fun mapUiController(): IMogoMapUIController? = apis?.mapServiceApi?.mapUIController
fun map() = apis?.mapServiceApi
fun statusManager(): IMogoStatusManager? = apis?.statusManagerApi
fun analytics() = apis?.analyticsApi
fun overlay() = apis?.mapServiceApi?.getOverlayManager(context())
fun marker() = apis?.mapServiceApi?.getMarkerManager(context())
fun v2xMarker() = v2xMarker
fun v2xPolyline() = v2xPolyline
@@ -98,8 +89,4 @@ internal object BridgeApi {
fun intentManager() = apis?.intentManagerApi
fun actionManager() = apis?.actionManagerApi
fun locationClient() = apis?.mapServiceApi?.getSingletonLocationClient(context())
fun markerService() = apis?.markerService
}

View File

@@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths;
import com.mogo.eagle.core.function.v2x.events.consts.V2XConst;
import com.mogo.eagle.core.function.v2x.events.entity.model.DrawLineInfo;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoPersonWarnPolylineManager;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -54,7 +55,7 @@ public class MoGoPersonWarnPolylineManager implements IMoGoPersonWarnPolylineMan
options.add(locations.get(i));
}
// 绘制线的对象
IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay();
IMogoOverlayManager overlay = MogoOverlayManager.getInstance();
if (overlay != null) {
mMogoPolyline = overlay.addPolyline(options);
mMogoPolyline.setTransparency(0.5f);

View File

@@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths;
import com.mogo.eagle.core.function.v2x.events.consts.V2XConst;
import com.mogo.eagle.core.function.v2x.events.entity.model.DrawLineInfo;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoStopPolylineManager;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -53,7 +54,7 @@ public class MoGoStopPolylineManager implements IMoGoStopPolylineManager {
options.add(locations.get(i));
}
// 绘制线的对象
IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay();
IMogoOverlayManager overlay = MogoOverlayManager.getInstance();
if (overlay != null) {
mMogoPolyline = overlay.addPolyline(options);
}

View File

@@ -7,6 +7,7 @@ import android.content.Context;
import android.graphics.Bitmap;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
@@ -21,6 +22,8 @@ import com.mogo.eagle.core.function.v2x.events.marker.V2XMarkerAdapter;
import com.mogo.eagle.core.function.v2x.events.utils.EntityUtilsKt;
import com.mogo.eagle.core.function.v2x.events.utils.MapUtils;
import com.mogo.eagle.core.utilcode.util.ViewUtils;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.marker.IMogoMarkerManager;
@@ -74,7 +77,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager {
}
clearAlarmPOI();
// 锁车
IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController();
IMogoMapUIController mapUiController = MogoMapUIController.getInstance();
if (mapUiController != null) {
mapUiController.recoverLockMode();
}
@@ -231,7 +234,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager {
@Override
public void drawableAlarmPOI(Context context, V2XRoadEventEntity roadEventEntity, IMogoMarkerClickListener clickListener) {
try {
IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController();
IMogoMapUIController mapUiController = MogoMapUIController.getInstance();
if (mapUiController != null) {
mapUiController.changeMapMode(EnumMapUI.NorthUP_2D);
}
@@ -273,7 +276,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager {
mAlarmInfoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl(markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH, clickListener);
} else {
optionsRipple.icon(V2XMarkerAdapter.getV2XRoadEventViewPng(context, roadEventEntity));
IMogoMarkerManager marker = BridgeApi.INSTANCE.marker();
IMogoMarkerManager marker = MogoMarkerManager.getInstance(context);
if (marker != null) {
mAlarmInfoMarker = marker.addMarker(V2X_EVENT_ALARM_POI, optionsRipple);
}
@@ -319,7 +322,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager {
@Override
public void clearALLPOI() {
try {
IMogoMarkerManager markerManager = BridgeApi.INSTANCE.marker();
IMogoMarkerManager markerManager = MogoMarkerManager.getInstance(AbsMogoApplication.getApp());
if (markerManager != null) {
markerManager.removeMarkers();
}

View File

@@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XPolylineManager;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XStatusManager;
import com.mogo.eagle.core.function.v2x.events.manager.V2XStatusManager;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -90,7 +91,7 @@ public class MoGoV2XPolylineManager implements IMoGoV2XPolylineManager {
options.add(V2XStatusManager.getInstance().getTargetMoGoLatLng());
// 绘制线的对象
IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay();
IMogoOverlayManager overlay = MogoOverlayManager.getInstance();
if (overlay != null) {
mMogoPolyline = overlay.addPolyline(options);
}

View File

@@ -11,6 +11,7 @@ import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi;
import com.mogo.eagle.core.function.v2x.events.consts.MoGoV2XServicePaths;
import com.mogo.eagle.core.function.v2x.events.entity.model.DrawLineInfo;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoWarnPolylineManager;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -61,7 +62,7 @@ public class MoGoWarnPolylineManager implements IMoGoWarnPolylineManager {
}
// 绘制线的对象
IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay();
IMogoOverlayManager overlay = MogoOverlayManager.getInstance();
if (overlay != null) {
mMogoPolyline = overlay.addPolyline(options);
}

View File

@@ -5,6 +5,7 @@ import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi;
import com.mogo.eagle.core.function.v2x.events.utils.LocationUtils;
import com.mogo.eagle.core.utilcode.util.ColorUtils;
import com.mogo.map.MogoOverlayManager;
import com.mogo.map.overlay.IMogoOverlayManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.map.overlay.MogoPolylineOptions;
@@ -65,7 +66,7 @@ public class V2XOptimalRouteOverlay {
// 线条粗细,渐变,渐变色值
mPolylineOptions.width(25).useGradient(true).colorValues(mPolylineColors);
// 绘制线
IMogoOverlayManager overlay = BridgeApi.INSTANCE.overlay();
IMogoOverlayManager overlay = MogoOverlayManager.getInstance();
if (overlay != null) {
mMoGoPolyline = overlay.addPolyline(mPolylineOptions);
}

View File

@@ -16,6 +16,7 @@ import com.mogo.eagle.core.function.v2x.events.scenario.scene.warning.V2XFrontWa
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import com.mogo.eagle.core.utilcode.util.Utils;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.map.uicontroller.VisualAngleMode;
import com.mogo.module.common.entity.V2XMessageEntity;
@@ -105,7 +106,7 @@ public class V2XScenarioManager implements IV2XScenarioManager {
* 道路事件触发后,切换到中景
*/
private void sceneChange() {
IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController();
IMogoMapUIController mapUiController = MogoMapUIController.getInstance();
if (mapUiController != null && mapUiController.getCurrentMapVisualAngle() != VisualAngleMode.MODE_MEDIUM_SIGHT) {
mapUiController.changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null);
}

View File

@@ -4,6 +4,7 @@ import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XMarkerManager;
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XPolylineManager;
import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.entity.V2XRoadEventEntity;
@@ -31,7 +32,7 @@ public class V2XRoadEventMarker implements IV2XMarker<V2XRoadEventEntity> {
@Override
public void clearPOI() {
// 锁车就是将地图视图移植中心点,因为行驶中的车和地图要相对的跟随
IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController();
IMogoMapUIController mapUiController = MogoMapUIController.getInstance();
if (mapUiController != null) {
mapUiController.loseLockMode();
}

View File

@@ -8,6 +8,7 @@ import com.mogo.eagle.core.function.v2x.events.entity.net.V2XOptimalRouteDataRes
import com.mogo.eagle.core.function.v2x.events.manager.IMoGoV2XMarkerManager;
import com.mogo.eagle.core.function.v2x.events.observer.V2XOptimalRouteObserver;
import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.uicontroller.IMogoMapUIController;
/**
@@ -41,7 +42,7 @@ public class V2XOptimalRouteVREventMarker implements IV2XMarker<V2XOptimalRouteD
@Override
public void clearPOI() {
// 锁车就是将地图视图移植中心点,因为行驶中的车和地图要相对的跟随
IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController();
IMogoMapUIController mapUiController = MogoMapUIController.getInstance();
if (mapUiController != null) {
mapUiController.loseLockMode();
}

View File

@@ -6,6 +6,7 @@ import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_STOP_
import static com.mogo.module.common.constants.DataTypes.TYPE_MARKER_CLOUD_WARN_DATA;
import com.mogo.cloud.commons.utils.CoordinateUtils;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
@@ -17,6 +18,7 @@ import com.mogo.eagle.core.function.v2x.events.manager.IMoGoWarnPolylineManager;
import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker;
import com.mogo.eagle.core.utilcode.mogo.thread.WorkThreadHandler;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMarkerManager;
import com.mogo.map.marker.IMogoMarkerManager;
import com.mogo.map.overlay.IMogoPolyline;
import com.mogo.module.common.MogoApisHandler;
@@ -92,7 +94,7 @@ public class V2XWarningMarker implements IV2XMarker {
} else {
}
//二轮车和行人的渲染和移动
IMogoMarkerManager marker = BridgeApi.INSTANCE.marker();
IMogoMarkerManager marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp());
if (marker != null) {
marker.removeMarkers(TYPE_MARKER_CLOUD_WARN_DATA);
}
@@ -208,7 +210,7 @@ public class V2XWarningMarker implements IV2XMarker {
stopPolyLineManager.clearLine();
}
IMogoMarkerManager marker = BridgeApi.INSTANCE.marker();
IMogoMarkerManager marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp());
if (marker != null) {
//清除小箭头
marker.removeMarkers(WARNING_ARROWS);
@@ -257,7 +259,7 @@ public class V2XWarningMarker implements IV2XMarker {
private void handleStopLine() {
try {
if (mCloundWarningInfo != null) {
IMogoMarkerManager marker = BridgeApi.INSTANCE.marker();
IMogoMarkerManager marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp());
if (marker != null) {
marker.removeMarkers(TYPE_MARKER_CLOUD_STOP_LINE_DATA);
}
@@ -435,7 +437,7 @@ public class V2XWarningMarker implements IV2XMarker {
@Override
public void clearPOI() {
IMogoMarkerManager marker = BridgeApi.INSTANCE.marker();
IMogoMarkerManager marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp());
if (marker != null) {
marker.removeMarkers(V2X_FRONT_WARNING_MARKER);
}

View File

@@ -2,10 +2,13 @@ package com.mogo.eagle.core.function.v2x.events.utils;
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_V2X;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.map.MogoLatLng;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi;
import com.mogo.eagle.core.utilcode.util.AppUtils;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
@@ -31,14 +34,14 @@ public class LocationUtils {
MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat(),
MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon()
);
IMogoLocationClient locationClient = BridgeApi.INSTANCE.locationClient();
IMogoLocationClient locationClient = CallerMapUIServiceManager.INSTANCE.getSingletonLocationClient(AbsMogoApplication.getApp());
if (locationClient != null) {
MogoLocation location = locationClient.getLastKnowLocation();
if (location != null) {
latLon = new MogoLatLng(location.getLatitude(), location.getLongitude());
}
}
IMogoMapUIController mapUiController = BridgeApi.INSTANCE.mapUiController();
IMogoMapUIController mapUiController = CallerMapUIServiceManager.INSTANCE.getMapUIController();
if (mapUiController != null) {
latLon = mapUiController.getWindowCenterLocation();
}

View File

@@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.v2x.events.utils
import android.content.Context
import android.graphics.Rect
import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.v2x.events.bridge.BridgeApi
import com.mogo.eagle.core.utilcode.util.WindowUtils
import com.mogo.module.common.MogoApisHandler
@@ -45,7 +46,9 @@ class MapUtils {
MogoApisHandler.getInstance().apis.adasControllerApi.lastLon
)
// 调整自适应的地图镜头
BridgeApi.mapUiController()?.showBounds("MapUtils", carLocation, listOf(latLng), mBoundRect, true)
carLocation?.let {
CallerMapUIServiceManager.getMapUIController()?.showBounds("MapUtils", it, listOf(latLng), mBoundRect, true)
}
} catch (e: Exception) {
e.printStackTrace()
}

View File

@@ -26,6 +26,7 @@ import com.mogo.eagle.core.function.v2x.events.voice.V2XVoiceConstants;
import com.mogo.eagle.core.function.v2x.events.voice.V2XVoiceManager;
import com.mogo.eagle.core.utilcode.util.Utils;
import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.map.MogoLocationClient;
import com.mogo.map.location.IMogoLocationClient;
/**
@@ -98,7 +99,7 @@ public class CarZegoLiveVideoView extends RoundLayout {
*/
private void playLiveVideo() {
if (mSurfaceView != null) {
IMogoLocationClient locationClient = BridgeApi.INSTANCE.locationClient();
IMogoLocationClient locationClient = MogoLocationClient.getInstance(getContext());
MogoLocation mogoLocation = null;
if (locationClient != null) {
mogoLocation = locationClient.getLastKnowLocation();

View File

@@ -28,6 +28,7 @@ import com.mogo.eagle.core.function.v2x.events.voice.V2XVoiceManager;
import com.mogo.eagle.core.utilcode.util.Utils;
import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer;
import com.mogo.map.MogoLocationClient;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.module.common.entity.MarkerCarInfo;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
@@ -163,7 +164,7 @@ public class V2XCrossRoadVideoView extends RoundLayout {
}
//重新获取直播流地址
else {
IMogoLocationClient iMogoLocationClient = BridgeApi.INSTANCE.locationClient();
IMogoLocationClient iMogoLocationClient = MogoLocationClient.getInstance(getContext());
if (iMogoLocationClient != null) {
MogoLocation mogoLocation = iMogoLocationClient.getLastKnowLocation();
if (mogoLocation == null) {

View File

@@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.api.vip.IMoGoVipSetListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager
import com.mogo.eagle.core.function.call.vip.CallVipSetListenerManager
import com.mogo.eagle.core.function.v2x.vip.VipCarManager
@@ -97,11 +98,10 @@ class RedLightWarningManager : IMoGoTrafficLightListener, IMoGoVipSetListener,
CallerLogger.d("$M_V2X$TAG", "speed is:$speed")
if (speed <= 2.5f) return// 小于等于9km/h不处理
// 由于到路口100m时回调不准手动计算直线距离
val distance = MogoApisHandler.getInstance().apis.mapServiceApi
.mapUIController.calculateLineDistance(
MogoLatLng(it.latitude, it.longitude),
MogoLatLng(trafficLightResult.lat, trafficLightResult.lon)
)
val distance = CallerMapUIServiceManager.getMapUIController()?.calculateLineDistance(
MogoLatLng(it.latitude, it.longitude),
MogoLatLng(trafficLightResult.lat, trafficLightResult.lon)
) ?: 0f
CallerLogger.d(
"$M_V2X$TAG",
"路口经度为:${trafficLightResult.lon},纬度为:${trafficLightResult.lat};车的经度为:${it.longitude},纬度为:${it.latitude};两点距离为:${distance}"

View File

@@ -5,6 +5,7 @@ import android.location.Location;
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
import com.mogo.eagle.core.function.call.v2x.CallLimitingVelocityListenerManager;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMapUIController;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
@@ -33,8 +34,8 @@ public class SpeedLimitDataManager implements IMogoCarLocationChangedListener2 {
@Override
public void run() {
if (mLocation != null){
if (MogoApisHandler.getInstance().getApis().getMapServiceApi() != null && MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController() != null) {
int speedLimmit = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getSpeedLimmit(mLocation.getLongitude(), mLocation.getLatitude(), mLocation.getBearing());
if (MogoMapUIController.getInstance() != null) {
int speedLimmit = MogoMapUIController.getInstance().getSpeedLimmit(mLocation.getLongitude(), mLocation.getLatitude(), mLocation.getBearing());
UiThreadHandler.post(new Runnable() {
@Override
public void run() {

View File

@@ -10,6 +10,7 @@ import com.mogo.eagle.core.data.trafficlight.TrafficLightDetail
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.data.trafficlight.isInRange
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager
import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightHMIManager
import com.mogo.eagle.core.function.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_LOOP_SEARCH_CROSS_ROAD
@@ -53,8 +54,7 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 {
CallTrafficLightListenerManager.resetTrafficLightData()
}
mLocation?.let { it ->
val tileId = MogoApisHandler.getInstance().apis
.mapServiceApi.mapUIController.getTileId(it.longitude, it.latitude)
val tileId = CallerMapUIServiceManager.getMapUIController()?.getTileId(it.longitude, it.latitude) ?: 0
trafficLightNetWorkModel.requestRoadID(
tileId, it.latitude, it.longitude, it.bearing.toDouble(),
{

View File

@@ -5,6 +5,7 @@ import android.location.Location
import android.os.Handler
import android.os.Looper
import android.os.Message
import androidx.core.content.contentValuesOf
import com.mogo.cloud.commons.utils.CoordinateUtils
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X
import com.mogo.eagle.core.data.trafficlight.*
@@ -13,6 +14,7 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.api.trafficlight.IMoGoTrafficLightListener
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.function.call.trafficlight.CallTrafficLightListenerManager
import com.mogo.eagle.core.function.call.vip.CallVipSetListenerManager
import com.mogo.eagle.core.function.v2x.trafficlight.core.MogoTrafficLightManager
@@ -130,16 +132,24 @@ class VipCarManager : IMogoOnMessageListener<VipMessage>, IMoGoTrafficLightListe
//如果上次结果和本次灯态结果变化比较大则已变灯控制HMI展示弹窗
if (abs(currentResult!!.remain - it.remain) > 5 && currentResult.isGreen()) {
CallerLogger.d("$M_V2X$TAG", "调用showWarningV2X to show")
CallerHmiManager.showWarningV2X(EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType.toInt(), EventTypeEnum.TYPE_VIP_IDENTIFICATION.content, EventTypeEnum.TYPE_VIP_IDENTIFICATION.tts, EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType, object : IMoGoWarningStatusListener {
override fun onShow() {}
override fun onDismiss() {
CallerLogger.d(
"$M_V2X$TAG",
"showWarningV2X vip dismiss , resetConditions"
)
resetConditions()
}
}, true, 5000L)
CallerHmiManager.showWarningV2X(
EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType.toInt(),
EventTypeEnum.TYPE_VIP_IDENTIFICATION.content,
EventTypeEnum.TYPE_VIP_IDENTIFICATION.tts,
EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType,
object : IMoGoWarningStatusListener {
override fun onShow() {}
override fun onDismiss() {
CallerLogger.d(
"$M_V2X$TAG",
"showWarningV2X vip dismiss , resetConditions"
)
resetConditions()
}
},
true,
5000L
)
}
}
@@ -234,12 +244,14 @@ class VipCarManager : IMogoOnMessageListener<VipMessage>, IMoGoTrafficLightListe
}
private fun turnLight(controlTime: Int) {
result?.let {
val bearing =
MogoApisHandler.getInstance().apis.mapServiceApi.getSingletonLocationClient(mContext).lastKnowLocation.bearing.toDouble()
if (result == null || mContext == null) return
val locationClient = CallerMapUIServiceManager.getSingletonLocationClient(mContext!!)
if (locationClient != null) {
var bearing =
locationClient.lastKnowLocation.bearing.toDouble()
CallerLogger.d("$M_V2X$TAG", "turnLight -- bearing : $bearing")
MogoTrafficLightManager.INSTANCE.turnLightToGreen(
it.lightId, it.crossId, bearing, controlTime,
result!!.lightId, result!!.crossId, bearing, controlTime,
{
CallerLogger.d("$M_V2X$TAG", "变灯请求成功")
},

View File

@@ -65,4 +65,10 @@ object HmiBuildConfig {
*/
@JvmField
var isShowTrafficLightView = false
/**
* 是否显示摄像头图标
*/
@JvmField
var isShowCameraView = true
}

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.hmi.notification.enums
package com.mogo.eagle.core.data.enums
/**
* @author: donghongyu

View File

@@ -1,4 +1,4 @@
package com.mogo.eagle.core.function.hmi.notification.enums
package com.mogo.eagle.core.data.enums
/**
* @author: donghongyu

View File

@@ -51,9 +51,11 @@ dependencies {
if (Boolean.valueOf(USE_MAVEN_PACKAGE)) {
implementation rootProject.ext.dependencies.mogo_core_data
compileOnly rootProject.ext.dependencies.adasHigh
compileOnly rootProject.ext.dependencies.mogomapapi
} else {
implementation project(':core:mogo-core-data')
compileOnly project(':libraries:mogo-adas')
compileOnly project(':libraries:mogo-map-api')
}
}

View File

@@ -0,0 +1,30 @@
package com.mogo.eagle.core.function.api.hmi
import com.mogo.eagle.core.function.api.hmi.view.IViewLimitingVelocity
import com.mogo.eagle.core.function.api.hmi.view.IViewNotification
import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight
/**
* 设置HMI中控件代理接口
*/
interface IMoGoHmiViewProxy {
/**
* 设置 V2X预警 代理View
* @param view
*/
fun setProxyNotificationView(view: IViewNotification)
/**
* 设置 红绿灯 代理View
* @param view
*/
fun setProxyTrafficLightView(view: IViewTrafficLight)
/**
* 设置 限速 代理View
* @param view
*/
fun setProxyLimitingSpeedView(view: IViewLimitingVelocity)
}

View File

@@ -0,0 +1,18 @@
package com.mogo.eagle.core.function.api.hmi.view
import android.content.Context
import android.util.AttributeSet
import android.widget.LinearLayout
/**
* 定义限速View具备的接口
*/
abstract class IViewLimitingVelocity(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) :
LinearLayout(context, attrs, defStyleAttr) {
/**
* 更新限速数据
* @param limitingSpeed 限速值单位km/h
*/
open fun updateLimitingSpeed(limitingSpeed: Int) {}
}

View File

@@ -0,0 +1,58 @@
package com.mogo.eagle.core.function.api.hmi.view
import android.content.Context
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.view.Gravity
import android.widget.LinearLayout
import androidx.annotation.DrawableRes
import androidx.annotation.IntDef
import androidx.annotation.Nullable
import androidx.annotation.StringRes
import com.mogo.eagle.core.data.enums.SidePattern
/**
* 定义 通知视图 接口
*/
abstract class IViewNotification(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) :
LinearLayout(context, attrs, defStyleAttr) {
@kotlin.annotation.Retention(AnnotationRetention.SOURCE)
@IntDef(*[
Gravity.LEFT, Gravity.RIGHT,
Gravity.TOP, Gravity.BOTTOM,
Gravity.START, Gravity.END,
Gravity.CENTER_HORIZONTAL, Gravity.CENTER_VERTICAL,
Gravity.FILL_HORIZONTAL, Gravity.FILL_VERTICAL,
])
annotation class GravityFlag
/**
* 视图布局
*/
@GravityFlag
open var layoutGravity: Int = Gravity.CENTER_HORIZONTAL
/**
* 视图动画的出场方式
*/
open var sidePattern: SidePattern = SidePattern.RESULT_TOP
/**
* 距离屏幕左上角 0,0点 X 轴距离单位px
*/
open var offsetX: Int = 0
/**
* 距离屏幕左上角 0,0点 Y 轴距离单位px
*/
open var offsetY: Int = 0
open fun setWarningIcon(@DrawableRes warningIcon: Int) {}
open fun setWarningIcon(@Nullable drawable: Drawable) {}
open fun setWarningContent(@Nullable warningContent: CharSequence) {}
open fun setWarningContent(@StringRes warningContentId: Int) {}
}

View File

@@ -4,13 +4,13 @@ import android.view.View
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.eagle.core.data.notice.NoticeNormalData
import com.mogo.eagle.core.data.notice.NoticeTrafficStylePushData
import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight
import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy
/**
* @author xiaoyuzhou
* @date 2021/8/2 7:36 下午
*/
interface IMoGoWaringProvider {
interface IMoGoWaringProvider : IMoGoHmiViewProxy {
/**
* 隐藏 脉速表
@@ -42,6 +42,8 @@ interface IMoGoWaringProvider {
*/
fun setToolsViewVisibility(visibility: Int)
fun setCameraViewVisibility(visibility: Int)
/**
* 控制转向灯
*/
@@ -213,9 +215,4 @@ interface IMoGoWaringProvider {
fun showBadCaseFloat(tag: String = "BadCaseFloat", floatView: View): () -> Unit
/**
* 设置红绿灯代理View
* @param view
*/
fun setProxyTrafficLightView(view: IViewTrafficLight)
}

View File

@@ -1,4 +1,4 @@
package com.mogo.service.map;
package com.mogo.eagle.core.function.api.map;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.map.IDestroyable;

View File

@@ -1,4 +1,4 @@
package com.mogo.service.map;
package com.mogo.eagle.core.function.api.map;
import android.content.Context;

View File

@@ -1,13 +0,0 @@
package com.mogo.eagle.core.function.api.map.location
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider
/**
* @author renwj
* @date 2021/11/04 16:10 下午
* 此类主要用来同步自动驾驶定位信息给各业务方
*/
interface IMoGoLocationUpdater4AutoPilot : IMoGoFunctionServerProvider {
fun updateLocation(location: Any?)
}

View File

@@ -1,9 +1,10 @@
package com.mogo.service.module;
package com.mogo.eagle.core.function.api.map.marker;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.uicontroller.IMogoMapUIController;
/**
* @author congtaowang
@@ -19,4 +20,6 @@ public interface IMogoMarkerService extends IProvider {
*/
@Nullable
IMogoMarker drawMarker( Object object );
IMogoMapUIController getMapUIController();
}

Some files were not shown because too many files have changed in this diff Show More