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 734edccdd6..565372b4a9 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 @@ -1,6 +1,7 @@ package com.mogo.och.bus.passenger.adapter; import android.content.Context; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -14,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.mogo.och.bus.passenger.R; import com.mogo.och.bus.passenger.bean.BusPassengerStation; import com.mogo.och.common.module.utils.BlinkAnimationUtil; +import com.mogo.och.common.module.wigets.MarqueeTextView; import java.util.List; @@ -58,9 +60,11 @@ public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter() { + BusPassengerServiceManager.queryDriverOperationStatus(mContext + , new OchCommonServiceCallback() { @Override public void onSuccess(BusPassengerOperationStatusResponse data) { if (data == null || data.data == null) return; @@ -149,14 +149,15 @@ public class BusPassengerModel { } public void queryDriverSiteByCoordinate(){ - BusPassengerServiceManager.getInstance().queryDriverSiteByCoordinate(mContext - , new BusPassengerServiceCallback() { + BusPassengerServiceManager.queryDriverSiteByCoordinate(mContext + , new OchCommonServiceCallback() { @Override public void onSuccess(BusPassengerRoutesResponse data) { if ( data == null || data.getResult() == null || data.getResult().getSites() == null) { routesResult = null; + startOrStopCalculateRouteInfo(false); if (mRouteLineInfoCallback != null){ mRouteLineInfoCallback.showNoTaskView(); } @@ -171,8 +172,10 @@ public class BusPassengerModel { @Override public void onFail(int code, String msg) { - //code = 1003; message = bus车辆已收车或未出车; + //code = 1003; message = bus车辆已收车或未出车;bus driver shadow,not exists if (code == 1003){ + routesResult = null; + startOrStopCalculateRouteInfo(false); queryDriverOperationDelay(); } } diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceCallback.java deleted file mode 100644 index fb53106dcd..0000000000 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceCallback.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.bus.passenger.network; - -/** - * Created on 2022/3/31 - */ -public interface BusPassengerServiceCallback { - - void onSuccess(T data); - - void onFail(int code, String msg); - - default void onError() { - - } -} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.java deleted file mode 100644 index b155cb084c..0000000000 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.mogo.och.bus.passenger.network; - -import android.content.Context; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager; -import com.mogo.eagle.core.network.MoGoRetrofitFactory; -import com.mogo.eagle.core.network.RequestOptions; -import com.mogo.eagle.core.network.SubscribeImpl; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse; -import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest; -import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse; -import com.mogo.och.bus.passenger.constant.BusPassengerConst; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; - -/** - * Created on 2022/3/31 - */ -public class BusPassengerServiceManager { - private static final String TAG = BusPassengerServiceManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final BusPassengerServiceManager INSTANCE = new BusPassengerServiceManager(); - } - - public static BusPassengerServiceManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private BusPassengerServiceApi mBusPassengerServiceApi; - - private BusPassengerServiceManager() { - if (mBusPassengerServiceApi == null){ - mBusPassengerServiceApi = MoGoRetrofitFactory.getInstance( - BusPassengerConst.getBaseUrl()).create(BusPassengerServiceApi.class); - } - } - - /** - * 获取Bus司机端的sn - * @return - */ - private String getDriverAppSn(){ - return CallerTelematicManager.INSTANCE.getServerToken(); -// return "X2020211111NG0XNFK"; - } - - /** - * 查询绑定行驶的小巴车路线 - * @param context - * @param callback - */ - public void queryDriverSiteByCoordinate(Context context - ,BusPassengerServiceCallback callback){ - mBusPassengerServiceApi.queryDriverSiteByCoordinate(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusPassengerQueryLineRequest(getDriverAppSn())) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"queryDriverSiteByCoordinate")); - } - - /** - * 查询司机端出车收车状态,以及车牌号 - * @param context - * @param callback - */ - public void queryDriverOperationStatus(Context context, BusPassengerServiceCallback callback){ - mBusPassengerServiceApi.queryDriverOperationStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,getDriverAppSn()) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"queryDriverOperationStatus")); - } - - - private SubscribeImpl getSubscribeImpl( - Context context, BusPassengerServiceCallback callback, String apiName) { - return new SubscribeImpl(RequestOptions.create(context)) { - @Override - public void onSuccess(T o) { - super.onSuccess(o); - CallerLogger.INSTANCE.e(M_BUS_P + TAG,apiName + - ": onSuccess() " + o.msg); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(Throwable e) { - super.onError(e); - CallerLogger.INSTANCE.e(M_BUS_P + TAG,apiName + - ": onError() " + e.getMessage()); - if (callback != null) { - callback.onError(); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - CallerLogger.INSTANCE.e(M_BUS_P + TAG,String.format(apiName + - ": onError() code = %d; message = %s;", code, message)); - if (callback != null) { - callback.onFail(code, message); - } - } - }; - } -} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt new file mode 100644 index 0000000000..0e70161643 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.kt @@ -0,0 +1,62 @@ +package com.mogo.och.bus.passenger.network + +import android.content.Context +import com.mogo.och.bus.passenger.constant.BusPassengerConst.Companion.getBaseUrl +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken +import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.och.bus.passenger.bean.BusPassengerQueryLineRequest +import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl +import com.mogo.och.common.module.biz.network.interceptor.transformTry + +/** + * Created on 2022/3/31 + */ +object BusPassengerServiceManager { + + private var mBusPassengerServiceApi = MoGoRetrofitFactory.getInstance(getBaseUrl()) + .create(BusPassengerServiceApi::class.java) + + /** + * 获取Bus司机端的sn + * @return + */ + private val driverAppSn: String + get() = getServerToken() + /** + * 查询绑定行驶的小巴车路线 + * @param context + * @param callback + */ + @JvmStatic + fun queryDriverSiteByCoordinate( + context: Context, callback: OchCommonServiceCallback? + ) { + mBusPassengerServiceApi.queryDriverSiteByCoordinate( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusPassengerQueryLineRequest(driverAppSn)) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverSiteByCoordinate")) + } + + /** + * 查询司机端出车收车状态,以及车牌号 + * @param context + * @param callback + */ + @JvmStatic + fun queryDriverOperationStatus( + context: Context, + callback: OchCommonServiceCallback?) { + mBusPassengerServiceApi.queryDriverOperationStatus( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + driverAppSn) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverOperationStatus")) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java index 143e4d1cc4..c9abd42c76 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java @@ -105,6 +105,7 @@ public abstract class BusPassengerBaseFragment 2) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "mLinePointsLatLng.size() = " +mLinePointsLatLng.size()); + if (mLinePointsLatLng.size() >= 2 && mCoordinatesLatLng.size() > 2) { //设置线段纹理 PolylineOptions polylineOptions = new PolylineOptions(); @@ -303,6 +303,7 @@ public class BusPassengerMapDirectionView texIndexList.clear(); mCoordinatesLatLng.clear(); mLinePointsLatLng.clear(); + CallerLogger.INSTANCE.d(M_BUS_P + TAG, " mCoordinatesLatLng.clear " ); } public void onCreateView(Bundle savedInstanceState) { diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java index 4f5d0d0451..e56557e570 100644 --- a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.amap.api.maps.model.LatLng; import com.elegant.utils.UiThreadHandler; +import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; @@ -26,6 +27,7 @@ import com.mogo.och.bus.passenger.presenter.BaseBusPassengerPresenter; import com.mogo.och.bus.passenger.ui.layoutmanager.CenterLayoutManager; import com.mogo.och.bus.passenger.utils.BPRouteDataTestUtils; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; +import com.mogo.och.common.module.wigets.MarqueeTextView; import java.util.ArrayList; import java.util.List; @@ -49,7 +51,7 @@ public class BusPassengerRouteFragment extends private TextView mSpeedTv; private ConstraintLayout mNoLineInfoView; private TextView mCarPlateNum; - private TextView mLineName; + private MarqueeTextView mLineName; private TextView mOperationTime; private ConstraintLayout mRouteInfoView; private RecyclerView mStationsListRv; @@ -97,19 +99,21 @@ public class BusPassengerRouteFragment extends mMapArrowIcon = findViewById(R.id.bus_p_arrow_nor); //测试 - mSpeedTv.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - BPRouteDataTestUtils.converToRouteData(); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - updateWayPointList(mStationsList,1); - } - },1000); - return false; - } - }); + if (DebugConfig.isDebug()){ + mSpeedTv.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + BPRouteDataTestUtils.converToRouteData(); + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + updateWayPointList(mStationsList,1); + } + },1000); + return false; + } + }); + } } @Override @@ -148,7 +152,7 @@ public class BusPassengerRouteFragment extends if (latLngList.size() > 0) { drawablePolyline(latLngList,haveArrivedIndex); } else { - clearPolyline(); + clearMapView(); } } @@ -164,7 +168,7 @@ public class BusPassengerRouteFragment extends }); } } else { - clearPolyline(); + clearMapView(); } } @@ -185,13 +189,13 @@ public class BusPassengerRouteFragment extends } } - public void clearPolyline() { + public void clearMapView() { if (mMapDirectionView != null) { UiThreadHandler.post(new Runnable() { @Override public void run() { mMapDirectionView.clearPolyline(); - + mMapDirectionView.clearCoordinatesLatLng(); } }); } @@ -230,7 +234,7 @@ public class BusPassengerRouteFragment extends mNoLineInfoView.setVisibility(View.VISIBLE); mRouteInfoView.setVisibility(View.GONE); updateArrivedStation(null,0,true); - clearPolyline(); + clearMapView(); clearMapMarkers(); } } @@ -240,10 +244,10 @@ public class BusPassengerRouteFragment extends mNoLineInfoView.setVisibility(View.VISIBLE); mRouteInfoView.setVisibility(View.GONE); updateArrivedStation(null,0,true); - clearPolyline(); + clearMapView(); clearMapMarkers(); } - emptyTv.setText(getString(R.string.bus_p_no_task)); + emptyTv.setText(getString(R.string.bus_p_no_task)); } public void hideNoTaskView(){ @@ -285,8 +289,7 @@ public class BusPassengerRouteFragment extends if (currentStationIndex == 0 && isArrived){ //到达始发站且并未出发, 恢复站点marker 清楚路径 清空路径点 SharedPrefsMgr.getInstance(getContext()) .remove(BusPassengerConst.BUS_SP_KEY_ORDER_SUM_DIS); - if (mMapDirectionView != null) mMapDirectionView.clearCoordinatesLatLng(); - clearPolyline(); + clearMapView(); } if (stations.size() > 0){ 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 420ea4fda3..7a7792bdc1 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 @@ -105,21 +105,25 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt index 9beee80214..b75ef88c4c 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt @@ -65,6 +65,9 @@ class BusConst { const val EVENT_PARAM_START_RESULT = "start_autopilot" // true/false const val EVENT_PARAM_PLATE_NUM = "plate_number" // 车牌号 const val EVENT_PARAM_ENV_ONLINE = "env_online" // 是否线上环境:true/false + // 埋点key:开启自动驾驶前已识别的异常,会导致无法开启自驾 + const val EVENT_KEY_AP_UNABLE_START_REASON = "event_key_och_bus_ap_unable_start_reason" + const val EVENT_PARAM_UNABLE_START_REASON = "unable_start_reason"; /** * 订单起终点Marker类型 diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java index 6d3d91396b..e9f730bdb4 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -34,6 +34,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListener import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.hmi.ui.widget.TrafficDataView; +import com.mogo.eagle.core.function.v2x.events.scenario.scene.airoad.AiRoadMarker; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; @@ -137,16 +138,19 @@ public abstract class BaseBusTabFragment public void onClickImpl(View v) { //切换地图的远近视图 if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight()) { - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers(); + // 2.11.0去掉 +// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers(); MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium); } else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) { - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) - .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS, BusConst.TYPE_MARKER_BUS_ORDER); + // 2.11.0去掉 +// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) +// .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS, BusConst.TYPE_MARKER_BUS_ORDER); MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_long); } else { - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers(); + // 2.11.0去掉 +// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers(); MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); mSwitchMapModeImage.setImageResource(R.drawable.bus_switch_map_medium); } @@ -313,12 +317,6 @@ public abstract class BaseBusTabFragment }); } - public void showNotice(String notice) { - getActivity().runOnUiThread(() -> { - AIAssist.getInstance(getContext()).speakTTSVoice(notice); - }); - } - public void playDI(){ SoundPoolHelper.getSoundPoolHelper().playSoundWithRedId(getContext(), R.raw.bus_di); } 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 aec54b198b..4ca1a90fa8 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 @@ -19,6 +19,7 @@ import com.mogo.eagle.core.data.temp.EventLogout; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.map.CallerHDMapManager; +import com.mogo.eagle.core.function.call.map.CallerSmpManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.map.MogoMarkerManager; @@ -35,6 +36,7 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst; import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.utils.BlinkAnimationUtil; import com.mogo.och.common.module.utils.OCHThreadPoolManager; +import com.mogo.och.common.module.wigets.MarqueeTextView; import com.mogo.och.common.module.wigets.OCHCommitDialog; import org.greenrobot.eventbus.Subscribe; @@ -53,7 +55,7 @@ public class BusFragment extends BaseBusTabFragment public static final String TAG = "BusFragment"; private TextView mSwitchLine; //切换路线 - private TextView mLineName; + private MarqueeTextView mLineName; private TextView mTaskTime; private Group groupStationsPanel; private ConstraintLayout noDataView; @@ -106,6 +108,14 @@ public class BusFragment extends BaseBusTabFragment showAutopilotBiz(); mSwitchLine.setOnClickListener(this); + + mLineName.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + showHideTestBar(); + return false; + } + }); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -396,7 +406,7 @@ public class BusFragment extends BaseBusTabFragment if (isAnimateRunning){ stopAutopilotAnimation(); } - mPresenter.autoDriveToNextStation(false); + mPresenter.autoDriveToNextStation(); } /** @@ -420,6 +430,9 @@ public class BusFragment extends BaseBusTabFragment setOrRemoveMapMaker(false, BusConst.BUS_END_MAP_MAKER, endStation.getLat() , endStation.getLon(),R.raw.end_marker); } + + //清除鹰眼右下角小地图轨迹 + CallerSmpManager.clearPolyline(); } /** diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java index fe1b1ba2d2..c1804854c0 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusLineModel.java @@ -11,8 +11,9 @@ import com.mogo.och.bus.bean.BusQueryLinesResponse; import com.mogo.och.bus.bean.BusRoutesResponse; import com.mogo.och.bus.callback.IBusLinesCallback; import com.mogo.och.bus.net.BusServiceManager; -import com.mogo.och.bus.net.IBusServiceCallback; import com.mogo.och.bus.ui.BusSwitchLineActivity; +import com.mogo.och.bus.util.BusSendTripInfoManager; +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; /** * @author: wangmingjun @@ -42,7 +43,7 @@ public class BusLineModel { mBusLinesCallback = callback; } public void queryBusLines(){ - BusServiceManager.getInstance().queryBusLines(mContext, new IBusServiceCallback() { + BusServiceManager.queryBusLines(mContext, new OchCommonServiceCallback() { @Override public void onSuccess(BusQueryLinesResponse data) { if (null == data && mBusLinesCallback != null) { @@ -56,7 +57,7 @@ public class BusLineModel { } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort("网络异常,请稍后重试"); }else { @@ -72,7 +73,7 @@ public class BusLineModel { * @param position 位置 */ public void queryBusLineTasksById(int lineId, int position,boolean autoRefresh){ - BusServiceManager.getInstance().queryBusTaskByLineId(mContext, String.valueOf(lineId),new IBusServiceCallback() { + BusServiceManager.queryBusTaskByLineId(mContext, String.valueOf(lineId),new OchCommonServiceCallback() { @Override public void onSuccess(BusQueryLineTaskResponse data) { if (null == data && mBusLinesCallback != null) { @@ -86,7 +87,7 @@ public class BusLineModel { } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort("网络异常,请稍后重试"); }else { @@ -97,7 +98,7 @@ public class BusLineModel { } public void commitSwitchLineId(int taskId,int lineId){ - BusServiceManager.getInstance().switchLine(mContext,taskId, new IBusServiceCallback() { + BusServiceManager.switchLine(mContext,taskId, new OchCommonServiceCallback() { @Override public void onSuccess(BusRoutesResponse o) { SharedPrefs.getInstance(mContext).putInt(BusSwitchLineActivity.LASTCOMMITLINEID,lineId); @@ -107,7 +108,7 @@ public class BusLineModel { } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort("网络异常,请稍后重试"); }else { 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 df6a0d1ea0..058019a8a9 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 @@ -46,16 +46,21 @@ import com.mogo.och.bus.callback.IRefreshBusStationsCallback; import com.mogo.och.bus.callback.ISlidePannelHideCallback; import com.mogo.och.bus.constant.BusConst; import com.mogo.och.bus.net.BusServiceManager; -import com.mogo.och.bus.net.IBusServiceCallback; import com.mogo.och.bus.presenter.BusModelLoopManager; import com.mogo.och.bus.util.BusAnalyticsManager; +import com.mogo.och.bus.util.BusSendTripInfoManager; import com.mogo.och.bus.util.BusTrajectoryManager; import com.mogo.och.common.module.biz.constant.OchCommonConst; +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; import com.mogo.och.common.module.biz.provider.LoginService; +import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.DateTimeUtil; +import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.och.common.module.utils.SoundPoolHelper; +import com.mogo.och.common.module.utils.ToastUtilsOch; +import com.mogo.och.common.module.voice.VoiceNotice; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; @@ -63,7 +68,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import io.reactivex.disposables.Disposable; import io.reactivex.exceptions.UndeliverableException; import io.reactivex.functions.Consumer; import io.reactivex.plugins.RxJavaPlugins; @@ -85,8 +89,6 @@ public class BusOrderModel { public double mLongitude = 0; public double mLatitude = 0; private Context mContext; - private Disposable mBusOrdersDisposable; //定时轮询小巴车订单 - private List prevBusOrderNos = new ArrayList<>(); private final List stationList = new ArrayList<>(); private BusRoutesResult busRoutesResult = null; /** @@ -107,6 +109,9 @@ public class BusOrderModel { private volatile boolean isArrivedStation = false; + //0: 代表没有启动过 1代表是启动第一次,当>=1 代表是重试 每次到站/路线结束清空置为0 + private volatile int firstStartAutopilot = 0; + private LoginService loginService; private long prePassengerWriteOffTime = 0; //记录最后查询到乘客核销的时间 @@ -251,15 +256,15 @@ public class BusOrderModel { BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex +1); - BusServiceManager.getInstance().updateOrderRoute(mContext, currentLineId, currentStation.getSiteId() - , nextStation.getSiteId(), points, new IBusServiceCallback() { + BusServiceManager.updateOrderRoute(mContext, currentLineId, currentStation.getSiteId() + , nextStation.getSiteId(), points, new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { if (isGoingToNextStation){//重试 updateOrderRoute(); } @@ -274,9 +279,7 @@ public class BusOrderModel { } public void release(){ - if (mBusOrdersDisposable != null) { - mBusOrdersDisposable.dispose(); - } + startOrStopOrderLoop(false); startOrStopQueryPassengerWriteOff(false); MogoApisHandler.getInstance() @@ -346,10 +349,9 @@ public class BusOrderModel { startLon, startLat, location.getLongitude(), location.getLatitude() ); - CallerLogger.INSTANCE.d(M_BUS + TAG,"judgeArrivedStation() distance = " + distance - +" to " + upcomingStation.getName()); - if ( distance <= BusConst.ARRIVE_AT_END_STATION_DISTANCE ) { + CallerLogger.INSTANCE.d(M_BUS + TAG,"行程日志-judgeArrivedStation() distance = " + distance + +" to " + upcomingStation.getName()); onArriveAt(null); //无自动驾驶到站信息传null return; } @@ -360,7 +362,7 @@ public class BusOrderModel { */ public void queryBusRoutes() { CallerLogger.INSTANCE.d(M_BUS + TAG, "查询小巴路线"); - BusServiceManager.getInstance().queryBusRoutes(mContext, new IBusServiceCallback() { + BusServiceManager.queryBusRoutes(mContext, new OchCommonServiceCallback() { @Override public void onSuccess(BusRoutesResponse data) { if ( data == null @@ -372,13 +374,16 @@ public class BusOrderModel { if (refreshBusStationsCallback != null){ refreshBusStationsCallback.updateEmptyUi(); } + clearAutopilotControlParameters(); + closeBeautificationMode(); + clearStartAutopilotTag(); return; } CallerLogger.INSTANCE.d(M_BUS + TAG, "获取到小巴路线数据: " + data ); updateBusStatus( data.getResult()); } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { // 重复请求小巴路线,直至成功 //改为任务,为空不再去一直取 // queryBusStationDelay(); @@ -429,11 +434,13 @@ public class BusOrderModel { refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(),lineTime, stationList,arrivingOrArrivedStationIndex,true); } + clearAutopilotControlParameters(); }else { if (refreshBusStationsCallback != null){ refreshBusStationsCallback.updateBusTaskStatus(busRoutesResult.getName(),lineTime, stationList,arrivingOrArrivedStationIndex,false); } + updateAutopilotControlParameters(); } } @@ -442,87 +449,109 @@ public class BusOrderModel { */ public void abortTask() { CallerLogger.INSTANCE.d( M_BUS + TAG, "结束当前路线abortTask"); - BusServiceManager.getInstance().abortTask(mContext, currentTaskId - , new IBusServiceCallback() { + BusServiceManager.abortTask(mContext, currentTaskId + , new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { CallerLogger.INSTANCE.d(M_BUS + TAG, "abortTask success: " + o); - isGoingToNextStation = false; if (o.code == 0){ // 重置成功 + endOrAbortTaskSuccess(); + clearBusStationDatas(); queryBusRoutes(); startOrStopQueryPassengerWriteOff(false); } } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { ToastUtils.showShort(failMsg); } }); } + /** + * 中断或者正常结束任务后的处理 + */ + private void endOrAbortTaskSuccess() { + + isGoingToNextStation = false; + backgroundCurrentStationIndex = 0; + + if (busRoutesResult != null){ + BusSendTripInfoManager.INSTANCE.sendBusTripInfo(BusSendTripInfoManager.END_TRIP + , busRoutesResult.getName() + ,"" + ,"" + ,false); + } + } + /** * 离站上报成功后渲染站点 * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理,不能直接渲染 */ - private void leaveStationSuccess(boolean isRestart) { + private void leaveStationSuccess(int leaveIndex,String leaveStation,String nextStation) { + + onStartAutopilot(leaveIndex); + + leaveTTSTips(nextStation); + + if (busRoutesResult != null){ + boolean isLastStop = false; + if (leaveIndex + 1 == stationList.size() -1){ + isLastStop = true; + } + //给bus外屏发送 + BusSendTripInfoManager.INSTANCE.sendBusTripInfo(BusSendTripInfoManager.LEAVE_STATION + , busRoutesResult.getName() + ,leaveStation + ,nextStation + ,isLastStop); + } + } + + private void onStartAutopilot(int leaveIndex) { //开启自动驾驶 2.10.0: 如果自动驾驶状态下开启, 非自动驾驶状态下不开启,需手动点击自动驾驶按钮开启 - if (isRestart || CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() - == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ - startAutopilot(isRestart); - } - - if (isGoingToNextStation) { - // 为了避免恢复自动驾驶时重复的接口请求 - return; - } isGoingToNextStation = true; - -// AIAssist.getInstance( mContext ).speakTTSVoice( "欢迎乘坐’蘑菇车联‘无人驾驶小巴车,请您坐好,注意乘车安全,行程即将开始" ); + if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() + == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ + startAutopilot(false,leaveIndex); + }else { + firstStartAutopilot = 0; + } } /** * 开启自动驾驶 * @param isRestart */ - private void startAutopilot(boolean isRestart) { + private void startAutopilot(boolean isRestart,int leaveIndex) { - if (backgroundCurrentStationIndex +1 > stationList.size() - 1 || !isGoingToNextStation){ + if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().getAutopilotAbilityStatus()){ + ToastUtils.showLong(OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason() + + ", 请稍候重试"); + triggerUnableStartAPReasonEvent(); return; } + firstStartAutopilot ++; + triggerStartServiceEvent(isRestart, false); - BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); - BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex + 1); - - AutopilotControlParameters parameters = new AutopilotControlParameters(); - parameters.isSpeakVoice = !isRestart; - parameters.routeID = busRoutesResult.getLineId(); - parameters.routeName = busRoutesResult.getName(); - parameters.startName = PinYinUtil.getPinYinHeadChar(currentStation.getName()); - parameters.endName = PinYinUtil.getPinYinHeadChar(nextStation.getName()); - parameters.startLatLon = new AutopilotControlParameters - .AutoPilotLonLat( currentStation.getLat(), currentStation.getLon() ); - parameters.endLatLon = new AutopilotControlParameters - .AutoPilotLonLat( nextStation.getLat(), nextStation.getLon() ); - parameters.vehicleType = VEHICLE_TYPE; - if (parameters.autoPilotLine == null) { - parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( - busRoutesResult.getLineId(), - busRoutesResult.csvFileUrl, busRoutesResult.csvFileMd5, - busRoutesResult.txtFileUrl, busRoutesResult.txtFileMd5, - busRoutesResult.contrailSaveTime, busRoutesResult.carModel, - busRoutesResult.csvFileUrlDPQP, busRoutesResult.csvFileMd5DPQP, - busRoutesResult.txtFileUrlDPQP, busRoutesResult.txtFileMd5DPQP, - busRoutesResult.contrailSaveTimeDPQP); + AutopilotControlParameters parameters = initAutopilotControlParameters(leaveIndex); + if (null == parameters) { + CallerLogger.INSTANCE.e(M_BUS + TAG, "行程日志-AutopilotControlParameters is empty."); + return; } - CallerLogger.INSTANCE.d( M_BUS + TAG, "开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) - +" startLatLon="+currentStation.getName()+",endLatLon="+nextStation.getName()); + CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters); + CallerLogger.INSTANCE.d( M_BUS + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) + +" startLatLon="+parameters.startName+",endLatLon="+parameters.endName + + "isRestart = " + isRestart); + if (mControllerStatusCallback != null) { mControllerStatusCallback.startOpenAutopilot(); } @@ -532,16 +561,15 @@ public class BusOrderModel { * 到站查询核销乘客 */ public void queryPassengerWriteOff(){ - //todo 查询接口拿到核销乘客波播报 if ( backgroundCurrentStationIndex > stationList.size() - 1 ) { //到站短时间内调用多次 CallerLogger.INSTANCE.e( M_BUS + TAG, "数组越界" ); return; } - BusServiceManager.getInstance().queryStationWriteOffPassengers(mContext, + BusServiceManager.queryStationWriteOffPassengers(mContext, currentTaskId, stationList.get(backgroundCurrentStationIndex).getSiteId(), prePassengerWriteOffTime, - new IBusServiceCallback(){ + new OchCommonServiceCallback(){ @Override public void onSuccess(BusQueryWriteOffPassengersResponse o) { @@ -553,7 +581,7 @@ public class BusOrderModel { } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { } }); @@ -591,64 +619,86 @@ public class BusOrderModel { } int arrivedStationIndex = backgroundCurrentStationIndex + 1; String arriveStation = stationList.get(arrivedStationIndex).getName(); + String departureStopName = stationList.get(backgroundCurrentStationIndex).getName(); CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation-currentStationIndex = "+ arrivedStationIndex); - BusServiceManager.getInstance().arriveSiteStation(mContext , + BusServiceManager.arriveSiteStation(mContext , stationList.get(arrivedStationIndex).getSeq(), stationList.get(arrivedStationIndex).getSiteId(), currentTaskId , - new IBusServiceCallback() { + new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { - CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation success"); + CallerLogger.INSTANCE.d(M_BUS + TAG,"行程日志-arriveSiteStation success"); queryBusRoutes(); - ttsTips(String.format(mContext - .getString(R.string.bus_arrived_station_tip), - arriveStation)); + arriveStationSuccess(arrivedStationIndex,departureStopName,arriveStation); //5s轮询核销乘客 startOrStopQueryPassengerWriteOff(true); } @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - }else { - ToastUtils.showShort(failMsg); + public void onFail(int code, String failMsg) { + isArrivedStation = false; + isGoingToNextStation = true; + if (ToastUtilsOch.isCustomFastClick(5000)){ + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort("网络异常,请稍后重试"); + }else { + ToastUtils.showShort(failMsg); + } } } }); } + private void arriveStationSuccess(int arrivedStationIndex,String departureStopName,String arriveStation) { + if (busRoutesResult != null){ + boolean isLastStop = false; + if (arrivedStationIndex == busRoutesResult.getSites().size() - 1 ){ + isLastStop = true; + } + //给bus外屏发送 + BusSendTripInfoManager.INSTANCE.sendBusTripInfo(BusSendTripInfoManager.ARRIVE_STATION + , busRoutesResult.getName() + ,departureStopName + ,arriveStation + ,isLastStop); + } + + VoiceNotice.showNotice(String.format(mContext + .getString(R.string.bus_arrived_station_tip), + arriveStation)); + } + /** * 离站上报 */ - public void leaveStation(boolean isRestart){ + public void leaveStation(){ CallerLogger.INSTANCE.d(M_BUS + TAG,"leaveStation-backgroundCurrentStationIndex = "+backgroundCurrentStationIndex); String nextStationName = ""; if (backgroundCurrentStationIndex < stationList.size() - 1){ nextStationName = stationList.get(backgroundCurrentStationIndex + 1).getName(); } + final String currentStationName = stationList.get(backgroundCurrentStationIndex).getName(); String finalNextStationName = nextStationName; - BusServiceManager.getInstance().leaveStation(mContext, + BusServiceManager.leaveStation(mContext, stationList.get(backgroundCurrentStationIndex).getSeq(), stationList.get(backgroundCurrentStationIndex).getSiteId(), currentTaskId, - new IBusServiceCallback() { + new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { isArrivedStation = false; - CallerLogger.INSTANCE.d( M_BUS + TAG, "自动驾驶开启开往下一站====" ); + CallerLogger.INSTANCE.d( M_BUS + TAG, "行程日志-离站成功开往下一站====" ); //需要更改当前站和下一站的状态 然后渲染 startOrStopQueryPassengerWriteOff(false); - leaveStationSuccess(isRestart); - leaveTTSTips(finalNextStationName); queryBusRoutes(); + leaveStationSuccess(backgroundCurrentStationIndex,currentStationName,finalNextStationName); } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { if (!NetworkUtils.isConnected(mContext)) { ToastUtils.showShort("网络异常,请稍后重试"); }else{ @@ -660,20 +710,9 @@ public class BusOrderModel { //车站10s后播报 private void leaveTTSTips(String nextStation) { - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - ttsTips(String.format(mContext - .getString(R.string.bus_leave_station_tip), - nextStation)); - } - },DELAY_10S); - } - - private void ttsTips(String notice) { - UiThreadHandler.post(() ->{ - AIAssist.getInstance(mContext).speakTTSVoice(notice); - }); + VoiceNotice.showNotice(String.format(mContext + .getString(R.string.bus_leave_station_tip), + nextStation),DELAY_10S); } /** @@ -681,23 +720,23 @@ public class BusOrderModel { */ public void closeBeautificationMode() { if (FunctionBuildConfig.isDemoMode) {//收车结束美化 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; - CallerAutoPilotManager.INSTANCE.setIgnoreConditionDraw(false); - CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); - CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为false(收车)"); + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; //是否强制绘制引导线 + CallerAutoPilotManager.INSTANCE.setIgnoreConditionDraw(false);// 同步给乘客屏 + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾 + CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为false"); } } /** * 开启自动驾驶到下一站 */ - public void autoDriveToNextStation(boolean isRestart) { + public void autoDriveToNextStation() { if ( backgroundCurrentStationIndex >= stationList.size() - 1 ) { // 当前站是最后一站,结束当前行程 travelOver(); return; } - leaveStation(isRestart); + leaveStation(); } /** @@ -735,25 +774,38 @@ public class BusOrderModel { if (backgroundCurrentStationIndex == 0 && stationList.get(0).getDrivingStatus() == STATION_STATUS_STOPPED && !stationList.get(0).isLeaving()){ //默认是第一站到站查询 + if (busRoutesResult != null){ // 第一站到站也是行程开始的时候 + BusSendTripInfoManager.INSTANCE.sendBusTripInfo(BusSendTripInfoManager.START_TRIP + ,busRoutesResult.getName(),"","",false); + } startOrStopQueryPassengerWriteOff(true); } BusStationBean currentStation = stationList.get(backgroundCurrentStationIndex); CallerLogger.INSTANCE.d( M_BUS + TAG, - "渲染站点信息服务端currentStationIndex="+backgroundCurrentStationIndex + "行程日志-STATION_STATUS_STOPPED-backgroundCurrentStationIndex=" + +backgroundCurrentStationIndex +" isLeaving()="+currentStation.isLeaving()); // 美化是否开始 if (FunctionBuildConfig.isDemoMode && (backgroundCurrentStationIndex >= 0 - && backgroundCurrentStationIndex <= stationList.size()-1) - && stationList.get(backgroundCurrentStationIndex).isLeaving()){//行驶过程中设置美化 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; - CallerAutoPilotManager.INSTANCE.setIgnoreConditionDraw(true); - CallerAutoPilotManager.INSTANCE.setIPCDemoMode(true); - CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为true(每次滑动出发)"); + && backgroundCurrentStationIndex <= stationList.size()-1)){//行驶过程中设置美化 + if (stationList.get(backgroundCurrentStationIndex).isLeaving()){ + startBeautificationMode(); + CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为true(每次滑动出发)"); + }else if (backgroundCurrentStationIndex >0 && backgroundCurrentStationIndex < stationList.size()-1){ + //美化模式下 中间站点到站 引导线要一直绘制,所以此处不出强制绘制不传false + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); + CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:false(到达中间站)"); + clearStartAutopilotTag(); + }else{ + closeBeautificationMode(); + clearStartAutopilotTag(); + } } + if ( currentStation.isLeaving() && slidePanelHideCallback != null) { slidePanelHideCallback.hideSlidePanel(); } @@ -765,6 +817,16 @@ public class BusOrderModel { BusTrajectoryManager.getInstance().syncTrajectoryInfo(); } + private void clearStartAutopilotTag() { + firstStartAutopilot = 0; + } + + private void startBeautificationMode() { + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; + CallerAutoPilotManager.INSTANCE.setIgnoreConditionDraw(true); + CallerAutoPilotManager.INSTANCE.setIPCDemoMode(true); + } + public void clearBusStationDatas(){ if (refreshBusStationsCallback != null){ refreshBusStationsCallback.clearBusStationsMarkers(); @@ -782,10 +844,13 @@ public class BusOrderModel { * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 */ public void restartAutopilot() { - CallerLogger.INSTANCE.d( M_BUS + TAG, "重启自动驾驶===" + isGoingToNextStation ); + CallerLogger.INSTANCE.d( M_BUS + TAG, "行程日志-重启自动驾驶===" + isGoingToNextStation ); //只去启动自动驾驶,不再去上报离站 - startAutopilot(true); -// autoDriveToNextStation(true); + startAutopilot(firstStartAutopilot >= 1,-1); + } + + public boolean isRestartAutopilot(){ + return firstStartAutopilot > 1; } /** @@ -808,22 +873,22 @@ public class BusOrderModel { */ private void endTask() { CallerLogger.INSTANCE.d( M_BUS + TAG, "任务正常走完endTask()"); - BusServiceManager.getInstance().endTask(mContext, currentTaskId - , new IBusServiceCallback() { + BusServiceManager.endTask(mContext, currentTaskId + , new OchCommonServiceCallback() { @Override public void onSuccess(BaseData o) { CallerLogger.INSTANCE.d(M_BUS + TAG, "endTask success: " + o); if (o.code == 0){ - isGoingToNextStation = false; - backgroundCurrentStationIndex = 0; + endOrAbortTaskSuccess(); + clearBusStationDatas(); queryBusRoutes();// 重新获取任务 startOrStopQueryPassengerWriteOff(false); - ttsTips(mContext.getString(R.string.bus_end_task_tip)); + VoiceNotice.showNotice(mContext.getString(R.string.bus_end_task_tip)); } } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { ToastUtils.showShort(failMsg); } }); @@ -835,20 +900,34 @@ public class BusOrderModel { */ public void onArriveAt( MessagePad.ArrivalNotification data){ if ( backgroundCurrentStationIndex +1 > stationList.size() - 1 ) { - CallerLogger.INSTANCE.e( M_BUS + TAG, "到站异常,取消后续操作结束" ); + CallerLogger.INSTANCE.e( M_BUS + TAG, "行程日志-到站异常,取消后续操作结束" ); return; } + //MAP 280 每隔100ms左右返回一次到站, 导致在到达中间站后再次滑动出发后会有时间差,收到一次到站,出现问题 + //此处比对 自驾告诉的到站站点坐标和本地应到站站点坐标, 一致时才能到站 + if (data != null && data.getEndLocation() != null){ + + String latitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLatitude(),5); //wgs + String longitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLongitude(),5); + + int arrivedStationIndex = backgroundCurrentStationIndex + 1; + BusStationBean arriveStation = stationList.get(arrivedStationIndex); + String arriveLat = NumberFormatUtil.cutOutNumber(arriveStation.getLat(),5); + String arriveLon = NumberFormatUtil.cutOutNumber(arriveStation.getLon(),5); + + if (!latitude.equals(arriveLat) || !longitude.equals(arriveLon)){ + CallerLogger.INSTANCE.e( M_BUS + TAG, "行程日志-到站拦截,到站坐标不一致" ); + return; + } + } + if (isArrivedStation) return; isArrivedStation = true; - if (FunctionBuildConfig.isDemoMode && backgroundCurrentStationIndex <= stationList.size() - 1) {//到达一站结束美化 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; - CallerAutoPilotManager.INSTANCE.setIgnoreConditionDraw(false); - CallerAutoPilotManager.INSTANCE.setIPCDemoMode(false); - CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为false(到最后一站)"); - } - CallerLogger.INSTANCE.d( M_BUS + TAG, "到站====currentStationIndex=" + backgroundCurrentStationIndex); + CallerLogger.INSTANCE.d( M_BUS + TAG, "行程日志-当前==backgroundCurrentStationIndex=" + + backgroundCurrentStationIndex); + isGoingToNextStation = false; arriveSiteStation(); @@ -860,15 +939,15 @@ public class BusOrderModel { // 车机端上传心跳数据(只在出车状态时上传) public void runCarHeartbeat() { - BusServiceManager.getInstance().runCarHeartbeat(mContext, mLongitude, mLatitude, - new IBusServiceCallback() { + BusServiceManager.runCarHeartbeat(mContext, mLongitude, mLatitude, + new OchCommonServiceCallback() { @Override public void onSuccess(BaseData data) { } @Override - public void onFail(String failMsg) { + public void onFail(int code, String failMsg) { } }); @@ -898,6 +977,17 @@ public class BusOrderModel { currentStation.getName(), nextStation.getName(), currentLineId); } + public void triggerUnableStartAPReasonEvent() { + if (stationList == null || backgroundCurrentStationIndex >= stationList.size()-1) { + return; + } + BusStationBean currentStation = stationList.get( backgroundCurrentStationIndex); + BusStationBean nextStation = stationList.get( backgroundCurrentStationIndex +1); + BusAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( + currentStation.getName(), nextStation.getName(), currentLineId, + OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason()); + } + public BusRoutesResult getBusRoutesResult() { return busRoutesResult; } @@ -905,4 +995,67 @@ public class BusOrderModel { public int getCurrentStationIndex() { return backgroundCurrentStationIndex; } + + /** + * 将业务订单信息保存,鹰眼可取用 + */ + private void updateAutopilotControlParameters() { + + AutopilotControlParameters parameters = initAutopilotControlParameters(-1); + if (null == parameters){ + CallerLogger.INSTANCE.e(M_BUS + TAG, "AutopilotControlParameters is empty."); + return; + } + CallerLogger.INSTANCE.d(M_BUS + TAG, "AutopilotControlParameters is update."); + CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(parameters); + } + + private void clearAutopilotControlParameters(){ + CallerLogger.INSTANCE.d(M_BUS + TAG, "AutopilotControlParameters is clear."); + CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(null); + } + + private AutopilotControlParameters initAutopilotControlParameters(int leaveIndex) { + BusStationBean currentStation = null; + BusStationBean nextStation = null; + + if (leaveIndex < 0){ + if (backgroundCurrentStationIndex +1 > stationList.size() - 1 || !isGoingToNextStation){ + CallerLogger.INSTANCE.e(M_BUS + TAG, "行程日志-mismatch condition1."); + return null; + } + currentStation = stationList.get( backgroundCurrentStationIndex); + nextStation = stationList.get( backgroundCurrentStationIndex + 1); + }else { + if (leaveIndex +1 > stationList.size() - 1 || !isGoingToNextStation){ + CallerLogger.INSTANCE.e(M_BUS + TAG, "行程日志-mismatch condition2."); + return null; + } + currentStation = stationList.get( leaveIndex); + nextStation = stationList.get( leaveIndex + 1); + } + + AutopilotControlParameters parameters = new AutopilotControlParameters(); + parameters.routeID = busRoutesResult.getLineId(); + parameters.routeName = busRoutesResult.getName(); + parameters.startName = PinYinUtil.getPinYinHeadChar(currentStation.getName()); + parameters.endName = PinYinUtil.getPinYinHeadChar(nextStation.getName()); + parameters.startLatLon = new AutopilotControlParameters + .AutoPilotLonLat( currentStation.getLat(), currentStation.getLon() ); + parameters.endLatLon = new AutopilotControlParameters + .AutoPilotLonLat( nextStation.getLat(), nextStation.getLon() ); + parameters.vehicleType = VEHICLE_TYPE; + if (parameters.autoPilotLine == null) { + parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( + busRoutesResult.getLineId(), + busRoutesResult.csvFileUrl, busRoutesResult.csvFileMd5, + busRoutesResult.txtFileUrl, busRoutesResult.txtFileMd5, + busRoutesResult.contrailSaveTime, busRoutesResult.carModel, + busRoutesResult.csvFileUrlDPQP, busRoutesResult.csvFileMd5DPQP, + busRoutesResult.txtFileUrlDPQP, busRoutesResult.txtFileMd5DPQP, + busRoutesResult.contrailSaveTimeDPQP); + } + + return parameters; + } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java deleted file mode 100644 index d99fcc5d26..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.mogo.och.bus.net; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; - -import android.content.Context; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.eagle.core.network.MoGoRetrofitFactory; -import com.mogo.eagle.core.network.RequestOptions; -import com.mogo.eagle.core.network.SubscribeImpl; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.bus.bean.BusCloseTaskRequest; -import com.mogo.och.bus.bean.BusQueryLineTaskResponse; -import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.bean.BusQueryWriteOffPassengersResponse; -import com.mogo.och.bus.bean.BusRoutePlanningUpdateReqBean; -import com.mogo.och.bus.bean.BusRoutesResponse; -import com.mogo.och.bus.bean.BusWriteOffPassengersQueryRequest; -import com.mogo.och.bus.bean.CarHeartbeatReqBean; -import com.mogo.och.bus.bean.BusOrdersResponse; -import com.mogo.och.bus.bean.BusQueryLineStationsRequest; -import com.mogo.och.bus.bean.BusResetDrivingLineRequest; -import com.mogo.och.bus.bean.BusUpdateSiteStatusRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.constant.BusConst; -import com.mogo.och.bus.model.BusOrderModel; - -import java.util.List; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; - -/** - * @author: wangmingjun - * @date: 2021/10/20 - */ -public class BusServiceManager { - - private static final String TAG = BusServiceManager.class.getSimpleName(); - - private final IBusApiService mService; - - private static final class SingletonHolder { - private static final BusServiceManager INSTANCE = new BusServiceManager(); - } - - public static BusServiceManager getInstance(){ - return SingletonHolder.INSTANCE; - } - - private BusServiceManager(){ - mService = MoGoRetrofitFactory.getInstance(BusConst.getBaseUrl()).create(IBusApiService.class); - } - - /** - * 查询小巴车当前任务 - * @param context - * @param callback - */ - public void queryBusRoutes(Context context, IBusServiceCallback callback) { - //获取当前高德坐标 - - mService.queryBusRoutes(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - , new BusQueryLineStationsRequest()) - .subscribeOn( Schedulers.io() ).observeOn( AndroidSchedulers.mainThread() ) - .subscribe( getSubscribeImpl(context,callback,"queryBusRoutes")); - } - - /** - * 重置线路站点 - * @param context - * @param taskId - * @param callback - */ - public void switchLine(Context context, int taskId, IBusServiceCallback callback){ - mService.switchLine(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),new BusResetDrivingLineRequest(taskId)) - .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"switchLine")); - } - - /** - * 中断当前任务 - * @param context - * @param taskId - * @param callback - */ - public void abortTask(Context context, int taskId, IBusServiceCallback callback){ - mService.abortTask(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusCloseTaskRequest(taskId)) - .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"abortTask")); - } - - /** - * 正常结束任务 - * @param context - * @param taskId - * @param callback - */ - public void endTask(Context context, int taskId, IBusServiceCallback callback){ - mService.endTask(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusCloseTaskRequest(taskId)) - .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"endTask")); - } - - /** - * 离站上报 - * @param context - * @param seq - * @param siteId - * @param callback - */ - public void leaveStation(Context context, int seq, int siteId,int taskId, IBusServiceCallback callback){ - mService.leaveStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusUpdateSiteStatusRequest(taskId,siteId,seq)) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"leaveStation")); - } - - /** - * 到站更新站点状态 - * @param context - * @param seq - * @param siteId - * @param callback - */ - public void arriveSiteStation(Context context, int seq, int siteId,int taskId, - IBusServiceCallback callback){ - mService.arriveSiteStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusUpdateSiteStatusRequest(taskId,siteId,seq)) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"arriveSiteStation")); - } - - /** - * 查询下车乘客 - * @param context - * @param seq - * @param siteId - * @param callback - */ - public void queryStationLeaveAwayPassengers(Context context, int seq, int siteId - , IBusServiceCallback callback){ - mService.queryStationLeaveAwayPassengers( MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),new QueryLeaveAwayPassengersRequest(seq,siteId)) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"queryStationLeaveAwayPassengers")); - } - - /** - * 查询当前到站点核销乘客 - * @param context - * @param siteId - * @param callback - */ - public void queryStationWriteOffPassengers(Context context,int taskId,int siteId,long prePassengerTime - , IBusServiceCallback callback){ - mService.queryWriteOffPassengers( MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusWriteOffPassengersQueryRequest(taskId,siteId,prePassengerTime)) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"queryStationWriteOffPassengers")); - } - - - - /** - * 查询小巴车订单 - * @param context - * @param callback - */ - public void queryBusOrders(Context context, IBusServiceCallback callback){ - mService.queryBusOrders(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"queryBusOrders")); - } - - public void queryBusLines(Context context, IBusServiceCallback callback){ - mService.queryBusLines(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"queryBusLines")); - } - - public void queryBusTaskByLineId(Context context,String lineId,IBusServiceCallback callback){ - mService.queryBusTaskByLineId(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,lineId) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"queryBusLines")); - } - - public void updateOrderRoute(Context context,int lineId, int startSiteId, int endSiteId - , List< BusRoutePlanningUpdateReqBean.Result > points - , IBusServiceCallback callback){ - mService.updateOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new BusRoutePlanningUpdateReqBean(MoGoAiCloudClientConfig.getInstance().getSn() - ,lineId,startSiteId,endSiteId, points)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"updateOrderRoute")); - } - - /** - * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 - * @param context - * @param lon - * @param lat - * @param callback - */ - public void runCarHeartbeat(Context context, double lon, double lat, - IBusServiceCallback callback) { - mService.runCarHeartbeat(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),new CarHeartbeatReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), lon, lat)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "runCarHeartbeat")); - } - - private SubscribeImpl getSubscribeImpl(Context context, IBusServiceCallback callback, String apiName){ - return new SubscribeImpl(RequestOptions.create(context)){ - @Override - public void onSuccess(T o) { - super.onSuccess(o); - CallerLogger.INSTANCE.e(M_BUS + TAG,apiName + ": onSuccess() " + o.msg); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - CallerLogger.INSTANCE.e(M_BUS + TAG,apiName + ": onError() " +"msg="+ message+" code="+code); - if (callback != null) { - callback.onFail("msg="+ message+" code="+code); - } - } - - @Override - public void onError(Throwable e) { - super.onError(e); - CallerLogger.INSTANCE.e(M_BUS + TAG,apiName + ": onError() " +" e="+e.getMessage()); - if (callback != null) { - callback.onFail(e.getMessage()); - } - } - }; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.kt new file mode 100644 index 0000000000..126932adbc --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.kt @@ -0,0 +1,268 @@ +package com.mogo.och.bus.net + +import android.content.Context +import com.mogo.och.bus.constant.BusConst.Companion.getBaseUrl +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.och.bus.bean.* +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl +import com.mogo.och.common.module.biz.network.interceptor.transformTry + +/** + * @author: wangmingjun + * @date: 2021/10/20 + */ +object BusServiceManager { + + private val mService: IBusApiService = MoGoRetrofitFactory.getInstance(getBaseUrl()).create( + IBusApiService::class.java + ) + + /** + * 查询小巴车当前任务 + * @param context + * @param callback + */ + @JvmStatic + fun queryBusRoutes(context: Context, callback: OchCommonServiceCallback?) { + //获取当前高德坐标 + mService.queryBusRoutes( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusQueryLineStationsRequest() + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryBusRoutes")) + } + + /** + * 重置线路站点 + * @param context + * @param taskId + * @param callback + */ + @JvmStatic + fun switchLine( + context: Context, + taskId: Int, + callback: OchCommonServiceCallback? + ) { + mService.switchLine( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusResetDrivingLineRequest(taskId) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "switchLine")) + } + + /** + * 中断当前任务 + * @param context + * @param taskId + * @param callback + */ + @JvmStatic + fun abortTask(context: Context, taskId: Int, callback: OchCommonServiceCallback?) { + mService.abortTask( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusCloseTaskRequest(taskId) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "abortTask")) + } + + /** + * 正常结束任务 + * @param context + * @param taskId + * @param callback + */ + @JvmStatic + fun endTask(context: Context, taskId: Int, callback: OchCommonServiceCallback?) { + mService.endTask( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusCloseTaskRequest(taskId) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "endTask")) + } + + /** + * 离站上报 + * @param context + * @param seq + * @param siteId + * @param callback + */ + @JvmStatic + fun leaveStation( + context: Context, + seq: Int, + siteId: Int, + taskId: Int, + callback: OchCommonServiceCallback? + ) { + mService.leaveStation( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusUpdateSiteStatusRequest(taskId, siteId, seq) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "leaveStation")) + } + + /** + * 到站更新站点状态 + * @param context + * @param seq + * @param siteId + * @param callback + */ + @JvmStatic + fun arriveSiteStation( + context: Context, seq: Int, siteId: Int, taskId: Int, + callback: OchCommonServiceCallback? + ) { + mService.arriveSiteStation( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusUpdateSiteStatusRequest(taskId, siteId, seq) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "arriveSiteStation")) + } + + /** + * 查询下车乘客 + * @param context + * @param seq + * @param siteId + * @param callback + */ + @JvmStatic + fun queryStationLeaveAwayPassengers( + context: Context, + seq: Int, + siteId: Int, + callback: OchCommonServiceCallback? + ) { + mService.queryStationLeaveAwayPassengers( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + QueryLeaveAwayPassengersRequest(seq, siteId) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryStationLeaveAwayPassengers")) + } + + /** + * 查询当前到站点核销乘客 + * @param context + * @param siteId + * @param callback + */ + @JvmStatic + fun queryStationWriteOffPassengers( + context: Context, + taskId: Int, + siteId: Int, + prePassengerTime: Long, + callback: OchCommonServiceCallback? + ) { + mService.queryWriteOffPassengers( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusWriteOffPassengersQueryRequest(taskId, siteId, prePassengerTime) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryStationWriteOffPassengers")) + } + + /** + * 查询小巴车订单 + * @param context + * @param callback + */ + @JvmStatic + fun queryBusOrders(context: Context, callback: OchCommonServiceCallback?) { + mService.queryBusOrders( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + MoGoAiCloudClientConfig.getInstance().sn + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryBusOrders")) + } + @JvmStatic + fun queryBusLines(context: Context, callback: OchCommonServiceCallback?) { + mService.queryBusLines( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + MoGoAiCloudClientConfig.getInstance().sn + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryBusLines")) + } + @JvmStatic + fun queryBusTaskByLineId( + context: Context, + lineId: String?, + callback: OchCommonServiceCallback? + ) { + mService.queryBusTaskByLineId( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + lineId + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryBusLines")) + } + @JvmStatic + fun updateOrderRoute( + context: Context, + lineId: Int, + startSiteId: Int, + endSiteId: Int, + points: List?, + callback: OchCommonServiceCallback? + ) { + mService.updateOrderRoute( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + BusRoutePlanningUpdateReqBean( + MoGoAiCloudClientConfig.getInstance().sn, lineId, startSiteId, endSiteId, points + ) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "updateOrderRoute")) + } + + /** + * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 + * @param context + * @param lon + * @param lat + * @param callback + */ + @JvmStatic + fun runCarHeartbeat( + context: Context, lon: Double, lat: Double, + callback: OchCommonServiceCallback? + ) { + mService.runCarHeartbeat( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + CarHeartbeatReqBean( + MoGoAiCloudClientConfig.getInstance().sn, lon, lat + ) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "runCarHeartbeat")) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusServiceCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusServiceCallback.java deleted file mode 100644 index 966a86d980..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusServiceCallback.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.bus.net; - -/** - * @author: wangmingjun - * @date: 2021/10/20 - */ -public interface IBusServiceCallback< T >{ - void onSuccess(T o); - - void onFail(String failMsg); - - default void onError() { - - } -} 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 ec0839ab5a..0ed6ee5692 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 @@ -9,7 +9,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LifecycleOwner; +import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; +import com.mogo.commons.voice.AIAssist; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; @@ -28,7 +30,9 @@ import com.mogo.och.bus.model.BusOrderModel; import com.mogo.och.bus.util.BusTrajectoryManager; import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; import com.mogo.och.common.module.biz.callback.ILoginCallback; +import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.utils.SoundPoolHelper; +import com.mogo.och.common.module.voice.VoiceNotice; import com.zhidao.socket.utils.LoginStatusUtil; import org.jetbrains.annotations.NotNull; @@ -54,13 +58,13 @@ public class BusPresenter extends Presenter private int currentAutopilotStatus = -1; private List mStationList = new ArrayList<>(); private int mCurrentStation = 0; - private boolean isRestartAutopilot = false; public BusPresenter(BusFragment view) { super(view); //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); BusOrderModel.getInstance().init(); + OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); } @Override @@ -89,23 +93,24 @@ public class BusPresenter extends Presenter BusOrderModel.getInstance().setSlidePanelHideCallback(null); BusOrderModel.getInstance().setControllerStatusCallback(null); BusOrderModel.getInstance().setPassengerCallback(null); + OCHAdasAbilityManager.getInstance().release(); } public void abortTask() { BusOrderModel.getInstance().abortTask(); } - public void autoDriveToNextStation(boolean isRestart) { + public void autoDriveToNextStation() { currentAutopilotStatus = -1; - BusOrderModel.getInstance().autoDriveToNextStation(isRestart); - isRestartAutopilot = false; + BusOrderModel.getInstance().autoDriveToNextStation(); +// isRestartAutopilot = false; } public void restartAutopilot() { if (BusOrderModel.getInstance().isGoingToNextStation()){ currentAutopilotStatus = -1; BusOrderModel.getInstance().restartAutopilot(); - isRestartAutopilot = true; +// isRestartAutopilot = true; } } @@ -143,17 +148,6 @@ public class BusPresenter extends Presenter runOnUIThread(() -> mView.clearBusStationsMarkers()); } - private void functionDemoModeChange() { -// CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel ="," functionDemoModeChange ="+mCurrentStation); - if (FunctionBuildConfig.isDemoMode - && ((mCurrentStation > 0 && mCurrentStation < mStationList.size() - 1) - || ((mCurrentStation == 0 || mCurrentStation == mStationList.size() - 1) - && BusOrderModel.getInstance().isGoingToNextStation()))) { - runOnUIThread(() -> mView.onAutopilotStatusChanged( - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)); - } - } - @Override public void hideSlidePanel() { if (mView != null) { @@ -164,6 +158,7 @@ public class BusPresenter extends Presenter @Override public void onAutopilotArriveAtStation(MessagePad.ArrivalNotification arrivalNotification) { + CallerLogger.INSTANCE.e( M_BUS + TAG, "行程日志-onAutopilotArriveAtStation arrive"); BusOrderModel.getInstance().onArriveAt(arrivalNotification); } @@ -180,62 +175,51 @@ public class BusPresenter extends Presenter switch (state) { case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE: if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - if (currentAutopilotStatus == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {//2-->1语音提示 -// AIAssist.getInstance( getContext() ).speakTTSVoice( "已进入人工驾驶模式" ); - } - currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE; // 设置UI【自动驾驶】按钮是否展示 runOnUIThread(() -> mView.onAutopilotEnableChange(true)); -// if (BusOrderModel.getInstance().isGoingToNextStation()) { -// runOnUIThread(() -> mView.hideSlidePanel()); -// } - if (FunctionBuildConfig.isDemoMode - && ( - (mCurrentStation > 0 && mCurrentStation < mStationList.size() - 1) - || ( - (mCurrentStation == 0 || mCurrentStation == mStationList.size() - 1) - && BusOrderModel.getInstance().isGoingToNextStation() - ) - ) - ) { - CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel=", "有美化功能"); - return; - } - // 改变UI自动驾驶状态 - runOnUIThread(() -> mView.onAutopilotStatusChanged(currentAutopilotStatus)); } + if (FunctionBuildConfig.isDemoMode + && ( + (mCurrentStation >= 0 && mCurrentStation <= mStationList.size() - 1) + && BusOrderModel.getInstance().isGoingToNextStation() + ) + ) { + CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel=", "有美化功能"); + return; + } + if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE; + } + // 改变UI自动驾驶状态 + runOnUIThread(() -> mView.onAutopilotStatusChanged(currentAutopilotStatus)); break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING: if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING; - // 改变UI自动驾驶状态 - runOnUIThread(() -> mView.onAutopilotStatusChanged(currentAutopilotStatus)); BusOrderModel.getInstance().triggerStartServiceEvent( - isRestartAutopilot, true); + BusOrderModel.getInstance().isRestartAutopilot(), true); } + // 改变UI自动驾驶状态 + runOnUIThread(() -> mView.onAutopilotStatusChanged(currentAutopilotStatus)); break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE: - if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - if (currentAutopilotStatus == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {//2-->0语音提示 -// AIAssist.getInstance( getContext() ).speakTTSVoice( "自动驾驶已停止,请人工接管" ); - } - currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE; - if (FunctionBuildConfig.isDemoMode - && ( - (mCurrentStation > 0 && mCurrentStation < mStationList.size() - 1) - || ( - (mCurrentStation == 0 || mCurrentStation == mStationList.size() - 1) - && BusOrderModel.getInstance().isGoingToNextStation() - ) - ) - ) { - CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel=", "有美化功能"); - return; - } - runOnUIThread(() -> { - mView.onAutopilotStatusChanged(currentAutopilotStatus); - }); + if (FunctionBuildConfig.isDemoMode + && ( + (mCurrentStation >= 0 && mCurrentStation <= mStationList.size() - 1) + && BusOrderModel.getInstance().isGoingToNextStation() + + ) + ) { + CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel=", "有美化功能"); + return; } + + if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { + currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE; + } + runOnUIThread(() -> { + mView.onAutopilotStatusChanged(currentAutopilotStatus); + }); break; default: runOnUIThread(() -> mView.onAutopilotEnableChange(false)); @@ -320,10 +304,11 @@ public class BusPresenter extends Presenter @Override public void playPassenger(WriteOffPassenger passenger) { int passengerNum = passenger.passengerSize; - if (passengerNum > 1){ //多人播报 "x人" - mView.showNotice(passengerNum + "人"); - }else { //是 1 播放 "滴" - mView.playDI(); + if (passengerNum > 1){ //多人播报 "x人" ---》x人核验通过 + VoiceNotice.showNotice(passengerNum+"人核验通过", AIAssist.LEVEL3); + }else { //是 1 播放 "滴" 2022.11.09 改为: "核验通过" +// mView.playDI(); + VoiceNotice.showNotice("核验通过", AIAssist.LEVEL3); } } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java index 915070fad4..63d749bf3c 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsManager.java @@ -79,4 +79,31 @@ public class BusAnalyticsManager { UiThreadHandler.postDelayed(startAutopilotRunnable, BusConst.LOOP_PERIOD_15S); } } + + /** + * 触发"无法开启自驾已知异常"埋点 + * @param startName + * @param endName + * @param lineId + */ + public void triggerUnableStartAPReasonEvent(String startName, String endName, int lineId, + String reason) { + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + String plateNum = AppConfigInfo.INSTANCE.getPlateNumber(); + String dateTime = DateTimeUtils.getTimeText( + System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); + + HashMap params = new HashMap<>(); + + params.put(BusConst.EVENT_PARAM_SN, sn); + params.put(BusConst.EVENT_PARAM_PLATE_NUM, TextUtils.isEmpty(plateNum) ? "" : plateNum); + params.put(BusConst.EVENT_PARAM_ENV_ONLINE, + DebugConfig.getNetMode() == DebugConfig.NET_MODE_RELEASE ? true : false); + params.put(BusConst.EVENT_PARAM_TIME, dateTime); + params.put(BusConst.EVENT_PARAM_START_NAME, startName); + params.put(BusConst.EVENT_PARAM_END_NAME, endName); + params.put(BusConst.EVENT_PARAM_LINE_ID, lineId); + params.put(BusConst.EVENT_PARAM_UNABLE_START_REASON, reason); + AnalyticsManager.INSTANCE.track(BusConst.EVENT_KEY_AP_UNABLE_START_REASON, params); + } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusSendTripInfoManager.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusSendTripInfoManager.kt new file mode 100644 index 0000000000..9d0073363a --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusSendTripInfoManager.kt @@ -0,0 +1,36 @@ +package com.mogo.och.bus.util + +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant + +/** + * @author: wangmingjun + * @date: 2022/10/24 + */ +object BusSendTripInfoManager{ + + const val START_TRIP = 1 + const val END_TRIP = 2 + const val LEAVE_STATION = 3 + const val ARRIVE_STATION = 4 + + /** + * 行程信息 + * @param type 事件类型, 1:行程开始, 2:行程结束, 3:出站, 4:进站, 5:城市占道施工预警 + * @param lineName 路线名, for type 1, 2 + * @param departureStopName 出站站点名, for type 3, 4 + * @param arrivalStopName 下一站到达站点名, for type 3, 4 + * @param isLastStop 是否终点站(下一站或者要到达站) + * @return + */ + fun sendBusTripInfo(type: Int, lineName: String, + departureStopName: String, + arrivalStopName: String, + isLastStop: Boolean) { + d(SceneConstant.M_BUS + "BusSendTripInfoManager", "type: "+ type + +", lineName: "+ lineName +", departureStopName: "+ departureStopName + + ", arrivalStopName: "+arrivalStopName+", isLastStop: "+isLastStop) + CallerAutoPilotManager.sendTripInfo(type,lineName,departureStopName, arrivalStopName, isLastStop) + } +} 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 8609630b9c..1b9bbeec01 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 @@ -10,15 +10,16 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"> - 取消 暂无任务 + + + + 已到达%1$s,带好随身物品,下车请注意。 车辆起步,请扶稳坐好,前方到站是%1$s,请下车的乘客做好准备。 - 感谢您体验\'蘑菇车联\'无人驾驶小巴车,请您携带好随身物品,我们下次再见。 - 已到达%1$s,带好随身物品,下车请注意安全。 + 感谢您体验\'蘑菇车联\'自动驾驶小巴车,我们下次再见。 + diff --git a/OCH/mogo-och-common-module/build.gradle b/OCH/mogo-och-common-module/build.gradle index fe23c542d0..25fe5914f5 100644 --- a/OCH/mogo-och-common-module/build.gradle +++ b/OCH/mogo-och-common-module/build.gradle @@ -73,4 +73,6 @@ dependencies { implementation project(':core:function-impl:mogo-core-function-v2x') } + implementation project(':libraries:mogo-adas') + } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt b/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt index 5bacbfe0d7..9dc0b0093e 100644 --- a/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt +++ b/OCH/mogo-och-common-module/src/debug/java/com/mogo/och/common/module/utils/SimpleInterceptor.kt @@ -10,58 +10,9 @@ class SimpleInterceptor: Interceptor { val encodedPath = original.url().encodedPath() Log.e("SimpleInterceptor",original.method()+ encodedPath+original.url().encodedQuery()) when (encodedPath) { - "/autopilot-car-hailing/operation/v1/driver/bus/loginStatus" -> { - val builder = Response.Builder() - val create:ResponseBody - if(first) { - create = ResponseBody.create( - MediaType.parse("application/json"), - "{\"code\":0,\"msg\":\"\",\"data\":{\"servingStatus\":0,\"driverStatus\":1,\"orderNo\":\"12111\",\"purpose\":1,\"sn\":\"fjsdlfjslf\",\"plateNumber\":\"车牌号\",\"phone\":\"18811539480\",\"lineId\":\"线路id\",\"taskId\":\"任务id\"}}" - ) - first = false - }else{ - create = ResponseBody.create( - MediaType.parse("application/json"), - "{\"code\":0,\"msg\":\"\",\"data\":{\"servingStatus\":0,\"driverStatus\":0,\"orderNo\":\"12111\",\"purpose\":1,\"sn\":\"fjsdlfjslf\",\"plateNumber\":\"车牌号\",\"phone\":\"18811539480\",\"lineId\":\"线路id\",\"taskId\":\"任务id\"}}" - ) - first = true - } - builder.code(200) - builder.request(original) - builder.protocol(Protocol.HTTP_1_1) - builder.message("") - return builder.body(create).build() - } - "/autopilot-car-hailing/line/v2/driver/bus/task/query" -> { - val builder = Response.Builder() - val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":[{\"id\":1,\"taskStartTime\":1663722000000},{\"id\":2,\"taskStartTime\":1663725600000},{\"id\":3,\"taskStartTime\":1663729200000},{\"id\":4,\"taskStartTime\":1663732800000},{\"id\":5,\"taskStartTime\":1663736400000},{\"id\":6,\"taskStartTime\":1663740000000},{\"id\":7,\"taskStartTime\":1663743600000},{\"id\":8,\"taskStartTime\":1663747200000},{\"id\":9,\"taskStartTime\":1663750800000},{\"id\":10,\"taskStartTime\":1663754400000}]}") - builder.code(200) - builder.request(original) - builder.protocol(Protocol.HTTP_1_1) - builder.message("") - return builder.body(create).build() - } - "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startTask" -> { - val builder = Response.Builder() - val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":null}") - builder.code(200) - builder.request(original) - builder.protocol(Protocol.HTTP_1_1) - builder.message("") - return builder.body(create).build() - } - "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/endOperation" -> { - val builder = Response.Builder() - val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":null}") - builder.code(200) - builder.request(original) - builder.protocol(Protocol.HTTP_1_1) - builder.message("") - return builder.body(create).build() - } "/autopilot-car-hailing/cab/flow/v1/bus/driver/bus/startOperation" -> { val builder = Response.Builder() - val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":0,\"msg\":\"\",\"data\":null}") + val create = ResponseBody.create(MediaType.parse("application/json"), "{\"code\":100006,\"msg\":\"\",\"data\":null}") builder.code(200) builder.request(original) builder.protocol(Protocol.HTTP_1_1) diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt index d945f03a1f..a5b2277c7d 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginModel.kt @@ -71,66 +71,70 @@ object OchCommonLoginModel{ * 获取手机验证码 */ fun getPhoneCode(phone: String?) { - OchCommonServiceManager.getInstance().getPhoneCode(mContext, phone, - object : OchCommonServiceCallback { - override fun onSuccess(data: BaseData?) { - if (null != data && 0 == data.code) { - // 获取验证码成功 - ToastUtils.showShort(mContext?.getString(R.string.module_och_taxi_login_get_code_success)) - iTaxiLoginCallback?.getPhoneCodeSuccess() - } else { - if (data != null) { - ToastUtils.showShort(data.code) + mContext?.let { + OchCommonServiceManager.getPhoneCode(it, phone, + object : OchCommonServiceCallback { + override fun onSuccess(data: BaseData?) { + if (null != data && 0 == data.code) { + // 获取验证码成功 + ToastUtils.showShort(mContext?.getString(R.string.module_och_taxi_login_get_code_success)) + iTaxiLoginCallback?.getPhoneCodeSuccess() + } else { + if (data != null) { + ToastUtils.showShort(data.code) + } } } - } - override fun onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext?.getString(R.string.network_error_tip)) - } else { - ToastUtils.showShort(mContext?.getString(R.string.request_error_tip)) + override fun onError() { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort(mContext?.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(mContext?.getString(R.string.request_error_tip)) + } } - } - override fun onFail(code: Int, msg: String) { - ToastUtilsOch.showWithCodeMessage(code,msg) - } - }) + override fun onFail(code: Int, msg: String) { + ToastUtilsOch.showWithCodeMessage(code,msg) + } + }) + } + } fun gotoLogin(phone: String, code: String) { - val location4Login = TaxiLoginReqBean.Location4Login(mLatitude, mLongitude) - OchCommonServiceManager.getInstance().gotoLoginBycode(mContext, phone, code, location4Login, - object : OchCommonServiceCallback { - override fun onSuccess(data: TaxiLoginRespBean?) { - if (null != data && 0 == data.code) { - // 获取验证码成功 - ToastUtils.showShort(mContext?.getString(R.string.module_och_taxi_login_login_success)) - LoginStatusManager.setLoginStatus(TaxiLoginStatusEnum.Login) - mContext?.let { - SharedPrefs.getInstance(it).putString("och_account",phone) - } - iTaxiLoginCallback?.loginSuccess() - } else { - if (data != null) { - ToastUtils.showShort(data.code) + mContext?.let { + val location4Login = TaxiLoginReqBean.Location4Login(mLatitude, mLongitude) + OchCommonServiceManager.gotoLoginBycode(it, phone, code, location4Login, + object : OchCommonServiceCallback { + override fun onSuccess(data: TaxiLoginRespBean?) { + if (null != data && 0 == data.code) { + // 获取验证码成功 + ToastUtils.showShort(mContext?.getString(R.string.module_och_taxi_login_login_success)) + LoginStatusManager.setLoginStatus(TaxiLoginStatusEnum.Login) + mContext?.let { + SharedPrefs.getInstance(it).putString("och_account",phone) + } + iTaxiLoginCallback?.loginSuccess() + } else { + if (data != null) { + ToastUtils.showShort(data.code) + } } } - } - override fun onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext?.getString(R.string.network_error_tip)) - } else { - ToastUtils.showShort(mContext?.getString(R.string.request_error_tip)) + override fun onError() { + if (!NetworkUtils.isConnected(mContext)) { + ToastUtils.showShort(mContext?.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(mContext?.getString(R.string.request_error_tip)) + } } - } - override fun onFail(code: Int, msg: String) { - ToastUtilsOch.showWithCodeMessage(code,msg) - } - }) + override fun onFail(code: Int, msg: String) { + ToastUtilsOch.showWithCodeMessage(code,msg) + } + }) + } } - } \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java index 0b1e9f0bfb..a2951bfbde 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/model/OchCommonLoginStatusModel.java @@ -53,7 +53,7 @@ public abstract class OchCommonLoginStatusModel { * 8、登录页面关闭后查下状态 */ public void queryCarStatus() { - OchCommonServiceManager.getInstance().queryDriverServiceStatus(mContext, + OchCommonServiceManager.queryDriverServiceStatus(mContext, new OchCommonServiceCallback() { @Override public void onSuccess(DriverStatusQueryRespBean data) { @@ -93,7 +93,7 @@ public abstract class OchCommonLoginStatusModel { // 登出 public void logout(double mLatitude,double mLongitude) { TaxiLogoutReqBean.Location4Login location4Login = new TaxiLogoutReqBean.Location4Login(mLatitude, mLongitude); - OchCommonServiceManager.getInstance().logout(mContext,location4Login, + OchCommonServiceManager.logout(mContext,location4Login, new OchCommonServiceCallback() { @Override public void onSuccess(BaseData data) { diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.java deleted file mode 100644 index ecc0129cfe..0000000000 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.mogo.och.common.module.biz.network; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; - -import android.content.Context; - -import com.mogo.cloud.passport.MoGoAiCloudClient; -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.eagle.core.network.MoGoRetrofitFactory; -import com.mogo.eagle.core.network.RequestOptions; -import com.mogo.eagle.core.network.SubscribeImpl; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean; -import com.mogo.och.common.module.biz.bean.TaxiLoginReqBean; -import com.mogo.och.common.module.biz.bean.TaxiLoginRespBean; -import com.mogo.och.common.module.biz.bean.TaxiLoginSmsReqBean; -import com.mogo.och.common.module.biz.bean.TaxiLogoutReqBean; -import com.mogo.och.common.module.biz.constant.OchCommonConst; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by pangfan on 2021/8/19 - */ -public class OchCommonServiceManager { - private static final String TAG = OchCommonServiceManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final OchCommonServiceManager INSTANCE = new OchCommonServiceManager(); - } - - public static OchCommonServiceManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private OchCommonServiceApiNew mOCHTaxiServiceApi; - - private OchCommonServiceManager() { - if (mOCHTaxiServiceApi == null){ - mOCHTaxiServiceApi = MoGoRetrofitFactory.getInstance(OchCommonConst.getBaseUrl()).create(OchCommonServiceApiNew.class); - } - } - - /** - * 获取手机验证码 - * @param context - * @param callback - */ - public void getPhoneCode(Context context, String phone, - OchCommonServiceCallback callback) { - mOCHTaxiServiceApi.getPhoneCode(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - , MoGoAiCloudClientConfig.getInstance().getToken() - , new TaxiLoginSmsReqBean(phone)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "getPhoneCode")); - } - /** - * 通过验证码登录 - * @param context - * @param callback - */ - public void gotoLoginBycode(Context context, String phone, String code, - TaxiLoginReqBean.Location4Login location4Login, - OchCommonServiceCallback callback) { - String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - Observable taxiLoginRespBeanObservable = null; - switch (DebugConfig.getProductFlavor()) { - case "fPadLenovoOchTaxi": {//出租车司机 - taxiLoginRespBeanObservable = mOCHTaxiServiceApi.gotoLoginBycode4Taxi(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - , MoGoAiCloudClientConfig.getInstance().getToken() - , new TaxiLoginReqBean(phone, code, sn, location4Login)); - break; - } - case "fPadLenovoOchBus": {//小巴车司机 - taxiLoginRespBeanObservable = mOCHTaxiServiceApi.gotoLoginBycode4Bus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - , MoGoAiCloudClientConfig.getInstance().getToken() - , new TaxiLoginReqBean(phone, code, sn, location4Login)); - break; - } - } - if (taxiLoginRespBeanObservable != null) { - taxiLoginRespBeanObservable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "gotoLoginBycode")); - } - } - - /** - * 登出 - */ - public void logout(Context context, TaxiLogoutReqBean.Location4Login location4Login, OchCommonServiceCallback callback) { - Observable logout = null; - switch (DebugConfig.getProductFlavor()) { - case "fPadLenovoOchTaxi": {//出租车司机 - logout = mOCHTaxiServiceApi.logout4Taxi( - MoGoAiCloudClientConfig.getInstance().getServiceAppId(), - MoGoAiCloudClientConfig.getInstance().getToken(), - new TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().getSn(), location4Login)); - break; - } - case "fPadLenovoOchBus": {//小巴车司机 - logout = mOCHTaxiServiceApi.logout4Bus( - MoGoAiCloudClientConfig.getInstance().getServiceAppId(), - MoGoAiCloudClientConfig.getInstance().getToken(), - new TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().getSn(), location4Login)); - break; - } - } - if (logout != null) { - logout.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "logout")); - } - } - - /** - * 接单状态和登录状态查询 - * - * @param context - * @param callback - */ - public void queryDriverServiceStatus(Context context, - OchCommonServiceCallback callback) { - if (MoGoAiCloudClientConfig.getInstance().getToken().isEmpty()) { - callback.onFail(OchCommonConst.WAIT_TAKEN, "等待令牌中请稍等"); - MoGoAiCloudClient.getInstance().refreshToken(); - return; - } - String flavor = ""; - switch (DebugConfig.getProductFlavor()) { - case "fPadLenovoOchTaxi": {//出租车司机 - flavor = "taxi"; - break; - } - case "fPadLenovoOchBus": {//小巴车司机 - flavor = "bus"; - break; - } - case "fPadLenovoOchBusPassenger": {//小巴车乘客 - flavor = "bus/passenger"; - break; - } - } - mOCHTaxiServiceApi.queryDriverServiceStatusAndLoginStatus(flavor, MoGoAiCloudClientConfig.getInstance().getServiceAppId() - , MoGoAiCloudClientConfig.getInstance().getToken() - , MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryDriverServiceStatus")); - } - - - private SubscribeImpl getSubscribeImpl( - Context context, OchCommonServiceCallback callback, String apiName) { - return new SubscribeImpl(RequestOptions.create(context)) { - @Override - public void onSuccess(T o) { - super.onSuccess(o); - CallerLogger.INSTANCE.d(M_TAXI + TAG, apiName + ": onSuccess() " + o.msg); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(Throwable e) { - super.onError(e); - CallerLogger.INSTANCE.e(M_TAXI + TAG, apiName + ": onError() " + e.getMessage()); - if (callback != null) { - callback.onError(); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - CallerLogger.INSTANCE.e(M_TAXI + TAG, String.format(apiName + ": onError() code = %d; message = %s;", code, message)); - if (callback != null) { - callback.onFail(code, message); - } - } - }; - } -} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.kt new file mode 100644 index 0000000000..6779e4a891 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonServiceManager.kt @@ -0,0 +1,154 @@ +package com.mogo.och.common.module.biz.network + +import android.content.Context +import com.mogo.och.common.module.biz.constant.OchCommonConst.Companion.getBaseUrl +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.och.common.module.biz.bean.TaxiLoginSmsReqBean +import com.mogo.och.common.module.biz.bean.TaxiLoginReqBean +import com.mogo.och.common.module.biz.bean.TaxiLoginRespBean +import com.mogo.och.common.module.biz.bean.TaxiLogoutReqBean +import com.mogo.och.common.module.biz.bean.DriverStatusQueryRespBean +import com.mogo.och.common.module.biz.constant.OchCommonConst +import com.mogo.cloud.passport.MoGoAiCloudClient +import com.mogo.commons.debug.DebugConfig +import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.och.common.module.biz.network.interceptor.transformTry +import io.reactivex.Observable + +/** + * Created by pangfan on 2021/8/19 + */ +object OchCommonServiceManager { + + private const val TAG = "OchCommonServiceManager" + + private val mOCHTaxiServiceApi: OchCommonServiceApiNew = + MoGoRetrofitFactory.getInstance(getBaseUrl()).create( + OchCommonServiceApiNew::class.java + ) + + /** + * 获取手机验证码 + * @param context + * @param callback + */ + @JvmStatic + fun getPhoneCode( + context: Context, phone: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.getPhoneCode( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiLoginSmsReqBean(phone) + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "getPhoneCode")) + } + + /** + * 通过验证码登录 + * @param context + * @param callback + */ + @JvmStatic + fun gotoLoginBycode( + context: Context, phone: String?, code: String?, + location4Login: TaxiLoginReqBean.Location4Login?, + callback: OchCommonServiceCallback? + ) { + val sn = MoGoAiCloudClientConfig.getInstance().sn + var taxiLoginRespBeanObservable: Observable? = null + when (DebugConfig.getProductFlavor()) { + "fPadLenovoOchTaxi" -> { + //出租车司机 + taxiLoginRespBeanObservable = mOCHTaxiServiceApi.gotoLoginBycode4Taxi( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiLoginReqBean(phone, code, sn, location4Login) + ).transformTry() + } + "fPadLenovoOchBus" -> { + //小巴车司机 + taxiLoginRespBeanObservable = mOCHTaxiServiceApi.gotoLoginBycode4Bus( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiLoginReqBean(phone, code, sn, location4Login) + ).transformTry() + } + } + taxiLoginRespBeanObservable?.subscribe(OchCommonSubscribeImpl(context, callback, "gotoLoginBycode")) + } + + /** + * 登出 + */ + @JvmStatic + fun logout( + context: Context, + location4Login: TaxiLogoutReqBean.Location4Login?, + callback: OchCommonServiceCallback? + ) { + var logout: Observable? = null + when (DebugConfig.getProductFlavor()) { + "fPadLenovoOchTaxi" -> { + //出租车司机 + logout = mOCHTaxiServiceApi.logout4Taxi( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().sn, location4Login) + ).transformTry() + } + "fPadLenovoOchBus" -> { + //小巴车司机 + logout = mOCHTaxiServiceApi.logout4Bus( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiLogoutReqBean(MoGoAiCloudClientConfig.getInstance().sn, location4Login) + ).transformTry() + } + } + logout?.subscribe(OchCommonSubscribeImpl(context, callback, "logout")) + } + + /** + * 接单状态和登录状态查询 + * + * @param context + * @param callback + */ + @JvmStatic + fun queryDriverServiceStatus( + context: Context, + callback: OchCommonServiceCallback? + ) { + if (MoGoAiCloudClientConfig.getInstance().token.isEmpty()) { + callback?.onFail(OchCommonConst.WAIT_TAKEN, "等待令牌中请稍等") + MoGoAiCloudClient.getInstance().refreshToken() + return + } + var flavor = "" + when (DebugConfig.getProductFlavor()) { + "fPadLenovoOchTaxi" -> { + //出租车司机 + flavor = "taxi" + } + "fPadLenovoOchBus" -> { + //小巴车司机 + flavor = "bus" + } + "fPadLenovoOchBusPassenger" -> { + //小巴车乘客 + flavor = "bus/passenger" + } + } + mOCHTaxiServiceApi.queryDriverServiceStatusAndLoginStatus( + flavor, + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + MoGoAiCloudClientConfig.getInstance().sn + ).transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryDriverServiceStatus")) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonSubscribeImpl.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonSubscribeImpl.kt new file mode 100644 index 0000000000..01f08eaaee --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/OchCommonSubscribeImpl.kt @@ -0,0 +1,36 @@ +package com.mogo.och.common.module.biz.network + +import com.mogo.eagle.core.data.BaseData +import com.mogo.eagle.core.network.RequestOptions +import com.mogo.eagle.core.network.SubscribeImpl +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.och.common.module.utils.CallerLoggerUtils.flavorTag + +class OchCommonSubscribeImpl( + val context: Any, + val callback: OchCommonServiceCallback?, + val apiName: String +) : SubscribeImpl(RequestOptions.create(context)) { + + companion object { + const val TAG = "OchCommonSubscribeImpl" + } + + override fun onSuccess(o: T) { + super.onSuccess(o) + CallerLogger.d("$flavorTag$TAG", "$apiName: onSuccess() ${o.msg}") + callback?.onSuccess(o) + } + + override fun onError(e: Throwable) { + super.onError(e) + CallerLogger.e("$flavorTag$TAG", "$apiName: onError() ${e.message}") + callback?.onError() + } + + override fun onError(message: String, code: Int) { + super.onError(message, code) + CallerLogger.e("$flavorTag$TAG", "$apiName: onError() code = $code; message = $message") + callback?.onFail(code, message) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/FRetryWithTime.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/FRetryWithTime.kt new file mode 100644 index 0000000000..93869d6edc --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/FRetryWithTime.kt @@ -0,0 +1,20 @@ +package com.mogo.och.common.module.biz.network.interceptor + +import com.mogo.cloud.passport.MoGoAiCloudClient +import com.mogo.eagle.core.data.BaseData +import io.reactivex.Observable +import io.reactivex.ObservableSource +import io.reactivex.functions.Function + +class FRetryWithTime : Function> { + + override fun apply(baseData: T): ObservableSource { + baseData.let { + if (it.code == 100046 || it.code == 100045 || it.code == 100005 || it.code == 100006 || it.code == 520003) { + MoGoAiCloudClient.getInstance().refreshToken() + return Observable.error(OchCommonRetryException()) + } + } + return Observable.just(baseData) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/OchCommonNetInterceptor.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/OchCommonNetInterceptor.kt new file mode 100644 index 0000000000..1fa0e4bf57 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/OchCommonNetInterceptor.kt @@ -0,0 +1,13 @@ +package com.mogo.och.common.module.biz.network.interceptor + +import io.reactivex.Observable +import com.mogo.eagle.core.data.BaseData +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers + +fun Observable.transformTry():Observable { + return flatMap(FRetryWithTime()) + .retryWhen(RetryWithTime()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/OchCommonRetryException.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/OchCommonRetryException.java new file mode 100644 index 0000000000..262d1806c0 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/OchCommonRetryException.java @@ -0,0 +1,5 @@ +package com.mogo.och.common.module.biz.network.interceptor; + +public class OchCommonRetryException extends RuntimeException{ + +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/RetryWithTime.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/RetryWithTime.kt new file mode 100644 index 0000000000..83606fdea0 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/network/interceptor/RetryWithTime.kt @@ -0,0 +1,30 @@ +package com.mogo.och.common.module.biz.network.interceptor + +import com.mogo.eagle.core.utilcode.constant.TimeConstants +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.och.common.module.utils.CallerLoggerUtils.flavorTag +import io.reactivex.Observable +import io.reactivex.ObservableSource +import io.reactivex.functions.Function +import java.util.concurrent.TimeUnit + + +class RetryWithTime : Function, ObservableSource> { + companion object { + private const val TAG = "RetryWithTime" + } + var current = -1 + private var timeDelys = intArrayOf(3, 1, 2) + override fun apply(throwableObservable: Observable): ObservableSource? { + return throwableObservable.flatMap { + ++current + CallerLogger.e("${flavorTag}${TAG}", " 时间:${TimeUtils.getStringByNow(0, TimeConstants.SEC)}") + if (it is OchCommonRetryException && current < timeDelys.size) { + Observable.timer(timeDelys[current].toLong(), TimeUnit.SECONDS) + } else { + Observable.error(it) + } + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt index 3dfc3389e2..e40bf14a9c 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/biz/ui/TaxiLoginDialogFragment.kt @@ -1,5 +1,6 @@ package com.mogo.och.common.module.biz.ui +import android.annotation.SuppressLint import android.content.DialogInterface import android.graphics.Rect import android.os.Bundle @@ -20,10 +21,10 @@ import com.alibaba.android.arouter.launcher.ARouter import com.mogo.cloud.passport.MoGoAiCloudClientConfig import com.mogo.commons.debug.DebugConfig import com.mogo.commons.mvp.MvpDialogFragment +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.BarUtils import com.mogo.eagle.core.utilcode.util.KeyboardUtils import com.mogo.och.common.module.R import com.mogo.och.common.module.biz.constant.OchCommonConst @@ -35,7 +36,8 @@ import com.mogo.och.common.module.biz.provider.LoginService * @author: yangyakun * @date: 2022/8/15 */ -class TaxiLoginDialogFragment : MvpDialogFragment(), +class TaxiLoginDialogFragment : + MvpDialogFragment(), DialogInterface.OnKeyListener { lateinit var clMain: ConstraintLayout @@ -54,14 +56,6 @@ class TaxiLoginDialogFragment : MvpDialogFragment - BarUtils.setNavBarVisibility(window,false) - } - } - } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -88,11 +82,8 @@ class TaxiLoginDialogFragment : MvpDialogFragment - BarUtils.setStatusBarColor( - it, - ContextCompat.getColor(contextIn, R.color.taxi_4D000000) - ) + context?.let { _ -> + CallerHmiManager.setStatusBarDarkOrLight(false) } } } @@ -108,23 +99,22 @@ class TaxiLoginDialogFragment : MvpDialogFragment { - closeSoftInput() - } + mRootView.setOnTouchListener { _, event -> + when (event?.action) { + MotionEvent.ACTION_DOWN -> { + closeSoftInput() } - return false } - }) + false + } acbtnLogin.onClick { val phone = aceLoginPhoneValue.text.toString() val code = acetPhoneCodeValue.text.toString() - mPresenter?.gotoLogin(phone,code) + mPresenter?.gotoLogin(phone, code) } actvWelcomeLoginTitle.setOnClickListener { continuousClick() @@ -148,7 +138,7 @@ class TaxiLoginDialogFragment : MvpDialogFragment - if(itEditable.isNotEmpty()){ + it?.let { itEditable -> + if (itEditable.isNotEmpty()) { inputPhoneNormal() } } @@ -175,28 +165,29 @@ class TaxiLoginDialogFragment : MvpDialogFragment= (SystemClock.uptimeMillis() - DURATION)) { mHits = LongArray(COUNTS) //重新初始化数组 - mPresenter?.gotoLogin("13288888888","8888") + mPresenter?.gotoLogin("13288888888", "8888") } } @@ -234,6 +238,7 @@ class TaxiLoginDialogFragment : MvpDialogFragment 0) { + isAutopilotAbility = false; + autopilotAbilityReason = "制动踏板被踩下"; + } + if (isAutopilotAbility) + if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_STARTING) { + isAutopilotAbility = false; + autopilotAbilityReason = "系统正在启动"; + } + if (isAutopilotAbility) + if (ability.statusInfo.getSysState() == SystemStatusInfo.SystemState.SYS_EXITING) { + isAutopilotAbility = false; + autopilotAbilityReason = "系统正在关闭"; + } + Logger.d(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + autopilotAbilityReason); + } + + public void release() { + releaseListeners(); + } +} diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java similarity index 73% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java index 84a387ead4..048a0baa0d 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/NaviToDestinationModel.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/AmapNaviToDestinationModel.java @@ -1,4 +1,4 @@ -package com.mogo.och.taxi.model; +package com.mogo.och.common.module.map; import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; @@ -25,8 +25,7 @@ import com.amap.api.navi.model.NaviLatLng; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; -import com.mogo.och.taxi.callback.ITaxiNaviChangedCallback; -import com.mogo.och.taxi.utils.PermissionUtil; +import com.mogo.och.common.module.utils.PermissionUtil; import java.util.ArrayList; import java.util.List; @@ -36,24 +35,27 @@ import java.util.concurrent.atomic.AtomicInteger; * @author: wangmingjun * @date: 2021/12/6 */ -public class NaviToDestinationModel implements AMapNaviListener { +public class AmapNaviToDestinationModel implements AMapNaviListener { + + public static final String TAG = "NaviToDestinationModel"; + private static Context mContext; private AMapNavi mAMapNavi = null; protected final List sList = new ArrayList(); protected final List eList = new ArrayList(); protected List mWayPointList = new ArrayList(); - private ITaxiNaviChangedCallback mNaviChangedCallback; + private ICommonNaviChangedCallback mNaviChangedCallback; private AtomicInteger errorCount = new AtomicInteger(0); private boolean isPlay; - public static NaviToDestinationModel getInstance(Context context) { + public static AmapNaviToDestinationModel getInstance(Context context) { mContext = context; return SingletonHolder.INSTANCE; } private static final class SingletonHolder { - private static final NaviToDestinationModel INSTANCE = new NaviToDestinationModel(); + private static final AmapNaviToDestinationModel INSTANCE = new AmapNaviToDestinationModel(); } - private NaviToDestinationModel(){ + private AmapNaviToDestinationModel(){ } public void initAMapNavi(NaviLatLng startLatLng,NaviLatLng endLatLng) { try { @@ -90,7 +92,7 @@ public class NaviToDestinationModel implements AMapNaviListener { } } - public void setOCHTaciNaviChangedCallback(ITaxiNaviChangedCallback callback){ + public void setOCHTaciNaviChangedCallback(ICommonNaviChangedCallback callback){ this.mNaviChangedCallback = callback; } @Override @@ -132,6 +134,7 @@ public class NaviToDestinationModel implements AMapNaviListener { public void onNaviInfoUpdate(NaviInfo naviinfo) { //导航过程中的信息更新,请看NaviInfo的具体说明 if (null != mNaviChangedCallback){ + CallerLogger.INSTANCE.i(M_TAXI + TAG, "距离=" + naviinfo.getPathRetainDistance() + ", 剩余时间 " + naviinfo.getPathRetainTime()); mNaviChangedCallback.onCurrentNaviDistAndTimeChanged(naviinfo.getPathRetainDistance(),naviinfo.getPathRetainTime());// 米、秒 } } @@ -165,13 +168,9 @@ public class NaviToDestinationModel implements AMapNaviListener { } return; } -// if (result.getErrorCode() == 3){ -// ToastUtils.showShort("车辆当前坐标错误"); -// }else if (result.getErrorCode() == 6){ -// ToastUtils.showShort("终点坐标错误"); -// } - CallerLogger.INSTANCE.i(M_TAXI + "dm", "路线计算失败:错误码=" + result.getErrorCode() + ",Error Message= " + result.getErrorDetail()); - CallerLogger.INSTANCE.i(M_TAXI + "dm", "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/"); + + CallerLogger.INSTANCE.i(M_TAXI + TAG, "路线计算失败:错误码=" + result.getErrorCode() + ",Error Message= " + result.getErrorDetail()); + CallerLogger.INSTANCE.i(M_TAXI + TAG, "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/"); } @Override public void onStartNavi(int type) { @@ -341,88 +340,4 @@ public class NaviToDestinationModel implements AMapNaviListener { public void onPlayRing(int i) { } - - /** - * 车道信息说明: - *

- * 0xFF, 无对应车道 - * 0, 直行 - * 1, 左转 - * 2, 直行+左转 - * 3, 右转 - * 4, 直行+右转 - * 5, 左掉头 - * 6, 左转+右转 - * 7, 直行+左转+右转 - * 8, 右掉头 - * 9, 直行+左掉头 - * 10, 直行+右掉头 - * 11, 左转+左掉头 - * 12, 右转+右掉头 - * 13, 直行+扩展 - * 14, 左转+左掉头+扩展 - * 15, 保留 - * 16, 直行+左转+左掉头 - * 17, 右转+左掉头 - * 18, 左转+右转+左掉头 - * 19, 直行+右转+左掉头 - * 20, 左转+右掉头 - * 21, 公交车道 - * 22, 空车道 - * 23 可变车道 - */ - - String[] array = { - "直行车道" - , "左转车道" - , "左转或直行车道" - , "右转车道" - , "右转或直行车道" - , "左掉头车道" - , "左转或者右转车道" - , " 左转或右转或直行车道" - , "右转掉头车道" - , "直行或左转掉头车道" - , "直行或右转掉头车道" - , "左转或左掉头车道" - , "右转或右掉头车道" - , "直行并且车道扩展" - , "左转+左掉头+扩展" - , "不可以选择该车道" - , "直行+左转+左掉头车道" - , "右转+左掉头" - , "左转+右转+左掉头" - , "直行+右转+左掉头" - , "左转+右掉头" - , "公交车道" - , "空车道" - , "可变车道" - }; - - String[] actions = { - "直行" - , "左转" - , "左转或直行" - , "右转" - , "右转或这行" - , "左掉头" - , "左转或者右转" - , " 左转或右转或直行" - , "右转掉头" - , "直行或左转掉头" - , "直行或右转掉头" - , "左转或左掉头" - , "右转或右掉头" - , "直行并且车道扩展" - , "左转+左掉头+扩展" - , "不可以选择" - , "直行+左转+左掉头" - , "右转+左掉头" - , "左转+右转+左掉头" - , "直行+右转+左掉头" - , "左转+右掉头" - , "公交车道" - , "空车道" - , "可变车道" - }; } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt new file mode 100644 index 0000000000..887729704f --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/CommonAmapNaviVIew.kt @@ -0,0 +1,249 @@ +package com.mogo.och.common.module.map + +import android.content.Context +import android.graphics.BitmapFactory +import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.RelativeLayout +import com.amap.api.maps.AMap +import com.amap.api.maps.model.CustomMapStyleOptions +import com.amap.api.navi.AMapNaviView +import com.amap.api.navi.AMapNaviViewListener +import com.amap.api.navi.AMapNaviViewOptions +import com.amap.api.navi.model.RouteOverlayOptions +import com.mogo.eagle.core.utilcode.mogo.MapAssetStyleUtils +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.R +import kotlinx.android.synthetic.main.taxi_common_amap_navi_view.view.* +import kotlin.concurrent.thread + +/** + * @author: wangmingjun + * @date: 2022/10/23 + */ +class CommonAmapNaviVIew @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0) + : RelativeLayout(context,attrs,defStyleAttr), AMapNaviViewListener { + + private val TAG : String = "TaxiAmapNaviVIew" + + var aMap : AMap? = null + + init { + LayoutInflater.from(context).inflate(R.layout.taxi_common_amap_navi_view,this,true) + initMapView() + } + + private fun initMapView(){ + + amapNaviView.setAMapNaviViewListener(this) + //车头向上模式 + amapNaviView.naviMode = AMapNaviView.CAR_UP_MODE + aMap = amapNaviView.map + //关闭地图文字显示 + aMap!!.showMapText(false) + // 设置导航地图模式,aMap是地图控制器对象。 + aMap!!.mapType = AMap.MAP_TYPE_NIGHT + // 关闭显示实时路况图层,aMap是地图控制器对象。 + aMap!!.isTrafficEnabled = false + setMapViewOptions() + + thread(start = true){ + try { + Thread.sleep(1000L) + } catch (e : InterruptedException) { + e.printStackTrace() + } + + if (null == context){ + return@thread + } + + aMap!!.setCustomMapStyle( + CustomMapStyleOptions() + .setEnable(true) + .setStyleData(MapAssetStyleUtils.getAssetsStyle(context, "over_view_style.data")) + .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(context, "over_view_style_extra.data")) + ) + } + } + + private fun setMapViewOptions() { + + val options = AMapNaviViewOptions() + options.tilt = 0 //设置 2D 模式 + + options.isLayoutVisible = false //设置导航界面UI是否显示。 + + options.isTrafficBarEnabled = false //设置路况光柱条是否显示(只适用于驾车导航,需要联网)。 + + options.isAutoLockCar = true //设置6秒后是否自动锁车 + + options.isAutoDisplayOverview = true //设置是否自动全览模式,即在算路成功后自动进入全览模式 + + options.isTrafficLine = false + options.setModeCrossDisplayShow(true) //设置是否显示路口放大图(路口模型图) + + options.isAutoChangeZoom = true //自动缩放级别 + + options.carBitmap = + BitmapFactory.decodeResource(context.resources, R.drawable.taxi_navi_arrow_icon) + options.fourCornersBitmap = + BitmapFactory.decodeResource(this.resources, R.drawable.taxi_navi_direction_icon) + options.isAutoChangeZoom = true //设置是否开启动态比例尺 (锁车态下自动进行地图缩放变化) + +// options.setZoom(18);//14-18 +// options.setTrafficInfoUpdateEnabled(false); +// options.setTrafficLayerEnabled(false);//设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。 +// options.setCameraInfoUpdateEnabled(false); +// options.setCompassEnabled(false);//设置指南针图标否在导航界面显示,默认显示。 +// options.setLaneInfoShow(false);// 设置是否显示道路信息view +// options.setNaviArrowVisible(false);//设置路线转向箭头隐藏和显示 +// options.setRealCrossDisplayShow(false);//设置是否显示路口放大图(实景图) +// options.setRouteListButtonShow(true);//设置导航界面是否显示路线全览按钮。 +// options.setSettingMenuEnabled(false);//设置菜单按钮是否在导航界面显示。 + + // options.setZoom(18);//14-18 +// options.setTrafficInfoUpdateEnabled(false); +// options.setTrafficLayerEnabled(false);//设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。 +// options.setCameraInfoUpdateEnabled(false); +// options.setCompassEnabled(false);//设置指南针图标否在导航界面显示,默认显示。 +// options.setLaneInfoShow(false);// 设置是否显示道路信息view +// options.setNaviArrowVisible(false);//设置路线转向箭头隐藏和显示 +// options.setRealCrossDisplayShow(false);//设置是否显示路口放大图(实景图) +// options.setRouteListButtonShow(true);//设置导航界面是否显示路线全览按钮。 +// options.setSettingMenuEnabled(false);//设置菜单按钮是否在导航界面显示。 + val routeOverlayOptions = RouteOverlayOptions() + +// routeOverlayOptions.setArrowOnTrafficRoute(BitmapFactory.decodeResource(getResources(),R.drawable.custtexture_aolr)); + +// routeOverlayOptions.setArrowOnTrafficRoute(BitmapFactory.decodeResource(getResources(),R.drawable.custtexture_aolr)); + routeOverlayOptions.normalRoute = + BitmapFactory.decodeResource(resources, R.drawable.taxi_navi_line_icon) + options.routeOverlayOptions = routeOverlayOptions + + amapNaviView.viewOptions = options + } + + override fun onNaviSetting() { + //底部导航设置点击回调 + } + + override fun onNaviCancel() { + TODO("Not yet implemented") + } + + override fun onNaviBackClick(): Boolean { + return false + } + + override fun onNaviMapMode(p0: Int) { + //导航态车头模式,0:车头朝上状态;1:正北朝上模式。 + } + + override fun onNaviTurnClick() { + //转弯view的点击回调 + } + + override fun onNextRoadClick() { + //下一个道路View点击回调 + } + + override fun onScanViewButtonClick() { + //全览按钮点击回调 + } + + override fun onLockMap(p0: Boolean) { + //锁地图状态发生变化时回调 + } + + override fun onNaviViewLoaded() { + d(SceneConstant.M_TAXI + TAG, "导航页面加载成功") + d( + SceneConstant.M_TAXI + TAG, + "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑" + ) + } + + override fun onMapTypeChanged(p0: Int) { + TODO("Not yet implemented") + } + + override fun onNaviViewShowMode(p0: Int) { + TODO("Not yet implemented") + } + + fun onCreate(savedInstanceState : Bundle?){ + amapNaviView.onCreate(savedInstanceState) + } + + fun onResume(){ + amapNaviView.onResume() + } + + fun onPause(){ + amapNaviView.onPause() + } + + fun onDestroy(){ + amapNaviView.onDestroy() + } + + var array = arrayOf( + "直行车道", + "左转车道", + "左转或直行车道", + "右转车道", + "右转或直行车道", + "左掉头车道", + "左转或者右转车道", + " 左转或右转或直行车道", + "右转掉头车道", + "直行或左转掉头车道", + "直行或右转掉头车道", + "左转或左掉头车道", + "右转或右掉头车道", + "直行并且车道扩展", + "左转+左掉头+扩展", + "不可以选择该车道", + "直行+左转+左掉头车道", + "右转+左掉头", + "左转+右转+左掉头", + "直行+右转+左掉头", + "左转+右掉头", + "公交车道", + "空车道", + "可变车道" + ) + + var actions = arrayOf( + "直行", + "左转", + "左转或直行", + "右转", + "右转或这行", + "左掉头", + "左转或者右转", + " 左转或右转或直行", + "右转掉头", + "直行或左转掉头", + "直行或右转掉头", + "左转或左掉头", + "右转或右掉头", + "直行并且车道扩展", + "左转+左掉头+扩展", + "不可以选择", + "直行+左转+左掉头", + "右转+左掉头", + "左转+右转+左掉头", + "直行+右转+左掉头", + "左转+右掉头", + "公交车道", + "空车道", + "可变车道" + ) +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java similarity index 75% rename from OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java index 138de6b9b1..12440028bb 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/callback/ITaxiNaviChangedCallback.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/map/ICommonNaviChangedCallback.java @@ -1,11 +1,11 @@ -package com.mogo.och.taxi.callback; +package com.mogo.och.common.module.map; /** * @author: wangmingjun * @date: 2021/12/3 */ -public interface ITaxiNaviChangedCallback { +public interface ICommonNaviChangedCallback { // 当前位置距离上车点的距离(米)、预估时间(秒) void onCurrentNaviDistAndTimeChanged(int meters, long timeInSecond); void reInitNaviAmap(boolean isPlay,boolean isRestart); -} +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CallerLoggerUtils.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CallerLoggerUtils.kt new file mode 100644 index 0000000000..6289004563 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CallerLoggerUtils.kt @@ -0,0 +1,31 @@ +package com.mogo.och.common.module.utils + +import com.mogo.commons.debug.DebugConfig +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_BUS_P +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_TAXI_P + +object CallerLoggerUtils { + var flavorTag = when (DebugConfig.getProductFlavor()) { + "fPadLenovoOchTaxi" -> { + //出租车司机 + M_TAXI + } + "fPadLenovoOchBus" -> { + //小巴车司机 + M_BUS + } + "fPadLenovoOchTaxiPassenger" -> { + //出租车乘客 + M_TAXI_P + } + "fPadLenovoOchBusPassenger" -> { + //小巴车乘客 + M_BUS_P + } + else -> { + "" + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java index 01ec888715..3ab7e47426 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.java @@ -1,6 +1,7 @@ package com.mogo.och.common.module.utils; import android.content.Context; +import android.location.Location; import com.amap.api.maps.CoordinateConverter; import com.amap.api.maps.model.LatLng; @@ -8,7 +9,9 @@ import com.mogo.cloud.commons.utils.CoordinateUtils; import com.mogo.eagle.core.utilcode.mogo.logger.Logger; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import mogo.telematics.pad.MessagePad; @@ -144,26 +147,29 @@ public class CoordinateCalculateRouteUtil { if (mRoutePoints.size() > 0){ //基础点 LatLng baseLatLng = mRoutePoints.get(0); - float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat - ,baseLatLng.longitude,baseLatLng.latitude);// lon,lat, prelon, prelat + if (baseLatLng != null){ + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat + ,baseLatLng.longitude,baseLatLng.latitude);// lon,lat, prelon, prelat - for (int i= 1; i < mRoutePoints.size(); i++){ - LatLng latLng = mRoutePoints.get(i); - float diff = CoordinateUtils.calculateLineDistance(realLon,realLat - ,latLng.longitude,latLng.latitude); - if (baseDiffDis > diff){ + for (int i= 1; i < mRoutePoints.size(); i++){ + LatLng latLng = mRoutePoints.get(i); + float diff = CoordinateUtils.calculateLineDistance(realLon,realLat + ,latLng.longitude,latLng.latitude); + if (baseDiffDis > diff){ // Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); - baseDiffDis = diff; - currentIndex = i; + baseDiffDis = diff; + currentIndex = i; + } } - } // Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+currentIndex+"-------是最近的点------ "); - if (currentIndex == mRoutePoints.size()-1){ - latePoints.add(mRoutePoints.get(currentIndex)); - }else { - latePoints.addAll(mRoutePoints.subList(currentIndex,mRoutePoints.size()-1)); + if (currentIndex == mRoutePoints.size()-1){ + latePoints.add(mRoutePoints.get(currentIndex)); + }else if(currentIndex < mRoutePoints.size()-1){ + latePoints.addAll(mRoutePoints.subList(currentIndex,mRoutePoints.size()-1)); + } + return latePoints; } - return latePoints; + } return latePoints; } @@ -180,21 +186,127 @@ public class CoordinateCalculateRouteUtil { if (mRoutePoints.size() > 0){ //基础点 LatLng baseLatLng = mRoutePoints.get(0); - float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat - ,baseLatLng.longitude,baseLatLng.latitude);// lon,lat, prelon, prelat + if (baseLatLng != null){ + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLon,realLat + ,baseLatLng.longitude,baseLatLng.latitude);// lon,lat, prelon, prelat - for (int i= 1; i < mRoutePoints.size(); i++){ - LatLng latLng = mRoutePoints.get(i); - float diff = CoordinateUtils.calculateLineDistance(realLon,realLat - ,latLng.longitude,latLng.latitude); - if (baseDiffDis > diff){ + for (int i= 1; i < mRoutePoints.size(); i++){ + LatLng latLng = mRoutePoints.get(i); + float diff = CoordinateUtils.calculateLineDistance(realLon,realLat + ,latLng.longitude,latLng.latitude); + if (baseDiffDis > diff){ +// Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); + baseDiffDis = diff; + currentIndex = i; + } + } + return currentIndex; + } + } + return currentIndex; + } + + public static float calculateRouteSumLengthByLocation(List points){ + if (null == points || points.size() == 0) return 0; + + float sumLength = 0; + + //计算全路径总距离 + for (int i = 0;i + 1< points.size();i++){ + double preLat = points.get(i).getLatitude(); + double preLon = points.get(i).getLongitude(); + double laLat = points.get(i+1).getLatitude(); + double laLon = points.get(i+1).getLongitude(); + + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } + return sumLength; + } + + + public static List coordinateConverterWgsToGcjLocations(Context mContext, List models) { + //转成MogoLatLng集合 + List list = new ArrayList<>(); + for (MessagePad.Location m : models) { + LatLng mogoLatLng = coordinateConverterWgsToGcj(mContext, m); + Location location = new Location("gcj_provider"); + location.setBearing((float) m.getHeading()); + location.setLatitude(mogoLatLng.latitude); + location.setLongitude(mogoLatLng.longitude); + list.add(location); + } + return list; + } + + public static Map> getRemainPointListByCompareNew(int preIndex, + List mRoutePoints, + Location realLocation) { + Map> routePonits = new HashMap<>(); + List latePoints = new ArrayList<>(); // 剩余轨迹集合 + int currentIndex = 0; //记录疑似点 + if (mRoutePoints.size() > preIndex){ + //基础点 + Location baseLatLng = mRoutePoints.get(preIndex); + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), + realLocation.getLatitude() + ,baseLatLng.getLongitude(),baseLatLng.getLongitude());// lon,lat, prelon, prelat + + for (int i= preIndex; i < mRoutePoints.size(); i++){ + Location latLng = mRoutePoints.get(i); + //todo 先看index对应点的方向和realLocation方向是否一致, 方向角度不能过90度 + if (Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90){ + float diff = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), + realLocation.getLatitude(), + latLng.getLongitude(),latLng.getLatitude()); + if (baseDiffDis > diff ){ +// Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); + baseDiffDis = diff; + currentIndex = i; + } + } + } + Logger.d( "calculateRouteSumLength", "点:"+currentIndex+"-------是最近的点------ "); + if (currentIndex == mRoutePoints.size()-1){ + Location location = mRoutePoints.get(currentIndex); + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + latePoints.add(latLng); + }else { + List locations = mRoutePoints.subList(currentIndex,mRoutePoints.size()-1); + for (Location location: locations) { + LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); + latePoints.add(latLng); + } + } + routePonits.put(currentIndex,latePoints); + return routePonits; + } + return routePonits; + } + + public static int getArrivedPointIndexNew(List mRoutePoints, + Location realLocation) { + int currentIndex = 0; //记录疑似点 //基础点 + Location baseLatLng = mRoutePoints.get(0); + float baseDiffDis = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), + realLocation.getLatitude() + , baseLatLng.getLongitude(), baseLatLng.getLongitude());// lon,lat, prelon, prelat + + for (int i = 0; i < mRoutePoints.size(); i++) { + Location latLng = mRoutePoints.get(i); + //todo 先看index对应点的方向和realLocation方向是否一致, 方向角度不能过90度 + if (Math.abs(realLocation.getBearing() - latLng.getBearing()) <= 90) { + float diff = CoordinateUtils.calculateLineDistance(realLocation.getLongitude(), + realLocation.getLatitude(), + latLng.getLongitude(), latLng.getLatitude()); + if (baseDiffDis > diff) { // Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); baseDiffDis = diff; currentIndex = i; } } - return currentIndex; } + Logger.d("calculateRouteSumLength", "点:" + currentIndex + "-------是最近的点------ "); return currentIndex; } } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java new file mode 100644 index 0000000000..9dc909d19c --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FieldUtils.java @@ -0,0 +1,37 @@ +package com.mogo.och.common.module.utils; + +import android.text.TextUtils; + +import java.lang.reflect.Field; +import java.lang.reflect.Member; +import java.lang.reflect.Modifier; + +public class FieldUtils { + + public static Field getDeclaredField(final Class cls, final String fieldName, final + boolean forceAccess) { + if (cls == null || TextUtils.isEmpty(fieldName)) { + return null; + } + try { + // only consider the specified class by using getDeclaredField() + final Field field = cls.getDeclaredField(fieldName); + if (!isAccessible(field)) { + if (forceAccess) { + field.setAccessible(true); + } else { + return null; + } + } + return field; + } catch (final Exception e) { + e.printStackTrace(); + } + return null; + } + + + private static boolean isAccessible(final Member m) { + return m != null && Modifier.isPublic(m.getModifiers()) && !m.isSynthetic(); + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java index 4c626a4659..1af162ef26 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/NumberFormatUtil.java @@ -21,4 +21,20 @@ public class NumberFormatUtil { } return String.valueOf(num); } + + /** + * 截取小数点后cutNum位, 不进行四舍五入 + * @param num + * @param cutNum + * @return + */ + public static String cutOutNumber(double num,int cutNum){ + try{ + BigDecimal bg = new BigDecimal(num).setScale(cutNum, RoundingMode.DOWN); + return String.valueOf(bg.doubleValue()); + }catch (Exception e){ + + } + return ""; + } } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java new file mode 100644 index 0000000000..8dac5fdf56 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/PermissionUtil.java @@ -0,0 +1,35 @@ +package com.mogo.och.common.module.utils; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.location.LocationManager; + +import androidx.core.content.ContextCompat; + +/** + * @author: wangmingjun + * @date: 2021/12/7 + */ +public class PermissionUtil { + + public static boolean checkPermission(Context context,String... permissons) { + + for (String permisson : permissons) { + if ((ContextCompat.checkSelfPermission(context, + permisson) != PackageManager.PERMISSION_GRANTED)) { + return false; + } + } + return true; + } + + public static boolean isLocServiceEnable(Context context) { + LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); + boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + if (gps || network) { + return true; + } + return false; + } +} diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java index 829093f3a7..a2a02a8475 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/ToastUtilsOch.java @@ -4,6 +4,11 @@ import com.mogo.commons.debug.DebugConfig; import com.mogo.eagle.core.utilcode.util.ToastUtils; public class ToastUtilsOch { + + private static long lastClickTime; + // 两次点击按钮之间的点击间隔不能少于1000毫秒 + private static int MIN_CLICK_DELAY_TIME = 1000; + public static void showWithCodeMessage(int code,String message){ if(message==null){ return; @@ -14,4 +19,15 @@ public class ToastUtilsOch { ToastUtils.showShort(message); } } + + public static boolean isCustomFastClick(int customCLickDelayTime) { + MIN_CLICK_DELAY_TIME = customCLickDelayTime; + boolean flag = false; + long curClickTime = System.currentTimeMillis(); + if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { + flag = true; + } + lastClickTime = curClickTime; + return flag; + } } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt new file mode 100644 index 0000000000..43ef0ffb30 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt @@ -0,0 +1,49 @@ +package com.mogo.och.common.module.voice + +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.voice.AIAssist +import com.mogo.eagle.core.utilcode.util.UiThreadHandler + +object VoiceNotice { + @JvmStatic + fun showNotice(notice: String?) { + showNotice(notice, AIAssist.LEVEL0) + } + + @JvmStatic + fun showNotice(notice: String?, level: Int) { + showNotice(notice,level,0) + } + + @JvmStatic + fun showNotice(notice: String?, delayed: Long) { + showNotice(notice, AIAssist.LEVEL0, delayed) + } + + @JvmStatic + fun showNotice(notice: String?, level: Int, delayed: Long = 0) { + notice?.let { + if (delayed == 0L) { + UiThreadHandler.post { + AIAssist.getInstance(AbsMogoApplication.getApp()) + .speakTTSVoiceWithLevel(it, level) + } + } else { + UiThreadHandler.postDelayed({ + AIAssist.getInstance(AbsMogoApplication.getApp()) + .speakTTSVoiceWithLevel(it, level) + }, delayed) + } + } + } + + /** + * 中断当前在播语音 + */ + @JvmStatic + fun stopCurrentTts(){ + UiThreadHandler.post { + AIAssist.getInstance(AbsMogoApplication.getApp()).stopTts() + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/MarqueeTextView.java b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/MarqueeTextView.java new file mode 100644 index 0000000000..884d504338 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/MarqueeTextView.java @@ -0,0 +1,129 @@ +package com.mogo.och.common.module.wigets; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.ViewDebug; +import android.widget.TextView; + +import com.mogo.och.common.module.R; +import com.mogo.och.common.module.utils.FieldUtils; + +import java.lang.reflect.Field; + + +public class MarqueeTextView extends androidx.appcompat.widget.AppCompatTextView{ + + /** + * 上一次设置的时间,用于过滤多余操作 + */ + private long mLastSetTime; + /** + * 自定义 gap + */ + private float mCustomGap = 0.3f; + /** + * 是否使用自定义 gap + */ + private boolean mUseCustomGap; + + public MarqueeTextView(Context context) { + this(context, null); + } + + public MarqueeTextView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MarqueeTextView); + mCustomGap = typedArray.getFloat(R.styleable.MarqueeTextView_customGap, mCustomGap); + mUseCustomGap = typedArray.getBoolean(R.styleable.MarqueeTextView_useCustomGap, false); + typedArray.recycle(); + } + + @Override + @ViewDebug.ExportedProperty(category = "focus") + public boolean isFocused() { + return true; + } + + @Override + @ViewDebug.ExportedProperty + public boolean isSelected() { + return true; + } + + @Override + public void invalidate() { + reflectToChangeGap(); + + super.invalidate(); + } + + private void reflectToChangeGap() { + if (!mUseCustomGap) { + return; + } + if (System.currentTimeMillis() - mLastSetTime < 1000) { + // 1s 内不重新设置,过滤多余操作 + return; + } + try { + Class marqueClass = null; + Class[] innerClazz = TextView.class.getDeclaredClasses(); + for (Class clazz : innerClazz) { + if ("Marquee".equals(clazz.getSimpleName())) { + marqueClass = clazz; + } + } + + if (marqueClass == null) { + return; + } + + Field field1 = FieldUtils.getDeclaredField(marqueClass, "mGhostStart", true); + + if (field1 == null) { + return; + } + + final int textWidth = getWidth() - getCompoundPaddingLeft() - getCompoundPaddingRight(); + final float lineWidth = getLayout().getLineWidth(0); + final float gap = mCustomGap*textWidth; + float ghostStart = lineWidth - textWidth + gap; + float maxScroll = ghostStart + textWidth; + float ghostOffset = lineWidth + gap; + float maxFadeScroll = ghostStart + lineWidth + lineWidth; + + final Field field = FieldUtils.getDeclaredField(TextView.class, "mMarquee", true); + if (field != null) { + Object mMarque = field.get(this); + if (mMarque != null) { + mLastSetTime = System.currentTimeMillis(); + float mGhostStart = (float) field1.get(mMarque); + if (mGhostStart != ghostStart) { + // 需要设置的 mGhostStart 与当前 ghostStart 不相等时才去设置 + Field field2 = FieldUtils.getDeclaredField(marqueClass, "mMaxScroll", true); + Field field3 = FieldUtils.getDeclaredField(marqueClass, "mGhostOffset", true); + Field field4 = FieldUtils.getDeclaredField(marqueClass, "mMaxFadeScroll", true); + + if (field2 == null || field3 == null || field4 == null) { + return; + } + + field1.set(mMarque, ghostStart); + field2.set(mMarque, maxScroll); + field3.set(mMarque, ghostOffset); + field4.set(mMarque, maxFadeScroll); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png new file mode 100644 index 0000000000..a83b7c9e74 Binary files /dev/null and b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png differ diff --git a/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png new file mode 100755 index 0000000000..1b96799531 Binary files /dev/null and b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png differ diff --git a/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png new file mode 100644 index 0000000000..7f758d5999 Binary files /dev/null and b/OCH/mogo-och-common-module/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png differ diff --git a/OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml b/OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml new file mode 100644 index 0000000000..3d5f5aa763 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/res/layout/taxi_common_amap_navi_view.xml @@ -0,0 +1,5 @@ + + diff --git a/OCH/mogo-och-common-module/src/main/res/values/attrs.xml b/OCH/mogo-och-common-module/src/main/res/values/attrs.xml index 27efdf3802..9043a1d2ad 100644 --- a/OCH/mogo-och-common-module/src/main/res/values/attrs.xml +++ b/OCH/mogo-och-common-module/src/main/res/values/attrs.xml @@ -52,4 +52,9 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java index 52ac14ed3f..7b607580bd 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java @@ -13,4 +13,5 @@ import mogo.telematics.pad.MessagePad; public interface IOCHTaxiPassengerAutopilotPlanningCallback { void setLineMarker(List models); void routeResultByServer(List models,int haveArrivedIndex); + void showRottingMapView(); } \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java index 9d147d1ca4..d800e68e66 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java @@ -1,11 +1,7 @@ package com.mogo.och.taxi.passenger.callback; -import androidx.annotation.NonNull; - import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; -import java.util.List; - /** * Created on 2021/9/8 * diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index 297efdd6a9..79e59a7b17 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -10,6 +10,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.amap.api.maps.model.LatLng; +import com.amap.api.navi.model.NaviLatLng; import com.elegant.network.utils.GsonUtil; import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager; import com.mogo.cloud.commons.utils.CoordinateUtils; @@ -32,6 +33,8 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.navi.IMogoCarLocationChangedListener2; import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.PinYinUtil; import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean; @@ -51,7 +54,6 @@ import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonValueCallback; import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback; import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; -import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceCallback; import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager; import com.mogo.aicloud.services.socket.IMogoLifecycleListener; import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager; @@ -288,8 +290,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback * 才更新最新进行中单到本地 */ public void queryInAndWaitOrders() { - TaxiPassengerServiceManager.getInstance().queryOrdersInAndWaitService(mContext, - new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.queryOrdersInAndWaitService(mContext, + new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerOrdersInServiceQueryRespBean data) { if (data == null || data.data == null) { @@ -346,8 +348,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback return; } final String orderNo = mCurrentOCHOrder.orderNo; - TaxiPassengerServiceManager.getInstance().queryOrderById(mContext, orderNo, - new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.queryOrderById(mContext, orderNo, + new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerOrderQueryRespBean data) { if (data != null && data.data != null @@ -618,6 +620,29 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback mLocationsModels.clear(); mLocationsModels.addAll(latLngModels); startOrStopRouteAndWipe(true); + showRottingMapView(); + } + + public void showRottingMapView(){ + AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi(); + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.showRottingMapView(); + } + } + + public void startNaviByAmap() { + if (mCurrentOCHOrder != null && + mCurrentOCHOrder.orderStatus == TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode()){ + AmapNaviToDestinationModel.getInstance(mContext).destroyAmaNavi(); + + double orderEndStationLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); + double orderEndStationLng = mCurrentOCHOrder.endSiteGcjPoint.get(0); + NaviLatLng startNaviLatLng = new NaviLatLng(mLatitude, mLongitude); + NaviLatLng endNaviLatLng = new NaviLatLng(orderEndStationLat,orderEndStationLng); + AmapNaviToDestinationModel.getInstance(mContext).initAMapNavi(startNaviLatLng, endNaviLatLng); + AmapNaviToDestinationModel.getInstance(mContext).setVoiceIsMute(false); +// AmapNaviToDestinationModel.getInstance(mContext).setOCHTaciNaviChangedCallback(this); + } } /** @@ -682,7 +707,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void startOrStopQueryOrderRemaining(boolean isStart){ if (isStart){ - TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingtLoop(); + TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingLoop(); }else { TaxiPassengerModelLoopManager.getInstance().stopQueryOrderRemainingLoop(); } @@ -693,7 +718,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback */ public void queryOrderRemaining(){ if (mCurrentOCHOrder == null) return; - TaxiPassengerServiceManager.getInstance().queryOrderRemaining(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.queryOrderRemaining(mContext, mCurrentOCHOrder.orderNo, new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerOrderQueryRemainingResp data) { if (data != null && data.data!=null){ @@ -714,7 +739,7 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void queryOrderRouteList() { if (mCurrentOCHOrder == null) return; CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- queryOrderRouteList"); - TaxiPassengerServiceManager.getInstance().queryOrderRouteList(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.queryOrderRouteList(mContext, mCurrentOCHOrder.orderNo, new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerQueryOrderRouteResp data) { CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route---"+GsonUtil.jsonFromObject(data)); @@ -765,8 +790,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void checkPhoneAndUpdateStatus(String phoneTail,ITaxiPassengerCommonCallback commonCallback) { if (mCurrentOCHOrder == null) return; - TaxiPassengerServiceManager.getInstance().checkPhoneAndUpdateOrderStatus(mContext, mCurrentOCHOrder.orderNo, - phoneTail, new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.checkPhoneAndUpdateOrderStatus(mContext, mCurrentOCHOrder.orderNo, + phoneTail, new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerBaseRespBean data) { if (data != null && data.code == 0 && mCurrentOCHOrder != null){ @@ -799,8 +824,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void arrivedAndScore(TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean , ITaxiPassengerCommonValueCallback commonCallback) { if (taxiPassengerScoreUpdateOrderReqBean.orderNo == null) return; - TaxiPassengerServiceManager.getInstance().arrivedAndScore(mContext,taxiPassengerScoreUpdateOrderReqBean, - new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.arrivedAndScore(mContext,taxiPassengerScoreUpdateOrderReqBean, + new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerBaseRespBean data) { if(commonCallback!=null) { @@ -829,13 +854,13 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void loopQueryPilotStatus(){ if (mCurrentOCHOrder == null) return; - TaxiPassengerServiceManager.getInstance().queryPilotStatus(mContext, mCurrentOCHOrder.orderNo, - new TaxiPassengerServiceCallback() { + TaxiPassengerServiceManager.queryPilotStatus(mContext, mCurrentOCHOrder.orderNo, + new OchCommonServiceCallback() { @Override public void onSuccess(TaxiPassengerBaseRespBean data) { if (data != null && data.code == 0 && data.data.equals(true)) { updateAutopilotStatus(true); - startOrStopReadyToAutopilotoop(false); + startOrStopReadyToAutopilotLoop(false); } } @@ -856,11 +881,11 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback public void startDriverReadyToAutopilotLoop(){ if (NetworkUtils.isConnected(mContext)) { - startOrStopReadyToAutopilotoop(true); + startOrStopReadyToAutopilotLoop(true); } } - public void startOrStopReadyToAutopilotoop(boolean isStart) { + public void startOrStopReadyToAutopilotLoop(boolean isStart) { if (isStart){ TaxiPassengerModelLoopManager.getInstance().startReadyToAutopilot(); }else { @@ -873,9 +898,9 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback TaxiPassengerStartReqBean.Result result = new TaxiPassengerStartReqBean.Result(); result.lat = mLatitude; result.lon = mLongitude; - TaxiPassengerServiceManager.getInstance().startServicePilotDone(mContext, + TaxiPassengerServiceManager.startServicePilotDone(mContext, mCurrentOCHOrder.orderNo, result, - new TaxiPassengerServiceCallback(){ + new OchCommonServiceCallback(){ @Override public void onSuccess(TaxiPassengerBaseRespBean data) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java index 39611e8df7..9b5ed8a440 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java @@ -131,11 +131,11 @@ public class TaxiPassengerModelLoopManager { /** * 轮训查下 查询订单剩余里程和时间 */ - public void startQueryOrderRemainingtLoop() { + public void startQueryOrderRemainingLoop() { if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) { return; } - CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingtLoop()"); + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingLoop()"); mQueryOrderRemainingDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, TaxiPassengerConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS) .map((aLong -> aLong + 1)) diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceCallback.java deleted file mode 100644 index b2d02607c3..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceCallback.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.taxi.passenger.network; - -/** - * @author congtaowang - * @since 2021/1/15 - * - * 修改订单状态回调接口 - */ -public interface TaxiPassengerServiceCallback< T > { - - void onSuccess(T data); - - void onFail(int code, String msg); - - default void onError() { - - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java deleted file mode 100644 index f052794c40..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.mogo.och.taxi.passenger.network; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; - -import android.content.Context; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager; -import com.mogo.eagle.core.network.MoGoRetrofitFactory; -import com.mogo.eagle.core.network.RequestOptions; -import com.mogo.eagle.core.network.SubscribeImpl; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean; -import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean; -import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; -import com.mogo.commons.debug.DebugConfig; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by pangfan on 2021/8/19 - */ -public class TaxiPassengerServiceManager { - private static final String TAG = TaxiPassengerServiceManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final TaxiPassengerServiceManager INSTANCE = new TaxiPassengerServiceManager(); - } - - public static TaxiPassengerServiceManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private TaxiPassengerServiceApi mOCHTaxiServiceApi; - - private TaxiPassengerServiceManager() { - if (mOCHTaxiServiceApi == null){ - mOCHTaxiServiceApi = MoGoRetrofitFactory.getInstance(TaxiPassengerConst.getBaseUrl()).create(TaxiPassengerServiceApi.class); - } - } - - /** - * 获取司机端的sn - * @return - */ - private String getDriverAppSn(){ - return CallerTelematicManager.INSTANCE.getServerToken(); - } - - /** - * 查询全部服务中/待服务订单列表 - * @param context - * @param callback - */ - public void queryOrdersInAndWaitService(Context context, - TaxiPassengerServiceCallback callback) { - mOCHTaxiServiceApi.queryOrdersInAndWaitService(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,getDriverAppSn()) //获取到司机端的sn - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrdersInAndWaitService")); - } - - /** - * 查询订单剩余里程和时间 - * @param context - * @param orderNo - * @param callback - */ - public void queryOrderRemaining(Context context, String orderNo, TaxiPassengerServiceCallback callback){ - mOCHTaxiServiceApi.queryOrderRemaining(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,orderNo) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderRemaining")); - } - - public void queryOrderRouteList(Context context, String orderNo, TaxiPassengerServiceCallback callback){ - - mOCHTaxiServiceApi.queryOrderRoute(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,orderNo) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderRouteList")); - } - - /** - * 通过orderId查询订单信息(用于本地已经有orderId时) - * @param context - * @param orderNo - * @param callback - * @deprecated v2.1_0930需求中暂不再使用此接口 - */ - public void queryOrderById(Context context, String orderNo, - TaxiPassengerServiceCallback callback) { - mOCHTaxiServiceApi.queryOrderById(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new TaxiPassengerOrderQueryReqBean(getDriverAppSn(), orderNo)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderById")); - } - - private SubscribeImpl getSubscribeImpl( - Context context, TaxiPassengerServiceCallback callback, String apiName) { - return new SubscribeImpl(RequestOptions.create(context)) { - @Override - public void onSuccess(T o) { - super.onSuccess(o); - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,apiName + ": onSuccess() " + o.msg); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(Throwable e) { - super.onError(e); - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,apiName + ": onError() " + e.getMessage()); - if (callback != null) { - callback.onError(); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - CallerLogger.INSTANCE.e(M_TAXI_P + TAG,String.format(apiName + ": onError() code = %d; message = %s;", code, message)); - if (callback != null) { - callback.onFail(code, message); - } - } - }; - } - - public void checkPhoneAndUpdateOrderStatus(Context context, String orderNo,String phone ,TaxiPassengerServiceCallback callback){ - - mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus( - MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo,phone)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")); - } - public void arrivedAndScore(Context context,TaxiPassengerScoreUpdateOrderReqBean taxiPassengerScoreUpdateOrderReqBean, TaxiPassengerServiceCallback callback){ - mOCHTaxiServiceApi.arrivedAndScore( - MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,taxiPassengerScoreUpdateOrderReqBean) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")); - } - - public void getAllScoreWorld(Context context,TaxiPassengerServiceCallback callback){ - mOCHTaxiServiceApi.getWorldAllStar( - MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "arrivedAndScore")); - } - - public void queryPilotStatus(Context context, String orderNo - ,TaxiPassengerServiceCallback callback){ - mOCHTaxiServiceApi.queryPilotStatus( - MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,orderNo) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryPilotStatus")); - } - - public void startServicePilotDone(Context context,String orderNo,TaxiPassengerStartReqBean.Result loc - ,TaxiPassengerServiceCallback callback){ - mOCHTaxiServiceApi.startServicePilotDone(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new TaxiPassengerStartReqBean(getDriverAppSn() - ,orderNo,loc)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"startServicePilotDone")); - } - public void getWorldByStar(Context context,String start,TaxiPassengerServiceCallback callback){ - mOCHTaxiServiceApi.getWorldByStar( - MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),start) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")); - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt new file mode 100644 index 0000000000..37e0bc2b39 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.kt @@ -0,0 +1,199 @@ +package com.mogo.och.taxi.passenger.network + +import android.content.Context +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst.Companion.getBaseUrl +import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.getServerToken +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrdersInServiceQueryRespBean +import com.mogo.cloud.passport.MoGoAiCloudClientConfig +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp +import com.mogo.och.taxi.passenger.bean.TaxiPassengerQueryOrderRouteResp +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryReqBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerBaseRespBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerCheckPhoneUpdateOrderReqBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean +import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld +import com.mogo.och.taxi.passenger.bean.TaxiPassengerStartReqBean +import com.mogo.eagle.core.network.MoGoRetrofitFactory +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback +import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl +import com.mogo.och.common.module.biz.network.interceptor.transformTry + +/** + * Created by pangfan on 2021/8/19 + */ +object TaxiPassengerServiceManager { + + private val mOCHTaxiServiceApi: TaxiPassengerServiceApi = MoGoRetrofitFactory.getInstance(getBaseUrl()).create( + TaxiPassengerServiceApi::class.java + ) + + /** + * 获取司机端的sn + * @return + */ + private val driverAppSn: String + get() = getServerToken() + + /** + * 查询全部服务中/待服务订单列表 + * @param context + * @param callback + */ + @JvmStatic + fun queryOrdersInAndWaitService( + context: Context, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.queryOrdersInAndWaitService( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + driverAppSn + ) //获取到司机端的sn + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrdersInAndWaitService")) + } + + /** + * 查询订单剩余里程和时间 + * @param context + * @param orderNo + * @param callback + */ + @JvmStatic + fun queryOrderRemaining( + context: Context, + orderNo: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.queryOrderRemaining( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + orderNo + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRemaining")) + } + @JvmStatic + fun queryOrderRouteList( + context: Context, + orderNo: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.queryOrderRoute( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + orderNo + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderRouteList")) + } + + /** + * 通过orderId查询订单信息(用于本地已经有orderId时) + * @param context + * @param orderNo + * @param callback + */ + @JvmStatic + @Deprecated("v2.1_0930需求中暂不再使用此接口") + fun queryOrderById( + context: Context, orderNo: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.queryOrderById( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiPassengerOrderQueryReqBean(driverAppSn, orderNo) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryOrderById")) + } + @JvmStatic + fun checkPhoneAndUpdateOrderStatus( + context: Context, + orderNo: String?, + phone: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.checkPhoneAndUpdateOrderStatus( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiPassengerCheckPhoneUpdateOrderReqBean(orderNo, phone) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) + } + @JvmStatic + fun arrivedAndScore( + context: Context, + taxiPassengerScoreUpdateOrderReqBean: TaxiPassengerScoreUpdateOrderReqBean?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.arrivedAndScore( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + taxiPassengerScoreUpdateOrderReqBean + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) + } + @JvmStatic + fun getAllScoreWorld( + context: Context, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.getWorldAllStar( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "arrivedAndScore")) + } + @JvmStatic + fun queryPilotStatus( + context: Context, + orderNo: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.queryPilotStatus( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + orderNo + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "queryPilotStatus")) + } + @JvmStatic + fun startServicePilotDone( + context: Context, + orderNo: String?, + loc: TaxiPassengerStartReqBean.Result?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.startServicePilotDone( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + TaxiPassengerStartReqBean( + driverAppSn, orderNo, loc + ) + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "startServicePilotDone")) + } + @JvmStatic + fun getWorldByStar( + context: Context, + start: String?, + callback: OchCommonServiceCallback? + ) { + mOCHTaxiServiceApi.getWorldByStar( + MoGoAiCloudClientConfig.getInstance().serviceAppId, + MoGoAiCloudClientConfig.getInstance().token, + start + ) + .transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "checkPhoneAndUpdateOrderStatus")) + } + +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java index 056b46c0ff..a32c68198a 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -166,7 +166,7 @@ public class BaseTaxiPassengerPresenter extends PresentermView.routeResultByServer(models,haveArrivedIndex)); } + @Override + public void showRottingMapView() { + runOnUIThread(() ->mView.showRottingMapView()); + } + @Override public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java index 34b8898d5f..7a94a24cb3 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -20,6 +20,7 @@ import com.mogo.eagle.core.function.api.hmi.view.IViewNotification; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.map.CallerSmpManager; +import com.mogo.eagle.core.function.v2x.events.scenario.scene.airoad.AiRoadMarker; import com.mogo.eagle.core.utilcode.util.OverlayViewUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.map.MogoMapUIController; @@ -132,15 +133,18 @@ public class TaxiPassengerBaseFragment extends MvpFragment {selectIndex(1)} R.id.tv_taxi_passenger_number_third -> {selectIndex(2)} R.id.tv_taxi_passenger_number_fourth -> {selectIndex(3)} - R.id.tv_taxi_passenger_number_submit -> {checkAndCommit()} + R.id.tv_taxi_passenger_number_submit -> {clearNumber()} else -> {} } } @@ -130,9 +130,27 @@ class TaxiPassengerCheckView :RelativeLayout, View.OnClickListener { index++ } changeStyle() + numSelect.forEach { + if(it==null){ + return + } + } + + checkAndCommit() } } + private fun clearNumber(){ + for(i in numSelect.indices){ + numSelect[i] = null + } + numSelectTextView.forEach { + it?.text = "" + } + index = 0 + changeStyle() + } + private fun deleteNumver() { if (index in 0..3) { if(numSelect[index]==null){ diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java index e15ffbf4b0..ca0ca1b121 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java @@ -25,6 +25,8 @@ import com.mogo.commons.mvp.MvpFragment; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; +import com.mogo.och.common.module.map.CommonAmapNaviVIew; import com.mogo.och.common.module.utils.DateTimeUtil; import com.mogo.och.common.module.utils.NumberFormatUtil; import com.mogo.och.common.module.wigets.OCHGradientTextView; @@ -63,7 +65,9 @@ public class TaxiPassengerServingOrderFragment extends private TextView mTPOrderRemainArriveTime; private ImageView mMapArrowIcon; - private TaxiPassengerMapDirectionView mMapDirectionView; + private TaxiPassengerMapDirectionView mMapRottingView; + private CommonAmapNaviVIew mAmapNaviVIew; + private float lastBearing = 0; private RotateAnimation rotateAnimation; @@ -130,9 +134,19 @@ public class TaxiPassengerServingOrderFragment extends @Override protected void initViews(Bundle savedInstanceState) { super.initViews(savedInstanceState); - mMapDirectionView = mRootView.findViewById(R.id.taxi_p_order_map_view); - mMapDirectionView.onCreateView(savedInstanceState); - mMapDirectionView.setTaxiPassengerMapViewCallback(this); + initRouteNaviView(savedInstanceState); + initAmapNaviView(savedInstanceState); + } + + private void initAmapNaviView(Bundle savedInstanceState) { + mAmapNaviVIew = mRootView.findViewById(R.id.taxi_p_order_amap_navi_view); + mAmapNaviVIew.onCreate(savedInstanceState); + } + + private void initRouteNaviView(Bundle savedInstanceState) { + mMapRottingView = mRootView.findViewById(R.id.taxi_p_order_rotting_map_view); + mMapRottingView.onCreateView(savedInstanceState); + mMapRottingView.setTaxiPassengerMapViewCallback(this); } @NonNull @@ -174,8 +188,11 @@ public class TaxiPassengerServingOrderFragment extends @Override public void onResume() { super.onResume(); - if (mMapDirectionView != null) { - mMapDirectionView.onResume(); + if (mMapRottingView != null) { + mMapRottingView.onResume(); + } + if (mAmapNaviVIew != null){ + mAmapNaviVIew.onResume(); } TaxiPassengerModel.getInstance().initGeocodeSearch(); } @@ -196,29 +213,44 @@ public class TaxiPassengerServingOrderFragment extends @Override public void onPause() { super.onPause(); - if (mMapDirectionView != null) { - mMapDirectionView.onPause(); + if (mMapRottingView != null) { + mMapRottingView.onPause(); + } + if (mAmapNaviVIew != null){ + mAmapNaviVIew.onPause(); } - } @Override public void onDestroy() { super.onDestroy(); - if (mMapDirectionView != null) { - mMapDirectionView.onDestroy(); + if (mMapRottingView != null) { + mMapRottingView.onDestroy(); } + if (mAmapNaviVIew != null){ + mAmapNaviVIew.onDestroy(); + } + AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); TaxiPassengerModel.getInstance().destoryGeocodeSearch(); } + public void showRottingMapView(){ + if (mAmapNaviVIew != null && mAmapNaviVIew.getVisibility() == View.VISIBLE){ + mAmapNaviVIew.setVisibility(View.GONE); + } + if (mMapRottingView != null && mMapRottingView.getVisibility() == View.GONE){ + mMapRottingView.setVisibility(View.VISIBLE); + } + } + public void setLineMarker(List latLngList){ if (latLngList.size() > 0) { - if (mMapDirectionView != null) { - mMapDirectionView.setCoordinatesLatLng(latLngList); + if (mMapRottingView != null) { + mMapRottingView.setCoordinatesLatLng(latLngList); UiThreadHandler.post(new Runnable() { @Override public void run() { - mMapDirectionView.setLineMarker(); + mMapRottingView.setLineMarker(); } }); } @@ -236,22 +268,22 @@ public class TaxiPassengerServingOrderFragment extends } public void drawablePolylineByServerRoute(List mCoordinatesLatLng,int haveArrivedIndex){ - if (mMapDirectionView != null){ - mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng,haveArrivedIndex); + if (mMapRottingView != null){ + mMapRottingView.setCoordinatesLatLng(mCoordinatesLatLng,haveArrivedIndex); UiThreadHandler.post(new Runnable() { @Override public void run() { - mMapDirectionView.drawablePolyline(); + mMapRottingView.drawablePolyline(); } }); } } private void clearPolyline() { - if (mMapDirectionView != null) { + if (mMapRottingView != null) { UiThreadHandler.post(new Runnable() { @Override public void run() { - mMapDirectionView.clearPolyline(); + mMapRottingView.clearPolyline(); } }); } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java index 7f93833b86..29c26ae3c7 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerStartAutopilotView.java @@ -11,6 +11,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.elegant.utils.UiThreadHandler; +import com.mogo.commons.AbsMogoApplication; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.OverlayViewUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; @@ -159,6 +160,7 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V } public void updateStartAutopilotBtnStatus(boolean isClickable){ + if (mContext == null) return; if (isClickable){ mStartAutopilotBtn.setTextColor( mContext.getResources().getColor(R.color.taxi_p_start_autopilot_txt_color)); @@ -259,6 +261,7 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V } private void updateStatusCountDownOver() { + if (mContext == null) return; isStarting = false; startingCarBgAnimatorDrawable(false); mStartAutopilotBtn.setText( @@ -273,4 +276,14 @@ public class TaxiPassengerStartAutopilotView extends RelativeLayout implements V mContext = null; super.onDetachedFromWindow(); } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + try { + mContext = AbsMogoApplication.getApp(); + }catch (Exception e){ + e.printStackTrace(); + } + } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt index 6f56314a9f..548280ca96 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/comment/TaxiPassengerArrivedView.kt @@ -25,13 +25,13 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.OverlayViewUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.widget.media.video.SimpleVideoPlayer +import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.wigets.OCHBorderShadowLayout import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.bean.TaxiPassengerAllStarWorld import com.mogo.och.taxi.passenger.bean.TaxiPassengerScoreUpdateOrderReqBean import com.mogo.och.taxi.passenger.callback.ITaxiPassengerCommonCallback import com.mogo.och.taxi.passenger.callback.ITaxiPassengerScoreCallback -import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceCallback import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager import com.mogo.och.taxi.passenger.ui.comment.adapter.CommentAdapter import com.mogo.och.taxi.passenger.widget.ResizeAnimation @@ -412,8 +412,8 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { } private fun requestStarWord() { - TaxiPassengerServiceManager.getInstance().getAllScoreWorld(context, - object : TaxiPassengerServiceCallback { + TaxiPassengerServiceManager.getAllScoreWorld(context, + object : OchCommonServiceCallback { override fun onError() { CallerLogger.e( SceneConstant.M_TAXI_P + TAG, @@ -436,8 +436,8 @@ class TaxiPassengerArrivedView :RelativeLayout, View.OnClickListener { } private fun requestStarWordByStar(start:Int) { - TaxiPassengerServiceManager.getInstance().getWorldByStar(context,start.toString(), - object : TaxiPassengerServiceCallback { + TaxiPassengerServiceManager.getWorldByStar(context,start.toString(), + object : OchCommonServiceCallback { override fun onError() { CallerLogger.e( SceneConstant.M_TAXI_P + TAG, diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt index fdef63f02d..6945095a4c 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/video/VideoActivity.kt @@ -13,14 +13,10 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.BarUtils -import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.NumberFormatUtil import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst import com.mogo.och.taxi.passenger.event.FinishActivity -import com.mogo.och.taxi.passenger.mulprocess.ICallback import com.mogo.och.taxi.passenger.ui.leftmenu.LeftMenuOpen import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils import com.mogo.och.taxi.passenger.ui.video.layoutmanage.CarouselLayoutManager @@ -41,7 +37,6 @@ import rx.Observer import rx.Subscription import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers -import java.util.Calendar import java.util.concurrent.TimeUnit import kotlin.collections.ArrayList import kotlin.math.floor @@ -49,18 +44,18 @@ import kotlin.math.floor class VideoActivity : AppCompatActivity() { - private var rvVideoPlaylist: RecyclerView?=null + private var rvVideoPlaylist: RecyclerView? = null private lateinit var indicatorView: IndicatorView private lateinit var clContain: ConstraintLayout private lateinit var acivTitleIcon: AppCompatImageView private lateinit var tvTitle: TextView - private var subscribe: Subscription?=null + private var subscribe: Subscription? = null private val TAG = "mulprocessVideoActivity" private val arrayListOf = ArrayList() - companion object{ + companion object { const val VIDEOTYPE = "VIDEOTYPE" const val VIDEOTYPE_CONSULT = 0 const val VIDEOTYPE_MOIES = 1 @@ -68,10 +63,10 @@ class VideoActivity : AppCompatActivity() { const val EVENT_FINISH = 0 - fun startActivity(context:Context,videoType:Int,sumDis:Int){ + fun startActivity(context: Context, videoType: Int, sumDis: Int) { val intent = Intent(context, VideoActivity::class.java) intent.putExtra(VIDEOTYPE, videoType) - intent.putExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,sumDis) + intent.putExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, sumDis) context.startActivity(intent) } } @@ -114,7 +109,7 @@ class VideoActivity : AppCompatActivity() { LeftMenuOpen.registerCallback(LeftMenuOpen.callBack) } - private fun initConsultData(){ + private fun initConsultData() { arrayListOf.clear() arrayListOf.add( TaxiPassengerVideoPlay( @@ -238,7 +233,7 @@ class VideoActivity : AppCompatActivity() { } indicatorView.onPageScrolled(currentIndex, fl, 0) } - val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf,rvVideoPlaylist) + val recyclerVideoAdapter = RecyclerVideoAdapter(this, arrayListOf, rvVideoPlaylist) recyclerVideoAdapter.setOnThumbImageClilckListener { val (_: Int, player) = getPlayer(carouselLayoutManager) if (player is ConsultVideoPlayer) { @@ -280,24 +275,31 @@ class VideoActivity : AppCompatActivity() { override fun onAttachedToWindow() { super.onAttachedToWindow() - when (videotype){ + when (videotype) { VIDEOTYPE_CONSULT -> { - OverlayLeftViewUtils.showOverlayView(this,isOpen = false, checkIndex = OverlayLeftViewUtils.CONSULT) + OverlayLeftViewUtils.showOverlayView( + this, + isOpen = false, + checkIndex = OverlayLeftViewUtils.CONSULT + ) } VIDEOTYPE_MOIES -> { - OverlayLeftViewUtils.showOverlayView(this,isOpen = false, checkIndex = OverlayLeftViewUtils.MOVIE) + OverlayLeftViewUtils.showOverlayView( + this, + isOpen = false, + checkIndex = OverlayLeftViewUtils.MOVIE + ) } } val sumDis = intent.getIntExtra(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS, 0) - FloatingDistanceInfoUtils.showOverlayView(this,sumDis=sumDis) + FloatingDistanceInfoUtils.showOverlayView(this, sumDis = sumDis) } override fun onResume() { super.onResume() - BarUtils.setNavBarVisibility(window,false) val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager) - if(centerItemPosition<0){ + if (centerItemPosition < 0) { setBackageAndPlayNext(arrayListOf[0]) } player?.let { @@ -325,12 +327,20 @@ class VideoActivity : AppCompatActivity() { override fun onError(e: Throwable?) {} override fun onNext(t: Long?) { if (!OverlayLeftViewUtils.getStatus()) { - when (videotype){ + when (videotype) { VIDEOTYPE_CONSULT -> { - OverlayLeftViewUtils.showOverlayView(this@VideoActivity,isOpen = false, checkIndex = OverlayLeftViewUtils.CONSULT) + OverlayLeftViewUtils.showOverlayView( + this@VideoActivity, + isOpen = false, + checkIndex = OverlayLeftViewUtils.CONSULT + ) } VIDEOTYPE_MOIES -> { - OverlayLeftViewUtils.showOverlayView(this@VideoActivity,isOpen = false, checkIndex = OverlayLeftViewUtils.MOVIE) + OverlayLeftViewUtils.showOverlayView( + this@VideoActivity, + isOpen = false, + checkIndex = OverlayLeftViewUtils.MOVIE + ) } } } @@ -356,7 +366,7 @@ class VideoActivity : AppCompatActivity() { } @Subscribe(threadMode = ThreadMode.MAIN) - fun finishActivity(event: FinishActivity){ + fun finishActivity(event: FinishActivity) { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "finishActivity(event)") cancleSubscribe() val intent = Intent() @@ -379,21 +389,21 @@ class VideoActivity : AppCompatActivity() { cancleSubscribe() } - private fun cancleSubscribe(){ + private fun cancleSubscribe() { subscribe?.let { - if(!it.isUnsubscribed){ + if (!it.isUnsubscribed) { it.unsubscribe() } } } private fun releaseOnNewInstance() { - if (rvVideoPlaylist!=null&&rvVideoPlaylist?.layoutManager != null) { + if (rvVideoPlaylist != null && rvVideoPlaylist?.layoutManager != null) { val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager val (_: Int, player) = getPlayer(carouselLayoutManager) player?.let { - player.currentPlayer.release() - player.onVideoReset() + player.currentPlayer.release() + player.onVideoReset() } } FullVideoUtils.dismissOverlayView(true) diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml index f59ae55046..404258867f 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_p_activity_serving_order_view.xml @@ -257,15 +257,30 @@ - - + app:layout_constraintLeft_toLeftOf="parent" > + + + + @@ -198,12 +198,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_84" - android:layout_marginTop="@dimen/dp_129" + android:layout_marginTop="308px" android:text="@string/taxi_p_check_input_phone_tail_title" android:textColor="@color/taxi_p_check_keyboard_samll_mogo_color" - android:textSize="@dimen/sp_36" + android:textSize="@dimen/dp_36" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/tv_taxi_number" /> + app:layout_constraintTop_toTopOf="parent" /> - - + app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_back" + app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_back" /> + app:layout_constraintStart_toEndOf="@+id/tv_taxi_passenger_number_zero" + app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_back" /> - - - - + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintTop_toTopOf="@+id/tv_taxi_passenger_number_seven" /> + + + + + + + + + @@ -340,7 +347,7 @@ - - diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml index e50749e0fd..6776cc12e1 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml +++ b/OCH/mogo-och-taxi-passenger/src/main/res/values/styles.xml @@ -28,7 +28,7 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchDialogManager.java b/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchDialogManager.java index 67ec158a58..9c7590180b 100644 --- a/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchDialogManager.java +++ b/core/function-impl/mogo-core-function-dispatch/src/main/java/com/zhjt/dispatch/DispatchDialogManager.java @@ -93,7 +93,7 @@ public class DispatchDialogManager { } private void voice() { - AIAssist.getInstance(mContext).speakTTSVoice("请立即停车!请立即停车!"); + AIAssist.getInstance(mContext).speakTTSVoiceWithLevel("请立即停车!请立即停车!",AIAssist.LEVEL0); } public void releaseDialog() { 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 280763b9b8..0f5783796b 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 @@ -9,9 +9,9 @@ import android.os.Build.VERSION_CODES import android.os.Bundle import android.text.TextUtils import android.transition.* -import android.util.Log import android.view.Gravity import android.view.View +import android.view.ViewGroup import android.view.WindowManager import android.view.WindowManager.LayoutParams import android.view.animation.* @@ -79,14 +79,18 @@ import com.mogo.eagle.core.function.hmi.ui.notice.NoticeNormalBannerView import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView import com.mogo.eagle.core.function.hmi.ui.setting.IPCReportWindow import com.mogo.eagle.core.function.hmi.ui.setting.ReportListFloatWindow +import com.mogo.eagle.core.function.hmi.ui.setting.SOPSettingView import com.mogo.eagle.core.function.hmi.ui.tools.AdUpgradeDialog import com.mogo.eagle.core.function.hmi.ui.tools.AutoPilotAndCheckView import com.mogo.eagle.core.function.hmi.ui.tools.MaskView +import com.mogo.eagle.core.function.hmi.ui.widget.DemoModeView +import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.* import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI +import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr import com.mogo.eagle.core.utilcode.mogo.toast.TipToast import com.mogo.eagle.core.utilcode.reminder.* import com.mogo.eagle.core.utilcode.reminder.api.* @@ -127,6 +131,13 @@ class MoGoHmiFragment : MvpFragment(), private var mDebugSettingViewFloat: WarningFloat.Builder? = null private var mDebugSettingView: DebugSettingView? = null + //SOPSettingView + private var mSOPSettingViewFloat: WarningFloat.Builder? = null + private var mSOPSettingView: SOPSettingView? = null + + //StatusView + private var statusBarViewFloat: WarningFloat.Builder? = null + private var statusBarView: StatusBarView? = null private var mNoticeFloat: WarningFloat.Builder? = null @@ -188,6 +199,14 @@ class MoGoHmiFragment : MvpFragment(), override fun initViews() { initViewShowWithConfig() + + //设置StatusBar初始状态 + if (FunctionBuildConfig.isDemoMode) { + statusBarView?.updateRightView(true, "demoMode", DemoModeView(requireContext())) + } else { + statusBarView?.updateRightView(false, "demoMode", DemoModeView(requireContext())) + } + ivCameraIcon?.setOnClickListener { if (cameraViewFloat == null) { showCameraList(CallerMonitorManager.getCameraList()) @@ -409,6 +428,14 @@ class MoGoHmiFragment : MvpFragment(), busOperationStatus?.showBusOperation() } + override fun setStatusBarDarkOrLight(light: Boolean) { + statusBarView?.setStatusBarDarkOrLight(light) + } + + override fun updateStatusBarRightView(insert: Boolean, tag: String, viewGroup: ViewGroup) { + statusBarView?.updateRightView(insert, tag, viewGroup) + } + /** * 设置 红绿灯 代理View */ @@ -447,6 +474,10 @@ class MoGoHmiFragment : MvpFragment(), dismissToolsFloatView() CallerDevaToolsManager.showFeedbackView(it) } + + override fun showSOPSettingView() { + toggleSOPView() + } }) } toolsViewFloat = WarningFloat.with(it) @@ -660,6 +691,57 @@ class MoGoHmiFragment : MvpFragment(), } } + override fun toggleSOPView() { + activity?.let { + if (mSOPSettingViewFloat != null) { + WarningFloat.dismiss(mSOPSettingViewFloat!!.config.floatTag, false) + mSOPSettingViewFloat = null + mSOPSettingView = null + } else { + if (mSOPSettingView == null) { + mSOPSettingView = SOPSettingView(it) + } + var side = RIGHT + var gravity = Gravity.RIGHT + //调试窗默认靠右显示,Bus的乘客端右端有视图覆盖,调试窗靠左显示 + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) && + AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + ) { + side = LEFT + gravity = Gravity.LEFT + } + mSOPSettingViewFloat = WarningFloat.with(it) + .setTag("mSOPSettingView") + .setLayout(mSOPSettingView!!) + .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() + } + } + } + /** * 展示VR下V2X预警 * @@ -683,6 +765,21 @@ class MoGoHmiFragment : MvpFragment(), activity?.let { val warningContent = alertContent ?: EventTypeEnum.getWarningContent(v2xType) + + //占道施工预警 + if (v2xType.equals("10006") || v2xType.equals("100061")) { + val currentTime = System.currentTimeMillis() / 1000 + val oldTime = + context?.let { it -> SharedPrefsMgr.getInstance(it).getLong("roadwork", 0) } + if (currentTime - oldTime!! > 60) { //超过一分钟,才会继续播报重复提醒 + context?.let { it -> + SharedPrefsMgr.getInstance(it) + .putLong("roadwork", System.currentTimeMillis() / 1000) + } + CallerAutoPilotManager.sendTripInfo(5, "", "", "", false); + } + } + if (warningContent.isEmpty()) { CallerLogger.e("$M_HMI$TAG", "Show warningContent is null or empty!") return @@ -790,10 +887,10 @@ class MoGoHmiFragment : MvpFragment(), it.invokeOnCancellation { AIAssist.getInstance(ctx).stopSpeakTts(text) } - AIAssist.getInstance(ctx).speakTTSVoice(text, voiceCallback) + AIAssist.getInstance(ctx).speakTTSVoiceWithLevel(text, AIAssist.LEVEL2, voiceCallback) } catch (t: Throwable) { it.resumeWith(Result.success(Unit)) - Logger.e(TAG, t.message) + CallerLogger.d("$M_HMI$TAG", t.message) } } @@ -1304,7 +1401,13 @@ class MoGoHmiFragment : MvpFragment(), /** * 升级app弹框 */ - override fun showUpgradeDialog(name: String, url: String, title: String, content: String, installType: String) { + override fun showUpgradeDialog( + name: String, + url: String, + title: String, + content: String, + installType: String + ) { if (upgradeAppDialog == null) { upgradeAppDialog = UpgradeAppDialog(requireContext()) } @@ -1404,28 +1507,25 @@ class MoGoHmiFragment : MvpFragment(), EXIT_AUTOPILOT_FOR_LOCATION, EXIT_AUTOPILOT_FOR_CHASSIS, EXIT_AUTOPILOT_FOR_DISTANCE -> { - if (FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData - && getAutoPilotStatusInfo().state != STATUS_AUTOPILOT_RUNNING) { - 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() { - takeOver = true - clTakeOverView.visibility = View.VISIBLE - } + 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() { + takeOver = true + clTakeOverView.visibility = View.VISIBLE + } - override fun onDismiss() { - takeOver = false - clTakeOverView.visibility = View.GONE - } - }, - true, - 6000L - ) - } + override fun onDismiss() { + takeOver = false + clTakeOverView.visibility = View.GONE + } + }, + true, + 6000L + ) } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt index 1d756041cf..539658cf16 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/pnc/PncActionsView.kt @@ -7,6 +7,8 @@ import androidx.appcompat.content.res.AppCompatResources import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo import com.mogo.eagle.core.data.autopilot.pnc.PncActionsHelper +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_PNC_ACTIONS +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.FOUNDATION import com.mogo.eagle.core.data.trafficlight.TrafficLightResult import com.mogo.eagle.core.data.trafficlight.currentRoadTrafficLight import com.mogo.eagle.core.data.trafficlight.isRed @@ -19,6 +21,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningAction import com.mogo.eagle.core.function.call.trafficlight.CallerTrafficLightListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.zhjt.service_biz.BizConfig import kotlinx.android.synthetic.main.view_pnc_actions.view.* import mogo.telematics.pad.MessagePad @@ -67,6 +70,7 @@ class PncActionsView @JvmOverloads constructor( } } + @BizConfig(FOUNDATION, "", BIZ_PNC_ACTIONS) override fun pncActions(planningActionMsg: MessagePad.PlanningActionMsg) { mAutoPilotStatusInfo?.let { if (it.state == STATUS_AUTOPILOT_RUNNING) { 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 c8315389c1..4a764781c9 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 @@ -9,6 +9,7 @@ import android.graphics.Color import android.os.Build import android.text.Html import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View import androidx.annotation.RequiresApi @@ -60,6 +61,7 @@ import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.function.hmi.ui.logcatch.ILogViewListener import com.mogo.eagle.core.function.hmi.ui.logcatch.LogInfoView import com.mogo.eagle.core.function.hmi.ui.upgrade.UpgradeListAdapter +import com.mogo.eagle.core.function.hmi.ui.widget.DemoModeView import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel @@ -194,9 +196,7 @@ class DebugSettingView @JvmOverloads constructor( //添加 业务配置监听 CallerDevaToolsFuncConfigListenerManager.registerDevaToolsFuncConfigListener( - FuncBizConfig.FOUNDATION, - TAG, - this + FuncBizConfig.FOUNDATION, TAG, true, this ) if (logInfoView != null) { @@ -228,7 +228,7 @@ class DebugSettingView @JvmOverloads constructor( CallerAutopilotVehicleStateListenerManager.removeListener(TAG) // 移除 业务配置监听 - CallerDevaToolsFuncConfigListenerManager.unRegisterDevaToolsFuncConfigListener(this) + CallerDevaToolsFuncConfigListenerManager.unRegisterDevaToolsFuncConfigListener( FuncBizConfig.FOUNDATION, TAG) if (logInfoView != null) { logInfoView!!.onEnterBackground() @@ -566,11 +566,16 @@ class DebugSettingView @JvmOverloads constructor( } } + Log.i( + "1026-emArrow", + "debug setting FunctionBuildConfig.isDemoMode : ${FunctionBuildConfig.isDemoMode}" + ) // 演示模式,上一次勾选的数据 tbIsDemoMode.isChecked = FunctionBuildConfig.isDemoMode // 演示模式 tbIsDemoMode.setOnCheckedChangeListener { _, isChecked -> + CallerHmiManager.updateStatusBarRightView(isChecked, "demoMode", DemoModeView(context)) CallerAutoPilotManager.setDemoMode(isChecked) if (!isChecked) { //关闭美化模式时,通知工控机 @@ -578,7 +583,6 @@ class DebugSettingView @JvmOverloads constructor( } FunctionBuildConfig.isDemoMode = isChecked tbIsDrawAutopilotTrajectoryData.isEnabled = !isChecked - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = isChecked if (!FunctionBuildConfig.isDemoMode) { tbIsDrawAutopilotTrajectoryData.isChecked = false } @@ -1853,36 +1857,42 @@ class DebugSettingView @JvmOverloads constructor( } } - override fun updateBizData(type: String, state: Boolean, lock: Boolean, data: String?) { + override fun updateBizView(type: String, lock: Boolean) { when (type) { BIZ_BEAUTY_MODE -> { tbIsDemoMode.isClickable = !lock - if(lock){ - tbIsDemoMode.background = resources.getDrawable(R.drawable.radio_button_lock_background) - }else{ - tbIsDemoMode.background = resources.getDrawable(R.drawable.radio_button_normal_background_right) + if (lock) { + tbIsDemoMode.background = + resources.getDrawable(R.drawable.radio_button_lock_background) + } else { + tbIsDemoMode.background = + resources.getDrawable(R.drawable.radio_button_normal_background_right) } } BIZ_RAIN_MODE -> { tbIsRainMode.isClickable = !lock - if(lock){ - tbIsRainMode.background = resources.getDrawable(R.drawable.radio_button_lock_background) - }else{ - tbIsRainMode.background = resources.getDrawable(R.drawable.radio_button_normal_background_right) + if (lock) { + tbIsRainMode.background = + resources.getDrawable(R.drawable.radio_button_lock_background) + } else { + tbIsRainMode.background = + resources.getDrawable(R.drawable.radio_button_normal_background_right) } } BIZ_WARNING_UPLOAD -> { tbReportWarning.isClickable = !lock - if(lock){ - tbReportWarning.background = resources.getDrawable(R.drawable.radio_button_lock_background) - }else{ + if (lock) { + tbReportWarning.background = + resources.getDrawable(R.drawable.radio_button_lock_background) + } else { tbReportWarning.background = null } } BIZ_BAG_RECORD -> { if (lock) { btnRecordBag.isClickable = false - btnRecordBag.background = resources.getDrawable(R.drawable.radio_button_lock_background) + btnRecordBag.background = + resources.getDrawable(R.drawable.radio_button_lock_background) } else { btnRecordBag.isClickable = true btnRecordBag.requestFocus() @@ -1892,7 +1902,8 @@ class DebugSettingView @JvmOverloads constructor( BIZ_FULL_LOG -> { if (lock) { tbLogCatch.isClickable = false - tbLogCatch.background = resources.getDrawable(R.drawable.radio_button_lock_background) + tbLogCatch.background = + resources.getDrawable(R.drawable.radio_button_lock_background) } else { tbLogCatch.isClickable = true tbLogCatch.requestFocus() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt new file mode 100644 index 0000000000..f26a810247 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -0,0 +1,232 @@ +package com.mogo.eagle.core.function.hmi.ui.setting + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.config.HmiBuildConfig +import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig +import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsFuncConfigListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsFuncConfigListenerManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.obu.CallerOBUManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.module.service.routeoverlay.RouteStrategy +import kotlinx.android.synthetic.main.view_debug_setting.view.* +import kotlinx.android.synthetic.main.view_sop_setting.view.* +import kotlinx.android.synthetic.main.view_sop_setting.view.tbRouteDynamicEffect + +/** + * SOP设置窗口 + */ +class SOPSettingView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoDevaToolsFuncConfigListener { + + companion object { + const val TAG = "SOPSettingView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.view_sop_setting, this, true) + initView() + } + + private fun initView() { + //绕障类功能开关 + tbObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring + tbObstacleAvoidance.setOnCheckedChangeListener { _, isChecked -> + CallerAutoPilotManager.sendDetouring(isChecked) + FunctionBuildConfig.isDetouring = isChecked + } + + tbMarkingObstacles.isChecked = FunctionBuildConfig.isPNCWarning + //危险障碍物颜色标记开关 + tbMarkingObstacles.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isPNCWarning = isChecked + } + + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + tbMarkingObstacles.visibility = View.GONE + } + + //引导线动态效果 + tbRouteDynamicEffect.isChecked = + AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode) && !AppIdentityModeUtils.isBus( + FunctionBuildConfig.appIdentityMode + ) + tbRouteDynamicEffect.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + RouteStrategy.enable(true) + } else { + RouteStrategy.enable(false) + } + } + + //红绿灯标识 + tbTrafficLight.isChecked = HmiBuildConfig.isShowTrafficLightView + tbTrafficLight.setOnCheckedChangeListener { _, isChecked -> + if (!isChecked) { + HmiBuildConfig.isShowTrafficLightView = false + } else { + HmiBuildConfig.isShowTrafficLightView = true + CallerHmiManager.disableWarningTrafficLight() + } + } + + //限速标识 + tbSpeedLimit.isChecked = HmiBuildConfig.isShowLimitingVelocityView + tbSpeedLimit.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + HmiBuildConfig.isShowLimitingVelocityView = true + } else { + HmiBuildConfig.isShowLimitingVelocityView = false + CallerHmiManager.disableLimitingVelocity() + } + } + + // 演示模式,上一次勾选的数据 + tbDemoMode.isChecked = FunctionBuildConfig.isDemoMode + // 演示模式 + tbDemoMode.setOnCheckedChangeListener { _, isChecked -> + CallerAutoPilotManager.setDemoMode(isChecked) + if (!isChecked) { + //关闭美化模式时,通知工控机 + CallerAutoPilotManager.setIPCDemoMode(isChecked) + } + FunctionBuildConfig.isDemoMode = isChecked + } + //只在司机端设置美化模式开关功能 + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + tbDemoMode.visibility = View.GONE + } + + + // 雨天模式,上一次勾选的数据 + tbRainMode.isChecked = FunctionBuildConfig.isRainMode + //雨天模式 + tbRainMode.setOnCheckedChangeListener { _, isChecked -> + CallerAutoPilotManager.setRainMode(isChecked) + FunctionBuildConfig.isRainMode = isChecked + } + //雨天模式按钮只在司机屏生效,乘客屏不显示 + if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + tbRainMode.visibility = View.GONE + } + + //OBU控制总开关 + tbObu.isChecked = CallerOBUManager.isConnected() + tbObu.setOnCheckedChangeListener { _, isChecked -> + if (!isChecked) { + if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)) { + CallerOBUManager.resetObuIpAddress("192.168.1.199") + } else if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + CallerOBUManager.resetObuIpAddress("192.168.8.199") + } + } else { + //断开链接 + CallerOBUManager.disConnectObu() + } + } + + + //是否开启异常上报 + tbIPCReport.isChecked = FunctionBuildConfig.isReportWarning + tbIPCReport.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isReportWarning = isChecked + } + + //变道绕障的目标障碍物速度阈值 + tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" + ivSpeedReduce.setOnClickListener { + if (FunctionBuildConfig.detouringSpeed <= 3) { + ToastUtils.showShort("阈值最小可为3 m/s") + } else { + FunctionBuildConfig.detouringSpeed-- + tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" + } + } + ivSpeedAdd.setOnClickListener { + if (FunctionBuildConfig.detouringSpeed >= 7) { + ToastUtils.showShort("阈值最大可为7 m/s") + } else { + FunctionBuildConfig.detouringSpeed++ + tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" + } + } + btnSpeedSet.setOnClickListener { + val isSuccess = + CallerAutoPilotManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) + if (isSuccess == true) { + ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功") + } else { + ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败") + } + } + + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + tvSpeedThresholdTitle.visibility = View.GONE + ivSpeedReduce.visibility = View.GONE + tvSpeed.visibility = View.GONE + ivSpeedAdd.visibility = View.GONE + btnSpeedSet.visibility = View.GONE + } + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + //添加 业务配置监听 + CallerDevaToolsFuncConfigListenerManager.registerDevaToolsFuncConfigListener( + FuncBizConfig.FOUNDATION, TAG, true, this + ) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + // 移除 业务配置监听 + CallerDevaToolsFuncConfigListenerManager.unRegisterDevaToolsFuncConfigListener(FuncBizConfig.FOUNDATION, TAG) + } + + override fun updateBizView(type: String, lock: Boolean) { + when (type) { + FuncBizConfig.BIZ_BEAUTY_MODE -> { + tbDemoMode.isClickable = !lock + if (lock) { + tbDemoMode.background = + resources.getDrawable(R.drawable.radio_button_lock_background) + } else { + tbDemoMode.background = + resources.getDrawable(R.drawable.radio_button_normal_background_right) + } + } + FuncBizConfig.BIZ_RAIN_MODE -> { + tbRainMode.isClickable = !lock + if (lock) { + tbRainMode.background = + resources.getDrawable(R.drawable.radio_button_lock_background) + } else { + tbRainMode.background = + resources.getDrawable(R.drawable.radio_button_normal_background_right) + } + } + FuncBizConfig.BIZ_PNC_WARNING -> { + tbMarkingObstacles.isClickable = !lock + if (lock) { + tbMarkingObstacles.background = + resources.getDrawable(R.drawable.radio_button_lock_background) + } else { + tbMarkingObstacles.background = + resources.getDrawable(R.drawable.radio_button_normal_background_right) + } + } + } + } +} \ 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 26c294afd6..c6c1ce249a 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 @@ -59,15 +59,13 @@ class AutoPilotAndCheckView @JvmOverloads constructor( companion object { private var maxAcceleration: Double = 2.0 - private var speedLimit: Double = 0.0 + private var speedLimit: Int = 0 } @SuppressLint("ClickableViewAccessibility") private fun initView() { background = ColorDrawable(Color.parseColor("#F0151D41")) - if (keyBoardUtil == null) { - keyBoardUtil = KeyBoardUtil(sKeyBoardView, etInputSpeed) - } + keyBoardUtil?.setActionListener { inputContent -> inputContent.toIntOrNull()?.let { speed -> when { @@ -76,10 +74,6 @@ class AutoPilotAndCheckView @JvmOverloads constructor( ToastUtils.showShort("超过最大限速值60,设置失败") } else -> { - llSpeedPosition.background = - resources.getDrawable(R.drawable.pilot_speed_bg) - keyBoardUtil?.hideKeyboard() - etInputSpeed.clearFocus() // 设置自动驾驶速度 val isSuccess = CallerAutoPilotManager.setAutoPilotSpeed(speed) when { @@ -94,13 +88,15 @@ class AutoPilotAndCheckView @JvmOverloads constructor( } } } - KeyBoardUtil.hideSystemSoftKeyboard(context, etInputSpeed) ivCloseIcon.setOnClickListener { clickListener?.onClose(it) } rlKillLayout.setOnClickListener { killApp() } + sopLayout.setOnClickListener { + clickListener?.showSOPSettingView() + } viewCheckStatus.setOnClickListener { clickListener?.go2CheckPage() } @@ -110,49 +106,60 @@ class AutoPilotAndCheckView @JvmOverloads constructor( ivDebugFeedback.onClick { clickListener?.showFeedbackView() } - etInputSpeed.setOnFocusChangeListener { v, hasFocus -> - when { - hasFocus -> { - llSpeedPosition.background = - resources.getDrawable(R.drawable.pilot_speed_high_light_bg) - if (keyBoardUtil == null) { - keyBoardUtil = KeyBoardUtil(sKeyBoardView, etInputSpeed) - } - keyBoardUtil?.showKeyboard() - } - else -> llSpeedPosition.background = - resources.getDrawable(R.drawable.pilot_speed_bg) - } - } - etInputSpeed.setOnTouchListener { v, event -> - var curTime = System.currentTimeMillis() - if (curTime - lastTime < 1000) { - return@setOnTouchListener true - } - if (!connectStatus) { - ToastUtils.showShort("设置车速失败,请启动域控制器") - keyBoardUtil?.hideKeyboard() - return@setOnTouchListener true - } else { - return@setOnTouchListener false - } - } - updateSpeedSettingViews() + if (AppConfigInfo.isConnectAutopilot) { CallerAutoPilotManager.getCarConfig() } - if (maxAcceleration > 0) { - tvAcceleration.text = "加速度 $maxAcceleration m/s²" - } +// if (maxAcceleration > 0) { +// tvAcceleration.text = "加速度 $maxAcceleration m/s²" +// } + tvAcceleration.text = "每次调整车速±5km/h" if (speedLimit > 0) { - etInputSpeed.setText((speedLimit * 3.6).toInt().toString()) + tvSpeed.text = speedLimit.toString() + }else{ + tvSpeed.text = "0" + } + ivSpeedReduce.setOnClickListener { + if(speedLimit>=5){ + speedLimit -= 5 + //速度显示 + val isSuccess = CallerAutoPilotManager.setAutoPilotSpeed(speedLimit) + when { + isSuccess -> { + //速度显示 + tvSpeed.text = speedLimit.toString() + ToastUtils.showShort("车速设置成功,立即生效") + } + else -> { + ToastUtils.showShort("设置车速失败,请启动域控制器") + } + } + }else{ + ToastUtils.showShort("车速不能再减了") + } + } + ivSpeedAdd.setOnClickListener { + if(speedLimit<=55){ + speedLimit += 5 + //速度显示 + val isSuccess = CallerAutoPilotManager.setAutoPilotSpeed(speedLimit) + when { + isSuccess -> { + //速度显示 + tvSpeed.text = speedLimit.toString() + ToastUtils.showShort("车速设置成功,立即生效") + } + else -> { + ToastUtils.showShort("设置车速失败,请启动域控制器") + } + } + }else{ + ToastUtils.showShort("车速不能再加了") + } } - initOchView() -// // 比如需要设置默认速度 -// val speed = "30" -// etInputSpeed.setText(speed) -// etInputSpeed.setSelection(speed.length) + + initOchView() } private fun initOchView() { @@ -189,11 +196,6 @@ class AutoPilotAndCheckView @JvmOverloads constructor( this.clickListener = clickListener } - private fun updateSpeedSettingViews() { - tvSpeedTitle.visibility = View.VISIBLE - llSpeedPosition.visibility = View.VISIBLE - } - fun showAdUpgradeStatus(ipcUpgradeStateInfo: IPCUpgradeStateInfo) { systemVersionView?.showAdUpgradeStatus(ipcUpgradeStateInfo) } @@ -220,16 +222,20 @@ class AutoPilotAndCheckView @JvmOverloads constructor( fun onClose(v: View) fun showDebugPanelView() fun showFeedbackView() + fun showSOPSettingView() } override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { UiThreadHandler.post { - tvAcceleration?.let { - maxAcceleration = carConfigResp.maxAcceleration - speedLimit = carConfigResp.speedLimit - tvAcceleration.text = "加速度 ${carConfigResp.maxAcceleration} m/s²" - etInputSpeed.setText((carConfigResp.speedLimit * 3.6).toInt().toString()) - } +// tvAcceleration?.let { +// maxAcceleration = carConfigResp.maxAcceleration +// speedLimit = carConfigResp.speedLimit +//// tvAcceleration.text = "加速度 ${carConfigResp.maxAcceleration} m/s²" +// tvSpeed.text = (carConfigResp.speedLimit * 3.6).toInt().toString() +// } + maxAcceleration = carConfigResp.maxAcceleration + speedLimit = (carConfigResp.speedLimit * 3.6).toInt() + tvSpeed.text = speedLimit.toString() } } } \ 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/BusOperationView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt index 37709763dd..141a3ef9d7 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/BusOperationView.kt @@ -24,7 +24,7 @@ class BusOperationView @JvmOverloads constructor( init { LayoutInflater.from(context).inflate(R.layout.view_och_bus_operation,this,true) context?.let { - actvAccountPhone.text = SharedPrefs.getInstance(it).getString("account","") + actvAccountPhone.text = phoneMask(SharedPrefs.getInstance(it).getString("och_account","")) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BatteryGroupView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BatteryGroupView.kt new file mode 100644 index 0000000000..4bb2a24d01 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BatteryGroupView.kt @@ -0,0 +1,109 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.BatteryManager +import android.os.Handler +import android.os.Message +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.ImageView +import android.widget.LinearLayout +import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener +import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager +import com.mogo.eagle.core.function.hmi.R +import java.lang.ref.WeakReference + +class BatteryGroupView : LinearLayout, IMoGoSkinModeChangeListener { + + constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 + ) : super(context, attrs, defStyleAttr) { + } + + private var batteryHandler: BatteryHandler = BatteryHandler(this) + private var view: View = + LayoutInflater.from(context).inflate(R.layout.view_battery_group, this, true) + private var batteryView: BatteryView = (view as BatteryGroupView).findViewById(R.id.viewBattery) + private var ivBatteryCharge: ImageView = (view as BatteryGroupView).findViewById(R.id.ivBatteryCharge) + private var mSkinMode = 0 + + private val batteryStateReceiver: BroadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + when (intent.action) { + Intent.ACTION_BATTERY_CHANGED -> { + val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0) + val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0) + val charge = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1) + val percentage = (level * 100) / scale + val message = Message.obtain() + message.what = 0 + message.arg1 = percentage + message.arg2 = charge + batteryHandler.sendMessage(message) + } + } + } + } + + companion object { + + const val TAG = "BatteryGroupView" + + class BatteryHandler(batteryGroupView: BatteryGroupView) : Handler() { + + //虚引用 + private var stateViewWeakReference: WeakReference? = null + + init { + stateViewWeakReference = WeakReference(batteryGroupView) + } + + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val batteryGroupView = stateViewWeakReference?.get() + batteryGroupView?.let { + if (msg.what == 0) { + it.batteryView.setPower(msg.arg1) + val isCharging = msg.arg2 == BatteryManager.BATTERY_STATUS_CHARGING || + msg.arg2 == BatteryManager.BATTERY_STATUS_FULL + it.batteryView.setCharging(isCharging) + if (isCharging) { + it.ivBatteryCharge.visibility = View.VISIBLE + when(it.mSkinMode){ + 0 -> it.ivBatteryCharge.setImageResource(R.drawable.battery_charge_light) + 1 -> it.ivBatteryCharge.setImageResource(R.drawable.battery_charge_dark) + } + } else { + it.ivBatteryCharge.visibility = View.GONE + } + } + } + } + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val intentFilter = IntentFilter() + intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED) + context.registerReceiver(batteryStateReceiver, intentFilter) + // 添加换肤监听 + CallerSkinModeListenerManager.addListener(TAG, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + context.unregisterReceiver(batteryStateReceiver) + CallerSkinModeListenerManager.removeListener(TAG) + } + + override fun onSkinModeChange(skinMode: Int) { + mSkinMode = skinMode + } +} \ 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/widget/BatteryView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BatteryView.kt new file mode 100644 index 0000000000..c88cc7a1bb --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BatteryView.kt @@ -0,0 +1,165 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.RectF +import android.util.AttributeSet +import android.view.View +import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener +import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager +import com.mogo.eagle.core.function.hmi.R +import kotlin.math.abs + + +class BatteryView : View , IMoGoSkinModeChangeListener { + + companion object{ + const val TAG = "BatteryView" + } + + private val radius = context.resources.getDimension(R.dimen.dp_4) // 圆角角度 + private val border = context.resources.getDimension(R.dimen.dp_3) // 外边缘宽度 + private val margin = context.resources.getDimension(R.dimen.dp_6) // 边框与内部电量距离 + private val width = context.resources.getDimension(R.dimen.dp_57) // 电池宽度 + private val height = context.resources.getDimension(R.dimen.dp_28) // 电池高度 + private val headWidth = context.resources.getDimension(R.dimen.dp_3) // 电池头宽度 + private val headHeight = context.resources.getDimension(R.dimen.dp_8) // 电池头高度 + private val headRadius = context.resources.getDimension(R.dimen.dp_1) // 电池头圆角角度 + private val batteryNumSize = context.resources.getDimension(R.dimen.dp_20) // 电量显示文字大小 + private var batteryColor = context.resources.getColor(R.color.color_27FFFFFF) // 电量内部颜色 + private var powerColor = Color.WHITE + + //默认满电 + private var mPower = 100 + + //是否充电 + private var mIsCharging = false + + constructor( + context: Context, + attrs: AttributeSet? = null + ) : super(context, attrs, 0) { + + } + + constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 + ) : super(context, attrs, defStyleAttr) { + } + + @SuppressLint("NewApi") + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + setMeasuredDimension(width.toInt(), height.toInt()) + } + + @SuppressLint("DrawAllocation") + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + //电池头 + val paint = Paint() + paint.style = Paint.Style.FILL + paint.strokeWidth = 0f + paint.isAntiAlias = true + paint.color = powerColor + + val rectHead = + RectF(width - headWidth, (height - headHeight) / 2, width, (height + headHeight) / 2) + canvas.drawRoundRect(rectHead, headRadius, headRadius, paint) + + //边框 + paint.strokeWidth = border + paint.style = Paint.Style.STROKE + val rectF = + RectF(radius / 2, radius / 2, width - headWidth - radius / 2, height - radius / 2) + canvas.drawRoundRect(rectF, radius, radius, paint) + + //文字画笔 + val textPaint = Paint() + textPaint.color = powerColor + textPaint.isAntiAlias = true + textPaint.textSize = batteryNumSize + textPaint.textAlign = Paint.Align.CENTER + //画数字 + val fontMetrics = textPaint.fontMetrics + canvas.drawText(mPower.toString(), rectF.centerX(), abs(fontMetrics.top), textPaint) + + //电池电量 + val powerValues = mPower / 100.0f + val paintPower = Paint(paint) + paintPower.style = Paint.Style.FILL + + //低电量 + val lowerPaint = Paint(paint) + lowerPaint.style = Paint.Style.FILL + lowerPaint.color = powerColor + if (mPower < 20) { + lowerPaint.color = Color.RED + } else { + lowerPaint.color = batteryColor + } + + //画电量 + if (powerValues != 0f) { + val right = (width - margin - headWidth) * powerValues + val bottom = height - margin + val rect = RectF(margin, margin, right, bottom) + //画矩形 + canvas.drawRoundRect(rect, radius, radius, lowerPaint) + } + } + + /** + * 设置当前电量 + */ + fun setPower(power: Int) { + if (this.mPower < 0) { + this.mPower = 0 + } + if (this.mPower > 100) { + this.mPower = 100 + } + this.mPower = power + if(isAttachedToWindow){ + invalidate() + } + } + + /** + * 是否充电中 + */ + fun setCharging(charging: Boolean) { + this.mIsCharging = charging + invalidate() + } + + override fun onSkinModeChange(skinMode: Int) { + when (skinMode) { + 0 -> { + batteryColor = resources.getColor(R.color.color_27FFFFFF) + powerColor = Color.WHITE + } + 1 -> { + batteryColor = resources.getColor(R.color.color_1E111111) + powerColor = resources.getColor(R.color.color_2C2E30) + } + } + invalidate() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + // 添加换肤监听 + CallerSkinModeListenerManager.addListener(TAG, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerSkinModeListenerManager.removeListener(TAG) + } +} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt new file mode 100644 index 0000000000..85649ffa64 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/BlueToothView.kt @@ -0,0 +1,23 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.RelativeLayout +import com.mogo.eagle.core.function.hmi.R + +/** + * 魔戒蓝牙控件 + * 放置于StatusBar右侧位置 + */ +class BlueToothView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr) { + + init { + LayoutInflater.from(context).inflate(R.layout.view_blue_tooth, 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/widget/CircularProgressView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt index 214cd5e923..e84187017b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt @@ -6,7 +6,6 @@ import android.content.res.TypedArray import android.graphics.* import android.util.AttributeSet import android.util.DisplayMetrics -import android.util.Log import android.view.View import android.view.animation.LinearInterpolator import android.view.animation.OvershootInterpolator @@ -81,7 +80,6 @@ class CircularProgressView @JvmOverloads constructor( mRectF = RectF(mRectL.toFloat(), mRectT.toFloat(), (mRectL + mRectLength).toFloat(), (mRectT + mRectLength).toFloat()) - Log.d(TAG, "onMeasure:" + mRectF.toString() + "," + "width:" + measuredWidth.toString() + "," + "PaddingLeft:" + getPaddingLeft().toString()) } /** @@ -107,7 +105,6 @@ class CircularProgressView @JvmOverloads constructor( override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) - Log.d(TAG, "onDraw") canvas?.let { mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) } mRectF?.let { it1 -> @@ -154,7 +151,6 @@ class CircularProgressView @JvmOverloads constructor( val animator = ValueAnimator.ofInt(mProgress, progress) animator.addUpdateListener { mProgress = it.animatedValue as Int - Log.d(TAG, "setProgress" + mProgress.toString()) invalidate() } animator.interpolator = LinearInterpolator() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DemoModeView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DemoModeView.kt new file mode 100644 index 0000000000..f0a51a62f8 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/DemoModeView.kt @@ -0,0 +1,23 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.RelativeLayout +import com.mogo.eagle.core.function.hmi.R + +/** + * 演示模式控件 + * 放置于StatusBar右侧位置 + */ +class DemoModeView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr) { + + init { + LayoutInflater.from(context).inflate(R.layout.view_demo_mode, 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/widget/PerspectiveSwitchView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/PerspectiveSwitchView.kt index e2f86e8bb8..4caa7e4038 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/PerspectiveSwitchView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/PerspectiveSwitchView.kt @@ -6,10 +6,9 @@ import android.view.* import android.widget.* import com.mogo.commons.* import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.hmi.R.drawable +import com.mogo.eagle.core.function.v2x.events.scenario.scene.airoad.* import com.mogo.map.* import com.mogo.map.uicontroller.* -import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT import com.mogo.module.common.constants.* import kotlinx.android.synthetic.main.view_perspective_switch.view.* @@ -33,18 +32,18 @@ class PerspectiveSwitchView @JvmOverloads constructor( override fun onClick(v: View?) { //切换地图的远近视图 if (MogoMapUIController.getInstance().currentMapVisualAngle.isLongSight) { - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) - .visibleAllMarkers() +// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) +// .visibleAllMarkers() MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null) textSwitch.setText(R.string.module_map_model_normal) } else if (MogoMapUIController.getInstance().currentMapVisualAngle.isMediumSight) { - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) - .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS) +// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) +// .inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS) MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null) textSwitch.setText(R.string.module_map_model_faster) } else { - MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) - .visibleAllMarkers() +// MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) +// .visibleAllMarkers() MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null) textSwitch.setText(R.string.module_map_model_normal) } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt index b856ecf35e..12842094df 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SingleTrafficLightView.kt @@ -7,6 +7,7 @@ import android.view.View import android.widget.ImageView import android.widget.TextView import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.config.HmiBuildConfig import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils @@ -49,7 +50,9 @@ class SingleTrafficLightView @JvmOverloads constructor( override fun showWarningTrafficLight(checkLightId: Int,lightSource: Int) { super.showWarningTrafficLight(checkLightId,lightSource) mCurrentLightId = checkLightId - updateTrafficLightIcon(checkLightId,lightSource) + if(!HmiBuildConfig.isShowTrafficLightView){ + updateTrafficLightIcon(checkLightId,lightSource) + } } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedPanelView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedPanelView.kt index 72374b2774..f0f2cbce26 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedPanelView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SpeedPanelView.kt @@ -1,17 +1,17 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context -import android.graphics.Color +import android.graphics.* import android.location.Location -import android.util.AttributeSet +import android.util.* import android.view.Gravity import android.widget.FrameLayout import com.alibaba.android.arouter.launcher.ARouter import com.mogo.eagle.core.data.constants.MogoServicePaths import com.mogo.eagle.core.function.call.hmi.CallerHmiManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.map.MogoMapUIController +import com.mogo.eagle.core.utilcode.util.* +import com.mogo.map.* import com.mogo.map.navi.IMogoCarLocationChangedListener2 import com.mogo.service.IMogoServiceApis import java.util.* @@ -38,6 +38,11 @@ class SpeedPanelView @JvmOverloads constructor( var mSpeedLimmit = 60; + + private val timer by lazy { + Timer() + } + init { initEvent(context) @@ -61,29 +66,30 @@ class SpeedPanelView @JvmOverloads constructor( } } - private val timerTask = object : TimerTask() { - override fun run() { - if (mLatLng != null) { - mSpeedLimmit = MogoMapUIController.getInstance() - .getLimitSpeed(mLatLng!!.longitude, mLatLng!!.latitude, mLatLng!!.bearing) - UiThreadHandler.post { - val speed = (mLatLng!!.speed * 3.6f).toInt() - mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6")) - mSpeedChartView.setValues(speed) - setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor) + private var timerTask : TimerTask? = null + + override fun onAttachedToWindow() { + super.onAttachedToWindow() // 注册位置回调 + mMogoServiceApis.registerCenterApi.registerCarLocationChangedListener(TAG, this) + // 开启定时查询速度 + timerTask?.cancel() + val task = object : TimerTask() { + override fun run() { + if (mLatLng != null) { + + mSpeedLimmit = MogoMapUIController.getInstance() + .getLimitSpeed(mLatLng!!.longitude, mLatLng!!.latitude, mLatLng!!.bearing) + UiThreadHandler.post { + val speed = (mLatLng!!.speed * 3.6f).toInt() + mSpeedChartView.setArcColor(Color.parseColor(if (speed > mSpeedLimmit) "#DB3137" else "#3E77F6")) + mSpeedChartView.setValues(speed) + setBackgroundResource(if (speed > mSpeedLimmit) R.drawable.yi_biao_pan_bg_speeding else R.drawable.yi_biao_pan_bg_nor) + } } } } - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - // 注册位置回调 - mMogoServiceApis.registerCenterApi - .registerCarLocationChangedListener(TAG, this) - - // 开启定时查询速度 - Timer().schedule(timerTask, Date(), 100) + this.timerTask = task + timer.schedule(task, Date(), 100) } override fun onDetachedFromWindow() { @@ -92,7 +98,7 @@ class SpeedPanelView @JvmOverloads constructor( mMogoServiceApis.registerCenterApi .unregisterMogoLocationListener(TAG) try { - timerTask.cancel() + timerTask?.cancel() } catch (e: Exception) { e.printStackTrace() } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt new file mode 100644 index 0000000000..766c2f62b9 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/StatusBarView.kt @@ -0,0 +1,90 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.RelativeLayout +import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener +import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.util.BarUtils +import com.mogo.eagle.core.utilcode.util.ScreenUtils +import kotlinx.android.synthetic.main.view_status_bar.view.* +import java.util.concurrent.CopyOnWriteArrayList + +class StatusBarView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RelativeLayout(context, attrs, defStyleAttr), IMoGoSkinModeChangeListener { + + companion object { + const val TAG = "StatusBarView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.view_status_bar, this, true) + } + + private val rightViewList = CopyOnWriteArrayList() + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val layoutParamsLeft = + LayoutParams(ScreenUtils.getScreenWidth() / 3, BarUtils.getStatusBarHeight()) + viewStatusBarLeft.layoutParams = layoutParamsLeft + val layoutParamsRight = + LayoutParams(ScreenUtils.getScreenWidth() / 3 * 2, BarUtils.getStatusBarHeight()) + layoutParamsRight.addRule(ALIGN_PARENT_END) + layoutParamsRight.addRule(CENTER_HORIZONTAL) + layoutParamsRight.addRule(CENTER_IN_PARENT) + layoutParamsRight.marginEnd = context.resources.getDimension(R.dimen.dp_44).toInt() + viewStatusBarRight.layoutParams = layoutParamsRight + viewStatusBarRight.addView(BatteryGroupView(this.context)) + + // 添加换肤监听 + CallerSkinModeListenerManager.addListener(TAG, this) + } + + override fun onSkinModeChange(skinMode: Int) { + when (skinMode) { + 0 -> setStatusBarDarkOrLight(false) + 1 -> setStatusBarDarkOrLight(true) + } + } + + fun setStatusBarDarkOrLight(light: Boolean) { + if (light) { + setTextColor(resources.getColor(R.color.color_2C2E30)) + } else { + setTextColor(resources.getColor(R.color.color_FFFFFF)) + } + } + + fun updateRightView(insert: Boolean, tag: String, viewGroup: ViewGroup) { + if (insert) { + rightViewList.add(0, tag) + viewStatusBarRight.addView(viewGroup, 0) + } else { + rightViewList.forEachIndexed { index, s -> + if (s == tag) { + rightViewList.removeAt(index) + viewStatusBarRight.removeViewAt(index) + } + } + } + } + + private fun setTextColor(color: Int) { + viewTextClock.setTextColor(color) + viewStatusBarTag.setTextColor(color) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + CallerSkinModeListenerManager.removeListener(TAG) + } + +} + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java index 67594f090e..34f476121f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java @@ -3,7 +3,6 @@ package com.mogo.eagle.core.function.hmi.ui.widget; import android.content.Context; import android.graphics.BlurMaskFilter; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.animation.RotateAnimation; @@ -54,12 +53,10 @@ public class SteeringWheelView extends ConstraintLayout { public SteeringWheelView(@NonNull Context context) { super(context); - Log.d(TAG, "1"); } public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); - Log.d(TAG, "2"); if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { LayoutInflater.from(context).inflate(R.layout.hmi_steering_wheel_bus, this); } else { @@ -94,12 +91,10 @@ public class SteeringWheelView extends ConstraintLayout { public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - Log.d(TAG, "3"); } public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - Log.d(TAG, "4"); } private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() { @@ -127,7 +122,6 @@ public class SteeringWheelView extends ConstraintLayout { int state = autopilotStatusInfo.getState(); CallerLogger.INSTANCE.d(M_BUS_P + TAG, "state = %s", state); if (autopilotIV != null) { - Log.d(TAG, "autopilotIV != null"); if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { // TODO @@ -151,7 +145,7 @@ public class SteeringWheelView extends ConstraintLayout { } } } else { - Log.d(TAG, "autopilotIV=null"); + CallerLogger.INSTANCE.d(TAG, "autopilotIV=null"); } } }); @@ -192,7 +186,6 @@ public class SteeringWheelView extends ConstraintLayout { */ @Override public void onAutopilotLightSwitchData(@org.jetbrains.annotations.Nullable Chassis.LightSwitch lightSwitch) { - Log.d(TAG, "车辆转向灯:" + lightSwitch.toString()); } /** @@ -201,7 +194,6 @@ public class SteeringWheelView extends ConstraintLayout { */ @Override public void onAutopilotBrakeLightData(boolean brakeLight) { - Log.d(TAG, "刹车灯:" + String.valueOf(brakeLight)); } /** @@ -219,7 +211,6 @@ public class SteeringWheelView extends ConstraintLayout { */ @Override public void onAutopilotSteeringData(float steering) { - Log.d(TAG, "steering原始值====" + String.valueOf(steering)); if (Math.abs(steering) < 1) { steering = 0; } @@ -227,7 +218,6 @@ public class SteeringWheelView extends ConstraintLayout { ThreadUtils.runOnUiThread(new Runnable() { @Override public void run() { - Log.d(TAG, "steering忽略小数点后====" + String.valueOf((int) steeringValue)); if (steeringTVL != null && steeringValue > 0) { steeringTVR.setVisibility(View.INVISIBLE); steeringTVL.setVisibility(View.VISIBLE); @@ -237,7 +227,7 @@ public class SteeringWheelView extends ConstraintLayout { steeringTVR.setVisibility(View.VISIBLE); steeringTVR.setText(String.valueOf((int) -steeringValue) + "°"); } else { - Log.d(TAG, "onAutopilotSteeringData error"); + CallerLogger.INSTANCE.d(TAG, "onAutopilotSteeringData error"); } animationWithSteeringData(-steeringValue); if (steeringCircularV != null) { @@ -260,7 +250,7 @@ public class SteeringWheelView extends ConstraintLayout { ThreadUtils.runOnUiThread(new Runnable() { @Override public void run() { - Log.d(TAG, "乘客屏档位" + gear.toString()); + CallerLogger.INSTANCE.d(TAG, "乘客屏档位" + gear.toString()); if (tapPositionView != null) { tapPositionView.updateWithGear(gear); } @@ -288,7 +278,6 @@ public class SteeringWheelView extends ConstraintLayout { * @param steering */ private void animationWithSteeringData(float steering) { - Log.d(TAG, "方向盘转动" + String.valueOf(steering)); rotateAnimation = new RotateAnimation(fromDegrees, steering, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt index 4dec896fc6..bfbbb46acb 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SystemVersionView.kt @@ -16,7 +16,6 @@ import com.mogo.eagle.core.function.call.bindingcar.CallerBindingCarListenerMana import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager import com.mogo.eagle.core.function.hmi.R 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.logger.scene.SceneConstant.Companion.M_HMI import com.mogo.eagle.core.utilcode.util.AppUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XWarningView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XWarningView.kt index 80c0da6125..6bc394fba8 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XWarningView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/V2XWarningView.kt @@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.hmi.ui.widget import android.content.Context import android.util.AttributeSet -import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.RelativeLayout @@ -53,7 +52,6 @@ class V2XWarningView @JvmOverloads constructor( * @param closeTime 倒计时 */ fun showWarning(direction: WarningDirectionEnum, closeTime: Long) { - Log.d(TAG, "预警红边:预警方向->$direction 预警倒计时->$closeTime") UiThreadHandler.post { // 如果传入的不是关闭显示,则设置倒计时,定时关闭红框警示 if (direction != ALERT_WARNING_NON) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VipIdentificationView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VipIdentificationView.kt index 3692ba8b97..70c1dbd01c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VipIdentificationView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/VipIdentificationView.kt @@ -26,12 +26,17 @@ class VipIdentificationView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() val lp = this.layoutParams as LayoutParams - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - lp.marginStart = resources.getDimension(R.dimen.module_vip_margin_left_bus).toInt() - lp.topMargin = resources.getDimension(R.dimen.module_vip_margin_top_bus).toInt() + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + lp.marginStart = resources.getDimension(R.dimen.module_vip_margin_left_bus_passenger).toInt() + lp.topMargin = resources.getDimension(R.dimen.module_vip_margin_top_passenger).toInt() + } else if (AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode) + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + lp.marginStart = resources.getDimension(R.dimen.module_vip_margin_left_taxi_passenger).toInt() + lp.topMargin = resources.getDimension(R.dimen.module_vip_margin_top_passenger).toInt() } else { - lp.marginStart = resources.getDimension(R.dimen.module_vip_margin_left_taxi).toInt() - lp.topMargin = resources.getDimension(R.dimen.module_vip_margin_top_taxi).toInt() + lp.marginStart = resources.getDimension(R.dimen.module_vip_margin_left).toInt() + lp.topMargin = resources.getDimension(R.dimen.module_vip_margin_top).toInt() } this.layoutParams = lp invalidate() diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt new file mode 100644 index 0000000000..c5c11e034a --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/WifiStateView.kt @@ -0,0 +1,127 @@ +package com.mogo.eagle.core.function.hmi.ui.widget + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.wifi.WifiManager +import android.os.Handler +import android.os.Message +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatImageView +import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener +import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager +import com.mogo.eagle.core.function.hmi.R +import java.lang.ref.WeakReference + + +class WifiStateView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : AppCompatImageView(context, attrs, defStyleAttr), IMoGoSkinModeChangeListener { + + companion object { + const val TAG = "WifiStateView" + + class WifiHandler(wifiStateView: WifiStateView) : Handler() { + + //虚引用 + private var stateViewWeakReference: WeakReference? = null + + init { + stateViewWeakReference = WeakReference(wifiStateView) + } + + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + val wifiStateView = stateViewWeakReference?.get() + wifiStateView?.updateView(msg.what) { + wifiStateView.setImageResource(it) + } + } + } + } + + private var wifiManager: WifiManager? = null + private var wifiHandler: WifiHandler? = null + + @Volatile + private var mSkinMode: Int = 0 + + @Volatile + private var level: Int = 0 + + init { + wifiManager = + context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager? + wifiHandler = WifiHandler(this) + } + + private val wifiStateReceiver: BroadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + when (intent.action) { + WifiManager.WIFI_STATE_CHANGED_ACTION, WifiManager.RSSI_CHANGED_ACTION -> { + if (wifiManager!!.wifiState == WifiManager.WIFI_STATE_DISABLED + || wifiManager!!.wifiState == WifiManager.WIFI_STATE_DISABLING + ) { + wifiHandler?.sendEmptyMessage(-1) + return + } + val wifiInfo = wifiManager!!.connectionInfo + level = WifiManager.calculateSignalLevel(wifiInfo.rssi, 5) + wifiHandler?.sendEmptyMessage(level) + } + } + } + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + val intentFilter = IntentFilter() + //Wifi连接状态变化 + intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION) + //Wifi信号强度变化 + intentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION) + context.registerReceiver(wifiStateReceiver, intentFilter) + // 添加换肤监听 + CallerSkinModeListenerManager.addListener(TAG, this) + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + wifiHandler?.removeCallbacksAndMessages(null) + context.unregisterReceiver(wifiStateReceiver) + CallerSkinModeListenerManager.removeListener(TAG) + } + + override fun onSkinModeChange(skinMode: Int) { + mSkinMode = skinMode + wifiHandler?.sendEmptyMessage(level) + } + + fun updateView(wifiState: Int, resId: ((Int) -> Unit)) { + when (mSkinMode) { + 0 -> { + when (wifiState) { + -1 -> resId.invoke(R.drawable.wifi_light_state_close) + 0 -> resId.invoke(R.drawable.wifi_light_state_one) + 1 -> resId.invoke(R.drawable.wifi_light_state_two) + 2 -> resId.invoke(R.drawable.wifi_light_state_three) + 3 -> resId.invoke(R.drawable.wifi_light_state_four) + 4 -> resId.invoke(R.drawable.wifi_light_state_five) + } + } + 1 -> { + when (wifiState) { + -1 -> resId.invoke(R.drawable.wifi_light_state_close) + 0 -> resId.invoke(R.drawable.wifi_dark_state_one) + 1 -> resId.invoke(R.drawable.wifi_dark_state_two) + 2 -> resId.invoke(R.drawable.wifi_dark_state_three) + 3 -> resId.invoke(R.drawable.wifi_dark_state_four) + 4 -> resId.invoke(R.drawable.wifi_dark_state_five) + } + } + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java index dcde8ca87d..bded69ba63 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.java @@ -11,7 +11,9 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.provider.Settings; +import android.view.Gravity; import android.view.View; +import android.view.ViewGroup; import android.widget.FrameLayout; import androidx.annotation.NonNull; @@ -26,8 +28,8 @@ import com.kwai.koom.base.MonitorManager; import com.kwai.koom.nativeoom.leakmonitor.LeakMonitor; import com.kwai.koom.nativeoom.leakmonitor.LeakMonitorConfig; import com.kwai.koom.nativeoom.leakmonitor.LeakRecord; -import com.mogo.cloud.commons.BuildConfig; import com.mogo.commons.context.ContextHolderUtil; +import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.mvp.BaseFragment; import com.mogo.commons.mvp.MvpActivity; import com.mogo.commons.mvp.MvpFragment; @@ -38,6 +40,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager; import com.mogo.eagle.core.function.hmi.R; +import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView; import com.mogo.eagle.core.function.main.cards.MogoModulesManager; import com.mogo.eagle.core.function.main.service.MogoMainService; import com.mogo.eagle.core.function.main.stagetwo.AutopilotStartup; @@ -47,6 +50,7 @@ import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils; import com.mogo.eagle.core.utilcode.mogo.toast.ResourcesHelper; +import com.mogo.eagle.core.utilcode.util.BarUtils; import com.mogo.eagle.core.utilcode.util.NetworkUtils; import com.mogo.eagle.core.utilcode.util.ProcessUtils; import com.mogo.map.listener.IMogoHosListenerRegister; @@ -115,6 +119,7 @@ public class MainActivity extends MvpActivity implement @Override protected void initViews() { + injectStatusBar(); getWindow().setBackgroundDrawable(null); mFloatingLayout = findViewById(R.id.module_main_id_floating_view); @@ -135,6 +140,24 @@ public class MainActivity extends MvpActivity implement } } + private void injectStatusBar() { + FrameLayout decorView =(FrameLayout) this.getWindow().getDecorView(); + View contentView = ((ViewGroup)decorView.findViewById(android.R.id.content)).getChildAt(0); + contentView.setFitsSystemWindows(false); + decorView.setClipToPadding(false); + + View statusBarView = decorView.findViewWithTag("status_bar"); + if (statusBarView == null) { + statusBarView = new StatusBarView(this); + statusBarView.setTag("status_bar"); + } + FrameLayout.LayoutParams statusBarLP = + new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, BarUtils.getStatusBarHeight()); + statusBarLP.topMargin = 0; + statusBarLP.gravity = Gravity.TOP; + decorView.addView(statusBarView, statusBarLP); + } + // 隐藏布局 protected void hideLayout() { mFloatingLayout.setVisibility(View.GONE); @@ -173,6 +196,7 @@ public class MainActivity extends MvpActivity implement @Override public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); if (hasFocus) { // 统计代码 final Map properties = new HashMap<>(); @@ -217,7 +241,7 @@ public class MainActivity extends MvpActivity implement */ public void startUpInStage2() { StartupConfig config = null; - if (BuildConfig.DEBUG) { + if (DebugConfig.isDebug()) { config = new StartupConfig.Builder() .setLoggerLevel(LoggerLevel.DEBUG) .setOpenStatistics(true) @@ -283,8 +307,10 @@ public class MainActivity extends MvpActivity implement // 启动一些基本的服务:定位等 startBaseService(); - // 启动Native内存泄漏监测 - startLeakMonitor(); + if (DebugConfig.isDebug()) { + // 启动Native内存泄漏监测 + startLeakMonitor(); + } } /** @@ -305,12 +331,10 @@ public class MainActivity extends MvpActivity implement .setMonitorThreshold(16) .setNativeHeapAllocatedThreshold(0) .setSelectedSoList(new String[]{"libhdmap", "libmap", - "libAMapSDK_NAVI_v8_0_1", "librouting", "libZegoExpressEngine", - "libUtils", "libcommon", "libcntts", "libduiutils", - "libdatamgr", "libdatascript", "libguidance", "libndsprovider", - "libndssqlite", "libpbjni", "libsearch" + "libAMapSDK_NAVI_v8_0_1", "libZegoExpressEngine", + "libcntts" }) - .setEnableLocalSymbolic(BuildConfig.DEBUG) + .setEnableLocalSymbolic(DebugConfig.isDebug()) .setLeakListener(leaks -> { StringBuilder stringBuilder = new StringBuilder(); if (!leaks.isEmpty()) { diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java index f9d2dca0ec..5e4b73b40e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainLauncherActivity.java @@ -27,6 +27,7 @@ import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; import com.mogo.eagle.core.function.api.setting.IMoGoSkinModeChangeListener; 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.hmi.CallerHmiManager; import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager; import com.mogo.eagle.core.function.hmi.R; import com.mogo.eagle.core.function.main.moujie.BluetoothMonitorReceiver; @@ -34,7 +35,6 @@ import com.mogo.eagle.core.function.main.moujie.ConnectBluetoothEvent; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.util.BarUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.service.intent.IMogoIntentListener; @@ -71,7 +71,7 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis private BluetoothMonitorReceiver mBluetoothReceiver = null; private BluetoothAdapter mBluetoothAdapter; - private List mAreadlyConnectedList = new ArrayList<>();//已连接设备集合 +// private List mAreadlyConnectedList = new ArrayList<>();//已连接设备集合 private int numberA = 0; private boolean isLongPressA = false; private int numberB = 0; @@ -98,13 +98,11 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis super.onResume(); initBluetooth(); - mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (!mBluetoothAdapter.isEnabled()) { mBluetoothAdapter.enable(); } mBluetoothAdapter.startDiscovery(); - showBondedDevice(mBluetoothAdapter); } @@ -212,30 +210,6 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { //向上长按 开启自动驾驶 - long currentTime = System.currentTimeMillis() / (1000); - long oldTime = SharedPrefsMgr.getInstance(getContext()).getLong("old_time_up", 0); - if (currentTime - oldTime > 6) { - SharedPrefsMgr.getInstance(getContext()).putLong("old_time_up", System.currentTimeMillis() / 1000); -// ToastUtils.showShort("长按 ↑↑↑ 开启自动驾驶"); -// CallerAutoPilotManager.INSTANCE.setControlAutopilotCarAuto(true); - CallerAutoPilotManager.INSTANCE.startAutoPilot(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getAutopilotControlParameters()); - - } - - return true; - } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { //下和中间键盘长按,减速为-2 - long currentTime = System.currentTimeMillis() / (1000); - long oldTime = SharedPrefsMgr.getInstance(getContext()).getLong("old_time_down", 0); - if (currentTime - oldTime > 6) { - SharedPrefsMgr.getInstance(getContext()).putLong("old_time_down", System.currentTimeMillis() / 1000); -// ToastUtils.showShort("长按 ↓↓↓ 减速 -2 "); - sendAcc(true, -2); - } - return true; - } - -// Log.e("liyz", "onKeyDown keyCode = " + keyCode + "--action = " + event.getAction() + "---" + event); return super.onKeyDown(keyCode, event); } @@ -243,109 +217,112 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Override public boolean dispatchKeyEvent(KeyEvent event) { // Log.d("liyz", "dispatchKeyEvent code = " + event.getKeyCode() + "--action = " + event.getAction() + "----" + event); - if (event.getKeyCode() == KeyEvent.KEYCODE_A) { //单击向左变道,长按-1 - if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberA++; - if (numberA > 2) { - if (!isLongPressA) { -// ToastUtils.showShort("方块 长按A -2 "); - sendAcc(true, -2); - isLongPressA = true; - } - } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberA == 1) { -// ToastUtils.showShort("方块 点击A -1 "); - sendAcc(true, -1); - } - numberA = 0; - isLongPressA = false; - } - return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_B) { //单击向右变道,长按-2 - if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberB++; - if (numberB > 2) { - if (!isLongPressB) { -// ToastUtils.showShort("方块 长按B 无操作 "); - isLongPressB = true; - } - } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberB == 1) { -// ToastUtils.showShort("方块 单击B 复原 "); - sendAcc(false, 0.0); - } - numberB = 0; - isLongPressB = false; - } - return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_C) { //单击鸣笛, - if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberC++; - if (numberC > 2) { - if (!isLongPressC) { -// ToastUtils.showShort("方块 长按C 无操作"); - isLongPressC = true; - } - } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberC == 1) { -// ToastUtils.showShort("方块 单击C ← 向左变道 "); - CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); - } - numberC = 0; - isLongPressC = false; - } - return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_D) { //单击开启自动驾驶, - if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberD++; - if (numberD > 2) { - if (!isLongPressD) { -// ToastUtils.showShort("方块 长按D 无操作"); - isLongPressD = true; - } - } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberD == 1) { -// ToastUtils.showShort("方块 单击D → 向右变道 "); - CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); - } - numberD = 0; - isLongPressD = false; - } - return true; - } else if (event.getKeyCode() == KeyEvent.KEYCODE_E) { //单击复原, - if (event.getAction() == KeyEvent.ACTION_DOWN) { - numberE++; - if (numberE > 2) { - if (!isLongPressE) { -// ToastUtils.showShort("方块 长按E 鸣笛 "); - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); - if (timerHorn == null) { - timerHorn = new Timer(); + String bluetoothName = SharedPrefsMgr.getInstance(getContext()).getString("BLUETOOTH"); + if (bluetoothName.equals("MINI_KEYBOARD")) { + if (event.getKeyCode() == KeyEvent.KEYCODE_A) { //单击向左变道,长按-1 + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberA++; + if (numberA > 2) { + if (!isLongPressA) { + ToastUtils.showShort("方块 长按A -2 "); + sendAcc(true, -2); + isLongPressA = true; } - timerHorn.schedule(new TimerTask() { - @Override - public void run() { - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); - timerHorn = null; - } - }, 500); - isLongPressE = true; } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberA == 1) { + ToastUtils.showShort("方块 点击A -1 "); + sendAcc(true, -1); + } + numberA = 0; + isLongPressA = false; } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (numberE == 1) { -// ToastUtils.showShort("方块 单击E 开启自动驾驶 "); + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_B) { //单击向右变道,长按-2 + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberB++; + if (numberB > 2) { + if (!isLongPressB) { + ToastUtils.showShort("方块 长按B 无操作 "); + isLongPressB = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberB == 1) { + ToastUtils.showShort("方块 单击B 复原 "); + sendAcc(false, 0.0); + } + numberB = 0; + isLongPressB = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_C) { //单击鸣笛, + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberC++; + if (numberC > 2) { + if (!isLongPressC) { + ToastUtils.showShort("方块 长按C 无操作"); + isLongPressC = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberC == 1) { + ToastUtils.showShort("方块 单击C ← 向左变道 "); + CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); + } + numberC = 0; + isLongPressC = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_D) { //单击开启自动驾驶, + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberD++; + if (numberD > 2) { + if (!isLongPressD) { + ToastUtils.showShort("方块 长按D 无操作"); + isLongPressD = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberD == 1) { + ToastUtils.showShort("方块 单击D → 向右变道 "); + CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); + } + numberD = 0; + isLongPressD = false; + } + return true; + } else if (event.getKeyCode() == KeyEvent.KEYCODE_E) { //单击复原, + if (event.getAction() == KeyEvent.ACTION_DOWN) { + numberE++; + if (numberE > 2) { + if (!isLongPressE) { + ToastUtils.showShort("方块 长按E 鸣笛 "); + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); + if (timerHorn == null) { + timerHorn = new Timer(); + } + timerHorn.schedule(new TimerTask() { + @Override + public void run() { + CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); + timerHorn = null; + } + }, 500); + isLongPressE = true; + } + } + } else if (event.getAction() == KeyEvent.ACTION_UP) { + if (numberE == 1) { + ToastUtils.showShort("方块 单击E 开启自动驾驶 "); // CallerAutoPilotManager.INSTANCE.setControlAutopilotCarAuto(true); - CallerAutoPilotManager.INSTANCE.startAutoPilot(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getAutopilotControlParameters()); + CallerAutoPilotManager.INSTANCE.startAutoPilot(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getAutopilotControlParameters()); + } + numberE = 0; + isLongPressE = false; } - numberE = 0; - isLongPressE = false; + return true; } - return true; } return super.dispatchKeyEvent(event); @@ -353,54 +330,13 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis @Override public boolean dispatchTouchEvent(MotionEvent event) { -// Log.d("liyz", "dispatchTouchEvent event.getX() = " + event.getX() + "--event.getY() = " + event.getY() + "--action = " + event.getAction()); - if (event.getX() == -1469.6875 && event.getY() == 530.0) { //向左变道 -// ToastUtils.showShort("← 向左变道"); - CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneLeft(); - - return true; - } else if (event.getX() == -1096.25 && event.getY() == 132.5) { //鸣笛 -// ToastUtils.showShort("↑ 鸣笛 "); - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(1); - - if (timerHorn == null) { - timerHorn = new Timer(); - } - timerHorn.schedule(new TimerTask() { - @Override - public void run() { - CallerAutoPilotManager.INSTANCE.sendOperatorSetHorn(2); - timerHorn = null; - } - }, 500); - - return true; - } else if (event.getX() == -863.4375 && event.getY() == 690.0) { //向右变道 - CallerAutoPilotManager.INSTANCE.sendOperatorChangeLaneRight(); -// ToastUtils.showShort("→ 向右变道"); - return true; - } else if (event.getX() == -1096.25 && event.getY() == 1099.0) { // -1减速 - sendAcc(true, -1); -// ToastUtils.showShort("↓ 减速 -1 "); - - return true; - } else if (event.getX() == -1096.25 && event.getY() == 690.0) { //复原 -// ToastUtils.showShort("O 复原 "); - sendAcc(false, 0.0); - - return true; - } return super.dispatchTouchEvent(event); } @Override public void onSkinModeChange(int skinMode) { - if (skinMode == 0) { - BarUtils.setStatusBarLightMode(this, false); - } else { - BarUtils.setStatusBarLightMode(this, true); - } + } private synchronized void sendAcc(boolean isSend, double acc) { @@ -444,10 +380,9 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis /** * 查找蓝牙连接过的蓝牙设备 * - * @param bluetoothAdapter */ private void showBondedDevice(BluetoothAdapter bluetoothAdapter) { - mAreadlyConnectedList.clear(); +// mAreadlyConnectedList.clear(); Set deviceList = bluetoothAdapter.getBondedDevices(); for (BluetoothDevice device : deviceList) { try { @@ -455,14 +390,10 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis Method isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null); isConnectedMethod.setAccessible(true); boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null); - mAreadlyConnectedList.add(device); - if (device.getName().equals("JX-05")) { //后面魔戒可能不使用了 - SharedPrefsMgr.getInstance(getContext()).putString("BT_MAC", device.getAddress()); - } - if (!isConnected) { - UiThreadHandler.postDelayed(() -> { - connectBluetooth(); //主动连接一次 - }, 4000L); +// mAreadlyConnectedList.add(device); +// Log.d("liyz", "-- device.getName() = " + device.getName()); //device.getAddress() + if (device.getName().equals("MINI_KEYBOARD")) { + SharedPrefsMgr.getInstance(getContext()).putString("BLUETOOTH", device.getName()); } } catch (NoSuchMethodException e) { e.printStackTrace(); @@ -474,41 +405,11 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis } } - @Subscribe(threadMode = ThreadMode.MAIN) public void onAutoConnection(ConnectBluetoothEvent event) { // connectBluetooth(); } - /** - * 主动连接最近的一次连接 - */ - private void connectBluetooth() { - if (mAreadlyConnectedList.size() > 0) { - try { - Method method = BluetoothDevice.class.getMethod("createBond"); - String macAddress = SharedPrefsMgr.getInstance(getContext()).getString("BT_MAC"); - int pos = -1; - for (int i = 0; i < mAreadlyConnectedList.size(); i++) { - if (macAddress.equals(mAreadlyConnectedList.get(i).getAddress())) { - pos = i; - } - } - - if (mAreadlyConnectedList.size() > pos && (pos >= 0)) { - method.invoke(mAreadlyConnectedList.get(pos)); - } - - } catch (NoSuchMethodException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - } - } - } 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 842c5f0713..2c01c33429 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 @@ -4,20 +4,17 @@ import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI import android.content.Context; import android.os.Process; -import android.util.Log; import com.bytedance.boost_multidex.BoostMultiDex; import com.elegant.utils.UiThreadHandler; -import com.kwai.koom.base.DefaultInitTask; import com.mogo.cloud.socket.SocketBuildConfig; import com.mogo.commons.AbsMogoApplication; -import com.mogo.eagle.core.data.app.AppConfigInfo; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.voice.AIAssist; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.constants.MoGoConfig; import com.mogo.eagle.core.data.constants.MogoServicePaths; import com.mogo.eagle.core.function.api.chat.biz.ChatConsts; -import com.mogo.eagle.core.function.autopilot.adapter.MoGoHandAdasMsgManager; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; import com.mogo.eagle.core.function.notice.PushUIConstants; @@ -31,7 +28,6 @@ import com.mogo.map.MapApiPath; import com.mogo.module.common.MogoModule; import com.mogo.module.common.MogoModulePaths; import com.mogo.module.service.ServiceConst; -import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.obu.ami.AmiClientManager; import com.zhjt.mogo_core_function_devatools.monitor.db.CpuInfo; import com.zhjt.mogo_core_function_devatools.monitor.db.MemInfo; @@ -61,9 +57,11 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { initCrashConfig(); initLogConfig(); initTipToast(); + AIAssist.getInstance(this); initModules(); - - initKoom(); + if (DebugConfig.isDebug()) { + initKoom(); + } //查询是否有版本的更新 queryAppUpgrade(); checkMonitorDb(); diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/debug_icon_sop.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/debug_icon_sop.png new file mode 100644 index 0000000000..85809efdf3 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/debug_icon_sop.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_add.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_add.png new file mode 100644 index 0000000000..429d1196be Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_add.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_reduce.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_reduce.png new file mode 100644 index 0000000000..aa10f4b5de Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_reduce.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_speed_add.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_speed_add.png new file mode 100644 index 0000000000..bbd0601d27 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_speed_add.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_speed_reduce.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_speed_reduce.png new file mode 100644 index 0000000000..905094d461 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_speed_reduce.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/battery_charge_dark.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/battery_charge_dark.png new file mode 100644 index 0000000000..02cea388b5 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/battery_charge_dark.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/battery_charge_light.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/battery_charge_light.png new file mode 100644 index 0000000000..92df72187c Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/battery_charge_light.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/blue_tooth.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/blue_tooth.png new file mode 100644 index 0000000000..97eaf32b50 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/blue_tooth.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/demo_mode.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/demo_mode.png new file mode 100644 index 0000000000..380b81e942 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/demo_mode.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/icon_take_over_request.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/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/icon_take_over_request.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_five.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_five.png new file mode 100644 index 0000000000..35355cfe86 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_five.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_four.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_four.png new file mode 100644 index 0000000000..5d468b24fc Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_four.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_one.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_one.png new file mode 100644 index 0000000000..df81af8117 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_one.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_three.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_three.png new file mode 100644 index 0000000000..ab0c000aab Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_three.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_two.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_two.png new file mode 100644 index 0000000000..351b04b150 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_dark_state_two.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_close.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_close.png new file mode 100644 index 0000000000..7090814f91 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_close.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_five.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_five.png new file mode 100644 index 0000000000..8f48f53e24 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_five.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_four.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_four.png new file mode 100644 index 0000000000..56e484f3ca Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_four.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_one.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_one.png new file mode 100644 index 0000000000..1b06cb152d Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_one.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_three.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_three.png new file mode 100644 index 0000000000..1ee2dcd8fe Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_three.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_two.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_two.png new file mode 100644 index 0000000000..6f88fb8307 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/wifi_light_state_two.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 042c7ad3ce..45d79417e2 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 @@ -8,7 +8,7 @@ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml index fb2eaba745..a41f32557b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_auto_pilot_check.xml @@ -43,6 +43,7 @@ android:gravity="center_vertical" android:orientation="horizontal" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/tv_check_title" app:layout_constraintTop_toBottomOf="@+id/v_second_group"> @@ -144,6 +145,32 @@ + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/sopLayout" /> + app:layout_constraintTop_toBottomOf="@id/sopLayout" /> - + app:layout_constraintTop_toBottomOf="@id/tvSpeedTitle" + /> - + - + - + x` + app:layout_constraintTop_toBottomOf="@id/ivSpeedReduce" /> + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml new file mode 100644 index 0000000000..e5e6fcb799 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_blue_tooth.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_demo_mode.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_demo_mode.xml new file mode 100644 index 0000000000..81ffb29e9e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_demo_mode.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml new file mode 100644 index 0000000000..f574e97e7d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +