diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java index 93e66bad7e..25ef3ead6d 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java @@ -8,6 +8,7 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.Group; import androidx.recyclerview.widget.RecyclerView; import com.mogo.och.bus.passenger.R; @@ -15,6 +16,8 @@ import com.mogo.och.bus.passenger.bean.BusPassengerStation; import java.util.List; +import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_ARRIVING; +import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_LEAVING; import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_STOPPED; /** @@ -25,10 +28,6 @@ public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter mStations; - private static final int LINE_START_STATION_ITEM = 0; - private static final int LINE_END_STATION_ITEM = 1; - private static final int LINE_MIDDLE_STATION_ITEM = 2; -// private String preArrivingStation = ""; public BusPassengerLineStationsAdapter(Context context, List stations){ this.mContext = context; @@ -38,78 +37,57 @@ public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter + android:text="@string/bus_p_no_out"/> \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml index 58ae13004c..2dd36c279b 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml @@ -148,7 +148,7 @@ android:layout_height="match_parent" android:layout_marginTop="@dimen/dp_280" android:paddingBottom="@dimen/dp_30" - android:paddingLeft="@dimen/bus_p_route_info_margin_left" + android:paddingLeft="@dimen/dp_30" android:paddingRight="@dimen/bus_p_route_info_margin_right" android:requiresFadingEdge="vertical" app:layout_constraintLeft_toLeftOf="@+id/bus_p_driver_num_plate_tv" diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml new file mode 100644 index 0000000000..9756db9d25 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_common_item.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_end_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_end_item.xml deleted file mode 100644 index 9d2edfd07f..0000000000 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_end_item.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_middle_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_middle_item.xml deleted file mode 100644 index 9acb37947a..0000000000 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_middle_item.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_start_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_start_item.xml deleted file mode 100644 index 50ed06a589..0000000000 --- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_start_item.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml b/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml index d142ef29fc..0f4dc17854 100644 --- a/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml +++ b/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml @@ -1,7 +1,8 @@ KM/H - 您已收车 + 您已收车 + 暂无班次 到达站: diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java index ba188d3bee..485c68f0ec 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java @@ -14,6 +14,7 @@ public class BusRoutesResult { private int lineType; //线路类型,0:环形 private String description; private int status; + private long taskTime; //线路时间班次 //线路轨迹相关字段 public String csvFileUrl = ""; //轨迹文件下载的cos url,默认“” @@ -44,12 +45,17 @@ public class BusRoutesResult { this.sites = sites; } + public long getTaskTime() { + return taskTime; + } + @Override public String toString() { return "BusRoutesResult{" + "sites=" + sites + ", lineId=" + lineId + ", name='" + name + '\'' + + ", taskTime='" + taskTime + '\'' + ", lineType=" + lineType + ", description='" + description + '\'' + ", status=" + status + diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java index 40ea27c44a..758fd4b0bf 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java @@ -9,6 +9,12 @@ import java.util.List; * @date: 2021/10/22 */ public interface IRefreshBusStationsCallback { - void refreshBusStations(String lineName,List stationList, int currentStation, int nextStation, boolean isArrived); + void updateBusTaskStatus(String lineName,String lintTime, + List stationList, + int arrivingOrArrivedIndex, + boolean isArrived); + void clearBusStationsMarkers(); + + void updateEmptyUi(); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java index 7278755f1a..b256f9f2a4 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -7,6 +7,8 @@ import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.constraintlayout.widget.Group; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.voice.AIAssist; @@ -25,17 +27,17 @@ import com.mogo.och.bus.R; import com.mogo.och.bus.bean.BusStationBean; import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.presenter.BusPresenter; +import com.mogo.och.bus.ui.BusStationCommonItem; import com.mogo.och.bus.ui.BusSwitchLineActivity; import com.mogo.och.bus.view.SlidePanelView; import com.mogo.och.common.module.utils.OCHThreadPoolManager; +import com.mogo.och.common.module.wigets.OCHCommitDialog; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.List; -import mogo.telematics.pad.MessagePad; - /** * 网约车小巴界面 @@ -46,18 +48,17 @@ public class BusFragment extends BaseBusTabFragment implements SlidePanelView.OnSlidePanelMoveToEndListener, View.OnClickListener { private static final String TAG = "BusFragment"; - private TextView mCurrentStationName; - private TextView mNextStationName; - private TextView mCurrentTag; - private TextView mNextTag; private TextView mSwitchLine; //切换路线 private TextView mLineName; - private int mCurrentStation = 0; - -// private View mBus; + private TextView mTaskTime; + private Group groupStationsPanel; + private ConstraintLayout noDataView; private BusStationBean startStation = null; private BusStationBean endStation = null; + private BusStationCommonItem firstStationItem; + private BusStationCommonItem secondStationItem; + private BusStationCommonItem thirdStationItem; @Override public String getTagName() { @@ -67,22 +68,17 @@ public class BusFragment extends BaseBusTabFragment @Override protected void initViews() { super.initViews(); -// mBus = findViewById(R.id.module_och_bus_tag); - mCurrentStationName = findViewById(R.id.module_och_bus_current_station); - mCurrentTag = findViewById(R.id.module_och_bus_current_station_anchor); - mNextStationName = findViewById(R.id.module_och_bus_order_end_station); - mNextTag = findViewById(R.id.module_och_bus_next_station_anchor); + mSwitchLine = findViewById(R.id.switch_line_btn); mSwitchLine.setTag(0); mLineName = findViewById(R.id.module_och_bus_line_name); - //调用测试面板 - mCurrentStationName.setOnLongClickListener(v -> { - debugTestBar(); - showHideTestBar(); - return true; - }); -// } + firstStationItem = findViewById(R.id.bus_panel_first_station); + secondStationItem = findViewById(R.id.bus_panel_second_station); + thirdStationItem = findViewById(R.id.bus_panel_third_station); + mTaskTime = findViewById(R.id.bus_task_time_tv); + groupStationsPanel = findViewById(R.id.group_stations_panel); + noDataView = findViewById(R.id.no_line_data_view); CallerLogger.INSTANCE.d(M_BUS + TAG, "initView: " + CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); // 初始化的时候设置 UI 按钮状态 @@ -122,126 +118,227 @@ public class BusFragment extends BaseBusTabFragment super.onResume(); } - /** - * 根据站点列表信息刷新车站面板,滑块面板 - * - * @param stationList 车站列表信息 - * @param currentStation 当前站点 - * @param nextStation 下个站点 - * @param isArrived 是否都站 - */ - public void refreshBusStations(String lineName,List stationList - , int currentStation, int nextStation, boolean isArrived) { - mCurrentStation = currentStation; + public void hideStationsPanel(){ + groupStationsPanel.setVisibility(View.GONE); + noDataView.setVisibility(View.VISIBLE); + } + + public void showStationsPanel(){ + groupStationsPanel.setVisibility(View.VISIBLE); + noDataView.setVisibility(View.GONE); + } + + public void updateLineEmptyUI(){ + hideStationsPanel(); + } + + public void updateBusTaskStatus(String lineName, String lineTime, + List stationList, + int arrivingOrArrivedIndex, + boolean isArrived){ + if (getActivity() == null) { return; } + getActivity().runOnUiThread(() -> { if (stationList == null) { // 获取小巴数据失败 return; } + showStationsPanel(); + + mLineName.setText(lineName); + mTaskTime.setText(getString(R.string.bus_line_time_tag)+ lineTime); // 渲染小巴路线数据 - renderCurrentStationStatus(lineName,stationList, currentStation, nextStation, isArrived); + updateBusStationStatus(stationList,arrivingOrArrivedIndex,isArrived); }); } - /** - * 重新刷新站点信息 isArrived 是否到站 - */ - private void renderCurrentStationStatus(String lineName,List stationList, int currentStation - , int nextStation, boolean isArrived) { - CallerLogger.INSTANCE.d(M_BUS + "MapMaker ", "currentStation=" + currentStation + ",nextStation=" + nextStation + "isArrived=" + isArrived); - String currentStationName = null; - String nextStationName = null; - - boolean isArriveEndStation = false; - boolean isArriveAtStation = false; - boolean isArriveAtStartStation = false; - - mLineName.setText(lineName); - - // 获取当前站点的名称 - currentStationName = stationList.get(currentStation).getName(); + private void updateBusStationStatus(List stationList, + int arrivingOrArrivedIndex, + boolean isArrived) { startStation = stationList.get(0); endStation = stationList.get(stationList.size() - 1); - // 是否到达起点 - if (currentStation == 0) { - isArriveAtStartStation = true; - mCurrentTag.setText(getResources().getString(R.string.bus_arrive_to_end_start)); + if (arrivingOrArrivedIndex == stationList.size() - 1 && isArrived){ + //切换路线和结束路线按钮切换 + showOrHideSwitchLineBtn(false); - setOrRemoveMapMaker(true, BusConst.BUS_START_MAP_MAKER, startStation.getLat() - , startStation.getLon(),R.raw.star_marker); - setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, endStation.getLat() + showSlidePanle("单程结束"); + + setOrRemoveMapMaker(false, BusConst.BUS_END_MAP_MAKER, endStation.getLat() , endStation.getLon(),R.raw.end_marker); - } else if (currentStation > 0 && currentStation < stationList.size() - 1) {// 是否到达站点 - isArriveAtStation = true; - mCurrentTag.setText(getResources().getString(R.string.bus_arrive_to_current_tag)); - mNextTag.setText(getResources().getString(R.string.bus_arrive_to_next_tag)); + }else if (arrivingOrArrivedIndex == 0 && isArrived){ + + showOrHideSwitchLineBtn(true); + + showSlidePanle("滑动出发"); + + setOrRemoveMapMaker(true, BusConst.BUS_START_MAP_MAKER, + startStation.getLat(), startStation.getLon(),R.raw.star_marker); + setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, + endStation.getLat(), endStation.getLon(),R.raw.end_marker); + }else{ + if (isArrived){ + // 重置滑动按钮文字 + showSlidePanle("滑动出发"); + } + + showOrHideSwitchLineBtn(false); setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() , startStation.getLon(),R.raw.star_marker); setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, endStation.getLat() , endStation.getLon(),R.raw.end_marker); - } else if (currentStation == stationList.size() - 1) {// 是否到达终点 - isArriveEndStation = true; - nextStationName = "--"; - mNextTag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); + } - setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() - , startStation.getLon(),R.raw.star_marker); + if (stationList.size() > 2){ //只有两个站点 + updateMoreThanTwoStationsUI(stationList,arrivingOrArrivedIndex,isArrived); + }else { + updateTwoStationsUI(stationList,arrivingOrArrivedIndex,isArrived); + } - if (isArrived) { - setOrRemoveMapMaker(false, BusConst.BUS_END_MAP_MAKER, endStation.getLat() - , endStation.getLon(),R.raw.end_marker); - } else { - setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, endStation.getLat() - , endStation.getLon(),R.raw.end_marker); + updateBusTestBarInfo(); + } + + /** + * 有两个以上站点的路线 + * @param stationList + * @param arrivingOrArrivedIndex + * @param isArrived + */ + private void updateMoreThanTwoStationsUI(List stationList, + int arrivingOrArrivedIndex, + boolean isArrived) { + secondStationItem.setStationTag(""); + secondStationItem.showOrHideStationArrowBg(true); + thirdStationItem.setStationTag(""); + secondStationItem.setVisibility(View.VISIBLE); + thirdStationItem.showOrHideStationArrowBg(false); + + if (arrivingOrArrivedIndex == 0 || arrivingOrArrivedIndex -1 == 0){ + firstStationItem.setStationTag(getResources().getString(R.string.bus_station_txt_tag_start)); + }else { + firstStationItem.setStationTag(""); + } + + if (arrivingOrArrivedIndex + 1 == stationList.size() - 1 || arrivingOrArrivedIndex == stationList.size() - 1 + || (arrivingOrArrivedIndex == 0 && arrivingOrArrivedIndex + 2 == stationList.size() - 1)){ //确认是否显示 "终" + thirdStationItem.setStationTag(getResources().getString(R.string.bus_station_txt_tag_end)); + }else { + thirdStationItem.setStationTag(""); + } + + //圆点: 0:灰色 过站 1:绿色 到站或者即将到站 2:蓝色:未到站 + if (arrivingOrArrivedIndex == 0 && isArrived){ + firstStationItem.setStationNameColor(getResources().getColor(R.color.bus_line_station_color_selected)); + secondStationItem.setStationNameColor(getResources().getColor(R.color.bus_arrived_station_name_text_color)); + thirdStationItem.setStationNameColor(getResources().getColor(R.color.bus_arrived_station_name_text_color)); + + firstStationItem.setStationName(stationList.get(0).getName()); + secondStationItem.setStationName(stationList.get(1).getName()); + thirdStationItem.setStationName(stationList.get(2).getName()); + + firstStationItem.setStationPointBg(1); + secondStationItem.setStationPointBg(2); + thirdStationItem.setStationPointBg(2); + + firstStationItem.setStationArrowBg(2); + secondStationItem.setStationArrowBg(2); + + }else if (arrivingOrArrivedIndex == stationList.size() - 1){ + firstStationItem.setStationNameColor(getResources().getColor(R.color.bus_station_tag_txt_un_color)); + secondStationItem.setStationNameColor(getResources().getColor(R.color.bus_station_tag_txt_un_color)); + thirdStationItem.setStationNameColor(getResources().getColor(R.color.bus_line_station_color_selected)); + + firstStationItem.setStationName(stationList.get(arrivingOrArrivedIndex -2).getName()); + secondStationItem.setStationName(stationList.get(arrivingOrArrivedIndex -1).getName()); + thirdStationItem.setStationName(stationList.get(arrivingOrArrivedIndex).getName()); + + firstStationItem.setStationPointBg(0); + secondStationItem.setStationPointBg(0); + thirdStationItem.setStationPointBg(1); + + firstStationItem.setStationArrowBg(0); + if (isArrived){ + secondStationItem.setStationArrowBg(0); + }else { + secondStationItem.setStationArrowBg(1); + } + + }else { + firstStationItem.setStationNameColor(getResources().getColor(R.color.bus_station_tag_txt_un_color)); + secondStationItem.setStationNameColor(getResources().getColor(R.color.bus_line_station_color_selected)); + thirdStationItem.setStationNameColor(getResources().getColor(R.color.bus_arrived_station_name_text_color)); + + firstStationItem.setStationName(stationList.get(arrivingOrArrivedIndex -1).getName()); + secondStationItem.setStationName(stationList.get(arrivingOrArrivedIndex).getName()); + thirdStationItem.setStationName(stationList.get(arrivingOrArrivedIndex + 1).getName()); + + firstStationItem.setStationPointBg(0); + secondStationItem.setStationPointBg(1); + thirdStationItem.setStationPointBg(2); + secondStationItem.setStationArrowBg(2); + if (isArrived){ + firstStationItem.setStationArrowBg(0); + }else { + firstStationItem.setStationArrowBg(1); } } - // 获取下一站点名称 - if (nextStation > currentStation && nextStation <= stationList.size() - 1) { - nextStationName = stationList.get(nextStation).getName(); - } + } + + /** + * 只有两个站点的路线 + * @param stationList + * @param arrivingOrArrivedIndex + * @param isArrived + */ + private void updateTwoStationsUI(List stationList, + int arrivingOrArrivedIndex, + boolean isArrived) { + + secondStationItem.setVisibility(View.GONE); + secondStationItem.showOrHideStationArrowBg(false); + + firstStationItem.setStationTag(getResources().getString(R.string.bus_station_txt_tag_start)); + thirdStationItem.setStationTag(getResources().getString(R.string.bus_station_txt_tag_end)); + + firstStationItem.setStationName(stationList.get(0).getName()); + thirdStationItem.setStationName(stationList.get(1).getName()); + + //圆点: 0:灰色 过站 1:绿色 到站或者即将到站 2:蓝色:未到站 + if (arrivingOrArrivedIndex == 0 && isArrived){//到站 + firstStationItem.setStationNameColor(getResources().getColor(R.color.bus_line_station_color_selected)); + thirdStationItem.setStationNameColor(getResources().getColor(R.color.bus_arrived_station_name_text_color)); + firstStationItem.setStationPointBg(1); + firstStationItem.setStationArrowBg(2); + thirdStationItem.setStationPointBg(0); - // 是否到达终点 - if ( nextStation == stationList.size() - 1 || nextStation == -1) { - mNextTag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); }else { - mNextTag.setText(getResources().getString(R.string.bus_arrive_to_next_tag)); - } + firstStationItem.setStationNameColor(getResources().getColor(R.color.bus_station_tag_txt_un_color)); + thirdStationItem.setStationNameColor(getResources().getColor(R.color.bus_line_station_color_selected)); + if (isArrived){ //到终点 + firstStationItem.setStationPointBg(0); + firstStationItem.setStationArrowBg(0); + thirdStationItem.setStationPointBg(1); - if (currentStation == 0 && isArrived){ - showOrHideSwitchLineBtn(true); - }else { - showOrHideSwitchLineBtn(false); + }else { //到终点途中 + firstStationItem.setStationPointBg(0); + firstStationItem.setStationArrowBg(1); + thirdStationItem.setStationPointBg(1); + } } - - // 重置滑动按钮文字 - if (isArriveEndStation) { - showSlidePanle("单程结束"); - } else if (isArriveAtStartStation) { - showSlidePanle("滑动出发"); - } else if (isArriveAtStation) { - showSlidePanle("滑动出发"); - } - - mCurrentStationName.setText(currentStationName); - mNextStationName.setText(nextStationName); - updateBusTestBarInfo(); } private void showOrHideSwitchLineBtn(boolean isShow) { if (isShow){//显示切换路线 -// mSwitchLine.setVisibility(View.VISIBLE); mSwitchLine.setTag(0); mSwitchLine.setText(getResources().getString(R.string.bus_switch_line_btn)); }else {//显示结束路线 -// mSwitchLine.setVisibility(View.GONE); mSwitchLine.setTag(1); mSwitchLine.setText(getResources().getString(R.string.bus_close_line_btn)); } @@ -307,12 +404,10 @@ public class BusFragment extends BaseBusTabFragment if (launch) { // 出车的时候重制站点状态 mPresenter.queryBusRoutes(); -// tvOperationStatus.setText("收车"); tvArrived.setVisibility(View.VISIBLE); showPanel(); } else { AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); -// tvOperationStatus.setText("出车"); tvArrived.setVisibility(View.GONE); hideSlidePanel(); hidPanel(); @@ -410,7 +505,25 @@ public class BusFragment extends BaseBusTabFragment Intent intent = new Intent(getContext(), BusSwitchLineActivity.class); startActivity(intent); }else {//结束路线 - mPresenter.resetCurrentLineStatus(); + OCHCommitDialog.Builder builder = new OCHCommitDialog.Builder(); + OCHCommitDialog closeLineConfirmDialog = builder + .title(getString(R.string.bus_dialog_title)) + .tips(getString(R.string.bus_dialog_tips)) + .confirmStr(getString(R.string.bus_dialog_confirm)) + .cancelStr(getString(R.string.bus_dialog_cancel)) + .build(getContext()); + closeLineConfirmDialog.setClickListener(new OCHCommitDialog.ClickListener() { + @Override + public void confirm() { + mPresenter.resetCurrentLineStatus(); + } + + @Override + public void cancel() { + + } + }); + closeLineConfirmDialog.show(); } } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index f8e5b3bd17..9929bafac1 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -4,6 +4,7 @@ import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_ALIAS_CODE import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_LINK_ADAS; import static com.mogo.eagle.core.data.deva.chain.ChainConstant.CHAIN_LINK_LOG_WEB_SOCKET_AUTOPILOT; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; +import static com.mogo.och.bus.constant.BusConst.STATION_STATUS_ARRIVING; import static com.mogo.och.bus.constant.BusConst.STATION_STATUS_STOPPED; import android.content.Context; @@ -54,6 +55,7 @@ import com.mogo.och.bus.presenter.BusModelLoopManager; import com.mogo.och.bus.util.BusAnalyticsManager; import com.mogo.och.bus.util.BusTrajectoryManager; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; +import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; @@ -403,7 +405,7 @@ public class BusOrderModel { startLon, startLat, location.getLongitude(), location.getLatitude() ); - Logger.i(TAG, "judgeStartStation() distance = " + distance); + CallerLogger.INSTANCE.d(M_BUS + TAG,"judgeStartStation() distance = " + distance); if ( distance > BusConst.ARRIVE_AT_END_STATION_DISTANCE ) { distance = CoordinateUtils.calculateLineDistance(startLon, startLat, @@ -429,20 +431,76 @@ public class BusOrderModel { || data.getResult() == null || data.getResult().getSites() == null || data.getResult().getSites().isEmpty() ) { + //当为空时,显示无绑定路线图 + CallerLogger.INSTANCE.d(M_BUS + TAG, "获取到小巴路线数据:空 " ); + if (refreshBusStationsCallback != null){ + refreshBusStationsCallback.updateEmptyUi(); + } return; } CallerLogger.INSTANCE.d(M_BUS + TAG, "获取到小巴路线数据: " + data ); - renderBusStationsStatus( data.getResult()); + updateBusStatus( data.getResult()); } @Override public void onFail(String failMsg) { // 重复请求小巴路线,直至成功 - queryBusStationDelay(); + //改为任务,为空不再去一直取 +// queryBusStationDelay(); } }); } + /** + * 更新正在运行的任务UI + * @param stations + */ + private void updateBusTaskStatus(List stations) { + + int arrivingOrArrivedStationIndex = 0;//已经到站或者即将到站的索引呢 + + for (int i =0 ; i< stations.size(); i++){ + BusStationBean station = stations.get(i); + + if (i == 0){ // 首发站 显示在最上面 + if (station.getDrivingStatus() == STATION_STATUS_STOPPED + && !station.isLeaving()){ //到达第一站 + arrivingOrArrivedStationIndex = i; + break; + } + }else { + BusStationBean preStation = stations.get(i-1); + if ((station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving()) + || (station.getDrivingStatus() == STATION_STATUS_ARRIVING + && preStation.isLeaving())){ + //到站未离开 | 即将到站 显示在最中间 + arrivingOrArrivedStationIndex = i; + break; + } + } + } + + BusStationBean arrivingOrArrivedStation = stations.get(arrivingOrArrivedStationIndex); + + String lineTime = DateTimeUtil.formatLongToString( + busRoutesResult.getTaskTime(), + DateTimeUtil.TAXI_HH_mm); + + if (arrivingOrArrivedStationIndex == 0 || + arrivingOrArrivedStation.getDrivingStatus() == STATION_STATUS_STOPPED + && !arrivingOrArrivedStation.isLeaving()){ + if (refreshBusStationsCallback != null){ + refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(),lineTime, + stationList,arrivingOrArrivedStationIndex,true); + } + }else { + if (refreshBusStationsCallback != null){ + refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(),lineTime, + stationList,arrivingOrArrivedStationIndex,false); + } + } + } + /** * 重置路线站点状态--结束路线,当前路线恢复到始发站 */ @@ -517,20 +575,21 @@ public class BusOrderModel { clientPkFileName = "sn" ) private void leaveStationSuccess(BusRoutesResult result, boolean isRestart) { - renderBusStationsStatus(result); -// if (slidePannelHideCallback != null) { -// slidePannelHideCallback.hideSlidePanel(); -// } + + updateBusStatus(result); + //开启自动驾驶 2.10.0: 如果自动驾驶状态下开启, 非自动驾驶状态下不开启,需手动点击自动驾驶按钮开启 if (isRestart || CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ startAutopilot(isRestart); } + if (isGoingToNextStation) { // 为了避免恢复自动驾驶时重复的接口请求 return; } isGoingToNextStation = true; + AIAssist.getInstance( mContext ).speakTTSVoice( "欢迎乘坐’蘑菇车联‘无人驾驶小巴车,请您坐好,注意乘车安全,行程即将开始" ); } @@ -546,10 +605,6 @@ public class BusOrderModel { BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex + 1); -// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -// == CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()) { -// ToastUtils.showShort("自动驾驶状态为不可用!"); -// } AutopilotControlParameters parameters = new AutopilotControlParameters(); parameters.isSpeakVoice = !isRestart; parameters.routeID = busRoutesResult.getLineId(); @@ -601,7 +656,7 @@ public class BusOrderModel { public void onSuccess(BaseData o) { CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation success"); if (!isRestart){ - renderArriveBusStation(); + arrivedBusStationSuccess(); } } @@ -617,13 +672,16 @@ public class BusOrderModel { }); } - private void renderArriveBusStation() { + private void arrivedBusStationSuccess() { List site = busRoutesResult.getSites(); if (site != null && site.size() > 0){ backgroundCurrentStationIndex ++; if (refreshBusStationsCallback != null){ - refreshBusStationsCallback.refreshBusStations(busRoutesResult.getName(),stationList, backgroundCurrentStationIndex - , getNextStopStation(),true); + String lineTime = DateTimeUtil.formatLongToString( + busRoutesResult.getTaskTime(), + DateTimeUtil.TAXI_HH_mm); + refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(),lineTime, + stationList, backgroundCurrentStationIndex ,true); } } } @@ -739,7 +797,6 @@ public class BusOrderModel { }else { ToastUtils.showShort("出车收车状态查询:"+failMsg); } -// queryOperationStatus(); } }); } @@ -759,20 +816,21 @@ public class BusOrderModel { /** * 渲染站点信息 * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, - * 车机端展示 离开站为当前站点,前往站为下一站, 下一站到站后在置为当前站 + * 车机端展示 三站: 中间为即将到到达或者刚到达的站 * @param result */ - private void renderBusStationsStatus(BusRoutesResult result) { + private void updateBusStatus(BusRoutesResult result) { if (result == null) return; busRoutesResult = result; List site = result.getSites(); currentLineId = result.getLineId(); stationList.clear(); stationList.addAll( site ); + for ( int i = 0; i < stationList.size(); i++ ) { BusStationBean s = stationList.get( i ); - CallerLogger.INSTANCE.d( M_BUS + "renderBusStationsStatus--", + CallerLogger.INSTANCE.d( M_BUS + "updateBusStationsStatus--", "Index="+ i+" ,name = "+s.getName()+" ,"+s.isLeaving()+","+s.getDrivingStatus()); // 是否正在开往下一站 @@ -790,7 +848,7 @@ public class BusOrderModel { CallerLogger.INSTANCE.d( M_BUS + TAG, "渲染站点信息服务端currentStationIndex="+backgroundCurrentStationIndex - +" isLeaving()="+currentStation.isLeaving()); + +" isLeaving()="+currentStation.isLeaving()); //当前站点是始发站,告诉服务端到达始发站。 如果没有这个节点, 服务器不知道始发站到达状态 // ,订单开始站下在始发站的状态流转有问题 @@ -808,15 +866,13 @@ public class BusOrderModel { CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为true(每次滑动出发)"); } - if (refreshBusStationsCallback != null){ - refreshBusStationsCallback.refreshBusStations(result.getName(),stationList - , backgroundCurrentStationIndex, getNextStopStation(),!currentStation.isLeaving()); - } - if ( currentStation.isLeaving() && slidePannelHideCallback != null) { slidePannelHideCallback.hideSlidePanel(); } + //更新bus路线面板 + updateBusTaskStatus(stationList); + //需放在currentStationIndex赋值之后 BusTrajectoryManager.getInstance().syncTrajectoryInfo(); } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java index 15b161f032..435252fefa 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -123,20 +123,44 @@ public class BusPresenter extends Presenter } } +// @Override +// public void refreshBusStations(String lineName,List stationList +// , int currentStation, int nextStation, boolean isArrived) { +// mStationList.clear(); +// mStationList.addAll(stationList); +// mCurrentStation = currentStation; +//// functionDemoModeChange(); +// CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel =", " mCurrentStation =" + mCurrentStation); +// if (mView != null) { +// runOnUIThread(() -> mView.refreshBusStations(lineName, +// stationList, currentStation, nextStation, isArrived)); +// } +// } + @Override - public void refreshBusStations(String lineName,List stationList - , int currentStation, int nextStation, boolean isArrived) { + public void updateBusTaskStatus(String lineName,String lineTime, + List stationList, + int arrivingOrArrivedIndex, + boolean isArrived) { mStationList.clear(); mStationList.addAll(stationList); - mCurrentStation = currentStation; -// functionDemoModeChange(); + if (arrivingOrArrivedIndex == 0 || isArrived){ + mCurrentStation = arrivingOrArrivedIndex; + }else { + mCurrentStation = arrivingOrArrivedIndex -1; + } CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel =", " mCurrentStation =" + mCurrentStation); if (mView != null) { - runOnUIThread(() -> mView.refreshBusStations(lineName, - stationList, currentStation, nextStation, isArrived)); + runOnUIThread(() -> mView.updateBusTaskStatus(lineName,lineTime, + stationList, arrivingOrArrivedIndex, isArrived)); } } + @Override + public void updateEmptyUi() { + runOnUIThread(() -> mView.updateLineEmptyUI()); + } + @Override public void clearBusStationsMarkers() { runOnUIThread(() -> mView.clearBusStationsMarkers()); diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusStationCommonItem.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusStationCommonItem.kt new file mode 100644 index 0000000000..8ce6f38d16 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusStationCommonItem.kt @@ -0,0 +1,65 @@ +package com.mogo.och.bus.ui + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import com.mogo.och.bus.R +import kotlinx.android.synthetic.main.bus_stations_common_item.view.* + +/** + * @author: wangmingjun + * @date: 2022/9/15 + */ +class BusStationCommonItem @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr){ + + init { + LayoutInflater.from(context).inflate(R.layout.bus_stations_common_item,this,true) + } + + fun setStationName(name: String){ + busStationNameTv.text = name + } + + fun setStationNameColor(color: Int){ + busStationNameTv.setTextColor(color) + } + + fun setStationPointBg(type: Int){ // 0:灰色 过站 1:绿色 到站或者即将到站 2:蓝色:未到站 + when(type){ + 0 -> busCircleIv.setImageResource(R.drawable.icon_point_grey_bus) + 1 -> busCircleIv.setImageResource(R.drawable.icon_point_green_bus) + 2 -> busCircleIv.setImageResource(R.drawable.icon_point_blue_bus) + } + } + + fun setStationArrowBg(type: Int){// 0:灰色 过站 1:绿色 前往下一站 2:蓝色 未到站 + when(type){ + 0 -> busArrowBg.setImageResource(R.drawable.icon_arrow_grey_bus) + 1 -> busArrowBg.setImageResource(R.drawable.icon_arrow_green_bus) + 2 -> busArrowBg.setImageResource(R.drawable.icon_arrow_blue_bus) + } + + } + + fun setStationTag(tag: String){ // 0:起 1:终 + if (tag.isNullOrEmpty()){ + busTagTxt.visibility = GONE + }else{ + busTagTxt.text = tag + busTagTxt.visibility = VISIBLE + } + } + + fun showOrHideStationArrowBg(isShow:Boolean){ + if (isShow){ + busArrowBg.visibility = VISIBLE + }else{ + busArrowBg.visibility = GONE + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_no_line_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_no_line_icon.png new file mode 100755 index 0000000000..fc20dca73c Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_no_line_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_blue_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_blue_bus.png new file mode 100755 index 0000000000..026c36086f Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_blue_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_green_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_green_bus.png new file mode 100755 index 0000000000..06bebc7013 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_green_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_grey_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_grey_bus.png new file mode 100755 index 0000000000..f4f9b2bca2 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_arrow_grey_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_no_bus_line.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_no_bus_line.png new file mode 100755 index 0000000000..fc20dca73c Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_no_bus_line.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_blue_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_blue_bus.png new file mode 100755 index 0000000000..dc4c4f6f0d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_blue_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_green_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_green_bus.png new file mode 100755 index 0000000000..ed3b871338 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_green_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_grey_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_grey_bus.png new file mode 100755 index 0000000000..d43e34bb26 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_point_grey_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_no_line_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_no_line_icon.png new file mode 100755 index 0000000000..fc20dca73c Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_no_line_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_blue_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_blue_bus.png new file mode 100755 index 0000000000..026c36086f Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_blue_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_green_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_green_bus.png new file mode 100755 index 0000000000..06bebc7013 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_green_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_grey_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_grey_bus.png new file mode 100755 index 0000000000..f4f9b2bca2 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_arrow_grey_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_no_bus_line.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_no_bus_line.png new file mode 100755 index 0000000000..fc20dca73c Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_no_bus_line.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_blue_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_blue_bus.png new file mode 100755 index 0000000000..dc4c4f6f0d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_blue_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_green_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_green_bus.png new file mode 100755 index 0000000000..ed3b871338 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_green_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_grey_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_grey_bus.png new file mode 100755 index 0000000000..d43e34bb26 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/icon_point_grey_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_no_line_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_no_line_icon.png new file mode 100755 index 0000000000..fc20dca73c Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_no_line_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_blue_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_blue_bus.png new file mode 100755 index 0000000000..026c36086f Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_blue_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_green_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_green_bus.png new file mode 100755 index 0000000000..06bebc7013 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_green_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_grey_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_grey_bus.png new file mode 100755 index 0000000000..f4f9b2bca2 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_arrow_grey_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_no_bus_line.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_no_bus_line.png new file mode 100755 index 0000000000..fc20dca73c Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_no_bus_line.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_blue_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_blue_bus.png new file mode 100755 index 0000000000..dc4c4f6f0d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_blue_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_green_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_green_bus.png new file mode 100755 index 0000000000..ed3b871338 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_green_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_grey_bus.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_grey_bus.png new file mode 100755 index 0000000000..d43e34bb26 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_point_grey_bus.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bus_task_time_bg.xml b/OCH/mogo-och-bus/src/main/res/drawable/bus_task_time_bg.xml new file mode 100644 index 0000000000..917f3932fe --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bus_task_time_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_no_line_view.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_no_line_view.xml new file mode 100644 index 0000000000..9cbebe5646 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_no_line_view.xml @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_stations_common_item.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_stations_common_item.xml new file mode 100644 index 0000000000..3d60449b26 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_stations_common_item.xml @@ -0,0 +1,54 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml index 57ae0979a5..8609630b9c 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml @@ -12,7 +12,7 @@ - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintRight_toLeftOf="@+id/bus_task_time_tv"/> + + - - - - - - - + - - + - - - - - + android:layout_marginTop="@dimen/dp_18" + android:layout_marginLeft="@dimen/dp_68" + app:layout_constraintRight_toRightOf="@+id/bus_task_time_tv" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintTop_toBottomOf="@+id/bus_panel_second_station"/> + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml index cc1babed1f..dc56f53ed7 100644 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml @@ -86,7 +86,7 @@ 92px 30px - 616px + 618px 754px @@ -138,4 +138,5 @@ 154px 130px 60px + 27px \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml index dee684f3e6..50b5675277 100644 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml @@ -86,7 +86,7 @@ 92px 30px - 616px + 618px 754px @@ -136,4 +136,5 @@ 154px 130px 60px + 27px \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/colors.xml b/OCH/mogo-och-bus/src/main/res/values/colors.xml index 96338fac55..90e66e5a88 100644 --- a/OCH/mogo-och-bus/src/main/res/values/colors.xml +++ b/OCH/mogo-och-bus/src/main/res/values/colors.xml @@ -45,4 +45,8 @@ #FFFFE198 #FFFF9B00 #59FFFFFF + + #8E9DD4 + #2B6EFF + #00FFF8 \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/dimens.xml b/OCH/mogo-och-bus/src/main/res/values/dimens.xml index ce34734e02..83e1b61a23 100644 --- a/OCH/mogo-och-bus/src/main/res/values/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values/dimens.xml @@ -152,4 +152,6 @@ 154px 130px 60px + + 27px \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/strings.xml b/OCH/mogo-och-bus/src/main/res/values/strings.xml index 992ab6c19c..0755243dd0 100644 --- a/OCH/mogo-och-bus/src/main/res/values/strings.xml +++ b/OCH/mogo-och-bus/src/main/res/values/strings.xml @@ -10,8 +10,8 @@ 起点: 终点: 确认 - 切换路线 - 结束路线 + 选择任务 + 结束任务 自动驾驶状态中,不可切换或结束路线 当前行程未完成,不可切换路线 当前车辆无路线\n请联系运营人员绑定 @@ -26,4 +26,14 @@ 下一站: 自动驾驶状态为0不可用 进站 + + + 班次: + + 提示 + 您确认要结束任务吗? + 确认 + 取消 + + 暂无任务 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHCommitDialog.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHCommitDialog.kt new file mode 100644 index 0000000000..1e0fde8d5f --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHCommitDialog.kt @@ -0,0 +1,95 @@ +package com.mogo.och.common.module.wigets + +import android.content.Context +import android.widget.TextView +import androidx.lifecycle.LifecycleObserver +import com.mogo.module.common.dialog.BaseFloatDialog +import com.mogo.och.common.module.R + +/** + * 带有title, tip,confirm,cancel的dialog + */ +class OCHCommitDialog: BaseFloatDialog, LifecycleObserver { + + private var commonConfirm : TextView? = null + private var commonCancel : TextView? = null + private var commonTitle : TextView? = null + private var commonTips : TextView? = null + + private var clickListener: ClickListener? = null + + constructor(builder: Builder,context: Context) : super(context) { + commonTitle?.text = builder.titleStr + commonTips?.text = builder.tipsStr + commonCancel?.text = builder.cancelStr + commonConfirm?.text = builder.confirmStr + } + + init{ + setContentView(R.layout.dialog_bus_commit) + + setCanceledOnTouchOutside(true) + + commonConfirm = findViewById(R.id.common_confirm) + commonCancel = findViewById(R.id.common_cancel) + commonTitle = findViewById(R.id.common_title) + commonTips = findViewById(R.id.common_tips) + + commonConfirm?.setOnClickListener{ + clickListener?.confirm() + dismiss() + } + commonCancel?.setOnClickListener { + clickListener?.cancel() + dismiss() + } + } + + fun setClickListener(clickListener: ClickListener) { + this.clickListener = clickListener + } + + fun showUpgradeDialog(){ + if(isShowing){ + return + } + show() + } + + interface ClickListener{ + fun confirm() + fun cancel() + } + + class Builder{ + var titleStr:String = "" + var tipsStr:String = "" + var confirmStr:String = "" + var cancelStr:String = "" + + fun title(title: String) : Builder{ + this.titleStr = title + return this + } + + fun tips(tips: String) : Builder{ + this.tipsStr = tips + return this + } + + fun confirmStr(commit: String) : Builder{ + this.confirmStr = commit + return this + } + + fun cancelStr(cancel: String) : Builder{ + this.cancelStr = cancel + return this + } + + fun build(context: Context): OCHCommitDialog? { + return OCHCommitDialog(this,context) + } + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHRoundConstraintLayout.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHRoundConstraintLayout.java new file mode 100644 index 0000000000..5280174fd2 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/OCHRoundConstraintLayout.java @@ -0,0 +1,165 @@ +package com.mogo.och.common.module.wigets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; + +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.mogo.och.common.module.R; + + +/** + * author : donghongyu + * e-mail : 1358506549@qq.com + * date : 2020/5/27 2:08 PM + * desc : + * version: 1.0 + */ +public class OCHRoundConstraintLayout extends ConstraintLayout implements GestureDetector.OnGestureListener { + + private float roundLayoutRadius = 14f; + private Path roundPath; + private RectF rectF; + + // 上次滑动的坐标 + private int mLastXIntercept; + private int mLastYIntercept; + + private IScrollListener mScrollListener; + + private GestureDetector mDetector; + + public OCHRoundConstraintLayout(Context context) { + this(context, null); + } + + public OCHRoundConstraintLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundLayout); + roundLayoutRadius = typedArray.getDimensionPixelSize(R.styleable.RoundLayout_roundLayoutRadius, (int) roundLayoutRadius); + typedArray.recycle(); + + init(); + } + + public OCHRoundConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + private void init() { + setWillNotDraw(false);//如果你继承的是ViewGroup,注意此行,否则draw方法是不会回调的; + roundPath = new Path(); + rectF = new RectF(); + mDetector = new GestureDetector(getContext(), this); + } + + private void setRoundPath() { + //添加一个圆角矩形到path中, 如果要实现任意形状的View, 只需要手动添加path就行 + roundPath.reset(); + roundPath.addRoundRect(rectF, roundLayoutRadius, roundLayoutRadius, Path.Direction.CW); + } + + + public void setRoundLayoutRadius(float roundLayoutRadius) { + this.roundLayoutRadius = roundLayoutRadius; + setRoundPath(); + postInvalidate(); + } + + public void setScrollListener(IScrollListener listener) { + mScrollListener = listener; + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + rectF.set(0f, 0f, getMeasuredWidth(), getMeasuredHeight()); + setRoundPath(); + } + + @Override + public void draw(Canvas canvas) { + if (roundLayoutRadius > 0f) { + canvas.clipPath(roundPath); + } + super.draw(canvas); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + boolean intercepted = false; + int x = (int) ev.getX(); + int y = (int) ev.getY(); + switch (ev.getAction()) { + case MotionEvent.ACTION_MOVE: + int deltaX = x - mLastXIntercept; + int deltaY = y - mLastYIntercept; + if (Math.abs(deltaX) > Math.abs(deltaY)) { + intercepted = true; + } + break; + default: + break; + } + mLastXIntercept = x; + mLastYIntercept = y; + return intercepted; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mDetector != null) { + return mDetector.onTouchEvent(event); + } else { + return super.onTouchEvent(event); + } + } + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public void onShowPress(MotionEvent e) { + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + return true; + } + + @Override + public void onLongPress(MotionEvent e) { + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + if (e2 != null) { + float deltaX = e2.getX() - (e1 != null ? e1.getX() : 0f); + float deltaY = e2.getY() - (e1 != null ? e1.getY() : 0f); + if (Math.abs(deltaX) > Math.abs(deltaY)) { + if (mScrollListener != null) { + mScrollListener.onScroll(velocityX < 0); + } + } + } + return true; + } + + public interface IScrollListener { + void onScroll(boolean isNextPage); + } +} diff --git a/OCH/mogo-och-common-module/src/main/res/layout/dialog_bus_commit.xml b/OCH/mogo-och-common-module/src/main/res/layout/dialog_bus_commit.xml new file mode 100644 index 0000000000..9f65ffcb79 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/res/layout/dialog_bus_commit.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/res/values/colors.xml b/OCH/mogo-och-common-module/src/main/res/values/colors.xml new file mode 100644 index 0000000000..3c1365f4de --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #3B4577 + \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/res/values/styles.xml b/OCH/mogo-och-common-module/src/main/res/values/styles.xml new file mode 100644 index 0000000000..d983a865a0 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/res/values/styles.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 06b77b0491..5431beaf87 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -28,7 +28,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; @@ -1312,7 +1311,7 @@ public class TaxiModel { public void updateOrderRouteInfo(List models) { if (null == models || models.size() == 0) return; if (mCurrentOCHOrder == null) return; - Logger.d(M_TAXI + TAG, "--------计算出sumLength开始---------- "); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "--------计算出sumLength开始---------- "); //转换成高德坐标系 if (mRoutePoints.size() > 0){ @@ -1323,12 +1322,12 @@ public class TaxiModel { } public void startDynamicCalculateRouteInfo() { - Logger.d(M_TAXI + TAG, "--------mCurrentOCHOrder---------- " + mCurrentOCHOrder); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "--------mCurrentOCHOrder---------- " + mCurrentOCHOrder); if (mCurrentOCHOrder != null && mRoutePoints.size() == 0) {//根据orderNo去查询 queryOrderRouteList(mCurrentOCHOrder.orderNo); } - Logger.d(M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints.size()); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "--------mRoutePoints.size---------- " + mRoutePoints.size()); if (mRoutePoints.size() > 0){ reportTotalDisAndTime(); @@ -1368,7 +1367,7 @@ public class TaxiModel { } double lastTime = lastSumLength / TaxiConst.TAXI_AVERAGE_SPEED * 3.6; //秒 - Logger.d(M_TAXI + "dynamicCalculateRouteInfo" + CallerLogger.INSTANCE.d(M_TAXI + "dynamicCalculateRouteInfo" , "---lastSumLength: " + lastSumLength + "----lastTime : " + lastTime + " thread = "+ Thread.currentThread().getName()); diff --git a/build.gradle b/build.gradle index 2d52e63827..786ea8b61e 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,7 @@ buildscript { classpath 'com.tencent.bugly:symtabfileuploader:2.2.1' classpath "com.bytedance.android.byteX:base-plugin:0.3.0" classpath "com.mogo.cloud:hook:${HOOK_LOG_VERSION}" + classpath "com.mogo.cloud:bizconfig:${BIZCONFIG_VERSION}" classpath 'com.volcengine:apm_insight_plugin:1.4.1' classpath 'com.mogo.thread.opt:plg:2.2.12' classpath 'com.mogo.cloud:systrace:1.0.1' diff --git a/config.gradle b/config.gradle index 0341f9f4a2..b2b2ca68d5 100644 --- a/config.gradle +++ b/config.gradle @@ -1,22 +1,6 @@ ext { time = "" kotlin_version = "1.4.31" - android = [ - launcherApplicationId : "com.mogo.launcher", - independentApplicationId : "com.mogo.launcher.app", - fLauncherApplicationId : "com.mogo.launcher.f", - bydautoIndependentApplicationId: "com.mogo.launcher.app.bydauto", - fLauncherAmapApiValue : "ace34d685cc04836c03905e4d1536125", - bydautoIndependentApiValue : "b1e1d527b02a493913c50985827c943a", - commonLauncherAmapApiValue : "a36b9f7b086fa3951bb35338a5a06dd3", - commonIndependentAmapApiValue : "1c3fbc5f5e183619ffb1e7bc01e6751f", - compileSdkVersion : 29, - buildToolsVersion : "29.0.2", - minSdkVersion : 21, - targetSdkVersion : 21, - minSdkVersionPadLenovo : 23, - targetSdkVersionPadLenovo : 23, - ] dependencies = [ // androidx androidxappcompat : "androidx.appcompat:appcompat:1.3.1", @@ -134,6 +118,8 @@ ext { //plugin mogochainbase : "com.mogo.cloud:service-chain:${SERVICE_CHAIN_VERSION}", mogochainplugin : "com.mogo.cloud:hook:${HOOK_LOG_VERSION}", + mogoservicebiz : "com.mogo.cloud:service-biz:${SERVICE_BIZ_VERSION}", + mogobizconfig : "com.mogo.cloud:bizconfig:${BIZCONFIG_VERSION}", //========================= 旧版本架构 Maven 版本管理 ========================= // modules @@ -250,6 +236,22 @@ ext { koomnative : "com.kuaishou.koom:koom-native-leak-static:2.2.0", koomxhook : "com.kuaishou.koom:xhook-static:2.2.0" ] + android = [ + launcherApplicationId : "com.mogo.launcher", + independentApplicationId : "com.mogo.launcher.app", + fLauncherApplicationId : "com.mogo.launcher.f", + bydautoIndependentApplicationId: "com.mogo.launcher.app.bydauto", + fLauncherAmapApiValue : "ace34d685cc04836c03905e4d1536125", + bydautoIndependentApiValue : "b1e1d527b02a493913c50985827c943a", + commonLauncherAmapApiValue : "a36b9f7b086fa3951bb35338a5a06dd3", + commonIndependentAmapApiValue : "1c3fbc5f5e183619ffb1e7bc01e6751f", + compileSdkVersion : 29, + buildToolsVersion : "29.0.2", + minSdkVersion : 21, + targetSdkVersion : 21, + minSdkVersionPadLenovo : 23, + targetSdkVersionPadLenovo : 23, + ] } boolean isM1Chip() { diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index ec53f2ee68..5260ae11df 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -570,7 +570,6 @@ class MoGoAutopilotProvider : override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { // 乘客屏才监听 - AppConfigInfo.plateNumber = carConfigResp.plateNumber CallerBindingcarManager.getBindingcarProvider() .getBindingcarInfo(carConfigResp.macAddress, MoGoAiCloudClientConfig.getInstance().sn) invokeNettyConnResult("乘客屏车牌号:${carConfigResp.plateNumber},Mac地址为:${carConfigResp.macAddress}") diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index 27bcb9b9e5..9174f7da53 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -207,6 +207,8 @@ class MoGoAdasListenerImpl : OnAdasListener { autopilotStatusInfo.dockVersion = it.dockVersion AppConfigInfo.dockerVersion = it.dockVersion } + AppConfigInfo.isConnectAutopilot = autopilotStatusInfo.connectStatus + AppConfigInfo.connectStatusDescribe = autopilotStatusInfo.connectStatusDescribe invokeAutoPilotStatus() } } @@ -307,6 +309,9 @@ class MoGoAdasListenerImpl : OnAdasListener { carConfigResp: MessagePad.CarConfigResp? ) { if (HdMapBuildConfig.isMapLoaded && carConfigResp != null) { + AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号 + AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址 + AppConfigInfo.protocolVersionNumber = carConfigResp.protocolVersionValue//工控机协议版本 invokeAutopilotCarConfigData(carConfigResp) } } diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeApiService.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeApiService.java index f6357e630a..b18c08508d 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeApiService.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeApiService.java @@ -11,7 +11,7 @@ import retrofit2.http.Query; /** * @author lixiaopeng - * @description 绑定车辆 + * @description 升级 * @since: 6/20/22 */ public interface UpgradeApiService { @@ -21,7 +21,8 @@ public interface UpgradeApiService { * @return {@link UpgradeAppInfo} */ @Headers("Content-Type:application/json;charset=UTF-8") - @POST("unify/selectResources") - Observable getUpgradeInfo(@Query("resources") String res, @Body RequestBody requestBody); + @POST("/eagleEye-mis/config/versionInfo") +// Observable getUpgradeInfo(@Query("resources") String res, @Body RequestBody requestBody); + Observable getUpgradeInfo(@Body RequestBody requestBody); } diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppNetWorkManager.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppNetWorkManager.java index cefcdcc149..709103a240 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppNetWorkManager.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppNetWorkManager.java @@ -35,7 +35,7 @@ import okhttp3.RequestBody; public class UpgradeAppNetWorkManager { private static volatile UpgradeAppNetWorkManager requestNoticeManager; private final UpgradeApiService mUpgradeApiService; - private static final String TAG = "UpgradeAppNetWorkManager"; + private static final String TAG = "Upgrade"; private UpgradeAppNetWorkManager() { @@ -58,18 +58,16 @@ public class UpgradeAppNetWorkManager { /** * 获取app升级信息 */ - public void getAppUpgradeInfo(Context context, String screenType, String carType) { + public void getAppUpgradeInfo(Context context, String mac, String screenType) { String sn = "X20202203105S688HZ"; -// int versionCode = 2070000; -// String versionName = "2.7.0"; - +// String mac = "48:b0:2d:3a:bc:78"; // String sn = MoGoAiCloudClientConfig.getInstance().getSn(); int versionCode = AppUtils.getAppVersionCode(); - String versionName = AppUtils.getAppVersionName(); - UpgradeAppRequest request = new UpgradeAppRequest(sn, versionCode, versionName, screenType, carType); + //TODO 不能写死 + UpgradeAppRequest request = new UpgradeAppRequest(sn, mac, screenType); RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request)); - mUpgradeApiService.getUpgradeInfo("apps_control", requestBody) + mUpgradeApiService.getUpgradeInfo(requestBody) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -79,18 +77,20 @@ public class UpgradeAppNetWorkManager { @Override public void onNext(@NonNull UpgradeAppInfo info) { - if (info != null && info.getData() != null && info.getData().size() > 0) { - CallerLogger.INSTANCE.d(TAG, "UpgradeAppInfo url = " + info.getData().get(0).getApp_url() + "----code = " + info.getData().get(0).getVersion_code()); -// if (info.getData().get(0).getVersion_code() > versionCode) { - - CallerHmiManager.INSTANCE.showUpgradeDialog(info.getData().get(0).getApp_url().substring(info.getData().get(0).getApp_url().lastIndexOf("/")+1), info.getData().get(0).getApp_url()); -// } + if (info != null && info.result != null) { + CallerLogger.INSTANCE.d(TAG, "UpgradeAppInfo url = " + info.result.getAppUrl() + "----code = " + info.result.getVersionCode()); + Log.d(TAG, "UpgradeAppInfo url = " + info.result.getAppUrl() + "----code = " + info.result.getVersionCode() + "--versionCode =" + versionCode + "--info.result = " + info.result); + if (info.result.getVersionCode() > versionCode) { + CallerHmiManager.INSTANCE.showUpgradeDialog(info.result.getAppUrl().substring(info.result.getAppUrl().lastIndexOf("/")+1), info.result.getAppUrl()); + } + } else { + Log.e(TAG, "onNext info == null"); } } @Override - public void onError(@NonNull Throwable e) { - CallerLogger.INSTANCE.e(TAG, "UpgradeAppInfo onError e = " + e.toString() + "---e.getMessage = " + e.getMessage()); + public void onError(Throwable e) { + } @Override diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppRequest.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppRequest.java index 78e35e9531..ab5c927cc2 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppRequest.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/appupgrade/network/UpgradeAppRequest.java @@ -6,18 +6,15 @@ package com.mogo.eagle.core.function.appupgrade.network; * @since: 11/15/21 */ public class UpgradeAppRequest { + private String mac; private String sn; - private int version_code; - private String version_name; - private String screen_type; - private String car_type; + private String screenType; - public UpgradeAppRequest( String sn, int versionCode, String versionName, String type, String carType) { + + public UpgradeAppRequest( String sn, String mac, String screenType) { this.sn = sn; - this.version_code = versionCode; - this.version_name = versionName; - this.screen_type = type; - this.car_type = carType; + this.mac = mac; + this.screenType = screenType; } public String getSn() { @@ -28,46 +25,20 @@ public class UpgradeAppRequest { this.sn = sn; } - public int getVersion_code() { - return version_code; + public String getMac() { + return mac; } - public void setVersion_code(int version_code) { - this.version_code = version_code; + public void setMac(String mac) { + this.mac = mac; } - public String getVersion_name() { - return version_name; + public String getScreenType() { + return screenType; } - public void setVersion_name(String version_name) { - this.version_name = version_name; + public void setScreenType(String screenType) { + this.screenType = screenType; } - public String getScreen_type() { - return screen_type; - } - - public void setScreen_type(String screen_type) { - this.screen_type = screen_type; - } - - public String getCar_type() { - return car_type; - } - - public void setCar_type(String car_type) { - this.car_type = car_type; - } - - @Override - public String toString() { - return "UpgradeAppRequest{" + - "sn='" + sn + '\'' + - ", version_code=" + version_code + - ", version_name='" + version_name + '\'' + - ", screen_type='" + screen_type + '\'' + - ", car_type='" + car_type + '\'' + - '}'; - } } diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java index 8a5e01ee78..f04f3343c3 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java @@ -116,6 +116,10 @@ public class BindingcarProvider implements IMoGoBindingcarProvider { } } + /** + * 以后可能废弃 + * @return + */ private int getScreenType() { int screenType = -1; if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { @@ -142,12 +146,34 @@ public class BindingcarProvider implements IMoGoBindingcarProvider { } + private String getCarScreenType() { + String screenType = ""; + if(AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + screenType = "1"; //taxi乘客端 + } + + if(AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + screenType = "2"; //taxi司机端 + } + + if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + screenType = "3"; //bus 乘客端 + } + + if(AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + screenType = "4"; //bus 司机端 + } + + return screenType; + } + /** * 查询app是否需要升级 */ @Override public void queryAppUpgrade() { - UpgradeAppNetWorkManager.getInstance().getAppUpgradeInfo(mContext, String.valueOf(getScreenType()), String.valueOf(getCarType())); + Log.d("Upgrade", "mac = " + mAddress + "---type = " + getCarScreenType() ); + UpgradeAppNetWorkManager.getInstance().getAppUpgradeInfo(mContext, mAddress, getCarScreenType()); } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 39cd282e7b..4229be3ef9 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -11,6 +11,8 @@ import com.mogo.eagle.core.data.deva.scene.SceneModule import com.mogo.eagle.core.data.deva.scene.SceneTAG import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager +import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter +import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager import com.zhjt.mogo_core_function_devatools.monitor.MonitorManager import com.zhjt.mogo_core_function_devatools.scene.SceneManager.Companion.sceneManager @@ -30,8 +32,13 @@ class DevaToolsProvider : IDevaToolsProvider { override fun init(context: Context) { mContext = context - traceManager.init(context) - MogoLogCatchManager.init(context) + } + + override fun initBiz() { + bizConfigCenter.init(mContext!!) + FuncConfigImpl.init() + traceManager.init(mContext!!) + MogoLogCatchManager.init(mContext!!) } override fun startLogCatch() { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/RecordHelper.java b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/RecordHelper.java index bea8b5f739..bcd74d8efe 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/RecordHelper.java +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/record/RecordHelper.java @@ -6,7 +6,6 @@ import android.os.Environment; import android.util.Log; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import com.mogo.eagle.core.utilcode.util.FileUtils; import com.zhjt.mogo_core_function_devatools.badcase.record.fft.FftFactory; import com.zhjt.mogo_core_function_devatools.badcase.record.listener.RecordListener; @@ -177,14 +176,14 @@ public class RecordHelper { AudioRecordThread() { bufferSize = AudioRecord.getMinBufferSize(currentConfig.getSampleRate(), currentConfig.getChannelConfig(), currentConfig.getEncodingConfig()) * RECORD_AUDIO_BUFFER_TIMES; - Logger.d(TAG, "record buffer size = %s", bufferSize); + CallerLogger.INSTANCE.d("$M_DEVA$TAG", "record buffer size = %s", bufferSize); audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, currentConfig.getSampleRate(), currentConfig.getChannelConfig(), currentConfig.getEncodingConfig(), bufferSize); if (currentConfig.getFormat() == RecordConfig.RecordFormat.MP3) { if (mp3EncodeThread == null) { initMp3EncoderThread(bufferSize); } else { - Logger.e(TAG, "mp3EncodeThread != null, 请检查代码"); + CallerLogger.INSTANCE.e("$M_DEVA$TAG", "mp3EncodeThread != null, 请检查代码"); } } } @@ -206,7 +205,7 @@ public class RecordHelper { private void startPcmRecorder() { state = RecordState.RECORDING; notifyState(); - Logger.d(TAG, "开始录制 Pcm"); + CallerLogger.INSTANCE.d("$M_DEVA$TAG", "开始录制 Pcm"); FileOutputStream fos = null; try { fos = new FileOutputStream(tmpFile); @@ -224,7 +223,7 @@ public class RecordHelper { if (state == RecordState.STOP) { makeFile(); } else { - Logger.i(TAG, "暂停!"); + CallerLogger.INSTANCE.i("$M_DEVA$TAG", "暂停!"); } } catch (Exception e) { notifyError("录音失败"); @@ -240,7 +239,7 @@ public class RecordHelper { if (state != RecordState.PAUSE) { state = RecordState.IDLE; notifyState(); - Logger.d(TAG, "录音结束"); + CallerLogger.INSTANCE.d("$M_DEVA$TAG", "录音结束"); } } @@ -268,7 +267,7 @@ public class RecordHelper { notifyState(); stopMp3Encoded(); } else { - Logger.d(TAG, "暂停"); + CallerLogger.INSTANCE.d("$M_DEVA$TAG", "暂停"); } } } @@ -283,7 +282,7 @@ public class RecordHelper { } }); } else { - Logger.e(TAG, "mp3EncodeThread is null, 代码业务流程有误,请检查!! "); + CallerLogger.INSTANCE.e("$M_DEVA$TAG", "mp3EncodeThread is null, 代码业务流程有误,请检查!! "); } } @@ -302,7 +301,7 @@ public class RecordHelper { break; } notifyFinish(); - Logger.i(TAG, "录音完成! path: %s ; 大小:%s", resultFile.getAbsoluteFile(), resultFile.length()); + CallerLogger.INSTANCE.i("$M_DEVA$TAG", "录音完成! path: %s ; 大小:%s", resultFile.getAbsoluteFile(), resultFile.length()); } /** @@ -377,7 +376,7 @@ public class RecordHelper { private String getFilePath(String fileName) { if (!FileUtils.createOrExistsDir(ROOT_PATH)) { - Logger.w(TAG, "文件夹创建失败:%s", ROOT_PATH); + CallerLogger.INSTANCE.w("$M_DEVA$TAG", "文件夹创建失败:%s", ROOT_PATH); return null; } @@ -388,7 +387,7 @@ public class RecordHelper { private String getTempFilePath() { if (!FileUtils.createOrExistsDir(TEMP_PATH)) { - Logger.e(TAG, "文件夹创建失败:%s", TEMP_PATH); + CallerLogger.INSTANCE.e("$M_DEVA$TAG", "文件夹创建失败:%s", TEMP_PATH); } String fileName = String.format(Locale.getDefault(), "tmp_%s", FileUtils.getNowString(new SimpleDateFormat("yyyyMMddHHmmssSSS", Locale.SIMPLIFIED_CHINESE))); return String.format(Locale.getDefault(), "%s%s.pcm", TEMP_PATH, fileName); diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt new file mode 100644 index 0000000000..3b7572cea9 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigCenter.kt @@ -0,0 +1,84 @@ +package com.zhjt.mogo_core_function_devatools.funcconfig + +import android.content.Context +import com.mogo.aicloud.services.socket.IMogoOnMessageListener +import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_CLOUD_SHOW +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_LINK_LOG_CONNECT_STATUS +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager +import com.mogo.eagle.core.utilcode.util.GsonUtils +import com.mogo.eagle.core.utilcode.util.SPUtils +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigConst.Companion.FUNC_CONFIG_TYPE +import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigConst.Companion.defaultFuncConfig +import com.zhjt.mogo_core_function_devatools.funcconfig.network.FuncConfigNetWorkModel +import com.zhjt.service.chain.ChainLog +import com.zhjt.service.chain.TracingConstants +import com.zhjt.service_biz.BizManager +import com.zhjt.service_biz.FuncConfig + +class FuncConfigCenter : IMogoOnMessageListener { + + companion object { + val bizConfigCenter by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + FuncConfigCenter() + } + } + + private var mContext: Context? = null + private val funcConfigNetWorkModel = FuncConfigNetWorkModel() + + fun init(context: Context) { + mContext = context + MogoAiCloudSocketManager.getInstance(AbsMogoApplication.getApp().applicationContext) + .registerOnMessageListener(FUNC_CONFIG_TYPE, this) + UiThreadHandler.postDelayed({ + funcConfigNetWorkModel.requestFuncConfig({ + SPUtils.getInstance("biz_config").put("config", GsonUtils.toJson(it)) + refreshConfig(it) + }, { + val bizJson = SPUtils.getInstance("biz_config") + .getString("config", GsonUtils.toJson(defaultFuncConfig())) + refreshConfig(GsonUtils.fromJson(bizJson, FuncConfig::class.java)) + }) + }, 1000L * 5) + + } + + override fun target(): Class { + return FuncConfig::class.java + } + + override fun onMsgReceived(obj: FuncConfig?) { + obj?.let { + refreshConfig(it) + } + } + + @ChainLog( + linkChainLog = CHAIN_LINK_LOG_CONNECT_STATUS, + linkCode = CHAIN_LINK_CLOUD_SHOW, + endpoint = TracingConstants.Endpoint.PAD, + nodeAliasCode = CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED, + paramIndexes = [0], + clientPkFileName = "sn" + ) + private fun refreshConfig(funcConfig: FuncConfig) { + BizManager.updateBizConfigData(funcConfig) + funcConfig.business.forEach { business -> + CallerDevaToolsFuncConfigListenerManager.invokeDevaToolsFuncConfigBizUpdate( + business.biz, + business.data + ) + } + } + + fun onDestroy() { + MogoAiCloudSocketManager.getInstance(AbsMogoApplication.getApp().applicationContext) + .unregisterLifecycleListener(FUNC_CONFIG_TYPE) + mContext = null + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigConst.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigConst.kt new file mode 100644 index 0000000000..b071595ab0 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigConst.kt @@ -0,0 +1,119 @@ +package com.zhjt.mogo_core_function_devatools.funcconfig + +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_AUTOPILOT_LANE_SELECTION +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_AVW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BEAUTY_MODE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BSW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BYPASS +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_CLW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_DNPW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_EBW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_FCW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_FULL_LOG +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_HLW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_IVP +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_IVP_GREEN +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_IVS +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_LCW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_LIMIT_SPEED_SET +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_LTA +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_OPT_LINE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_SLW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_TJW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_TRACE_LOG +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_VIP +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_VRU +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_VRU_RI +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.FOUNDATION +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2N +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2V +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.util.AppUtils +import com.zhjt.mogo_core_function_devatools.BuildConfig +import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager +import com.zhjt.service_biz.Business +import com.zhjt.service_biz.FuncConfig +import com.zhjt.service_biz.SubBiz + +class FuncConfigConst { + + companion object{ + + const val FUNC_CONFIG_TYPE = 500001 + + fun defaultFuncConfig(): FuncConfig { + val businessList = mutableListOf() + + val v2nSubList = mutableListOf() + v2nSubList.add(SubBiz(BIZ_VIP, lock = false, state = true, dependNode = "", data = "")) + v2nSubList.add(SubBiz(BIZ_OPT_LINE, lock = false, state = false, dependNode = "", data = "")) + v2nSubList.add(SubBiz(BIZ_VRU, lock = false, state = true, dependNode = "", data = "")) + v2nSubList.add(SubBiz(BIZ_VRU_RI, lock = false, state = true, dependNode = "", data = "")) + v2nSubList.add(SubBiz(BIZ_HLW, lock = false, state = true, dependNode = "", data = "")) + businessList.add(Business(V2N, v2nSubList)) + + val v2iSubList = mutableListOf() + v2iSubList.add(SubBiz(BIZ_IVP_GREEN, lock = false, state = true, dependNode = "", data = "")) + v2iSubList.add(SubBiz(BIZ_IVP, lock = false, state = true, dependNode = "", data = "")) + v2iSubList.add(SubBiz(BIZ_RTS, lock = false, state = true, dependNode = "", data = "")) + v2iSubList.add(SubBiz(BIZ_SLW, lock = false, state = true, dependNode = "", data = "")) + v2iSubList.add(SubBiz(BIZ_IVS, lock = false, state = true, dependNode = "", data = "")) + v2iSubList.add(SubBiz(BIZ_TJW, lock = false, state = true, dependNode = "", data = "")) + businessList.add(Business(V2I,v2iSubList)) + + val v2vSubList = mutableListOf() + v2vSubList.add(SubBiz(BIZ_AVW, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_LCW, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_BSW, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_EBW, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_FCW, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_LTA, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_CLW, lock = false, state = true, dependNode = "", data = "")) + v2vSubList.add(SubBiz(BIZ_DNPW, lock = false, state = true, dependNode = "", data = "")) + businessList.add(Business(V2V,v2vSubList)) + + val foundationSubList = mutableListOf() + foundationSubList.add(SubBiz(BIZ_BEAUTY_MODE, lock = true, state = false, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_RAIN_MODE, lock = true, state = false, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_FULL_LOG, lock = false, state = false, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_TRACE_LOG, lock = false, state = true, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_BAG_RECORD, lock = true, state = true, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_WARNING_UPLOAD, lock = true, state = true, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_LIMIT_SPEED_SET, lock = false, state = true, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_BYPASS, lock = false, state = true, dependNode = "", data = "")) + foundationSubList.add(SubBiz(BIZ_AUTOPILOT_LANE_SELECTION, lock = false, state = true, dependNode = "", data = "")) + businessList.add(Business(FOUNDATION,foundationSubList)) + + return FuncConfig(0, AppUtils.getAppVersionCode(), getChannelCode(), getEnv(), businessList) + } + + private fun getEnv():Int{ + return if(EnvChangeManager.getEnvConfig()!= null){ + EnvChangeManager.getEnvConfig()!!.netMode + }else { + 0 + } + } + + // todo 新增车型需要更新(清扫车) + fun getChannelCode(): Int{ + return when{ + AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> 1 + AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) + && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> 2 + AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> 3 + AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> 4 + else -> 0 + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigImpl.kt new file mode 100644 index 0000000000..6f3d0524bd --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/FuncConfigImpl.kt @@ -0,0 +1,30 @@ +package com.zhjt.mogo_core_function_devatools.funcconfig + +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BEAUTY_MODE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.FOUNDATION +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager + +object FuncConfigImpl : IMoGoDevaToolsFuncConfigListener { + + private const val TAG = "FuncConfigImpl" + + fun init() { + CallerDevaToolsFuncConfigListenerManager.registerDevaToolsFuncConfigListener( + FOUNDATION, + TAG, + this + ) + } + + override fun updateBizData(type: String, state: Boolean, lock: Boolean, data: String?) { + when (type) { + BIZ_BEAUTY_MODE -> FunctionBuildConfig.isDemoMode = state + BIZ_RAIN_MODE -> FunctionBuildConfig.isRainMode = state + BIZ_WARNING_UPLOAD -> FunctionBuildConfig.isReportWarning = state + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigApiService.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigApiService.kt new file mode 100644 index 0000000000..2ef42eb569 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigApiService.kt @@ -0,0 +1,16 @@ +package com.zhjt.mogo_core_function_devatools.funcconfig.network + +import com.mogo.eagle.core.data.BaseResponse +import com.zhjt.service_biz.FuncConfig +import retrofit2.http.Body +import retrofit2.http.Headers +import retrofit2.http.POST + +interface FuncConfigApiService { + + //FuncConfig + @Headers("Content-Type:application/json;charset=UTF-8") + @POST("eagleEye-mis/config/abilityInfo") + suspend fun funcConfig(@Body map: MutableMap): BaseResponse + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigHost.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigHost.kt new file mode 100644 index 0000000000..1d8648ec24 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigHost.kt @@ -0,0 +1,22 @@ +package com.zhjt.mogo_core_function_devatools.funcconfig.network + +import com.mogo.commons.debug.DebugConfig + +class FuncConfigHost { + + companion object{ + private const val HOST_DEV = "https://eagle-qa.zhidaozhixing.com" + private const val HOST_RELEASE = "https://eagle.zhidaozhixing.com" + + fun get(): String{ + return when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV -> HOST_DEV + DebugConfig.NET_MODE_QA -> HOST_DEV + DebugConfig.NET_MODE_DEMO -> HOST_RELEASE + DebugConfig.NET_MODE_RELEASE -> HOST_RELEASE + else -> HOST_RELEASE + } + } + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigNetWorkModel.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigNetWorkModel.kt new file mode 100644 index 0000000000..d80756e1f8 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/funcconfig/network/FuncConfigNetWorkModel.kt @@ -0,0 +1,75 @@ +package com.zhjt.mogo_core_function_devatools.funcconfig.network + +import android.util.Log +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.eagle.core.data.BaseResponse +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.eagle.core.network.apiCall +import com.mogo.eagle.core.network.request +import com.mogo.eagle.core.utilcode.util.DeviceUtils +import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigConst +import com.zhjt.service_biz.FuncConfig + +class FuncConfigNetWorkModel { + + private fun getNetWorkApi(baseUrl: String = FuncConfigHost.get()): FuncConfigApiService { + return MoGoRetrofitFactory.getInstanceNoCallAdapter(baseUrl) + .create(FuncConfigApiService::class.java) + } + + private var retryTime = 0 + private var success: ((FuncConfig) -> Unit)? = null + private var error: ((String) -> Unit)? = null + + fun requestFuncConfig( + onSuccess: ((FuncConfig) -> Unit)? = null, + onError: ((String) -> Unit)? = null + ) { + request> { + val map = mutableMapOf() + start { + if (success == null) { + success = onSuccess + } + if (error == null) { + error = onError + } + //todo test +// map["sn"] = MoGoAiCloudClientConfig.getInstance().sn + map["sn"] = "X20202203105S688HZ" +// map["mac"] = DeviceUtils.getMacAddress() + map["mac"] = "48:b0:2d:3a:bc:78" +// map["channelVersion"] = FuncConfigConst.getChannelCode() + map["channelVersion"] = 1 + } + loader { + apiCall { + getNetWorkApi().funcConfig(map) + } + } + onSuccess { + if (it.result != null) { + success?.invoke(it.result) + } else { + if (retryTime < 3) { + retryTime += 1 + requestFuncConfig() + } else { + error?.invoke("FuncConfig error msg is null") + } + } + } + onError { + if (retryTime < 3) { + retryTime += 1 + requestFuncConfig() + } else if (it.message != null) { + error?.invoke(it.message ?: "FuncConfig error msg is null") + } + + } + + } + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt index 14f87bb3e6..329b2ff2ab 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt @@ -5,7 +5,6 @@ import com.mogo.eagle.core.data.deva.scene.SceneModule import com.mogo.eagle.core.data.deva.scene.SceneModuleTAG import com.mogo.eagle.core.data.deva.scene.SceneTAG import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager -import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.Scene.Companion.scene import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ADAS_IMPL import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS @@ -71,7 +70,6 @@ class SceneManager { //默认未创建的,符合scene tag,首次初始化logger=true scene.addChangeListener { change -> - Logger.i("emArrow","scene change : $change") sceneModuleTAG.map.iterator().forEach { map -> val sceneModule = map.value sceneModule.name?.let { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt index 42d8590c53..7ce7f46979 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt @@ -12,6 +12,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.mogo.logger.* +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.* import com.zhjt.mogo_core_function_devatools.status.entity.CanStatus import com.zhjt.mogo_core_function_devatools.status.entity.GpsStatus @@ -50,10 +51,10 @@ object StatusManager { override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { super.onAutopilotGuardian(guardianInfo) guardianInfo?.code?.takeIf { - Logger.d(TAG, "-- onAutopilotGuardian ---: code: $it") + CallerLogger.d("$M_DEVA$TAG", "-- onAutopilotGuardian ---: code: $it") it.contains("RTK_STATUS", true) || it.contains("CAN", true) || it == "ILCT_RTK_OR_SLAM_CHANGE" }?.run { - Logger.d(TAG, "-- onAutopilotGuardian trigger req ---: code: $this") + CallerLogger.d("$M_DEVA$TAG", "-- onAutopilotGuardian trigger req ---: code: $this") req() } } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt index c5663854b5..69f1b8f199 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt @@ -4,7 +4,8 @@ import android.content.* import android.util.* import com.mogo.eagle.core.function.api.autopilot.* import com.mogo.eagle.core.function.call.autopilot.* -import com.mogo.eagle.core.utilcode.mogo.logger.* +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.zhjt.mogo_core_function_devatools.status.entity.RTKStatus import com.zhjt.mogo_core_function_devatools.status.flow.IFlow import kotlinx.coroutines.* @@ -31,7 +32,7 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu override fun onCreate() { send(RTKStatus(getDesc(), getCode())) - Logger.d(TAG, "-- onCreate --") + CallerLogger.d("$M_DEVA$TAG", "-- onCreate --") CallerAutoPilotStatusListenerManager.addListener(TAG, this) CallerAutopilotCarStatusListenerManager.addListener(TAG, this) if (CallerAutoPilotManager.isConnected()) { @@ -67,7 +68,7 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) if (!CallerAutoPilotManager.isConnected()) { - Logger.d(TAG, "工控机断开了....") + CallerLogger.d("$M_DEVA$TAG", "工控机断开了....") healthInfo.set(null) send(RTKStatus("", -1)) } @@ -114,7 +115,7 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu override fun onDestroy() { super.onDestroy() isOldVersion.set(false) - Logger.d(TAG, "-- onDestroy --") + CallerLogger.d("$M_DEVA$TAG", "-- onDestroy --") CallerAutoPilotStatusListenerManager.removeListener(TAG) CallerAutopilotCarStatusListenerManager.removeListener(TAG) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt index 7e9d4fded7..040e8a70c2 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/ui/adapter/StatusAdapter.kt @@ -7,8 +7,8 @@ import androidx.core.content.* import androidx.recyclerview.widget.* import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.mogo.logger.* +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.util.* -import com.zhjt.mogo_core_function_devatools.* import com.zhjt.mogo_core_function_devatools.R import com.zhjt.mogo_core_function_devatools.R.drawable import com.zhjt.mogo_core_function_devatools.status.entity.* @@ -16,7 +16,6 @@ import com.zhjt.mogo_core_function_devatools.status.entity.IpcStatus import com.zhjt.mogo_core_function_devatools.status.entity.Status import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.* import com.zhjt.mogo_core_function_devatools.status.ui.adapter.StatusAdapter.StatusViewHolder -import kotlinx.coroutines.* internal class StatusAdapter(val ctx: Context, var data: ArrayList): RecyclerView.Adapter() { @@ -124,7 +123,7 @@ internal class StatusAdapter(val ctx: Context, var data: ArrayList): Rec is TracingStatus -> { val extra = status.state.extra val extraDesc = if (extra != null && extra.isNotEmpty()) extra.values.joinToString(",") else "" - Logger.d(TAG, "traceing_state: $status -> extra: $extraDesc :: extra: $extra") + CallerLogger.d("$M_DEVA$TAG", "traceing_state: $status -> extra: $extraDesc :: extra: $extra") when(status.state) { //"轨迹类型:${ if (status.state == TRACK_LOADED) "循迹" else if (status.state == ROUTE_LOADED) "自主算路" else "暂无轨迹" }" MAP_TRA_TYPE -> { diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle index 9f40e36205..ccccc40f85 100644 --- a/core/function-impl/mogo-core-function-hmi/build.gradle +++ b/core/function-impl/mogo-core-function-hmi/build.gradle @@ -139,6 +139,7 @@ dependencies { api project(':core:mogo-core-function-call') api project(':core:mogo-core-function-api') + api project(':libraries:mogo-adas') api project(':libraries:map-usbcamera') api project(':libraries:mogo-adas-other') } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 4bdb0a6522..ba754a638d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -20,15 +20,22 @@ import androidx.core.view.* import androidx.lifecycle.lifecycleScope import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.launcher.ARouter +import com.kwai.koom.base.postOnMainThread +import com.mogo.cloud.passport.MoGoAiCloudClient +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.debug.DebugConfig import com.mogo.commons.mvp.BaseFragment import com.mogo.commons.mvp.MvpFragment import com.mogo.commons.voice.* +import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.bindingcar.AdUpgradeStateHelper import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.data.camera.CameraEntity import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.data.constants.MoGoFragmentPaths +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I import com.mogo.eagle.core.data.enums.SidePattern import com.mogo.eagle.core.data.enums.SidePattern.* import com.mogo.eagle.core.data.enums.WarningDirectionEnum @@ -46,6 +53,7 @@ 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.CallerAutoPilotManager import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager @@ -54,6 +62,7 @@ import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.map.CallerMapDataCollectorManager import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.call.monitor.CallerMonitorManager +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.WaringConst import com.mogo.eagle.core.function.hmi.notification.WarningFloat @@ -81,13 +90,13 @@ import com.mogo.eagle.core.utilcode.reminder.* import com.mogo.eagle.core.utilcode.reminder.api.* import com.mogo.eagle.core.utilcode.reminder.api.IReminder.IStateChangeListener import com.mogo.eagle.core.utilcode.reminder.api.impl.* -import com.mogo.eagle.core.utilcode.util.SoundUtils -import com.mogo.eagle.core.utilcode.util.ThreadUtils -import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.* import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String -import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.map.MogoMap import com.mogo.module.common.enums.* +import com.zhidao.support.adas.high.common.MogoReport.Code.Error.EMAP.* import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig +import com.zhjt.service_biz.BizConfig import kotlinx.android.synthetic.main.fragment_hmi.* import kotlinx.android.synthetic.main.view_auto_pilot_check.view.* import kotlinx.android.synthetic.main.view_och_bus_operation.view.* @@ -104,12 +113,12 @@ import java.util.* * 预警图层 */ @Route(path = MoGoFragmentPaths.PATH_FRAGMENT_HMI) - class MoGoHmiFragment : MvpFragment(), - IMoGoWaringProvider, - IMoGoHmiViewProxy, - MoGoHmiContract.View, - IMoGoAutopilotRecordListener, - IMoGoAutopilotStatusListener, IViewNotificationProvider { +class MoGoHmiFragment : MvpFragment(), + IMoGoWaringProvider, + IMoGoHmiViewProxy, + MoGoHmiContract.View, + IMoGoAutopilotRecordListener, + IMoGoAutopilotStatusListener, IViewNotificationProvider { private val TAG = "MoGoHmiFragment" // DebugSettingView @@ -145,11 +154,12 @@ import java.util.* //工控机节点上报列表 private var reportList = arrayListOf() - //工控机上报列表悬浮窗 - private var reportListFloatWindow: ReportListFloatWindow?=null - private var ipcReportWindow: IPCReportWindow?=null - private var adUpgradeDialog: AdUpgradeDialog?=null + //工控机上报列表悬浮窗 + private var reportListFloatWindow: ReportListFloatWindow? = null + private var ipcReportWindow: IPCReportWindow? = null + + private var adUpgradeDialog: AdUpgradeDialog? = null private var lastSpeakJob: Job? = null @@ -183,8 +193,8 @@ import java.util.* } /**ivCameraIcon?.setOnLongClickListener { - activity?.let { it1 -> CarcorderPreviewView.show(it1) } - true + activity?.let { it1 -> CarcorderPreviewView.show(it1) } + true }*/ ivToolsIcon?.setOnClickListener { @@ -198,7 +208,50 @@ import java.util.* true } + // init appConfigInfo + AppConfigInfo.appName = AppUtils.getAppName() + if (AppConfigInfo.appVersionCode == 0) { + AppConfigInfo.appVersionCode = AppUtils.getAppVersionCode() + } + if (AppConfigInfo.appVersionName.isNullOrEmpty()) { + AppConfigInfo.appVersionName = AppUtils.getAppVersionName() + } + if (AppConfigInfo.appPackageName.isNullOrEmpty()) { + AppConfigInfo.appPackageName = AppUtils.getAppPackageName() + } + if (AppConfigInfo.uniqueDeviceId.isNullOrEmpty()) { + AppConfigInfo.uniqueDeviceId = DeviceIdUtils.getDeviceId(AbsMogoApplication.getApp()) + } + if (AppConfigInfo.widevineIDMd5.isNullOrEmpty()) { + AppConfigInfo.widevineIDMd5 = + DeviceIdUtils.getWidevineIDWithMd5(AbsMogoApplication.getApp()) + } + if (MoGoAiCloudClient.getInstance().aiCloudClientConfig != null) { + AppConfigInfo.mogoSN = MoGoAiCloudClient.getInstance().aiCloudClientConfig.sn + AppConfigInfo.mogoToken = MoGoAiCloudClient.getInstance().aiCloudClientConfig.token + } + AppConfigInfo.netMode = DebugConfig.getNetMode() + if (MogoMap.getInstance().mogoMap != null) { + AppConfigInfo.mapSdkVersion = MogoMap.getInstance().mogoMap.mapVersion + } + AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context) + AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot() + + when { + AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> {// 司机端 + AppConfigInfo.isDriver = true + AppConfigInfo.isConnectedNetty = CallerTelematicManager.getServerStarted() + } + AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> { + AppConfigInfo.isDriver = false + AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus() + AppConfigInfo.serverSn = CallerTelematicManager.getServerToken() + } + else -> { + } + } + AppConfigInfo.teleTimeStamp = CallerAutoPilotManager.getTeleTimeStamp() } @OptIn(ExperimentalCoroutinesApi::class) @@ -221,45 +274,62 @@ import java.util.* } } - override fun getNotificationView(): IViewNotification? = context?.let { V2XNotificationView(it) } + override fun getNotificationView(): IViewNotification? = + context?.let { V2XNotificationView(it) } override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { CallerLogger.d("$M_HMI$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat}") - if(BadCaseConfig.recordKeyList.contains(recordPanel.key)){ - if(recordPanel.stat == 100 || recordPanel.stat == 101){ + if (BadCaseConfig.recordKeyList.contains(recordPanel.key)) { + if (recordPanel.stat == 100 || recordPanel.stat == 101) { //成功结束录制 - TipToast.shortTip("${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())} bag录制成功") + TipToast.shortTip( + "${ + millis2String( + System.currentTimeMillis(), + TimeUtils.getHourMinSecondFormat() + ) + } bag录制成功" + ) } - if(recordPanel.stat == 200){ + if (recordPanel.stat == 200) { //录制失败 - TipToast.shortTip("${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())} bag录制失败") + TipToast.shortTip( + "${ + millis2String( + System.currentTimeMillis(), + TimeUtils.getHourMinSecondFormat() + ) + } bag录制失败" + ) } return } //在工控机taxi2.3.0版本和Bus2.4.0版本上不支持被动录包,不进行被动录包的弹窗 BadCaseConfig.dockerVersion?.let { - if(it.contains("taxi") && it.contains("2.3.0")){ + if (it.contains("taxi") && it.contains("2.3.0")) { return } - if(it.contains("bus") && it.contains("2.4.0")){ + if (it.contains("bus") && it.contains("2.4.0")) { return } } //处于非美化模式下弹窗;是地图数据采集任务时即type=2时,不弹窗 - if (!FunctionBuildConfig.isDemoMode && (recordPanel.stat == 100 || recordPanel.stat == 101) && recordPanel.type!=2) { + if (!FunctionBuildConfig.isDemoMode && (recordPanel.stat == 100 || recordPanel.stat == 101) && recordPanel.type != 2) { //只在司机屏生效,乘客屏不生效 - if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { activity?.let { CallerDevaToolsManager.onReceiveBadCaseRecord(recordPanel, it) } } } if (!FunctionBuildConfig.isDemoMode && recordPanel.type == 2 && ( - recordPanel.stat == 101 || //工控机采集完成-被动完成 - recordPanel.stat == 100 || //工控机采集完成-主动完成 - recordPanel.stat == 102 || //工控机达到最大采集时长 - recordPanel.stat == 103) //工控机磁盘满了 + recordPanel.stat == 101 || //工控机采集完成-被动完成 + recordPanel.stat == 100 || //工控机采集完成-主动完成 + recordPanel.stat == 102 || //工控机达到最大采集时长 + recordPanel.stat == 103) //工控机磁盘满了 ) { - CallerMapDataCollectorManager.finish(recordPanel.id, recordPanel.stat, "", recordPanel.filename - ?: "", recordPanel.note ?: "") + CallerMapDataCollectorManager.finish( + recordPanel.id, recordPanel.stat, "", recordPanel.filename + ?: "", recordPanel.note ?: "" + ) } } @@ -303,15 +373,19 @@ import java.util.* * @param warningReportList 提醒级别上报数据列表 * @param reportLevel 1:error级别 2:warning级别 */ - override fun showIPCReportWindow(errorReportList: ArrayList,warningReportList: ArrayList,reportLevel: Int) { - ThreadUtils.runOnUiThread{ - if(reportLevel == 1){ - if(ipcReportWindow==null){ - ipcReportWindow= activity?.let { IPCReportWindow(it) } - ipcReportWindow?.setClickListener(object: IPCReportWindow.ClickListener{ + override fun showIPCReportWindow( + errorReportList: ArrayList, + warningReportList: ArrayList, + reportLevel: Int + ) { + ThreadUtils.runOnUiThread { + if (reportLevel == 1) { + if (ipcReportWindow == null) { + ipcReportWindow = activity?.let { IPCReportWindow(it) } + ipcReportWindow?.setClickListener(object : IPCReportWindow.ClickListener { override fun closeWindow() { ipcReportWindow?.hideFloatWindow() - ipcReportWindow =null + ipcReportWindow = null } }) ipcReportWindow?.let { @@ -320,7 +394,7 @@ import java.util.* } ipcReportWindow?.showFloatWindow() } - ipcReportWindow?.refreshData(errorReportList,warningReportList,reportLevel) + ipcReportWindow?.refreshData(errorReportList, warningReportList, reportLevel) } } @@ -328,14 +402,6 @@ import java.util.* mViewNotificationProvider = provider } - override fun showVideoDialog(infList: List) { - context?.let { - if (roadVideoDialog == null) { - roadVideoDialog = RoadVideoDialog(it) - } - roadVideoDialog?.show(infList) - } - } override fun changeBusOperationStatus(isOut: Boolean) { busOperationStatus?.changerOperationStatus(isOut) @@ -387,41 +453,41 @@ import java.util.* }) } toolsViewFloat = WarningFloat.with(it) - .setTag("ToolsViewFloat") - .setLayout(toolsView!!) - .setSidePattern(SidePattern.LEFT) - .setGravity(Gravity.LEFT) - .setImmersionStatusBar(true) - .setWindowHeight(LayoutParams.MATCH_PARENT) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + .setTag("ToolsViewFloat") + .setLayout(toolsView!!) + .setSidePattern(SidePattern.LEFT) + .setGravity(Gravity.LEFT) + .setImmersionStatusBar(true) + .setWindowHeight(LayoutParams.MATCH_PARENT) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onDismiss() { - toolsViewFloat = null - toolsView = null - // TODO:("") - } - }) - .show() + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onDismiss() { + toolsViewFloat = null + toolsView = null + // TODO:("") + } + }) + .show() } else { toolsViewFloat?.show() } @@ -466,7 +532,7 @@ import java.util.* ivAiCollectTools.visibility = View.VISIBLE CallerDevaToolsManager.initBadCase(ivBadCaseTools) CallerDevaToolsManager.initAiCollect(ivAiCollectTools) - }else{ + } else { ivBadCaseTools.visibility = View.GONE ivAiCollectTools.visibility = View.GONE } @@ -543,20 +609,20 @@ import java.util.* mDebugSettingView = DebugSettingView(it) Log.i("DebugViewSwitchLog", "new DebugSettingView") mDebugSettingView?.reportInit(reportList) - mDebugSettingView?.setClickListener(object: DebugSettingView.ClickListener{ + mDebugSettingView?.setClickListener(object : DebugSettingView.ClickListener { override fun showReportListWindow(show: Boolean) { - if(show){ + if (show) { //打开工控机上报列表 reportListFloatWindow = ReportListFloatWindow(it) reportListFloatWindow?.showFloatWindow() reportListFloatWindow?.refreshData(reportList) - }else{ + } else { //关闭工控机上报列表 reportListFloatWindow?.hideFloatWindow() } } }) - if(mDebugSettingView!=null){ + if (mDebugSettingView != null) { Log.i("DebugViewSwitchLog", "new DebugSettingView success") } } @@ -564,38 +630,39 @@ import java.util.* var gravity = Gravity.RIGHT //调试窗默认靠右显示,Bus的乘客端右端有视图覆盖,调试窗靠左显示 if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && - AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + ) { side = SidePattern.LEFT gravity = Gravity.LEFT } mDebugSettingViewFloat = WarningFloat.with(it) - .setTag("DebugSettingView") - .setLayout(mDebugSettingView!!) - .setSidePattern(side) - .setGravity(gravity, offsetY = 70) - .setImmersionStatusBar(true) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + .setTag("DebugSettingView") + .setLayout(mDebugSettingView!!) + .setSidePattern(side) + .setGravity(gravity, offsetY = 70) + .setImmersionStatusBar(true) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .show() + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .show() } } } @@ -610,15 +677,16 @@ import java.util.* */ @Synchronized override fun showWarningV2X( - v2xType: String, - alertContent: CharSequence?, - ttsContent: String?, - tag: String?, - listener: IMoGoWarningStatusListener?, - playTts: Boolean, - expireTime: Long + v2xType: String, + alertContent: CharSequence?, + ttsContent: String?, + tag: String?, + listener: IMoGoWarningStatusListener?, + playTts: Boolean, + expireTime: Long ) { - val playTTS = playTts && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) + val playTTS = + playTts && !AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) activity?.let { val warningContent = alertContent ?: EventTypeEnum.getWarningContent(v2xType) @@ -629,70 +697,87 @@ import java.util.* val content = mViewNotificationProvider?.getNotificationView() ?: return content.setWarningIcon(EventTypeEnum.getWarningIcon(v2xType)) content.setWarningContent(warningContent) - Log.d("$M_HMI$TAG", "--- show v2x dialog 1 ---: info -> v2x-type: $v2xType : expireTime: $expireTime") - Reminder.enqueue(this@MoGoHmiFragment, object : PopupWindowReminder(PopupWindow(content, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT).also { itx -> - itx.isTouchable = false - itx.isFocusable = false - itx.isClippingEnabled = false - itx.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) - val transition = Slide(when(content.sidePattern) { - LEFT, RESULT_LEFT-> Gravity.LEFT - RIGHT, RESULT_RIGHT -> Gravity.RIGHT - TOP, RESULT_TOP -> Gravity.TOP - BOTTOM, RESULT_BOTTOM -> Gravity.BOTTOM - else -> Gravity.TOP - }).also { t -> - t.interpolator = AccelerateDecelerateInterpolator() - t.duration = 200 - } - if (VERSION.SDK_INT >= VERSION_CODES.M) { - itx.enterTransition = transition - itx.exitTransition = transition - } - }) { - override fun show() { - val parent = it.window.decorView - parent.doOnAttach { - Log.d("$M_HMI$TAG", "--- show v2x dialog 2 ---: info -> v2x-type: $v2xType : expireTime: $expireTime") - popupWindow.showAtLocation(parent, content.layoutGravity, 0, 0) - } - } - override fun isOverride(): Boolean { - return true - } - - override fun key(): String { - return v2xType - } - }, object : IStateChangeListener { - - override fun onShow(reminder: IReminder) { - listener?.onShow() - lastShowV2XJob?.safeCancel() - lastSpeakJob?.safeCancel() - showingV2XTip = reminder - lifecycleScope.launch { - delay(expireTime) - }.also { itx -> - lastShowV2XJob = itx - }.invokeOnCompletion { _ -> - reminder.hide() - } - if (ttsContent != null && !TextUtils.isEmpty(ttsContent) && playTTS) { - lifecycleScope.launch { - speak(it, ttsContent) - }.also { itx -> - lastSpeakJob = itx + Log.d( + "$M_HMI$TAG", + "--- show v2x dialog 1 ---: info -> v2x-type: $v2xType : expireTime: $expireTime" + ) + Reminder.enqueue( + this@MoGoHmiFragment, + object : PopupWindowReminder( + PopupWindow( + content, + LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT + ).also { itx -> + itx.isTouchable = false + itx.isFocusable = false + itx.isClippingEnabled = false + itx.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + val transition = Slide( + when (content.sidePattern) { + LEFT, RESULT_LEFT -> Gravity.LEFT + RIGHT, RESULT_RIGHT -> Gravity.RIGHT + TOP, RESULT_TOP -> Gravity.TOP + BOTTOM, RESULT_BOTTOM -> Gravity.BOTTOM + else -> Gravity.TOP + } + ).also { t -> + t.interpolator = AccelerateDecelerateInterpolator() + t.duration = 200 + } + if (VERSION.SDK_INT >= VERSION_CODES.M) { + itx.enterTransition = transition + itx.exitTransition = transition + } + }) { + override fun show() { + val parent = it.window.decorView + parent.doOnAttach { + Log.d( + "$M_HMI$TAG", + "--- show v2x dialog 2 ---: info -> v2x-type: $v2xType : expireTime: $expireTime" + ) + popupWindow.showAtLocation(parent, content.layoutGravity, 0, 0) } } - } - override fun onHide(reminder: IReminder) { - listener?.onDismiss() - showingV2XTip = null - showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - } - }) + override fun isOverride(): Boolean { + return true + } + + override fun key(): String { + return v2xType + } + }, + object : IStateChangeListener { + + override fun onShow(reminder: IReminder) { + listener?.onShow() + lastShowV2XJob?.safeCancel() + lastSpeakJob?.safeCancel() + showingV2XTip = reminder + lifecycleScope.launch { + delay(expireTime) + }.also { itx -> + lastShowV2XJob = itx + }.invokeOnCompletion { _ -> + reminder.hide() + } + if (ttsContent != null && !TextUtils.isEmpty(ttsContent) && playTTS) { + lifecycleScope.launch { + speak(it, ttsContent) + }.also { itx -> + lastSpeakJob = itx + } + } + } + + override fun onHide(reminder: IReminder) { + listener?.onDismiss() + showingV2XTip = null + showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + } + }) } } @@ -739,8 +824,8 @@ import java.util.* * @param checkLightId 0-都是默认不亮起,1-红,2-黄,3-绿 * @param lightSource 1:云端下发;2:自车感知 */ - override fun showWarningTrafficLight(checkLightId: Int,lightSource: Int) { - mViewTrafficLight?.showWarningTrafficLight(checkLightId,lightSource) + override fun showWarningTrafficLight(checkLightId: Int, lightSource: Int) { + mViewTrafficLight?.showWarningTrafficLight(checkLightId, lightSource) } override fun isWarningTrafficLightShow(): Boolean { @@ -814,7 +899,7 @@ import java.util.* * @see WarningDirectionEnum */ override fun showWarning(direction: WarningDirectionEnum) { - Log.d(TAG,"showWarning====") + Log.d(TAG, "showWarning====") flV2XWarningView?.showWarning(direction) flicker(flV2XWarningView) } @@ -863,42 +948,42 @@ import java.util.* mNoticeFloat = it?.let { it1 -> noticeBannerView?.let { it2 -> WarningFloat.with(it1) - .setTag(WaringConst.NOTICE_FOR_TRAFFIC_KEY) - .setLayout(it2) - .setSidePattern(SidePattern.TOP) - .setCountDownTime(60 * 1000 * 3) - .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) - .setImmersionStatusBar(true) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onShow() { - // 创建弹窗成功才进行TTS播报 + .setTag(WaringConst.NOTICE_FOR_TRAFFIC_KEY) + .setLayout(it2) + .setSidePattern(SidePattern.TOP) + .setCountDownTime(60 * 1000 * 3) + .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) + .setImmersionStatusBar(true) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onShow() { + // 创建弹窗成功才进行TTS播报 // AIAssist.getInstance(activity) // .speakTTSVoice("") - } + } - }) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + }) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .show() + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .show() } } } @@ -913,41 +998,41 @@ import java.util.* mNoticeFloat = it.let { it1 -> noticeBannerView?.let { it2 -> WarningFloat.with(it1) - .setTag(WaringConst.NOTICE_FOR_NORMAL_KEY) - .setLayout(it2) - .setSidePattern(SidePattern.TOP) - .setCountDownTime(10000) - .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) - .setImmersionStatusBar(true) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onShow() { - // 创建弹窗成功才进行TTS播报 - // AIAssist.getInstance(activity) - // .speakTTSVoice("") - } - }) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + .setTag(WaringConst.NOTICE_FOR_NORMAL_KEY) + .setLayout(it2) + .setSidePattern(SidePattern.TOP) + .setCountDownTime(10000) + .setGravity(Gravity.CENTER_HORIZONTAL, offsetY = 110) + .setImmersionStatusBar(true) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onShow() { + // 创建弹窗成功才进行TTS播报 + // AIAssist.getInstance(activity) + // .speakTTSVoice("") + } + }) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .show() + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .show() } } } @@ -1034,6 +1119,17 @@ import java.util.* dismissToolsFloatView() } + @BizConfig(V2I, "", BIZ_RTS) + override fun showVideoDialog(infList: List) { + context?.let { + if (roadVideoDialog == null) { + roadVideoDialog = RoadVideoDialog(it) + } + roadVideoDialog?.show(infList) + } + } + + @BizConfig(V2I, "", BIZ_RTS) private fun showCameraList(cameraList: List?) { context?.let { if (cameraViewFloat == null) { @@ -1062,40 +1158,40 @@ import java.util.* } }) cameraViewFloat = WarningFloat.with(it) - .setTag("CameraListFloat") - .setLayout(cameraListView!!) - .setSidePattern(SidePattern.RIGHT) - .setGravity(Gravity.RIGHT, -40, 255) - .setImmersionStatusBar(true) - .setAnimator(object : DefaultAnimator() { - override fun enterAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.enterAnim(view, params, windowManager, sidePattern) - ?.apply { - interpolator = OvershootInterpolator() - } + .setTag("CameraListFloat") + .setLayout(cameraListView!!) + .setSidePattern(SidePattern.RIGHT) + .setGravity(Gravity.RIGHT, -40, 255) + .setImmersionStatusBar(true) + .setAnimator(object : DefaultAnimator() { + override fun enterAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.enterAnim(view, params, windowManager, sidePattern) + ?.apply { + interpolator = OvershootInterpolator() + } - override fun exitAnim( - view: View, - params: LayoutParams, - windowManager: WindowManager, - sidePattern: SidePattern - ): Animator? = - super.exitAnim(view, params, windowManager, sidePattern) - ?.setDuration(200) - }) - .addWarningStatusListener(object : IMoGoWarningStatusListener { - override fun onDismiss() { - cameraViewFloat = null - cameraListView = null - ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor) - } - }) - .show() + override fun exitAnim( + view: View, + params: LayoutParams, + windowManager: WindowManager, + sidePattern: SidePattern + ): Animator? = + super.exitAnim(view, params, windowManager, sidePattern) + ?.setDuration(200) + }) + .addWarningStatusListener(object : IMoGoWarningStatusListener { + override fun onDismiss() { + cameraViewFloat = null + cameraListView = null + ivCameraIcon.setBackgroundResource(R.drawable.icon_camera_nor) + } + }) + .show() } else { cameraViewFloat?.show() } @@ -1126,9 +1222,9 @@ import java.util.* } } - private var isLeftLight :Boolean = false - private var isRightLight :Boolean = false - private var isDisappare :Boolean = false + private var isLeftLight: Boolean = false + private var isRightLight: Boolean = false + private var isDisappare: Boolean = false /** * 显示转向灯效果 if (HmiBuildConfig.isShowBadCaseView) { @@ -1233,13 +1329,14 @@ import java.util.* padSn: String, releaseId: String ) { - ThreadUtils.runOnUiThread{ - if(adUpgradeDialog == null){ - adUpgradeDialog = AdUpgradeDialog(requireContext(),images, padSn, releaseId) - adUpgradeDialog?.setClickListener(object: AdUpgradeDialog.ClickListener{ + ThreadUtils.runOnUiThread { + if (adUpgradeDialog == null) { + adUpgradeDialog = AdUpgradeDialog(requireContext(), images, padSn, releaseId) + adUpgradeDialog?.setClickListener(object : AdUpgradeDialog.ClickListener { override fun confirm() { //确认升级 - CallerBindingcarManager.getBindingcarProvider().upgradeConfirm(images, padSn, releaseId) + CallerBindingcarManager.getBindingcarProvider() + .upgradeConfirm(images, padSn, releaseId) AdUpgradeStateHelper.setConfirmUpgrade(true) ToastUtils.showLong("最新版本下载中...") adUpgradeDialog?.dismiss() @@ -1258,10 +1355,10 @@ import java.util.* } override fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo) { - ThreadUtils.runOnUiThread{ + ThreadUtils.runOnUiThread { toolsView?.showAdUpgradeStatus(ipcUpgradeStateInfo) ipcUpgradeStateInfo.status.let { - if(AdUpgradeStateHelper.isUpgradeSuccess(it)){ + if (AdUpgradeStateHelper.isUpgradeSuccess(it)) { ToastUtils.showLong("升级成功") AdUpgradeStateHelper.setConfirmUpgrade(false) } @@ -1287,17 +1384,45 @@ import java.util.* * 工控机监控节点上报 */ override fun onAutopilotGuardian(guardianInfo: MogoReportMsg.MogoReportMessage?) { - guardianInfo?.let { - if(reportList.size>49){ - reportList.removeLast() - } - reportList.add(0, - ReportEntity(TimeUtils.millis2String(System.currentTimeMillis()), - it.src,it.level,it.msg,it.code,it.resultList,it.actionsList)) - } - reportListFloatWindow?.let { - ThreadUtils.runOnUiThread{ - it.refreshData(reportList) + ThreadUtils.runOnUiThread { + guardianInfo?.let { + when (it.code) { + EXIT_AUTOPILOT_FOR_PLANNING, + EXIT_AUTOPILOT_FOR_LOCATION, + EXIT_AUTOPILOT_FOR_CHASSIS, + EXIT_AUTOPILOT_FOR_DISTANCE -> { + showWarningV2X( + EventTypeEnum.TAKE_OVER_EVENT.poiType, + EventTypeEnum.TAKE_OVER_EVENT.content, + EventTypeEnum.TAKE_OVER_EVENT.tts, + EventTypeEnum.TAKE_OVER_EVENT.poiType, + object : IMoGoWarningStatusListener { + override fun onShow() { + clTakeOverView.visibility = View.VISIBLE + } + + override fun onDismiss() { + clTakeOverView.visibility = View.GONE + } + }, + true, + 6000L + ) + } + } + + if (reportList.size > 49) { + reportList.removeLast() + } + reportList.add( + 0, + ReportEntity( + TimeUtils.millis2String(System.currentTimeMillis()), + it.src, it.level, it.msg, it.code, it.resultList, it.actionsList + ) + ) + reportListFloatWindow?.refreshData(reportList) + } } } @@ -1308,12 +1433,16 @@ import java.util.* .navigation() as BaseFragment activity?.supportFragmentManager?.beginTransaction() ?.setCustomAnimations(R.anim.slide_in, R.anim.fade_out)?.apply { - if (!fragmentOverview.isAdded) { - add(R.id.module_main_id_smp_fragment, fragmentOverview, fragmentOverview.tagName) - } else { + if (!fragmentOverview.isAdded) { + add( + R.id.module_main_id_smp_fragment, + fragmentOverview, + fragmentOverview.tagName + ) + } else { show(fragmentOverview) - }.commitAllowingStateLoss() - } + }.commitAllowingStateLoss() + } CallerDevaToolsManager.hideStatusBar() } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 8777d24345..384af51e4f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -27,6 +27,11 @@ import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.data.autopilot.* import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MoGoConfig +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BAG_RECORD +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BEAUTY_MODE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RAIN_MODE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_WARNING_UPLOAD import com.mogo.eagle.core.data.deva.chain.ChainConstant import com.mogo.eagle.core.data.deva.scene.SceneModule import com.mogo.eagle.core.data.enums.TrafficTypeEnum @@ -36,10 +41,12 @@ import com.mogo.eagle.core.data.obu.ObuStatusInfo import com.mogo.eagle.core.data.report.ReportEntity import com.mogo.eagle.core.data.upgrade.UpgradeVersionEntity import com.mogo.eagle.core.function.api.autopilot.* +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener import com.mogo.eagle.core.function.api.obu.IMoGoObuStatusListener import com.mogo.eagle.core.function.call.autopilot.* +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager @@ -93,8 +100,8 @@ class DebugSettingView @JvmOverloads constructor( ) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoObuStatusListener, IMoGoAutopilotStatusListener, IMoGoAutopilotCarStateListener, IMoGoMapLocationListener, IMoGoAutopilotIdentifyListener, - IMoGoAutopilotPlanningListener, IMoGoAutopilotCarConfigListener, - IMoGoAutopilotVehicleStateListener { + IMoGoAutopilotPlanningListener, + IMoGoAutopilotVehicleStateListener, IMoGoDevaToolsFuncConfigListener { private val TAG = "DebugSettingView" @@ -185,10 +192,16 @@ class DebugSettingView @JvmOverloads constructor( CallerAutopilotIdentifyListenerManager.addListener(TAG, this) // 添加 规划路径相关回调 监听 CallerAutopilotPlanningListenerManager.addListener(TAG, this) - // 添加 工控机基础信息回调 监听 - CallerAutopilotCarConfigListenerManager.addListener(TAG, this) //添加 车辆底盘数据回调 监听 CallerAutopilotVehicleStateListenerManager.addListener(TAG, this) + + //添加 业务配置监听 + CallerDevaToolsFuncConfigListenerManager.registerDevaToolsFuncConfigListener( + FuncBizConfig.FOUNDATION, + TAG, + this + ) + if (logInfoView != null) { logInfoView!!.onEnterForeground() } @@ -214,11 +227,12 @@ class DebugSettingView @JvmOverloads constructor( CallerAutopilotIdentifyListenerManager.removeListener(TAG) // 移除 规划路径相关回调 监听 CallerAutopilotPlanningListenerManager.removeListener(TAG) - // 移除 工控机基础信息回调 监听 - CallerAutopilotCarConfigListenerManager.removeListener(TAG) - //移除 车辆底盘数据回调 监听 + // 移除 车辆底盘数据回调 监听 CallerAutopilotVehicleStateListenerManager.removeListener(TAG) + // 移除 业务配置监听 + CallerDevaToolsFuncConfigListenerManager.unRegisterDevaToolsFuncConfigListener(this) + if (logInfoView != null) { logInfoView!!.onEnterBackground() } @@ -561,7 +575,7 @@ class DebugSettingView @JvmOverloads constructor( // 演示模式 tbIsDemoMode.setOnCheckedChangeListener { _, isChecked -> CallerAutoPilotManager.setDemoMode(isChecked) - if(!isChecked){ + if (!isChecked) { //关闭美化模式时,通知工控机 CallerAutoPilotManager.setIPCDemoMode(isChecked) } @@ -574,7 +588,7 @@ class DebugSettingView @JvmOverloads constructor( } //只在司机端设置美化模式开关功能 - if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)){ + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { tbIsDemoMode.visibility = View.GONE } @@ -652,12 +666,8 @@ class DebugSettingView @JvmOverloads constructor( // 初始化 tracker感知数据源 数据 trackerProvider.check( when (FunctionBuildConfig.debugTrackerProvider) { - 0 -> { - R.id.trackerProviderOrigin - } - 1 -> { - R.id.trackerProviderObu - } + 0 -> R.id.trackerProviderOrigin + 1 -> R.id.trackerProviderObu else -> R.id.trackerProviderOrigin } ) @@ -666,14 +676,38 @@ class DebugSettingView @JvmOverloads constructor( R.id.trackerProviderOrigin -> { FunctionBuildConfig.debugTrackerProvider = 0 // update tracker provider view + trackerIPCProvider.visibility = View.VISIBLE } R.id.trackerProviderObu -> { FunctionBuildConfig.debugTrackerProvider = 1 // update tracker provider view + trackerIPCProvider.visibility = View.GONE } } } + // 初始化 trackerIPC 感知数据源 数据 + trackerIPCProvider.check( + when (FunctionBuildConfig.trackerIPCProvider) { + 0 -> R.id.trackerIPCUnion + 1 -> R.id.trackerIPCObu + 2 -> R.id.trackerIPCV2N + else -> R.id.trackerIPCUnion + } + ) + trackerProvider.setOnCheckedChangeListener{ _, checkedId -> + when(checkedId){ + R.id.trackerIPCUnion -> { + FunctionBuildConfig.trackerIPCProvider = 0 + } + R.id.trackerIPCObu -> { + FunctionBuildConfig.trackerIPCProvider = 1 + } + R.id.trackerIPCV2N -> { + FunctionBuildConfig.trackerIPCProvider = 2 + } + } + } // 初始化 ADAS感知数据是否绘制 选择情况 tbIsDrawIdentifyData.isChecked = FunctionBuildConfig.isDrawIdentifyData @@ -810,20 +844,21 @@ class DebugSettingView @JvmOverloads constructor( } //状态中心-后台优化状态 - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val backgroundStatus = "后台运行:" + if (BackgrounderPermission.getInstance() .isPermissionLongBackgroundRunning(context) ) "已优化" else "未优化" tvBackgroundOperation.text = Html.fromHtml(backgroundStatus, Html.FROM_HTML_MODE_LEGACY) tvBackgroundOperation.setOnClickListener { - BackgrounderPermission.getInstance().showPermissionLongBackgroundRunningDialog(context) + BackgrounderPermission.getInstance() + .showPermissionLongBackgroundRunningDialog(context) } BackgrounderPermission.getInstance().setListener { val str = "后台运行:" + if (it) "已优化" else "未优化" tvBackgroundOperation.text = Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY) } - }else { + } else { tvBackgroundOperation.visibility = GONE } //设置工控机连接状态 @@ -833,7 +868,8 @@ class DebugSettingView @JvmOverloads constructor( /** * 设置鹰眼本地参数配置监听 */ - @SuppressLint("SetTextI18n") private fun setEagleEyeConfigListener() { + @SuppressLint("SetTextI18n") + private fun setEagleEyeConfigListener() { //初始化刹车加速度阈值信息 val brakeThreshold = SharedPrefsMgr.getInstance(context) .getFloat(MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5F) @@ -885,7 +921,7 @@ class DebugSettingView @JvmOverloads constructor( FunctionBuildConfig.isReportWarning = isChecked } //异常上报开关只在司机端展示 - if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)){ + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { tbReportWarning.visibility = GONE } @@ -896,7 +932,7 @@ class DebugSettingView @JvmOverloads constructor( p.menuInflater.inflate(R.menu.menu_env_pop, p.menu) MenuCompat.setGroupDividerEnabled(p.menu, true) p.setOnMenuItemClickListener { item -> - when(item.itemId) { + when (item.itemId) { R.id.group_hy -> { return@setOnMenuItemClickListener false } @@ -1104,7 +1140,10 @@ class DebugSettingView @JvmOverloads constructor( accelerationIsShow = isChecked } - tbRouteDynamicEffect.isChecked = AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) && !AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + tbRouteDynamicEffect.isChecked = + AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) && !AppIdentityModeUtils.isBus( + FunctionBuildConfig.appIdentityMode + ) tbRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { @@ -1586,50 +1625,6 @@ class DebugSettingView @JvmOverloads constructor( */ @SuppressLint("SetTextI18n") private fun drawAppInfo() { - AppConfigInfo.appName = AppUtils.getAppName() - if (AppConfigInfo.appVersionCode == 0) { - AppConfigInfo.appVersionCode = AppUtils.getAppVersionCode() - } - if (AppConfigInfo.appVersionName.isNullOrEmpty()) { - AppConfigInfo.appVersionName = AppUtils.getAppVersionName() - } - if (AppConfigInfo.appPackageName.isNullOrEmpty()) { - AppConfigInfo.appPackageName = AppUtils.getAppPackageName() - } - if (AppConfigInfo.uniqueDeviceId.isNullOrEmpty()) { - AppConfigInfo.uniqueDeviceId = DeviceIdUtils.getDeviceId(AbsMogoApplication.getApp()) - } - if (AppConfigInfo.widevineIDMd5.isNullOrEmpty()) { - AppConfigInfo.widevineIDMd5 = - DeviceIdUtils.getWidevineIDWithMd5(AbsMogoApplication.getApp()) - } - if (MoGoAiCloudClient.getInstance().aiCloudClientConfig != null) { - AppConfigInfo.mogoSN = MoGoAiCloudClient.getInstance().aiCloudClientConfig.sn - AppConfigInfo.mogoToken = MoGoAiCloudClient.getInstance().aiCloudClientConfig.token - } - - AppConfigInfo.netMode = DebugConfig.getNetMode() - if (MogoMap.getInstance().mogoMap != null) { - AppConfigInfo.mapSdkVersion = MogoMap.getInstance().mogoMap.mapVersion - } - AppConfigInfo.isConnectNet = NetworkUtils.isConnected(context) - AppConfigInfo.isConnectSocket = DebugConfig.isDownloadSnapshot() - - when { - AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) -> {// 司机端 - AppConfigInfo.isDriver = true - AppConfigInfo.isConnectedNetty = CallerTelematicManager.getServerStarted() - } - AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) -> { - AppConfigInfo.isDriver = false - AppConfigInfo.isConnectedNetty = CallerTelematicManager.getClientConnStatus() - AppConfigInfo.serverSn = CallerTelematicManager.getServerToken() - } - else -> { - } - } - AppConfigInfo.teleTimeStamp = CallerAutoPilotManager.getTeleTimeStamp() - /** * 设备绑定关系 */ @@ -1825,16 +1820,14 @@ class DebugSettingView @JvmOverloads constructor( */ override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) { mAutoPilotStatusInfo = autoPilotStatusInfo - AppConfigInfo.isConnectAutopilot = autoPilotStatusInfo.connectStatus - AppConfigInfo.connectStatusDescribe = autoPilotStatusInfo.connectStatusDescribe setAutopilotConnectStatus() } /** * 设置工控机连接状态 */ - private fun setAutopilotConnectStatus(){ - ThreadUtils.runOnUiThread{ + private fun setAutopilotConnectStatus() { + ThreadUtils.runOnUiThread { tvAutopilotConnectStatus.text = Html.fromHtml( "工控机连接状态:${ if (AppConfigInfo.isConnectAutopilot) { @@ -1880,6 +1873,22 @@ class DebugSettingView @JvmOverloads constructor( } } + override fun updateBizData(type: String, state: Boolean, lock: Boolean, data: String?) { + when (type) { + BIZ_BEAUTY_MODE -> tbIsDemoMode.isClickable = !lock + BIZ_RAIN_MODE -> tbIsRainMode.isClickable = !lock + BIZ_WARNING_UPLOAD -> tbReportWarning.isClickable = !lock + BIZ_BAG_RECORD -> { + if (lock) { + btnRecordBag.isClickable = false + } else { + btnRecordBag.isClickable = true + btnRecordBag.requestFocus() + } + } + } + } + override fun onAutopilotCarStateData(gnssInfo: MessagePad.GnssInfo?) { mGnssInfo = gnssInfo //实时加速度列表 @@ -1945,18 +1954,6 @@ class DebugSettingView @JvmOverloads constructor( mRouteInfoSize = globalPathResp?.wayPointsList?.size ?: 0 } - /** - * 工控机基础信息回调 - */ - override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { - carConfigResp.let { - AppConfigInfo.plateNumber = it.plateNumber//车牌号 - AppConfigInfo.iPCMacAddress = it.macAddress//工控机MAC地址 - AppConfigInfo.protocolVersionNumber = it.protocolVersionValue//工控机协议版本 - } - - } - /** * 工控机异常回调 */ @@ -2077,7 +2074,8 @@ class DebugSettingView @JvmOverloads constructor( private fun toastMsg(msg: String) { //当司机屏处于美化(演示)模式、msg为空时不弹吐司 if (!FunctionBuildConfig.isDemoMode && msg.isNotEmpty() - && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) + ) { ToastUtils.showLong(msg) } } @@ -2135,4 +2133,5 @@ class DebugSettingView @JvmOverloads constructor( fun showReportListWindow(show: Boolean) } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/takeover/TakeOverView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/takeover/TakeOverView.kt new file mode 100644 index 0000000000..7c33227f88 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/takeover/TakeOverView.kt @@ -0,0 +1,18 @@ +package com.mogo.eagle.core.function.hmi.ui.takeover + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.hmi.R + +class TakeOverView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + init { + LayoutInflater.from(context).inflate(R.layout.view_take_over, this, true) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index 2dc8c466e2..141becc292 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -229,9 +229,6 @@ class AutoPilotAndCheckView @JvmOverloads constructor( speedLimit = carConfigResp.speedLimit tvAcceleration.text = "加速度 ${carConfigResp.maxAcceleration} m/s²" etInputSpeed.setText((carConfigResp.speedLimit * 3.6).toInt().toString()) - AppConfigInfo.plateNumber = carConfigResp.plateNumber//车牌号 - AppConfigInfo.iPCMacAddress = carConfigResp.macAddress//工控机MAC地址 - AppConfigInfo.protocolVersionNumber = carConfigResp.protocolVersionValue//工控机协议版本 } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index abe6e87ea1..530b2b9c3f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -114,7 +114,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { } SocketBuildConfig.isPrintLog = false; // 初始化DevaTools,开始链路记录 - CallerDevaToolsManager.INSTANCE.init(this); + CallerDevaToolsManager.INSTANCE.init(); } private void initOverviewDb() { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_take_over_request.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_take_over_request.png new file mode 100644 index 0000000000..11b42eaa3d Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi-2560x1440/icon_take_over_request.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml index da8b0411b0..042c7ad3ce 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml @@ -48,6 +48,16 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintTop_toTopOf="@+id/viewLimitingVelocity" + app:layout_goneMarginEnd="40px" + app:layout_goneMarginTop="30px" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index 38e38c551a..13f392ed35 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -1783,6 +1783,44 @@ + + + + + + + + + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_take_over.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_take_over.xml new file mode 100644 index 0000000000..b8612e14f6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_take_over.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml index 4619c517d6..bc1b90f4f5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values-xhdpi-2560x1440/dimens.xml @@ -66,4 +66,7 @@ 40px 46px + 810px + 560px + 524px \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml index 58c932f939..53e5d6676b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml @@ -65,4 +65,8 @@ 42px 40px 46px + + 810px + 560px + 524px \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/collect/MoGoMapDataCollectProvider.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/collect/MoGoMapDataCollectProvider.kt index 6deeeabac3..71daa8d2d2 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/collect/MoGoMapDataCollectProvider.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/impl/collect/MoGoMapDataCollectProvider.kt @@ -153,7 +153,7 @@ class MoGoMapDataCollectProvider : IMoGoMapDataCollectProvider, OnTaskListener, executor.get()?.updateLocation( location.longitude, location.latitude, - location.altitude, + location.altitude, location.bearing, location.speed, location.provider == "GPS_RTK") diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapPointCloudSubscriber.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapPointCloudSubscriber.kt index 7617da5cc4..f49b4d1804 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapPointCloudSubscriber.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/MapPointCloudSubscriber.kt @@ -5,7 +5,8 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPointCloudListener import com.mogo.eagle.core.function.api.base.IMoGoSubscriber import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPointCloudListenerManager -import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP import com.zhidaoauto.map.sdk.open.business.PointCloudHelper import java.math.BigDecimal @@ -44,7 +45,7 @@ class MapPointCloudSubscriber private constructor() try {// 根据配置动态控制点云是否绘制 if (FunctionBuildConfig.isDrawPointCloudData && isDrawCloudPointDockerVersion()) { if (!isDrawPointCloud) { - Logger.d(TAG, "====开启点云渲染====") + CallerLogger.d(M_MAP + TAG, "====开启点云渲染====") isDrawPointCloud = true PointCloudHelper.setIsDrawPointCloud(true)//打开点云绘制 } @@ -58,12 +59,12 @@ class MapPointCloudSubscriber private constructor() * @param isStrong 是否加粗显示 * @return 是否执行 */ - Logger.d(TAG, "====开始传入地图点云数据====") + CallerLogger.d(M_MAP + TAG, "====开始传入地图点云数据====") val result = PointCloudHelper.updatePointCloudDataByPb(pointCloud, true, false, false) - Logger.d(TAG, "====结束传入地图点云数据=====$result") + CallerLogger.d(M_MAP + TAG, "====结束传入地图点云数据=====$result") } else { if (isDrawPointCloud) { - Logger.d(TAG, "====停止点云绘制====") + CallerLogger.d(M_MAP + TAG, "====停止点云绘制====") isDrawPointCloud = false PointCloudHelper.setIsDrawPointCloud(false)//停止点云绘制 } diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt index e7cfcaa6dd..08e3bebcb4 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt @@ -21,6 +21,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.module.common.drawer.TrafficMarkerDrawer import com.mogo.module.common.enums.EventTypeEnum +import com.mogo.module.common.enums.EventTypeHelper import com.mogo.service.IMogoServiceApis import com.zhidao.support.obu.MogoObuManager import com.zhidao.support.obu.OnMogoObuListener @@ -53,7 +54,8 @@ class MogoPrivateObuManager private constructor() { mContext = context connectObu(context, ipAddress) //控制日志输出 - MogoObuManager.getInstance().init(MoGoAiCloudClientConfig.getInstance().getSn(), AppConfigInfo.toString()) + MogoObuManager.getInstance() + .init(MoGoAiCloudClientConfig.getInstance().getSn(), AppConfigInfo.toString()) MogoObuManager.getInstance().registerListener(mogoObuListener) } @@ -111,7 +113,10 @@ class MogoPrivateObuManager private constructor() { // 接收到的原始数据 override fun onReceiveOriginData(data: String) { super.onReceiveOriginData(data) - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onReceiveOriginData ------> data = $data") + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onReceiveOriginData ------> data = $data" + ) } @@ -124,7 +129,10 @@ class MogoPrivateObuManager private constructor() { // CV2X系统信息 override fun onCvxAppInitIndInfo(info: CvxAppInitIndInfo) { super.onCvxAppInitIndInfo(info) - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxAppInitIndInfo ------> $info") + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxAppInitIndInfo ------> $info" + ) if (info != null) { if (!info.stack_info.isNullOrEmpty()) { mObuStatusInfo.stackInfo = info.stack_info @@ -176,7 +184,11 @@ class MogoPrivateObuManager private constructor() { // 同步给MAP地图 CallerMapUIServiceManager.getMapUIController()?.syncLocation2Map(data) // 同步更新经纬度和系统时间至 AutoPilotStatusListener - CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon(System.currentTimeMillis()/1000.0,position.longitude, position.latitude) + CallerAutoPilotStatusListenerManager.updateAutoPilotLatLon( + System.currentTimeMillis() / 1000.0, + position.longitude, + position.latitude + ) } } catch (e: Exception) { @@ -200,7 +212,10 @@ class MogoPrivateObuManager private constructor() { // (3) 道路事件预警信息:CVX_RTI_THREAT_IND override fun onCvxRtiThreatIndInfo(info: CvxRtiThreatIndInfo?) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxRtiThreatIndInfo ------> $info") + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxRtiThreatIndInfo ------> $info" + ) if (info != null && info.threat_info != null && info.ext_info != null) { var alertContent = "" @@ -211,12 +226,12 @@ class MogoPrivateObuManager private constructor() { val direction = getMessageDirection(if (info.ext_info != null) info.ext_info.pos_classification else -1) CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxRtiThreatIndInfo direction = $direction -- pos_classification = ${info.ext_info.pos_classification}" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxRtiThreatIndInfo direction = $direction -- pos_classification = ${info.ext_info.pos_classification}" ) CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxRtiThreatIndInfo appId = $appId --status = $status --level = $level -- handleDirection = $direction --rtiType = ${info.ext_info.rti_type} --direction = $direction -- pos_classification = ${info.ext_info.pos_classification} " + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxRtiThreatIndInfo appId = $appId --status = $status --level = $level -- handleDirection = $direction --rtiType = ${info.ext_info.rti_type} --direction = $direction -- pos_classification = ${info.ext_info.pos_classification} " ) when (appId) { // 道路危险情况预警 @@ -232,13 +247,13 @@ class MogoPrivateObuManager private constructor() { WarningDirectionEnum.ALERT_WARNING_TOP_LEFT, WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT -> { appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType + EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_LEFT_SHARP.poiType } WarningDirectionEnum.ALERT_WARNING_RIGHT, WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT, WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT -> { appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType + EventTypeEnum.TYPE_USECASE_ID_ROAD_TURN_RIGHT_SHARP.poiType } } } @@ -253,7 +268,7 @@ class MogoPrivateObuManager private constructor() { //事故 0xC -> { appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType + EventTypeEnum.TYPE_USECASE_ID_ROAD_COLLISION_WARNING.poiType } //拥堵 0xD -> { @@ -262,7 +277,7 @@ class MogoPrivateObuManager private constructor() { //行人 0xF -> { appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType + EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType } //禁止停车 0x13 -> { @@ -271,7 +286,7 @@ class MogoPrivateObuManager private constructor() { //学校 0x14 -> { appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType + EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_SCHOOL.poiType } //桥梁 0x17 -> { @@ -284,7 +299,7 @@ class MogoPrivateObuManager private constructor() { //人行横道 0x19 -> { appId = - EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType + EventTypeEnum.TYPE_USECASE_ID_ROAD_PEDESTRIAN_CROSSING.poiType } //减速慢行 0x1A -> { @@ -315,13 +330,13 @@ class MogoPrivateObuManager private constructor() { ttsContent = EventTypeEnum.getWarningTts(appId) if (info.threat_info != null) { CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "ttsContent = $ttsContent --alertContent = $alertContent ---info.threat_info.distance = ${info.threat_info.distance} " + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "ttsContent = $ttsContent --alertContent = $alertContent ---info.threat_info.distance = ${info.threat_info.distance} " ) if (info.threat_info.distance.toInt() != 0) { alertContent = String.format( - EventTypeEnum.getWarningContent(appId), - info.threat_info.distance.toInt() + EventTypeEnum.getWarningContent(appId), + info.threat_info.distance.toInt() ) } else { alertContent = "前方拥堵,减速慢行" @@ -329,8 +344,8 @@ class MogoPrivateObuManager private constructor() { } CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "ttsContent = $ttsContent --alertContent = $alertContent" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "ttsContent = $ttsContent --alertContent = $alertContent" ) } } @@ -344,18 +359,19 @@ class MogoPrivateObuManager private constructor() { // CallerHmiManager.showWarning(direction) //显示弹框,语音提示 - CallerHmiManager.showWarningV2X(appId, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 - object : IMoGoWarningStatusListener { - override fun onDismiss() { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - } - }, - true, - 5000L + CallerHmiManager.showWarningV2X( + appId, + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + object : IMoGoWarningStatusListener { + override fun onDismiss() { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + } + }, + true, + 5000L ) // 更新数据 TrafficDataConvertUtils.cvxRtiThreatIndInfo2TrafficData(info)?.let { @@ -384,7 +400,10 @@ class MogoPrivateObuManager private constructor() { // (4) V2I预警信息:CVX_IVP_THREAT_IND,红绿灯 override fun onCvxIvpThreatIndInfo(info: CvxIvpThreatIndInfo?) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "CvxIvpThreatIndInfo ------> $info") + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "CvxIvpThreatIndInfo ------> $info" + ) if (info != null && info.ext_info != null && info.threat_info != null && info.ext_info.lights != null @@ -404,17 +423,20 @@ class MogoPrivateObuManager private constructor() { // ) handlerTrafficLight( - info.threat_info.app_id, - info.status, - info.ext_info.lights, - info.ext_info.index + info.threat_info.app_id, + info.status, + info.ext_info.lights, + info.ext_info.index ) } } // (2) 弱势交通参与者预警信息:CVX_PTC_THREAT_IND override fun onCvxPtcThreatIndInfo(info: CvxPtcThreatIndInfo?) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxPtcInfoIndInfo ------> $info") + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxPtcInfoIndInfo ------> $info" + ) // 交通参与者类型 0x0:未知 UNKNOWN | 0x1:非机动车 NON_MOTOR | 0x2:行人 PEDESTRIAN 0x3:RSU if (info != null && (info.ptc_type == 1 || info.ptc_type == 2)) { //v2i数据传输延迟 @@ -431,8 +453,8 @@ class MogoPrivateObuManager private constructor() { // ) CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxPtcInfoIndInfo ---status---> ${info.status}" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxPtcInfoIndInfo ---status---> ${info.status}" ) var v2xType = "" if (info.ptc_type == 1) { //摩托车 @@ -454,18 +476,19 @@ class MogoPrivateObuManager private constructor() { // if (level == 2 || level == 3) { //不考虑level //显示警告红边 CallerHmiManager.showWarning(direction) - CallerHmiManager.showWarningV2X(v2xType, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (v2xType + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 - object : IMoGoWarningStatusListener { - override fun onDismiss() { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - } - }, - true, - 5000L + CallerHmiManager.showWarningV2X( + v2xType, + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + (v2xType + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + object : IMoGoWarningStatusListener { + override fun onDismiss() { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + } + }, + true, + 5000L ) // } // 更新数据 @@ -523,22 +546,26 @@ class MogoPrivateObuManager private constructor() { // (1) V2V预警信息:CVX_V2V_THREAT_IND override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo?) { - CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxV2vThreatIndInfo ------> $info") + CallerLogger.d( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxV2vThreatIndInfo ------> $info" + ) info?.let { //预警信息,预警类型 threat_level 2、3 info.threat_info?.let { //预警方位 - val direction = getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) + val direction = + getMessageDirection(if (info.ext_info != null) info.ext_info.target_classification else -1) //处理预警类型 val appId = info.threat_info.app_id val level = info.threat_info.threat_level val status = info.status if (info.ext_info != null) { CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "onCvxV2vThreatIndInfo target_classification = ${ - getMessageDirection(info.ext_info.target_classification) - } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxV2vThreatIndInfo target_classification = ${ + getMessageDirection(info.ext_info.target_classification) + } --- direction = $direction --- appId = $appId ---level = $level -- status = $status" ) } @@ -604,8 +631,8 @@ class MogoPrivateObuManager private constructor() { */ private fun handlerTrafficLight(appId: Int, status: Int, lights: List, index: Int) { CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "handlerTrafficLight appId = $appId --- status = $status ---index = $index ---lights.size = ${lights.size} ---lights = $lights " + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "handlerTrafficLight appId = $appId --- status = $status ---index = $index ---lights.size = ${lights.size} ---lights = $lights " ) when (status) { // 添加 @@ -631,9 +658,9 @@ class MogoPrivateObuManager private constructor() { */ @Synchronized private fun changeTrafficLightStatus( - appId: Int, - lights: List, - index: Int + appId: Int, + lights: List, + index: Int ) { var ttsContent = "" var alertContent = "" @@ -641,8 +668,8 @@ class MogoPrivateObuManager private constructor() { if (index != -1 && lights.size >= index) { val currentLight = lights[index] CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "currentLight = $currentLight ---currentLight.phase = ${currentLight.phase} ---rlvw_violation_type = ${currentLight.rlvw_violation_type} --- index = $index ---appId = $appId ---appId = $appId" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "currentLight = $currentLight ---currentLight.phase = ${currentLight.phase} ---rlvw_violation_type = ${currentLight.rlvw_violation_type} --- index = $index ---appId = $appId ---appId = $appId" ) // 闯红灯预警 when (currentLight.rlvw_violation_type) { @@ -655,8 +682,8 @@ class MogoPrivateObuManager private constructor() { ttsContent = EventTypeEnum.getWarningTts(appId.toString()) alertContent = EventTypeEnum.getWarningContent(appId.toString()) CallerHmiManager.showWarningV2X( - appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - appId.toString(), null, true, 5000L + appId.toString(), alertContent, ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + appId.toString(), null, true, 5000L ) } 0x3 -> {//闯黄灯 V2I_RLVW_VIOLATION_TYPE_RUNNING_YELLOW_LIGHT @@ -666,7 +693,7 @@ class MogoPrivateObuManager private constructor() { when (currentLight.phase) { // 灯光不可用 0x0 -> { - CallerHmiManager.showWarningTrafficLight(0,2) + CallerHmiManager.showWarningTrafficLight(0, 2) } // 红灯 0x1 -> { @@ -675,7 +702,7 @@ class MogoPrivateObuManager private constructor() { isRedLight = true } isGreenLight = false - CallerHmiManager.showWarningTrafficLight(1,2) + CallerHmiManager.showWarningTrafficLight(1, 2) val red = currentLight.count_down.toInt() CallerHmiManager.changeCountdownRed(red) @@ -690,7 +717,7 @@ class MogoPrivateObuManager private constructor() { isGreenLight = true } isRedLight = false - CallerHmiManager.showWarningTrafficLight(3,2) + CallerHmiManager.showWarningTrafficLight(3, 2) val green = currentLight.count_down.toInt() CallerHmiManager.changeCountdownGreen(green) //防止数据出现问题的容错 @@ -698,44 +725,44 @@ class MogoPrivateObuManager private constructor() { CallerHmiManager.changeCountdownYellow(0) // 拼接建议速度 CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "speed_min = ${currentLight.glosa_suggested_speed_min} --speed_max = ${currentLight.glosa_suggested_speed_max.toInt()}" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "speed_min = ${currentLight.glosa_suggested_speed_min} --speed_max = ${currentLight.glosa_suggested_speed_max.toInt()}" ) val adviceSpeed = - "${currentLight.glosa_suggested_speed_min.toInt()} - ${currentLight.glosa_suggested_speed_max.toInt()}" + "${currentLight.glosa_suggested_speed_min.toInt()} - ${currentLight.glosa_suggested_speed_max.toInt()}" val adviceSpeedTts = - "${currentLight.glosa_suggested_speed_min.toInt()}到${currentLight.glosa_suggested_speed_max.toInt()}" + "${currentLight.glosa_suggested_speed_min.toInt()}到${currentLight.glosa_suggested_speed_max.toInt()}" ttsContent = - String.format( - EventTypeEnum.getWarningTts(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), - adviceSpeedTts - ) + String.format( + EventTypeEnum.getWarningTts(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), + adviceSpeedTts + ) alertContent = - String.format( - EventTypeEnum.getWarningContent(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), - adviceSpeed - ) + String.format( + EventTypeEnum.getWarningContent(EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType), + adviceSpeed + ) val maxSpeed = currentLight.glosa_suggested_speed_max.toInt() if (maxSpeed > 0) { CallerHmiManager.showWarningV2X( - EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType, - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - appId.toString(), - null, - true, - 5000L + EventTypeEnum.TYPE_USECASE_ID_IVP_GREEN.poiType, + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + appId.toString(), + null, + true, + 5000L ) } } // 黄灯 0x3 -> { CallerHmiManager.disableWarningV2X(appId.toString()) - CallerHmiManager.showWarningTrafficLight(2,2) + CallerHmiManager.showWarningTrafficLight(2, 2) val yellow = currentLight.count_down.toInt() CallerHmiManager.changeCountdownYellow(yellow) CallerHmiManager.changeCountdownGreen(0) @@ -747,6 +774,7 @@ class MogoPrivateObuManager private constructor() { } + //todo 二期优化此处内容,注解参数 /** * 构造对应展示数据和场景 根据obu的场景,add change delete确定是否展示 * @@ -755,86 +783,76 @@ class MogoPrivateObuManager private constructor() { * @see com.mogo.module.common.enums.EventTypeEnum */ private fun handleSdkObu( - appId: Int, - direction: WarningDirectionEnum, - status: Int, - level: Int, - info: CvxV2vThreatIndInfo + appId: Int, + direction: WarningDirectionEnum, + status: Int, + level: Int, + info: CvxV2vThreatIndInfo ) { // 这里排除需要特殊定制的语音及文案外,其余的都可以使用 EventTypeEnum 提供的 CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "handleSdkObu appId = $appId --- handleDirection = $direction ---level = $level ---status = $status" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "handleSdkObu appId = $appId --- handleDirection = $direction ---level = $level ---status = $status" ) - var alertContent: String - var ttsContent: String + var alertContent: String? = null + var ttsContent: String? = null var changeVisualAngle = false when (appId.toString()) { // 变道预警,注意左后车辆/注意右后车辆 EventTypeEnum.TYPE_USECASE_ID_LCW.poiType -> { - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) - if ( - direction == WarningDirectionEnum.ALERT_WARNING_LEFT || - direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || - direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT - ) { - ttsContent = String.format(ttsContent, "左") - alertContent = String.format(alertContent, "左") - } else if ( - direction == WarningDirectionEnum.ALERT_WARNING_RIGHT || - direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || - direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT - ) { - ttsContent = String.format(ttsContent, "右") - alertContent = String.format(alertContent, "右") + EventTypeHelper.getLCW(appId, direction) { alert, tts -> + alertContent = alert + ttsContent = tts } } - //车辆失控预警 EventTypeEnum.TYPE_USECASE_ID_CLW.poiType -> { - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) - - alertContent = String.format(alertContent, direction.desc) - ttsContent = String.format(ttsContent, direction.desc) + EventTypeHelper.getCLW(appId, direction) { alert, tts -> + alertContent = alert + ttsContent = tts + } } - //左转辅助 EventTypeEnum.TYPE_USECASE_ID_LTA.poiType -> { - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) + EventTypeHelper.getLTA(appId) { alert, tts -> + alertContent = alert + ttsContent = tts + } } - //异常车辆提醒 EventTypeEnum.TYPE_USECASE_ID_AVW.poiType -> { - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) - alertContent = String.format(alertContent, direction.desc) - ttsContent = String.format(ttsContent, direction.desc) + EventTypeHelper.getAVW(appId, direction) { alert, tts -> + alertContent = alert + ttsContent = tts + } } - //盲区预警 EventTypeEnum.TYPE_USECASE_ID_BSW.poiType -> { - ttsContent = EventTypeEnum.getWarningTts(appId.toString()) - alertContent = EventTypeEnum.getWarningContent(appId.toString()) - - if ( - direction == WarningDirectionEnum.ALERT_WARNING_LEFT || - direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT || - direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT - ) { //左后 - changeVisualAngle = true - ttsContent = String.format(ttsContent, "左") - alertContent = String.format(alertContent, "左") - } else if ( - direction == WarningDirectionEnum.ALERT_WARNING_RIGHT || - direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT || - direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT - ) { //右后 - changeVisualAngle = true - ttsContent = String.format(ttsContent, "右") - alertContent = String.format(alertContent, "右") + EventTypeHelper.getBSW(appId, direction) { alert, tts, visualAngle -> + alertContent = alert + ttsContent = tts + changeVisualAngle = visualAngle + } + } + //前车急刹预警 + EventTypeEnum.TYPE_USECASE_ID_EBW.poiType -> { + EventTypeHelper.getEBW(appId){ alert ,tts -> + alertContent = alert + ttsContent = tts + } + } + //前向碰撞预警 + EventTypeEnum.TYPE_USECASE_ID_FCW.poiType -> { + EventTypeHelper.getFCW(appId){ alert ,tts -> + alertContent = alert + ttsContent = tts + } + } + //逆向超车预警 + EventTypeEnum.TYPE_USECASE_ID_DNPW.poiType -> { + EventTypeHelper.getDNPW(appId){ alert ,tts -> + alertContent = alert + ttsContent = tts } } @@ -850,34 +868,35 @@ class MogoPrivateObuManager private constructor() { ObuConstants.STATUS.ADD, ObuConstants.STATUS.UPDATE -> { CallerLogger.d( - "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", - "appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "appId2 = $appId --- level = $level ---ttsContent = $ttsContent --- alertContent = $alertContent --- direction = $direction" ) if (level == 2 || level == 3) { //显示弹框,语音提示 - CallerHmiManager.showWarningV2X(appId.toString(), - alertContent, - ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 - (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 - object : IMoGoWarningStatusListener { + CallerHmiManager.showWarningV2X( + appId.toString(), + alertContent, + ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒 + (appId + direction.direction).toString(),//使用当前事件类型+方向记录tag,当发生变化的时候关闭当前弹出新的 + object : IMoGoWarningStatusListener { - override fun onShow() { - super.onShow() - if (changeVisualAngle) { - CallerVisualAngleManager.changeVisualAngle(TooClose) - } + override fun onShow() { + super.onShow() + if (changeVisualAngle) { + CallerVisualAngleManager.changeVisualAngle(TooClose) } + } - override fun onDismiss() { - // 关闭警告红边 - CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) - if (changeVisualAngle) { - CallerVisualAngleManager.changeVisualAngle(Default()) - } + override fun onDismiss() { + // 关闭警告红边 + CallerHmiManager.showWarning(WarningDirectionEnum.ALERT_WARNING_NON) + if (changeVisualAngle) { + CallerVisualAngleManager.changeVisualAngle(Default()) } - }, - true, - 5000L + } + }, + true, + 5000L ) //显示警告红边 CallerHmiManager.showWarning(direction) diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt index ae8c70fe1e..a01193f381 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/V2XEventManager.kt @@ -59,6 +59,7 @@ import com.mogo.module.common.entity.* import com.mogo.module.common.entity.V2XMessageEntity.V2XTypeEnum import com.mogo.module.common.enums.EventTypeEnum import com.mogo.module.common.enums.EventTypeEnum.FOURS_BLOCK_UP +import com.mogo.module.common.enums.EventTypeHelper import com.mogo.service.statusmanager.IMogoStatusChangedListener import com.mogo.service.statusmanager.StatusDescriptor import com.mogo.service.statusmanager.StatusDescriptor.ACC_STATUS @@ -525,70 +526,78 @@ object V2XEventManager : IMoGoMapLocationListener, IMoGoTokenCallback, IV2XCallb var changeVisualAngle = false when (message.status) { 1 -> { - var tts = "" - var content = "" - var appId = 0 + var tempAppId = 0 + var tempTts = "" + var tempContent = "" when (message.typeId) { 1001 -> { // 弱势交通碰撞预警 - appId = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType.toInt() - tts = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.tts - content = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.content + EventTypeHelper.getVRU{ appId, tts, content -> + tempAppId = appId + tempTts = tts + tempContent = content + } } 1002 -> { // 弱势交通逆行预警 - appId = EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType.toInt() - tts = "行人逆行预警" - content = "行人逆行预警" + EventTypeHelper.getVRURI { appId, tts, content -> + tempAppId = appId + tempTts = tts + tempContent = content + } } 1003 -> { // 交叉路口碰撞预警 changeVisualAngle = true - appId = EventTypeEnum.TYPE_USECASE_ID_ICW.poiType.toInt() - tts = EventTypeEnum.TYPE_USECASE_ID_ICW.tts - content = EventTypeEnum.TYPE_USECASE_ID_ICW.content + tempAppId = EventTypeEnum.TYPE_USECASE_ID_ICW.poiType.toInt() + tempTts = EventTypeEnum.TYPE_USECASE_ID_ICW.tts + tempContent = EventTypeEnum.TYPE_USECASE_ID_ICW.content } 1004 -> { // 交叉路口碰撞预警 changeVisualAngle = true - appId = EventTypeEnum.TYPE_USECASE_ID_BSW.poiType.toInt() - tts = String.format( + tempAppId = EventTypeEnum.TYPE_USECASE_ID_BSW.poiType.toInt() + tempTts = String.format( EventTypeEnum.TYPE_USECASE_ID_BSW.tts, getWarningDirection() ) - content = EventTypeEnum.TYPE_USECASE_ID_BSW.content + tempContent = EventTypeEnum.TYPE_USECASE_ID_BSW.content } 1006 -> { // 逆向超车预警 - appId = EventTypeEnum.TYPE_USECASE_ID_DNPW.poiType.toInt() - tts = EventTypeEnum.TYPE_USECASE_ID_DNPW.tts - content = EventTypeEnum.TYPE_USECASE_ID_DNPW.content + tempAppId = EventTypeEnum.TYPE_USECASE_ID_DNPW.poiType.toInt() + tempTts = EventTypeEnum.TYPE_USECASE_ID_DNPW.tts + tempContent = EventTypeEnum.TYPE_USECASE_ID_DNPW.content } 1005 -> { // 闯红灯预警 - appId = EventTypeEnum.TYPE_USECASE_ID_IVP.poiType.toInt() - tts = EventTypeEnum.TYPE_USECASE_ID_IVP.tts - content = EventTypeEnum.TYPE_USECASE_ID_IVP.content + tempAppId = EventTypeEnum.TYPE_USECASE_ID_IVP.poiType.toInt() + tempTts = EventTypeEnum.TYPE_USECASE_ID_IVP.tts + tempContent = EventTypeEnum.TYPE_USECASE_ID_IVP.content } 2001 -> { // 最优车道 - appId = EventTypeEnum.TYPE_USECASE_OPTIMAL_LANE.poiType.toInt() - tts = EventTypeEnum.TYPE_USECASE_OPTIMAL_LANE.tts - content = EventTypeEnum.TYPE_USECASE_OPTIMAL_LANE.content + EventTypeHelper.getOptLine{ appId, tts, content -> + tempAppId = appId + tempTts = tts + tempContent = content + } } 3001 -> { // 前方道路拥堵预警 - appId = FOURS_BLOCK_UP.poiType.toInt() - tts = FOURS_BLOCK_UP.tts - content = FOURS_BLOCK_UP.content + EventTypeHelper.getTJW{ appId, tts, content -> + tempAppId = appId + tempTts = tts + tempContent = content + } } } // 显示弹框,语音提示 CallerHmiManager.showWarningV2X( - appId.toString(), - content, - tts, - "$appId", + tempAppId.toString(), + tempContent, + tempTts, + "$tempAppId", object : IMoGoWarningStatusListener { val change = changeVisualAngle override fun onShow() { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventScenario.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventScenario.java index 3fd4d1dcaa..9b6d11fc98 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventScenario.java +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/events/scenario/scene/road/V2XRoadEventScenario.java @@ -12,7 +12,7 @@ import com.mogo.eagle.core.function.v2x.events.manager.V2XStatusManager; import com.mogo.eagle.core.function.v2x.events.scenario.impl.AbsV2XScenario; import com.mogo.eagle.core.function.v2x.events.scenario.view.IV2XMarker; import com.mogo.eagle.core.network.utils.GsonUtil; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.common.entity.V2XRoadEventEntity; @@ -41,7 +41,7 @@ public class V2XRoadEventScenario extends AbsV2XScenario imp @Override public void init(V2XMessageEntity v2XMessageEntity) { try { - Logger.d(M_V2X + TAG, "v2XMessageEntity:" + GsonUtil.jsonFromObject(v2XMessageEntity)); + CallerLogger.INSTANCE.d(M_V2X + TAG, "v2XMessageEntity:" + GsonUtil.jsonFromObject(v2XMessageEntity)); V2XRoadEventEntity v2XRoadEventEntity = v2XMessageEntity.getContent(); if (v2XRoadEventEntity != null) { if (v2XMessageEntity.isShowState()) { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/redlightwarning/RedLightWarningManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/redlightwarning/RedLightWarningManager.kt index feb8c877d3..66acaf96d6 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/redlightwarning/RedLightWarningManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/redlightwarning/RedLightWarningManager.kt @@ -1,6 +1,9 @@ package com.mogo.eagle.core.function.v2x.redlightwarning import android.location.Location +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_IVP +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_IVP_GREEN +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X import com.mogo.eagle.core.data.map.MogoLatLng import com.mogo.eagle.core.data.trafficlight.* @@ -16,6 +19,7 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.map.navi.IMogoCarLocationChangedListener2 import com.mogo.module.common.MogoApisHandler import com.mogo.module.common.enums.EventTypeEnum +import com.zhjt.service_biz.BizConfig import kotlin.math.abs import kotlin.math.ceil import kotlin.math.floor @@ -162,6 +166,7 @@ class RedLightWarningManager : IMoGoTrafficLightListener, IMoGoVipSetListener, /** * 闯红灯预警 */ + @BizConfig(V2I,"",BIZ_IVP) private fun redLightWarning() { CallerLogger.d("$M_V2X$TAG", "=====闯红灯预警=====") ThreadUtils.runOnUiThread { @@ -172,6 +177,7 @@ class RedLightWarningManager : IMoGoTrafficLightListener, IMoGoVipSetListener, /** * 绿灯通行提示 */ + @BizConfig(V2I,"",BIZ_IVP_GREEN) private fun greenLightWarning(speed: String = "50") { CallerLogger.d("$M_V2X$TAG", "=====绿灯通行预警=====") ThreadUtils.runOnUiThread { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightProvider.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightProvider.kt index 75e8dc18e8..69ca7b4ad7 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightProvider.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightProvider.kt @@ -3,6 +3,7 @@ package com.mogo.eagle.core.function.v2x.trafficlight 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.data.trafficlight.TrafficLightControl import com.mogo.eagle.core.data.trafficlight.TrafficLightDetail import com.mogo.eagle.core.function.api.trafficlight.ITrafficLightProvider import com.mogo.eagle.core.function.v2x.trafficlight.TrafficLightConst.Companion.MODULE_NAME @@ -31,7 +32,7 @@ class TrafficLightProvider : ITrafficLightProvider { crossingNo: String, heading: Double, controlTime: Int, - onSuccess: (() -> Unit), + onSuccess: ((TrafficLightControl) -> Unit), onError: ((String) -> Unit) ) { return MogoTrafficLightManager.INSTANCE.turnLightToGreen( diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt index 9911a3b99c..96f39e2222 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/core/MogoTrafficLightManager.kt @@ -4,11 +4,8 @@ import android.content.Context import android.location.Location import android.os.Handler import android.os.Looper +import com.mogo.eagle.core.data.trafficlight.* import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X -import com.mogo.eagle.core.data.trafficlight.RoadIDResult -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.CallerTrafficLightListenerManager @@ -159,7 +156,7 @@ class MogoTrafficLightManager : IMogoCarLocationChangedListener2 { crossingNo: String, heading: Double, controlTime: Int, - onSuccess: (() -> Unit), + onSuccess: ((TrafficLightControl) -> Unit), onError: ((String) -> Unit) ) { trafficLightNetWorkModel.turnLightToGreen( diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightApiService.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightApiService.kt index d498cfa27d..7670e34c35 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightApiService.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightApiService.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.v2x.trafficlight.network import com.mogo.eagle.core.data.BaseResponse import com.mogo.eagle.core.data.trafficlight.RoadIDResult +import com.mogo.eagle.core.data.trafficlight.TrafficLightControl import com.mogo.eagle.core.data.trafficlight.TrafficLightResult import retrofit2.http.FieldMap import retrofit2.http.FormUrlEncoded @@ -22,6 +23,6 @@ interface TrafficLightApiService { //变灯 @FormUrlEncoded @POST("mec-etl-server/light/bdg/newTask") - suspend fun changeLight(@FieldMap turnLight: Map): BaseResponse + suspend fun changeLight(@FieldMap turnLight: Map): BaseResponse } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightNetWorkModel.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightNetWorkModel.kt index 04c61374d9..f9a30eeb9a 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightNetWorkModel.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/network/TrafficLightNetWorkModel.kt @@ -107,10 +107,10 @@ class TrafficLightNetWorkModel { crossingNo: String, heading: Double, controlTime: Int, - onSuccess: (() -> Unit), + onSuccess: ((TrafficLightControl) -> Unit), onError: ((String) -> Unit) ) { - request> { + request> { val map = hashMapOf() start { val trafficLightRequestData = @@ -124,7 +124,7 @@ class TrafficLightNetWorkModel { } } onSuccess { - onSuccess.invoke() + onSuccess.invoke(it.result) } onError { if (it.message != null) { diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt index 7b8c2410c1..998d98c934 100644 --- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt +++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/vip/VipCarManager.kt @@ -1,28 +1,32 @@ package com.mogo.eagle.core.function.v2x.vip import android.content.Context -import android.location.Location import android.os.Handler import android.os.Looper import android.os.Message +import com.mogo.aicloud.services.socket.IMogoOnMessageListener import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager -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.* +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_VIP +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2N +import com.mogo.eagle.core.data.trafficlight.TrafficLightResult +import com.mogo.eagle.core.data.trafficlight.currentRoadTrafficLight +import com.mogo.eagle.core.data.trafficlight.isGreen import com.mogo.eagle.core.data.v2x.VipMessage 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.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.call.vip.CallVipSetListenerManager import com.mogo.eagle.core.function.v2x.trafficlight.core.MogoTrafficLightManager import com.mogo.eagle.core.function.v2x.vip.network.VipNetWorkModel +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.mogo.module.common.enums.EventTypeEnum -import com.mogo.aicloud.services.socket.IMogoOnMessageListener -import kotlin.math.abs +import com.zhjt.service_biz.BizConfig class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListener, Handler.Callback { @@ -39,16 +43,13 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe } private var mContext: Context? = null - private var mLocation: Location? = null - private var turnLightFirst = false - private var turnLightEnd = true + private var turnLight = false private var vip: Boolean = false @Volatile private var exit: Boolean = false private var result: TrafficLightResult? = null - private var lastResult: TrafficLightStatus? = null private val vipNetWorkModel = VipNetWorkModel() private val handler = Handler(Looper.getMainLooper(), this) @@ -78,6 +79,7 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe return VipMessage::class.java } + @BizConfig(V2N, "", BIZ_VIP) override fun onMsgReceived(vipMessage: VipMessage?) { CallerLogger.d("$M_V2X$TAG", "onMsgReceived vipMessage : ${vipMessage.toString()}") vipMessage?.let { @@ -111,68 +113,34 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe if (trafficLightResult.currentRoadTrafficLight() == null) { CallerLogger.d( "$M_V2X$TAG", - "vip 获取到灯态,但没找到对应车道数据 result : $trafficLightResult , then resetConditions" + "vip 获取到灯态,但没找到对应车道数据 trafficLightResult : $trafficLightResult , then resetConditions" ) resetConditions() return } val currentResult = trafficLightResult.currentRoadTrafficLight() - lastResult = result?.currentRoadTrafficLight() + val lastResult = result?.currentRoadTrafficLight() CallerLogger.d( "$M_V2X$TAG", - "检查是否变灯 last.remain : ${lastResult?.remain} , color : ${lastResult?.color} , current.remain : ${currentResult?.remain} , color : ${currentResult?.color}, turnLightFirst : $turnLightFirst" + "检查是否变灯 last.remain : ${lastResult?.remain} , color : ${lastResult?.color} , current.remain : ${currentResult?.remain} , color : ${currentResult?.color}, turnLight : $turnLight" ) this.result = trafficLightResult - lastResult?.let { - //如果上次结果和本次灯态结果变化比较大,则已变灯,控制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, - 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 - ) - } - } - - - if (!turnLightFirst) { + if (!turnLight) { // 首次判断,变灯 - turnLightFirst = true + turnLight = true val controlTime = if (currentResult!!.isGreen()) 45 - currentResult.remain else 45 CallerLogger.d("$M_V2X$TAG", "触发变灯 , controlTime : $controlTime") turnLight(controlTime) } - //可作为补偿措施,暂不启用 -// mLocation?.let { -// if (canGetThroughCross(it, trafficLightResult)) { -// turnLight() -// } -// } } private fun resetConditions() { - turnLightFirst = false - turnLightEnd = true + turnLight = false result = null - lastResult = null } private fun setVip(cancelDelayTime: Long) { @@ -192,32 +160,13 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe if (handler.hasMessages(MSG_WHAT_VIP_CANCEL)) { handler.removeMessages(MSG_WHAT_VIP_CANCEL) } + resetConditions() CallerHmiManager.vipIdentification(false) CallVipSetListenerManager.invokeVipSetStatus(false) CallerTrafficLightListenerManager.unRegisterTrafficLightListener(TAG) CallerTrafficLightListenerManager.unRegisterEnterCrossRoadListener(TAG) } - private fun canGetThroughCross( - it: Location, - trafficLightResult: TrafficLightResult - ): Boolean { - return if (CoordinateUtils.calculateLineDistance( - it.longitude, - it.latitude, - trafficLightResult.lon, - trafficLightResult.lat - ) < 20 - && turnLightEnd - && trafficLightResult.laneList.mid.turnRedAtOnce() - ) { - turnLightEnd = false - false - } else { - true - } - } - private fun requestVip() { vipNetWorkModel.requestVip({ if (handler.hasMessages(MSG_WHAT_VIP_SEARCH)) { @@ -245,20 +194,65 @@ class VipCarManager : IMogoOnMessageListener, IMoGoTrafficLightListe if (result == null || mContext == null) return val locationClient = CallerMapUIServiceManager.getSingletonLocationClient(mContext!!) if (locationClient != null) { - var bearing = + val bearing = locationClient.lastKnowLocation.bearing.toDouble() - CallerLogger.d("$M_V2X$TAG", "turnLight -- bearing : $bearing") + CallerLogger.d("$M_V2X$TAG", "-- turnLight -- ") MogoTrafficLightManager.INSTANCE.turnLightToGreen( result!!.lightId, result!!.crossId, bearing, controlTime, { - CallerLogger.d("$M_V2X$TAG", "变灯请求成功") + if (it.sn == MoGoAiCloudClientConfig.getInstance().sn && it.code == 0) { + CallerLogger.d("$M_V2X$TAG", "变灯请求成功") + showWarning( + EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType, + EventTypeEnum.TYPE_VIP_IDENTIFICATION.content, + EventTypeEnum.TYPE_VIP_IDENTIFICATION.tts, + EventTypeEnum.TYPE_VIP_IDENTIFICATION.poiType + ) + } else { + val time = if (it.countDown / 60 >= 1) { + "${it.countDown / 60}分${it.countDown % 60}秒后重试" + } else { + val temp = if (it.countDown == 0) { + 1 + } else { + it.countDown + } + "${temp}秒后重试" + } + showWarning( + EventTypeEnum.TYPE_VIP_ERROR_IDENTIFICATION.poiType, + EventTypeEnum.TYPE_VIP_ERROR_IDENTIFICATION.content + time, + EventTypeEnum.TYPE_VIP_ERROR_IDENTIFICATION.tts, + EventTypeEnum.TYPE_VIP_ERROR_IDENTIFICATION.poiType + ) + } }, { errorMsg -> CallerLogger.e("$M_V2X$TAG", "变灯请求失败 msg : $errorMsg") + ToastUtils.showLong("服务异常,请稍后重试") }) } } + private fun showWarning( + v2xType: String, + alertContent: CharSequence, + ttsContent: String, + tag: String + ) { + CallerHmiManager.showWarningV2X( + v2xType, alertContent, ttsContent, tag, + object : IMoGoWarningStatusListener { + override fun onShow() {} + override fun onDismiss() { + resetConditions() + } + }, + true, + 5000L + ) + } + fun destroy() { MogoAiCloudSocketManager.getInstance(mContext) .unregisterLifecycleListener(401025) diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java index 9ac0f4394e..eb573de5f3 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/AppInfo.java @@ -8,140 +8,100 @@ import java.io.Serializable; * @since 6/21/22 */ public class AppInfo implements Serializable { - private IdInfo _id; - private int bk_inst_id; - private String bk_inst_name; - private String bk_supplier_account; - private String screen_type; //1,司机屏,2乘客屏 - private String sn; - private String last_time; - private String app_url; - private String bk_obj_id; - private int version_code; - private String version_name; - private String create_time; - private String car_type; + private String appUrl; + private int versionCode; + private String versionName; + private String screenType; + private String installTitle; + private String installContent; + private String installType; + private String beginTime; + private String endTime; - public IdInfo get_id() { - return _id; + public String getAppUrl() { + return appUrl; } - public void set_id(IdInfo _id) { - this._id = _id; + public void setAppUrl(String appUrl) { + this.appUrl = appUrl; } - public int getBk_inst_id() { - return bk_inst_id; + public int getVersionCode() { + return versionCode; } - public void setBk_inst_id(int bk_inst_id) { - this.bk_inst_id = bk_inst_id; + public void setVersionCode(int versionCode) { + this.versionCode = versionCode; } - public String getBk_inst_name() { - return bk_inst_name; + public String getVersionName() { + return versionName; } - public void setBk_inst_name(String bk_inst_name) { - this.bk_inst_name = bk_inst_name; + public void setVersionName(String versionName) { + this.versionName = versionName; } - public String getBk_supplier_account() { - return bk_supplier_account; + public String getScreenType() { + return screenType; } - public void setBk_supplier_account(String bk_supplier_account) { - this.bk_supplier_account = bk_supplier_account; + public void setScreenType(String screenType) { + this.screenType = screenType; } - public String getScreen_type() { - return screen_type; + public String getInstallTitle() { + return installTitle; } - public void setScreen_type(String screen_type) { - this.screen_type = screen_type; + public void setInstallTitle(String installTitle) { + this.installTitle = installTitle; } - public String getSn() { - return sn; + public String getInstallContent() { + return installContent; } - public void setSn(String sn) { - this.sn = sn; + public void setInstallContent(String installContent) { + this.installContent = installContent; } - public String getApp_url() { - return app_url; + public String getInstallType() { + return installType; } - public void setApp_url(String app_url) { - this.app_url = app_url; + public void setInstallType(String installType) { + this.installType = installType; } - public String getBk_obj_id() { - return bk_obj_id; + public String getBeginTime() { + return beginTime; } - public void setBk_obj_id(String bk_obj_id) { - this.bk_obj_id = bk_obj_id; + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; } - public int getVersion_code() { - return version_code; + public String getEndTime() { + return endTime; } - public void setVersion_code(int version_code) { - this.version_code = version_code; - } - - public String getVersion_name() { - return version_name; - } - - public void setVersion_name(String version_name) { - this.version_name = version_name; - } - - public String getLast_time() { - return last_time; - } - - public void setLast_time(String last_time) { - this.last_time = last_time; - } - - public String getCreate_time() { - return create_time; - } - - public void setCreate_time(String create_time) { - this.create_time = create_time; - } - - public String getCar_type() { - return car_type; - } - - public void setCar_type(String car_type) { - this.car_type = car_type; + public void setEndTime(String endTime) { + this.endTime = endTime; } @Override public String toString() { return "AppInfo{" + - "_id=" + _id + - ", bk_inst_id=" + bk_inst_id + - ", bk_inst_name='" + bk_inst_name + '\'' + - ", bk_supplier_account='" + bk_supplier_account + '\'' + - ", screen_type='" + screen_type + '\'' + - ", sn='" + sn + '\'' + - ", last_time='" + last_time + '\'' + - ", app_url='" + app_url + '\'' + - ", bk_obj_id='" + bk_obj_id + '\'' + - ", version_code=" + version_code + - ", version_name='" + version_name + '\'' + - ", create_time='" + create_time + '\'' + - ", car_type='" + car_type + '\'' + + "appUrl='" + appUrl + '\'' + + ", versionCode=" + versionCode + + ", versionName='" + versionName + '\'' + + ", screenType='" + screenType + '\'' + + ", installTitle='" + installTitle + '\'' + + ", installContent='" + installContent + '\'' + + ", installType='" + installType + '\'' + + ", beginTime='" + beginTime + '\'' + + ", endTime='" + endTime + '\'' + '}'; } } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/UpgradeAppInfo.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/UpgradeAppInfo.java index 840ee74d66..deafb46c3a 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/UpgradeAppInfo.java +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/bindingcar/UpgradeAppInfo.java @@ -10,20 +10,26 @@ import java.util.ArrayList; * @since: 6/21/22 */ public class UpgradeAppInfo extends BaseData { - public ArrayList data; +// public ArrayList data; +// +// public ArrayList getData() { +// return data; +// } +// +// public void setData(ArrayList data) { +// this.data = data; +// } - public ArrayList getData() { - return data; - } + public AppInfo result; - public void setData(ArrayList data) { - this.data = data; + public void setResult(AppInfo data) { + this.result = data; } @Override public String toString() { return "UpgradeAppInfo{" + - "data=" + data + + "result=" + result + '}'; } } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index 1a50cabba3..4f12272c8f 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -84,7 +84,7 @@ object FunctionBuildConfig { */ @Volatile @JvmField - var trackerProvider = 0 + var trackerIPCProvider = 0 /** * 地图是否绘制Adas识别回调的Marker @@ -104,15 +104,6 @@ object FunctionBuildConfig { @JvmField var isDrawUnknownIdentifyData = false - /** - * 地图是否绘制 OBU 识别回调的Marker - * true - 绘制 - * false - 不绘制 - */ - @Volatile - @JvmField - var isDrawObuIdentifyData = true - /** * 地图是否绘制 点云数据 * true - 绘制 diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/bizconfig/FuncBizConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/bizconfig/FuncBizConfig.kt new file mode 100644 index 0000000000..d371af2c24 --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/bizconfig/FuncBizConfig.kt @@ -0,0 +1,45 @@ +package com.mogo.eagle.core.data.deva.bizconfig + +class FuncBizConfig { + + companion object{ + const val V2N = "V2N" + const val V2I = "V2I" + const val V2V = "V2V" + const val FOUNDATION = "FOUNDATION" + + // V2N + const val BIZ_VIP = "BIZ_VIP" // vip变灯 + const val BIZ_OPT_LINE = "BIZ_OPT_LINE" // 最优车道 + const val BIZ_VRU = "BIZ_VRU" // 弱势交通 + const val BIZ_VRU_RI = "BIZ_VRU_RI" // 弱势交通逆行 + const val BIZ_HLW = "BIZ_HLW" // 道路提示 todo 需求不明确是施工还是所有 + // V2I + const val BIZ_IVP_GREEN = "BIZ_IVP_GREEN" // 绿波通行 + const val BIZ_IVP = "BIZ_IVP" // 闯红灯预警 + const val BIZ_RTS = "BIZ_RTS" // 查看视频流 + const val BIZ_SLW = "BIZ_SLW" // 限速提醒 + const val BIZ_IVS = "BIZ_IVS" // 车内标识 todo 暂未实现 + const val BIZ_TJW = "BIZ_TJW" // 道路拥堵 todo 需求来源 是从云还是从OBU过来 + // V2V + const val BIZ_AVW = "BIZ_AVW" // 异常车辆提醒 + const val BIZ_LCW = "BIZ_LCW" // 变道碰撞预警 + const val BIZ_BSW = "BIZ_BSW" // 盲区碰撞预警 + const val BIZ_EBW = "BIZ_EBW" // 前车急刹预警 + const val BIZ_FCW = "BIZ_FCW" // 前向碰撞预警 + const val BIZ_LTA = "BIZ_LTA" // 左转辅助预警 + const val BIZ_CLW = "BIZ_CLW" // 车辆失控预警 + const val BIZ_DNPW = "BIZ_DNPW" // 逆向超车预警 + // Foundation + const val BIZ_BEAUTY_MODE = "BIZ_BEAUTY_MODE" // 美化模式 + const val BIZ_RAIN_MODE = "BIZ_RAIN_MODE" // 雨天模式 + const val BIZ_FULL_LOG = "BIZ_FULL_LOG" // 全量日志 todo + const val BIZ_TRACE_LOG = "BIZ_TRACE_LOG" // 链路日志 todo + const val BIZ_BAG_RECORD = "BIZ_BAG_RECORD" // Bag录制 + const val BIZ_WARNING_UPLOAD = "BIZ_WARNING_UPLOAD" // 异常上报 + const val BIZ_LIMIT_SPEED_SET = "BIZ_LIMIT_SPEED_SET" // 限速设置 todo + const val BIZ_BYPASS = "BIZ_BYPASS" // 绕障 todo 暂未实现 + const val BIZ_AUTOPILOT_LANE_SELECTION = "BIZ_AUTOPILOT_LANE_SELECTION" // 择机变道 todo 暂未实现 + + } +} \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index bf710b77f2..f5fb8b59b9 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -59,6 +59,7 @@ class ChainConstant { const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_LOST" const val CHAIN_ALIAS_CODE_CLOUD_CONNECT_ERROR = "CHAIN_ALIAS_CODE_CLOUD_CONNECT_ERROR" const val CHAIN_ALIAS_CODE_HTTP_DNS_CHANGED = "CHAIN_ALIAS_CODE_HTTP_DNS_CHANGED" + const val CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED = "CHAIN_ALIAS_CODE_FUNC_CONFIG_CHANGED" const val CHAIN_ALIAS_CODE_INIT_ON_MAP_LOADED = "CHAIN_ALIAS_CODE_INIT_ON_MAP_LOADED" const val CHAIN_ALIAS_CODE_INIT_ON_MAP_INIT = "CHAIN_ALIAS_CODE_INIT_ON_MAP_INIT" diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/WarningDirectionEnum.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/WarningDirectionEnum.kt index c1b1229f40..a492e75343 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/WarningDirectionEnum.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/WarningDirectionEnum.kt @@ -1,5 +1,18 @@ package com.mogo.eagle.core.data.enums + +fun WarningDirectionEnum.isLeft():Boolean{ + return this.direction == WarningDirectionEnum.ALERT_WARNING_LEFT.direction + || this.direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT.direction + || this.direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT.direction +} + +fun WarningDirectionEnum.isRight():Boolean{ + return this.direction == WarningDirectionEnum.ALERT_WARNING_RIGHT.direction + || this.direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT.direction + || this.direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT.direction +} + /** *@author xiaoyuzhou *@date 2021/9/10 8:48 下午 diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/TrafficLightControl.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/TrafficLightControl.kt new file mode 100644 index 0000000000..e20e91289b --- /dev/null +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/trafficlight/TrafficLightControl.kt @@ -0,0 +1,6 @@ +package com.mogo.eagle.core.data.trafficlight + +/** + * 控灯实体 + */ +data class TrafficLightControl(val sn:String,val data:String,val next:String,val countDown:Int,val code:Int) \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt index 4f4bd4b9da..872f4f8b9b 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IDevaToolsProvider.kt @@ -14,6 +14,11 @@ import record_cache.RecordPanelOuterClass */ interface IDevaToolsProvider : IProvider { + /** + * 初始化业务 + */ + fun initBiz() + /** * 开始抓取日志,默认10min */ diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsFuncConfigListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsFuncConfigListener.kt new file mode 100644 index 0000000000..099964a0af --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/IMoGoDevaToolsFuncConfigListener.kt @@ -0,0 +1,16 @@ +package com.mogo.eagle.core.function.api.devatools + +/** + * FuncConfig 功能配置业务回调 + */ +interface IMoGoDevaToolsFuncConfigListener { + + /** + * 更新业务数据,注意⚠️:需要由业务方判断具体type,业务聚合 + * type : biz类型 (FuncBizConfig) + * state: 开启状态 + * lock : 锁定状态 + * data : json + */ + fun updateBizData(type: String, state: Boolean, lock: Boolean, data: String?) +} \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/ITrafficLightProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/ITrafficLightProvider.kt index eb5bf57ad3..11539e4b31 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/ITrafficLightProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/trafficlight/ITrafficLightProvider.kt @@ -1,6 +1,7 @@ package com.mogo.eagle.core.function.api.trafficlight import android.content.Context +import com.mogo.eagle.core.data.trafficlight.TrafficLightControl import com.mogo.eagle.core.data.trafficlight.TrafficLightDetail import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider @@ -21,7 +22,7 @@ interface ITrafficLightProvider : IMoGoFunctionServerProvider { crossingNo: String, heading: Double, controlTime:Int, - onSuccess: (() -> Unit), + onSuccess: ((TrafficLightControl) -> Unit), onError: ((String) -> Unit) ) } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt index 0c915a5f31..4d462086d5 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt @@ -1,12 +1,9 @@ package com.mogo.eagle.core.function.call.autopilot -import android.util.* import androidx.annotation.Nullable import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.base.CallerBase -import com.mogo.eagle.core.utilcode.kotlin.* -import com.mogo.eagle.core.utilcode.mogo.logger.* import com.mogo.eagle.core.utilcode.util.GsonUtils import mogo.telematics.pad.MessagePad import mogo_msg.MogoReportMsg @@ -180,7 +177,6 @@ object CallerAutoPilotStatusListenerManager : CallerBase() { val listener = it.value autoPilotMessageCode = guardianInfo?.code ?: "" autoPilotMessageContent = guardianInfo?.msg ?: "" - Logger.d("XXXXX", "code: ${guardianInfo?.code}, msg: ${guardianInfo?.msg}") listener.onAutopilotGuardian(guardianInfo) } } diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsFuncConfigListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsFuncConfigListenerManager.kt new file mode 100644 index 0000000000..d847a8f288 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsFuncConfigListenerManager.kt @@ -0,0 +1,78 @@ +package com.mogo.eagle.core.function.call.devatools + +import android.util.Log +import androidx.annotation.Nullable +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener +import com.zhjt.service_biz.SubBiz +import java.util.concurrent.ConcurrentHashMap + +object CallerDevaToolsFuncConfigListenerManager { + + private val M_DEVA_TOOLS_FUNC_CONFIG_LISTENER: ConcurrentHashMap = + ConcurrentHashMap() + + private val cacheMap = mutableMapOf>() + + /** + * 添加监听 + * @param tag 标记,用来注销监听使用 + * @param listener 监听回调 + */ + fun registerDevaToolsFuncConfigListener( + @Nullable biz: String, + @Nullable tag: String, + @Nullable listener: IMoGoDevaToolsFuncConfigListener + ) { + if (M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.containsKey("$biz'_'$tag")) { + return + } + M_DEVA_TOOLS_FUNC_CONFIG_LISTENER["$biz'_'$tag"] = listener + + cacheMap[biz]?.let { + invokeDevaToolsFuncConfigBizUpdate(biz,it) + } + } + + /** + * 删除监听 + * @param tag 标记,用来注销监听使用 + */ + fun unRegisterDevaToolsFuncConfigListener(@Nullable biz: String, @Nullable tag: String) { + if (!M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.containsKey("$biz'_'$tag")) { + return + } + M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.remove("$biz'_'$tag") + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun unRegisterDevaToolsFuncConfigListener(@Nullable listener: IMoGoDevaToolsFuncConfigListener) { + if (!M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.containsValue(listener)) { + return + } + M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.forEach { + if (it.value == listener) { + M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.remove(it.key) + } + } + } + + /** + * 由订阅方判断Type类型,聚合一些 + */ + fun invokeDevaToolsFuncConfigBizUpdate(biz: String, list: MutableList) { + cacheMap[biz] = list + M_DEVA_TOOLS_FUNC_CONFIG_LISTENER.forEach { + val key = it.key + if (key.contains(biz)) { + list.forEach { subBiz -> + val listener = it.value + listener.updateBizData(subBiz.type, subBiz.state, subBiz.lock, subBiz.data) + } + } + } + } + +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt index ddf0921a3d..8dfb23cd0f 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/devatools/CallerDevaToolsManager.kt @@ -21,8 +21,8 @@ object CallerDevaToolsManager { MogoServicePaths.PATH_DEVA_TOOLS ) - fun init(context: Context) { - devaToolsProviderApi?.init(context) + fun init() { + devaToolsProviderApi?.initBiz() } /** diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt index 2bd70f548c..2f8411528c 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt @@ -4,6 +4,8 @@ import android.view.View import com.alibaba.android.arouter.launcher.ARouter import com.mogo.eagle.core.data.bindingcar.IPCUpgradeStateInfo import com.mogo.eagle.core.data.constants.MoGoFragmentPaths +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_SLW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I import com.mogo.eagle.core.data.enums.WarningDirectionEnum import com.mogo.eagle.core.data.map.Infrastructure import com.mogo.eagle.core.data.notice.NoticeNormalData @@ -12,11 +14,11 @@ import com.mogo.eagle.core.data.report.ReportEntity import com.mogo.eagle.core.function.api.hmi.IMoGoHmiViewProxy.IViewNotificationProvider import com.mogo.eagle.core.function.api.hmi.view.IOchBusView 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.base.CallerBase +import com.zhjt.service_biz.BizConfig /** * @author xiaoyuzhou @@ -75,7 +77,7 @@ object CallerHmiManager : CallerBase() { /** * 控制刹车功能 */ - fun setBrakeLightFunction (isOpen: Boolean) { + fun setBrakeLightFunction(isOpen: Boolean) { waringProviderApi?.setBrakeLightFunction(isOpen) } @@ -89,7 +91,7 @@ object CallerHmiManager : CallerBase() { /** * 开关DebugView */ - fun toggleDebugView(){ + fun toggleDebugView() { waringProviderApi?.toggleDebugView() } @@ -101,8 +103,24 @@ object CallerHmiManager : CallerBase() { * @param ttsContent tts语音播报消息 * @param tag tag绑定弹窗的标志 */ - fun showWarningV2X(v2xType: String, alertContent: CharSequence?, ttsContent: String?, tag: String?, listenerIMoGo: IMoGoWarningStatusListener?, playTts: Boolean, expireTime: Long = 5000L) { - waringProviderApi?.showWarningV2X(v2xType, alertContent, ttsContent, tag, listenerIMoGo, playTts, expireTime) + fun showWarningV2X( + v2xType: String, + alertContent: CharSequence?, + ttsContent: String?, + tag: String?, + listenerIMoGo: IMoGoWarningStatusListener?, + playTts: Boolean, + expireTime: Long = 5000L + ) { + waringProviderApi?.showWarningV2X( + v2xType, + alertContent, + ttsContent, + tag, + listenerIMoGo, + playTts, + expireTime + ) } /** @@ -119,8 +137,8 @@ object CallerHmiManager : CallerBase() { * @param checkLightId 0-都是默认,1-红,2-黄,3-绿 * @param lightSource 1:云端下发;2:自车感知 */ - fun showWarningTrafficLight(checkLightId: Int,lightSource: Int) { - waringProviderApi?.showWarningTrafficLight(checkLightId,lightSource) + fun showWarningTrafficLight(checkLightId: Int, lightSource: Int) { + waringProviderApi?.showWarningTrafficLight(checkLightId, lightSource) } /** @@ -140,7 +158,7 @@ object CallerHmiManager : CallerBase() { /** * 关闭红绿灯倒计时 */ - fun disableWarningTrafficLightCountDown(){ + fun disableWarningTrafficLightCountDown() { waringProviderApi?.disableWarningTrafficLightCountDown() } @@ -179,6 +197,7 @@ object CallerHmiManager : CallerBase() { * * @param limitingSpeed 限速速度 */ + @BizConfig(V2I, "", BIZ_SLW) fun showLimitingVelocity(limitingSpeed: Int) { waringProviderApi?.showLimitingVelocity(limitingSpeed) } @@ -280,14 +299,14 @@ object CallerHmiManager : CallerBase() { /** * 呈现工控机升级确认框 */ - fun showAdUpgradeDialog(images: List,padSn: String,releaseId: String){ + fun showAdUpgradeDialog(images: List, padSn: String, releaseId: String) { waringProviderApi?.showAdUpgradeDialog(images, padSn, releaseId) } /** * 更新工控机下载、升级状态 */ - fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo){ + fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo) { waringProviderApi?.showAdUpgradeStatus(ipcUpgradeStateInfo) } @@ -323,7 +342,7 @@ object CallerHmiManager : CallerBase() { *注册工控机升级提示圆点View的回调 * @param 提示圆点View */ - fun registerUpgradeTipsCallback(tipsView:() -> View){ + fun registerUpgradeTipsCallback(tipsView: () -> View) { waringProviderApi?.registerUpgradeTipsCallback(tipsView) } @@ -332,7 +351,7 @@ object CallerHmiManager : CallerBase() { * @param code * @param msg */ - fun showDockerRebootResult(code: Int,msg: String){ + fun showDockerRebootResult(code: Int, msg: String) { waringProviderApi?.showDockerRebootResult(code, msg) } @@ -366,8 +385,12 @@ object CallerHmiManager : CallerBase() { * @param warningReportList 提醒级别上报数据列表 * @param reportLevel 1:error级别 2:warning级别 */ - fun showIPCReportWindow(errorReportList: ArrayList,warningReportList: ArrayList,reportLevel: Int){ - waringProviderApi?.showIPCReportWindow(errorReportList,warningReportList,reportLevel) + fun showIPCReportWindow( + errorReportList: ArrayList, + warningReportList: ArrayList, + reportLevel: Int + ) { + waringProviderApi?.showIPCReportWindow(errorReportList, warningReportList, reportLevel) } fun showVideoDialog(infList: List) { @@ -378,7 +401,7 @@ object CallerHmiManager : CallerBase() { * bus出车/收车状态设置 * true : 显示收车; false:显示出车 */ - fun changeBusOperationStatus(isOut:Boolean){ + fun changeBusOperationStatus(isOut: Boolean) { waringProviderApi?.changeBusOperationStatus(isOut) } diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_warning_take_over.png b/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_warning_take_over.png new file mode 100644 index 0000000000..fdab3a4a87 Binary files /dev/null and b/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_warning_take_over.png differ diff --git a/core/mogo-core-utils/build.gradle b/core/mogo-core-utils/build.gradle index 45d9d9af7e..692a87bf80 100644 --- a/core/mogo-core-utils/build.gradle +++ b/core/mogo-core-utils/build.gradle @@ -78,6 +78,7 @@ dependencies { api rootProject.ext.dependencies.life_cycle_java8 api rootProject.ext.dependencies.mogochainbase + api rootProject.ext.dependencies.mogoservicebiz } apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt index 6ed65bac39..70ed1e0534 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/logger/scene/Scene.kt @@ -1,7 +1,6 @@ package com.mogo.eagle.core.utilcode.mogo.logger.scene import android.util.ArrayMap -import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ADAS_IMPL import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_CHAT @@ -120,7 +119,6 @@ class Scene { //此处存在用户自定义方式,可根据过滤找到对应不符合标准的模块 var logCache = sceneCache["$moduleName-"] if (logCache == null) { - Logger.i("emArrow","tag : $tag , module : $moduleName , sceneCache : $sceneCache") logCache = SceneLogCache(mutableMapOf(), true) businessName?.let { logCache.tagMap!![it] = true diff --git a/gradle.properties b/gradle.properties index 349da26c0a..e160b93985 100644 --- a/gradle.properties +++ b/gradle.properties @@ -58,6 +58,9 @@ bytex.ASM_API=ASM7 HOOK_LOG_VERSION=1.6.1 SERVICE_CHAIN_VERSION=1.1.0 + +BIZCONFIG_VERSION=1.2.7 +SERVICE_BIZ_VERSION=1.2.0 ################ 外部依赖引用 ################ # loglib LOGLIB_VERSION=1.3.38 diff --git a/libraries/mogo-adas/build.gradle b/libraries/mogo-adas/build.gradle index 153ecfbe94..d862918df2 100644 --- a/libraries/mogo-adas/build.gradle +++ b/libraries/mogo-adas/build.gradle @@ -68,6 +68,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation rootProject.ext.dependencies.androidxappcompat implementation rootProject.ext.dependencies.mogochainbase + implementation rootProject.ext.dependencies.mogoservicebiz //okhttp3的依赖 implementation 'com.squareup.okhttp3:okhttp:3.12.3' // parser diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java index 1caf51adcb..1a9fad34fd 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/HostConst.java @@ -22,6 +22,7 @@ public class HostConst { public static final String BINDING_SN_HOST = "https://mygateway.zhidaozhixing.com/cmdbapi/"; //中台提供的接口服务 public static final String BINDING_SN_HOST_TEST = "https://mygateway.zhidaozhixing.com/cmdbapitest/"; //中台提供的接口服务测试 - public static final String UPGRADE_APP_HOST = "http://10.0.200.12:32423?/"; +// public static final String UPGRADE_APP_HOST = "http://10.0.200.12:32423?/"; + public static final String UPGRADE_APP_HOST = "https://eagle-qa.zhidaozhixing.com/"; } diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt index b491c152dc..7521d0ac83 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt @@ -111,6 +111,12 @@ enum class EventTypeEnum( GHOST_PROBE("10024", "前方盲区行人预警", "前方盲区行人预警", R.drawable.icon_warning_v2x_pedestrian_crossing, "前方盲区行人通行,请注意", "前方盲区即将有行人通过,请减速慢行"), + //接管 + TAKE_OVER_EVENT( + "20000", "注意周围、立即接管", "注意周围、立即接管", R.drawable.icon_warning_take_over, + "注意周围、立即接管", "自动驾驶退出请立即接管" + ), + // 前方静止or慢速车辆报警 ALERT_FRONT_CAR("99999"), @@ -357,7 +363,8 @@ enum class EventTypeEnum( tts = "" ), - TYPE_VIP_IDENTIFICATION("10022", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "VIP车辆优先通行", "已为您变灯,请优先通行"), + TYPE_VIP_IDENTIFICATION("10022", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "VIP车辆优先通行", "已为您变灯请优先通行"), + TYPE_VIP_ERROR_IDENTIFICATION("10023", "", "", R.drawable.icon_warning_v2x_vip_turn_light, "请求失败,", "请求失败请稍后重试"), TYPE_OPTIMAL_ROUTE_RECOMMEND("2000", "", "", R.drawable.icon_warning_v2x_optimal_route, "为您推荐最优路线", "已为您选择最优路线"); diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeHelper.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeHelper.kt new file mode 100644 index 0000000000..59d0db1c9f --- /dev/null +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeHelper.kt @@ -0,0 +1,189 @@ +package com.mogo.module.common.enums + +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_AVW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_BSW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_CLW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_DNPW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_EBW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_FCW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_LCW +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_LTA +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_OPT_LINE +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_VRU +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_VRU_RI +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2N +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2V +import com.mogo.eagle.core.data.enums.WarningDirectionEnum +import com.mogo.eagle.core.data.enums.isLeft +import com.mogo.eagle.core.data.enums.isRight +import com.zhjt.service_biz.BizConfig + +class EventTypeHelper { + + companion object { + + //变道预警 + @BizConfig(V2V, "", BIZ_LCW) + fun getLCW( + appId: Int, + direction: WarningDirectionEnum, + data: ((alert: String, tts: String) -> Unit) + ) { + when { + direction.isLeft() -> { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString() + "左"), + EventTypeEnum.getWarningTts(appId.toString() + "左") + ) + } + direction.isRight() -> { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString() + "右"), + EventTypeEnum.getWarningTts(appId.toString() + "右") + ) + } + else -> { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString()), + EventTypeEnum.getWarningTts(appId.toString()) + ) + } + } + } + + //车辆失控预警 + @BizConfig(V2V, "", BIZ_CLW) + fun getCLW( + appId: Int, + direction: WarningDirectionEnum, + data: ((alert: String, tts: String) -> Unit) + ) { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString() + direction.desc), + EventTypeEnum.getWarningContent(appId.toString() + direction.desc) + ) + } + + //左转辅助 + @BizConfig(V2V, "", BIZ_LTA) + fun getLTA(appId: Int, data: ((alert: String, tts: String) -> Unit)) { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString()), + EventTypeEnum.getWarningTts(appId.toString()) + ) + } + + //异常车辆提醒 + @BizConfig(V2V, "", BIZ_AVW) + fun getAVW( + appId: Int, + direction: WarningDirectionEnum, + data: ((alert: String, tts: String) -> Unit) + ) { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString() + direction.desc), + EventTypeEnum.getWarningTts(appId.toString() + direction.desc) + ) + } + + //盲区预警 + @BizConfig(V2V, "", BIZ_BSW) + fun getBSW( + appId: Int, + direction: WarningDirectionEnum, + data: ((alert: String, tts: String, visualAngle: Boolean) -> Unit) + ) { + when { + direction.isLeft() -> { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString() + "左"), + EventTypeEnum.getWarningTts(appId.toString() + "左"), + true + ) + } + direction.isRight() -> { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString() + "右"), + EventTypeEnum.getWarningTts(appId.toString() + "右"), + true + ) + } + else -> { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString()), + EventTypeEnum.getWarningTts(appId.toString()), + false + ) + } + } + } + + //弱势交通碰撞预警 + @BizConfig(V2N, "", BIZ_VRU) + fun getVRU(data: ((appId: Int, tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType.toInt(), + EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.tts, + EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.content + ) + } + + //弱势交通逆行预警 + @BizConfig(V2N, "", BIZ_VRU_RI) + fun getVRURI(data: ((appId: Int, tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.TYPE_USECASE_ID_VRUCW_PERSON.poiType.toInt(), + "行人逆行预警", + "行人逆行预警" + ) + } + + //最优车道 + @BizConfig(V2N, "", BIZ_OPT_LINE) + fun getOptLine(data: ((appId: Int, tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.TYPE_USECASE_OPTIMAL_LANE.poiType.toInt(), + EventTypeEnum.TYPE_USECASE_OPTIMAL_LANE.tts, + EventTypeEnum.TYPE_USECASE_OPTIMAL_LANE.content + ) + } + + //前方道路拥堵预警 + fun getTJW(data: ((appId: Int, tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.FOURS_BLOCK_UP.poiType.toInt(), + EventTypeEnum.FOURS_BLOCK_UP.tts, + EventTypeEnum.FOURS_BLOCK_UP.content + ) + } + + //前车急刹 + @BizConfig(V2V, "", BIZ_EBW) + fun getEBW(appId: Int, data: ((tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString()), + EventTypeEnum.getWarningTts(appId.toString()) + ) + } + + //前向碰撞预警 + @BizConfig(V2V, "", BIZ_FCW) + fun getFCW(appId: Int, data: ((tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString()), + EventTypeEnum.getWarningTts(appId.toString()) + ) + } + + //逆向超车预警 + @BizConfig(V2V, "", BIZ_DNPW) + fun getDNPW(appId: Int, data: ((tts: String, content: String) -> Unit)) { + data.invoke( + EventTypeEnum.getWarningContent(appId.toString()), + EventTypeEnum.getWarningTts(appId.toString()) + ) + } + + } + +} \ No newline at end of file