# Conflicts: # .idea/gradle.xml # .idea/misc.xml # OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java # OCH/mogo-och-taxi/src/main/res/values/strings.xml # app/src/main/java/com/mogo/launcher/MogoApplication.java # config.gradle # foudations/httpdns-mogo/src/main/java/com/mogo/httpdns/mogo/MogoHttpDns.java # foudations/mogo-aicloud-services-apk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java # foudations/mogo-aicloud-services-sdk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java # foudations/mogo-commons/src/main/java/com/mogo/commons/constants/SharedPrefsConstants.java # gradle.properties # libraries/map-custom/build.gradle # libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java # libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java # modules/mogo-module-common/src/main/java/com/mogo/module/common/datacenter/SnapshotLocationDataCenter.java # modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java # modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java # modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java # modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java # modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java # modules/mogo-module-service/src/main/java/com/mogo/module/service/spi/SPIRealTimeUpload.java # modules/mogo-module-service/src/main/java/com/mogo/module/service/status/EnvStatusManager.java # modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapDirectionView.java # modules/mogo-module-smp/src/main/java/com/mogo/module/small/map/SmallMapProvider.java # modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/warning/V2XWarningMarker.java # services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java # services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java # services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java # services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoSocketManager.java
269 lines
9.1 KiB
Java
269 lines
9.1 KiB
Java
package com.mogo.och;
|
||
|
||
import android.view.LayoutInflater;
|
||
import android.view.View;
|
||
import android.widget.CheckedTextView;
|
||
import android.widget.FrameLayout;
|
||
import android.widget.TextView;
|
||
|
||
import androidx.constraintlayout.widget.Group;
|
||
|
||
import com.mogo.commons.debug.DebugConfig;
|
||
import com.mogo.commons.mvp.IView;
|
||
import com.mogo.commons.mvp.MvpFragment;
|
||
import com.mogo.commons.mvp.Presenter;
|
||
import com.mogo.commons.voice.AIAssist;
|
||
import com.mogo.module.common.MogoApisHandler;
|
||
import com.mogo.module.common.view.OnPreventFastClickListener;
|
||
import com.mogo.och.view.SlidePanelView;
|
||
import com.mogo.service.adas.IMogoAdasOCHCallback;
|
||
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
|
||
import com.mogo.utils.logger.Logger;
|
||
|
||
/**
|
||
* 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况
|
||
* <p>
|
||
* 部分业务放在了此处处理
|
||
*
|
||
* @author tongchenfei
|
||
*/
|
||
public abstract class BaseOchFragment<V extends IView, P extends Presenter<V>> extends MvpFragment<V, P> {
|
||
|
||
private static final String TAG = "BaseOchFragment";
|
||
|
||
protected SlidePanelView slidePanelView;
|
||
private CheckedTextView ctvAutopilotStatus;
|
||
protected TextView tvOperationStatus;
|
||
public boolean isOperationStatus;//false-收车,true-出车
|
||
private FrameLayout flStationPanelContainer;
|
||
private Group groupTestPanel;
|
||
|
||
|
||
/**
|
||
* 滑动按钮触发的事件
|
||
*/
|
||
private final SlidePanelView.OnSlidePanelMoveToEndListener onSlideToEndListener = () -> {
|
||
// 此处做一个代理,处理一下共有情况
|
||
if (getSlidePanelOnEndListener() != null) {
|
||
getSlidePanelOnEndListener().moveToEnd();
|
||
}
|
||
};
|
||
|
||
@Override
|
||
protected int getLayoutId() {
|
||
return R.layout.module_mogo_och_base_fragment;
|
||
}
|
||
|
||
private View panelView;
|
||
|
||
@Override
|
||
protected void initViews() {
|
||
groupTestPanel = findViewById(R.id.groupTestPanel);
|
||
slidePanelView = findViewById(R.id.module_mogo_och_slide_panel);
|
||
ctvAutopilotStatus = findViewById(R.id.module_mogo_och_autopilot_status);
|
||
flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container);
|
||
|
||
tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status);
|
||
|
||
panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer);
|
||
slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener);
|
||
|
||
ctvAutopilotStatus.setOnClickListener(new OnPreventFastClickListener() {
|
||
@Override
|
||
public void onClickImpl(View v) {
|
||
// 如果能自动驾驶,就自动驾驶,不能就提示
|
||
restartAutopilot();
|
||
}
|
||
});
|
||
|
||
// debug下调用测试面板
|
||
if (DebugConfig.isDebug()) {
|
||
ctvAutopilotStatus.setOnLongClickListener(v -> {
|
||
if (groupTestPanel.getVisibility() == View.VISIBLE) {
|
||
groupTestPanel.setVisibility(View.GONE);
|
||
} else {
|
||
groupTestPanel.setVisibility(View.VISIBLE);
|
||
}
|
||
return false;
|
||
});
|
||
}
|
||
|
||
onAutopilotStatusChanged(MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING);
|
||
|
||
// 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接
|
||
findViewById(R.id.btnAutopilotDisable).setOnClickListener(view ->
|
||
{
|
||
MogoApisHandler.getInstance().getApis()
|
||
.getAdasControllerApi()
|
||
.mockOchStatus(IMogoAdasOCHCallback.STATUS_AUTOPILOT_DISABLE, "不能使用");
|
||
// Logger.d("lianglihui","模拟 不可自动驾驶");
|
||
}
|
||
);
|
||
|
||
// 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态
|
||
findViewById(R.id.btnAutopilotEnable).setOnClickListener(view ->
|
||
{
|
||
MogoApisHandler.getInstance().getApis()
|
||
.getAdasControllerApi()
|
||
.mockOchStatus(IMogoAdasOCHCallback.STATUS_AUTOPILOT_ENABLE, "能使用");
|
||
|
||
// Logger.d("lianglihui","模拟 可自动驾驶");
|
||
}
|
||
);
|
||
|
||
// 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人
|
||
findViewById(R.id.btnAutopilotRunning).setOnClickListener(view ->
|
||
{
|
||
MogoApisHandler.getInstance().getApis()
|
||
.getAdasControllerApi()
|
||
.mockOchStatus(IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING, "Running");
|
||
// Logger.d("lianglihui","模拟 自动驾驶能力");
|
||
}
|
||
);
|
||
|
||
// 模拟 自动驾驶站
|
||
findViewById(R.id.btnAutopilotArrive).setOnClickListener(view ->
|
||
{
|
||
MogoApisHandler.getInstance().getApis()
|
||
.getAdasControllerApi().mockOchStatus(-1, "Arrived");
|
||
|
||
// Logger.d("lianglihui","模拟 自动驾驶站");
|
||
}
|
||
);
|
||
|
||
// 模拟 站点下发工控
|
||
findViewById(R.id.btnAutopilotControl).setOnClickListener(view ->
|
||
{
|
||
// Logger.d("lianglihui","模拟 站点下发工控");
|
||
RemoteControlAutoPilotParameters currentAutopilot = new RemoteControlAutoPilotParameters();
|
||
currentAutopilot.isSpeakVoice = true;
|
||
// 万集东门站
|
||
currentAutopilot.startLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(40.194795425,116.724476409);
|
||
// 市政府前街18号
|
||
currentAutopilot.endLatLon = new RemoteControlAutoPilotParameters.AutoPilotLonLat(40.1939540844,116.720067);
|
||
// 订单运营类型 (9出租车,10小巴)
|
||
currentAutopilot.vehicleType = 10;
|
||
Logger.d(TAG, "模拟 订单站点下发:" + currentAutopilot);
|
||
MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData(currentAutopilot);
|
||
}
|
||
);
|
||
|
||
tvOperationStatus.setOnClickListener(view -> {
|
||
onChangeOperationStatus();
|
||
});
|
||
}
|
||
|
||
protected void onChangeOperationStatus() {
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 展示滑动按钮
|
||
*
|
||
* @param text 指定的文字
|
||
*/
|
||
public void showSlidePanle(String text) {
|
||
if (isOperationStatus) {
|
||
getActivity().runOnUiThread(() -> {
|
||
slidePanelView.setText(text);
|
||
slidePanelView.setVisibility(View.VISIBLE);
|
||
});
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 隐藏滑动按钮
|
||
*/
|
||
public void hideSlidePanel() {
|
||
getActivity().runOnUiThread(() -> {
|
||
slidePanelView.setVisibility(View.GONE);
|
||
});
|
||
}
|
||
|
||
public void showNotice(String notice) {
|
||
getActivity().runOnUiThread(() -> {
|
||
AIAssist.getInstance(getContext()).speakTTSVoice(notice);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 改变自动驾驶状态
|
||
*
|
||
* @param isInAutopilot true - 在自动驾驶中 false - 不在自动驾驶中
|
||
*/
|
||
public void onAutopilotStatusChanged(boolean isInAutopilot) {
|
||
getActivity().runOnUiThread(() -> {
|
||
ctvAutopilotStatus.setChecked(isInAutopilot);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 隐藏【自动驾驶】按钮
|
||
*/
|
||
public void hideAutopilotBiz() {
|
||
getActivity().runOnUiThread(() -> {
|
||
// ctvAutopilotStatus.setVisibility(View.GONE);
|
||
// slidePanelView.setVisibility(View.GONE);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 展示【自动驾驶】按钮
|
||
*/
|
||
public void showAutopilotBiz() {
|
||
getActivity().runOnUiThread(() -> {
|
||
ctvAutopilotStatus.setVisibility(View.VISIBLE);
|
||
if (isOperationStatus) {
|
||
slidePanelView.setVisibility(View.VISIBLE);
|
||
} else {
|
||
slidePanelView.setVisibility(View.GONE);
|
||
}
|
||
});
|
||
}
|
||
|
||
public void hidPanel() {
|
||
getActivity().runOnUiThread(() -> {
|
||
flStationPanelContainer.setVisibility(View.GONE);
|
||
});
|
||
}
|
||
|
||
public void showPanel() {
|
||
getActivity().runOnUiThread(() -> {
|
||
flStationPanelContainer.setVisibility(View.VISIBLE);
|
||
});
|
||
}
|
||
|
||
public View getPanelView() {
|
||
return panelView;
|
||
}
|
||
|
||
public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() {
|
||
return null;
|
||
}
|
||
|
||
@Override
|
||
public void onDestroyView() {
|
||
super.onDestroyView();
|
||
}
|
||
|
||
/**
|
||
* 获取站点面板view,在{@link #initViews()}时候添加到container中
|
||
*
|
||
* @return 站点面板view
|
||
*/
|
||
public abstract int getStationPanelViewId();
|
||
|
||
/**
|
||
* 重新开启自动驾驶
|
||
*/
|
||
public abstract void restartAutopilot();
|
||
|
||
|
||
public void changeOperationViewVisible(int visible){
|
||
getActivity().runOnUiThread(() -> {
|
||
tvOperationStatus.setVisibility(visible);
|
||
});
|
||
}
|
||
}
|