diff --git a/OCH/README.md b/OCH/README.md index 56d1764db2..1c22eb2ceb 100644 --- a/OCH/README.md +++ b/OCH/README.md @@ -1,7 +1,6 @@ # 网约车(Online Car Hailing) - -## 小巴 - -## 出租车 - -## 无实现 \ No newline at end of file +1. mogo-och-bus:Bus司机端(Bus) +2. mogo-och-bus-passenger:Bus乘客端(BusPassenger) +3. mogo-och-taxi:Taxi司机端(Taxi) +4. mogo-och-taxi-passenger:Taxi乘客端(TaxiPassenger) +5. mogo-och-noop:空实现,用于独立鹰眼打包 \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-main/.gitignore b/OCH/mogo-och-bus-passenger/.gitignore similarity index 100% rename from core/function-impl/mogo-core-function-main/.gitignore rename to OCH/mogo-och-bus-passenger/.gitignore diff --git a/OCH/mogo-och-bus-passenger/build.gradle b/OCH/mogo-och-bus-passenger/build.gradle new file mode 100644 index 0000000000..fc55956e11 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/build.gradle @@ -0,0 +1,75 @@ +apply plugin: 'com.android.library' +apply plugin: 'com.alibaba.arouter' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion rootProject.ext.android.compileSdkVersion + // buildToolsVersion rootProject.ext.android.buildToolsVersion + defaultConfig { + minSdkVersion rootProject.ext.android.minSdkVersion + targetSdkVersion rootProject.ext.android.targetSdkVersion + versionCode Integer.valueOf(VERSION_CODE) + versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION") + + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME: project.getName()] + } + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + debug { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation rootProject.ext.dependencies.kotlinstdlibjdk7 + implementation rootProject.ext.dependencies.androidxappcompat + implementation rootProject.ext.dependencies.arouter + implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'com.google.android.material:material:1.2.1' + annotationProcessor rootProject.ext.dependencies.aroutercompiler + implementation rootProject.ext.dependencies.rxandroid + implementation rootProject.ext.dependencies.androidxconstraintlayout + implementation rootProject.ext.dependencies.amapnavi3dmap + if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { + implementation rootProject.ext.dependencies.mogoutils + implementation rootProject.ext.dependencies.mogocommons + implementation rootProject.ext.dependencies.modulecommon + implementation rootProject.ext.dependencies.mogo_core_data + implementation rootProject.ext.dependencies.mogo_core_function_call + implementation rootProject.ext.dependencies.mogo_core_function_v2x + implementation rootProject.ext.dependencies.mogo_core_function_hmi + }else { + implementation project(":core:mogo-core-utils") + implementation project(":foudations:mogo-commons") + implementation project(':modules:mogo-module-common') + implementation project(':core:mogo-core-data') + implementation project(':core:mogo-core-function-call') + implementation project(':core:function-impl:mogo-core-function-v2x') + implementation project(':core:function-impl:mogo-core-function-hmi') + } +} + +apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString() \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-main/consumer-rules.pro b/OCH/mogo-och-bus-passenger/consumer-rules.pro similarity index 100% rename from core/function-impl/mogo-core-function-main/consumer-rules.pro rename to OCH/mogo-och-bus-passenger/consumer-rules.pro diff --git a/OCH/mogo-och-bus-passenger/gradle.properties b/OCH/mogo-och-bus-passenger/gradle.properties new file mode 100644 index 0000000000..2ed1ed2f42 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/gradle.properties @@ -0,0 +1,3 @@ +GROUP=com.mogo.och +POM_ARTIFACT_ID=och-bus-passenger +VERSION_CODE=1 diff --git a/core/function-impl/mogo-core-function-main/proguard-rules.pro b/OCH/mogo-och-bus-passenger/proguard-rules.pro similarity index 100% rename from core/function-impl/mogo-core-function-main/proguard-rules.pro rename to OCH/mogo-och-bus-passenger/proguard-rules.pro diff --git a/OCH/mogo-och-bus-passenger/src/androidTest/java/com/mogo/och/bus/passenger/ExampleInstrumentedTest.java b/OCH/mogo-och-bus-passenger/src/androidTest/java/com/mogo/och/bus/passenger/ExampleInstrumentedTest.java new file mode 100644 index 0000000000..2685ade0a4 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/androidTest/java/com/mogo/och/bus/passenger/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.mogo.och.bus.passenger; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.mogo.och.bus.passenger.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/AndroidManifest.xml b/OCH/mogo-och-bus-passenger/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..e0687231c1 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data b/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data new file mode 100644 index 0000000000..2be43925c7 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/assets/map_style.data differ diff --git a/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data b/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data new file mode 100644 index 0000000000..6a172a62e5 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/assets/map_style_extra.data differ diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/IMogoOCH.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/IMogoOCH.java new file mode 100644 index 0000000000..fb146e17c3 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/IMogoOCH.java @@ -0,0 +1,22 @@ +package com.mogo.och.bus.passenger; + +import androidx.annotation.IdRes; +import androidx.fragment.app.FragmentActivity; + +import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider; + +/** + * 网约车抽象接口 + * + * Created on 2022/3/29 + */ +interface IMogoOCH extends IMoGoFunctionProvider { + + /** + * 初始化网约车容器 + * + * @param activity + * @param containerId 容器ID + */ + void createCoverage(FragmentActivity activity, @IdRes int containerId); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.java new file mode 100644 index 0000000000..30cbec38f9 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/MogoOCHBusPassenger.java @@ -0,0 +1,109 @@ +package com.mogo.och.bus.passenger; + +import android.content.Context; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.elegant.utils.UiThreadHandler; +import com.mogo.eagle.core.function.call.setting.CallerMoGoUiSettingManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.map.MogoMapUIController; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.bus.passenger.constant.BusPassengerConst; +import com.mogo.och.bus.passenger.ui.BusPassengerRouteFragment; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +/** + * 网约车-Bus-乘客端 + * + * Created on 2022/3/29 + */ +@Route(path = BusPassengerConst.PATH) +public class MogoOCHBusPassenger implements IMogoOCH, IMogoStatusChangedListener { + private static final String TAG = MogoOCHBusPassenger.class.getSimpleName(); + + private FragmentActivity mActivity; + private int mContainerId; + private BusPassengerRouteFragment mPassengerFragment; + + @Override + public void createCoverage(FragmentActivity activity, int containerId) { + + } + + @Nullable + @Override + public Fragment createCoverage(@Nullable FragmentActivity activity, @Nullable Integer containerId) { + this.mActivity = activity; + this.mContainerId = containerId; + +// UiThreadHandler.post(() -> stepIntoVrMode()); + return null; + } + + @NotNull + @Override + public String getFunctionName() { + return null; + } + + @Override + public void onDestroy() { + // 若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠 + if (mActivity == null) return; + mActivity.finish(); + } + + @Override + public void init(Context context) { + MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus" + , StatusDescriptor.VR_MODE, this); + } + + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (descriptor == StatusDescriptor.VR_MODE) { + if (isTrue){ + showFragment(); + }else { + hideFragment(); + } + } + } + + /** + * 进入鹰眼模式,设置手势缩放地图失效 + */ + private void stepIntoVrMode() { + CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "进入vr模式" ); + MogoMapUIController.getInstance() + .stepInVrMode( true ); // 白天模式 + + CallerMoGoUiSettingManager.INSTANCE.stepInDayMode();//白天模式 状态栏字体颜色变黑 + } + + private void showFragment() { + if (mPassengerFragment == null) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "准备add fragment======"); + mPassengerFragment = new BusPassengerRouteFragment(); + mActivity.getSupportFragmentManager().beginTransaction().add(mContainerId, mPassengerFragment).commitAllowingStateLoss(); + return; + } + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "准备show fragment"); + mActivity.getSupportFragmentManager().beginTransaction().show(mPassengerFragment).commitAllowingStateLoss(); + } + + private void hideFragment(){ + if (mPassengerFragment != null){ + mActivity.getSupportFragmentManager().beginTransaction().hide(mPassengerFragment).commitAllowingStateLoss(); + } + } +} 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 new file mode 100644 index 0000000000..8768a0623e --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/adapter/BusPassengerLineStationsAdapter.java @@ -0,0 +1,152 @@ +package com.mogo.och.bus.passenger.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.mogo.och.bus.passenger.R; +import com.mogo.och.bus.passenger.bean.BusPassengerStation; + +import java.util.List; + +import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_STOPPED; + +/** + * @author: wangmingjun + * @date: 2022/4/6 + */ +public class BusPassengerLineStationsAdapter extends RecyclerView.Adapter { + + private Context mContext; + private List mStations; + private static final int LINE_START_STATION_ITEM = 0; + private static final int LINE_END_STATION_ITEM = 1; + private static final int LINE_MIDDLE_STATION_ITEM = 2; + + public BusPassengerLineStationsAdapter(Context context, List stations){ + this.mContext = context; + this.mStations = stations; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + if (viewType == LINE_START_STATION_ITEM){ + View view = LayoutInflater.from(mContext).inflate(R.layout.bus_p_stations_start_item,parent,false); + StartStationViewHolder viewHolder = new StartStationViewHolder(view); + return viewHolder; + }else if (viewType == LINE_END_STATION_ITEM) { + View view = LayoutInflater.from(mContext).inflate(R.layout.bus_p_stations_end_item,parent,false); + EndStationViewHolder viewHolder = new EndStationViewHolder(view); + return viewHolder; + }else { + View view = LayoutInflater.from(mContext).inflate(R.layout.bus_p_stations_middle_item,parent,false); + MiddleStationViewHolder viewHolder = new MiddleStationViewHolder(view); + return viewHolder; + } + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + BusPassengerStation station = mStations.get(position); + if (holder instanceof StartStationViewHolder){ + StartStationViewHolder viewHolder = (StartStationViewHolder)holder; + viewHolder.startStationName.setText(station.getName()); + if (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving()){//到站 + viewHolder.curStationBg.setVisibility(View.VISIBLE); + viewHolder.stationCircle.setVisibility(View.GONE); + viewHolder.startStationName.setTextColor(mContext.getResources().getColor(R.color.bus_p_current_station_txt_color)); + }else { + viewHolder.curStationBg.setVisibility(View.GONE); + viewHolder.stationCircle.setVisibility(View.VISIBLE); + viewHolder.startStationName.setTextColor(mContext.getResources().getColor(R.color.bus_p_station_txt_color)); + } + }else if (holder instanceof EndStationViewHolder){ + EndStationViewHolder viewHolder = (EndStationViewHolder)holder; + viewHolder.endStationName.setText(station.getName()); + BusPassengerStation preStation = mStations.get(position -1); + if ((preStation.getDrivingStatus() == STATION_STATUS_STOPPED && preStation.isLeaving()) + || (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving())){//到站 + viewHolder.curStationBg.setVisibility(View.VISIBLE); + viewHolder.stationCircle.setVisibility(View.GONE); + viewHolder.endStationName.setTextColor(mContext.getResources().getColor(R.color.bus_p_current_station_txt_color)); + }else { + viewHolder.curStationBg.setVisibility(View.GONE); + viewHolder.stationCircle.setVisibility(View.VISIBLE); + viewHolder.endStationName.setTextColor(mContext.getResources().getColor(R.color.bus_p_station_txt_color)); + } + }else { + MiddleStationViewHolder viewHolder = (MiddleStationViewHolder)holder; + viewHolder.middleStationName.setText(station.getName()); + BusPassengerStation preStation = mStations.get(position -1); + if ((preStation.getDrivingStatus() == STATION_STATUS_STOPPED && preStation.isLeaving()) + || (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving())) {//到站 + viewHolder.curStationBg.setVisibility(View.VISIBLE); + viewHolder.middleStationName.setTextColor(mContext.getResources().getColor(R.color.bus_p_current_station_txt_color)); + }else { + viewHolder.curStationBg.setVisibility(View.GONE); + viewHolder.middleStationName.setTextColor(mContext.getResources().getColor(R.color.bus_p_station_txt_color)); + } + } + } + + @Override + public int getItemCount() { + return mStations.size(); + } + + @Override + public int getItemViewType(int position) { + //第一个要显示时间 + if (position == 0){ + return LINE_START_STATION_ITEM; + }else if (position == mStations.size() -1){ + return LINE_END_STATION_ITEM; + }else { + return LINE_MIDDLE_STATION_ITEM; + } + } + +} + +class StartStationViewHolder extends RecyclerView.ViewHolder{ + public TextView startStationName; + public ImageView stationCircle; + public ImageView curStationBg; + public StartStationViewHolder(@NonNull View itemView) { + super(itemView); + startStationName = itemView.findViewById(R.id.bus_p_start_station); + stationCircle = itemView.findViewById(R.id.bus_p_start_circle); + curStationBg = itemView.findViewById(R.id.bus_p_cur_start_station_tag); + } +} + +class EndStationViewHolder extends RecyclerView.ViewHolder{ + + public TextView endStationName; + public ImageView stationCircle; + public ImageView curStationBg; + public EndStationViewHolder(@NonNull View itemView) { + super(itemView); + endStationName = itemView.findViewById(R.id.bus_p_end_station); + stationCircle = itemView.findViewById(R.id.bus_p_end_circle); + curStationBg = itemView.findViewById(R.id.bus_p_cur_end_station_tag); + } +} + +class MiddleStationViewHolder extends RecyclerView.ViewHolder{ + + public TextView middleStationName; + public ImageView curStationBg; + public MiddleStationViewHolder(@NonNull View itemView) { + super(itemView); + middleStationName = itemView.findViewById(R.id.bus_p_middle_station); + curStationBg = itemView.findViewById(R.id.bus_p_middle_tag); + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java new file mode 100644 index 0000000000..1d2068e4af --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerOperationStatusResponse.java @@ -0,0 +1,21 @@ +package com.mogo.och.bus.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +/** + * @author congtaowang + * @since 2021/3/22 + * + * 小巴车运营状态返回参数 + */ +public class BusPassengerOperationStatusResponse extends BaseData { + + public Result data; + + public static class Result { + private String sn; //司机屏sn + public String plateNumber; //车牌号 + public int serviceStatus;//0:已收车,1:已出车 + public int businessType;// 车辆类型: taxi/bus + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java new file mode 100644 index 0000000000..c4e4e428a7 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerQueryLineRequest.java @@ -0,0 +1,18 @@ +package com.mogo.och.bus.passenger.bean; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; + +public +/** + * @author congtaowang + * @since 2021/3/22 + * + * 根据车机行驶线路站点信息 + */ +class BusPassengerQueryLineRequest { + + private String sn; + public BusPassengerQueryLineRequest(String sn) { + this.sn = sn; + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResponse.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResponse.java new file mode 100644 index 0000000000..e8ba5d6ef2 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResponse.java @@ -0,0 +1,27 @@ +package com.mogo.och.bus.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +/** + * 网约车小巴路线接口请求响应结果 返回的是对应司机屏的线路信息 + * + * @author tongchenfei + */ +public class BusPassengerRoutesResponse extends BaseData { + private BusPassengerRoutesResult data; + + public BusPassengerRoutesResult getResult() { + return data; + } + + public void setResult(BusPassengerRoutesResult data) { + this.data = data; + } + + @Override + public String toString() { + return "OchBusRoutesResponse{" + + "data=" + data + + '}'; + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResult.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResult.java new file mode 100644 index 0000000000..dbfd30bebd --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerRoutesResult.java @@ -0,0 +1,59 @@ +package com.mogo.och.bus.passenger.bean; + +import java.util.List; + +/** + * 网约车小巴路线接口返回接口数据封装 + * + * @author tongchenfei + */ +public class BusPassengerRoutesResult { + private List sites; + private int lineId; + private String name; //线路名称 + private int lineType; //线路类型,0:环形 + private String description; + private int status; + private String runningDur; //运营时间 + + public List getSites() { + return sites; + } + + public int getLineId() { + return lineId; + } + + public String getName() { + return name; + } + + public int getLineType() { + return lineType; + } + + public String getDescription() { + return description; + } + + public int getStatus() { + return status; + } + + public String getRunningDur() { + return runningDur; + } + + @Override + public String toString() { + return "BusPassengerRoutesResult{" + + "sites=" + sites + + ", lineId=" + lineId + + ", name='" + name + '\'' + + ", lineType=" + lineType + + ", description='" + description + '\'' + + ", status=" + status + + ", runningDur='" + runningDur + '\'' + + '}'; + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java new file mode 100644 index 0000000000..fa0aa2051c --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/bean/BusPassengerStation.java @@ -0,0 +1,137 @@ +package com.mogo.och.bus.passenger.bean; + +/** + * 单个网约车小巴车站信息 + * + * @author wangmingjun + */ +public class BusPassengerStation { + + private String name; + private String description; + private String cityCode; + private double lon; //高精坐标 + private double lat; //高精坐标 + private int businessType; //站点类型,9:taxi,10:bus + private int status; + private int siteId; + private int seq; + private int drivingStatus;//行驶信息,0初始值;1已经过;2当前站;3未到站 + private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 + private boolean leaving; + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public void setBusinessType(int businessType) { + this.businessType = businessType; + } + + public void setStatus(int status) { + this.status = status; + } + + public void setSiteId(int siteId) { + this.siteId = siteId; + } + + public void setSeq(int seq) { + this.seq = seq; + } + + public void setDrivingStatus(int drivingStatus) { + this.drivingStatus = drivingStatus; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getCityCode() { + return cityCode; + } + + + public int getBusinessType() { + return businessType; + } + + public int getStatus() { + return status; + } + + public int getSiteId() { + return siteId; + } + + public int getSeq() { + return seq; + } + + public int getDrivingStatus() { + return drivingStatus; + } + + public double getLon() { + return lon; + } + + public double getLat() { + return lat; + } + + public void setIfStop(int ifStop) { + this.ifStop = ifStop; + } + + public int getIfStop() { + return ifStop; + } + + public void setLeaving(boolean leaving) { + this.leaving = leaving; + } + + public boolean isLeaving() { + return leaving; + } + + @Override + public String toString() { + return "OchBusStation{" + + "name='" + name + '\'' + + ", description='" + description + '\'' + + ", cityCode='" + cityCode + '\'' + + ", lon=" + lon + + ", lat=" + lat + + ", businessType=" + businessType + + ", status=" + status + + ", siteId=" + siteId + + ", seq=" + seq + + ", drivingStatus=" + drivingStatus + + ", ifStop=" + ifStop + + ", leaving=" + leaving + + '}'; + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassegerDriverStatusCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassegerDriverStatusCallback.java new file mode 100644 index 0000000000..06885b74ab --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassegerDriverStatusCallback.java @@ -0,0 +1,10 @@ +package com.mogo.och.bus.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2021/10/22 + */ +public interface IBusPassegerDriverStatusCallback { + void changeOperationStatus(boolean changeStatus); + void updatePlateNumber(String plateNumber); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java new file mode 100644 index 0000000000..4dbf53010c --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerADASStatusCallback.java @@ -0,0 +1,20 @@ +package com.mogo.och.bus.passenger.callback; + +/** + * Created on 2022/3/31 + * + * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) + */ +public interface IBusPassengerADASStatusCallback { + // 自动驾驶触发的已到达目的地:暂未用到 + void onAutopilotArriveEnd(); + + // 自动驾驶可用状态 + void onAutopilotEnable(); + + // 自动驾驶不可用状态 + void onAutopilotDisable(); + + // 自动驾驶运行中 + void onAutopilotRunning(); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java new file mode 100644 index 0000000000..f00d09c33c --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerAutopilotPlanningCallback.java @@ -0,0 +1,16 @@ +package com.mogo.och.bus.passenger.callback; + +import com.amap.api.maps.model.LatLng; +import com.mogo.eagle.core.data.map.MogoLatLng; + +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * Created on 2022/3/31 + */ +public interface IBusPassengerAutopilotPlanningCallback { + void routeResult(List models); + void routePlanningToNextStationChanged(long meters, long timeInSecond); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerControllerStatusCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerControllerStatusCallback.java new file mode 100644 index 0000000000..3263ade5b3 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerControllerStatusCallback.java @@ -0,0 +1,15 @@ +package com.mogo.och.bus.passenger.callback; + +import android.location.Location; + +/** + * Created on 2022/3/31 + * + * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) + */ +public interface IBusPassengerControllerStatusCallback { + // 是否vr map模式 + void onVRModeChanged(boolean isVRMode); + // 自车定位 + void onCarLocationChanged(Location location); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerMapViewCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerMapViewCallback.java new file mode 100644 index 0000000000..25f7d3bbec --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerMapViewCallback.java @@ -0,0 +1,9 @@ +package com.mogo.och.bus.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2022/3/10 + */ +public interface IBusPassengerMapViewCallback { + void onCameraChange(float bearing); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java new file mode 100644 index 0000000000..c7df47ec9f --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/callback/IBusPassengerRouteLineInfoCallback.java @@ -0,0 +1,14 @@ +package com.mogo.och.bus.passenger.callback; + +import com.mogo.och.bus.passenger.bean.BusPassengerStation; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2022/4/6 + */ +public interface IBusPassengerRouteLineInfoCallback { + void updateLineInfo(String lineName, String lineDurTime); + void updateStationsInfo(List stations,int currentStationIndex,boolean isArrived); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt new file mode 100644 index 0000000000..d947f441b2 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt @@ -0,0 +1,44 @@ +package com.mogo.och.bus.passenger.constant + +import com.mogo.commons.debug.DebugConfig + +/** + * Created on 2021/12/6 + */ +class BusPassengerConst { + companion object { + + private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com" + private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com" + private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com" + + @JvmStatic + fun getBaseUrl(): String { + return when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_DEMO -> BASE_URL_OCH_DEV + DebugConfig.NET_MODE_QA -> BASE_URL_OCH_QA + DebugConfig.NET_MODE_RELEASE -> BASE_URL_OCH_RELEASE + else -> BASE_URL_OCH_RELEASE + } + } + + // OCH arouter 路由path + const val PATH = "/och/api" + + // 轮询line + const val LOOP_LINE_2S = 2 * 1000L + const val LOOP_DELAY = 100L + + // 无状态 + const val STATION_STATUS_IDLE = 0 + // 已过站(历史站) + const val STATION_STATUS_LEAVING = 1 + // 到站(当前站) + const val STATION_STATUS_STOPPED = 2 + // 未到站(未到站) + const val STATION_STATUS_ARRIVING = 3 + + //bus平均速度 + const val BUS_AVERAGE_SPEED = 25 + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java new file mode 100644 index 0000000000..8420c25610 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/model/BusPassengerModel.java @@ -0,0 +1,414 @@ +package com.mogo.och.bus.passenger.model; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.net.ConnectivityManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.amap.api.maps.model.LatLng; +import com.mogo.aicloud.services.socket.IMogoLifecycleListener; +import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager; +import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; +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.autopilot.CallerAutopilotPlanningListenerManager; +import com.mogo.eagle.core.network.utils.GsonUtil; +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.map.navi.IMogoCarLocationChangedListener2; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.bus.passenger.bean.BusPassengerOperationStatusResponse; +import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResponse; +import com.mogo.och.bus.passenger.bean.BusPassengerRoutesResult; +import com.mogo.och.bus.passenger.bean.BusPassengerStation; +import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerAutopilotPlanningCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerRouteLineInfoCallback; +import com.mogo.och.bus.passenger.constant.BusPassengerConst; +import com.mogo.och.bus.passenger.network.BusPassengerModelLoopManager; +import com.mogo.och.bus.passenger.network.BusPassengerServiceCallback; +import com.mogo.och.bus.passenger.network.BusPassengerServiceManager; +import com.mogo.och.bus.passenger.utils.BPCoordinateCalculateRouteUtil; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; +import static com.mogo.och.bus.passenger.constant.BusPassengerConst.STATION_STATUS_STOPPED; + +/** + * Created on 2022/3/31 + */ +public class BusPassengerModel { + private static final String TAG = BusPassengerModel.class.getSimpleName(); + + private List mRoutePoints = new ArrayList<>(); + + private static final class SingletonHolder { + private static final BusPassengerModel INSTANCE = new BusPassengerModel(); + } + + public static BusPassengerModel getInstance() { + return SingletonHolder.INSTANCE; + } + + private Context mContext; + private IBusPassengerADASStatusCallback mADASStatusCallback; //Model->Presenter:自动驾驶状态相关 + private IBusPassengerAutopilotPlanningCallback mAutopilotPlanningCallback; //Model->Presenter:自动驾驶线路规划 + private Map mControllerStatusCallbackMap = new ConcurrentHashMap<>(); + + private IBusPassegerDriverStatusCallback mDriverStatusCallback; //出车收车状态 + private IBusPassengerRouteLineInfoCallback mRouteLineInfoCallback; // bus路线信息更新 + + private double mLongitude, mLatitude; + + private BusPassengerModel() { + } + + public void init( Context context ) { + mContext = context.getApplicationContext(); + initListeners(); + // TODO: 2022/3/31 + queryDriverOperationStatus(); + } + + public void setDriverStatusCallback(IBusPassegerDriverStatusCallback callback){ + this.mDriverStatusCallback = callback; + } + + public void setRouteLineInfoCallback(IBusPassengerRouteLineInfoCallback callback){ + this.mRouteLineInfoCallback = callback; + } + + private void queryDriverOperationStatus() { + BusPassengerServiceManager.getInstance().queryDriverOperationStatus(mContext + , new BusPassengerServiceCallback() { + @Override + public void onSuccess(BusPassengerOperationStatusResponse data) { + if (data == null || data.data == null) return; + startOrStopOrderLoop(data.data.serviceStatus == 1); + if(mDriverStatusCallback != null){ + mDriverStatusCallback.changeOperationStatus(data.data.serviceStatus == 1); + mDriverStatusCallback.updatePlateNumber(data.data.plateNumber); + } + } + + @Override + public void onFail(int code, String msg) { + queryDriverOperationStatus(); + } + }); + } + + public void queryDriverSiteByCoordinate(){ + BusPassengerServiceManager.getInstance().queryDriverSiteByCoordinate(mContext + , new BusPassengerServiceCallback() { + @Override + public void onSuccess(BusPassengerRoutesResponse data) { + if ( data == null + || data.getResult() == null + || data.getResult().getSites() == null) { + return; + } + updatePassengerRouteInfo(data.getResult()); + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + private void updatePassengerRouteInfo(BusPassengerRoutesResult result) { + if (mRouteLineInfoCallback != null){ + mRouteLineInfoCallback.updateLineInfo(result.getName(),result.getRunningDur()); + if (result.getSites() != null){ + List stations = result.getSites(); + for (int i = 0; i< stations.size(); i++){ + BusPassengerStation station = stations.get(i); + if (station.getDrivingStatus() == STATION_STATUS_STOPPED && station.isLeaving() && i+1 < stations.size()){ + mRouteLineInfoCallback.updateStationsInfo(stations,i+1,false); + return; + }else if (station.getDrivingStatus() == STATION_STATUS_STOPPED && !station.isLeaving()){ + startOrStopCalculateRouteInfo(false); + mRouteLineInfoCallback.updateStationsInfo(stations,i,true); + return; + } + } + } + } + + } + + public void release() { + releaseListeners(); + startOrStopCalculateRouteInfo(false); + startOrStopOrderLoop(false); + } + + public void setMoGoAutopilotPlanningListener(IBusPassengerAutopilotPlanningCallback + moGoAutopilotPlanningCallback) { + this.mAutopilotPlanningCallback = moGoAutopilotPlanningCallback; + } + + public void setADASStatusCallback(IBusPassengerADASStatusCallback callback) { + this.mADASStatusCallback = callback; + } + + public void setControllerStatusCallback(String tag, IBusPassengerControllerStatusCallback callback) { + if (tag == null || "".equals(tag)) return; + + if (callback == null) { + mControllerStatusCallbackMap.remove(tag); + return; + } + + mControllerStatusCallbackMap.put(tag,callback); + + } + + private void initListeners() { + MogoAiCloudSocketManager.getInstance(mContext) + .registerLifecycleListener(10010, mSocketLifeCycleLisnter); + + // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); + MogoApisHandler.getInstance() + .getApis() + .getIntentManagerApi() + .registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener ); + MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener ); + // 达到起始站围栏监听 + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() + .registerCarLocationChangedListener( TAG, mCarLocationChangedListener2); + + //2021.11.1 自动驾驶路线规划接口 + CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG,moGoAutopilotPlanningListener); + } + + private void releaseListeners() { + MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); + + // 注销到达起始站围栏监听 + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() + .unregisterCarLocationChangedListener(TAG, mCarLocationChangedListener2); + + MogoAiCloudSocketManager.getInstance(mContext) + .unregisterLifecycleListener(10010); + + CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(mGoAutopilotStatusListener); + CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); + } + + //监听网络变化,避免启动机器时无网导致无法更新订单信息 + private final IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { + @Override + public void onIntentReceived( String intentStr, Intent intent ) { + CallerLogger.INSTANCE.d( M_BUS_P + TAG, "onIntentReceived = %s", intentStr ); + if ( ConnectivityManager.CONNECTIVITY_ACTION.equals( intentStr ) ) { + if ( NetworkUtils.isConnected( mContext ) ) { + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + queryDriverOperationStatus(); + } + } + } + } + }; + + private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { + // VR mode变更回调 + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (StatusDescriptor.VR_MODE == descriptor) { + if (mControllerStatusCallbackMap.size() > 0) { + for (IBusPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ + callback.onVRModeChanged(isTrue); + } + } + } + } + }; + + private final IMogoLifecycleListener mSocketLifeCycleLisnter = new IMogoLifecycleListener() { + @Override + public void onConnectFailure() { CallerLogger.INSTANCE.e(M_BUS_P + TAG,"socket onConnectFailure"); } + + @Override + public void onConnectSuccess() { CallerLogger.INSTANCE.e(M_BUS_P + TAG,"socket onConnectSuccess"); } + + @Override + public void onConnectLost() { CallerLogger.INSTANCE.e(M_BUS_P + TAG,"socket onConnectLost"); } + }; + + // 自车定位 + private final IMogoCarLocationChangedListener2 mCarLocationChangedListener2 = new IMogoCarLocationChangedListener2() { + + @Override + public void onCarLocationChanged2( Location location ) { + //位置变化时,通过围栏判断是否到达x点 + // TODO: 2022/3/31 + mLongitude = location.getLongitude(); + mLatitude = location.getLatitude(); + for (IBusPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ + callback.onCarLocationChanged(location); + } + } + }; + + private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ + + @Override + public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { + + } + + private boolean arriveAtEnd = false; //乘客app专用字段 + + @Override + public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { + if (autopilotStatusInfo == null) return; + int state = autopilotStatusInfo.getState(); + CallerLogger.INSTANCE.d( M_BUS_P + TAG, "state = %s", state ); + if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); + // TODO: 2022/3/31 + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + // TODO: 2022/3/31 + + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { + // TODO: 2022/3/31 + + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + } + } + + @Override + public void onAutopilotSNRequest() { + + } + + @Override + public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) { + if (FunctionBuildConfig.isDemoMode + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + arriveAtEnd = true; + } + + // TODO: 2022/3/31 + if (DebugConfig.isDebug()) { + // TipToast.shortTip("到达目的地"); + } + if (mADASStatusCallback != null){ + mADASStatusCallback.onAutopilotArriveEnd(); + } + } + + }; + + private final IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){ + + @Override + public void onAutopilotTrajectory(@NonNull List trajectoryInfos) { + } + + @Override + public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "onAutopilotRotting = " + + GsonUtil.jsonFromObject(routeList)); + List mRoutePoints = routeList.getWayPointsList(); + if (null != routeList && mRoutePoints.size() > 0){ + updateRoutePoints(mRoutePoints); + } + } + }; + + public void dynamicCalculateRouteInfo() { + List lastPoints = BPCoordinateCalculateRouteUtil + .getRemainPointListByCompare(mRoutePoints,mLongitude,mLatitude); + + float lastSumLength = 0; + if (lastPoints.size() == 1){ //只是最后一个点,计算当前位置和最后一个点的距离 + lastSumLength = CoordinateUtils.calculateLineDistance( + lastPoints.get(0).longitude, lastPoints.get(0).latitude, + mLongitude, mLatitude); + }else { + lastSumLength = BPCoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints); + } + double lastTime = lastSumLength / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 ; //秒 + + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.routePlanningToNextStationChanged((long)lastSumLength,(long) lastTime); + } + + } + + public void updateRoutePoints(List routePoints) { + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.routeResult( + BPCoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext + , routePoints)); + } + + //转换成高德坐标系 + mRoutePoints.clear(); + mRoutePoints.addAll(BPCoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,routePoints)); + //开启实时计算剩余距离,剩余时间,预计时间 + startOrStopCalculateRouteInfo(true); + } + + /** + * 开始轮询计算剩余里程和时间 + * @param isStart + */ + public void startOrStopCalculateRouteInfo(boolean isStart) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startOrStopOrderLoop() " + isStart); + if (isStart) { + BusPassengerModelLoopManager.getInstance().startCalculateRouteInfoLoop(); + } else { + mRoutePoints.clear(); + BusPassengerModelLoopManager.getInstance().stopCalculateRouteInfLoop(); + } + } + + private void startOrStopOrderLoop(boolean start) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startOrStopOrderLoop() " + start); + if (start) { + BusPassengerModelLoopManager.getInstance().startQueryDriverLineLoop(); + } else { + BusPassengerModelLoopManager.getInstance().stopQueryDriverLineLoop(); + } + } + +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java new file mode 100644 index 0000000000..200c25be0a --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerModelLoopManager.java @@ -0,0 +1,79 @@ +package com.mogo.och.bus.passenger.network; + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.bus.passenger.model.BusPassengerModel; + +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; +import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_DELAY; +import static com.mogo.och.bus.passenger.constant.BusPassengerConst.LOOP_LINE_2S; + +/** + * Created on 2021/11/22 + * + * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) + */ +public class BusPassengerModelLoopManager { + + private static final String TAG = BusPassengerModelLoopManager.class.getSimpleName(); + + private Disposable mCalculateRouteDisposable; //每隔2s计算一次剩余里程和时间 + + private static final class SingletonHolder { + private static final BusPassengerModelLoopManager INSTANCE = new BusPassengerModelLoopManager(); + } + + public static BusPassengerModelLoopManager getInstance() { + return SingletonHolder.INSTANCE; + } + + private Disposable mHeartbeatDisposable; //心跳轮询 + + public void startQueryDriverLineLoop() { + if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_BUS_P + TAG, "startQueryDriverLineLoop()"); + mHeartbeatDisposable = Observable.interval(LOOP_DELAY, + LOOP_LINE_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> BusPassengerModel.getInstance().queryDriverSiteByCoordinate()); + } + + public void stopQueryDriverLineLoop() { + if (mHeartbeatDisposable != null) { + CallerLogger.INSTANCE.i(M_BUS_P + TAG, "stopQueryDriverLineLoop()"); + mHeartbeatDisposable.dispose(); + mHeartbeatDisposable = null; + } + } + + public void startCalculateRouteInfoLoop() { + if (mCalculateRouteDisposable != null && !mCalculateRouteDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_BUS_P + TAG, "startCalculateRouteInfoLoop()"); + mCalculateRouteDisposable = Observable.interval(LOOP_DELAY, + LOOP_LINE_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> BusPassengerModel.getInstance().dynamicCalculateRouteInfo()); + } + + public void stopCalculateRouteInfLoop() { + if (mCalculateRouteDisposable != null) { + CallerLogger.INSTANCE.i(M_BUS_P + TAG, "stopCalculateRouteInfLoop()"); + mCalculateRouteDisposable.dispose(); + mCalculateRouteDisposable = null; + } + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceApi.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceApi.java new file mode 100644 index 0000000000..c9ddbd8b26 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceApi.java @@ -0,0 +1,38 @@ +package com.mogo.och.bus.passenger.network; + +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 io.reactivex.Observable; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Query; + +/** + * Created on 2022/3/31 + * + * Bus乘客端接口定义 + */ +interface BusPassengerServiceApi { + /** + * 查询bus司机端绑定路线 + * @return 接口返回数据 + */ + @Headers( {"Content-Type:application/json;charset=UTF-8"} ) + @POST( "/autopilot-car-hailing/line/v2/driver/bus/passenger/lineDataWithDriver/query" ) + Observable queryDriverSiteByCoordinate(@Header("appId") String appId, @Header("ticket") String ticket, @Body BusPassengerQueryLineRequest request); + + /** + * 查询司机端出车/收车状态 + * @param sn + * @return + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) + @GET("/autopilot-car-hailing/car/v2/driver/bus/passenger/takeOrderStatus/query") + Observable queryDriverOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + +} 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 new file mode 100644 index 0000000000..fb53106dcd --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceCallback.java @@ -0,0 +1,15 @@ +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 new file mode 100644 index 0000000000..b155cb084c --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/network/BusPassengerServiceManager.java @@ -0,0 +1,118 @@ +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/presenter/BaseBusPassengerPresenter.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java new file mode 100644 index 0000000000..3516709f17 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/presenter/BaseBusPassengerPresenter.java @@ -0,0 +1,147 @@ +package com.mogo.och.bus.passenger.presenter; + +import android.location.Location; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; + +import com.amap.api.maps.model.LatLng; +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.mvp.Presenter; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.passenger.bean.BusPassengerStation; +import com.mogo.och.bus.passenger.callback.IBusPassegerDriverStatusCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerAutopilotPlanningCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback; +import com.mogo.och.bus.passenger.callback.IBusPassengerRouteLineInfoCallback; +import com.mogo.och.bus.passenger.model.BusPassengerModel; +import com.mogo.och.bus.passenger.ui.BusPassengerRouteFragment; + +import java.util.List; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; + +/** + * Created on 2022/3/31 + */ +public class BaseBusPassengerPresenter extends Presenter implements + IBusPassengerADASStatusCallback, IBusPassengerControllerStatusCallback, IBusPassegerDriverStatusCallback, IBusPassengerRouteLineInfoCallback, IBusPassengerAutopilotPlanningCallback { + private static final String TAG = BaseBusPassengerPresenter.class.getSimpleName(); + + public BaseBusPassengerPresenter(BusPassengerRouteFragment view) { + super(view); + BusPassengerModel.getInstance().init(AbsMogoApplication.getApp()); + initListeners(); + } + + @Override + public void onCreate( @NonNull LifecycleOwner owner ) { + super.onCreate( owner ); + CallerLogger.INSTANCE.d( M_BUS_P + TAG, "Bus乘客端Presenter onCreate()" ); + } + + @Override + public void onDestroy( @NonNull LifecycleOwner owner ) { + super.onDestroy( owner ); + + releaseListeners(); + BusPassengerModel.getInstance().release(); + } + + private void initListeners() { + BusPassengerModel.getInstance().setADASStatusCallback(this); + BusPassengerModel.getInstance().setControllerStatusCallback(TAG, this); + BusPassengerModel.getInstance().setDriverStatusCallback(this); + BusPassengerModel.getInstance().setRouteLineInfoCallback(this); + BusPassengerModel.getInstance().setMoGoAutopilotPlanningListener(this); + } + + private void releaseListeners() { + BusPassengerModel.getInstance().setADASStatusCallback(null); + BusPassengerModel.getInstance().setControllerStatusCallback(TAG, null); + BusPassengerModel.getInstance().setDriverStatusCallback(null); + BusPassengerModel.getInstance().setRouteLineInfoCallback(null); + BusPassengerModel.getInstance().setMoGoAutopilotPlanningListener(null); + } + + private void runOnUIThread( Runnable executor ) { + if ( executor == null ) { + return; + } + if ( Looper.myLooper() != Looper.getMainLooper() ) { + UiThreadHandler.post( executor ); + } else { + executor.run(); + } + } + + + @Override + public void onAutopilotArriveEnd() { + + } + + @Override + public void onAutopilotEnable() { + runOnUIThread(() -> mView.onAutopilotStatusChanged( + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)); + } + + @Override + public void onAutopilotDisable() { + runOnUIThread(() -> mView.onAutopilotStatusChanged( + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)); + } + + @Override + public void onAutopilotRunning() { + runOnUIThread(() -> mView.onAutopilotStatusChanged( + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)); + } + + @Override + public void onVRModeChanged(boolean isVRMode) { + + } + + @Override + public void onCarLocationChanged(Location location) { + if (location != null){ + runOnUIThread(() -> mView.onCarLocationChanged(location)); + } + } + + @Override + public void changeOperationStatus(boolean changeStatus) { + runOnUIThread(() -> mView.changeOperationStatus(changeStatus)); + } + + @Override + public void updatePlateNumber(String plateNumber) { + runOnUIThread(() -> mView.updatePlateNum(plateNumber)); + } + + @Override + public void updateLineInfo(String lineName, String lineDurTime) { + runOnUIThread(() -> mView.updateLineInfo(lineName, lineDurTime)); + } + + @Override + public void updateStationsInfo(List stations,int currentStationIndex,boolean isArrived) { + runOnUIThread(() -> mView.updateStationsInfo(stations,currentStationIndex, isArrived)); + } + + @Override + public void routeResult(List models) { + runOnUIThread(() -> mView.routeResult(models)); + } + + @Override + public void routePlanningToNextStationChanged(long meters, long timeInSecond) { + runOnUIThread(() -> mView.updateRoutePlanningToNextStation(meters, timeInSecond)); + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusBorderShadowLayout.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusBorderShadowLayout.java new file mode 100644 index 0000000000..6bde93ce05 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusBorderShadowLayout.java @@ -0,0 +1,359 @@ +package com.mogo.och.bus.passenger.ui; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.BlurMaskFilter; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.widget.LinearLayout; + +import com.mogo.och.bus.passenger.R; +import com.mogo.och.bus.passenger.utils.DimenUtil; + +/** + * @author: wangmingjun + * @date: 2022/1/21 + * 边框阴影 + */ +public class BusBorderShadowLayout extends LinearLayout { + + + private static final String TAG = "ShadowLayout"; + + //默认阴影半径 + public static final float SHADOW_DEFAULT_RADIUS = DimenUtil.INSTANCE.dp2px(5); + + //阴影最大偏移量 + public static final float SHADOW_MAX_OFFSET = DimenUtil.INSTANCE.dp2px(20); + + //阴影最大模糊半径 + public static final float SHADOW_MAX_BLUR = DimenUtil.INSTANCE.dp2px(20); + + + + //默认模糊半径 + public static final float SHADOW_DEFAULT_BLUR_RADIUS = DimenUtil.INSTANCE.dp2px(5); + + + //阴影颜色 + private int shadowColor = Color.parseColor("#333333"); + + //阴影类型,0:默认为单边 1:单边 2:邻边 3:四边所有 + private int shadowType; + + //阴影半径 + private float shadowRadius = 0f; + + //模糊度半径 + private float blurRadius = SHADOW_DEFAULT_BLUR_RADIUS ; + + //水平位移 + private float xOffset = DimenUtil.INSTANCE.dp2px(10); + + + //竖直方向位移 + private float yOffset = DimenUtil.INSTANCE.dp2px(0); + + //背景色 + private int bgColor = Color.WHITE; + + //是否有点击效果 + private boolean hasEffect = false ; + + + int left =0 ,right =0,top = 0,bottom = 0 ; + + //代理方式 + private IShadow shadow = new BusBorderShadowLayout.ShadowConfig(this); + + private float mWidthMode; + private float mHeightMode; + private Paint mPaint = new Paint(); + private Paint locationPaint = new Paint(); + + public BusBorderShadowLayout(Context context) { + super(context,null); + } + + public BusBorderShadowLayout(Context context, AttributeSet attrs) { + this(context, attrs,0); + } + + public BusBorderShadowLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.setLayerType(LAYER_TYPE_SOFTWARE, null);//取消硬件加速 + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ShadowLayout); + shadowColor = typedArray.getColor(R.styleable.ShadowLayout_shadowColor, Color.BLUE); + blurRadius = typedArray.getDimension(R.styleable.ShadowLayout_blurRadius, SHADOW_DEFAULT_BLUR_RADIUS); + shadowRadius = typedArray.getDimension(R.styleable.ShadowLayout_shadowRadius,0); + hasEffect = typedArray.getBoolean(R.styleable.ShadowLayout_hasEffect, false); + xOffset = typedArray.getDimension(R.styleable.ShadowLayout_xOffset,DimenUtil.INSTANCE.dp2px(10)); + yOffset = typedArray.getDimension(R.styleable.ShadowLayout_yOffset,DimenUtil.INSTANCE.dp2px(10)); + bgColor = typedArray.getColor(R.styleable.ShadowLayout_bgColor,Color.WHITE); + typedArray.recycle(); + + if (shadowRadius<0){ + shadowRadius = -shadowRadius; + } + if (blurRadius < 0) { + blurRadius = -blurRadius; + } + + blurRadius = Math.min(SHADOW_MAX_BLUR,blurRadius); + + if (Math.abs(xOffset)> SHADOW_MAX_OFFSET){ + xOffset = xOffset/Math.abs(xOffset) * SHADOW_MAX_OFFSET; + } + + if (Math.abs(yOffset) > SHADOW_MAX_OFFSET){ + yOffset = yOffset/Math.abs(yOffset) * SHADOW_MAX_OFFSET; + } + + init(); + } + + private void init(){ + setBackgroundColor(Color.parseColor("#00ffffff")); + if (xOffset>0){ + //水平偏移量为正数,右侧有阴影,阴影长度为blurRadius+|xOffset| + right = (int)(blurRadius + Math.abs(xOffset)); + }else if (xOffset==0){ + //水平偏移为0,水平间距为blurRadius + left = (int)blurRadius; + right = (int)blurRadius; + }else { + //水平偏移为负数,左侧有阴影,阴影长度为blurRadius+|xOffset| + left = (int)(blurRadius + Math.abs(xOffset)); + } + if (yOffset>0){ + //竖直偏移量为正数,底部有阴影,阴影长度为blurRadius+|yOffset| + bottom = (int)(blurRadius + Math.abs(yOffset)); + }else if (yOffset==0){ + //竖直偏移量为0,竖直间距为blurRadius + top = (int)blurRadius; + bottom = (int)blurRadius; + }else { + //竖直偏移量为负数,顶部有阴影,阴影长度为blurRadius+|yOffset| + top = (int)(blurRadius + Math.abs(yOffset)); + } + setPadding(left,top,right,bottom); + } + + + + + + /** + * 获取阴影设置 + * @return 返回阴影设置配置 + */ + public IShadow getShadowConfig(){ + return shadow; + } + + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed,l,t,r,b); + } + + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + } + + + + @Override + protected void onDraw(Canvas canvas) { + drawBackground(canvas);//放在super前是后景,相反是前景,前景会覆盖子布局 + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + + + + //绘制背景色(在子view底部) + private void drawBackground(Canvas canvas){ + + mWidthMode = getMeasuredWidth(); + mHeightMode = getMeasuredHeight(); + float startX = 0; + float startY = 0; + float endX = 0; + float endY = 0; + + if (xOffset==0){ + startX = right; + endX = mWidthMode-blurRadius; + }else { + startX = right+blurRadius; + endX = mWidthMode-left-blurRadius; + } + + if (yOffset==0){ + startY = bottom; + endY = mHeightMode-blurRadius; + }else { + startY = bottom+blurRadius; + endY = mHeightMode-top-blurRadius; + } +// mPaint.setShadowLayer(blurRadius,0,0,shadowColor); + if (blurRadius>0){ + mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.NORMAL)); + } + mPaint.setColor(shadowColor); + mPaint.setAntiAlias(true); + + RectF shadowRect = new RectF(startX,startY,endX,endY); + + RectF locationRectF = new RectF(left,top,mWidthMode-right,mHeightMode-bottom); + if (shadowRadius==0){ + //不是圆角 + canvas.drawRect(shadowRect,mPaint); + }else { + //圆角,角度为shadowRadius + canvas.drawRoundRect(shadowRect,shadowRadius,shadowRadius,mPaint); + } + + locationPaint.setColor(bgColor); + locationPaint.setAntiAlias(true); + + if (shadowRadius==0){ + //不是圆角 + canvas.drawRect(locationRectF,locationPaint); + }else { + //圆角,角度为shadowRadius + canvas.drawRoundRect(locationRectF,shadowRadius,shadowRadius,locationPaint); + } + } + + + + /** + * 阴影配置 + */ + class ShadowConfig implements IShadow { + + //代理 + private BusBorderShadowLayout shadow; + + private ShadowConfig(BusBorderShadowLayout shadow) { + this.shadow = shadow; + } + + @Override + public IShadow setShadowRadius(float radius) { + return setShadowRadius(TypedValue.COMPLEX_UNIT_DIP,radius); + } + + @Override + public IShadow setShadowRadius(int unit, float radius) { + Context c = getContext(); + Resources r; + + if (c == null) { + r = Resources.getSystem(); + } else { + r = c.getResources(); + } + shadow.shadowRadius = Math.abs(TypedValue.applyDimension(unit,radius,r.getDisplayMetrics())); + return this; + } + + @Override + public IShadow setShadowColor(int color) { + shadow.shadowColor = color; + return this; + } + + @Override + public IShadow setShadowColorRes(int colorRes) { + shadow.shadowColor = shadow.getResources().getColor(colorRes); + return this; + } + + @Override + public IShadow setBlurRadius(float radius) { + return setBlurRadius(TypedValue.COMPLEX_UNIT_DIP,radius); + } + + @Override + public IShadow setBlurRadius(int unit, float radius) { + Context c = getContext(); + Resources r; + if (c == null) { + r = Resources.getSystem(); + } else { + r = c.getResources(); + } + shadow.blurRadius = Math.min(SHADOW_MAX_BLUR,Math.abs(TypedValue.applyDimension(unit,radius,r.getDisplayMetrics()))); + return this; + } + + @Override + public IShadow setXOffset(float offset) { + return setXOffset(TypedValue.COMPLEX_UNIT_DIP,offset); + } + + @Override + public IShadow setXOffset(int unit, float offset) { + Context c = getContext(); + Resources r; + if (c == null) { + r = Resources.getSystem(); + } else { + r = c.getResources(); + } + + float x = TypedValue.applyDimension(unit,offset,r.getDisplayMetrics()); + if (Math.abs(x)> SHADOW_MAX_OFFSET){ + x = x/Math.abs(x) * SHADOW_MAX_OFFSET; + } + shadow.xOffset = x; + return this; + } + + @Override + public IShadow setYOffset(float offset) { + return setYOffset(TypedValue.COMPLEX_UNIT_DIP,offset); + } + + @Override + public IShadow setYOffset(int unit, float offset) { + Context c = getContext(); + Resources r; + if (c == null) { + r = Resources.getSystem(); + } else { + r = c.getResources(); + } + + float y = TypedValue.applyDimension(unit,offset,r.getDisplayMetrics()); + if (Math.abs(y)> SHADOW_MAX_OFFSET){ + y = y/Math.abs(y) * SHADOW_MAX_OFFSET; + } + shadow.yOffset = y; + return this; + } + + @Override + public void commit() { + shadow.init(); + shadow.requestLayout(); + shadow.postInvalidate(); + } + } + + +} 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 new file mode 100644 index 0000000000..2de8fb267d --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerBaseFragment.java @@ -0,0 +1,142 @@ +package com.mogo.och.bus.passenger.ui; + +import android.os.Bundle; +import android.text.Html; +import android.view.LayoutInflater; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import com.mogo.commons.mvp.IView; +import com.mogo.commons.mvp.MvpFragment; + +import com.mogo.commons.mvp.Presenter; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.call.map.CallerSmpManager; +import com.mogo.och.bus.passenger.R; +import com.mogo.och.bus.passenger.utils.BPDateTimeUtil; + +/** + * Created on 2022/3/31 + *

+ * Bus乘客端基础Fragment + */ +public abstract class BusPassengerBaseFragment> extends MvpFragment { + private static final String TAG = BusPassengerBaseFragment.class.getSimpleName(); + + private TextView mCurrentArriveStation; + private TextView mCurrentArriveStationTitle; + private TextView mCurrentArriveTip; + private ImageView mAutopilotIv; + private FrameLayout flContainer; + + + /** + * 改变自动驾驶状态 + * + * @param status 2 - running 1 - enable 2 - disable + */ + private int mPrevAPStatus = -1; + + @Override + protected int getLayoutId() { + return R.layout.bus_p_base_fragment; + } + + @Override + public String getTagName() { + return TAG; + } + + + @Override + protected void initViews() { + //隐藏小地图 + CallerSmpManager.INSTANCE.hidePanel(); + + mCurrentArriveStation = findViewById(R.id.bus_p_cur_station_name); + mCurrentArriveStationTitle = findViewById(R.id.bus_p_cur_station_title); + mCurrentArriveTip = findViewById(R.id.bus_p_cur_station_tip); + mAutopilotIv = findViewById(R.id.bus_p_autopilot_iv); + + showRouteFragment(); + } + + @Override + protected void initViews(Bundle savedInstanceState) { + super.initViews(savedInstanceState); + } + + /** + * 获取站点面板view,在{@link #initViews()}时候添加到container中 + * + * @return 站点面板view + */ + public abstract int getStationPanelViewId(); + + /** + * 显示线路信息 + */ + public void showRouteFragment() { + flContainer = findViewById(R.id.bus_p_route_panel); + LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flContainer); + } + + public void updateArrivedStation(String station,int currentIndex,boolean isArrived){ + if (null == station){ + mCurrentArriveStation.setText("----"); + }else { + mCurrentArriveStation.setText(station); + if (currentIndex == 0){ + mCurrentArriveStationTitle.setText(getResources().getString(R.string.bus_p_cur_station_title_init)); + mCurrentArriveTip.setText(getResources().getString(R.string.bus_p_cur_station_arrived_tip_init)); + return; + } + if (isArrived){ + mCurrentArriveStationTitle.setText(getResources().getString(R.string.bus_p_cur_station_title)); + mCurrentArriveTip.setText(getResources().getString(R.string.bus_p_cur_station_arrived_tip)); + }else { + mCurrentArriveStationTitle.setText(getResources().getString(R.string.bus_p_cur_next_station_title)); + } + } + + } + + public void updateRoutePlanningToNextStation(long meters, long timeInSecond){ + String dis = "0"; + String disUnit = "公里"; + if (meters > 0){ + if (meters / 1000 < 1){ + disUnit = "米"; + dis = String.valueOf(Math.round(meters)); + }else { + disUnit = "公里"; + dis = BPDateTimeUtil.formatLong((double)meters / 1000); + } + } + String strHtml2 = "距离 " + "" + dis + "" + " "+disUnit+"" + + "   剩余 " + "" + (int)Math.ceil((double)timeInSecond/ 60f) + "" + " 分钟"; + mCurrentArriveTip.setText(Html.fromHtml(strHtml2)); + } + + public void onAutopilotStatusChanged(int status) { + getActivity().runOnUiThread(() -> { + // 3. 其他过程直接更新 + if (mPrevAPStatus != status){ + AutopilotStatusChanged(status); + } + mPrevAPStatus = status; + }); + } + + public void AutopilotStatusChanged(int status) { + if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) { + mAutopilotIv.setImageResource(R.drawable.bus_p_auto_nor); + } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){ + mAutopilotIv.setImageResource(R.drawable.bus_p_un_auto_nor); + } else { + mAutopilotIv.setImageResource(R.drawable.bus_p_un_auto_nor); + } + + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java new file mode 100644 index 0000000000..117e3a3c85 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerMapDirectionView.java @@ -0,0 +1,352 @@ +package com.mogo.och.bus.passenger.ui; + +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.RelativeLayout; + +import androidx.annotation.Nullable; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.CameraUpdate; +import com.amap.api.maps.CameraUpdateFactory; +import com.amap.api.maps.TextureMapView; +import com.amap.api.maps.UiSettings; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CameraPosition; +import com.amap.api.maps.model.CustomMapStyleOptions; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.Polyline; +import com.amap.api.maps.model.PolylineOptions; +import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener; +import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.bus.passenger.R; +import com.mogo.och.bus.passenger.callback.IBusPassengerMapViewCallback; +import com.mogo.och.bus.passenger.utils.BusPassengerMapAssetStyleUtil; + +import java.util.ArrayList; +import java.util.List; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; + +/** + * 乘客屏小地图 + */ +public class BusPassengerMapDirectionView + extends RelativeLayout + implements IMoGoMapLocationListener, IBusPassengerMapDirectionView, AMap.OnCameraChangeListener { + + //小地图名称 + public static final String TAG = "TPMapDirectionView"; + + private TextureMapView mAMapNaviView; + private AMap mAMap; + private Marker mCarMarker; + private Marker mStartMarker; + private Marker mEndMarker; + + private int mCurrentIndex = -1; + + private int zoomLevel = 13; + private List mCoordinatesLatLng = new ArrayList<>(); + private List mLinePointsLatLng = new ArrayList<>(); + private Polyline mPolyline; + private CameraUpdate mCameraUpdate; + private Context mContext; + + private List colorList = new ArrayList<>(); + private List mLineMarkers = new ArrayList<>(); + + private IBusPassengerMapViewCallback mIBusPassengerMapViewCallback; + + public BusPassengerMapDirectionView(Context context) { + this(context, null); + } + + public BusPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public BusPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + try { + initView(context); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void setTaxiPassengerMapViewCallback(IBusPassengerMapViewCallback iBusPassengerMapViewCallback) { + this.mIBusPassengerMapViewCallback = iBusPassengerMapViewCallback; + } + + private void initView(Context context) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "initView"); + + mContext = context; + + View smpView = LayoutInflater.from(context).inflate(R.layout.bus_p_map_view, this); + + mAMapNaviView = (TextureMapView) smpView.findViewById(R.id.bus_p_line_amap_view); + + initAMapView(); + + // 注册定位监听 + CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + // 注册定位监听 + CallerMapLocationListenerManager.INSTANCE.removeListener(TAG); + } + + private void initAMapView() { +// mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); + mAMap = mAMapNaviView.getMap(); + // 设置导航地图模式,aMap是地图控制器对象。 + mAMap.setMapType(AMap.MAP_TYPE_NIGHT); + + // 关闭显示实时路况图层,aMap是地图控制器对象。 + mAMap.setTrafficEnabled(false); + + // 设置 锚点 图标 + mCarMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_car)) + .anchor(0.5f, 0.5f)); + mStartMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_view_dir_way_point))); + mEndMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_view_dir_end_point))); + + // 加载自定义样式 + CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() + .setEnable(true) + .setStyleData(BusPassengerMapAssetStyleUtil.getAssetsStyle(getContext(), "map_style.data")) + .setStyleExtraData(BusPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(), "map_style_extra.data")); + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions); + + //设置希望展示的地图缩放级别 +// mAMap.moveCamera(mCameraUpdate); + + // 设置地图的样式 + UiSettings uiSettings = mAMap.getUiSettings(); + uiSettings.setZoomControlsEnabled(false);// 地图缩放级别的交换按钮 + uiSettings.setAllGesturesEnabled(false);// 所有手势 + uiSettings.setMyLocationButtonEnabled(false); // 显示默认的定位按钮 + uiSettings.setLogoBottomMargin(-150); //设置Logo下边界距离屏幕底部的边距,设置为负值即可 + + mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() { + @Override + public void onMapLoaded() { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "smp---onMapLoaded"); + // 加载自定义样式 + CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() + .setEnable(true) + .setStyleData(BusPassengerMapAssetStyleUtil.getAssetsStyle(getContext(), "map_style.data")) + .setStyleExtraData(BusPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(), "map_style_extra.data")); + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions); + mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); + } + }); + + //设置地图状态的监听接口 + mAMap.setOnCameraChangeListener(this); + } + + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return true; + } + + + @Override + public void onLocationChanged(@Nullable MogoLocation location, int from) { + if (location == null) { + return; + } + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "onCarLocationChanged2 :" + location.getLatitude() + ":" + location.getLongitude()); + LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude()); + + //更新车辆位置 + if (mCarMarker != null) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "location.getBearing() = " + location.getBearing()); + mCarMarker.setRotateAngle(360 - location.getBearing()); + mCarMarker.setPosition(currentLatLng); + mCarMarker.setToTop(); + } + + if (mLinePointsLatLng.size() > 1){ + //圈定地图显示范围 + //存放经纬度 + LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); + for (int i = 0; i < mLinePointsLatLng.size(); i++) { + boundsBuilder.include(mLinePointsLatLng.get(i)); + } + boundsBuilder.include(currentLatLng); + //第二个参数为四周留空宽度 + mAMap.animateCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(),100,100,100,100)); + + }else { + //设置希望展示的地图缩放级别 + CameraPosition cameraPosition = new CameraPosition.Builder() + .target(mCarMarker.getPosition()).tilt(0).bearing(location.getBearing()).zoom(zoomLevel).build(); + mAMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); + } + } + + @Override + public void drawablePolyline() { + clearPolyline(); + if (mAMap != null) { + + addRouteColorList(); + + if (mCoordinatesLatLng.size() > 2) { + // 设置开始结束Marker位置 + + LatLng startLatLng = mCoordinatesLatLng.get(0); + LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); + + mStartMarker.setPosition(startLatLng); + mEndMarker.setPosition(endLatLng); + mStartMarker.setVisible(true); + mEndMarker.setVisible(true); + + //设置线段纹理 + PolylineOptions polylineOptions = new PolylineOptions(); + polylineOptions.addAll(mCoordinatesLatLng); + polylineOptions.colorValues(colorList); + polylineOptions.useGradient(true); + polylineOptions.width(10); //线段宽度 + polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); + + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions); + + } + } + } + + /** + * 添加画线颜色值 + */ + private void addRouteColorList() { + for (int i = 0; i < mCoordinatesLatLng.size(); i++) { + colorList.add(Color.argb(255, 70, 147, 253));//路线颜色 + } + } + + @Override + public void clearPolyline() { + if (mPolyline != null) { + mPolyline.remove(); + } + if (mStartMarker != null) { + mStartMarker.setVisible(false); + } + if (mEndMarker != null) { + mEndMarker.setVisible(false); + } + } + + public void clearCoordinatesLatLng(){ + mCoordinatesLatLng.clear(); + } + + public void onCreateView(Bundle savedInstanceState) { + if (mAMapNaviView != null) { + mAMapNaviView.onCreate(savedInstanceState); + } + } + + public void onResume() { + if (mAMapNaviView != null) { + mAMapNaviView.onResume(); + } + } + + public void onPause() { + if (mAMapNaviView != null) { + mAMapNaviView.onPause(); + } + mCurrentIndex = -1; + } + + public void onDestroy() { + if (mAMapNaviView != null) { + mAMapNaviView.onDestroy(); + } + mCurrentIndex = -1; + } + + public void setCoordinatesLatLng(List latLngs) { + mCoordinatesLatLng.clear(); + mCoordinatesLatLng.addAll(latLngs); + } + + public void clearLineMarkers(){ + for (int i =0; i< mLineMarkers.size();i++){ + mLineMarkers.get(i).setVisible(false); + } + mLineMarkers.clear(); + } + + public void setLineMarkersAndDraw(List lineineLatLngs){ + clearLineMarkers(); + for (int i = 0; i < lineineLatLngs.size(); i++) { + Marker mWayPointMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_p_map_view_dir_way_point))); + mLineMarkers.add(mWayPointMarker); + } + if (mCoordinatesLatLng.size() == 0) { + for (int i = 0; i < mLineMarkers.size(); i++) { + mLineMarkers.get(i).setPosition(lineineLatLngs.get(i)); + mLineMarkers.get(i).setVisible(true); + } + mCurrentIndex = -1; + } + } + + public void setLinePointMarkerAndDraw(List routeLineLatLngs, int currentIndex) { + mLinePointsLatLng.clear(); + mLinePointsLatLng.addAll(routeLineLatLngs); + + if (mCoordinatesLatLng.size() > 0 && mCurrentIndex != currentIndex) { + if (mAMap != null && mLineMarkers.size() > 0) { + mCurrentIndex = currentIndex; + for (int i = 0; i < mLineMarkers.size(); i++) { + if (i != currentIndex && i + 1 != currentIndex) { + mLineMarkers.get(i).setPosition(mLinePointsLatLng.get(i)); + mLineMarkers.get(i).setVisible(true); + } else { + mLineMarkers.get(i).setVisible(false); + } + } + } + } + } + + @Override + public void onCameraChange(CameraPosition cameraPosition) { + mIBusPassengerMapViewCallback.onCameraChange(cameraPosition.bearing); + } + + @Override + public void onCameraChangeFinish(CameraPosition cameraPosition) { + + } +} 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 new file mode 100644 index 0000000000..8a7bf168df --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerRouteFragment.java @@ -0,0 +1,285 @@ +package com.mogo.och.bus.passenger.ui; + +import android.location.Location; +import android.os.Bundle; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.amap.api.maps.model.LatLng; +import com.mogo.eagle.core.data.app.AppConfigInfo; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.passenger.R; +import com.mogo.och.bus.passenger.adapter.BusPassengerLineStationsAdapter; +import com.mogo.och.bus.passenger.bean.BusPassengerStation; +import com.mogo.och.bus.passenger.callback.IBusPassengerMapViewCallback; +import com.mogo.och.bus.passenger.presenter.BaseBusPassengerPresenter; +import com.mogo.och.bus.passenger.utils.BPCoordinateCalculateRouteUtil; +import com.mogo.och.bus.passenger.utils.BPRouteDataTestUtils; + +import java.util.ArrayList; +import java.util.List; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; + +/** + * @author: wangmingjun + * @date: 2022/4/12 + */ +public class BusPassengerRouteFragment extends + BusPassengerBaseFragment implements IBusPassengerMapViewCallback { + + private final String TAG = "BusPassengerRouteFragment"; + + private BusPassengerTrafficLightView mTrafficLightView; + private List mStationsList = new ArrayList<>(); + private List mLinePointsList = new ArrayList<>(); + + private TextView mSpeedTv; + private ConstraintLayout mNoLineInfoView; + private TextView mCarPlateNum; + private TextView mLineName; + private TextView mOperationTime; + private ConstraintLayout mRouteInfoView; + private RecyclerView mStationsListRv; + private BusPassengerMapDirectionView mMapDirectionView; + private ImageView mMapArrowIcon; + private RotateAnimation rotateAnimation; + private float lastBearing = 0; + private BusPassengerLineStationsAdapter mAdapter; + + @Override + public int getStationPanelViewId() { + return R.layout.bus_p_route_fragment; + } + + @NonNull + @Override + protected BaseBusPassengerPresenter createPresenter() { + return new BaseBusPassengerPresenter(this); + } + + @Override + protected void initViews() { + super.initViews(); + mTrafficLightView = findViewById(R.id.bus_p_traffic_light_view); + CallerHmiManager.INSTANCE.setProxyTrafficLightView(mTrafficLightView); + + mSpeedTv = findViewById(R.id.bus_p_speed_tv); + + mNoLineInfoView =findViewById(R.id.bus_p_no_order_data_view); + + mCarPlateNum = findViewById(R.id.bus_p_driver_num_plate_tv); + mLineName = findViewById(R.id.bus_p_line_name_tv); + mOperationTime = findViewById(R.id.line_operation_time_tv); + + mRouteInfoView = findViewById(R.id.bus_p_line_cl); + mStationsListRv = findViewById(R.id.bus_p_line_stations_rl); + LinearLayoutManager manager = new LinearLayoutManager(getContext()); + mStationsListRv.setLayoutManager(manager); + mAdapter = new BusPassengerLineStationsAdapter(getContext(), mStationsList); + mStationsListRv.setAdapter(mAdapter); + + 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; + } + }); + } + + @Override + protected void initViews(Bundle savedInstanceState) { + super.initViews(savedInstanceState); + mMapDirectionView = findViewById(R.id.bus_p_line_map_view); + mMapDirectionView.onCreateView(savedInstanceState); + mMapDirectionView.setTaxiPassengerMapViewCallback(this); + } + + @Override + public void onResume() { + super.onResume(); + if (mMapDirectionView != null) { + mMapDirectionView.onResume(); + } + } + + @Override + public void onPause() { + super.onPause(); + if (mMapDirectionView != null) { + mMapDirectionView.onPause(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (mMapDirectionView != null) { + mMapDirectionView.onDestroy(); + } + } + + public void routeResult(List latLngList) { + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "routeResult:" + latLngList.size()); + if (latLngList.size() > 0) { + drawablePolyline(latLngList); + } else { + clearPolyline(); + } + } + + /** + * 绘制 + * + * @param coordinates + */ + private void drawablePolyline(List coordinates) { + if (mMapDirectionView != null) { + mMapDirectionView.setCoordinatesLatLng(coordinates); + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.drawablePolyline(); + } + }); + } + } + + public void clearPolyline() { + if (mMapDirectionView != null) { + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.clearPolyline(); + + } + }); + } + } + + public void setLineMarkers(List list) { + if (mMapDirectionView != null) { + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.setLineMarkersAndDraw(list); + + } + }); + } + } + + public void changeOperationStatus(boolean status) { + if (status) { + mNoLineInfoView.setVisibility(View.GONE); + mRouteInfoView.setVisibility(View.VISIBLE); + } else { + mNoLineInfoView.setVisibility(View.VISIBLE); + mRouteInfoView.setVisibility(View.GONE); + } + } + + public void updatePlateNum(String plateNum){ + if ("".equals(plateNum) || null == plateNum) { + mCarPlateNum.setText("-- --"); + }else { + mCarPlateNum.setText((plateNum)); + } + } + + public void updateLineInfo(String lineName, String lineDurTime) { + mLineName.setText(lineName); + mOperationTime.setText(lineDurTime); + } + + /** + * + * @param stations + * @param currentStationIndex + * @param isArrived 是否到站并离开,true 到达当前站 currentStationIndex 未离开, false 正在前往此站 currentStationIndex + */ + public void updateStationsInfo(List stations, int currentStationIndex,boolean isArrived) { + updateArrivedStation(stations.get(currentStationIndex).getName(),currentStationIndex,isArrived); + mStationsList.clear(); + mStationsList.addAll(stations); + mAdapter.notifyDataSetChanged(); + + if (currentStationIndex == 0 && isArrived){ //到达始发站且并未出发, 恢复站点marker 清楚路径 清空路径点 + clearPolyline(); + if (mMapDirectionView != null) mMapDirectionView.clearCoordinatesLatLng(); + } + + if (stations.size() > 0){ + updateWayPointList(stations,currentStationIndex); + } + } + + private void updateWayPointList(List stations,int currentStationIndex) { + mLinePointsList.clear(); + for (int i = 0; i< stations.size(); i++) {//站点集合 + LatLng latLng = BPCoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(getContext() + ,stations.get(i).getLon(),stations.get(i).getLat());// lat,lon + mLinePointsList.add(latLng); + } + setLineMarkers(mLinePointsList); + + if (mMapDirectionView != null) { + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.setLinePointMarkerAndDraw(mLinePointsList,currentStationIndex); + } + }); + } + } + + @Override + public void onCameraChange(float bearing) { + startIvCompass(bearing); + } + + /** + * 设置指南针旋转 + * + * @param bearing + */ + private void startIvCompass(float bearing) { + bearing = 360 - bearing; + CallerLogger.INSTANCE.d(M_BUS_P + TAG, "startIvCompass: " + bearing); + rotateAnimation = new RotateAnimation(lastBearing, bearing, Animation.RELATIVE_TO_SELF + , 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + rotateAnimation.setFillAfter(true); + + mMapArrowIcon.startAnimation(rotateAnimation); + lastBearing = bearing; + } + + public void onCarLocationChanged(Location location) { + updateSpeedView(location.getSpeed()); + } + + public void updateSpeedView(float speed){ + int speedKM = (int) (Math.abs(speed) * 3.6F); + mSpeedTv.setText(String.valueOf(speedKM)); + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerTrafficLightView.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerTrafficLightView.java new file mode 100644 index 0000000000..16cda08315 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/BusPassengerTrafficLightView.java @@ -0,0 +1,157 @@ +package com.mogo.och.bus.passenger.ui; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.passenger.R; + +import org.jetbrains.annotations.Nullable; + +/** + * bus乘客端:红绿灯view + * + * Created on 2022/3/14 + */ +public class BusPassengerTrafficLightView extends IViewTrafficLight { + + private ImageView mLightIconIV; + private TextView mLightTimeTV; + private int mCurrentLightId; + + public BusPassengerTrafficLightView(@Nullable Context context) { + this(context, null, 0); + } + + public BusPassengerTrafficLightView(@Nullable Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public BusPassengerTrafficLightView(@Nullable Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + LayoutInflater.from(context).inflate(R.layout.bus_p_traffic_light_view, this, true); + mLightIconIV = findViewById(R.id.bus_p_traffic_light_iv); + mLightTimeTV = findViewById(R.id.bus_p_traffic_light_time_tv); + } + + /** + * 展示红绿灯预警 + * + * @param checkLightId 0-都是默认,1-红,2-黄,3-绿 + */ + @Override + public void showWarningTrafficLight(int checkLightId) { + super.showWarningTrafficLight(checkLightId); + mCurrentLightId = checkLightId; + updateTrafficLightIcon(checkLightId); + } + + /** + * 关闭红绿灯预警展示,并重制灯态 + */ + @Override + public void disableWarningTrafficLight() { + super.disableWarningTrafficLight(); + UiThreadHandler.post(() -> { + mCurrentLightId = 0; + BusPassengerTrafficLightView.this.setVisibility(GONE); + }); + } + + /** + * @param redNum 红灯倒计时 + * @param yellowNum 黄灯倒计时 + * @param greenNum 绿灯倒计时 + */ + @Override + public void changeCountdownTrafficLightNum(int redNum, int yellowNum, int greenNum) { + super.changeCountdownTrafficLightNum(redNum, yellowNum, greenNum); + switch (mCurrentLightId) { + case 1: + changeCountdownRed(redNum); + break; + case 2: + changeCountdownYellow(yellowNum); + break; + case 3: + changeCountdownGreen(greenNum); + break; + default: + UiThreadHandler.post(() -> { + mLightTimeTV.setText(""); + }); + break; + } + } + + @Override + public void changeCountdownRed(int redNum) { + super.changeCountdownRed(redNum); + UiThreadHandler.post(() -> { + if (redNum > 0) { + mLightTimeTV.setText(String.valueOf(redNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + @Override + public void changeCountdownGreen(int greenNum) { + super.changeCountdownGreen(greenNum); + UiThreadHandler.post(() -> { + if (greenNum > 0) { + mLightTimeTV.setText(String.valueOf(greenNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + @Override + public void changeCountdownYellow(int yellowNum) { + super.changeCountdownYellow(yellowNum); + UiThreadHandler.post(() -> { + if (yellowNum > 0) { + mLightTimeTV.setText(String.valueOf(yellowNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + /** + * 更新红绿灯icon + * + * @param lightId 0-都是默认,1-红,2-黄,3-绿 + */ + private void updateTrafficLightIcon(int lightId) { + UiThreadHandler.post(() -> { + switch (lightId) { + case 1: + mLightIconIV.setBackgroundResource(R.drawable.bus_p_light_red_nor); + BusPassengerTrafficLightView.this.setVisibility(VISIBLE); + break; + case 2: + mLightIconIV.setBackgroundResource(R.drawable.bus_p_light_yellow_nor); + BusPassengerTrafficLightView.this.setVisibility(VISIBLE); + break; + case 3: + mLightIconIV.setBackgroundResource(R.drawable.bus_p_light_green_nor); + BusPassengerTrafficLightView.this.setVisibility(VISIBLE); + break; + default: + BusPassengerTrafficLightView.this.setVisibility(GONE); + break; + } + }); + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/IBusPassengerMapDirectionView.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/IBusPassengerMapDirectionView.java new file mode 100644 index 0000000000..e3d42204d7 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/IBusPassengerMapDirectionView.java @@ -0,0 +1,18 @@ +package com.mogo.och.bus.passenger.ui; + +/** + * @author xiaoyuzhou + * @date 2021/6/24 11:33 上午 + */ +public interface IBusPassengerMapDirectionView { + + /** + * 绘制路径线 + */ + void drawablePolyline(); + + /** + * 清除路径线 + */ + void clearPolyline(); +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/IShadow.kt b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/IShadow.kt new file mode 100644 index 0000000000..ef5d8fd4eb --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/ui/IShadow.kt @@ -0,0 +1,65 @@ +package com.mogo.och.bus.passenger.ui + +import androidx.annotation.ColorRes + +/** + * @author: wangmingjun + * @date: 2022/1/21 + */ +interface IShadow { + //设置阴影半径 + fun setShadowRadius(radius:Float):IShadow + + //添加单位设置 + fun setShadowRadius(unit:Int,radius: Float):IShadow + + //设置应用颜色 + fun setShadowColor(color:Int):IShadow + + //设置阴影颜色资源文件id + fun setShadowColorRes(@ColorRes color: Int):IShadow + /** + * 设置模糊半径 + * @param radius + */ + fun setBlurRadius(radius:Float):IShadow + + /** + * + * @param unit @{@link android.util.TypedValue#TYPE_DIMENSION} + * @param radius 模糊半径 + */ + fun setBlurRadius(unit:Int,radius:Float):IShadow + + /** + * 设置水平方向的偏移量 + * @param offset x轴偏移 + */ + fun setXOffset(offset:Float):IShadow + + + /** + * 设置x方向的偏移量,设置单位 + * @param unit @{@link android.util.TypedValue#TYPE_DIMENSION} + * @param offset x轴偏移 + */ + fun setXOffset(unit:Int,offset:Float):IShadow + + /** + * 设置竖直方向的偏移量 + * @param offset y轴偏移 + */ + fun setYOffset(offset:Float):IShadow + + /** + * 设置竖直方向的偏移量,带单位 + * @param unit @{@link android.util.TypedValue#TYPE_DIMENSION} + * @param offset y轴偏移 + */ + fun setYOffset(unit:Int,offset:Float):IShadow + + /** + * 更新绘制 + */ + fun commit(); +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPCoordinateCalculateRouteUtil.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPCoordinateCalculateRouteUtil.java new file mode 100644 index 0000000000..077db0ec52 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPCoordinateCalculateRouteUtil.java @@ -0,0 +1,103 @@ +package com.mogo.och.bus.passenger.utils; + +import android.content.Context; + +import com.amap.api.maps.CoordinateConverter; +import com.amap.api.maps.model.LatLng; +import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.eagle.core.utilcode.mogo.logger.Logger; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P; + +/** + * @author: wangmingjun + * @date: 2022/3/28 + */ +public class BPCoordinateCalculateRouteUtil { + + public static float calculateRouteSumLength(List points){ + if (null == points || points.size() == 0) return 0; + + float sumLength = 0; + + //计算全路径总距离 + for (int i = 0;i + 1< points.size();i++){ + double preLat = points.get(i).latitude; + double preLon = points.get(i).longitude; + double laLat = points.get(i+1).latitude; + double laLon = points.get(i+1).longitude; + + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } + return sumLength; + } + + public static List coordinateConverterWgsToGcjListCommon(Context mContext, List models) { + //转成MogoLatLng集合 + List list = new ArrayList<>(); + for (MessagePad.Location m : models) { + LatLng mogoLatLng = coordinateConverterWgsToGcj(mContext, m); + list.add(mogoLatLng); + } + return list; + } + + public static LatLng coordinateConverterWgsToGcj(Context mContext, double lon, double lat) { + CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); + mCoordinateConverter.coord(new LatLng(lat,lon)); + LatLng latLng = mCoordinateConverter.convert(); + return latLng; + } + + public static LatLng coordinateConverterWgsToGcj(Context mContext, MessagePad.Location mogoLatLng) { + CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); + mCoordinateConverter.coord(new LatLng(mogoLatLng.getLatitude(), mogoLatLng.getLongitude())); + LatLng latLng = mCoordinateConverter.convert(); + return latLng; + } + + /** + * 简单粗暴 直接比较 todo 需要优化 + * @param mRoutePoints + * @param realLon + * @param realLat + * @return + */ + public static List getRemainPointListByCompare(List mRoutePoints,double realLon,double realLat) { + List latePoints = new ArrayList<>(); + int currentIndex = 0; //记录疑似点 + if (mRoutePoints.size() > 0){ + //基础点 + LatLng baseLatLng = mRoutePoints.get(0); + 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){ +// Logger.d(M_TAXI + "calculateRouteSumLength", "点:"+i+"-------先记录点----- "); + baseDiffDis = diff; + currentIndex = i; + } + } + Logger.d(M_BUS_P + "calculateRouteSumLength", "点:"+currentIndex+"-------是最近的点------ "); + if (currentIndex == mRoutePoints.size()-1){ + latePoints.add(mRoutePoints.get(currentIndex)); + }else { + latePoints.addAll(mRoutePoints.subList(currentIndex,mRoutePoints.size()-1)); + } + return latePoints; + } + return latePoints; + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPDateTimeUtil.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPDateTimeUtil.java new file mode 100644 index 0000000000..2dc37cd2ed --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPDateTimeUtil.java @@ -0,0 +1,109 @@ +package com.mogo.och.bus.passenger.utils; + +import com.mogo.eagle.core.utilcode.util.DateTimeUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +/** + * @author: wangmingjun + * @date: 2021/8/20 + */ +public class BPDateTimeUtil { + + public static final String TAXI_HH_mm = "HH:mm"; + public static final String TAXI_MM_dd = "MM-dd"; + public static final String TAXI_MM_dd_HH_mm = "MM-dd HH:mm"; + public static final String TAXI_yyyy_MM_dd = "yyyy-MM-dd"; + public static final String TAXI_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm"; + + public static String formatCalendarToString(Calendar calendar, String format){ + if (calendar == null) return ""; + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(calendar.getTime()); + }catch (Exception e){ + e.printStackTrace(); + } + return ""; + } + + public static boolean compareDateIsCurrentDay(Calendar targetCalendar){ + Calendar currentCale = DateTimeUtils.getCurrentDateTime(); + String currentDay = formatCalendarToString(currentCale, TAXI_yyyy_MM_dd); + if (currentDay.equals(formatCalendarToString(targetCalendar, TAXI_yyyy_MM_dd))){ + return true; + }else { + return false; + } + } + + public static Calendar formatLongToCalendar(long time){ + Calendar calendar = null; + try { + calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + }catch (Exception e){ + e.printStackTrace(); + } + return calendar; + } + public static String formatLongToString(long time, String format){ + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(time); + }catch (Exception e){ + e.printStackTrace(); + } + return ""; + } + public static String getYMDTime(long time){//格式为 2021.8.21 + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + int month = calendar.get(Calendar.MONTH) + 1; + return calendar.get(Calendar.YEAR)+"."+month+"."+ calendar.get(Calendar.DAY_OF_MONTH); + }catch (Exception e){ + e.printStackTrace(); + } + return ""; + } + + /** + * + * @param seconds 60 + * @return 1 时 + */ + public static String secondsToHourStr(long seconds){//秒数转成相应的 小时分钟数 + if (seconds >= 3600){ + int hours = (int)seconds/3600; + return String.valueOf(hours); + } + return ""; + } + /** + * + * @param seconds 60 + * @return 1 时 + */ + public static String secondsToMinuteStr(long seconds){//秒数转成相应的 小时分钟数 + int minute = (int)(seconds % 3600)/60; + return String.valueOf(minute); + } + + /** + * 有小数两位, 没有小数保留整数 + * @param d + * @return + */ + public static String formatLong(double d) { + BigDecimal bg = new BigDecimal(d).setScale(1, RoundingMode.HALF_UP); + double num = bg.doubleValue(); + if (Math.ceil(num) - num == 0) { + return String.valueOf((long) num); + } + return String.valueOf(num); + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java new file mode 100644 index 0000000000..1e3f2e5366 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BPRouteDataTestUtils.java @@ -0,0 +1,222 @@ +package com.mogo.och.bus.passenger.utils; + +import com.mogo.och.bus.passenger.model.BusPassengerModel; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * @author: wangmingjun + * @date: 2022/4/13 + */ +public class BPRouteDataTestUtils { + + //13号路口起-13号路口终 + static String jsonStr ="{\n" + + " \"models\": [\n" + + " {\n" + + " \"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927760268911,\"lon\":116.73512607061035,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927736555187,\"lon\":116.73498243020299,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927135941599,\"lon\":116.73482951462647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199260672670036,\"lon\":116.73468429259535,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199251260349946,\"lon\":116.73453933465,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924691997577,\"lon\":116.7343756435551,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199247953493625,\"lon\":116.73421240809087,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924986849947,\"lon\":116.73400425509712,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199249431152175,\"lon\":116.73378579041055,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199248921305724,\"lon\":116.73357811807278,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925012387371,\"lon\":116.73337650020184,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252270195075,\"lon\":116.73318223781153,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992521615169,\"lon\":116.73298632625203,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925202633083,\"lon\":116.73279582043983,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199261230205735,\"lon\":116.73263403473568,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199327991681926,\"lon\":116.73251962434813,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19944850496711,\"lon\":116.73249661840195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199582026896415,\"lon\":116.73251038561487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199743326352014,\"lon\":116.73253087453938,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199908347167394,\"lon\":116.73255070500186,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200065950595445,\"lon\":116.7325720694418,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20022747460407,\"lon\":116.73259461416663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384057310536,\"lon\":116.73261575018056,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20053849777916,\"lon\":116.73263451936387,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200696919444624,\"lon\":116.7326540541723,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2008524952796,\"lon\":116.7326743511824,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20101429705625,\"lon\":116.73269393580199,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118279997041,\"lon\":116.73271564378308,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201342388452076,\"lon\":116.73273653366076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201476063822355,\"lon\":116.73275292393079,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163479199852,\"lon\":116.73277440686762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181243476041,\"lon\":116.7328052766508,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201991767093304,\"lon\":116.7328453845644,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20215573733484,\"lon\":116.73287624009339,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202313648759784,\"lon\":116.73289887933315,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434745374454,\"lon\":116.7329182210956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253164952098,\"lon\":116.73297539811277,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258043275509,\"lon\":116.73312335324984,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258233576585,\"lon\":116.73331077089557,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20257107560234,\"lon\":116.73351244039137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202561578580514,\"lon\":116.73370176209845,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20256256788661,\"lon\":116.73391325024126,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20255633158834,\"lon\":116.73413195000244,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202543311179575,\"lon\":116.73436614303907,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253067346457,\"lon\":116.73458032609663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20251776111356,\"lon\":116.73477082198242,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202503997557805,\"lon\":116.73498624001282,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20249129260376,\"lon\":116.73518976336872,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247877796589,\"lon\":116.73537786253135,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246651610268,\"lon\":116.73559239130266,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245754388014,\"lon\":116.73574239922202,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20244749208,\"lon\":116.73589674090469,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243806550113,\"lon\":116.73607057284322,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243550556816,\"lon\":116.73628106525871,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243654127756,\"lon\":116.7364949950665,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243738221016,\"lon\":116.7367061649993,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243672476754,\"lon\":116.73691115930336,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243590788176,\"lon\":116.73710722104272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202436434375336,\"lon\":116.73730688607075,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243749821501,\"lon\":116.73750140347998,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243625962803,\"lon\":116.73771330926793,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434515480725,\"lon\":116.73791895606205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024326561388,\"lon\":116.73815206945737,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243092086137,\"lon\":116.73838655528765,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202430876006126,\"lon\":116.73861890759498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242914053177,\"lon\":116.73882029918758,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242843336561,\"lon\":116.73904465495175,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242661219026,\"lon\":116.73922453252953,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426462811076,\"lon\":116.7393708046956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242687134937,\"lon\":116.73954685547025,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242694967377,\"lon\":116.73975021183773,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202424630601236,\"lon\":116.73999740812975,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202422502184625,\"lon\":116.74028266774337,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202419634158936,\"lon\":116.7405942561498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241975959762,\"lon\":116.7409069557092,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241920524113,\"lon\":116.74120156191647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241765540262,\"lon\":116.74149288504978,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241569149764,\"lon\":116.7418080096762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202414529497084,\"lon\":116.74210262897205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241419532155,\"lon\":116.74241767661879,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202413879360954,\"lon\":116.7427571218185,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241287045245,\"lon\":116.7431284691325,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241214965105,\"lon\":116.74343354359334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241141271715,\"lon\":116.7437220210538,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024080520075,\"lon\":116.74399113498052,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202391714280026,\"lon\":116.74427625698272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20238163805639,\"lon\":116.74452083315958,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379293010274,\"lon\":116.74475703837204,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379007817086,\"lon\":116.7449961645494,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20237814181231,\"lon\":116.7452036063558,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202375477619896,\"lon\":116.74539567654291,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2023632396621,\"lon\":116.74555457589031,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20229396554444,\"lon\":116.7456716047369,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20217800547467,\"lon\":116.74574081942625,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202047498095304,\"lon\":116.74573659255675,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20188573786706,\"lon\":116.74571018281719,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201738240263026,\"lon\":116.74568463148606,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20157507049073,\"lon\":116.74565525041498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20137985142042,\"lon\":116.745619970576,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201187335613575,\"lon\":116.74558631350607,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20098251429043,\"lon\":116.74555055587679,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2007748533628,\"lon\":116.74551426934663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20057082986032,\"lon\":116.74547749663195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20036944224329,\"lon\":116.74544156175533,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016365229035,\"lon\":116.74540577510051,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1999958572445,\"lon\":116.74537505807076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19984100521566,\"lon\":116.7453433678602,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1996863960282,\"lon\":116.74529675648621,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19953919567943,\"lon\":116.74525916493474,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19940587189373,\"lon\":116.74523402869453,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19929047792381,\"lon\":116.74518617038383,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922141745155,\"lon\":116.74506912884067,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920798885308,\"lon\":116.744896716334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920912644279,\"lon\":116.74467216715483,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199209186509314,\"lon\":116.74448257515108,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920910709997,\"lon\":116.74430613406223,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992100786082,\"lon\":116.74410888316238,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921081961254,\"lon\":116.74391968819582,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921040855518,\"lon\":116.7437082083402,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921085053439,\"lon\":116.74346931155634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921197237373,\"lon\":116.74325149697013,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921248248983,\"lon\":116.74301103786591,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992139724646,\"lon\":116.74277237066539,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215818352386,\"lon\":116.74253219408898,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216175018876,\"lon\":116.74228853120842,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215970354246,\"lon\":116.74204663206451,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216627492966,\"lon\":116.74183871233049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921789170398,\"lon\":116.74165788334192,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922000138535,\"lon\":116.74144512197054,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199221559127494,\"lon\":116.741249370491,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922287231889,\"lon\":116.7410525810756,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922229019589,\"lon\":116.74085266662037,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992216995901,\"lon\":116.74061957723823,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922263073874,\"lon\":116.74041638149129,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922478093337,\"lon\":116.7402123910757,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199227066091595,\"lon\":116.74003419421553,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199228634241756,\"lon\":116.73985841944678,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922951636012,\"lon\":116.7397079274105,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252095329484,\"lon\":116.73956265582487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199346162997905,\"lon\":116.73944690416265,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199470799628024,\"lon\":116.73941941053417,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19962513314346,\"lon\":116.7394280706812,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199780626058924,\"lon\":116.73944255215424,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199961525343376,\"lon\":116.73945856750177,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016196947193,\"lon\":116.73947572081121,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384479551936,\"lon\":116.7394949225795,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200595083817475,\"lon\":116.73951027963179,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200792203321086,\"lon\":116.73952526850614,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200985930701684,\"lon\":116.73954125209579,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20115978977055,\"lon\":116.73955610094161,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201321019536124,\"lon\":116.7395695239138,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20147117943043,\"lon\":116.7395823299481,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163699848565,\"lon\":116.73959633422596,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20178484338371,\"lon\":116.7396085776486,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201962185646316,\"lon\":116.73962351991214,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021018923927,\"lon\":116.7396354059821,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2022137620686,\"lon\":116.73964348380458,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20232600820075,\"lon\":116.73961190446633,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241090270993,\"lon\":116.73951649703137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245777783807,\"lon\":116.73937664238166,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246906634823,\"lon\":116.73920146119093,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470916682884,\"lon\":116.73898763065634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247034830421,\"lon\":116.73878158418357,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246978204673,\"lon\":116.73857680142473,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247082638905,\"lon\":116.73834517890637,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202471943178196,\"lon\":116.7381047689514,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247131648035,\"lon\":116.73787761484981,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470799473765,\"lon\":116.73766230702478,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247013054322,\"lon\":116.73743619407796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246999515433,\"lon\":116.73724916823292,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247199652478,\"lon\":116.73704888970806,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202473960263525,\"lon\":116.73684083235807,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202474504753205,\"lon\":116.73665462440796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247501354581,\"lon\":116.73650710371837,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246541231906,\"lon\":116.73635807696789,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426768984274,\"lon\":116.73622283382787,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20236638788854,\"lon\":116.73610589402243,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20227106919894,\"lon\":116.73600895001849,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021428343084,\"lon\":116.73596816020945,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20197815580698,\"lon\":116.73594623645097,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181789535303,\"lon\":116.73593148707488,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201667906886954,\"lon\":116.73591743008926,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201505897730755,\"lon\":116.7359002912543,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20135083580946,\"lon\":116.73588579696379,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118617904595,\"lon\":116.73586970398149,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20102374028594,\"lon\":116.73585314703226,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20085554043743,\"lon\":116.73583763953049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20069451888229,\"lon\":116.73582073901778,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200530837344964,\"lon\":116.73580314359012,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2003608457064,\"lon\":116.73578183888779,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20021770046798,\"lon\":116.73575292592922,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20003454701824,\"lon\":116.7357174959358,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19986125116602,\"lon\":116.73569499961796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19969408518737,\"lon\":116.73567725223492,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19955533048882,\"lon\":116.73566375985422,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19943174810538,\"lon\":116.73564927714162,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19933167546824,\"lon\":116.735595995086,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199280357603875,\"lon\":116.73546293260645,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927848361656,\"lon\":116.73531579486274,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19928127892504,\"lon\":116.73505848474375,\"speed\": 0.0\n" + + " }\n" + + " ]\n" + + "}"; + + //13号路口西-汇源果汁 +// static String jsonStr = "{\"models\":[{\n" + +// "\t\t\"lat\": 40.19927810144466,\n" + +// "\t\t\"lon\": 116.73527259387767\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19927836356079,\n" + +// "\t\t\"lon\": 116.73513114732762\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19927759500293,\n" + +// "\t\t\"lon\": 116.73497660879111\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.199264819842284,\n" + +// "\t\t\"lon\": 116.73480063747202\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1992510141554,\n" + +// "\t\t\"lon\": 116.73463922037767\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.199245872804,\n" + +// "\t\t\"lon\": 116.73445960685193\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19924673374912,\n" + +// "\t\t\"lon\": 116.73427704009703\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19924747108264,\n" + +// "\t\t\"lon\": 116.7340707102972\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19924828745573,\n" + +// "\t\t\"lon\": 116.73385916927226\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19924941093133,\n" + +// "\t\t\"lon\": 116.73364048294795\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19924939253381,\n" + +// "\t\t\"lon\": 116.73340837408566\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19924949105934,\n" + +// "\t\t\"lon\": 116.73317368725336\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19925040039033,\n" + +// "\t\t\"lon\": 116.73296532811216\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1992515355653,\n" + +// "\t\t\"lon\": 116.73277787366743\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1992512720328,\n" + +// "\t\t\"lon\": 116.73263377253741\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.199205174954606,\n" + +// "\t\t\"lon\": 116.73249773114644\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1991015743076,\n" + +// "\t\t\"lon\": 116.7324219601283\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.198971862686285,\n" + +// "\t\t\"lon\": 116.73239393296355\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19883883071582,\n" + +// "\t\t\"lon\": 116.73237676435652\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19870171355796,\n" + +// "\t\t\"lon\": 116.73236052150362\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1985491853193,\n" + +// "\t\t\"lon\": 116.73234157857011\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1983890047355,\n" + +// "\t\t\"lon\": 116.73232167996464\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1982209877466,\n" + +// "\t\t\"lon\": 116.73230101645792\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.198037574138326,\n" + +// "\t\t\"lon\": 116.73227735486083\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19787327856243,\n" + +// "\t\t\"lon\": 116.73225676816314\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19771917207499,\n" + +// "\t\t\"lon\": 116.73223814728027\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.197548305175935,\n" + +// "\t\t\"lon\": 116.73221624705808\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19739568979691,\n" + +// "\t\t\"lon\": 116.73219618210774\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19724703821575,\n" + +// "\t\t\"lon\": 116.73217598293311\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1970956560885,\n" + +// "\t\t\"lon\": 116.73215773721505\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19697703483188,\n" + +// "\t\t\"lon\": 116.73214337172284\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19687000725696,\n" + +// "\t\t\"lon\": 116.73210037067965\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.196833449601726,\n" + +// "\t\t\"lon\": 116.73196646708011\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19685833847804,\n" + +// "\t\t\"lon\": 116.73181315361103\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.196889170203264,\n" + +// "\t\t\"lon\": 116.73164355747393\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19692242860347,\n" + +// "\t\t\"lon\": 116.7314555399657\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19696431701069,\n" + +// "\t\t\"lon\": 116.7312261834129\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19700025925464,\n" + +// "\t\t\"lon\": 116.73102774016093\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19703414798773,\n" + +// "\t\t\"lon\": 116.73084270562073\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19707287604138,\n" + +// "\t\t\"lon\": 116.73062835248406\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19710951629977,\n" + +// "\t\t\"lon\": 116.73041744082339\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19714593807105,\n" + +// "\t\t\"lon\": 116.73021414314803\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.197183297026285,\n" + +// "\t\t\"lon\": 116.7300057066447\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.1972247359487,\n" + +// "\t\t\"lon\": 116.7297751515664\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19726518822745,\n" + +// "\t\t\"lon\": 116.72954958923812\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19730538240706,\n" + +// "\t\t\"lon\": 116.72932440756041\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19734272112662,\n" + +// "\t\t\"lon\": 116.72911631453036\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.197379191549075,\n" + +// "\t\t\"lon\": 116.72890982812105\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.197417565369314,\n" + +// "\t\t\"lon\": 116.72869447869044\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19746052080799,\n" + +// "\t\t\"lon\": 116.72845641541247\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19750040582118,\n" + +// "\t\t\"lon\": 116.72823569991117\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19753999704064,\n" + +// "\t\t\"lon\": 116.72801998373052\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19757796882569,\n" + +// "\t\t\"lon\": 116.72781280504363\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.197617062364586,\n" + +// "\t\t\"lon\": 116.72759949431683\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19765391602761,\n" + +// "\t\t\"lon\": 116.72739776789756\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19768973009218,\n" + +// "\t\t\"lon\": 116.72719980764646\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.197726191028785,\n" + +// "\t\t\"lon\": 116.72699719861669\n" + +// "\t}, {\n" + +// "\t\t\"lat\": 40.19776233489642,\n" + +// "\t\t\"lon\": 116.72679516155276\n" + +// "\t}]}\n"; + public static void converToRouteData(){ + List list = new ArrayList<>(); + + try { + JSONObject jsonObject = new JSONObject(jsonStr); + JSONArray jsonElements = jsonObject.getJSONArray("models"); + for (int i = 0; i < jsonElements.length(); i++) { + JSONObject s = jsonElements.getJSONObject(i); + MessagePad.Location.Builder builder = MessagePad.Location.newBuilder(); + builder.setLatitude(s.getDouble("lat")); + builder.setLongitude(s.getDouble("lon")); + list.add(builder.build()); + } + BusPassengerModel.getInstance().updateRoutePoints(list); + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java new file mode 100644 index 0000000000..fb012b4143 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/BusPassengerMapAssetStyleUtil.java @@ -0,0 +1,61 @@ +package com.mogo.och.bus.passenger.utils; + + +import android.content.Context; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author donghongyu + * @date 12/18/20 5:37 PM + */ +public class BusPassengerMapAssetStyleUtil { + + public static byte[] getAssetsStyle(Context context,String fileName) { + byte[] buffer1 = null; + InputStream is1 = null; + try { + is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style.data + int lenght1 = is1.available(); + buffer1 = new byte[lenght1]; + is1.read(buffer1); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (is1 != null) { + is1.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return buffer1; + } + + + public static byte[] getAssetsExtraStyle(Context context, String fileName) { + byte[] buffer1 = null; + InputStream is1 = null; + try { + is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style_extra.data + int lenght1 = is1.available(); + buffer1 = new byte[lenght1]; + is1.read(buffer1); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (is1 != null) { + is1.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return buffer1; + } + + +} diff --git a/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/DimenUtil.kt b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/DimenUtil.kt new file mode 100644 index 0000000000..4ad4e9a2ba --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/java/com/mogo/och/bus/passenger/utils/DimenUtil.kt @@ -0,0 +1,13 @@ +package com.mogo.och.bus.passenger.utils + +import android.content.res.Resources + +/** + * @author: wangmingjun + * @date: 2022/1/21 + */ +object DimenUtil{ + fun dp2px(value:Float):Float{ + return (0.5f + value * Resources.getSystem().displayMetrics.density) + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bg_bus_p_arrived_station.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bg_bus_p_arrived_station.png new file mode 100644 index 0000000000..f47f628224 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bg_bus_p_arrived_station.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_arrow_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_arrow_nor.png new file mode 100644 index 0000000000..2964279c96 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_arrow_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_auto_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_auto_nor.png new file mode 100644 index 0000000000..c9daea21c9 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_auto_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_green_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_green_nor.png new file mode 100644 index 0000000000..939d5c0214 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_green_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_red_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_red_nor.png new file mode 100644 index 0000000000..97d774140a Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_red_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_yellow_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_yellow_nor.png new file mode 100644 index 0000000000..a782062c34 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_light_yellow_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_car.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_car.png new file mode 100644 index 0000000000..17beb894a6 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_car.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_end_point.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_end_point.png new file mode 100644 index 0000000000..1e64713481 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_end_point.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_start.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_start.png new file mode 100644 index 0000000000..22d8f225c2 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_start.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_way_point.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_way_point.png new file mode 100644 index 0000000000..ff04c01f13 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_map_view_dir_way_point.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_mogo_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_mogo_nor.png new file mode 100644 index 0000000000..3f938990f6 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_mogo_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/no_order_data.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_no_order_data.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/no_order_data.png rename to OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_no_order_data.png diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_un_auto_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_un_auto_nor.png new file mode 100644 index 0000000000..528cd4dc66 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-sw320dp-xhdpi/bus_p_un_auto_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bg_bus_p_arrived_station.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bg_bus_p_arrived_station.png new file mode 100644 index 0000000000..f47f628224 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bg_bus_p_arrived_station.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_arrow_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_arrow_nor.png new file mode 100644 index 0000000000..2964279c96 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_arrow_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_auto_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_auto_nor.png new file mode 100644 index 0000000000..c9daea21c9 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_auto_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_green_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_green_nor.png new file mode 100644 index 0000000000..939d5c0214 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_green_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_red_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_red_nor.png new file mode 100644 index 0000000000..97d774140a Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_red_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_yellow_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_yellow_nor.png new file mode 100644 index 0000000000..a782062c34 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_light_yellow_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_car.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_car.png new file mode 100644 index 0000000000..17beb894a6 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_car.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_view_dir_end_point.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_view_dir_end_point.png new file mode 100644 index 0000000000..1e64713481 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_view_dir_end_point.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_view_dir_way_point.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_view_dir_way_point.png new file mode 100644 index 0000000000..ff04c01f13 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_map_view_dir_way_point.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_mogo_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_mogo_nor.png new file mode 100644 index 0000000000..3f938990f6 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_mogo_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_no_order_data.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_no_order_data.png new file mode 100644 index 0000000000..0e61996d3f Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_no_order_data.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_un_auto_nor.png b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_un_auto_nor.png new file mode 100644 index 0000000000..528cd4dc66 Binary files /dev/null and b/OCH/mogo-och-bus-passenger/src/main/res/drawable-xhdpi/bus_p_un_auto_nor.png differ diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_end_station_circle.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_end_station_circle.xml new file mode 100644 index 0000000000..528233f84c --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_end_station_circle.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_end_tag_bg.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_end_tag_bg.xml new file mode 100644 index 0000000000..ca8ad81fe2 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_end_tag_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_start_station_circle.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_start_station_circle.xml new file mode 100644 index 0000000000..97458b6d07 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_start_station_circle.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_start_tag_bg.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_start_tag_bg.xml new file mode 100644 index 0000000000..7a6d44a4c8 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_start_tag_bg.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_traffic_light_background.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_traffic_light_background.xml new file mode 100644 index 0000000000..6382b0256a --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bg_bus_p_traffic_light_background.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_dividing_line_bg.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_dividing_line_bg.xml new file mode 100644 index 0000000000..d5d41809d0 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_dividing_line_bg.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml new file mode 100644 index 0000000000..73fbe1f005 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/drawable/bus_p_route_bg.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml new file mode 100644 index 0000000000..d60bc0ae92 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_map_view.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_map_view.xml new file mode 100644 index 0000000000..d9fadd6ef5 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_map_view.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_no_data_common_view.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_no_data_common_view.xml new file mode 100644 index 0000000000..c0174fc191 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_no_data_common_view.xml @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml new file mode 100644 index 0000000000..dc85f5d3b6 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_route_fragment.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_end_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_end_item.xml new file mode 100644 index 0000000000..3468664cc3 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_end_item.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_middle_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_middle_item.xml new file mode 100644 index 0000000000..85018cff68 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_middle_item.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_start_item.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_start_item.xml new file mode 100644 index 0000000000..73d61aa690 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_stations_start_item.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_traffic_light_view.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_traffic_light_view.xml new file mode 100644 index 0000000000..e62c37454f --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_traffic_light_view.xml @@ -0,0 +1,36 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values-sw320dp/dimens.xml b/OCH/mogo-och-bus-passenger/src/main/res/values-sw320dp/dimens.xml new file mode 100644 index 0000000000..a1fc427a76 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/values-sw320dp/dimens.xml @@ -0,0 +1,55 @@ + + + 700px + 40px + 40px + 40px + 110px + 224px + 510px + 3px + + 158px + 90px + 45px + 158px + 90px + 45px + 90px + 90px + 3px + + 224px + 50px + 50px + 44px + 130px + 38px + + 36px + + 110px + 42px + + 4px + 10px + 20px + 60px + 30px + 20px + 50px + 6px + 50px + 36px + 80px + 100px + 50px + 6px + + 638px + 316px + 50px + 44px + 55px + 40px + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values/attrs.xml b/OCH/mogo-och-bus-passenger/src/main/res/values/attrs.xml new file mode 100644 index 0000000000..c2af65cc03 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/values/attrs.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values/colors.xml b/OCH/mogo-och-bus-passenger/src/main/res/values/colors.xml new file mode 100644 index 0000000000..06035c5d4b --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/values/colors.xml @@ -0,0 +1,29 @@ + + + #2D3E5F + #CCE9EFFC + #C7D2E1 + #2D3E5F + #0043FF + #2D3E5F + #596A8A + #D8E5F8 + #FFB327 + #2D3E5F + #0043FF + #276AFE + #0043FF + #276AFE + #FFC125 + #FF8131 + #31BFF2 + #3257E9 + #FFFFFF + #CDDBF6 + #2D3E5F + #0043FF + #2D3E5F + #E6E9EFFC + #33394C63 + #2D3E5F + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml b/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml new file mode 100644 index 0000000000..bb114661c1 --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/values/dimens.xml @@ -0,0 +1,56 @@ + + + 700px + 40px + 40px + 40px + 40px + 110px + 224px + 510px + 3px + + 158px + 90px + 45px + 158px + 90px + 45px + 90px + 90px + 3px + + 224px + 50px + 50px + 44px + 130px + 38px + + 36px + + 110px + 42px + + 4px + 10px + 20px + 60px + 30px + 20px + 50px + 6px + 50px + 36px + 80px + 100px + 50px + 6px + + 638px + 316px + 50px + 44px + 55px + 40px + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml b/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml new file mode 100644 index 0000000000..d142ef29fc --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/main/res/values/strings.xml @@ -0,0 +1,12 @@ + + + KM/H + 您已收车 + + + 到达站: + 下一站: + 始发站: + 请携带好随身物品下车。 + 欢迎乘坐蘑菇车联无人驾驶车。 + \ No newline at end of file diff --git a/OCH/mogo-och-bus-passenger/src/test/java/com/mogo/och/bus/passenger/ExampleUnitTest.java b/OCH/mogo-och-bus-passenger/src/test/java/com/mogo/och/bus/passenger/ExampleUnitTest.java new file mode 100644 index 0000000000..a0652d588f --- /dev/null +++ b/OCH/mogo-och-bus-passenger/src/test/java/com/mogo/och/bus/passenger/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.mogo.och.bus.passenger; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/AndroidManifest.xml b/OCH/mogo-och-bus/src/main/AndroidManifest.xml index b0136c57cc..0e09e1a997 100644 --- a/OCH/mogo-och-bus/src/main/AndroidManifest.xml +++ b/OCH/mogo-och-bus/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ - + diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/BusProvider.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/BusProvider.java new file mode 100644 index 0000000000..02a9fc3d55 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/BusProvider.java @@ -0,0 +1,115 @@ +package com.mogo.och.bus; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import android.content.Context; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.bus.constant.BusConst; +import com.mogo.och.bus.fragment.BusFragment; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * 网约车小巴业务实现入口 + * + * @author tongchenfei + */ +@Route(path = BusConst.PATH) +public class BusProvider implements IMogoOCH { + + private static final String TAG = "BusProvider"; + + private BusFragment busFragment; + private int containerId; + private FragmentActivity activity; + + /** + * 进入鹰眼模式,设置手势缩放地图失效 + */ + private void stepIntoVrMode(){ + CallerLogger.INSTANCE.d( M_BUS + TAG, "进入vr模式" ); + MogoMapUIController.getInstance() + .stepInVrMode(false); + } + + @Override + public void init(Context context) { + MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus" + , StatusDescriptor.VR_MODE, statusChangedListener); + } + + private void showFragment() { + if (busFragment == null) { + CallerLogger.INSTANCE.d(TAG, "准备add fragment======"); + busFragment = new BusFragment(); + activity.getSupportFragmentManager().beginTransaction().add(containerId, busFragment).commitAllowingStateLoss(); + return; + } + CallerLogger.INSTANCE.d(TAG, "准备show fragment"); + activity.getSupportFragmentManager().beginTransaction().show(busFragment).commitAllowingStateLoss(); + } + + private void hideFragment() { + if (busFragment != null) { + CallerLogger.INSTANCE.d(TAG, "准备hide fragment"); + activity.getSupportFragmentManager().beginTransaction().hide(busFragment).commitAllowingStateLoss(); + } + + } + + private final IMogoStatusChangedListener statusChangedListener = (descriptor, isTrue) -> { + if (descriptor == StatusDescriptor.VR_MODE) { + // 进入vr模式默认显示网约车小巴fragment + if (isTrue) { + showFragment(); + } else { + hideFragment(); + } + } else if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) { + // topView进行展示时推出网约车界面,但是不隐藏整个fragment + if (busFragment != null && isTrue) { + busFragment.hideOchBus(); + } + } + }; + + @Override + public void createCoverage(FragmentActivity activity, int containerId) { + + } + + @NotNull + @Override + public String getFunctionName() { + return null; + } + + @Nullable + @Override + public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) { + + this.containerId = integer; + this.activity = fragmentActivity; + +// UiThreadHandler.postDelayed(this::stepIntoVrMode, 5_000L ); + return null; + } + + @Override + public void onDestroy() { + //若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠 + if (activity == null) return; + activity.finish(); + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java deleted file mode 100644 index 0571097163..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/OchBusProvider.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.mogo.och.bus; - -import android.content.Context; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.och.bus.fragment.OchBusFragment; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * 网约车小巴业务实现入口 - * - * @author tongchenfei - */ -@Route(path = OchBusConst.PATH) -public class OchBusProvider implements IMogoOCH { - - private static final String TAG = "OchBusProvider"; - - private OchBusFragment busFragment; - private int containerId; - private FragmentActivity activity; - - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - private void stepIntoVrMode(){ - Logger.d( TAG, "进入vr模式" ); - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() - .openVrMode(false); - } - - @Override - public void init(Context context) { - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus" - , StatusDescriptor.VR_MODE, statusChangedListener); - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("OchBus" - , StatusDescriptor.TOP_VIEW, statusChangedListener); - } - - private void showFragment() { - if (busFragment == null) { - Logger.d(TAG, "准备add fragment======"); - busFragment = new OchBusFragment(); - activity.getSupportFragmentManager().beginTransaction().add(containerId, busFragment).commitAllowingStateLoss(); - return; - } - Logger.d(TAG, "准备show fragment"); - activity.getSupportFragmentManager().beginTransaction().show(busFragment).commitAllowingStateLoss(); - } - - private void hideFragment() { - if (busFragment != null) { - Logger.d(TAG, "准备hide fragment"); - activity.getSupportFragmentManager().beginTransaction().hide(busFragment).commitAllowingStateLoss(); - } - - } - - private final IMogoStatusChangedListener statusChangedListener = (descriptor, isTrue) -> { - if (descriptor == StatusDescriptor.VR_MODE) { - // 进入vr模式默认显示网约车小巴fragment - if (isTrue) { - showFragment(); - } else { - hideFragment(); - } - } else if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode() - && descriptor == StatusDescriptor.TOP_VIEW) { - // topView进行展示时推出网约车界面,但是不隐藏整个fragment - if (busFragment != null && isTrue) { - busFragment.hideOchBus(); - } - } - }; - - @Override - public void createCoverage(FragmentActivity activity, int containerId) { - - } - - @NotNull - @Override - public String getFunctionName() { - return null; - } - - @Nullable - @Override - public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) { - - this.containerId = integer; - this.activity = fragmentActivity; - - UiThreadHandler.postDelayed(this::stepIntoVrMode, 5_000L ); - return null; - } - - @Override - public void onDestroy() { - - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java deleted file mode 100644 index abaf285126..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.mogo.och.bus.adapter; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.och.bus.view.VerticalDashLineView; - -import java.util.ArrayList; -import java.util.List; - -/** - * Station Panel 中的车站列表adapter - * - * @author tongchenfei - */ -public class OchBusStationAdapter extends RecyclerView.Adapter { - private final Context context; - private final List stationList = new ArrayList<>(); - private int currentStation; - - public OchBusStationAdapter(Context context) { - this.context = context; - } - - public void refreshStationList(List stationList) { - this.stationList.clear(); - this.stationList.addAll(stationList); - for (int i = 0; i < stationList.size(); i++) { - OchBusStation station = stationList.get(i); - if (station.getDrivingStatus() == OchBusConst.STATION_STATUS_ARRIVING || station.getDrivingStatus() == OchBusConst.STATION_STATUS_STOPPED ) { - currentStation = i; - break; - } - } - notifyDataSetChanged(); - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.item_och_bus_station, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { -// Logger.d("OchBusStationAdapter", "position: " + position + " currPos: " + currentStation + " station: " + stationList.get(position)); - holder.tvStationName.setText(stationList.get(position).getName()); - if (position == currentStation) { - if (currentStation == 0) { - // 在起始点 - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.bus_arrived_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.bus_icon_arrived_station); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.bus_not_arrive_dash_color)); - } else { - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.bus_current_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.bus_icon_arriving_station); - holder.vDashTop.setGradient(context.getResources().getColor(R.color.bus_arriving_start_dash_color), context.getResources().getColor(R.color.bus_arriving_end_dash_color)); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.bus_not_arrive_dash_color)); - } - } else if (position < currentStation) { - // 驶过 - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.bus_arrived_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.bus_icon_arrived_station); - if (position == currentStation - 1) { - holder.vDashBottom.setGradient(context.getResources().getColor(R.color.bus_leaving_start_dash_color), context.getResources().getColor(R.color.bus_leaving_end_dash_color)); - holder.vDashTop.setColor(context.getResources().getColor(R.color.bus_arrived_dash_color)); - } else { - holder.vDashTop.setColor(context.getResources().getColor(R.color.bus_arrived_dash_color)); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.bus_arrived_dash_color)); - } - } else { - holder.tvStationName.setTextColor(context.getResources().getColor(R.color.bus_not_arrive_station_name_text_color)); - holder.ivIcon.setImageResource(R.drawable.bus_icon_not_arrive_station); - holder.vDashTop.setColor(context.getResources().getColor(R.color.bus_not_arrive_dash_color)); - holder.vDashBottom.setColor(context.getResources().getColor(R.color.bus_not_arrive_dash_color)); - } - - if (position == 0) { - holder.tvStationNotice.setText("起点"); - holder.tvStationNotice.setVisibility(View.VISIBLE); - holder.vDashTop.setVisibility(View.GONE); - holder.vDashBottom.setVisibility(View.VISIBLE); - } else if (position == getItemCount() - 1) { - holder.tvStationNotice.setText("终点"); - holder.tvStationNotice.setVisibility(View.VISIBLE); - holder.vDashTop.setVisibility(View.VISIBLE); - holder.vDashBottom.setVisibility(View.GONE); - } else { - holder.tvStationNotice.setVisibility(View.GONE); - holder.vDashTop.setVisibility(View.VISIBLE); - holder.vDashBottom.setVisibility(View.VISIBLE); - - } - - } - - @Override - public int getItemCount() { - return stationList.size(); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - ImageView ivIcon; - TextView tvStationName; - TextView tvStationNotice; - VerticalDashLineView vDashBottom, vDashTop; - - public ViewHolder(@NonNull View itemView) { - super(itemView); - ivIcon = itemView.findViewById(R.id.module_mogo_och_bus_station_icon); - tvStationName = itemView.findViewById(R.id.module_mogo_och_bus_station_name); - tvStationNotice = itemView.findViewById(R.id.module_mogo_och_bus_station_notice); - vDashTop = itemView.findViewById(R.id.module_mogo_och_bus_station_top_dash); - vDashBottom = itemView.findViewById(R.id.module_mogo_och_bus_station_bottom_dash); - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusRequest.java new file mode 100644 index 0000000000..0ab375e2d4 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusRequest.java @@ -0,0 +1,43 @@ +package com.mogo.och.bus.bean; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.network.Utils; + +public +/** + * @author congtaowang + * @since 2021/3/22 + * + * 小巴车运营状态请求参数 + */ +class BusOperationStatusRequest { + + private String sn; + private double lat; + private double lon; + public BusOperationStatusRequest(double lon, double lat) { + this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); + this.lat = lat; + this.lon = lon; + } + public void setLat(double lat) { + this.lat = lat; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public String getSn() { + return sn; + } + + public double getLat() { + return lat; + } + + public double getLon() { + return lon; + } + +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusResponse.java new file mode 100644 index 0000000000..744fbac9c5 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOperationStatusResponse.java @@ -0,0 +1,20 @@ +package com.mogo.och.bus.bean; + +import com.mogo.eagle.core.data.BaseData; + +/** + * @author congtaowang + * @since 2021/3/22 + * + * 小巴车运营状态返回参数 + */ +public class BusOperationStatusResponse extends BaseData { + + public Result data; + + public static class Result { + + public int serviceStatus;//0:已收车,1:已出车 + + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOrderBean.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOrderBean.java new file mode 100644 index 0000000000..85c3a1da58 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOrderBean.java @@ -0,0 +1,86 @@ +package com.mogo.och.bus.bean; + +/** + * @author congtaowang + * @since 2021/3/23 + *

+ * 小巴订单 + */ +public class BusOrderBean { + + /** + * orderNo number + * passengerPhone string 下单用户电话 + * startStationId integer 开始站点 + * startStationName string + * endStationId integer 结束站点 + * endStationName string + */ + + private String orderNo; + private String passengerPhone; + private int startStationId;//乘客上车点 + private String startStationName; + private String endStationName; + private int endStationId;//乘客下车点 + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public void setPassengerPhone(String passengerPhone) { + this.passengerPhone = passengerPhone; + } + + public void setStartStationId(int startStationId) { + this.startStationId = startStationId; + } + + public void setStartStationName(String startStationName) { + this.startStationName = startStationName; + } + + public void setEndStationName(String endStationName) { + this.endStationName = endStationName; + } + + public void setEndStationId(int endStationId) { + this.endStationId = endStationId; + } + + public String getOrderNo() { + return orderNo; + } + + public String getPassengerPhone() { + return passengerPhone; + } + + public int getStartStationId() { + return startStationId; + } + + public String getStartStationName() { + return startStationName; + } + + public String getEndStationName() { + return endStationName; + } + + public int getEndStationId() { + return endStationId; + } + + @Override + public String toString() { + return "BusOrderBean{" + + "orderNo=" + orderNo + + ", passengerPhone='" + passengerPhone + '\'' + + ", startStationId=" + startStationId + + ", startStationName='" + startStationName + '\'' + + ", endStationName='" + endStationName + '\'' + + ", endStationId=" + endStationId + + '}'; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOrdersResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOrdersResponse.java new file mode 100644 index 0000000000..2215a298a5 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusOrdersResponse.java @@ -0,0 +1,23 @@ +package com.mogo.och.bus.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2021/10/19 + */ +public class BusOrdersResponse extends BaseData { + public Result data; + public static class Result{ + public List orders; + } + + @Override + public String toString() { + return "BusOrdersResponse{" + + "data=" + data + + '}'; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLineStationsRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLineStationsRequest.java new file mode 100644 index 0000000000..6485027084 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusQueryLineStationsRequest.java @@ -0,0 +1,63 @@ +package com.mogo.och.bus.bean; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; + +public +/** + * @author congtaowang + * @since 2021/3/22 + * + * 根据车机行驶线路站点信息 + */ +class BusQueryLineStationsRequest { + + private String sn; + private double lat; + private double lon; + private boolean markDrivingStatus; // 默认false;true:是否需要返回站点的行驶状态,对应返回的drivingStatus + // 0 - 关闭、1 - 启动 +// public String status; + public BusQueryLineStationsRequest(double lon, double lat, boolean markDrivingStatus) { + this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); + this.lat = lat; + this.lon = lon; + this.markDrivingStatus = markDrivingStatus; + } + + public boolean isMarkDrivingStatus() { + return markDrivingStatus; + } + + public void setMarkDrivingStatus(boolean markDrivingStatus) { + this.markDrivingStatus = markDrivingStatus; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public String getSn() { + return sn; + } + + public double getLat() { + return lat; + } + + public double getLon() { + return lon; + } + // public BusOperationStatusRequest shutdown() { +// status = "0"; +// return this; +// } +// +// public BusOperationStatusRequest launch() { +// status = "1"; +// return this; +// } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java new file mode 100644 index 0000000000..c27264694f --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusResetDrivingLineRequest.java @@ -0,0 +1,18 @@ +package com.mogo.och.bus.bean; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.network.Utils; + +/** + * @author: wangmingjun + * @date: 2021/10/18 + */ +public class BusResetDrivingLineRequest { + public String sn; + public int lineId; //切换到的线路id + + public BusResetDrivingLineRequest(int lineId) { + sn = MoGoAiCloudClientConfig.getInstance().getSn(); + this.lineId = lineId; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResponse.java new file mode 100644 index 0000000000..2c9bad3e3c --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResponse.java @@ -0,0 +1,27 @@ +package com.mogo.och.bus.bean; + +import com.mogo.eagle.core.data.BaseData; + +/** + * 网约车小巴路线接口请求响应结果 + * + * @author tongchenfei + */ +public class BusRoutesResponse extends BaseData { + private BusRoutesResult data; + + public BusRoutesResult getResult() { + return data; + } + + public void setResult(BusRoutesResult data) { + this.data = data; + } + + @Override + public String toString() { + return "BusRoutesResponse{" + + "data=" + data + + '}'; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java new file mode 100644 index 0000000000..3a99d5d57e --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusRoutesResult.java @@ -0,0 +1,45 @@ +package com.mogo.och.bus.bean; + +import java.util.List; + +/** + * 网约车小巴路线接口返回接口数据封装 + * + * @author tongchenfei + */ +public class BusRoutesResult { + private List sites; + private int lineId; + private String name; + private int lineType; //线路类型,0:环形 + private String description; + private int status; + + public int getLineId() { + return lineId; + } + + public String getName() { + return name; + } + + public List getSites() { + return sites; + } + + public void setSite(List site) { + this.sites = sites; + } + + @Override + public String toString() { + return "BusRoutesResult{" + + "sites=" + sites + + ", lineId=" + lineId + + ", name='" + name + '\'' + + ", lineType=" + lineType + + ", description='" + description + '\'' + + ", status=" + status + + '}'; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java new file mode 100644 index 0000000000..4e8b00eb18 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusStationBean.java @@ -0,0 +1,152 @@ +package com.mogo.och.bus.bean; + +/** + * 单个网约车小巴车站信息 + * + * @author tongchenfei + */ +public class BusStationBean { +// private int lineId; +// private int siteId; +// private String siteName; +// private String cityCode; +// private String areaCode; +// private String areaName; +// private double lat; +// private double lon; +// private String siteDesc; +// private int siteState; +// private int isCurrentSite;// @see OchBusConst 是否是当前站 1:是 2:下一站 0:普通站 +// private int siteColor; +// private String peoples; +// private int ifStop; // 是否需要停靠、1需要、0不需要 + + + private String name; + private String description; + private String cityCode; + private double lon; //高精坐标 + private double lat; //高精坐标 + private int businessType; //站点类型,9:taxi,10:bus + private int status; + private int siteId; + private int seq; + private int drivingStatus;//行驶信息,0初始值;1已经过;2当前站;3未到站 + private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 + private boolean leaving; + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode; + } + + public void setLon(double lon) { + this.lon = lon; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public void setBusinessType(int businessType) { + this.businessType = businessType; + } + + public void setStatus(int status) { + this.status = status; + } + + public void setSiteId(int siteId) { + this.siteId = siteId; + } + + public void setSeq(int seq) { + this.seq = seq; + } + + public void setDrivingStatus(int drivingStatus) { + this.drivingStatus = drivingStatus; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getCityCode() { + return cityCode; + } + + + public int getBusinessType() { + return businessType; + } + + public int getStatus() { + return status; + } + + public int getSiteId() { + return siteId; + } + + public int getSeq() { + return seq; + } + + public int getDrivingStatus() { + return drivingStatus; + } + + public double getLon() { + return lon; + } + + public double getLat() { + return lat; + } + + public void setIfStop(int ifStop) { + this.ifStop = ifStop; + } + + public int getIfStop() { + return ifStop; + } + + public void setLeaving(boolean leaving) { + this.leaving = leaving; + } + + public boolean isLeaving() { + return leaving; + } + + @Override + public String toString() { + return "BusStationBean{" + + "name='" + name + '\'' + + ", description='" + description + '\'' + + ", cityCode='" + cityCode + '\'' + + ", lon=" + lon + + ", lat=" + lat + + ", businessType=" + businessType + + ", status=" + status + + ", siteId=" + siteId + + ", seq=" + seq + + ", drivingStatus=" + drivingStatus + + ", ifStop=" + ifStop + + ", leaving=" + leaving + + '}'; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusUpdateSiteStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusUpdateSiteStatusRequest.java new file mode 100644 index 0000000000..a9552157ff --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/BusUpdateSiteStatusRequest.java @@ -0,0 +1,27 @@ +package com.mogo.och.bus.bean; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.network.Utils; + +/** + * @author congtaowang + * @since 2021/3/22 + * + * 小巴车运营状态请求参数 + */ +public class BusUpdateSiteStatusRequest { + + public String sn; + public int seq;//站点序号 + public int siteId;//站点id + public double lon; + public double lat; + + public BusUpdateSiteStatusRequest(int seq, int siteId, double lon, double lat) { + this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); + this.seq = seq; + this.siteId = siteId; + this.lon = lon; + this.lat = lat; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/CarHeartbeatReqBean.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/CarHeartbeatReqBean.java index c85a2d0b82..dcacb5e380 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/CarHeartbeatReqBean.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/CarHeartbeatReqBean.java @@ -1,6 +1,6 @@ package com.mogo.och.bus.bean; -import com.mogo.och.bus.constant.OchBusConst; +import com.mogo.och.bus.constant.BusConst; import java.util.UUID; @@ -21,6 +21,6 @@ public class CarHeartbeatReqBean { this.lon = lon; this.lat = lat; this.msgId = UUID.randomUUID().toString(); - this.interval = (int) (OchBusConst.LOOP_PERIOD_60S / 1000); + this.interval = (int) (BusConst.LOOP_PERIOD_60S / 1000); } } diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java deleted file mode 100644 index fcc762be44..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusRequest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -class OchBusOperationStatusRequest { - - private String sn; - private double lat; - private double lon; - public OchBusOperationStatusRequest(double lon, double lat) { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.lat = lat; - this.lon = lon; - } - public void setLat(double lat) { - this.lat = lat; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public String getSn() { - return sn; - } - - public double getLat() { - return lat; - } - - public double getLon() { - return lon; - } - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java deleted file mode 100644 index fd60cc3b4d..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOperationStatusResponse.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态返回参数 - */ -public class OchBusOperationStatusResponse extends BaseData { - - public Result data; - - public static class Result { - - public int serviceStatus;//0:已收车,1:已出车 - - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java deleted file mode 100644 index 1e509dfccf..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrder.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.mogo.och.bus.bean; - -/** - * @author congtaowang - * @since 2021/3/23 - *

- * 小巴订单 - */ -public class OchBusOrder { - - /** - * orderId number - * passengerPhone string 下单用户电话 - * startStationId integer 开始站点 - * startStationName string - * endStationId integer 结束站点 - * endStationName string - */ - - private long orderId; - private String passengerPhone; - private int startStationId;//乘客上车点 - private String startStationName; - private String endStationName; - private int endStationId;//乘客下车点 - - public void setOrderId(long orderId) { - this.orderId = orderId; - } - - public void setPassengerPhone(String passengerPhone) { - this.passengerPhone = passengerPhone; - } - - public void setStartStationId(int startStationId) { - this.startStationId = startStationId; - } - - public void setStartStationName(String startStationName) { - this.startStationName = startStationName; - } - - public void setEndStationName(String endStationName) { - this.endStationName = endStationName; - } - - public void setEndStationId(int endStationId) { - this.endStationId = endStationId; - } - - public long getOrderId() { - return orderId; - } - - public String getPassengerPhone() { - return passengerPhone; - } - - public int getStartStationId() { - return startStationId; - } - - public String getStartStationName() { - return startStationName; - } - - public String getEndStationName() { - return endStationName; - } - - public int getEndStationId() { - return endStationId; - } - - @Override - public String toString() { - return "OchBusOrder{" + - "orderId=" + orderId + - ", passengerPhone='" + passengerPhone + '\'' + - ", startStationId=" + startStationId + - ", startStationName='" + startStationName + '\'' + - ", endStationName='" + endStationName + '\'' + - ", endStationId=" + endStationId + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrdersResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrdersResponse.java deleted file mode 100644 index 252858472b..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusOrdersResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2021/10/19 - */ -public class OchBusOrdersResponse extends BaseData { - public Result data; - public static class Result{ - public List orders; - } - - @Override - public String toString() { - return "OchBusOrdersResponse{" + - "data=" + data + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusQueryLineStationsRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusQueryLineStationsRequest.java deleted file mode 100644 index fdd0d7461e..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusQueryLineStationsRequest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 根据车机行驶线路站点信息 - */ -class OchBusQueryLineStationsRequest { - - private String sn; - private double lat; - private double lon; - private boolean markDrivingStatus; // 默认false;true:是否需要返回站点的行驶状态,对应返回的drivingStatus - // 0 - 关闭、1 - 启动 -// public String status; - public OchBusQueryLineStationsRequest(double lon, double lat,boolean markDrivingStatus) { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.lat = lat; - this.lon = lon; - this.markDrivingStatus = markDrivingStatus; - } - - public boolean isMarkDrivingStatus() { - return markDrivingStatus; - } - - public void setMarkDrivingStatus(boolean markDrivingStatus) { - this.markDrivingStatus = markDrivingStatus; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public String getSn() { - return sn; - } - - public double getLat() { - return lat; - } - - public double getLon() { - return lon; - } - // public OchBusOperationStatusRequest shutdown() { -// status = "0"; -// return this; -// } -// -// public OchBusOperationStatusRequest launch() { -// status = "1"; -// return this; -// } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetDrivingLineRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetDrivingLineRequest.java deleted file mode 100644 index 4faf1980a8..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusResetDrivingLineRequest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -/** - * @author: wangmingjun - * @date: 2021/10/18 - */ -public class OchBusResetDrivingLineRequest { - public String sn; - public int lineId; //切换到的线路id - - public OchBusResetDrivingLineRequest(int lineId) { - sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.lineId = lineId; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java deleted file mode 100644 index 0b7c31b096..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * 网约车小巴路线接口请求响应结果 - * - * @author tongchenfei - */ -public class OchBusRoutesResponse extends BaseData { - private OchBusRoutesResult data; - - public OchBusRoutesResult getResult() { - return data; - } - - public void setResult(OchBusRoutesResult data) { - this.data = data; - } - - @Override - public String toString() { - return "OchBusRoutesResponse{" + - "data=" + data + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java deleted file mode 100644 index c55f12b3db..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusRoutesResult.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mogo.och.bus.bean; - -import java.util.List; - -/** - * 网约车小巴路线接口返回接口数据封装 - * - * @author tongchenfei - */ -public class OchBusRoutesResult { - private List sites; - private int lineId; - private String name; - private int lineType; //线路类型,0:环形 - private String description; - private int status; - - public int getLineId() { - return lineId; - } - - public String getName() { - return name; - } - - public List getSites() { - return sites; - } - - public void setSite(List site) { - this.sites = sites; - } - - @Override - public String toString() { - return "OchBusRoutesResult{" + - "sites=" + sites + - ", lineId=" + lineId + - ", name='" + name + '\'' + - ", lineType=" + lineType + - ", description='" + description + '\'' + - ", status=" + status + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java deleted file mode 100644 index e70d321a40..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusStation.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.mogo.och.bus.bean; - -/** - * 单个网约车小巴车站信息 - * - * @author tongchenfei - */ -public class OchBusStation { -// private int lineId; -// private int siteId; -// private String siteName; -// private String cityCode; -// private String areaCode; -// private String areaName; -// private double lat; -// private double lon; -// private String siteDesc; -// private int siteState; -// private int isCurrentSite;// @see OchBusConst 是否是当前站 1:是 2:下一站 0:普通站 -// private int siteColor; -// private String peoples; -// private int ifStop; // 是否需要停靠、1需要、0不需要 - - - private String name; - private String description; - private String cityCode; - private double lon; //高精坐标 - private double lat; //高精坐标 - private int businessType; //站点类型,9:taxi,10:bus - private int status; - private int siteId; - private int seq; - private int drivingStatus;//行驶信息,0初始值;1已经过;2当前站;3未到站 - private int ifStop = 1; // 是否需要停靠、1需要、0不需要 // TODO: 2021/10/19 原来站点里有设计是否需要停靠字段,现设计暂无,默认都需要停靠 - private boolean leaving; - - public void setName(String name) { - this.name = name; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setCityCode(String cityCode) { - this.cityCode = cityCode; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public void setBusinessType(int businessType) { - this.businessType = businessType; - } - - public void setStatus(int status) { - this.status = status; - } - - public void setSiteId(int siteId) { - this.siteId = siteId; - } - - public void setSeq(int seq) { - this.seq = seq; - } - - public void setDrivingStatus(int drivingStatus) { - this.drivingStatus = drivingStatus; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public String getCityCode() { - return cityCode; - } - - - public int getBusinessType() { - return businessType; - } - - public int getStatus() { - return status; - } - - public int getSiteId() { - return siteId; - } - - public int getSeq() { - return seq; - } - - public int getDrivingStatus() { - return drivingStatus; - } - - public double getLon() { - return lon; - } - - public double getLat() { - return lat; - } - - public void setIfStop(int ifStop) { - this.ifStop = ifStop; - } - - public int getIfStop() { - return ifStop; - } - - public void setLeaving(boolean leaving) { - this.leaving = leaving; - } - - public boolean isLeaving() { - return leaving; - } - - @Override - public String toString() { - return "OchBusStation{" + - "name='" + name + '\'' + - ", description='" + description + '\'' + - ", cityCode='" + cityCode + '\'' + - ", lon=" + lon + - ", lat=" + lat + - ", businessType=" + businessType + - ", status=" + status + - ", siteId=" + siteId + - ", seq=" + seq + - ", drivingStatus=" + drivingStatus + - ", ifStop=" + ifStop + - ", leaving=" + leaving + - '}'; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusUpdateSiteStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusUpdateSiteStatusRequest.java deleted file mode 100644 index ed5923c905..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/OchBusUpdateSiteStatusRequest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -public class OchBusUpdateSiteStatusRequest { - - public String sn; - public int seq;//站点序号 - public int siteId;//站点id - public double lon; - public double lat; - - public OchBusUpdateSiteStatusRequest(int seq, int siteId, double lon, double lat) { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - this.seq = seq; - this.siteId = siteId; - this.lon = lon; - this.lat = lat; - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java index 1a38e7e2eb..98105058b8 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryLeaveAwayPassengersResponse.java @@ -22,7 +22,7 @@ class QueryLeaveAwayPassengersResponse extends BaseData { public static class LeaveAwayPassenger { /** - * orderId: 订单id + * orderNo: 订单no * orderStatus: 订单状态 * orderType:订单类型:0及时,1预约 * bookingTime:预计用车时间 @@ -40,7 +40,7 @@ class QueryLeaveAwayPassengersResponse extends BaseData { * endSiteGcjPoint: */ //todo 目前是需要乘客电话来通知乘客下车 目前后台没有乘客信息userPhone - public long orderId; + public String orderNo; public int orderStatus; public int orderType; public long bookingTime; diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java deleted file mode 100644 index ceaf72c7f8..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/bean/QueryOchBusOperationStatusRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mogo.och.bus.bean; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -import com.mogo.commons.network.Utils; - -public -/** - * @author congtaowang - * @since 2021/3/22 - * - * 小巴车运营状态请求参数 - */ -class QueryOchBusOperationStatusRequest { - - public String sn; - - - public QueryOchBusOperationStatusRequest() { - this.sn = MoGoAiCloudClientConfig.getInstance().getSn(); - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/BusLinesCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/BusLinesCallback.java deleted file mode 100644 index 9f35270323..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/BusLinesCallback.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mogo.och.bus.callback; - -import com.mogo.och.bus.bean.BusQueryLinesResponse; - -/** - * @author: wangmingjun - * @date: 2022/2/9 - */ -public interface BusLinesCallback { - void onBusLinesChange(BusQueryLinesResponse lines); - void onChangeLineIdSuccess(); -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/CarOperationStatusCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/CarOperationStatusCallback.java deleted file mode 100644 index 0e9cd198da..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/CarOperationStatusCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.och.bus.callback; - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -public interface CarOperationStatusCallback { - void changeOperationStatus(boolean changeStatus); -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java new file mode 100644 index 0000000000..e03e963942 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusControllerStatusCallback.java @@ -0,0 +1,17 @@ +package com.mogo.och.bus.callback; + +import android.location.Location; + +/** + * Created on 2021/9/10 + * + * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) + */ +public interface IBusControllerStatusCallback { + // 是否vr map模式 + void onVRModeChanged(boolean isVRMode); + // 自车定位 + void onCarLocationChanged(Location location); + //开始开启自动驾驶 + void startOpenAutopilot(); +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java new file mode 100644 index 0000000000..b181736278 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IBusLinesCallback.java @@ -0,0 +1,12 @@ +package com.mogo.och.bus.callback; + +import com.mogo.och.bus.bean.BusQueryLinesResponse; + +/** + * @author: wangmingjun + * @date: 2022/2/9 + */ +public interface IBusLinesCallback { + void onBusLinesChange(BusQueryLinesResponse lines); + void onChangeLineIdSuccess(); +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ICarOperationStatusCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ICarOperationStatusCallback.java new file mode 100644 index 0000000000..d414f71e2c --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ICarOperationStatusCallback.java @@ -0,0 +1,9 @@ +package com.mogo.och.bus.callback; + +/** + * @author: wangmingjun + * @date: 2021/10/22 + */ +public interface ICarOperationStatusCallback { + void changeOperationStatus(boolean changeStatus); +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IOCHBusControllerStatusCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IOCHBusControllerStatusCallback.java deleted file mode 100644 index 1e7bd30279..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IOCHBusControllerStatusCallback.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.och.bus.callback; - -import android.location.Location; - -/** - * Created on 2021/9/10 - * - * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) - */ -public interface IOCHBusControllerStatusCallback { - // 是否vr map模式 - void onVRModeChanged(boolean isVRMode); - // 自车定位 - void onCarLocationChanged(Location location); - //开始开启自动驾驶 - void startOpenAutopilot(); -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java new file mode 100644 index 0000000000..854a2699d5 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/IRefreshBusStationsCallback.java @@ -0,0 +1,13 @@ +package com.mogo.och.bus.callback; + +import com.mogo.och.bus.bean.BusStationBean; + +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2021/10/22 + */ +public interface IRefreshBusStationsCallback { + void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived); +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java new file mode 100644 index 0000000000..16e6893135 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/ISlidePannelHideCallback.java @@ -0,0 +1,9 @@ +package com.mogo.och.bus.callback; + +/** + * @author: wangmingjun + * @date: 2021/10/22 + */ +public interface ISlidePannelHideCallback { + void hideSlidePanel(); +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/RefreshBusStationsCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/RefreshBusStationsCallback.java deleted file mode 100644 index bc59a7ba79..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/RefreshBusStationsCallback.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.bus.callback; - -import com.mogo.och.bus.bean.OchBusStation; - -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -public interface RefreshBusStationsCallback { - void refreshBusStations(List stationList, int currentStation, int nextStation,boolean isArrived); -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/SlidePannelHideCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/SlidePannelHideCallback.java deleted file mode 100644 index 11dd2f0d36..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/callback/SlidePannelHideCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.och.bus.callback; - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -public interface SlidePannelHideCallback { - void hideSlidePanel(); -} 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 new file mode 100644 index 0000000000..563b0825a5 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/BusConst.kt @@ -0,0 +1,67 @@ +package com.mogo.och.bus.constant + +import com.mogo.commons.debug.DebugConfig + +/** + * Created on 2021/12/6 + */ +class BusConst { + companion object { + + private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com" + private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com" + private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com" + + @JvmStatic + fun getBaseUrl(): String { + return when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_DEMO -> BASE_URL_OCH_DEV + DebugConfig.NET_MODE_QA -> BASE_URL_OCH_QA + DebugConfig.NET_MODE_RELEASE -> BASE_URL_OCH_RELEASE + else -> BASE_URL_OCH_RELEASE + } + } + + // OCH arouter 路由path + const val PATH = "/och/api" + + // 测试用的广播 + const val BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY = "sceneType" + // 无状态 + const val STATION_STATUS_IDLE = 0 + // 已过站(历史站) + const val STATION_STATUS_LEAVING = 1 + // 到站(当前站) + const val STATION_STATUS_STOPPED = 2 + // 未到站(未到站) + const val STATION_STATUS_ARRIVING = 3 + + // 上报心跳轮询ms + const val LOOP_PERIOD_60S = 60 * 1000L + // 开始服务启动自动驾驶等待时间(埋点上传) + const val LOOP_PERIOD_15S = 15 * 1000L + const val LOOP_PERIOD_1S = 1 * 1000L + const val LOOP_DELAY = 100L + + //起点UUID + const val BUS_START_MAP_MAKER = "bus_start_map_maker"; + //终点UUID + const val BUS_END_MAP_MAKER = "bus_end_map_maker"; + + // 埋点key:开始服务开启自动驾驶(成功/失败) + const val EVENT_KEY_START_SERVICE = "event_key_och_bus_start_service" + const val EVENT_PARAM_SN = "sn" + const val EVENT_PARAM_TIME = "time" + const val EVENT_PARAM_START_NAME = "start_name" + const val EVENT_PARAM_END_NAME = "end_name" + const val EVENT_PARAM_LINE_ID = "line_id" + 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 + + /** + * 订单起终点Marker类型 + */ + const val TYPE_MARKER_BUS_ORDER = "TYPE_MARKER_BUS_ORDER" + } +} \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.kt b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.kt deleted file mode 100644 index a85ea7ae3f..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.mogo.och.bus.constant - -import com.mogo.commons.debug.DebugConfig - -/** - * Created on 2021/12/6 - */ -class OchBusConst { - companion object { - - private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com" - private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com" - private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com" - - @JvmStatic - fun getBaseUrl(): String { - return when (DebugConfig.getNetMode()) { - DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_DEMO -> BASE_URL_OCH_DEV - DebugConfig.NET_MODE_QA -> BASE_URL_OCH_QA - DebugConfig.NET_MODE_RELEASE -> BASE_URL_OCH_RELEASE - else -> BASE_URL_OCH_RELEASE - } - } - - // OCH arouter 路由path - const val PATH = "/och/api" - - // 测试用的广播 - const val BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY = "sceneType" - // 无状态 - const val STATION_STATUS_IDLE = 0 - // 已过站(历史站) - const val STATION_STATUS_LEAVING = 1 - // 到站(当前站) - const val STATION_STATUS_STOPPED = 2 - // 未到站(未到站) - const val STATION_STATUS_ARRIVING = 3 - - // 上报心跳轮询ms - const val LOOP_PERIOD_60S = 60 * 1000L - const val LOOP_PERIOD_1S = 1 * 1000L - const val LOOP_DELAY = 100L - - //起点UUID - const val BUS_START_MAP_MAKER = "bus_start_map_maker"; - //终点UUID - const val BUS_END_MAP_MAKER = "bus_end_map_maker"; - } -} \ No newline at end of file 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 new file mode 100644 index 0000000000..5b7e2eca1e --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseBusTabFragment.java @@ -0,0 +1,488 @@ +package com.mogo.och.bus.fragment; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import android.animation.ObjectAnimator; +import android.content.Intent; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.LinearInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.Group; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.mvp.IView; +import com.mogo.commons.mvp.MvpFragment; +import com.mogo.commons.mvp.Presenter; +import com.mogo.commons.voice.AIAssist; +import com.mogo.eagle.core.data.config.HmiBuildConfig; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener; +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.autopilot.CallerAutopilotRecordListenerManager; +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; +import com.mogo.map.listener.IMogoMapListener; +import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.constants.DataTypes; +import com.mogo.module.common.view.OnPreventFastClickListener; +import com.mogo.och.bus.R; +import com.mogo.och.bus.ui.BusTrafficLightView; +import com.mogo.och.bus.view.BusArcView; +import com.mogo.och.bus.view.SlidePanelView; + +import mogo.telematics.pad.MessagePad; +import record_cache.RecordPanelOuterClass; + +/** + * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 + *

+ * 部分业务放在了此处处理 + * + * @author tongchenfei + */ +public abstract class BaseBusTabFragment> extends MvpFragment implements IMogoMapListener, IMoGoAutopilotRecordListener { + + private static final String TAG = "BaseOchFragment"; + + protected SlidePanelView slidePanelView; + private RelativeLayout ctvAutopilotStatus; + private ImageView ctvAutopilotStatusIv; + private TextView ctvAutopilotStatusTv; + protected TextView tvOperationStatus; + protected RelativeLayout mSettingBtn; + protected ImageView mBadcaseBtn; + public boolean isOperationStatus;//false-收车,true-出车 + private FrameLayout flStationPanelContainer; + private Group groupTestPanel; + private FrameLayout flSpeed; + private BusArcView mouduleArc; + private ImageView mUpgradeTipIv; + // private BusTrafficLightView mTrafficLightView; + + public static final String TYPE_ENTRANCE = "entrance"; + + //远景和中景的切换 + private ImageView mSwitchMapModeImage; + private FrameLayout mSwitchMapModeLayout; + private TextView mSwitchText; + + private ObjectAnimator autopilotLoadingAnimator; + + /** + * 滑动按钮触发的事件 + */ + private final SlidePanelView.OnSlidePanelMoveToEndListener onSlideToEndListener = () -> { + // 此处做一个代理,处理一下共有情况 + if (getSlidePanelOnEndListener() != null) { + getSlidePanelOnEndListener().moveToEnd(); + } + }; + + @Override + protected int getLayoutId() { + return R.layout.bus_base_fragment; + } + + private View panelView; + + @Override + protected void initViews() { + groupTestPanel = findViewById(R.id.groupTestPanel); + slidePanelView = findViewById(R.id.module_mogo_och_slide_panel); + ctvAutopilotStatus = findViewById(R.id.module_mogo_och_autopilot_status); + ctvAutopilotStatusIv = findViewById(R.id.bus_autopilot_btn_iv); + ctvAutopilotStatusTv = findViewById(R.id.bus_autopolot_btn_tv); + flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container); + + // mTrafficLightView = findViewById(R.id.bus_traffic_light_view); + // CallerHmiManager.INSTANCE.setProxyTrafficLightView(mTrafficLightView); + + tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status); + + flSpeed = (FrameLayout) findViewById(R.id.fl_speed); + mouduleArc = (BusArcView) findViewById(R.id.bus_arc); + + panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); + slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); + + mSwitchMapModeLayout = findViewById(R.id.bus_switch_model_layout); + mSwitchMapModeImage = findViewById(R.id.bus_switch_model_icon); + mSwitchText = findViewById(R.id.bus_switch_model_text); + + mSwitchMapModeLayout.setOnClickListener(new OnPreventFastClickListener() { + + @Override + public void onClickImpl(View v) { + //切换地图的远近视图 + if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isLongSight()) { + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers(); + MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); + mSwitchText.setText(R.string.bus_map_model_normal); + } else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) { + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS); + MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); + mSwitchText.setText(R.string.bus_map_model_faster); + } + } + }); + + if (DebugConfig.isDebug()) { + mouduleArc.setLongClickable(true); + mouduleArc.setOnLongClickListener(v -> { + CallerLogger.INSTANCE.d(M_BUS + TAG, "长按显示状态工具栏"); + Intent intent = new Intent(); + intent.putExtra("oper", 52); + MogoApisHandler.getInstance().getApis().getIntentManagerApi().invoke("com.mogo.mock", intent); + return true; + }); + } + initListener(); + ctvAutopilotStatus.setOnClickListener(new OnPreventFastClickListener(){ + + @Override + public void onClickImpl(View v) { + restartAutopilot(); + } + }); + + // debug下调用测试面板 2022.2.25修改到 长按当前站点名字 +// if (DebugConfig.isDebug()) { +// ctvAutopilotStatus.setOnLongClickListener(v -> { +// debugTestBar(); +// return true; +// }); +// } + onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState(), false); + // 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接 + findViewById(R.id.btnAutopilotDisable).setOnClickListener(view -> +// MogoApisHandler.getInstance().getApis() +// .getAdasControllerApi() +// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, "不能使用") + debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) + ); + + // 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态 + findViewById(R.id.btnAutopilotEnable).setOnClickListener(view -> +// MogoApisHandler.getInstance().getApis() +// .getAdasControllerApi() +// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, "能使用") + debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) + ); + + // 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人 + findViewById(R.id.btnAutopilotRunning).setOnClickListener(view -> +// MogoApisHandler.getInstance().getApis() +// .getAdasControllerApi() +// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, "Running") + debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) + ); + + // 模拟 自动驾驶网约车回调数据 + findViewById(R.id.btnAutopilotArrive).setOnClickListener(view -> +// MogoApisHandler.getInstance().getApis() +// .getAdasControllerApi().mockOchStatus(-1, "Arrived") + debugArrivedStation() + ); + + tvOperationStatus.setOnClickListener(view -> { + onChangeOperationStatus(); + }); + + mSettingBtn = findViewById(R.id.module_mogo_och_setting_layout); + mSettingBtn.setOnClickListener(v -> { + // TODO: 2021/12/9 + CallerHmiManager.INSTANCE.showToolsView(); + }); + + // mBadcaseBtn的visible显示逻辑在showBadcaseEntrance内处理 + mBadcaseBtn = findViewById(R.id.module_mogo_och_badcase_iv); +// CallerHmiManager.INSTANCE.registerBadCaseCallback( +// () -> { // onShow() +// return mBadcaseBtn; }, +// () -> { // onHide() +// return null; }); + + if (mBadcaseBtn != null) { + CallerDevaToolsManager.INSTANCE.initBadCase(mBadcaseBtn, null, null); + if (!HmiBuildConfig.isShowBadCaseView) { + CallerAutopilotRecordListenerManager.INSTANCE.addListener(TAG, this); + } + } + //设置升级小红点提示 默认隐藏 + mUpgradeTipIv = findViewById(R.id.module_och_bus_upgrade_red_tip); + CallerHmiManager.INSTANCE.registerUpgradeTipsCallback(() -> mUpgradeTipIv); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (!HmiBuildConfig.isShowBadCaseView) { + CallerAutopilotRecordListenerManager.INSTANCE.removeListener(TAG); + } + } + + + @Override + public void onAutopilotRecordResult(@Nullable RecordPanelOuterClass.RecordPanel recordPanel) { + if (!HmiBuildConfig.isShowBadCaseView && recordPanel != null && recordPanel.getType() == 1 && recordPanel.getStat() == 100) { + CallerDevaToolsManager.INSTANCE.onReceiveBadCaseRecord(recordPanel); + } + } + + + /** + * 测试到站 + */ + protected abstract void debugArrivedStation(); + + private void initListener() { + MogoApisHandler.getInstance().getApis().getRegisterCenterApi().registerMogoMapListener(TYPE_ENTRANCE, this); + } + + protected void onChangeOperationStatus() { + + } + + /** + * 展示滑动按钮 + * + * @param text 指定的文字 + */ + public void showSlidePanle(String text) { + if (isOperationStatus) { + getActivity().runOnUiThread(() -> { + slidePanelView.setText(text); + slidePanelView.setVisibility(View.VISIBLE); + }); + } + } + + /** + * 隐藏滑动按钮 + */ + public void hideSlidePanel() { + getActivity().runOnUiThread(() -> { + slidePanelView.setVisibility(View.GONE); + }); + } + + public void showNotice(String notice) { + getActivity().runOnUiThread(() -> { + AIAssist.getInstance(getContext()).speakTTSVoice(notice); + }); + } + + /** + * 改变自动驾驶状态 + * + * @param autopilotStatus 0:不可用 1:可用状态 2:自动驾驶中 + */ + public void onAutopilotStatusChanged(int autopilotStatus, boolean isAnimateRunning) { + getActivity().runOnUiThread(() -> { +// ctvAutopilotStatus.setChecked(isInAutopilot); + changeAutopilotBtnView(autopilotStatus, isAnimateRunning); + }); + } + + private void changeAutopilotBtnView(int autopilotStatus, boolean isAnimateRunning) { + CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChangeChangeAutopilotBtnView: " + autopilotStatus + "isAnimateRunning = " + isAnimateRunning); + if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE + == autopilotStatus) {//0不可用 + if (isAnimateRunning) { + stopAutopilotAnimation(); + ctvAutopilotStatusIv.setImageResource(R.drawable.bus_wrong_autopilot_icon); + ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); + ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_failure_tv)); + ctvAutopilotStatus.setFocusableInTouchMode(false); + ctvAutopilotStatus.setSelected(false); + } + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_disable)); + ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv)); + ctvAutopilotStatusIv.setImageResource(R.drawable.bus_disable_autopilot_icon); + ctvAutopilotStatus.setSelected(false); + ctvAutopilotStatus.setFocusableInTouchMode(true); +// ctvAutopilotStatus.setPressed(false); + } + }, 1000); + + } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE + == autopilotStatus) {//1可用 + if (isAnimateRunning) { + return; + } + ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); + ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv)); + ctvAutopilotStatusIv.setImageResource(R.drawable.bus_ic_autopilot); + ctvAutopilotStatus.setSelected(false); + ctvAutopilotStatus.setFocusableInTouchMode(true); +// ctvAutopilotStatus.setPressed(true); + } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING + == autopilotStatus) {//2 running + if (isAnimateRunning) { + stopAutopilotAnimation(); + } + ctvAutopilotStatusIv.setImageResource(R.drawable.bus_right_autopilot_icon); + ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); + ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_success_tv)); + ctvAutopilotStatus.setSelected(false); + ctvAutopilotStatus.setFocusableInTouchMode(false); + UiThreadHandler.postDelayed(new Runnable() { + @Override + public void run() { + ctvAutopilotStatusIv.setImageResource(R.drawable.bus_ic_autopilot); + ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv)); + ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); + ctvAutopilotStatus.setSelected(true); + ctvAutopilotStatus.setFocusableInTouchMode(true); +// ctvAutopilotStatus.setPressed(false); + } + }, 1000); + } + } + + /** + * 隐藏【自动驾驶】按钮 + */ + public void hideAutopilotBiz() { + getActivity().runOnUiThread(() -> { +// ctvAutopilotStatus.setVisibility(View.GONE); +// slidePanelView.setVisibility(View.GONE); + }); + } + + /** + * 展示【自动驾驶】按钮 + */ + public void showAutopilotBiz() { + getActivity().runOnUiThread(() -> { + ctvAutopilotStatus.setVisibility(View.VISIBLE); + }); + } + + public void hidPanel() { + getActivity().runOnUiThread(() -> { + flStationPanelContainer.setVisibility(View.GONE); + }); + } + + public void showPanel() { + getActivity().runOnUiThread(() -> { + flStationPanelContainer.setVisibility(View.VISIBLE); + }); + } + + public View getPanelView() { + return panelView; + } + + public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { + return null; + } + + /** + * 获取站点面板view,在{@link #initViews()}时候添加到container中 + * + * @return 站点面板view + */ + public abstract int getStationPanelViewId(); + + /** + * 重新开启自动驾驶 + */ + public abstract void restartAutopilot(); + + /** + * 模拟自动驾驶返回状态 + * + * @param status + */ + public abstract void debugAutoPilotStatus(int status); + + /** + * 开启自动驾驶中间动画 + */ + public void startAutopilotAnimation() { +// if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE){ + ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_tv)); + ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); + ctvAutopilotStatus.setSelected(false); + ctvAutopilotStatus.setFocusableInTouchMode(true); + ctvAutopilotStatusIv.setImageResource(R.drawable.bus_loading_autopilot_icon); + if (autopilotLoadingAnimator == null) { + autopilotLoadingAnimator = ObjectAnimator.ofFloat(ctvAutopilotStatusIv, "rotation", 0f, 360f); + autopilotLoadingAnimator.setInterpolator(new LinearInterpolator()); + autopilotLoadingAnimator.setRepeatCount(-1);//无限循环 + autopilotLoadingAnimator.setDuration(1000);//设置持续时间 + } + autopilotLoadingAnimator.start();//动画开始 +// } + } + + /** + * 停止自动驾驶中间动画 + */ + public void stopAutopilotAnimation() { + if (autopilotLoadingAnimator != null) { + autopilotLoadingAnimator.end(); + ctvAutopilotStatusIv.clearAnimation(); + autopilotLoadingAnimator = null; + } + } + + /** + * 迈速表实时更新 + * + * @param newSpeed + */ + public void updateSpeedView(float newSpeed) { + int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值 + mouduleArc.setArcColor(Color.parseColor(speed > 60 ? "#DB3137" : "#3E77F6")); + mouduleArc.setValues(speed); + flSpeed.setBackgroundResource(speed > 60 ? R.drawable.bus_yi_biao_pan_bg_speeding : R.drawable.bus_yi_biao_pan_bg_nor); + } + + @Override + public void onDestroy() { + super.onDestroy(); + MogoApisHandler.getInstance().getApis().getRegisterCenterApi().unregisterMogoMapListener(TYPE_ENTRANCE); + } + + @Override + public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) { + if (visualAngleMode.isMediumSight()) { + mSwitchMapModeLayout.setVisibility(View.VISIBLE); + } else if (visualAngleMode.isLongSight()) { + mSwitchMapModeLayout.setVisibility(View.VISIBLE); + } else if (visualAngleMode.isCloseSight()) { + mSwitchMapModeLayout.setVisibility(View.GONE); + } + } + + /** + * bus调试面板打开关闭 + */ + public void debugTestBar() { + if (groupTestPanel.getVisibility() == View.VISIBLE) { + groupTestPanel.setVisibility(View.GONE); + } else { + groupTestPanel.setVisibility(View.VISIBLE); + } + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java deleted file mode 100644 index fe02bfef81..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BaseOchBusTabFragment.java +++ /dev/null @@ -1,462 +0,0 @@ -package com.mogo.och.bus.fragment; - -import android.animation.ObjectAnimator; -import android.content.Intent; -import android.graphics.Color; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.animation.LinearInterpolator; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.constraintlayout.widget.Group; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.mvp.IView; -import com.mogo.commons.mvp.MvpFragment; -import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.map.listener.IMogoMapListener; -import com.mogo.map.uicontroller.VisualAngleMode; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.constants.DataTypes; -import com.mogo.module.common.view.OnPreventFastClickListener; -import com.mogo.och.bus.R; -import com.mogo.och.bus.view.BusArcView; -import com.mogo.och.bus.view.SlidePanelView; - -/** - * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 - *

- * 部分业务放在了此处处理 - * - * @author tongchenfei - */ -public abstract class BaseOchBusTabFragment> extends MvpFragment implements IMogoMapListener { - - private static final String TAG = "BaseOchFragment"; - - protected SlidePanelView slidePanelView; - private RelativeLayout ctvAutopilotStatus; - private ImageView ctvAutopilotStatusIv; - private TextView ctvAutopilotStatusTv; - protected TextView tvOperationStatus; - protected RelativeLayout mSettingBtn; - protected ImageView mBadcaseBtn; - public boolean isOperationStatus;//false-收车,true-出车 - private FrameLayout flStationPanelContainer; - private Group groupTestPanel; - private FrameLayout flSpeed; - private BusArcView mouduleArc; - private ImageView mUpgradeTipIv; - - public static final String TYPE_ENTRANCE = "entrance"; - - //远景和中景的切换 - private ImageView mSwitchMapModeImage; - private FrameLayout mSwitchMapModeLayout; - private TextView mSwitchText; - - private ObjectAnimator autopilotLoadingAnimator; - - /** - * 滑动按钮触发的事件 - */ - private final SlidePanelView.OnSlidePanelMoveToEndListener onSlideToEndListener = () -> { - // 此处做一个代理,处理一下共有情况 - if (getSlidePanelOnEndListener() != null) { - getSlidePanelOnEndListener().moveToEnd(); - } - }; - - @Override - protected int getLayoutId() { - return R.layout.bus_base_fragment; - } - - private View panelView; - - @Override - protected void initViews() { - groupTestPanel = findViewById(R.id.groupTestPanel); - slidePanelView = findViewById(R.id.module_mogo_och_slide_panel); - ctvAutopilotStatus = findViewById(R.id.module_mogo_och_autopilot_status); - ctvAutopilotStatusIv = findViewById(R.id.bus_autopilot_btn_iv); - ctvAutopilotStatusTv = findViewById(R.id.bus_autopolot_btn_tv); - flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container); - - tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status); - - flSpeed = (FrameLayout) findViewById(R.id.fl_speed); - mouduleArc = (BusArcView) findViewById(R.id.bus_arc); - - panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); - slidePanelView.setOnSlidePanelMoveToEndListener(onSlideToEndListener); - - mSwitchMapModeLayout = findViewById(R.id.bus_switch_model_layout); - mSwitchMapModeImage = findViewById(R.id.bus_switch_model_icon); - mSwitchText = findViewById(R.id.bus_switch_model_text); - - mSwitchMapModeLayout.setOnClickListener(new OnPreventFastClickListener(){ - - @Override - public void onClickImpl(View v) { - //切换地图的远近视图 - if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isLongSight()) { - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).visibleAllMarkers(); - MogoApisHandler.getInstance().getApis().getMapServiceApi() - .getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); - mSwitchText.setText(R.string.bus_map_model_normal); - } else if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isMediumSight()) { - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS); - MogoApisHandler.getInstance().getApis().getMapServiceApi() - .getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); - mSwitchText.setText(R.string.bus_map_model_faster); - } - } - }); - - if (DebugConfig.isDebug()) { - mouduleArc.setLongClickable(true); - mouduleArc.setOnLongClickListener(v -> { - Log.d(TAG,"长按显示状态工具栏"); - Intent intent = new Intent(); - intent.putExtra("oper", 52); - MogoApisHandler.getInstance().getApis().getIntentManagerApi().invoke("com.mogo.mock", intent); - return true; - }); - } - initListener(); - ctvAutopilotStatus.setOnClickListener(v -> { - // 如果能自动驾驶,就自动驾驶,不能就提示 -// if (MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE){ -// return; -// } -// if (autopilotLoadingAnimator != null){ -// TipToast.shortTip("正在开启自动驾驶。。。"); -// return; -// } - restartAutopilot(); - }); - - // debug下调用测试面板 2022.2.25修改到 长按当前站点名字 -// if (DebugConfig.isDebug()) { -// ctvAutopilotStatus.setOnLongClickListener(v -> { -// debugTestBar(); -// return true; -// }); -// } - onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState(),false); - // 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接 - findViewById(R.id.btnAutopilotDisable).setOnClickListener(view -> -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi() -// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, "不能使用") - debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) - ); - - // 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态 - findViewById(R.id.btnAutopilotEnable).setOnClickListener(view -> -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi() -// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, "能使用") - debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) - ); - - // 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人 - findViewById(R.id.btnAutopilotRunning).setOnClickListener(view -> -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi() -// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, "Running") - debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) - ); - - // 模拟 自动驾驶网约车回调数据 - findViewById(R.id.btnAutopilotArrive).setOnClickListener(view -> -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi().mockOchStatus(-1, "Arrived") - debugArrivedStation() - ); - - tvOperationStatus.setOnClickListener(view -> { - onChangeOperationStatus(); - }); - - mSettingBtn = findViewById(R.id.module_mogo_och_setting_layout); - mSettingBtn.setOnClickListener(v -> { - // TODO: 2021/12/9 - CallerHmiManager.INSTANCE.showToolsView(); - }); - - // mBadcaseBtn的visible显示逻辑在showBadcaseEntrance内处理 - mBadcaseBtn = findViewById(R.id.module_mogo_och_badcase_iv); - CallerHmiManager.INSTANCE.registerBadCaseCallback( - () -> { // onShow() - return mBadcaseBtn; }, - () -> { // onHide() - return null; }); - - //设置升级小红点提示 默认隐藏 - mUpgradeTipIv = findViewById(R.id.module_och_bus_upgrade_red_tip); - CallerHmiManager.INSTANCE.registerUpgradeTipsCallback(() -> mUpgradeTipIv); - } - - /** - * 测试到站 - */ - protected abstract void debugArrivedStation(); - - private void initListener() { - MogoApisHandler.getInstance().getApis().getRegisterCenterApi().registerMogoMapListener(TYPE_ENTRANCE, this); - } - - protected void onChangeOperationStatus() { - - } - - /** - * 展示滑动按钮 - * - * @param text 指定的文字 - */ - public void showSlidePanle(String text) { - if (isOperationStatus) { - getActivity().runOnUiThread(() -> { - slidePanelView.setText(text); - slidePanelView.setVisibility(View.VISIBLE); - }); - } - } - - /** - * 隐藏滑动按钮 - */ - public void hideSlidePanel() { - getActivity().runOnUiThread(() -> { - slidePanelView.setVisibility(View.GONE); - }); - } - - public void showNotice(String notice) { - getActivity().runOnUiThread(() -> { - AIAssist.getInstance(getContext()).speakTTSVoice(notice); - }); - } - - /** - * 改变自动驾驶状态 - * @param autopilotStatus 0:不可用 1:可用状态 2:自动驾驶中 - */ - public void onAutopilotStatusChanged(int autopilotStatus,boolean isAnimateRunning) { - getActivity().runOnUiThread(() -> { -// ctvAutopilotStatus.setChecked(isInAutopilot); - changeAutopilotBtnView(autopilotStatus,isAnimateRunning); - }); - } - - private void changeAutopilotBtnView(int autopilotStatus,boolean isAnimateRunning) { - Logger.d( TAG, "onStateChangeChangeAutopilotBtnView: " + autopilotStatus +"isAnimateRunning = "+isAnimateRunning); - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE - == autopilotStatus) {//0不可用 - if (isAnimateRunning){ - stopAutopilotAnimation(); - ctvAutopilotStatusIv.setImageResource(R.drawable.bus_wrong_autopilot_icon); - ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); - ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_failure_tv)); - ctvAutopilotStatus.setFocusableInTouchMode(false); - ctvAutopilotStatus.setSelected(false); - } - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_disable)); - ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv)); - ctvAutopilotStatusIv.setImageResource(R.drawable.bus_disable_autopilot_icon); - ctvAutopilotStatus.setSelected(false); - ctvAutopilotStatus.setFocusableInTouchMode(true); -// ctvAutopilotStatus.setPressed(false); - } - },1000); - - }else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE - == autopilotStatus){//1可用 - if (isAnimateRunning){ - return; - } - ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); - ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv)); - ctvAutopilotStatusIv.setImageResource(R.drawable.bus_ic_autopilot); - ctvAutopilotStatus.setSelected(false); - ctvAutopilotStatus.setFocusableInTouchMode(true); -// ctvAutopilotStatus.setPressed(true); - }else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING - == autopilotStatus){//2 running - if (isAnimateRunning){ - stopAutopilotAnimation(); - } - ctvAutopilotStatusIv.setImageResource(R.drawable.bus_right_autopilot_icon); - ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); - ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_success_tv)); - ctvAutopilotStatus.setSelected(false); - ctvAutopilotStatus.setFocusableInTouchMode(false); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - ctvAutopilotStatusIv.setImageResource(R.drawable.bus_ic_autopilot); - ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_runnig_tv)); - ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); - ctvAutopilotStatus.setSelected(true); - ctvAutopilotStatus.setFocusableInTouchMode(true); -// ctvAutopilotStatus.setPressed(false); - } - },1000); - } - } - - /** - * 隐藏【自动驾驶】按钮 - */ - public void hideAutopilotBiz() { - getActivity().runOnUiThread(() -> { -// ctvAutopilotStatus.setVisibility(View.GONE); -// slidePanelView.setVisibility(View.GONE); - }); - } - - /** - * 展示【自动驾驶】按钮 - */ - public void showAutopilotBiz() { - getActivity().runOnUiThread(() -> { - ctvAutopilotStatus.setVisibility(View.VISIBLE); - if (isOperationStatus) { - slidePanelView.setVisibility(View.VISIBLE); - } else { - slidePanelView.setVisibility(View.GONE); - } - }); - } - - public void hidPanel(){ - getActivity().runOnUiThread(()->{ - flStationPanelContainer.setVisibility(View.GONE); - }); - } - - public void showPanel(){ - getActivity().runOnUiThread(()->{ - flStationPanelContainer.setVisibility(View.VISIBLE); - }); - } - - public View getPanelView() { - return panelView; - } - - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { - return null; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - } - - /** - * 获取站点面板view,在{@link #initViews()}时候添加到container中 - * - * @return 站点面板view - */ - public abstract int getStationPanelViewId(); - - /** - * 重新开启自动驾驶 - */ - public abstract void restartAutopilot(); - - /** - * 模拟自动驾驶返回状态 - * @param status - */ - public abstract void debugAutoPilotStatus(int status); - - /** - * 开启自动驾驶中间动画 - */ - public void startAutopilotAnimation() { -// if (MogoApisHandler.getInstance().getApis().getAdasControllerApi().getAutopilotStatus() == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE){ - ctvAutopilotStatusTv.setText(getResources().getString(R.string.bus_loading_autopilot_tv)); - ctvAutopilotStatusTv.setTextColor(getResources().getColor(R.color.bus_autopilot_text_color_normal)); - ctvAutopilotStatus.setSelected(false); - ctvAutopilotStatus.setFocusableInTouchMode(true); - ctvAutopilotStatusIv.setImageResource(R.drawable.bus_loading_autopilot_icon); - if (autopilotLoadingAnimator == null){ - autopilotLoadingAnimator = ObjectAnimator.ofFloat(ctvAutopilotStatusIv,"rotation", 0f,360f); - autopilotLoadingAnimator.setInterpolator(new LinearInterpolator()); - autopilotLoadingAnimator.setRepeatCount(-1);//无限循环 - autopilotLoadingAnimator.setDuration(1000);//设置持续时间 - } - autopilotLoadingAnimator.start();//动画开始 -// } - } - - /** - * 停止自动驾驶中间动画 - */ - public void stopAutopilotAnimation() { - if (autopilotLoadingAnimator != null){ - autopilotLoadingAnimator.end(); - ctvAutopilotStatusIv.clearAnimation(); - autopilotLoadingAnimator = null; - } - } - - /** - * 迈速表实时更新 - * @param newSpeed - */ - public void updateSpeedView(float newSpeed){ - int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值 - mouduleArc.setArcColor(Color.parseColor(speed > 60 ? "#DB3137" : "#3E77F6")); - mouduleArc.setValues(speed); - flSpeed.setBackgroundResource(speed > 60 ? R.drawable.bus_yi_biao_pan_bg_speeding : R.drawable.bus_yi_biao_pan_bg_nor); - } - - @Override - public void onDestroy() { - super.onDestroy(); - MogoApisHandler.getInstance().getApis().getRegisterCenterApi().unregisterMogoMapListener(TYPE_ENTRANCE); - } - - @Override - public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) { - if (visualAngleMode.isMediumSight()) { - mSwitchMapModeLayout.setVisibility(View.VISIBLE); - } else if (visualAngleMode.isLongSight()) { - mSwitchMapModeLayout.setVisibility(View.VISIBLE); - } else if (visualAngleMode.isCloseSight()) { - mSwitchMapModeLayout.setVisibility(View.GONE); - } - } - - /** - * bus调试面板打开关闭 - */ - public void debugTestBar(){ - if (groupTestPanel.getVisibility() == View.VISIBLE) { - groupTestPanel.setVisibility(View.GONE); - } else { - groupTestPanel.setVisibility(View.VISIBLE); - } - } -} 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 new file mode 100644 index 0000000000..083cc2bab1 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/BusFragment.java @@ -0,0 +1,368 @@ +package com.mogo.och.bus.fragment; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import android.content.Intent; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.voice.AIAssist; +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.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; +import com.mogo.map.MogoMarkerManager; +import com.mogo.map.marker.IMogoMarker; +import com.mogo.map.marker.MogoMarkerOptions; +import com.mogo.och.bus.R; +import com.mogo.och.bus.bean.BusStationBean; +import com.mogo.och.bus.constant.BusConst; +import com.mogo.och.bus.presenter.BusPresenter; +import com.mogo.och.bus.ui.BusSwitchLineActivity; +import com.mogo.och.bus.view.SlidePanelView; + +import java.util.List; + +import mogo.telematics.pad.MessagePad; + + +/** + * 网约车小巴界面 + * + * @author tongchenfei + */ +public class BusFragment extends BaseBusTabFragment + implements SlidePanelView.OnSlidePanelMoveToEndListener, View.OnClickListener { + private static final String TAG = "BusFragment"; + + private TextView mCurrentStationName; + private TextView mStartStationFlag; + private TextView mNextStationName; + private TextView mEndStationFlag; + // private TextView mDebugArrive; + private TextView mSwitchLine; //切换路线 + private int mCurrentStation = 0; + + private View mBus; + + private BusStationBean startStation = null; + private BusStationBean endStation = null; + + @Override + public String getTagName() { + return "BusFragment"; + } + + @Override + protected void initViews() { + super.initViews(); + mBus = findViewById(R.id.module_och_bus_tag); + mCurrentStationName = findViewById(R.id.module_och_bus_current_station); + mStartStationFlag = findViewById(R.id.module_och_bus_start_station_tag); + mNextStationName = findViewById(R.id.module_och_bus_order_end_station); + mEndStationFlag = findViewById(R.id.module_och_bus_end_station_tag); + mSwitchLine = findViewById(R.id.switch_line_btn); +// mDebugArrive = findViewById(R.id.module_och_bus_arrive_station); + + if (DebugConfig.isDebug()) { + mBus.setOnClickListener(view -> { + TipToast.shortTip("重置了车站状态"); + mPresenter.queryBusRoutes(); + }); + + mBus.setOnLongClickListener(view -> { + getActivity().finish(); + return true; + }); + //debug下调用测试面板 + mCurrentStationName.setOnLongClickListener(v -> { + debugTestBar(); + return true; + }); + } + + CallerLogger.INSTANCE.d(M_BUS + TAG, "initView: " + CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); + // 初始化的时候设置 UI 按钮状态 + switch (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()) { + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE: + hideAutopilotBiz(); + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE: + showAutopilotBiz(); + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, false); + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING: + showAutopilotBiz(); + onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, false); + break; + default: + break; + } + mSwitchLine.setOnClickListener(this); + } + + @Override + protected void debugArrivedStation() { + mPresenter.onAutopilotArriveAtStation(null); + } + + @NonNull + @Override + protected BusPresenter createPresenter() { + return new BusPresenter(this); + } + + @Override + public void onResume() { + super.onResume(); + } + + /** + * 根据站点列表信息刷新车站面板,滑块面板 + * + * @param stationList 车站列表信息 + * @param currentStation 当前站点 + * @param nextStation 下个站点 + * @param isArrived 是否都站 + */ + public void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived) { + mCurrentStation = currentStation; + if (getActivity() == null) { + return; + } + getActivity().runOnUiThread(() -> { + if (stationList == null) { + // 获取小巴数据失败 + return; + } + + // 渲染小巴路线数据 + renderCurrentStationStatus(stationList, currentStation, nextStation, isArrived); + }); + } + + /** + * 重新刷新站点信息 isArrived 是否到站 + */ + private void renderCurrentStationStatus(List stationList, int currentStation + , int nextStation, boolean isArrived) { + CallerLogger.INSTANCE.d(M_BUS + "MapMaker ", "currentStation=" + currentStation + ",nextStation=" + nextStation + "isArrived=" + isArrived); + String currentStationName = null; + String nextStationName = null; + int startStationFlagVisibility = View.INVISIBLE; + int endStationFlagVisibility = View.INVISIBLE; + + boolean isArriveEndStation = false; + boolean isArriveAtStation = false; + boolean isArriveAtStartStation = false; + + // 获取当前站点的名称 + currentStationName = stationList.get(currentStation).getName(); + + startStation = stationList.get(0); + endStation = stationList.get(stationList.size() - 1); + + // 是否到达起点 + if (currentStation == 0) { + startStationFlagVisibility = View.VISIBLE; + isArriveAtStartStation = true; + mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_start)); + + setOrRemoveMapMaker(true, BusConst.BUS_START_MAP_MAKER, startStation.getLat() + , startStation.getLon(),R.raw.star_marker); + setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, endStation.getLat() + , endStation.getLon(),R.raw.end_marker); + } else if (currentStation > 0 && currentStation < stationList.size() - 1) {// 是否到达站点 + isArriveAtStation = true; + + setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() + , startStation.getLon(),R.raw.star_marker); + setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, endStation.getLat() + , endStation.getLon(),R.raw.end_marker); + } else if (currentStation == stationList.size() - 1) {// 是否到达终点 + isArriveEndStation = true; + nextStationName = "--"; + mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); + startStationFlagVisibility = View.VISIBLE; + endStationFlagVisibility = View.INVISIBLE; + + setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() + , startStation.getLon(),R.raw.star_marker); + + if (isArrived) { + setOrRemoveMapMaker(false, BusConst.BUS_END_MAP_MAKER, endStation.getLat() + , endStation.getLon(),R.raw.end_marker); + } else { + setOrRemoveMapMaker(true, BusConst.BUS_END_MAP_MAKER, endStation.getLat() + , endStation.getLon(),R.raw.end_marker); + } + } + + // 获取下一站点名称 + if (nextStation > currentStation && nextStation <= stationList.size() - 1) { + nextStationName = stationList.get(nextStation).getName(); + } + + // 是否到达终点 + if (nextStation == stationList.size() - 1) { + endStationFlagVisibility = View.VISIBLE; + } + + // 重置滑动按钮文字 + if (isArriveEndStation) { + showSlidePanle("单程结束"); + } else if (isArriveAtStartStation) { + showSlidePanle("滑动出发"); + } else if (isArriveAtStation) { + showSlidePanle("滑动出发"); + } + + mCurrentStationName.setText(currentStationName); + mNextStationName.setText(nextStationName); + mStartStationFlag.setVisibility(startStationFlagVisibility); + mEndStationFlag.setVisibility(endStationFlagVisibility); + } + + public void hideOchBus() { +// tvNotice.setVisibility(View.GONE); + } + + @Override + public int getStationPanelViewId() { + return R.layout.fragment_och_bus; + } + + @Override + public void restartAutopilot() { + mPresenter.restartAutopilot(); + } + + @Override + public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { + return this; + } + + @Override + public void moveToEnd() { + // 开启自动驾驶到下一站 + mPresenter.autoDriveToNextStation(false); + } + + /** + * 设置自动驾驶可用状态 + */ + public void onAutopilotEnableChange(boolean isEnable) { + if (isEnable) { + showAutopilotBiz(); + } else { + hideAutopilotBiz(); + } + } + + @Override + protected void onChangeOperationStatus() { + super.onChangeOperationStatus(); + mPresenter.onChangeOperationStatus(); + } + + /** + * 修改经营状态 + * + * @param launch true-收车,false-出车 + */ + public void changeOperationStatus(boolean launch) { + isOperationStatus = launch; + if (launch) { + // 出车的时候重制站点状态 + mPresenter.queryBusRoutes(); + tvOperationStatus.setText("收车"); + showSlidePanle("滑动出发"); + showPanel(); + } else { + AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); + tvOperationStatus.setText("出车"); + hideSlidePanel(); + hidPanel(); + + //移除起点终点 + if (null != startStation) { + setOrRemoveMapMaker(false, BusConst.BUS_START_MAP_MAKER, startStation.getLat() + , startStation.getLon(),R.raw.star_marker); + } + if (null != endStation) { + setOrRemoveMapMaker(false, BusConst.BUS_END_MAP_MAKER, endStation.getLat() + , endStation.getLon(),R.raw.end_marker); + } + } + } + + /** + * VR模式切换 + * + * @param isVRMode + */ + public void onVRModeChanged(boolean isVRMode) { + if (mRootView != null) { + mRootView.setVisibility(isVRMode ? View.VISIBLE : View.GONE); + } + } + + /** + * 绘制地图起点终点 + * + * @param isAdd + * @param uuid + */ + private void setOrRemoveMapMaker(boolean isAdd, String uuid, double lat, double longi,int resourceId) { + if (isAdd) { + CallerLogger.INSTANCE.d(M_BUS + "setMapMaker= ", uuid + "=latitude=" + lat + ",longitude=" + longi); + + MogoMarkerOptions options = new MogoMarkerOptions() + .owner(BusConst.TYPE_MARKER_BUS_ORDER) + .anchor(0.5f, 0.5f) + .set3DMode(true) + .gps(true) + .controlAngle(true) + .icon3DRes(resourceId) + .latitude(lat) + .longitude(longi); + IMogoMarker marker = MogoMarkerManager.getInstance(AbsMogoApplication.getApp()) .addMarker(uuid, options); + marker.setRotateAngle(CallerHDMapManager.INSTANCE.getCenterLineInfo( + longi,lat,-1) + .getAngle() + .floatValue()); + }else { + CallerLogger.INSTANCE.d(M_BUS + "RemoveMapMaker=",uuid+"=latitude="+lat+",longitude="+longi); + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).removeMarkers(uuid); + } + } + + @Override + public void debugAutoPilotStatus(int status) { + mPresenter.debugAutoPilotStatus(status); + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.switch_line_btn) {//切换路线条件: 自动驾驶过程中,点击则toast提示:自动驾驶中,不可切换路线 + //本次行程未结束,不支持切换路线。点击则toast提示:当前行程未完成,不可切换路线 + if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() + == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + TipToast.longTip(getResources().getString(R.string.bus_switch_line_btn_warning1)); + return; + } + if (mCurrentStation > 0) { + TipToast.longTip(getResources().getString(R.string.bus_switch_line_btn_warning2)); + return; + } + Intent intent = new Intent(getContext(), BusSwitchLineActivity.class); + startActivity(intent); + } + } + +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java deleted file mode 100644 index 0f64136336..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/fragment/OchBusFragment.java +++ /dev/null @@ -1,360 +0,0 @@ -package com.mogo.och.bus.fragment; - -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.util.Log; -import android.view.View; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.map.marker.MogoMarkerOptions; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.R; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.och.bus.presenter.OchBusPresenter; -import com.mogo.och.bus.ui.BusSwitchLineActivity; -import com.mogo.och.bus.view.SlidePanelView; - -import org.w3c.dom.Text; - -import java.util.List; - - -/** - * 网约车小巴界面 - * - * @author tongchenfei - */ -public class OchBusFragment extends BaseOchBusTabFragment< OchBusFragment, OchBusPresenter > - implements SlidePanelView.OnSlidePanelMoveToEndListener, View.OnClickListener { - private static final String TAG = "OchBusFragment"; - - private TextView mCurrentStationName; - private TextView mStartStationFlag; - private TextView mNextStationName; - private TextView mEndStationFlag; -// private TextView mDebugArrive; - private TextView mSwitchLine; //切换路线 - private int mCurrentStation = 0; - - private View mBus; - - private OchBusStation startStation = null; - private OchBusStation endStation = null; - - @Override - public String getTagName() { - return "OchBusFragment"; - } - - @Override - protected void initViews() { - super.initViews(); - mBus = findViewById( R.id.module_och_bus_tag ); - mCurrentStationName = findViewById( R.id.module_och_bus_current_station ); - mStartStationFlag = findViewById( R.id.module_och_bus_start_station_tag ); - mNextStationName = findViewById( R.id.module_och_bus_order_end_station ); - mEndStationFlag = findViewById( R.id.module_och_bus_end_station_tag ); - mSwitchLine = findViewById(R.id.switch_line_btn); -// mDebugArrive = findViewById(R.id.module_och_bus_arrive_station); - - if ( DebugConfig.isDebug() ) { - mBus.setOnClickListener( view -> { - TipToast.shortTip( "重置了车站状态" ); - mPresenter.queryBusRoutes(); - } ); - - mBus.setOnLongClickListener( view -> { - getActivity().finish(); - return true; - } ); - //debug下调用测试面板 - mCurrentStationName.setOnLongClickListener(v -> { - debugTestBar(); - return true; - }); - } - - Logger.d( TAG, "initView: " + CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); - // 初始化的时候设置 UI 按钮状态 - switch ( CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() ) { - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE: - hideAutopilotBiz(); - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE: - showAutopilotBiz(); - onAutopilotStatusChanged( IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE ,false); - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING: - showAutopilotBiz(); - onAutopilotStatusChanged( IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING ,false); - break; - default: - break; - } - mSwitchLine.setOnClickListener(this); - } - - @Override - protected void debugArrivedStation() { - mPresenter.onAutopilotArriveAtStation(null); - } - - @NonNull - @Override - protected OchBusPresenter createPresenter() { - return new OchBusPresenter( this ); - } - - @Override - public void onResume() { - super.onResume(); - } - - /** - * 根据站点列表信息刷新车站面板,滑块面板 - * - * @param stationList 车站列表信息 - * @param currentStation 当前站点 - * @param nextStation 下个站点 - * @param isArrived 是否都站 - */ - public void refreshBusStations( List< OchBusStation > stationList, int currentStation, int nextStation ,boolean isArrived) { - mCurrentStation = currentStation; - if ( getActivity() == null ) { - return; - } - getActivity().runOnUiThread( () -> { - if ( stationList == null ) { - // 获取小巴数据失败 - return; - } - - // 渲染小巴路线数据 - renderCurrentStationStatus( stationList, currentStation, nextStation ,isArrived); - } ); - } - - /** - * 重新刷新站点信息 isArrived 是否到站 - */ - private void renderCurrentStationStatus( List< OchBusStation > stationList, int currentStation - , int nextStation ,boolean isArrived) { - Log.d("MapMaker= ","currentStation="+currentStation+",nextStation="+nextStation+"isArrived="+isArrived); - String currentStationName = null; - String nextStationName = null; - int startStationFlagVisibility = View.INVISIBLE; - int endStationFlagVisibility = View.INVISIBLE; - - boolean isArriveEndStation = false; - boolean isArriveAtStation = false; - boolean isArriveAtStartStation = false; - - // 获取当前站点的名称 - currentStationName = stationList.get( currentStation ).getName(); - - startStation = stationList.get(0); - endStation = stationList.get(stationList.size() - 1); - - // 是否到达起点 - if ( currentStation == 0 ) { - startStationFlagVisibility = View.VISIBLE; - isArriveAtStartStation = true; - mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_start)); -// Log.d("MapMaker= ","起点="); - setOrRemoveMapMaker(true, OchBusConst.BUS_START_MAP_MAKER,startStation.getLat() - ,startStation.getLon(),R.drawable.icon_station_start_end); - setOrRemoveMapMaker(true, OchBusConst.BUS_END_MAP_MAKER,endStation.getLat() - ,endStation.getLon(),R.drawable.icon_station_start_end); - } else if ( currentStation > 0 && currentStation < stationList.size() - 1 ) {// 是否到达站点 -// Log.d("MapMaker= ","中间="); - isArriveAtStation = true; -// mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_start1)); - setOrRemoveMapMaker(false, OchBusConst.BUS_START_MAP_MAKER,startStation.getLat() - ,startStation.getLon(),R.drawable.icon_station_start_end); - setOrRemoveMapMaker(true, OchBusConst.BUS_END_MAP_MAKER,endStation.getLat() - ,endStation.getLon(),R.drawable.icon_station_start_end); - } else if ( currentStation == stationList.size() - 1 ) {// 是否到达终点 -// Log.d("MapMaker= ","终点="); - isArriveEndStation = true; - nextStationName = "--"; - mStartStationFlag.setText(getResources().getString(R.string.bus_arrive_to_end_end)); - startStationFlagVisibility = View.VISIBLE; - endStationFlagVisibility = View.INVISIBLE; - setOrRemoveMapMaker(false, OchBusConst.BUS_START_MAP_MAKER,startStation.getLat() - ,startStation.getLon(),R.drawable.icon_station_start_end); - if (isArrived){ - setOrRemoveMapMaker(false, OchBusConst.BUS_END_MAP_MAKER,endStation.getLat() - ,endStation.getLon(),R.drawable.icon_station_start_end); - }else { - setOrRemoveMapMaker(true, OchBusConst.BUS_END_MAP_MAKER,endStation.getLat() - ,endStation.getLon(),R.drawable.icon_station_start_end); - } - } - - // 获取下一站点名称 - if ( nextStation > currentStation && nextStation <= stationList.size() - 1 ) { - nextStationName = stationList.get( nextStation ).getName(); - } - - // 是否到达终点 - if ( nextStation == stationList.size() - 1 ) { - endStationFlagVisibility = View.VISIBLE; - } - - // 重置滑动按钮文字 - if ( isArriveEndStation ) { - showSlidePanle( "单程结束" ); - } else if ( isArriveAtStartStation ) { - showSlidePanle( "滑动出发" ); - } else if ( isArriveAtStation ) { - showSlidePanle( "滑动出发" ); - } - - mCurrentStationName.setText( currentStationName ); - mNextStationName.setText( nextStationName ); - mStartStationFlag.setVisibility( startStationFlagVisibility ); - mEndStationFlag.setVisibility( endStationFlagVisibility ); - } - - public void hideOchBus() { -// tvNotice.setVisibility(View.GONE); - } - - @Override - public int getStationPanelViewId() { - return R.layout.fragment_och_bus; - } - - @Override - public void restartAutopilot() { - mPresenter.restartAutopilot(); - } - - @Override - public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { - return this; - } - - @Override - public void moveToEnd() { - // 开启自动驾驶到下一站 - mPresenter.autoDriveToNextStation(false); - } - - /** - * 设置自动驾驶可用状态 - */ - public void onAutopilotEnableChange( boolean isEnable ) { - if ( isEnable ) { - showAutopilotBiz(); - } else { - hideAutopilotBiz(); - } - } - - @Override - protected void onChangeOperationStatus() { - super.onChangeOperationStatus(); - mPresenter.onChangeOperationStatus(); - } - - /** - * 修改经营状态 - * @param launch true-收车,false-出车 - */ - public void changeOperationStatus( boolean launch ) { - isOperationStatus = launch; - if ( launch ) { - // 出车的时候重制站点状态 - mPresenter.queryBusRoutes(); - tvOperationStatus.setText( "收车" ); - showSlidePanle("滑动出发"); - showPanel(); - } else { - AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); - tvOperationStatus.setText("出车"); - hideSlidePanel(); - hidPanel(); - - //移除起点终点 - if (null != startStation){ - setOrRemoveMapMaker(false, OchBusConst.BUS_START_MAP_MAKER,startStation.getLat() - ,startStation.getLon(),R.drawable.icon_station_start_end); - } - if (null != endStation){ - setOrRemoveMapMaker(false, OchBusConst.BUS_END_MAP_MAKER,endStation.getLat() - ,endStation.getLon(),R.drawable.icon_station_start_end); - } - } - } - - /** - * VR模式切换 - * @param isVRMode - */ - public void onVRModeChanged(boolean isVRMode) { - if (mRootView != null) { - mRootView.setVisibility(isVRMode ? View.VISIBLE : View.GONE); - } - } - - /** - * 绘制地图起点终点 - * @param isAdd - * @param uuid - * @param iconId - */ - private void setOrRemoveMapMaker(boolean isAdd, String uuid,double lat,double longi, int iconId){ - if (isAdd){ - Log.d("setMapMaker= ",uuid+"=latitude="+lat+",longitude="+longi); - MogoMarkerOptions options = new MogoMarkerOptions(); - options.anchorColor("#000000");//不设置报错,暂时随便设置个 - options.setGps(true);//使用wgs 必须设置true - options.scale(0.15f); - Bitmap bitmap = BitmapFactory.decodeResource(AbsMogoApplication.getApp().getResources(), iconId, null); - options.icon(bitmap); - options.latitude(lat); - options.longitude(longi); - MogoApisHandler.getInstance().getApis().getMapServiceApi() - .getMarkerManager(AbsMogoApplication.getApp()).addMarker(uuid, options); - }else { - Log.d("RemoveMapMaker=",uuid+"=latitude="+lat+",longitude="+longi); - MogoApisHandler.getInstance().getApis().getMapServiceApi() - .getMarkerManager(AbsMogoApplication.getApp()).removeMarkers(uuid); - } - } - - public void debugAutoPilotStatus(int status){ - mPresenter.debugAutoPilotStatus(status); - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.switch_line_btn ){//切换路线条件: 自动驾驶过程中,点击则toast提示:自动驾驶中,不可切换路线 - //本次行程未结束,不支持切换路线。点击则toast提示:当前行程未完成,不可切换路线 - if (CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() - == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ - TipToast.longTip(getResources().getString(R.string.bus_switch_line_btn_warning1)); - return; - } - if (mCurrentStation > 0){ - TipToast.longTip(getResources().getString(R.string.bus_switch_line_btn_warning2)); - return; - } - Intent intent = new Intent(getContext(), BusSwitchLineActivity.class); - startActivity(intent); - } - } -} 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 new file mode 100644 index 0000000000..c0b80d394f --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/BusServiceManager.java @@ -0,0 +1,242 @@ +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.BusQueryLinesResponse; +import com.mogo.och.bus.bean.BusRoutesResponse; +import com.mogo.och.bus.bean.CarHeartbeatReqBean; +import com.mogo.och.bus.bean.BusOperationStatusRequest; +import com.mogo.och.bus.bean.BusOperationStatusResponse; +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.presenter.BusOrderModel; + +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.querySiteByCoordinate(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + , new BusQueryLineStationsRequest(BusOrderModel.getInstance().mLongitude + , BusOrderModel.getInstance().mLatitude,true)) + .subscribeOn( Schedulers.io() ).observeOn( AndroidSchedulers.mainThread() ) + .subscribe( getSubscribeImpl(context,callback,"querySiteByCoordinate")); + } + + /** + * 重置线路站点 + * @param context + * @param lineId + * @param callback + */ + public void resetStationStatus(Context context, int lineId, IBusServiceCallback callback){ + mService.resetStationStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken(),new BusResetDrivingLineRequest(lineId)) + .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context,callback,"debugResetStationStatus")); + } + + /** + * 离站上报 + * @param context + * @param seq + * @param siteId + * @param callback + */ + public void leaveStation(Context context, int seq, int siteId, IBusServiceCallback callback){ + mService.leaveStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new BusUpdateSiteStatusRequest(seq,siteId, BusOrderModel.getInstance().mLongitude + , BusOrderModel.getInstance().mLatitude)) + .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, IBusServiceCallback callback){ + mService.arriveSiteStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new BusUpdateSiteStatusRequest(seq,siteId + , BusOrderModel.getInstance().mLongitude, BusOrderModel.getInstance().mLatitude)) + .subscribeOn( Schedulers.io() ) + .observeOn( AndroidSchedulers.mainThread() ) + .subscribe(getSubscribeImpl(context,callback,"leaveStation")); + } + + /** + * 查询下车乘客 + * @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 callback + */ + public void stopTakeOrder(Context context, IBusServiceCallback callback){ + mService.stopTakeOrder(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new BusOperationStatusRequest(BusOrderModel.getInstance().mLongitude + , BusOrderModel.getInstance().mLatitude)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context,callback,"stopTakeOrder")); + } + + /** + * 出车 + * @param context + * @param callback + */ + public void startTakeOrder(Context context, IBusServiceCallback callback){ + mService.startTakeOrder(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken() + ,new BusOperationStatusRequest(BusOrderModel.getInstance().mLongitude + , BusOrderModel.getInstance().mLatitude)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getSubscribeImpl(context,callback,"startTakeOrder")); + } + + /** + * 查询出车/收车状态 + * @param context + * @param callback + */ + public void queryOperationStatus(Context context, IBusServiceCallback callback){ + mService.queryOperationStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() + ,MoGoAiCloudClientConfig.getInstance().getToken(),MoGoAiCloudClientConfig.getInstance().getSn()) + .subscribeOn( Schedulers.io() ) + .observeOn( AndroidSchedulers.mainThread() ) + .subscribe(getSubscribeImpl(context,callback,"queryOperationStatus")); + } + + /** + * 查询小巴车订单 + * @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")); + } + + /** + * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 + * @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/IBusApiService.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java new file mode 100644 index 0000000000..31a4af6df5 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusApiService.java @@ -0,0 +1,149 @@ +package com.mogo.och.bus.net; +import com.mogo.eagle.core.data.BaseData; +import com.mogo.och.bus.bean.BusOperationStatusRequest; +import com.mogo.och.bus.bean.BusOrdersResponse; +import com.mogo.och.bus.bean.BusQueryLinesResponse; +import com.mogo.och.bus.bean.BusRoutesResponse; +import com.mogo.och.bus.bean.CarHeartbeatReqBean; +import com.mogo.och.bus.bean.BusQueryLineStationsRequest; +import com.mogo.och.bus.bean.BusOperationStatusResponse; +import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; +import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; +import com.mogo.och.bus.bean.BusResetDrivingLineRequest; +import com.mogo.och.bus.bean.BusUpdateSiteStatusRequest; + +import io.reactivex.Observable; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Query; + +/** + * 小巴车相关接口 + * + * @author tongchenfei + *

+ * wiki: http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48970072 + */ +public interface IBusApiService { + /** + * 根据车机坐标获取所在区域全部站点信息 + * + * @param request 请求参数 + * @return 接口返回数据 + */ + @Headers( {"Content-Type:application/json;charset=UTF-8"} ) +// @POST( "/autopilot-car-hailing/line/v2/lineDataWithDriver/query" ) + @POST( "/autopilot-car-hailing/line/v2/driver/bus/lineDataWithDriver/query" ) +// @POST( "/mock/268/autopilot-car-hailing/bus/api/lineDataWithDriver/query" ) + Observable querySiteByCoordinate(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusQueryLineStationsRequest request); + + /** + * 重置巴士路线: 点击小巴车tab 或者出车后会使用 + * + * @param request 请求参数{"destLine":1,"sn":"F803EB2046PZD00229"} 这个接口是重置bus线路的, 不是重置线路中站点的 + * @return 返回值是重置后的车站列表 + */ + @Headers( {"Content-Type:application/json;charset=UTF-8"} ) +// @POST( "/autopilot-car-hailing/car/v2/bus/drivingLine/reset" ) + @POST( "/autopilot-car-hailing/car/v2/driver/bus/drivingLine/reset" ) +// @POST( "/mock/268/autopilot-car-hailing/bus/api/drivingLine/reset" ) + Observable resetStationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusResetDrivingLineRequest request); + + /** + * 离站,通知服务器 + * @param request + * @return + */ + @Headers({"Content-Type:application/json;charset=UTF-8"}) +// @POST("/autopilot-car-hailing/car/v2/bus/driving/away") + @POST("/autopilot-car-hailing/car/v2/driver/bus/driving/away") +// @POST("/mock/268/autopilot-car-hailing/bus/api/driving/away") + Observable leaveStation(@Header ("appId") String appId, @Header("ticket") String ticket, @Body BusUpdateSiteStatusRequest request); + + /** + * 到站 更新到站信息 + * @param request + * @return + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) +// @POST("/autopilot-car-hailing/order/v2/bus/driving/attachSite") + @POST("/autopilot-car-hailing/order/v2/driver/bus/driving/attachSite") +// @POST("/mock/268/autopilot-car-hailing/bus/api/driving/attachSite") + Observable< BaseData > arriveSiteStation(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusUpdateSiteStatusRequest request); + + + /** + * 到站查询下车乘客 + * @param request + * @return + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) +// @POST("/autopilot-car-hailing/order/v2/bus/driving/siteArrivedOrders") + @POST("/autopilot-car-hailing/order/v2/driver/bus/driving/siteArrivedOrders") +// @POST("/mock/268/autopilot-car-hailing/bus/api/driving/siteArrivedOrders") + Observable< QueryLeaveAwayPassengersResponse > queryStationLeaveAwayPassengers(@Header ("appId") String appId,@Header("ticket") String ticket,@Body QueryLeaveAwayPassengersRequest request); + + /** + * 出车 + * @param request + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) +// @POST("/autopilot-car-hailing/car/v2/bus/startTakeOrder") + @POST("/autopilot-car-hailing/car/v2/driver/bus/startTakeOrder") +// @POST("/mock/268/autopilot-car-hailing/bus/api/startTakeOrder") + Observable startTakeOrder(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusOperationStatusRequest request); + + /** + * 收车 + * @param request + * @return + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) +// @POST("/autopilot-car-hailing/car/v2/bus/stopTakeOrder") + @POST("/autopilot-car-hailing/car/v2/driver/bus/stopTakeOrder") +// @POST("/mock/268/autopilot-car-hailing/bus/api/stopTakeOrder") + Observable stopTakeOrder(@Header ("appId") String appId,@Header("ticket") String ticket,@Body BusOperationStatusRequest request); + + /** + * 查询小巴出车/收车状态 + * @param sn + * @return + */ + @Headers({"Content-type:application/json;charset=UTF-8"}) +// @GET("/autopilot-car-hailing/car/v2/bus/takeOrderStatus/query") + @GET("/autopilot-car-hailing/car/v2/driver/bus/takeOrderStatus/query") +// @GET("/mock/268/autopilot-car-hailing/bus/api/takeOrderStatus/query") + Observable queryOperationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + + @Headers({"Content-type:application/json;charset=UTF-8"}) +// @GET("/autopilot-car-hailing/order/v2/bus/servicingOrders/query") + @GET("/autopilot-car-hailing/order/v2/driver/bus/servicingOrders/query") +// @GET("/mock/268/autopilot-car-hailing/bus/api/servicingOrders/query") + Observable queryBusOrders(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); + + /** + * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 + * @param data + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) +// @POST( "/autopilot-car-hailing/location/v2/driver/heartbeat" ) + @POST( "/autopilot-car-hailing/location/v2/driver/bus/heartbeat" ) + Observable runCarHeartbeat(@Header ("appId") String appId,@Header("ticket") String ticket,@Body CarHeartbeatReqBean data); + + /** + * 查询车辆配置的所有路线 + * @param appId + * @param ticket + * @param sn + * @return + */ +// @GET("/autopilot-car-hailing/line/v2/driver/bindLine/query") + @GET("/autopilot-car-hailing/line/v2/driver/bus/bindLine/query") + Observable queryBusLines(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); +} + 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 new file mode 100644 index 0000000000..966a86d980 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IBusServiceCallback.java @@ -0,0 +1,15 @@ +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/net/IOchBusApiService.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IOchBusApiService.java deleted file mode 100644 index d3a65f66b1..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/IOchBusApiService.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.mogo.och.bus.net; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.bean.CarHeartbeatReqBean; -import com.mogo.och.bus.bean.OchBusOperationStatusRequest; -import com.mogo.och.bus.bean.OchBusQueryLineStationsRequest; -import com.mogo.och.bus.bean.OchBusOperationStatusResponse; -import com.mogo.och.bus.bean.OchBusOrdersResponse; -import com.mogo.och.bus.bean.OchBusRoutesResponse; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.bean.OchBusResetDrivingLineRequest; -import com.mogo.och.bus.bean.OchBusUpdateSiteStatusRequest; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; - -/** - * 小巴车相关接口 - * - * @author tongchenfei - *

- * wiki: http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48970072 - */ -public interface IOchBusApiService { - /** - * 根据车机坐标获取所在区域全部站点信息 - * - * @param request 请求参数 - * @return 接口返回数据 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/bus/api/lineDataWithDriver/query" ) - @POST( "/autopilot-car-hailing/line/v2/lineDataWithDriver/query" ) -// @POST( "/mock/268/autopilot-car-hailing/bus/api/lineDataWithDriver/query" ) - Observable< OchBusRoutesResponse > querySiteByCoordinate(@Header ("appId") String appId,@Header("ticket") String ticket,@Body OchBusQueryLineStationsRequest request); - - /** - * 重置巴士路线: 点击小巴车tab 或者出车后会使用 - * - * @param request 请求参数{"destLine":1,"sn":"F803EB2046PZD00229"} 这个接口是重置bus线路的, 不是重置线路中站点的 - * @return 返回值是重置后的车站列表 - */ - @Headers( {"Content-Type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/bus/api/drivingLine/reset" ) - @POST( "/autopilot-car-hailing/car/v2/bus/drivingLine/reset" ) -// @POST( "/mock/268/autopilot-car-hailing/bus/api/drivingLine/reset" ) - Observable< OchBusRoutesResponse > resetStationStatus(@Header ("appId") String appId, @Header("ticket") String ticket, @Body OchBusResetDrivingLineRequest request); - - /** - * 离站,通知服务器 - * @param request - * @return - */ - @Headers({"Content-Type:application/json;charset=UTF-8"}) -// @POST("/autopilot-car-hailing/bus/api/driving/away") - @POST("/autopilot-car-hailing/car/v2/bus/driving/away") -// @POST("/mock/268/autopilot-car-hailing/bus/api/driving/away") - Observable< OchBusRoutesResponse > leaveStation(@Header ("appId") String appId,@Header("ticket") String ticket,@Body OchBusUpdateSiteStatusRequest request); - - /** - * 到站 更新到站信息 - * @param request - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @POST("/autopilot-car-hailing/bus/api/driving/attachSite") - @POST("/autopilot-car-hailing/order/v2/bus/driving/attachSite") -// @POST("/mock/268/autopilot-car-hailing/bus/api/driving/attachSite") - Observable< BaseData > arriveSiteStation(@Header ("appId") String appId,@Header("ticket") String ticket,@Body OchBusUpdateSiteStatusRequest request); - - - /** - * 到站查询下车乘客 - * @param request - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @POST("/autopilot-car-hailing/bus/api/driving/siteArrivedOrders") - @POST("/autopilot-car-hailing/order/v2/bus/driving/siteArrivedOrders") -// @POST("/mock/268/autopilot-car-hailing/bus/api/driving/siteArrivedOrders") - Observable< QueryLeaveAwayPassengersResponse > queryStationLeaveAwayPassengers(@Header ("appId") String appId,@Header("ticket") String ticket,@Body QueryLeaveAwayPassengersRequest request); - - /** - * 出车 - * @param request - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @POST("/autopilot-car-hailing/bus/api/startTakeOrder") - @POST("/autopilot-car-hailing/car/v2/bus/startTakeOrder") -// @POST("/mock/268/autopilot-car-hailing/bus/api/startTakeOrder") - Observable startTakeOrder(@Header ("appId") String appId,@Header("ticket") String ticket,@Body OchBusOperationStatusRequest request); - - /** - * 收车 - * @param request - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @POST("/autopilot-car-hailing/bus/api/stopTakeOrder") - @POST("/autopilot-car-hailing/car/v2/bus/stopTakeOrder") -// @POST("/mock/268/autopilot-car-hailing/bus/api/stopTakeOrder") - Observable stopTakeOrder(@Header ("appId") String appId,@Header("ticket") String ticket,@Body OchBusOperationStatusRequest request); - - /** - * 查询小巴出车/收车状态 - * @param sn - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @GET("/autopilot-car-hailing/bus/api/takeOrderStatus/query") - @GET("/autopilot-car-hailing/car/v2/bus/takeOrderStatus/query") -// @GET("/mock/268/autopilot-car-hailing/bus/api/takeOrderStatus/query") - Observable queryOperationStatus(@Header ("appId") String appId,@Header("ticket") String ticket,@Query("sn") String sn); - - @Headers({"Content-type:application/json;charset=UTF-8"}) -// @GET("/autopilot-car-hailing/bus/api/servicingOrders/query") - @GET("/autopilot-car-hailing/order/v2/bus/servicingOrders/query") -// @GET("/mock/268/autopilot-car-hailing/bus/api/servicingOrders/query") - Observable queryBusOrders(@Header ("appId") String appId,@Header("ticket") String ticket,@Query("sn") String sn); - - /** - * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) -// @POST( "/autopilot-car-hailing/api/v1/driver/heartbeat" ) - @POST( "/autopilot-car-hailing/location/v2/driver/heartbeat" ) - Observable runCarHeartbeat(@Header ("appId") String appId,@Header("ticket") String ticket,@Body CarHeartbeatReqBean data); - - @GET("/autopilot-car-hailing/line/v2/driver/bindLine/query") - Observable queryBusLines(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("sn") String sn); -} - diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/OCHBusServiceManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/OCHBusServiceManager.java deleted file mode 100644 index 3fc23505e5..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/OCHBusServiceManager.java +++ /dev/null @@ -1,275 +0,0 @@ -package com.mogo.och.bus.net; - -import android.content.Context; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -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.Logger; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.bean.CarHeartbeatReqBean; -import com.mogo.och.bus.bean.OchBusOperationStatusRequest; -import com.mogo.och.bus.bean.OchBusOperationStatusResponse; -import com.mogo.och.bus.bean.OchBusOrdersResponse; -import com.mogo.och.bus.bean.OchBusQueryLineStationsRequest; -import com.mogo.och.bus.bean.OchBusResetDrivingLineRequest; -import com.mogo.och.bus.bean.OchBusRoutesResponse; -import com.mogo.och.bus.bean.OchBusUpdateSiteStatusRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersRequest; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.och.bus.presenter.OchBusOrderModel; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; - -/** - * @author: wangmingjun - * @date: 2021/10/20 - */ -public class OCHBusServiceManager { - - private static final String TAG = OCHBusServiceManager.class.getSimpleName(); - - private IOchBusApiService mService; - private String baseUrl = OchBusConst.getBaseUrl(); - - private static final class SingletonHolder { - private static final OCHBusServiceManager INSTANCE = new OCHBusServiceManager(); - } - - public static OCHBusServiceManager getInstance(){ - return SingletonHolder.INSTANCE; - } - - private OCHBusServiceManager(){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - - /** - * 查询小巴车线路 - * @param context - * @param callback - */ - public void queryBusRoutes(Context context,OCHServiceCallback callback) { - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - //获取当前高德坐标 - - mService.querySiteByCoordinate(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - , new OchBusQueryLineStationsRequest(OchBusOrderModel.getInstance().mLongitude - ,OchBusOrderModel.getInstance().mLatitude,true)) - .subscribeOn( Schedulers.io() ).observeOn( AndroidSchedulers.mainThread() ) - .subscribe( getSubscribeImpl(context,callback,"querySiteByCoordinate")); - } - - /** - * 重置线路站点 - * @param context - * @param lineId - * @param callback - */ - public void resetStationStatus(Context context, int lineId, OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - mService.resetStationStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),new OchBusResetDrivingLineRequest(lineId)) - .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"debugResetStationStatus")); - } - - /** - * 离站上报 - * @param context - * @param seq - * @param siteId - * @param callback - */ - public void leaveStation(Context context,int seq,int siteId,OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - mService.leaveStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new OchBusUpdateSiteStatusRequest(seq,siteId,OchBusOrderModel.getInstance().mLongitude - ,OchBusOrderModel.getInstance().mLatitude)) - .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,OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - mService.arriveSiteStation(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new OchBusUpdateSiteStatusRequest(seq,siteId - ,OchBusOrderModel.getInstance().mLongitude,OchBusOrderModel.getInstance().mLatitude)) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"leaveStation")); - } - - /** - * 查询下车乘客 - * @param context - * @param seq - * @param siteId - * @param callback - */ - public void queryStationLeaveAwayPassengers(Context context,int seq,int siteId - ,OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - 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 callback - */ - public void stopTakeOrder(Context context,OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - mService.stopTakeOrder(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new OchBusOperationStatusRequest(OchBusOrderModel.getInstance().mLongitude - ,OchBusOrderModel.getInstance().mLatitude)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"stopTakeOrder")); - } - - /** - * 出车 - * @param context - * @param callback - */ - public void startTakeOrder(Context context,OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - mService.startTakeOrder(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken() - ,new OchBusOperationStatusRequest(OchBusOrderModel.getInstance().mLongitude - ,OchBusOrderModel.getInstance().mLatitude)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"startTakeOrder")); - } - - /** - * 查询出车/收车状态 - * @param context - * @param callback - */ - public void queryOperationStatus(Context context,OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - mService.queryOperationStatus(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn( Schedulers.io() ) - .observeOn( AndroidSchedulers.mainThread() ) - .subscribe(getSubscribeImpl(context,callback,"queryOperationStatus")); - } - - /** - * 查询小巴车订单 - * @param context - * @param callback - */ - public void queryBusOrders(Context context, OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create( IOchBusApiService.class, baseUrl); - } - 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, OCHServiceCallback callback){ - if (mService == null){ - mService = MogoApisHandler.getInstance().getApis().getNetworkApi().create(IOchBusApiService.class,baseUrl); - } - mService.queryBusLines(MoGoAiCloudClientConfig.getInstance().getServiceAppId() - ,MoGoAiCloudClientConfig.getInstance().getToken(),MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context,callback,"queryBusLines")); - } - - /** - * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 - * @param context - * @param lon - * @param lat - * @param callback - */ - public void runCarHeartbeat(Context context, double lon, double lat, - OCHServiceCallback callback) { - if ( mService == null ) { - mService = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(IOchBusApiService.class, baseUrl); - } - 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, OCHServiceCallback callback, String apiName){ - return new SubscribeImpl(RequestOptions.create(context)){ - @Override - public void onSuccess(T o) { - super.onSuccess(o); - Logger.e(TAG,apiName + ": onSuccess() " + o.msg); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - Logger.e(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); - Logger.e(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/OCHServiceCallback.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/OCHServiceCallback.java deleted file mode 100644 index a243248570..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/net/OCHServiceCallback.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.bus.net; - -/** - * @author: wangmingjun - * @date: 2021/10/20 - */ -public interface OCHServiceCallback< 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/BusLineModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLineModel.java new file mode 100644 index 0000000000..84f715c78e --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLineModel.java @@ -0,0 +1,77 @@ +package com.mogo.och.bus.presenter; + +import android.content.Context; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; +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; + +/** + * @author: wangmingjun + * @date: 2022/2/9 + */ +public class BusLineModel { + private static volatile BusLineModel sInstance; + private Context mContext; + private IBusLinesCallback mBusLinesCallback; + public static BusLineModel getInstance() { + if ( sInstance == null ) { + synchronized ( BusLineModel.class ) { + if ( sInstance == null ) { + sInstance = new BusLineModel(); + } + } + } + return sInstance; + } + private BusLineModel() { + + } + public void init() { + mContext = AbsMogoApplication.getApp(); + } + public void setBusLinesCallback(IBusLinesCallback callback){ + mBusLinesCallback = callback; + } + public void queryBusLines(){ + BusServiceManager.getInstance().queryBusLines(mContext, new IBusServiceCallback() { + @Override + public void onSuccess(BusQueryLinesResponse data) { + if (null == data && mBusLinesCallback != null) { + mBusLinesCallback.onBusLinesChange(null); + return; + } + + if (mBusLinesCallback != null){ + mBusLinesCallback.onBusLinesChange(data); + } + } + + @Override + public void onFail(String failMsg) { + + } + }); + } + + public void commitSwitchLineId(int lineId){ + BusServiceManager.getInstance().resetStationStatus(mContext,lineId, new IBusServiceCallback() { + @Override + public void onSuccess(BusRoutesResponse o) { + if (mBusLinesCallback != null){ + mBusLinesCallback.onChangeLineIdSuccess(); + } + } + + @Override + public void onFail(String failMsg) { + TipToast.longTip("切换路线失败"); + } + }); + } + +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java new file mode 100644 index 0000000000..04bf358f4e --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusLinePresenter.java @@ -0,0 +1,74 @@ +package com.mogo.och.bus.presenter; + +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; + +import com.mogo.commons.mvp.Presenter; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.bean.BusQueryLinesResponse; +import com.mogo.och.bus.callback.IBusLinesCallback; +import com.mogo.och.bus.ui.BusSwitchLineView; + +/** + * @author: wangmingjun + * @date: 2022/2/9 + */ +public class BusLinePresenter extends Presenter implements IBusLinesCallback { + + public BusLinePresenter(BusSwitchLineView view) { + super(view); + BusLineModel.getInstance().init(); + BusOrderModel.getInstance().init(); + } + + @Override + public void onCreate(@NonNull LifecycleOwner owner) { + super.onCreate(owner); + initListener(); + } + + private void initListener() { + BusLineModel.getInstance().setBusLinesCallback(this); + } + + private void runOnUIThread( Runnable executor ) { + if ( executor == null ) { + return; + } + if ( Looper.myLooper() != Looper.getMainLooper() ) { + UiThreadHandler.post( executor ); + } else { + executor.run(); + } + } + + @Override + public void onBusLinesChange(BusQueryLinesResponse lines) { + runOnUIThread(() -> mView.onBusLinesChange(lines)); + } + + @Override + public void onChangeLineIdSuccess() { + runOnUIThread(() -> mView.onChangeLineIdSuccess()); + } + + public void queryBusLines(){ + BusLineModel.getInstance().queryBusLines(); + } + + public void commitSwitchLineId(int lineId){ + BusLineModel.getInstance().commitSwitchLineId(lineId); + } + + public void queryBusRoutes(){ + BusOrderModel.getInstance().queryBusRoutes(); + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) { + super.onDestroy(owner); + BusLineModel.getInstance().setBusLinesCallback(null); + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java new file mode 100644 index 0000000000..73127227d9 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusModelLoopManager.java @@ -0,0 +1,54 @@ +package com.mogo.och.bus.presenter; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.bus.constant.BusConst; + +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +/** + * Created on 2021/11/22 + * + * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) + */ +public class BusModelLoopManager { + + private static final String TAG = BusModelLoopManager.class.getSimpleName(); + + private static final class SingletonHolder { + private static final BusModelLoopManager INSTANCE = new BusModelLoopManager(); + } + + public static BusModelLoopManager getInstance() { + return SingletonHolder.INSTANCE; + } + + private Disposable mHeartbeatDisposable; //心跳轮询 + + public void startHeartbeatLoop() { + if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_BUS + TAG, "startHeartbeatLoop()"); + mHeartbeatDisposable = Observable.interval(BusConst.LOOP_DELAY, + BusConst.LOOP_PERIOD_60S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> BusOrderModel.getInstance().runCarHeartbeat()); + } + + public void stopHeartbeatLoop() { + if (mHeartbeatDisposable != null) { + CallerLogger.INSTANCE.i(M_BUS + TAG, "stopHeartbeatLoop()"); + mHeartbeatDisposable.dispose(); + mHeartbeatDisposable = null; + } + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusOrderModel.java new file mode 100644 index 0000000000..ded7d29d63 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusOrderModel.java @@ -0,0 +1,837 @@ +package com.mogo.och.bus.presenter; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; +import static com.mogo.och.bus.constant.BusConst.STATION_STATUS_STOPPED; + +import android.content.Context; +import android.location.Location; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.commons.voice.AIAssist; +import com.mogo.eagle.core.data.BaseData; +import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; +import com.mogo.eagle.core.utilcode.util.NetworkUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.navi.IMogoCarLocationChangedListener2; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.bus.bean.BusOperationStatusResponse; +import com.mogo.och.bus.bean.BusOrderBean; +import com.mogo.och.bus.bean.BusOrdersResponse; +import com.mogo.och.bus.bean.BusRoutesResponse; +import com.mogo.och.bus.bean.BusRoutesResult; +import com.mogo.och.bus.bean.BusStationBean; +import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; +import com.mogo.och.bus.callback.ICarOperationStatusCallback; +import com.mogo.och.bus.callback.IBusControllerStatusCallback; +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.util.BusAnalyticsUtil; +import com.mogo.och.bus.util.PinYinUtil; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.exceptions.UndeliverableException; +import io.reactivex.functions.Consumer; +import io.reactivex.plugins.RxJavaPlugins; +import io.reactivex.schedulers.Schedulers; +import mogo.telematics.pad.MessagePad; + +/** + * @author congtaowang + * @since 2021/3/23 + * + * 小巴订单管理 + */ +public class BusOrderModel { + private final String TAG = BusOrderModel.class.getSimpleName(); + private int currentLineId = -1; + private int currentStationIndex = 0; //因为服务端和前台对于当前站不一致,所以设置两个current index, 一个用于前台展示, 一个用于服务端接口请求 + private int backgroundCurrentStationIndex = 0;//A->B 此处值是A站点索引 + /** + * 运营状态、后端更具运营状态来判断车辆是否派单 + */ + private boolean mIsWorking = false; + private static volatile BusOrderModel sInstance; + 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; + /** + * 用来表示是否正在开往下一站 + */ + private boolean isGoingToNextStation = false; + // 运营类型 + private static final int VEHICLE_TYPE = 10; + private static final int MSG_QUERY_BUS_STATION = 1001; + private static final long QUERY_BUS_STATION_DELAY = 5000; + + private ICarOperationStatusCallback carOperationStatusCallback; + private IRefreshBusStationsCallback refreshBusStationsCallback; + private ISlidePannelHideCallback slidePannelHideCallback; + private IBusControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 + + private boolean hadQueryLeaveAwayPassager = false; + + private final Handler handler = new Handler(new Handler.Callback() { + @Override + public boolean handleMessage(Message msg) { + if ( msg.what == MSG_QUERY_BUS_STATION ) { + BusOrderModel.getInstance().queryBusRoutes(); + return true; + } + return false; + } + }); + + public static BusOrderModel getInstance() { + if ( sInstance == null ) { + synchronized ( BusOrderModel.class ) { + if ( sInstance == null ) { + sInstance = new BusOrderModel(); + } + } + } + return sInstance; + } + + private BusOrderModel() { + + } + + public void init() { + mContext = AbsMogoApplication.getApp(); + // 2021/10/20 衡阳小巴业务,使用LenovoPad时需要此app自己获取坐标并上传 + String productFlavor = DebugConfig.getProductFlavor(); + if (productFlavor != null && productFlavor.contains("fPadLenovoOchBus")) { + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() + .registerCarLocationChangedListener(TAG, mCarLocationChangedListener2); + MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener ); + } + + //2022.1.28 + // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 + // The exception could not be delivered to the consumer because it has already canceled/disposed + // the flow or the excTeption has nowhere to go to begin with + RxJavaPlugins.setErrorHandler(new Consumer() { + @Override + public void accept(Throwable e) { + if (e instanceof UndeliverableException) { + e = e.getCause(); + CallerLogger.INSTANCE.d(M_BUS + TAG,"UndeliverableException"); + } + if ((e instanceof IOException)) {// + // fine, irrelevant network problem or API that throws on cancellation + CallerLogger.INSTANCE.d(M_BUS + TAG,"IOException"); + return; + } + if (e instanceof InterruptedException) { + // fine, some blocking code was interrupted by a dispose call + CallerLogger.INSTANCE.d(M_BUS + TAG,"InterruptedException"); + return; + } + if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) { + // that's likely a bug in the application + CallerLogger.INSTANCE.d(M_BUS + TAG,"NullPointerException or IllegalArgumentException"); + Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); + return; + } + if (e instanceof IllegalStateException) { + // that's a bug in RxJava or in a custom operator + CallerLogger.INSTANCE.d(M_BUS + TAG,"IllegalStateException"); + Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); + return; + } + CallerLogger.INSTANCE.d(M_BUS + TAG,"Undeliverable exception"); + } + }); + + //2021/10/20 轮询小巴车订单,暂时用来播报 + startLoopBusOrders(); + } + + public void setCarOperationStatusCallback(ICarOperationStatusCallback callback){ + this.carOperationStatusCallback = callback; + } + + public void setRefreshBusStationsCallback(IRefreshBusStationsCallback callback){ + this.refreshBusStationsCallback = callback; + } + + public void setSlidePannelHideCallback(ISlidePannelHideCallback callback){ + this.slidePannelHideCallback = callback; + } + + public void setControllerStatusCallback(IBusControllerStatusCallback callback) { + this.mControllerStatusCallback = callback; + } + + /** + * 轮询bus待服务订单 + */ + private void startLoopBusOrders() { + if (mBusOrdersDisposable != null && !mBusOrdersDisposable.isDisposed()) { + return; + } + mBusOrdersDisposable = Observable.interval(BusConst.LOOP_DELAY, + BusConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> queryBusOrders()); + } + + private void queryBusOrders() { + BusServiceManager.getInstance().queryBusOrders(mContext, new IBusServiceCallback() { + @Override + public void onSuccess(BusOrdersResponse o) { + if (o.data != null && o.data.orders != null && o.data.orders.size() > 0) { + CallerLogger.INSTANCE.d( M_BUS + TAG, "获取到bus订单数据: " + o.data.orders.toString() ); + List busOrders = o.data.orders; + for (int i = 0; i < busOrders.size(); i++) { + BusOrderBean order = busOrders.get(i); + if (order == null) return; + if (TextUtils.isEmpty(order.getPassengerPhone())) return; + if (prevBusOrderNos.contains(order.getOrderNo())) continue; + try { + String tailNum = null; + try { + tailNum = order.getPassengerPhone().substring(order.getPassengerPhone().length() - 4); + } catch (Exception e) { + e.printStackTrace(); + tailNum = order.getPassengerPhone(); + } + CallerLogger.INSTANCE.d(M_BUS + TAG, "TTS:" + tailNum); + AIAssist.getInstance(mContext).speakTTSVoice("接到新订单,尾号 " + tailNum + + " 上车站点为 " + order.getStartStationName()); + prevBusOrderNos.add(order.getOrderNo()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + @Override + public void onFail(String failMsg) { + + } + }); + } + + public void release(){ + if (mBusOrdersDisposable != null) { + mBusOrdersDisposable.dispose(); + } + startOrStopOrderLoop(false); + MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); + + // 注销到达起始站围栏监听 + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() + .unregisterCarLocationChangedListener(TAG, mCarLocationChangedListener2); + } + + private Object readResolve() { + // 阻止反序列化,必须实现 Serializable 接口 + return sInstance; + } + + private IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { + // VR mode变更回调 + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (StatusDescriptor.VR_MODE == descriptor) { + if (mControllerStatusCallback != null) { + mControllerStatusCallback.onVRModeChanged(isTrue); + } + } + } + }; + + // 自车定位 + private final IMogoCarLocationChangedListener2 mCarLocationChangedListener2 = new IMogoCarLocationChangedListener2() { + + @Override + public void onCarLocationChanged2( Location location ) { +// CallerLogger.INSTANCE.d(M_BUS + TAG,"location = "+location.getLongitude()+","+location.getLatitude()); + mLongitude = location.getLongitude(); + mLatitude = location.getLatitude(); + if (mControllerStatusCallback != null) { + mControllerStatusCallback.onCarLocationChanged(location); + } + } + }; + + /** + * 查询小巴路线 + */ + public void queryBusRoutes() { + CallerLogger.INSTANCE.d(M_BUS + TAG, "查询小巴路线"); + BusServiceManager.getInstance().queryBusRoutes(mContext, new IBusServiceCallback() { + @Override + public void onSuccess(BusRoutesResponse data) { + if ( data == null + || data.getResult() == null + || data.getResult().getSites() == null + || data.getResult().getSites().isEmpty() ) { + return; + } + CallerLogger.INSTANCE.d(M_BUS + TAG, "获取到小巴路线数据: " + data ); + renderBusStationsStatus( data.getResult()); + } + @Override + public void onFail(String failMsg) { + // 重复请求小巴路线,直至成功 + queryBusStationDelay(); + } + }); + + } + + /** + * 测试、重置站点状态 + */ + public void debugResetStationStatus() { + CallerLogger.INSTANCE.d( M_BUS + TAG, "测试、重置站点状态"); + BusServiceManager.getInstance().resetStationStatus(mContext, currentLineId + , new IBusServiceCallback() { + @Override + public void onSuccess(BusRoutesResponse o) { + CallerLogger.INSTANCE.d(M_BUS + TAG, "获取到小巴路线数据: " + o); + isGoingToNextStation = false; + if (o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty()) { + return; + } + renderBusStationsStatus(o.getResult()); + } + + @Override + public void onFail(String failMsg) { + // 重复请求小巴路线,直至成功 + queryBusStationDelay(); + } + }); + + } + + /** + * 离站上报 + */ + public void leaveStation(boolean isOneWayOver,boolean isRestart){ + CallerLogger.INSTANCE.d(M_BUS + TAG,"leaveStation-backgroundCurrentStationIndex = "+backgroundCurrentStationIndex); + BusServiceManager.getInstance().leaveStation(mContext, stationList.get(backgroundCurrentStationIndex).getSeq() + , stationList.get(backgroundCurrentStationIndex).getSiteId(), new IBusServiceCallback() { + @Override + public void onSuccess(BusRoutesResponse o) { + if ( o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty() ) { + return; + } + if (!isOneWayOver){ + CallerLogger.INSTANCE.d( M_BUS + TAG, "自动驾驶开启开往下一站====" ); + //需要更改当前站和下一站的状态 然后渲染 + RenderLeaveStationSuccess(o.getResult(),isRestart); + }else { + CallerLogger.INSTANCE.d( M_BUS + TAG, "单程真的结束了====" ); + isGoingToNextStation = false; + currentStationIndex = 0; + backgroundCurrentStationIndex = 0; + CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); + queryBusRoutes(); + } + } + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + TipToast.shortTip("网络异常,请稍后重试"); + } + } + }); + } + + /** + * 离站上报成功后渲染站点 + * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, + * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理,不能直接渲染 + */ + private void RenderLeaveStationSuccess(BusRoutesResult result, boolean isRestart) { + renderBusStationsStatus(result); + if (slidePannelHideCallback != null) { + slidePannelHideCallback.hideSlidePanel(); + } + //开启自动驾驶 + startAutopilot(isRestart); + if (isGoingToNextStation) { + // 为了避免恢复自动驾驶时重复的接口请求 + return; + } + isGoingToNextStation = true; + AIAssist.getInstance( mContext ).speakTTSVoice( "欢迎乘坐’蘑菇车联‘无人驾驶小巴车,请您坐好,注意乘车安全,行程即将开始" ); + } + + /** + * 开启自动驾驶 + * @param isRestart + */ + private void startAutopilot(boolean isRestart) { + BusStationBean currentStation = stationList.get( currentStationIndex -1); + BusStationBean nextStation = stationList.get( currentStationIndex); + +// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE +// == CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()) { +// TipToast.shortTip("自动驾驶状态为不可用!"); +// } + AutopilotControlParameters currentAutopilot = new AutopilotControlParameters(); + currentAutopilot.isSpeakVoice = !isRestart; + currentAutopilot.startName = PinYinUtil.getPinYinHeadChar(currentStation.getName()); + currentAutopilot.endName = PinYinUtil.getPinYinHeadChar(nextStation.getName()); + currentAutopilot.startLatLon = new AutopilotControlParameters + .AutoPilotLonLat( currentStation.getLat(), currentStation.getLon() ); + currentAutopilot.endLatLon = new AutopilotControlParameters + .AutoPilotLonLat( nextStation.getLat(), nextStation.getLon() ); + currentAutopilot.vehicleType = VEHICLE_TYPE; + CallerLogger.INSTANCE.d( M_BUS + TAG, "开启自动驾驶====" + currentAutopilot.toString() + +" startLatLon="+currentStation.getName()+",endLatLon="+nextStation.getName()); + CallerAutoPilotManager.INSTANCE.startAutoPilot(currentAutopilot); + + triggerStartServiceEvent(false); + + if (mControllerStatusCallback != null) { + mControllerStatusCallback.startOpenAutopilot(); + } + } + + /** + * 到站后重置站点状态 + */ + private void arriveSiteStation(boolean isRestart) { + CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation-currentStationIndex = "+currentStationIndex); + BusServiceManager.getInstance().arriveSiteStation(mContext + , stationList.get(currentStationIndex).getSeq(), stationList.get(currentStationIndex).getSiteId() + , new IBusServiceCallback() { + @Override + public void onSuccess(BaseData o) { + CallerLogger.INSTANCE.d(M_BUS + TAG,"arriveSiteStation success"); + if (!isRestart){ + renderArriveBusStation(); + } + } + + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + TipToast.shortTip("网络异常,请稍后重试"); + } + } + }); + } + + private void renderArriveBusStation() { + List site = busRoutesResult.getSites(); + if (site != null && site.size() > 0){ + backgroundCurrentStationIndex = currentStationIndex; + if (refreshBusStationsCallback != null){ + refreshBusStationsCallback.refreshBusStations(stationList, currentStationIndex + , getNextStopStation(),true); + } + } + } + + /** + * 查询到站下车乘客 + */ + private void queryStationLeaveAwayPassengers() { + CallerLogger.INSTANCE.d( M_BUS + TAG, "查询到站下车乘客"); + + BusServiceManager.getInstance().queryStationLeaveAwayPassengers(mContext + , stationList.get(currentStationIndex).getSeq(), stationList.get(currentStationIndex).getSiteId() + , new IBusServiceCallback() { + @Override + public void onSuccess(QueryLeaveAwayPassengersResponse o) { + hadQueryLeaveAwayPassager = true; + arriveSiteStation(false); + playLeavePassengersMsg( o ); + queryBusOrders(); + } + + @Override + public void onFail(String failMsg) { + hadQueryLeaveAwayPassager = true; + arriveSiteStation(false); + } + }); + } + + /** + * 收车 + */ + public void stopTakeOrder(){ + BusServiceManager.getInstance().stopTakeOrder(mContext, new IBusServiceCallback() { + @Override + public void onSuccess(BaseData o) { + mIsWorking = !mIsWorking; + carOperationStatusCallback.changeOperationStatus(isWorking()); + startOrStopOrderLoop(mIsWorking); + } + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + TipToast.shortTip("网络异常,请稍后重试"); + }else { + TipToast.shortTip(failMsg); + } + } + }); + } + + /** + * 出车 + */ + public void startTakeOrder(){ + BusServiceManager.getInstance().startTakeOrder(mContext, new IBusServiceCallback() { + @Override + public void onSuccess(BaseData o) { + mIsWorking = !mIsWorking; + startOrStopOrderLoop(mIsWorking); + if ( stationList != null && stationList.size() > 0 ) { + AIAssist.getInstance( mContext ).speakTTSVoice( "车辆已整备完毕,请前往" + + stationList.get( currentStationIndex ).getName() + "站点" ); + } + carOperationStatusCallback.changeOperationStatus(isWorking()); + queryBusRoutes(); + } + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + TipToast.shortTip("网络异常,请稍后重试"); + }else { + TipToast.shortTip(failMsg); + } + } + }); + } + + /** + * 查询运营状态 + */ + public void queryOperationStatus() { + CallerLogger.INSTANCE.d( M_BUS + TAG, "查询运营状态"); + BusServiceManager.getInstance().queryOperationStatus(mContext + , new IBusServiceCallback() { + @Override + public void onSuccess(BusOperationStatusResponse o) { + if ( o.data != null ) { + mIsWorking = o.data.serviceStatus == 1; + CallerLogger.INSTANCE.d( M_BUS + TAG, "查询运营状态 result.status: " + o.data.serviceStatus); + startOrStopOrderLoop(mIsWorking); + } + carOperationStatusCallback.changeOperationStatus(isWorking()); + } + @Override + public void onFail(String failMsg) { + if (!NetworkUtils.isConnected(mContext)) { + TipToast.shortTip("网络异常,请稍后重试"); + } + } + }); + } + + /** + * 开启自动驾驶到下一站 + */ + public void autoDriveToNextStation( boolean isRestart ) { + if ( backgroundCurrentStationIndex >= stationList.size() - 1 ) { + // 当前站是最后一站,结束当前行程 + travelOver(); + return; + } + leaveStation(false,isRestart); + } + + /** + * 渲染站点信息 + * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, + * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理current index,不能直接渲染 + * @param result + */ + private void renderBusStationsStatus(BusRoutesResult result) { + if (result == null) return; + busRoutesResult = result; + List site = result.getSites(); + currentLineId = result.getLineId(); + stationList.clear(); + stationList.addAll( site ); + for ( int i = 0; i < stationList.size(); i++ ) { + BusStationBean s = stationList.get( i ); + // 是否正在开往下一站 + if ( s.isLeaving()) { + isGoingToNextStation = true; + } + // 当前站点信息 + if (s.getDrivingStatus() == STATION_STATUS_STOPPED ) { + currentStationIndex = i; + break; + } + } + backgroundCurrentStationIndex = currentStationIndex; + BusStationBean currentStation = stationList.get(currentStationIndex); + CallerLogger.INSTANCE.d( M_BUS + TAG, "渲染站点信息服务端currentStationIndex="+currentStationIndex + +" isLeaving()="+currentStation.isLeaving()); + //当前站点是始发站,告诉服务端到达始发站。 如果没有这个节点, 服务器不知道始发站到达状态 + // ,订单开始站下在始发站的状态流转有问题 + if (currentStationIndex == 0 && !currentStation.isLeaving()){ + arriveSiteStation(true); + } + // 美化是否开始 + if (FunctionBuildConfig.isDemoMode && ((currentStationIndex > 0 + && currentStationIndex < stationList.size()-1) + || (stationList.get(0).isLeaving() || stationList.get(stationList.size() -1).isLeaving()))){//行驶过程中设置美化 + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; + CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为true(每次滑动出发)"); + } + if (refreshBusStationsCallback != null){ + if (currentStation.isLeaving()){//如果服务端的当前站是leaving状态,展示当前站需要+1 + currentStationIndex ++; + refreshBusStationsCallback.refreshBusStations(stationList + , currentStationIndex, getNextStopStation(),false); + }else{ + refreshBusStationsCallback.refreshBusStations(stationList + , currentStationIndex, getNextStopStation(),true); + } + } + if ( currentStation.isLeaving() && slidePannelHideCallback != null) { + slidePannelHideCallback.hideSlidePanel(); + } + } + + /** + * 重置下一站 + * + * @param lastStopStation + */ + private void resetNextStopStation( int lastStopStation ) { + CallerLogger.INSTANCE.d( M_BUS + TAG, "重置下一站"); + int nextStopStation = getNextStopStation(); + if ( nextStopStation < 0 ) { + return; + } + if ( lastStopStation <= nextStopStation || nextStopStation <= currentStationIndex ) { + return; + } + if ( CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() + == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING ) { + // 自动驾驶中动态设置下一个停靠站点/ + autoDriveToNextStation( true ); + } + } + + /** + * 根据订单状态、获取下一站靠站的的站点 + * + * @return -1 当前已是最后一个站点 + */ + private int getNextStopStation() { + if ( currentStationIndex >= stationList.size() - 1 ) { + return -1; + } + int nextStationIndex = currentStationIndex + 1; + for ( ; nextStationIndex < stationList.size() - 1; nextStationIndex++ ) { + if ( stationList.get( nextStationIndex ).getIfStop() == 1 ) { + break; + } + break; + } + return nextStationIndex; + } + + /** + * 延时查询站点信心 + */ + private void queryBusStationDelay() { + handler.sendEmptyMessageDelayed( MSG_QUERY_BUS_STATION, QUERY_BUS_STATION_DELAY ); + } + + /** + * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 + */ + public void restartAutopilot() { + CallerLogger.INSTANCE.d( M_BUS + TAG, "重启自动驾驶===" + isGoingToNextStation ); + if ( isGoingToNextStation ) { + autoDriveToNextStation( true ); + } + } + + /** + * 播报下车乘客信息 + * + * @param awayPassengersResponse + */ + private void playLeavePassengersMsg( QueryLeaveAwayPassengersResponse awayPassengersResponse ) { + CallerLogger.INSTANCE.d( M_BUS + TAG, "播报下车乘客信息currentStationIndex="+currentStationIndex); + + if ( currentStationIndex > stationList.size() - 1 ) { + return; + } + String station = stationList.get( currentStationIndex ).getName(); + StringBuilder builder = new StringBuilder( "已到达" ); + builder.append( station ); + if ( !station.endsWith( "站" ) ) { + builder.append( "站" ); + } + if ( awayPassengersResponse == null || awayPassengersResponse.data == null + || awayPassengersResponse.data.orders == null || awayPassengersResponse.data.orders.isEmpty() ) { + CallerLogger.INSTANCE.d( M_BUS + TAG, "播报下车乘客信息为null"); + } else { + builder.append( ",请尾号为 " ); + for ( QueryLeaveAwayPassengersResponse.LeaveAwayPassenger leaveAwayPassenger : awayPassengersResponse.data.orders ) { + if ( leaveAwayPassenger == null ) { + continue; + } + String tailNum = null; + try { + tailNum = leaveAwayPassenger.passengerPhone.substring(leaveAwayPassenger.passengerPhone.length() - 4); + } catch (Exception e) { + e.printStackTrace(); + tailNum = leaveAwayPassenger.passengerPhone; + } + builder.append( tailNum ).append( "。" ); + } + builder.append( "的乘客下车" ); + } + builder.append(",带好随身物品,下车请注意安全"); + CallerLogger.INSTANCE.d(M_BUS + TAG, "TTS:" + builder.toString()); + AIAssist.getInstance( mContext ).speakTTSVoice( builder.toString() ); + } + + /** + * 修改小巴运营状态 + */ + public void onChangeOperationStatus() { + CallerLogger.INSTANCE.d( M_BUS + TAG, "修改小巴运营状态"); + if (isWorking()){//收车 + stopTakeOrder(); + }else {//出车 + startTakeOrder(); + } + } + + /** + * 行程结束 + */ + private void travelOver() { +// CallerLogger.INSTANCE.d( M_BUS + TAG, "行程结束"); + + if ( currentStationIndex >= stationList.size() ) { + CallerLogger.INSTANCE.e( M_BUS + TAG, "travel over index out of station list" ); + return; + } + CallerLogger.INSTANCE.d( M_BUS + TAG, "单程结束====" ); + CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); + AIAssist.getInstance( mContext ).speakTTSVoice( "感谢您体验'蘑菇车联'无人驾驶小巴车,请您携带好随身物品,我们下次再见" ); + leaveStation(true,true); + } + + public boolean isWorking() { + return mIsWorking; + } + + /** + * 到站 + * @param data + */ + public void onArriveAt( MessagePad.ArrivalNotification data){ + if ( currentStationIndex > stationList.size() - 1 ) { + CallerLogger.INSTANCE.e( M_BUS + TAG, "到站异常,取消后续操作结束" ); + return; + } + if (FunctionBuildConfig.isDemoMode && currentStationIndex == stationList.size() - 1){//到达最后一站结束美化 + FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; + CallerLogger.INSTANCE.d(M_BUS + TAG, "美化模式-ignore:置为false(到最后一站)"); + } + CallerLogger.INSTANCE.d( M_BUS + TAG, "到站====currentStationIndex=" + currentStationIndex); + isGoingToNextStation = false; + // 到达站点后,更新站点状态 +// currentStationIndex = getNextStopStation(); + queryStationLeaveAwayPassengers(); + UiThreadHandler.postDelayed(new Runnable() {// 先查询下车乘客,再上报到站,便于后台筛查下车订单 + @Override + public void run() { + if (!hadQueryLeaveAwayPassager){ + arriveSiteStation(false); + } + hadQueryLeaveAwayPassager = false; + } + },1500); + } + + public boolean isGoingToNextStation() { + return isGoingToNextStation; + } + + // 车机端上传心跳数据(只在出车状态时上传) + public void runCarHeartbeat() { + BusServiceManager.getInstance().runCarHeartbeat(mContext, mLongitude, mLatitude, + new IBusServiceCallback() { + @Override + public void onSuccess(BaseData data) { + + } + + @Override + public void onFail(String failMsg) { + + } + }); + } + + private void startOrStopOrderLoop(boolean start) { + CallerLogger.INSTANCE.d(M_BUS + TAG, "startOrStopOrderLoop() " + start); + if (start) { + BusModelLoopManager.getInstance().startHeartbeatLoop(); + } else { + BusModelLoopManager.getInstance().stopHeartbeatLoop(); + } + } + + public void triggerStartServiceEvent(boolean send) { + if (stationList == null || currentStationIndex >= stationList.size() || currentStationIndex == 0) { + return; + } + BusStationBean currentStation = stationList.get( currentStationIndex -1); + BusStationBean nextStation = stationList.get( currentStationIndex); + BusAnalyticsUtil.triggerStartServiceEvent(send, + currentStation.getName(), nextStation.getName(), currentLineId); + } +} 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 new file mode 100644 index 0000000000..8c2f855e50 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/BusPresenter.java @@ -0,0 +1,280 @@ +package com.mogo.och.bus.presenter; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import android.location.Location; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; + +import com.mogo.commons.mvp.Presenter; +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; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.bean.BusStationBean; +import com.mogo.och.bus.callback.ICarOperationStatusCallback; +import com.mogo.och.bus.callback.IBusControllerStatusCallback; +import com.mogo.och.bus.callback.IRefreshBusStationsCallback; +import com.mogo.och.bus.callback.ISlidePannelHideCallback; +import com.mogo.och.bus.fragment.BusFragment; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; + +/** + * 网约车小巴 + * + * @author tongchenfei + */ +public class BusPresenter extends Presenter + implements ICarOperationStatusCallback, IRefreshBusStationsCallback, ISlidePannelHideCallback + , IMoGoAutopilotStatusListener, IBusControllerStatusCallback { + + private static final String TAG = "BusPresenter"; + + private int currentAutopilotStatus = -1; + private boolean isAnimateRunning = false; + private List mStationList = new ArrayList<>(); + private int mCurrentStation = 0; + + public BusPresenter(BusFragment view) { + super(view); + //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); + BusOrderModel.getInstance().init(); + } + + @Override + public void onCreate(@NonNull LifecycleOwner owner) { + super.onCreate(owner); + BusOrderModel.getInstance().queryOperationStatus(); + BusOrderModel.getInstance().queryBusRoutes(); + initModelListener(); + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) { + super.onDestroy(owner); + BusOrderModel.getInstance().release(); + releaseListener(); + } + + public void initModelListener() { + BusOrderModel.getInstance().setCarOperationStatusCallback(this); + BusOrderModel.getInstance().setRefreshBusStationsCallback(this); + BusOrderModel.getInstance().setSlidePannelHideCallback(this); + BusOrderModel.getInstance().setControllerStatusCallback(this); + } + + public void releaseListener() { + BusOrderModel.getInstance().setCarOperationStatusCallback(null); + BusOrderModel.getInstance().setRefreshBusStationsCallback(null); + BusOrderModel.getInstance().setSlidePannelHideCallback(null); + BusOrderModel.getInstance().setControllerStatusCallback(null); + } + + public void queryBusRoutes() { + BusOrderModel.getInstance().queryBusRoutes(); + } + + public void debugResetStationStatus() { + BusOrderModel.getInstance().debugResetStationStatus(); + } + + public void autoDriveToNextStation(boolean isRestart) { + currentAutopilotStatus = -1; + BusOrderModel.getInstance().autoDriveToNextStation(isRestart); + } + + public void restartAutopilot() { + currentAutopilotStatus = -1; + BusOrderModel.getInstance().restartAutopilot(); + } + + public void onChangeOperationStatus() { + BusOrderModel.getInstance().onChangeOperationStatus(); + } + + @Override + public void changeOperationStatus(boolean changeStatus) { + if (mView != null) { + runOnUIThread(() -> mView.changeOperationStatus(changeStatus)); + } + } + + @Override + public void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived) { + mStationList.clear(); + mStationList.addAll(stationList); + mCurrentStation = currentStation; + functionDemoModeChange(); + CallerLogger.INSTANCE.d(M_BUS + "BusOrderModel =", " mCurrentStation =" + mCurrentStation); + if (mView != null) { + runOnUIThread(() -> mView.refreshBusStations( + stationList, currentStation, nextStation, isArrived)); + } + } + + 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, false)); + } + } + + @Override + public void hideSlidePanel() { + if (mView != null) { + runOnUIThread(() -> mView.hideSlidePanel()); + } + } + + @Override + public void onAutopilotArriveAtStation(MessagePad.ArrivalNotification arrivalNotification) { + BusOrderModel.getInstance().onArriveAt(arrivalNotification); + } + + @Override + public void onAutopilotSNRequest() { + + } + + @Override + public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { + if (autopilotStatusInfo == null) return; + int state = autopilotStatusInfo.getState(); + CallerLogger.INSTANCE.d(M_BUS + TAG, "onStateChange: " + state + "currentAutopilotStatus = " + currentAutopilotStatus); + 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, isAnimateRunning)); + } + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING: + runOnUIThread(() -> mView.stopAutopilotAnimation()); + if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING; + // 改变UI自动驾驶状态 + runOnUIThread(() -> mView.onAutopilotStatusChanged(currentAutopilotStatus, isAnimateRunning)); + BusOrderModel.getInstance().triggerStartServiceEvent(true); + } + isAnimateRunning = false; + 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.onAutopilotEnableChange(false); + mView.onAutopilotStatusChanged(currentAutopilotStatus, isAnimateRunning); + }); + } + isAnimateRunning = false; + break; + default: + runOnUIThread(() -> mView.onAutopilotEnableChange(false)); + break; + } + } + + @Override + public void onVRModeChanged(boolean isVRMode) { + runOnUIThread(() -> mView.onVRModeChanged(isVRMode)); + } + + @Override + public void onCarLocationChanged(Location location) { + if (null != location) { + runOnUIThread(() -> mView.updateSpeedView(location.getSpeed())); + } + } + + @Override + public void startOpenAutopilot() { + isAnimateRunning = true; + runOnUIThread(() -> mView.startAutopilotAnimation()); + // TODO: 2021/8/20 无工控机环境, 手动调起自动驾驶开启返回结果,有工控机环境要删除 +// UiThreadHandler.postDelayed(new Runnable() { +// @Override +// public void run() { +// debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); +// } +// },2300); + } + + private void runOnUIThread(Runnable executor) { + if (executor == null) { + return; + } + if (Looper.myLooper() != Looper.getMainLooper()) { + UiThreadHandler.post(executor); + } else { + executor.run(); + } + } + + /** + * 测试使用 + * + * @param status + */ + public void debugAutoPilotStatus(int status) { + AutopilotStatusInfo info = new AutopilotStatusInfo(); + info.setState(status); + onAutopilotStatusResponse(info); + } + + @Override + public void onAutopilotGuardian(MogoReportMsg.MogoReportMessage guardianInfo) { + + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusLineModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusLineModel.java deleted file mode 100644 index c176a5eab2..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusLineModel.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.mogo.och.bus.presenter; - -import android.content.Context; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.bean.OchBusRoutesResponse; -import com.mogo.och.bus.callback.BusLinesCallback; -import com.mogo.och.bus.net.OCHBusServiceManager; -import com.mogo.och.bus.net.OCHServiceCallback; - -/** - * @author: wangmingjun - * @date: 2022/2/9 - */ -public class OchBusLineModel { - private static volatile OchBusLineModel sInstance; - private Context mContext; - private BusLinesCallback mBusLinesCallback; - public static OchBusLineModel getInstance() { - if ( sInstance == null ) { - synchronized ( OchBusLineModel.class ) { - if ( sInstance == null ) { - sInstance = new OchBusLineModel(); - } - } - } - return sInstance; - } - private OchBusLineModel() { - - } - public void init() { - mContext = AbsMogoApplication.getApp(); - } - public void setBusLinesCallback(BusLinesCallback callback){ - mBusLinesCallback = callback; - } - public void queryBusLines(){ - OCHBusServiceManager.getInstance().queryBusLines(mContext, new OCHServiceCallback() { - @Override - public void onSuccess(BusQueryLinesResponse data) { - if (null == data && mBusLinesCallback != null) { - mBusLinesCallback.onBusLinesChange(null); - return; - } - - if (mBusLinesCallback != null){ - mBusLinesCallback.onBusLinesChange(data); - } - } - - @Override - public void onFail(String failMsg) { - - } - }); - } - - public void commitSwitchLineId(int lineId){ - OCHBusServiceManager.getInstance().resetStationStatus(mContext,lineId, new OCHServiceCallback() { - @Override - public void onSuccess(OchBusRoutesResponse o) { - if (mBusLinesCallback != null){ - mBusLinesCallback.onChangeLineIdSuccess(); - } - } - - @Override - public void onFail(String failMsg) { - TipToast.longTip("切换路线失败"); - } - }); - } - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusLinePresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusLinePresenter.java deleted file mode 100644 index de2289284a..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusLinePresenter.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.mogo.och.bus.presenter; - -import androidx.annotation.NonNull; -import androidx.lifecycle.LifecycleOwner; - -import com.mogo.commons.mvp.Presenter; -import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.callback.BusLinesCallback; -import com.mogo.och.bus.ui.BusSwitchLineActivity; -import com.mogo.och.bus.ui.BusSwitchLineView; - -/** - * @author: wangmingjun - * @date: 2022/2/9 - */ -public class OchBusLinePresenter extends Presenter implements BusLinesCallback { - - public OchBusLinePresenter(BusSwitchLineView view) { - super(view); - OchBusLineModel.getInstance().init(); - OchBusOrderModel.getInstance().init(); - } - - @Override - public void onCreate(@NonNull LifecycleOwner owner) { - super.onCreate(owner); - initListener(); - } - - private void initListener() { - OchBusLineModel.getInstance().setBusLinesCallback(this); - } - - @Override - public void onBusLinesChange(BusQueryLinesResponse lines) { - mView.onBusLinesChange(lines); - } - - @Override - public void onChangeLineIdSuccess() { - mView.onChangeLineIdSuccess(); - } - - public void queryBusLines(){ - OchBusLineModel.getInstance().queryBusLines(); - } - - public void commitSwitchLineId(int lineId){ - OchBusLineModel.getInstance().commitSwitchLineId(lineId); - } - - public void queryBusRoutes(){ - OchBusOrderModel.getInstance().queryBusRoutes(); - } - - @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - super.onDestroy(owner); - OchBusLineModel.getInstance().setBusLinesCallback(null); - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusModelLoopManager.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusModelLoopManager.java deleted file mode 100644 index c21d6d9302..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusModelLoopManager.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.mogo.och.bus.presenter; - -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.och.bus.constant.OchBusConst; - -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -/** - * Created on 2021/11/22 - * - * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) - */ -public class OchBusModelLoopManager { - - private static final String TAG = OchBusModelLoopManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final OchBusModelLoopManager INSTANCE = new OchBusModelLoopManager(); - } - - public static OchBusModelLoopManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private Disposable mHeartbeatDisposable; //心跳轮询 - - public void startHeartbeatLoop() { - if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { - return; - } - Logger.i(TAG, "startHeartbeatLoop()"); - mHeartbeatDisposable = Observable.interval(OchBusConst.LOOP_DELAY, - OchBusConst.LOOP_PERIOD_60S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> OchBusOrderModel.getInstance().runCarHeartbeat()); - } - - public void stopHeartbeatLoop() { - if (mHeartbeatDisposable != null) { - Logger.i(TAG, "stopHeartbeatLoop()"); - mHeartbeatDisposable.dispose(); - mHeartbeatDisposable = null; - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java deleted file mode 100644 index 3fb034c010..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusOrderModel.java +++ /dev/null @@ -1,844 +0,0 @@ -package com.mogo.och.bus.presenter; - -import static com.mogo.och.bus.constant.OchBusConst.STATION_STATUS_STOPPED; - -import android.content.Context; -import android.location.Location; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.eagle.core.utilcode.util.NetworkUtils; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.map.navi.IMogoCarLocationChangedListener2; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.bus.bean.OchBusOperationStatusResponse; -import com.mogo.och.bus.bean.OchBusOrder; -import com.mogo.och.bus.bean.OchBusOrdersResponse; -import com.mogo.och.bus.bean.OchBusRoutesResponse; -import com.mogo.och.bus.bean.OchBusRoutesResult; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.bean.QueryLeaveAwayPassengersResponse; -import com.mogo.och.bus.callback.CarOperationStatusCallback; -import com.mogo.och.bus.callback.IOCHBusControllerStatusCallback; -import com.mogo.och.bus.callback.RefreshBusStationsCallback; -import com.mogo.och.bus.callback.SlidePannelHideCallback; -import com.mogo.och.bus.constant.OchBusConst; -import com.mogo.och.bus.net.OCHBusServiceManager; -import com.mogo.och.bus.net.OCHServiceCallback; -import com.mogo.och.bus.util.PinYinUtil; -import com.mogo.service.IMogoServiceApis; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.exceptions.UndeliverableException; -import io.reactivex.functions.Consumer; -import io.reactivex.plugins.RxJavaPlugins; -import io.reactivex.schedulers.Schedulers; - -/** - * @author congtaowang - * @since 2021/3/23 - * - * 小巴订单管理 - */ -public class OchBusOrderModel { - private final String TAG = OchBusOrderModel.class.getSimpleName(); - private int currentLineId = -1; - private int currentStationIndex = 0; //因为服务端和前台对于当前站不一致,所以设置两个current index, 一个用于前台展示, 一个用于服务端接口请求 - private int backgroundCurrentStationIndex = 0;//A->B 此处值是A站点索引 - /** - * 运营状态、后端更具运营状态来判断车辆是否派单 - */ - private boolean mIsWorking = false; - private static volatile OchBusOrderModel sInstance; - public double mLongitude = 0; - public double mLatitude = 0; - private Context mContext; - private Disposable mBusOrdersDisposable; //定时轮询小巴车订单 - private List prevBusOrderIds = new ArrayList<>(); - private final List< OchBusStation > stationList = new ArrayList<>(); - private OchBusRoutesResult ochBusRoutesResult = null; - /** - * 用来表示是否正在开往下一站 - */ - private boolean isGoingToNextStation = false; - // 运营类型 - private static final int VEHICLE_TYPE = 10; - private static final int MSG_QUERY_BUS_STATION = 1001; - private static final long QUERY_BUS_STATION_DELAY = 5000; - - private CarOperationStatusCallback carOperationStatusCallback; - private RefreshBusStationsCallback refreshBusStationsCallback; - private SlidePannelHideCallback slidePannelHideCallback; - private IOCHBusControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 - - private boolean hadQueryLeaveAwayPassager = false; - - private final Handler handler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - if ( msg.what == MSG_QUERY_BUS_STATION ) { - OchBusOrderModel.getInstance().queryBusRoutes(); - return true; - } - return false; - } - }); - - public static OchBusOrderModel getInstance() { - if ( sInstance == null ) { - synchronized ( OchBusOrderModel.class ) { - if ( sInstance == null ) { - sInstance = new OchBusOrderModel(); - } - } - } - return sInstance; - } - - private OchBusOrderModel() { - - } - - public void init() { - mContext = AbsMogoApplication.getApp(); - // 2021/10/20 衡阳小巴业务,使用LenovoPad时需要此app自己获取坐标并上传 - String productFlavor = DebugConfig.getProductFlavor(); - if (productFlavor != null && productFlavor.contains("fPadLenovoOchBus")) { - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .registerCarLocationChangedListener(TAG, mCarLocationChangedListener2); - MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener ); - } - - //2022.1.28 - // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 - // The exception could not be delivered to the consumer because it has already canceled/disposed - // the flow or the excTeption has nowhere to go to begin with - RxJavaPlugins.setErrorHandler(new Consumer() { - @Override - public void accept(Throwable e) { - if (e instanceof UndeliverableException) { - e = e.getCause(); - Log.d(TAG,"UndeliverableException"); - } - if ((e instanceof IOException)) {// - // fine, irrelevant network problem or API that throws on cancellation - Log.d(TAG,"IOException"); - return; - } - if (e instanceof InterruptedException) { - // fine, some blocking code was interrupted by a dispose call - Log.d(TAG,"InterruptedException"); - return; - } - if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) { - // that's likely a bug in the application - Log.d(TAG,"NullPointerException or IllegalArgumentException"); - Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); - return; - } - if (e instanceof IllegalStateException) { - // that's a bug in RxJava or in a custom operator - Log.d(TAG,"IllegalStateException"); - Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); - return; - } - Log.d(TAG,"Undeliverable exception"); - } - }); - - //2021/10/20 轮询小巴车订单,暂时用来播报 - startLoopBusOrders(); - } - - public void setCarOperationStatusCallback(CarOperationStatusCallback callback){ - this.carOperationStatusCallback = callback; - } - - public void setRefreshBusStationsCallback(RefreshBusStationsCallback callback){ - this.refreshBusStationsCallback = callback; - } - - public void setSlidePannelHideCallback(SlidePannelHideCallback callback){ - this.slidePannelHideCallback = callback; - } - - public void setControllerStatusCallback(IOCHBusControllerStatusCallback callback) { - this.mControllerStatusCallback = callback; - } - - /** - * 轮询bus待服务订单 - */ - private void startLoopBusOrders() { - if (mBusOrdersDisposable != null && !mBusOrdersDisposable.isDisposed()) { - return; - } - mBusOrdersDisposable = Observable.interval(OchBusConst.LOOP_DELAY, - OchBusConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> queryBusOrders()); - } - - private void queryBusOrders() { - OCHBusServiceManager.getInstance().queryBusOrders(mContext, new OCHServiceCallback() { - @Override - public void onSuccess(OchBusOrdersResponse o) { - if (o.data != null && o.data.orders != null && o.data.orders.size() > 0) { - Logger.d( TAG, "获取到bus订单数据: " + o.data.orders.toString() ); - List busOrders = o.data.orders; - for (int i = 0; i < busOrders.size(); i++) { - OchBusOrder order = busOrders.get(i); - if (order == null) return; - if (TextUtils.isEmpty(order.getPassengerPhone())) return; - if (prevBusOrderIds.contains(order.getOrderId())) continue; - try { - String tailNum = null; - try { - tailNum = order.getPassengerPhone().substring(order.getPassengerPhone().length() - 4); - } catch (Exception e) { - e.printStackTrace(); - tailNum = order.getPassengerPhone(); - } - Logger.d(TAG, "TTS:" + tailNum); - AIAssist.getInstance(mContext).speakTTSVoice("接到新订单,尾号 " + tailNum - + " 上车站点为 " + order.getStartStationName()); - prevBusOrderIds.add(order.getOrderId()); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - - @Override - public void onFail(String failMsg) { - - } - }); - } - - public void release(){ - if (mBusOrdersDisposable != null) { - mBusOrdersDisposable.dispose(); - } - startOrStopOrderLoop(false); - MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - - // 注销到达起始站围栏监听 - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .unregisterCarLocationChangedListener(TAG, mCarLocationChangedListener2); - } - - private Object readResolve() { - // 阻止反序列化,必须实现 Serializable 接口 - return sInstance; - } - - private IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { - // VR mode变更回调 - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (StatusDescriptor.VR_MODE == descriptor) { - if (mControllerStatusCallback != null) { - mControllerStatusCallback.onVRModeChanged(isTrue); - } - } - } - }; - - // 自车定位 - private IMogoCarLocationChangedListener2 mCarLocationChangedListener2 = new IMogoCarLocationChangedListener2() { - - @Override - public void onCarLocationChanged2( Location location ) { -// Log.d(TAG,"location = "+location.getLongitude()+","+location.getLatitude()); - IMogoServiceApis apis = MogoApisHandler.getInstance().getApis(); - MogoLocation mogoLocation = new MogoLocation(); - mogoLocation.setAccuracy(location.getAccuracy()); - mogoLocation.setProvider(location.getProvider()); - mogoLocation.setLongitude(location.getLongitude()); - mogoLocation.setLatitude(location.getLatitude()); - mogoLocation.setSpeed(location.getSpeed()); - mogoLocation.setBearing(location.getBearing()); - // TODO: 2021/9/2 因0830新版server后台只能过滤locType=1&&satellites>=4的定位数据,暂固化值,后续优化 - mogoLocation.setLocType(1); - mogoLocation.setSatellite(4); - /** - * TODO: 2021/10/20 - * 因ALocationClient实际无坐标返回,所以此处从custom map中AMapViewWrapper获取坐标并反馈回用于坐标上传 - * {@link com.mogo.map.impl.custom.location.ALocationClient} - */ - apis.getLocationInfoApi().provideLocation(mogoLocation); - - mLongitude = location.getLongitude(); - mLatitude = location.getLatitude(); - - if (mControllerStatusCallback != null) { - mControllerStatusCallback.onCarLocationChanged(location); - } - } - }; - - /** - * 查询小巴路线 - */ - public void queryBusRoutes() { - Logger.d( TAG, "查询小巴路线"); - OCHBusServiceManager.getInstance().queryBusRoutes(mContext, new OCHServiceCallback() { - @Override - public void onSuccess(OchBusRoutesResponse data) { - if ( data == null - || data.getResult() == null - || data.getResult().getSites() == null - || data.getResult().getSites().isEmpty() ) { - return; - } - Logger.d( TAG, "获取到小巴路线数据: " + data ); - renderBusStationsStatus( data.getResult()); - } - @Override - public void onFail(String failMsg) { - // 重复请求小巴路线,直至成功 - queryBusStationDelay(); - } - }); - - } - - /** - * 测试、重置站点状态 - */ - public void debugResetStationStatus() { - Logger.d( TAG, "测试、重置站点状态"); - OCHBusServiceManager.getInstance().resetStationStatus(mContext, currentLineId - , new OCHServiceCallback() { - @Override - public void onSuccess(OchBusRoutesResponse o) { - Logger.d(TAG, "获取到小巴路线数据: " + o); - isGoingToNextStation = false; - if (o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty()) { - return; - } - renderBusStationsStatus(o.getResult()); - } - - @Override - public void onFail(String failMsg) { - // 重复请求小巴路线,直至成功 - queryBusStationDelay(); - } - }); - - } - - /** - * 离站上报 - */ - public void leaveStation(boolean isOneWayOver,boolean isRestart){ - Log.d(TAG,"leaveStation-backgroundCurrentStationIndex = "+backgroundCurrentStationIndex); - OCHBusServiceManager.getInstance().leaveStation(mContext, stationList.get(backgroundCurrentStationIndex).getSeq() - , stationList.get(backgroundCurrentStationIndex).getSiteId(), new OCHServiceCallback() { - @Override - public void onSuccess(OchBusRoutesResponse o) { - if ( o.getResult() == null || o.getResult().getSites() == null || o.getResult().getSites().isEmpty() ) { - return; - } - if (!isOneWayOver){ - Logger.d( TAG, "自动驾驶开启开往下一站====" ); - //需要更改当前站和下一站的状态 然后渲染 - RenderLeaveStationSuccess(o.getResult(),isRestart); - }else { - Logger.d( TAG, "单程真的结束了====" ); - isGoingToNextStation = false; - currentStationIndex = 0; - backgroundCurrentStationIndex = 0; - CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); - queryBusRoutes(); - } - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - } - } - }); - } - - /** - * 离站上报成功后渲染站点 - * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, - * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理,不能直接渲染 - */ - private void RenderLeaveStationSuccess(OchBusRoutesResult result,boolean isRestart) { - renderBusStationsStatus(result); - if (slidePannelHideCallback != null) { - slidePannelHideCallback.hideSlidePanel(); - } - //开启自动驾驶 - startAutopilot(isRestart); - if (isGoingToNextStation) { - // 为了避免恢复自动驾驶时重复的接口请求 - return; - } - isGoingToNextStation = true; - AIAssist.getInstance( mContext ).speakTTSVoice( "欢迎乘坐’蘑菇车联‘无人驾驶小巴车,请您坐好,注意乘车安全,行程即将开始" ); - } - - /** - * 开启自动驾驶 - * @param isRestart - */ - private void startAutopilot(boolean isRestart) { - OchBusStation currentStation = stationList.get( currentStationIndex -1); - OchBusStation nextStation = stationList.get( currentStationIndex); - -// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -// == Integer.parseInt(DebugConfig.getAutoPilotStatus())) { -// TipToast.shortTip("自动驾驶状态为不可用!"); -// } - AutopilotControlParameters currentAutopilot = new AutopilotControlParameters(); - currentAutopilot.isSpeakVoice = !isRestart; - currentAutopilot.startName = PinYinUtil.getPinYinHeadChar(currentStation.getName()); - currentAutopilot.endName = PinYinUtil.getPinYinHeadChar(nextStation.getName()); - currentAutopilot.startLatLon = new AutopilotControlParameters - .AutoPilotLonLat( currentStation.getLat(), currentStation.getLon() ); - currentAutopilot.endLatLon = new AutopilotControlParameters - .AutoPilotLonLat( nextStation.getLat(), nextStation.getLon() ); - currentAutopilot.vehicleType = VEHICLE_TYPE; - Logger.d( TAG, "开启自动驾驶====" + currentAutopilot.toString() - +" startLatLon="+currentStation.getName()+",endLatLon="+nextStation.getName()); - CallerAutoPilotManager.INSTANCE.startAutoPilot(currentAutopilot); - if (mControllerStatusCallback != null) { - mControllerStatusCallback.startOpenAutopilot(); - } - } - - /** - * 到站后重置站点状态 - */ - private void arriveSiteStation(boolean isRestart) { - Log.d(TAG,"arriveSiteStation-currentStationIndex = "+currentStationIndex); - OCHBusServiceManager.getInstance().arriveSiteStation(mContext - , stationList.get(currentStationIndex).getSeq(), stationList.get(currentStationIndex).getSiteId() - , new OCHServiceCallback() { - @Override - public void onSuccess(BaseData o) { - Log.d(TAG,"arriveSiteStation success"); - if (!isRestart){ - renderArriveBusStation(); - } - } - - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - } - } - }); - } - - private void renderArriveBusStation() { - List< OchBusStation > site = ochBusRoutesResult.getSites(); - if (site != null && site.size() > 0){ - backgroundCurrentStationIndex = currentStationIndex; - if (refreshBusStationsCallback != null){ - refreshBusStationsCallback.refreshBusStations(stationList, currentStationIndex - , getNextStopStation(),true); - } - } - } - - /** - * 查询到站下车乘客 - */ - private void queryStationLeaveAwayPassengers() { - Logger.d( TAG, "查询到站下车乘客"); - - OCHBusServiceManager.getInstance().queryStationLeaveAwayPassengers(mContext - , stationList.get(currentStationIndex).getSeq(), stationList.get(currentStationIndex).getSiteId() - , new OCHServiceCallback() { - @Override - public void onSuccess(QueryLeaveAwayPassengersResponse o) { - hadQueryLeaveAwayPassager = true; - arriveSiteStation(false); - playLeavePassengersMsg( o ); - queryBusOrders(); - } - - @Override - public void onFail(String failMsg) { - hadQueryLeaveAwayPassager = true; - arriveSiteStation(false); - } - }); - } - - /** - * 收车 - */ - public void stopTakeOrder(){ - OCHBusServiceManager.getInstance().stopTakeOrder(mContext, new OCHServiceCallback() { - @Override - public void onSuccess(BaseData o) { - mIsWorking = !mIsWorking; - carOperationStatusCallback.changeOperationStatus(isWorking()); - startOrStopOrderLoop(mIsWorking); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - }else { - TipToast.shortTip(failMsg); - } - } - }); - } - - /** - * 出车 - */ - public void startTakeOrder(){ - OCHBusServiceManager.getInstance().startTakeOrder(mContext, new OCHServiceCallback() { - @Override - public void onSuccess(BaseData o) { - mIsWorking = !mIsWorking; - startOrStopOrderLoop(mIsWorking); - if ( stationList != null && stationList.size() > 0 ) { - AIAssist.getInstance( mContext ).speakTTSVoice( "车辆已整备完毕,请前往" - + stationList.get( currentStationIndex ).getName() + "站点" ); - } - carOperationStatusCallback.changeOperationStatus(isWorking()); - queryBusRoutes(); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - }else { - TipToast.shortTip(failMsg); - } - } - }); - } - - /** - * 查询运营状态 - */ - public void queryOperationStatus() { - Logger.d( TAG, "查询运营状态"); - OCHBusServiceManager.getInstance().queryOperationStatus(mContext - , new OCHServiceCallback() { - @Override - public void onSuccess(OchBusOperationStatusResponse o) { - if ( o.data != null ) { - mIsWorking = o.data.serviceStatus == 1; - Logger.d( TAG, "查询运营状态 result.status: " + o.data.serviceStatus); - startOrStopOrderLoop(mIsWorking); - } - carOperationStatusCallback.changeOperationStatus(isWorking()); - } - @Override - public void onFail(String failMsg) { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - } - } - }); - } - - /** - * 开启自动驾驶到下一站 - */ - public void autoDriveToNextStation( boolean isRestart ) { - if ( backgroundCurrentStationIndex >= stationList.size() - 1 ) { - // 当前站是最后一站,结束当前行程 - travelOver(); - return; - } - leaveStation(false,isRestart); - } - - /** - * 渲染站点信息 - * 服务端返回的OchBusRoutesResult逻辑, 离开站为当前站, 到达下一站后才会将下一站置为当前站, - * 车机端展示是离开当前站,下一站设置为当前站, 所以服务端数据回来要做处理current index,不能直接渲染 - * @param result - */ - private void renderBusStationsStatus(OchBusRoutesResult result) { - if (result == null) return; - ochBusRoutesResult = result; - List< OchBusStation > site = result.getSites(); - currentLineId = result.getLineId(); - stationList.clear(); - stationList.addAll( site ); - for ( int i = 0; i < stationList.size(); i++ ) { - OchBusStation s = stationList.get( i ); - // 是否正在开往下一站 - if ( s.isLeaving()) { - isGoingToNextStation = true; - } - // 当前站点信息 - if (s.getDrivingStatus() == STATION_STATUS_STOPPED ) { - currentStationIndex = i; - break; - } - } - backgroundCurrentStationIndex = currentStationIndex; - OchBusStation currentStation = stationList.get(currentStationIndex); - Logger.d( TAG, "渲染站点信息服务端currentStationIndex="+currentStationIndex - +" isLeaving()="+currentStation.isLeaving()); - //当前站点是始发站,告诉服务端到达始发站。 如果没有这个节点, 服务器不知道始发站到达状态 - // ,订单开始站下在始发站的状态流转有问题 - if (currentStationIndex == 0 && !currentStation.isLeaving()){ - arriveSiteStation(true); - } - // 美化是否开始 - if (FunctionBuildConfig.isDemoMode && ((currentStationIndex > 0 - && currentStationIndex < stationList.size()-1) - || (stationList.get(0).isLeaving() || stationList.get(stationList.size() -1).isLeaving()))){//行驶过程中设置美化 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; - Logger.d(TAG, "美化模式-ignore:置为true(每次滑动出发)"); - } - if (refreshBusStationsCallback != null){ - if (currentStation.isLeaving()){//如果服务端的当前站是leaving状态,展示当前站需要+1 - currentStationIndex ++; - refreshBusStationsCallback.refreshBusStations(stationList - , currentStationIndex, getNextStopStation(),false); - }else{ - refreshBusStationsCallback.refreshBusStations(stationList - , currentStationIndex, getNextStopStation(),true); - } - } - if ( currentStation.isLeaving() && slidePannelHideCallback != null) { - slidePannelHideCallback.hideSlidePanel(); - } - } - - /** - * 重置下一站 - * - * @param lastStopStation - */ - private void resetNextStopStation( int lastStopStation ) { - Logger.d( TAG, "重置下一站"); - int nextStopStation = getNextStopStation(); - if ( nextStopStation < 0 ) { - return; - } - if ( lastStopStation <= nextStopStation || nextStopStation <= currentStationIndex ) { - return; - } - if ( CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState() - == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING ) { - // 自动驾驶中动态设置下一个停靠站点/ - autoDriveToNextStation( true ); - } - } - - /** - * 根据订单状态、获取下一站靠站的的站点 - * - * @return -1 当前已是最后一个站点 - */ - private int getNextStopStation() { - if ( currentStationIndex >= stationList.size() - 1 ) { - return -1; - } - int nextStationIndex = currentStationIndex + 1; - for ( ; nextStationIndex < stationList.size() - 1; nextStationIndex++ ) { - if ( stationList.get( nextStationIndex ).getIfStop() == 1 ) { - break; - } - break; - } - return nextStationIndex; - } - - /** - * 延时查询站点信心 - */ - private void queryBusStationDelay() { - handler.sendEmptyMessageDelayed( MSG_QUERY_BUS_STATION, QUERY_BUS_STATION_DELAY ); - } - - /** - * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 - */ - public void restartAutopilot() { - Logger.d( TAG, "重启自动驾驶===" + isGoingToNextStation ); - if ( isGoingToNextStation ) { - autoDriveToNextStation( true ); - } - } - - /** - * 播报下车乘客信息 - * - * @param awayPassengersResponse - */ - private void playLeavePassengersMsg( QueryLeaveAwayPassengersResponse awayPassengersResponse ) { - Logger.d( TAG, "播报下车乘客信息currentStationIndex="+currentStationIndex); - - if ( currentStationIndex > stationList.size() - 1 ) { - return; - } - String station = stationList.get( currentStationIndex ).getName(); - StringBuilder builder = new StringBuilder( "已到达" ); - builder.append( station ); - if ( !station.endsWith( "站" ) ) { - builder.append( "站" ); - } - if ( awayPassengersResponse == null || awayPassengersResponse.data == null - || awayPassengersResponse.data.orders == null || awayPassengersResponse.data.orders.isEmpty() ) { - Logger.d( TAG, "播报下车乘客信息为null"); - } else { - builder.append( ",请尾号为 " ); - for ( QueryLeaveAwayPassengersResponse.LeaveAwayPassenger leaveAwayPassenger : awayPassengersResponse.data.orders ) { - if ( leaveAwayPassenger == null ) { - continue; - } - String tailNum = null; - try { - tailNum = leaveAwayPassenger.passengerPhone.substring(leaveAwayPassenger.passengerPhone.length() - 4); - } catch (Exception e) { - e.printStackTrace(); - tailNum = leaveAwayPassenger.passengerPhone; - } - builder.append( tailNum ).append( "。" ); - } - builder.append( "的乘客下车" ); - } - builder.append(",带好随身物品,下车请注意安全"); - Logger.d(TAG, "TTS:" + builder.toString()); - AIAssist.getInstance( mContext ).speakTTSVoice( builder.toString() ); - } - - /** - * 修改小巴运营状态 - */ - public void onChangeOperationStatus() { - Logger.d( TAG, "修改小巴运营状态"); - if (isWorking()){//收车 - stopTakeOrder(); - }else {//出车 - startTakeOrder(); - } - } - - /** - * 行程结束 - */ - private void travelOver() { -// Logger.d( TAG, "行程结束"); - - if ( currentStationIndex >= stationList.size() ) { - Logger.e( TAG, "travel over index out of station list" ); - return; - } - Logger.d( TAG, "单程结束====" ); - CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); - AIAssist.getInstance( mContext ).speakTTSVoice( "感谢您体验'蘑菇车联'无人驾驶小巴车,请您携带好随身物品,我们下次再见" ); - leaveStation(true,true); - } - - public boolean isWorking() { - return mIsWorking; - } - - /** - * 到站 - * @param data - */ - public void onArriveAt( AutopilotStationInfo data){ - if ( currentStationIndex > stationList.size() - 1 ) { - Logger.e( TAG, "到站异常,取消后续操作结束" ); - return; - } - if (FunctionBuildConfig.isDemoMode && currentStationIndex == stationList.size() - 1){//到达最后一站结束美化 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; - Logger.d(TAG, "美化模式-ignore:置为false(到最后一站)"); - } - Logger.d( TAG, "到站====currentStationIndex=" + currentStationIndex); - isGoingToNextStation = false; - // 到达站点后,更新站点状态 -// currentStationIndex = getNextStopStation(); - queryStationLeaveAwayPassengers(); - UiThreadHandler.postDelayed(new Runnable() {// 先查询下车乘客,再上报到站,便于后台筛查下车订单 - @Override - public void run() { - if (!hadQueryLeaveAwayPassager){ - arriveSiteStation(false); - } - hadQueryLeaveAwayPassager = false; - } - },1500); - } - - public boolean isGoingToNextStation() { - return isGoingToNextStation; - } - - // 车机端上传心跳数据(只在出车状态时上传) - public void runCarHeartbeat() { - OCHBusServiceManager.getInstance().runCarHeartbeat(mContext, mLongitude, mLatitude, - new OCHServiceCallback() { - @Override - public void onSuccess(BaseData data) { - - } - - @Override - public void onFail(String failMsg) { - - } - }); - } - - private void startOrStopOrderLoop(boolean start) { - Logger.d(TAG, "startOrStopOrderLoop() " + start); - if (start) { - OchBusModelLoopManager.getInstance().startHeartbeatLoop(); - } else { - OchBusModelLoopManager.getInstance().stopHeartbeatLoop(); - } - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java deleted file mode 100644 index 6b741f08cf..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/presenter/OchBusPresenter.java +++ /dev/null @@ -1,277 +0,0 @@ -package com.mogo.och.bus.presenter; -import android.location.Location; -import android.os.Looper; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.lifecycle.LifecycleOwner; -import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.data.autopilot.AutopilotGuardianStatusInfo; -import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; -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; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.bus.bean.OchBusStation; -import com.mogo.och.bus.callback.CarOperationStatusCallback; -import com.mogo.och.bus.callback.IOCHBusControllerStatusCallback; -import com.mogo.och.bus.callback.RefreshBusStationsCallback; -import com.mogo.och.bus.callback.SlidePannelHideCallback; -import com.mogo.och.bus.fragment.OchBusFragment; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; - -/** - * 网约车小巴 - * - * @author tongchenfei - */ -public class OchBusPresenter extends Presenter< OchBusFragment > - implements CarOperationStatusCallback, RefreshBusStationsCallback, SlidePannelHideCallback - , IMoGoAutopilotStatusListener, IOCHBusControllerStatusCallback { - - private static final String TAG = "OchBusPresenter"; - - private int currentAutopilotStatus = -1; - private boolean isAnimateRunning = false; - private List mStationList = new ArrayList<>(); - private int mCurrentStation = 0; - - public OchBusPresenter( OchBusFragment view ) { - super( view ); - //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); - OchBusOrderModel.getInstance().init(); - } - - @Override - public void onCreate( @NonNull LifecycleOwner owner ) { - super.onCreate( owner ); - OchBusOrderModel.getInstance().queryOperationStatus(); - OchBusOrderModel.getInstance().queryBusRoutes(); - initModelListener(); - } - - @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - super.onDestroy(owner); - OchBusOrderModel.getInstance().release(); - releaseListener(); - } - - public void initModelListener(){ - OchBusOrderModel.getInstance().setCarOperationStatusCallback(this); - OchBusOrderModel.getInstance().setRefreshBusStationsCallback(this); - OchBusOrderModel.getInstance().setSlidePannelHideCallback(this); - OchBusOrderModel.getInstance().setControllerStatusCallback(this); - } - - public void releaseListener(){ - OchBusOrderModel.getInstance().setCarOperationStatusCallback(null); - OchBusOrderModel.getInstance().setRefreshBusStationsCallback(null); - OchBusOrderModel.getInstance().setSlidePannelHideCallback(null); - OchBusOrderModel.getInstance().setControllerStatusCallback(null); - } - - public void queryBusRoutes(){ - OchBusOrderModel.getInstance().queryBusRoutes(); - } - - public void debugResetStationStatus(){ - OchBusOrderModel.getInstance().debugResetStationStatus(); - } - - public void autoDriveToNextStation(boolean isRestart){ - currentAutopilotStatus = -1; - OchBusOrderModel.getInstance().autoDriveToNextStation(isRestart); - } - - public void restartAutopilot(){ - currentAutopilotStatus = -1; - OchBusOrderModel.getInstance().restartAutopilot(); - } - - public void onChangeOperationStatus(){ - OchBusOrderModel.getInstance().onChangeOperationStatus(); - } - - @Override - public void changeOperationStatus(boolean changeStatus) { - if (mView != null) { - mView.changeOperationStatus(changeStatus); - } - } - - @Override - public void refreshBusStations(List stationList, int currentStation, int nextStation, boolean isArrived) { - mStationList.clear(); - mStationList.addAll(stationList); - mCurrentStation = currentStation; - functionDemoModeChange(); - Log.d("OchBusOrderModel ="," mCurrentStation ="+mCurrentStation); - if ( mView != null ) { - mView.refreshBusStations( stationList, currentStation, nextStation ,isArrived); - } - } - - private void functionDemoModeChange() { -// Log.d("OchBusOrderModel ="," functionDemoModeChange ="+mCurrentStation); - if (FunctionBuildConfig.isDemoMode - && ( - (mCurrentStation > 0 && mCurrentStation < mStationList.size()-1) - || ( - (mCurrentStation == 0 || mCurrentStation == mStationList.size() -1) - && OchBusOrderModel.getInstance().isGoingToNextStation() - ) - ) - ){ - mView.onAutopilotStatusChanged( IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING ,false); - } - } - - @Override - public void hideSlidePanel() { - if (mView != null){ - mView.hideSlidePanel(); - } - } - - @Override - public void onAutopilotArriveAtStation(@Nullable AutopilotStationInfo autopilotStationInfo) { - OchBusOrderModel.getInstance().onArriveAt(autopilotStationInfo); - } - - @Override - public void onAutopilotGuardian(@Nullable AutopilotGuardianStatusInfo autopilotGuardianStatusInfo) { - - } - - @Override - public void onAutopilotSNRequest() { - - } - - @Override - public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { - if (autopilotStatusInfo == null) return; - int state = autopilotStatusInfo.getState(); - Logger.d( TAG, "onStateChange: " + state +"currentAutopilotStatus = "+currentAutopilotStatus); - 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【自动驾驶】按钮是否展示 - mView.onAutopilotEnableChange( true ); - if ( OchBusOrderModel.getInstance().isGoingToNextStation() ) { - mView.hideSlidePanel(); - } - if (FunctionBuildConfig.isDemoMode - && ( - (mCurrentStation > 0 && mCurrentStation < mStationList.size()-1) - || ( - (mCurrentStation == 0 || mCurrentStation == mStationList.size() -1) - && OchBusOrderModel.getInstance().isGoingToNextStation() - ) - ) - ){ - Log.d("OchBusOrderModel=","有美化功能"); - return; - } - // 改变UI自动驾驶状态 - mView.onAutopilotStatusChanged( currentAutopilotStatus ,isAnimateRunning); - } - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING: - runOnUIThread(()->mView.stopAutopilotAnimation()); - if (currentAutopilotStatus != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ - currentAutopilotStatus = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING; - // 改变UI自动驾驶状态 - mView.onAutopilotStatusChanged( currentAutopilotStatus ,isAnimateRunning); - } - isAnimateRunning = false; - 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) - && OchBusOrderModel.getInstance().isGoingToNextStation() - ) - ) - ){ - Log.d("OchBusOrderModel=","有美化功能"); - return; - } - mView.onAutopilotEnableChange( false ); - mView.onAutopilotStatusChanged( currentAutopilotStatus ,isAnimateRunning); - } - isAnimateRunning = false; - break; - default: - mView.onAutopilotEnableChange( false ); - break; - } - } - - @Override - public void onVRModeChanged(boolean isVRMode) { - runOnUIThread(() -> mView.onVRModeChanged(isVRMode)); - } - - @Override - public void onCarLocationChanged(Location location) { - if (null != location){ - runOnUIThread(() -> mView.updateSpeedView(location.getSpeed())); - } - } - - @Override - public void startOpenAutopilot() { - isAnimateRunning = true; - runOnUIThread(()->mView.startAutopilotAnimation()); - // TODO: 2021/8/20 无工控机环境, 手动调起自动驾驶开启返回结果,有工控机环境要删除 -// UiThreadHandler.postDelayed(new Runnable() { -// @Override -// public void run() { -// debugAutoPilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); -// } -// },2300); - } - - private void runOnUIThread( Runnable executor ) { - if ( executor == null ) { - return; - } - if ( Looper.myLooper() != Looper.getMainLooper() ) { - UiThreadHandler.post( executor ); - } else { - executor.run(); - } - } - - /** - * 测试使用 - * @param status - */ - public void debugAutoPilotStatus(int status){ - AutopilotStatusInfo info = new AutopilotStatusInfo(); - info.setState(status); - onAutopilotStatusResponse(info); - } -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestBusBroadcastReceiver.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestBusBroadcastReceiver.java new file mode 100644 index 0000000000..b9ffc6d492 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestBusBroadcastReceiver.java @@ -0,0 +1,42 @@ +package com.mogo.och.bus.receiver; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.bus.constant.BusConst; + +/** + * 测试小巴车的场景 + * + * @author donghongyu + * @date 4/26/21 12:08 PM + */ +public class TestBusBroadcastReceiver extends BroadcastReceiver { + private static final String TAG = "TestBusBroadcastReceiver"; + + private Context mContext; + + @Override + public void onReceive(Context context, Intent intent) { + try { + this.mContext = context; + int sceneType = intent.getIntExtra(BusConst.BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY, 0); + CallerLogger.INSTANCE.d(M_BUS + TAG, "sceneType:" + sceneType); + + // 分发场景 + dispatchSceneTest(sceneType); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void dispatchSceneTest(int sceneType) { + + } + + +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java deleted file mode 100644 index 132b5a87a6..0000000000 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/receiver/TestOchBusBroadcastReceiver.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.mogo.och.bus.receiver; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.och.bus.constant.OchBusConst; - -/** - * 测试小巴车的场景 - * - * @author donghongyu - * @date 4/26/21 12:08 PM - */ -public class TestOchBusBroadcastReceiver extends BroadcastReceiver { - private static final String TAG = "TestOchBusBroadcastReceiver"; - - private Context mContext; - - @Override - public void onReceive(Context context, Intent intent) { - try { - this.mContext = context; - int sceneType = intent.getIntExtra(OchBusConst.BROADCAST_TEST_BUS_CONTROL_TYPE_EXTRA_KEY, 0); - Logger.d(TAG, "sceneType:" + sceneType); - - // 分发场景 - dispatchSceneTest(sceneType); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void dispatchSceneTest(int sceneType) { - - } - - -} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java index 6dc465f911..1c772f89d2 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/BusSwitchLineActivity.java @@ -23,7 +23,7 @@ import com.mogo.commons.mvp.MvpActivity; import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; import com.mogo.och.bus.R; import com.mogo.och.bus.bean.BusQueryLinesResponse; -import com.mogo.och.bus.presenter.OchBusLinePresenter; +import com.mogo.och.bus.presenter.BusLinePresenter; import java.util.ArrayList; import java.util.List; @@ -32,7 +32,7 @@ import java.util.List; * @author: wangmingjun * @date: 2022/2/8 */ -public class BusSwitchLineActivity extends MvpActivity +public class BusSwitchLineActivity extends MvpActivity implements View.OnClickListener, BusSwitchLineView { private ImageView mClose; @@ -50,8 +50,8 @@ public class BusSwitchLineActivity extends MvpActivity { + mCurrentLightId = 0; + BusTrafficLightView.this.setVisibility(GONE); + }); + } + + /** + * @param redNum 红灯倒计时 + * @param yellowNum 黄灯倒计时 + * @param greenNum 绿灯倒计时 + */ + @Override + public void changeCountdownTrafficLightNum(int redNum, int yellowNum, int greenNum) { + super.changeCountdownTrafficLightNum(redNum, yellowNum, greenNum); + switch (mCurrentLightId) { + case 1: + changeCountdownRed(redNum); + break; + case 2: + changeCountdownYellow(yellowNum); + break; + case 3: + changeCountdownGreen(greenNum); + break; + default: + UiThreadHandler.post(() -> { + mLightTimeTV.setText(""); + }); + break; + } + } + + @Override + public void changeCountdownRed(int redNum) { + super.changeCountdownRed(redNum); + UiThreadHandler.post(() -> { + if (redNum > 0) { + mLightTimeTV.setVertrial(true); + mLightTimeTV.setmColorList(new int[]{getResources().getColor(R.color.bus_traffic_light_red_color_up), + getResources().getColor(R.color.bus_traffic_light_red_color_down)}); + mLightTimeTV.setText(String.valueOf(redNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + @Override + public void changeCountdownGreen(int greenNum) { + super.changeCountdownGreen(greenNum); + UiThreadHandler.post(() -> { + if (greenNum > 0) { + mLightTimeTV.setVertrial(true); + mLightTimeTV.setmColorList(new int[]{getResources().getColor(R.color.bus_traffic_light_green_color_up), + getResources().getColor(R.color.bus_traffic_light_green_color_down)}); + mLightTimeTV.setText(String.valueOf(greenNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + @Override + public void changeCountdownYellow(int yellowNum) { + super.changeCountdownYellow(yellowNum); + UiThreadHandler.post(() -> { + if (yellowNum > 0) { + mLightTimeTV.setVertrial(true); + mLightTimeTV.setmColorList(new int[]{getResources().getColor(R.color.bus_traffic_light_yellow_color_up), + getResources().getColor(R.color.bus_traffic_light_yellow_color_down)}); + mLightTimeTV.setText(String.valueOf(yellowNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + /** + * 更新红绿灯icon + * + * @param lightId 0-都是默认,1-红,2-黄,3-绿 + */ + private void updateTrafficLightIcon(int lightId) { + UiThreadHandler.post(() -> { + switch (lightId) { + case 1: + mLightIconIV.setBackgroundResource(R.drawable.bus_light_red_nor); + BusTrafficLightView.this.setVisibility(VISIBLE); + break; + case 2: + mLightIconIV.setBackgroundResource(R.drawable.bus_lightyellow_nor); + BusTrafficLightView.this.setVisibility(VISIBLE); + break; + case 3: + mLightIconIV.setBackgroundResource(R.drawable.bus_light_green_nor); + BusTrafficLightView.this.setVisibility(VISIBLE); + break; + default: + BusTrafficLightView.this.setVisibility(GONE); + break; + } + }); + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/GradientTextView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/GradientTextView.java new file mode 100644 index 0000000000..c93f1c1475 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/ui/GradientTextView.java @@ -0,0 +1,113 @@ +package com.mogo.och.bus.ui; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.Shader; +import android.util.AttributeSet; + +import androidx.appcompat.widget.AppCompatTextView; + +/** + * @author: wangmingjun + * @date: 2022/3/22 + */ +public class GradientTextView extends AppCompatTextView { + + private LinearGradient mLinearGradient; + private Paint mPaint; + private int mViewWidth = 0;//文字的宽度 + private int mViewHeight = 0;//文字的高度 + private Rect mTextBound = new Rect(); + private int[] mColorList;//存放颜色的数组 + private boolean isVertrial;//默认是横向 + + private float mRadius; + private float mdx; + private float mdy; + private int mColor; + + public GradientTextView(Context context) { + this(context, null); + } + + public GradientTextView(Context context, + AttributeSet attrs) { + super(context, attrs); + //设置默认的颜色 + mColorList = new int[]{0xFFFFFFFF, 0xFFFFFFF}; + } + + + @Override + protected void onDraw(Canvas canvas) { + + if (isVertrial) { + mViewHeight = getMeasuredHeight(); + } else { + mViewWidth = getMeasuredWidth(); + } + mPaint = getPaint(); + String mTipText = getText().toString(); + + setStyle(); + + mPaint.getTextBounds(mTipText, 0, mTipText.length(), mTextBound); + + mPaint.setShadowLayer(mRadius, mdx, mdy, mColor); + + //画出文字 + canvas.drawText(mTipText, getMeasuredWidth() / 2 - mTextBound.width() / 2, getMeasuredHeight() / 2 + mTextBound.height() / 2, mPaint); + } + + /** + * true表示纵向渐变,false变身横向渐变 + * + * @param vertrial + */ + public void setVertrial(boolean vertrial) { + isVertrial = vertrial; + } + + /** + * 设置渐变的颜色 + * + * @param mColorList + */ + public void setmColorList(int[] mColorList) { + if (mColorList != null && mColorList.length < 2) { + throw new RuntimeException("ClorList's length must be > 2"); + } else { + + this.mColorList = mColorList; + } + } + + public void setStyle() { + mPaint.setAntiAlias(true); + mPaint.setDither(true); + mPaint.setFilterBitmap(true); + //前面4个参数分别表示渐变的开始x轴,开始y轴,结束的x轴,结束的y轴,mcolorList表示渐变的颜色数组 + mLinearGradient = new LinearGradient(0, 0, mViewWidth, mViewHeight, mColorList, null, Shader.TileMode.CLAMP); + mPaint.setShader(mLinearGradient); + mPaint.setStrokeJoin(Paint.Join.ROUND); + mPaint.setStrokeCap(Paint.Cap.ROUND); + mPaint.setStyle(Paint.Style.FILL_AND_STROKE); + } + + /** + * 设置投影层 + * @param radius + * @param dx + * @param dy + * @param color + */ + public void setShadowLayerCustom(float radius, float dx, float dy, int color) { + this.mRadius = radius; + this.mdx = dx; + this.mdy = dy; + this.mColor = color; + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsUtil.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsUtil.java new file mode 100644 index 0000000000..a663c4a020 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/util/BusAnalyticsUtil.java @@ -0,0 +1,63 @@ +package com.mogo.och.bus.util; + +import android.text.TextUtils; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.app.AppConfigInfo; +import com.mogo.eagle.core.function.call.analytics.AnalyticsManager; +import com.mogo.eagle.core.utilcode.util.DateTimeUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.bus.constant.BusConst; + +import java.util.HashMap; +import java.util.Map; + +/** + * OCH Bus埋点工具 + * + * Created on 2022/3/24 + */ +public class BusAnalyticsUtil { + + /** + * 触发'滑动出发'埋点流程: + * 滑动出发(开启自动驾驶)后,15s内成功则发送成功埋点,否则发送失败埋点 + * @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点) + */ + public static void triggerStartServiceEvent( + boolean send, String startName, String endName, int lineId) { + + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + String plateNum = AppConfigInfo.INSTANCE.getPlateNumber(); + String dateTime = DateTimeUtils.getTimeText( + System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); + + Map 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); + + Runnable runnable = () -> { + // 15s内未开启,上报失败埋点 + params.put(BusConst.EVENT_PARAM_START_RESULT, false); + AnalyticsManager.INSTANCE.track(BusConst.EVENT_KEY_START_SERVICE, params); + }; + + if (send) { + // 开启成功,上报埋点 + if (runnable != null && UiThreadHandler.getsUiHandler().hasCallbacks(runnable)) { + UiThreadHandler.removeCallbacks(runnable); + } + params.put(BusConst.EVENT_PARAM_START_RESULT, true); + AnalyticsManager.INSTANCE.track(BusConst.EVENT_KEY_START_SERVICE, params); + } else { + UiThreadHandler.postDelayed(runnable, BusConst.LOOP_PERIOD_15S); + } + } +} diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/BusArcView.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/BusArcView.java index 2fd6a41ce5..a9e7bdff5d 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/BusArcView.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/view/BusArcView.java @@ -24,7 +24,7 @@ import com.mogo.och.bus.R; public class BusArcView extends View { //中心的文字描述 - private String mDes = "km/h"; + private String mDes = "KM/H"; //根据数据显示的圆弧Paint private Paint mArcPaint; //圆弧颜色 diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_light_green_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_light_green_nor.png new file mode 100644 index 0000000000..bc9fed952d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_light_green_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_light_red_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_light_red_nor.png new file mode 100644 index 0000000000..8732508ded Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_light_red_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_lightyellow_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_lightyellow_nor.png new file mode 100644 index 0000000000..bae01408fd Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/bus_lightyellow_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/end_maker_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/end_maker_icon.png new file mode 100755 index 0000000000..8acf113151 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/end_maker_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_station_start_end.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_station_start_end.png new file mode 100644 index 0000000000..04580a8f0d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/icon_station_start_end.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_maker_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_maker_icon.png new file mode 100644 index 0000000000..9eca61e199 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1440/start_maker_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_badcase_btn_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_badcase_btn_bg.png new file mode 100644 index 0000000000..89a6eaa5dc Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_badcase_btn_bg.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_base_icon_not_in_autopilot.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_base_icon_not_in_autopilot.png new file mode 100644 index 0000000000..927296d690 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_base_icon_not_in_autopilot.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_base_slide_block.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_base_slide_block.png new file mode 100644 index 0000000000..ed7b293b90 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_base_slide_block.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_disable_autopilot_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_disable_autopilot_icon.png new file mode 100644 index 0000000000..170f254cd1 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_disable_autopilot_icon.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_icon_arrived_station.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_icon_arrived_station.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_icon_arrived_station.png rename to OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_icon_arrived_station.png diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_icon_arriving_station.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_icon_arriving_station.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_icon_arriving_station.png rename to OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_icon_arriving_station.png diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_light_green_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_light_green_nor.png new file mode 100644 index 0000000000..bc9fed952d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_light_green_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_light_red_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_light_red_nor.png new file mode 100644 index 0000000000..8732508ded Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_light_red_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_lightyellow_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_lightyellow_nor.png new file mode 100644 index 0000000000..bae01408fd Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_lightyellow_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_loading_autopilot_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_loading_autopilot_icon.png new file mode 100644 index 0000000000..f21a1081f1 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_loading_autopilot_icon.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_dot_line.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_och_dot_line.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_dot_line.png rename to OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_och_dot_line.png diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_right_autopilot_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_right_autopilot_icon.png new file mode 100644 index 0000000000..cc2b18083d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_right_autopilot_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_setting_btn_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_setting_btn_bg.png new file mode 100644 index 0000000000..ba41bf3a53 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_setting_btn_bg.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_switch_map_angle.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_switch_map_angle.png new file mode 100644 index 0000000000..3e1b96f3e3 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_switch_map_angle.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_wrong_autopilot_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_wrong_autopilot_icon.png new file mode 100644 index 0000000000..0c8988acb3 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi-2560x1600/bus_wrong_autopilot_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_badcase_btn_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_badcase_btn_bg.png new file mode 100644 index 0000000000..89a6eaa5dc Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_badcase_btn_bg.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_icon_not_in_autopilot.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_icon_not_in_autopilot.png index 21dc719ec9..927296d690 100644 Binary files a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_icon_not_in_autopilot.png and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_icon_not_in_autopilot.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_slide_block.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_slide_block.png index 8ffd0abe52..ed7b293b90 100644 Binary files a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_slide_block.png and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_base_slide_block.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arrived_station.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arrived_station.png index a676a789c3..8a065b66dd 100644 Binary files a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arrived_station.png and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arrived_station.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arriving_station.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arriving_station.png index e1fd463963..4ed57a0e30 100644 Binary files a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arriving_station.png and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_icon_arriving_station.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_light_green_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_light_green_nor.png new file mode 100644 index 0000000000..bc9fed952d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_light_green_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_light_red_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_light_red_nor.png new file mode 100644 index 0000000000..8732508ded Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_light_red_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_lightyellow_nor.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_lightyellow_nor.png new file mode 100644 index 0000000000..bae01408fd Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_lightyellow_nor.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_och_dot_line.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_och_dot_line.png new file mode 100644 index 0000000000..a720a532ea Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_och_dot_line.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_ap_badcase_check.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_selected_btn.png similarity index 100% rename from core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_ap_badcase_check.png rename to OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_selected_btn.png diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_setting_btn_bg.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_setting_btn_bg.png new file mode 100644 index 0000000000..ba41bf3a53 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_setting_btn_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_cancel_close1.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_switch_line_close.png similarity index 100% rename from OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_cancel_close1.png rename to OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_switch_line_close.png diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_ap_badcase_default.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_unselect_btn.png similarity index 100% rename from core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_ap_badcase_default.png rename to OCH/mogo-och-bus/src/main/res/drawable-xhdpi/bus_unselect_btn.png diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/end_maker_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/end_maker_icon.png new file mode 100755 index 0000000000..8acf113151 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/end_maker_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_station_start_end.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_station_start_end.png new file mode 100644 index 0000000000..04580a8f0d Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/icon_station_start_end.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_maker_icon.png b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_maker_icon.png new file mode 100644 index 0000000000..9eca61e199 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/drawable-xhdpi/start_maker_icon.png differ diff --git a/OCH/mogo-och-bus/src/main/res/drawable/bg_bus_traffic_light_background.xml b/OCH/mogo-och-bus/src/main/res/drawable/bg_bus_traffic_light_background.xml new file mode 100644 index 0000000000..e0b90b9c55 --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/drawable/bg_bus_traffic_light_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml index 7cf9966090..8bf210c856 100644 --- a/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_base_fragment.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:layout_marginTop="@dimen/dp_72"> + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/bus_traffic_light_view.xml b/OCH/mogo-och-bus/src/main/res/layout/bus_traffic_light_view.xml new file mode 100644 index 0000000000..05f2d9c38b --- /dev/null +++ b/OCH/mogo-och-bus/src/main/res/layout/bus_traffic_light_view.xml @@ -0,0 +1,35 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml b/OCH/mogo-och-bus/src/main/res/layout/fragment_och_bus.xml index 558429d9ec..0c307b9d24 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 @@ -75,13 +75,16 @@ @@ -114,12 +117,15 @@ diff --git a/OCH/mogo-och-bus/src/main/res/raw/end_marker.nt3d b/OCH/mogo-och-bus/src/main/res/raw/end_marker.nt3d new file mode 100644 index 0000000000..be6057c547 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/raw/end_marker.nt3d differ diff --git a/OCH/mogo-och-bus/src/main/res/raw/star_marker.nt3d b/OCH/mogo-och-bus/src/main/res/raw/star_marker.nt3d new file mode 100644 index 0000000000..c6e546fc31 Binary files /dev/null and b/OCH/mogo-och-bus/src/main/res/raw/star_marker.nt3d differ diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml index 3ef9d9d932..a27b69ae1d 100644 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1440/dimens.xml @@ -124,4 +124,16 @@ 20px + 225px + 154px + 60px + 40px + 23px + 210px + 120px + 15px + 17px + 154px + 130px + 60px \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml index 8f068b0633..9c23585e71 100644 --- a/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values-xhdpi-2560x1600/dimens.xml @@ -121,4 +121,17 @@ 120px 86px 50px + + 225px + 154px + 60px + 40px + 23px + 210px + 120px + 15px + 17px + 154px + 130px + 60px \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/colors.xml b/OCH/mogo-och-bus/src/main/res/values/colors.xml index a702d05967..600e6c2c33 100644 --- a/OCH/mogo-och-bus/src/main/res/values/colors.xml +++ b/OCH/mogo-och-bus/src/main/res/values/colors.xml @@ -38,4 +38,10 @@ #19FFFFFF #FFFFFF + #FFFFA28B + #FFDA1100 + #FF60FFD3 + #FF006D43 + #FFFFE198 + #FFFF9B00 \ No newline at end of file diff --git a/OCH/mogo-och-bus/src/main/res/values/dimens.xml b/OCH/mogo-och-bus/src/main/res/values/dimens.xml index 49e258a5e0..51d39b3e5c 100644 --- a/OCH/mogo-och-bus/src/main/res/values/dimens.xml +++ b/OCH/mogo-och-bus/src/main/res/values/dimens.xml @@ -137,4 +137,17 @@ 72px 52px 20px + + 225px + 154px + 60px + 40px + 23px + 210px + 120px + 15px + 17px + 154px + 130px + 60px \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/build.gradle b/OCH/mogo-och-taxi-passenger/build.gradle index 8b22040630..07c786beb2 100644 --- a/OCH/mogo-och-taxi-passenger/build.gradle +++ b/OCH/mogo-och-taxi-passenger/build.gradle @@ -53,13 +53,13 @@ dependencies { implementation rootProject.ext.dependencies.rxandroid implementation rootProject.ext.dependencies.androidxconstraintlayout implementation rootProject.ext.dependencies.amapnavi3dmap + implementation rootProject.ext.dependencies.amapsearch if (Boolean.valueOf(USE_MAVEN_PACKAGE)) { implementation rootProject.ext.dependencies.mogoutils implementation rootProject.ext.dependencies.mogocommons implementation rootProject.ext.dependencies.modulecommon implementation rootProject.ext.dependencies.mogo_core_data implementation rootProject.ext.dependencies.mogo_core_function_call - implementation rootProject.ext.dependencies.mogo_core_function_smp implementation rootProject.ext.dependencies.mogo_core_function_v2x }else { implementation project(":core:mogo-core-utils") @@ -67,7 +67,6 @@ dependencies { implementation project(':modules:mogo-module-common') implementation project(':core:mogo-core-data') implementation project(':core:mogo-core-function-call') - implementation project(':core:function-impl:mogo-core-function-smp') implementation project(':core:function-impl:mogo-core-function-v2x') } } diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data new file mode 100755 index 0000000000..0e9e36690e Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style.data differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data new file mode 100755 index 0000000000..7aa8fa7b45 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/assets/map_style_extra.data differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxi.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxi.java deleted file mode 100644 index 8a9b2a2233..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxi.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.mogo.och.taxi.passenger; - -import android.content.Context; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.alibaba.android.arouter.facade.annotation.Route; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.taxi.passenger.constant.OCHTaxiConst; -import com.mogo.och.taxi.passenger.ui.OCHTaxiFragment; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public -/** - * @author congtaowang - * @since 2021/1/15 - *

- * 网约车-出租车 - */ -@Route( path = OCHTaxiConst.PATH ) -class MogoOCHTaxi implements IMogoOCH, IMogoStatusChangedListener { - - private static final String TAG = "MogoOCHTaxi"; - private OCHTaxiFragment ochTaxiFragment; - private FragmentActivity mActivity; - private int mContainerId; - @Override - public void init( Context context ) { - Logger.d( TAG, "init" ); - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("ochTaxi", StatusDescriptor.VR_MODE,this); - MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("ochTaxi", StatusDescriptor.TOP_VIEW,this); - } - - /** - * 进入鹰眼模式,设置手势缩放地图失效 - */ - private void stepIntoVrMode() { - Logger.d( TAG, "进入vr模式" ); - MogoApisHandler.getInstance() - .getApis() - .getMapServiceApi() - .getMapUIController() - .openVrMode( false ); - } - - private void showFragment() { - if (ochTaxiFragment == null) { - Logger.d(TAG, "准备add fragment======"); - ochTaxiFragment = new OCHTaxiFragment(); - mActivity.getSupportFragmentManager().beginTransaction().add(mContainerId, ochTaxiFragment).commitAllowingStateLoss(); - return; - } - Logger.d(TAG, "准备show fragment"); - mActivity.getSupportFragmentManager().beginTransaction().show(ochTaxiFragment).commitAllowingStateLoss(); - } - - private void hideFragment(){ - if (ochTaxiFragment != null){ - mActivity.getSupportFragmentManager().beginTransaction().hide(ochTaxiFragment).commitAllowingStateLoss(); - } - } - - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (descriptor == StatusDescriptor.VR_MODE){ - if (isTrue){ - showFragment(); - }else { - hideFragment(); - } - } - } - - @Override - public void createCoverage(FragmentActivity activity, int containerId) { - - } - - @NotNull - @Override - public String getFunctionName() { - return null; - } - - @Nullable - @Override - public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) { - this.mActivity = fragmentActivity; - this.mContainerId = integer; - - UiThreadHandler.postDelayed(() -> stepIntoVrMode(), 5_000L); - return null; - } - - @Override - public void onDestroy() { - - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java new file mode 100644 index 0000000000..e633e71bb7 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/MogoOCHTaxiPassenger.java @@ -0,0 +1,107 @@ +package com.mogo.och.taxi.passenger; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +import android.content.Context; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.MogoMapUIController; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; +import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public +/** + * @author congtaowang + * @since 2021/1/15 + *

+ * 网约车-出租车-乘客端 + */ +@Route( path = TaxiPassengerConst.PATH ) +class MogoOCHTaxiPassenger implements IMogoOCH, IMogoStatusChangedListener { + + private static final String TAG = "MogoOCHTaxiPassenger"; + private TaxiPassengerBaseFragment ochTaxiPassengerFragment; + private FragmentActivity mActivity; + private int mContainerId; + @Override + public void init( Context context ) { + CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "init" ); + MogoApisHandler.getInstance().getApis().getStatusManagerApi().registerStatusChangedListener("ochTaxi", StatusDescriptor.VR_MODE,this); + } + + /** + * 进入鹰眼模式,设置手势缩放地图失效 + */ + private void stepIntoVrMode() { + CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "进入vr模式" ); + MogoMapUIController.getInstance() + .stepInVrMode( false ); + } + + private void showFragment() { + if (ochTaxiPassengerFragment == null) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "准备add fragment======"); + ochTaxiPassengerFragment = new TaxiPassengerBaseFragment(); + mActivity.getSupportFragmentManager().beginTransaction().add(mContainerId, ochTaxiPassengerFragment).commitAllowingStateLoss(); + return; + } + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "准备show fragment"); + mActivity.getSupportFragmentManager().beginTransaction().show(ochTaxiPassengerFragment).commitAllowingStateLoss(); + } + + private void hideFragment(){ + if (ochTaxiPassengerFragment != null){ + mActivity.getSupportFragmentManager().beginTransaction().hide(ochTaxiPassengerFragment).commitAllowingStateLoss(); + } + } + + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (descriptor == StatusDescriptor.VR_MODE){ + if (isTrue){ + showFragment(); + }else { + hideFragment(); + } + } + } + + @Override + public void createCoverage(FragmentActivity activity, int containerId) { + + } + + @NotNull + @Override + public String getFunctionName() { + return null; + } + + @Nullable + @Override + public Fragment createCoverage(@Nullable FragmentActivity fragmentActivity, @Nullable Integer integer) { + this.mActivity = fragmentActivity; + this.mContainerId = integer; + +// UiThreadHandler.postDelayed(() -> stepIntoVrMode(), 5_000L); + return null; + } + + @Override + public void onDestroy() { +// 若不调用finish, 设置中打开关闭UITouch,会造成och fragment 重叠 + if (mActivity == null) return; + mActivity.finish(); + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/OCHTaxiOverlayManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/OCHTaxiOverlayManager.java deleted file mode 100644 index e56ae47928..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/OCHTaxiOverlayManager.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.mogo.och.taxi.passenger; - -import android.content.Context; - -import com.mogo.eagle.core.data.map.MogoLatLng; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.v2x.events.utils.LocationUtils; -import com.mogo.eagle.core.utilcode.util.ColorUtils; -import com.mogo.map.overlay.IMogoOverlayManager; -import com.mogo.map.overlay.IMogoPolyline; -import com.mogo.map.overlay.MogoPolylineOptions; -import com.mogo.module.common.MogoApisHandler; -import java.util.ArrayList; -import java.util.List; - -public class OCHTaxiOverlayManager { - - - private IMogoPolyline mMoGoPolyline; - // 连接线参数 - private MogoPolylineOptions mPolylineOptions; - // 线路径集合 - private List mPolylinePointList; - // 渐变色 - private List mPolylineColors; - private Context mContext; - IMogoOverlayManager mogoOverlayManager; - public OCHTaxiOverlayManager(Context context) { - mPolylineOptions = new MogoPolylineOptions(); - // 绘制路径集合 - mPolylinePointList = new ArrayList<>(); - // 引导线颜色 - mPolylineColors = new ArrayList<>(); - mContext = context; - mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext); - } - - /** - * 绘制最优路线 - * - * @param polylinePoint 要绘制的经纬度度集合 - */ - public IMogoPolyline draw(MogoLocation carLocal, List polylinePoint) { - if (mMoGoPolyline != null) { - mMoGoPolyline.remove(); - mPolylinePointList.clear(); - mPolylineColors.clear(); - } - if (polylinePoint != null) { - - // 将当前车辆位置放进去 - mPolylinePointList.add(new MogoLatLng(carLocal.getLatitude(), carLocal.getLongitude())); - // 过滤后台推送的推荐路线集合 - for (MogoLatLng polyline : polylinePoint) { - //需要剔除已经行驶过的经纬度,这里需要比对推荐路线集合中的点是否在当前车辆行驶方向前面如果不在则抛弃 - if (LocationUtils.isPointOnCarFront(carLocal, polyline)) { - mPolylinePointList.add(polyline); - } - } - mPolylineColors.addAll(ColorUtils.getGradientAlpha("#002965ED", "#FF2965ED", "#002965ED", mPolylinePointList.size())); - // 替换路径集合 - mPolylineOptions.points(mPolylinePointList); - // 线条粗细,渐变,渐变色值 - mPolylineOptions.width(25).useGradient(true).colorValues(mPolylineColors); - // 绘制线 - mMoGoPolyline = mogoOverlayManager.addPolyline(mPolylineOptions); - } - return mMoGoPolyline; - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/CarHeartbeatReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/CarHeartbeatReqBean.java deleted file mode 100644 index 5b0d3282f0..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/CarHeartbeatReqBean.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.och.taxi.passenger.constant.OCHTaxiConst; - -import java.util.UUID; - -/** - * Created on 2021/9/16 - * - * 上传车机心跳信息请求数据 - */ -public class CarHeartbeatReqBean { - public String sn; - public double lon; //经度 - public double lat; //纬度 - public String msgId; //心跳信息唯一标识 - public int interval; //上报间隔,单位秒,非必传,默认60秒 - - public CarHeartbeatReqBean(String sn, double lon, double lat) { - this.sn = sn; - this.lon = lon; - this.lat = lat; - this.msgId = UUID.randomUUID().toString(); - this.interval = (int) (OCHTaxiConst.LOOP_PERIOD_60S / 1000); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverServiceDataRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverServiceDataRespBean.java deleted file mode 100644 index 09251e601b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverServiceDataRespBean.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * Created on 2021/9/17 - * - * 司机运营数据返回数据结构 - */ -public class DriverServiceDataRespBean extends BaseData { - public Result data; - - public static class Result { - public Immediate immediate; //daily数据 - } - - public static class Immediate { - public long timeDuration; //当日在线时长,单位秒 - public long orderNum; //当日完成订单数 - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverStatusQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverStatusQueryRespBean.java deleted file mode 100644 index 0081acf8e0..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverStatusQueryRespBean.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * Created by pangfan on 2021/8/19 - * - * 收车/出车状态查询返回数据结构 - */ -public class DriverStatusQueryRespBean extends BaseData { - public Result data; - - public static class Result { - public int serviceStatus; //0收车,1出车 - public long serviceOrderId; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverStatusUpdateReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverStatusUpdateReqBean.java deleted file mode 100644 index 8dfa1af49c..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/DriverStatusUpdateReqBean.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created by pangfan on 2021/8/19 - * - * 收车/出车状态更新请求数据结构 - */ -public class DriverStatusUpdateReqBean { - public String sn; - public int status; //0收车,1出车 - - public DriverStatusUpdateReqBean(String sn, int status) { - this.sn = sn; - this.status = status; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderCancelReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderCancelReqBean.java deleted file mode 100644 index 78ce76e482..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderCancelReqBean.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created by pangfan on 2021/8/19 - * - * 司机取消订单请求的数据结构 - */ -public class OrderCancelReqBean { - public String sn; - public long order_id; //订单号(必须) - public int cancel_type; //取消类型(必须) - public String cancel_reason; //取消原因(必须) - - public OrderCancelReqBean(String sn, long order_id, int cancel_type, String cancel_reason) { - this.sn = sn; - this.order_id = order_id; - this.cancel_type = cancel_type; - this.cancel_reason = cancel_reason; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabReqBean.java deleted file mode 100644 index c96c2d5ee8..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabReqBean.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created on 2021/9/7 - * - * (预约单)抢单动作的请求数据结构 - */ -public class OrderGrabReqBean { - public String sn; - public long orderId; - - public OrderGrabReqBean(String sn, long orderId) { - this.sn = sn; - this.orderId = orderId; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabRespBean.java deleted file mode 100644 index bc4970b7e3..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabRespBean.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * Created on 2021/9/7 - * - * (预约单)抢单动作的返回数据结构 - */ -public class OrderGrabRespBean extends BaseData { - public long data; // 暂不使用 -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabStatusQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabStatusQueryRespBean.java deleted file mode 100644 index 1e64ef93f1..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderGrabStatusQueryRespBean.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * Created on 2021/9/7 - * - * (预约单)查询抢单结果的返回数据结构 - */ -public class OrderGrabStatusQueryRespBean extends BaseData { - public Result data; - - public static class Result { - public int grabStatus; //0:抢单中; 1:抢单结束,匹配; 2:抢单结束,匹配到其他司机;3:订单已取消;4:非法,不是选择的自己 - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryReqBean.java deleted file mode 100644 index d0a1c79b09..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryReqBean.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created by pangfan on 2021/8/19 - * - * 查询订单信息请求数据结构 - */ -public class OrderQueryReqBean { - - public String sn; - public long orderId; - - public OrderQueryReqBean(String sn, long orderId) { - this.sn = sn; - this.orderId = orderId; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRespBean.java deleted file mode 100644 index 51b901163e..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRespBean.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; -import java.util.Objects; - -/** - * Created by pangfan on 2021/8/19 - * - * 查询订单返回数据结构 - */ -public class OrderQueryRespBean extends BaseData { - public Result data; - - public static class Result implements Comparable{ - // 订单id - public long orderId; - // 订单类型 - public int orderType; //1即时单 2预约单 - // 订单状态 - public int orderStatus; - // 订单运营类型 (9出租车,10小巴) - public int businessType; - // 起始站点id - public int startSiteId; - // 起始站点名称 - public String startSiteAddr; - // 起始站点坐标 - public List startSitePoint; //wgs坐标,用于自动驾驶 [lon,lat] - public List startSiteGcjPoint; //高德坐标,用于本地计算距离 [lon,lat] - // 终点站点id - public int endSiteId; - // 终点站点名称 - public String endSiteAddr; - // 终点站点坐标 - public List endSitePoint; //wgs坐标,用于自动驾驶 [lon,lat] - public List endSiteGcjPoint; //高德坐标,用于计算距离 [lon,lat] - - // 车牌号 - public String carNumber; - //订单创建时间戳 - public long createTime; - //开始服务时间戳:司机点击'开始服务'后订单状态更新成功的时间 - public long startTime; - //预计用车时间:预约单=下单时的预约用车时间;即时单=派单成功的时间+预估的达到上车点的时间 - public long bookingTime; - - - - // !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km - public double travelDistance; - - /** - * @param distance - */ - public void decreaseTravelDistance( double distance ) { - travelDistance = ( ( float ) distance / 1000f ); - if ( travelDistance < 0 ) { - travelDistance = 0; - } - } - - @Override - public int compareTo(Result o) { - long result = this.orderId - o.orderId; - return result == 0 ? 0 : (result > 0 ? 1 : -1); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Result result = (Result) o; - return orderId == result.orderId && - orderType == result.orderType && - orderStatus == result.orderStatus && - businessType == result.businessType; - } - - @Override - public int hashCode() { - return Objects.hash(orderId, orderType, orderStatus, businessType, startSiteId, - startSiteAddr, startSitePoint, startSiteGcjPoint, endSiteId, endSiteAddr, - endSitePoint, endSiteGcjPoint, carNumber, createTime, startTime, travelDistance); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRouteInfoReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRouteInfoReqBean.java deleted file mode 100644 index bcaf6658bd..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRouteInfoReqBean.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created on 2021/9/7 - * - * 查询订单路径信息(起始点里程、预估时间等)请求数据结构 - */ -public class OrderQueryRouteInfoReqBean { - public String sn; - public long orderId; - - public OrderQueryRouteInfoReqBean(String sn, long orderId) { - this.sn = sn; - this.orderId = orderId; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRouteInfoRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRouteInfoRespBean.java deleted file mode 100644 index 551e70925f..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderQueryRouteInfoRespBean.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -/** - * Created on 2021/9/7 - * - * 查询订单路径信息(起始点里程、预估时间等)返回数据结构 - */ -public class OrderQueryRouteInfoRespBean extends BaseData { - public Result data; - - public static class Result { - // 到上车点 - public long durationToStart; //司机绑定时的位置距离上车点时长,单位:秒 - public long distanceToStart; //司机绑定时的位置距离上车点距离,单位:米 - - // 起点至终点 - public long durationToEnd; //订单上车点到目的地的时长,单位:秒 - public long distanceToEnd; //订单上车点到目的地的距离,单位:米 - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderStatusUpdateReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderStatusUpdateReqBean.java deleted file mode 100644 index 6d99c1e0bf..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrderStatusUpdateReqBean.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created by pangfan on 2021/8/19 - * - * 订单状态更新请求数据结构 - */ -public class OrderStatusUpdateReqBean { - public String sn; - public long orderId; - public int orderStatus; - - public OrderStatusUpdateReqBean(String sn, long orderId, int orderStatus) { - this.sn = sn; - this.orderId = orderId; - this.orderStatus = orderStatus; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersInServiceQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersInServiceQueryRespBean.java deleted file mode 100644 index f594fd6178..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersInServiceQueryRespBean.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -/** - * Created on 2021/9/8 - * - * 查询全部服务中/待服务订单的返回数据 - */ -public class OrdersInServiceQueryRespBean extends BaseData { - public Result data; - - public static class Result { - public List servicing; //服务中订单 - public List waitService; //待服务订单 - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersListQueryReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersListQueryReqBean.java deleted file mode 100644 index 767828d2d4..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersListQueryReqBean.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -/** - * Created by pangfan on 2021/8/19 - * - * 查询订单列表请求数据结构 - */ -public class OrdersListQueryReqBean { - - public String sn; - public int page; //页码,从0开始 - public int size; //每页条数 - - public OrdersListQueryReqBean(String sn, int page, int size) { - this.sn = sn; - this.page = page; - this.size = size; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersListQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersListQueryRespBean.java deleted file mode 100644 index 98e61a7fe8..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersListQueryRespBean.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -/** - * Created by pangfan on 2021/8/19 - */ -public class OrdersListQueryRespBean extends BaseData { - public Result data; - - public static class Result { - public List orders; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersNewBookingQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersNewBookingQueryRespBean.java deleted file mode 100644 index 3c9aad7030..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/OrdersNewBookingQueryRespBean.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.taxi.passenger.bean; - -import com.mogo.eagle.core.data.BaseData; - -import java.util.List; - -/** - * Created on 2021/9/8 - * - * 查询新到的预约单的返回数据结构 - */ -public class OrdersNewBookingQueryRespBean extends BaseData { - public Result data; - - public static class Result { - public List orders; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCarHeartbeatReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCarHeartbeatReqBean.java new file mode 100644 index 0000000000..02d24c51b3 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerCarHeartbeatReqBean.java @@ -0,0 +1,26 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; + +import java.util.UUID; + +/** + * Created on 2021/9/16 + * + * 上传车机心跳信息请求数据 + */ +public class TaxiPassengerCarHeartbeatReqBean { + public String sn; + public double lon; //经度 + public double lat; //纬度 + public String msgId; //心跳信息唯一标识 + public int interval; //上报间隔,单位秒,非必传,默认60秒 + + public TaxiPassengerCarHeartbeatReqBean(String sn, double lon, double lat) { + this.sn = sn; + this.lon = lon; + this.lat = lat; + this.msgId = UUID.randomUUID().toString(); + this.interval = (int) (TaxiPassengerConst.LOOP_PERIOD_60S / 1000); + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java new file mode 100644 index 0000000000..3ff370d2c2 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRemainingResp.java @@ -0,0 +1,20 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; +import java.util.Objects; + +/** + * Created by pangfan on 2021/8/19 + * + * 查询订单返回数据结构 + */ +public class TaxiPassengerOrderQueryRemainingResp extends BaseData { + public Result data; + + public static class Result { + public long distance; + public long duration; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryReqBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryReqBean.java new file mode 100644 index 0000000000..c15f77d484 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryReqBean.java @@ -0,0 +1,17 @@ +package com.mogo.och.taxi.passenger.bean; + +/** + * Created by pangfan on 2021/8/19 + * + * 查询订单信息请求数据结构 + */ +public class TaxiPassengerOrderQueryReqBean { + + public String driverSn; + public String orderNo; + + public TaxiPassengerOrderQueryReqBean(String driverSn, String orderNo) { + this.driverSn = driverSn; + this.orderNo = orderNo; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java new file mode 100644 index 0000000000..5b1da564c7 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrderQueryRespBean.java @@ -0,0 +1,88 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; +import java.util.Objects; + +/** + * Created by pangfan on 2021/8/19 + * + * 查询订单返回数据结构 + */ +public class TaxiPassengerOrderQueryRespBean extends BaseData { + public Result data; + + public static class Result implements Comparable{ + // 订单no + public String orderNo; + // 订单类型 + public int orderType; //1即时单 2预约单 + // 订单状态 + public int orderStatus; + // 订单运营类型 (9出租车,10小巴) + public int businessType; + // 起始站点id + public int startSiteId; + // 起始站点名称 + public String startSiteAddr; + // 起始站点坐标 + public List startSitePoint; //wgs坐标,用于自动驾驶 [lon,lat] + public List startSiteGcjPoint; //高德坐标,用于本地计算距离 [lon,lat] + // 终点站点id + public int endSiteId; + // 终点站点名称 + public String endSiteAddr; + // 终点站点坐标 + public List endSitePoint; //wgs坐标,用于自动驾驶 [lon,lat] + public List endSiteGcjPoint; //高德坐标,用于计算距离 [lon,lat] + + // 车牌号 + public String carNumber; + //订单创建时间戳 + public long createTime; + //开始服务时间戳:司机点击'开始服务'后订单状态更新成功的时间 + public long startTime; + //预计用车时间:预约单=下单时的预约用车时间;即时单=派单成功的时间+预估的达到上车点的时间 + public long bookingTime; + + + + // !!!接口中暂无此字段,仅用于本地实现逻辑使用:起始站目的站距离km + public double travelDistance; + + /** + * @param distance + */ + public void decreaseTravelDistance( double distance ) { + travelDistance = ( ( float ) distance / 1000f ); + if ( travelDistance < 0 ) { + travelDistance = 0; + } + } + + @Override + public int compareTo(Result o) { + boolean isEqual = this.orderNo.equals(o.orderNo); + return isEqual ? 0 : 1; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Result result = (Result) o; + return Objects.equals(orderNo, result.orderNo) && + orderType == result.orderType && + orderStatus == result.orderStatus && + businessType == result.businessType; + } + + @Override + public int hashCode() { + return Objects.hash(orderNo, orderType, orderStatus, businessType, startSiteId, + startSiteAddr, startSitePoint, startSiteGcjPoint, endSiteId, endSiteAddr, + endSitePoint, endSiteGcjPoint, carNumber, createTime, startTime, travelDistance); + } + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java new file mode 100644 index 0000000000..08925ce3d9 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerOrdersInServiceQueryRespBean.java @@ -0,0 +1,19 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * Created on 2021/9/8 + * + * 查询全部服务中/待服务订单的返回数据 + */ +public class TaxiPassengerOrdersInServiceQueryRespBean extends BaseData { + public Result data; + + public static class Result { + public List servicing; //服务中订单 + public List waitService; //待服务订单 + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java new file mode 100644 index 0000000000..48ee6c654b --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/bean/TaxiPassengerQueryOrderRouteResp.java @@ -0,0 +1,13 @@ +package com.mogo.och.taxi.passenger.bean; + +import com.amap.api.maps.model.LatLng; +import com.mogo.eagle.core.data.BaseData; + +import java.util.List; + +/** + * Created by pangfan on 2021/8/19 + */ +public class TaxiPassengerQueryOrderRouteResp extends BaseData { + public List data; +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiADASStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiADASStatusCallback.java deleted file mode 100644 index ff28cdbe95..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiADASStatusCallback.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) - */ -public interface IOCHTaxiADASStatusCallback { - // 自动驾驶触发的已到达目的地:暂未用到 - void onAutopilotArriveEnd(); - - // 自动驾驶可用状态 - void onAutopilotEnable(); - - // 自动驾驶不可用状态 - void onAutopilotDisable(); - - // 自动驾驶运行中 - void onAutopilotRunning(); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiAutopilotPlanningCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiAutopilotPlanningCallback.java deleted file mode 100644 index 2bbd29669f..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiAutopilotPlanningCallback.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo; - -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2021/11/1 - */ -public interface IOCHTaxiAutopilotPlanningCallback { - void routeResult(List models); -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiCarStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiCarStatusCallback.java deleted file mode 100644 index d59144e86c..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiCarStatusCallback.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:出车/收车状态变更 - */ -public interface IOCHTaxiCarStatusCallback { - void onCarStatusChanged(boolean inOperation); - - void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiControllerStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiControllerStatusCallback.java deleted file mode 100644 index f40c0ea82d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiControllerStatusCallback.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -import android.location.Location; - -/** - * Created on 2021/9/10 - * - * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) - */ -public interface IOCHTaxiControllerStatusCallback { - // 是否vr map模式 - void onVRModeChanged(boolean isVRMode); - // 自车定位 - void onCarLocationChanged(Location location); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiNaviChangedCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiNaviChangedCallback.java deleted file mode 100644 index 9205cd3e26..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiNaviChangedCallback.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -/** - * @author: wangmingjun - * @date: 2021/12/3 - */ -public interface IOCHTaxiNaviChangedCallback { - // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentNaviDistAndTimeChanged(int meters, int timeInSecond); - void reInitNaviAmap(boolean isPlay,boolean isRestart); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiOrderStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiOrderStatusCallback.java deleted file mode 100644 index 4891db386f..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiOrderStatusCallback.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.mogo.och.taxi.passenger.callback; - -import androidx.annotation.NonNull; - -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; - -import java.util.List; - -/** - * Created on 2021/9/8 - * - * Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等) - */ -public interface IOCHTaxiOrderStatusCallback { - // 进行中单变更:暂未用到 - void onOrdersInServiceChanged(@NonNull List inServiceList); - // 待服务单变更 - void onOrdersWaitServiceChanged(@NonNull List waitServiceList); - - // 当前进行单状态变更:新到进行中订单、进行中单状态变更 - void onCurrentOrderStatusChanged(OrderQueryRespBean.Result order); - // 当前订单取消完成:用于司机主动取消订单的结果反馈 - void onCurrentOrderCancelDone(); - // 待服务单被取消 - void onOrderCancelDone(long orderId); - // 当前订单route信息查询反馈 - void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo); - // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentOrderDistToStartChanged(long meters, long timeInSecond); - // 当前位置距离上车点的距离(米)、预估时间(秒) - void onCurrentOrderDistToEndChanged(long meters, long timeInSecond); - - // 获取全部订单列表(含已完成、已取消)的反馈 - void onOrdersListPageRefresh(List ordersList); - - // 新到预约单 - void onNewBookingOrderGot(OrderQueryRespBean.Result order); - - // 执行抢单动作完成:可进入抢单中状态 - void onGrabOrderExecuteDone(); - - // 抢到预约单 - void onGrabOrderSuccess(OrderQueryRespBean.Result order); - - // 未抢到预约单 - void onGrabOrderFailed(OrderQueryRespBean.Result order); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java new file mode 100644 index 0000000000..df56841e67 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerADASStatusCallback.java @@ -0,0 +1,20 @@ +package com.mogo.och.taxi.passenger.callback; + +/** + * Created on 2021/9/8 + * + * Model->Presenter回调:ADAS相关(自动驾驶状态回调,到达终点等等) + */ +public interface IOCHTaxiPassengerADASStatusCallback { + // 自动驾驶触发的已到达目的地:暂未用到 + void onAutopilotArriveEnd(); + + // 自动驾驶可用状态 + void onAutopilotEnable(); + + // 自动驾驶不可用状态 + void onAutopilotDisable(); + + // 自动驾驶运行中 + void onAutopilotRunning(); +} 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 new file mode 100644 index 0000000000..3f1cb1bac3 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerAutopilotPlanningCallback.java @@ -0,0 +1,16 @@ +package com.mogo.och.taxi.passenger.callback; + + +import com.amap.api.maps.model.LatLng; + +import java.util.List; + +import mogo.telematics.pad.MessagePad; +/** + * @author: wangmingjun + * @date: 2021/11/1 + */ +public interface IOCHTaxiPassengerAutopilotPlanningCallback { + void routeResult(List models); + void routeResultByServer(List models); +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerControllerStatusCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerControllerStatusCallback.java new file mode 100644 index 0000000000..8ad329a33a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerControllerStatusCallback.java @@ -0,0 +1,15 @@ +package com.mogo.och.taxi.passenger.callback; + +import android.location.Location; + +/** + * Created on 2021/9/10 + * + * Model->Presenter回调:状态控制器监听(accOn、adas ui show、voice ui show、push ui show、v2x ui show等等) + */ +public interface IOCHTaxiPassengerControllerStatusCallback { + // 是否vr map模式 + void onVRModeChanged(boolean isVRMode); + // 自车定位 + void onCarLocationChanged(Location location); +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java new file mode 100644 index 0000000000..e30e544db8 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerNaviChangedCallback.java @@ -0,0 +1,10 @@ +package com.mogo.och.taxi.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2021/12/3 + */ +public interface IOCHTaxiPassengerNaviChangedCallback { + // 当前位置距离上车点的距离(米)、预估时间(秒) 、当前路的名称 + void onCurrentRoadName(String currentRoadName); +} 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 new file mode 100644 index 0000000000..4f82627a0c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/IOCHTaxiPassengerOrderStatusCallback.java @@ -0,0 +1,25 @@ +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 + * + * Model->Presenter回调:订单相关(进行中/待服务单变更,当前进行单状态变更,新到预约单,抢单,抢单结果状态等等) + */ +public interface IOCHTaxiPassengerOrderStatusCallback { + + // 当前进行单状态变更:新到进行中订单、进行中单状态变更 + void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order); + + // 当前位置距离上车点的距离(米)、预估时间(秒) + void onCurrentOrderDistToEndChanged(long meters, long timeInSecond); + + //当前路名字 + void onCurrentRoadName(String currentRoadName); + +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerMapViewCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerMapViewCallback.java new file mode 100644 index 0000000000..f26039ec07 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerMapViewCallback.java @@ -0,0 +1,9 @@ +package com.mogo.och.taxi.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2022/3/10 + */ +public interface ITaxiPassengerMapViewCallback { + void onCameraChange(float bearing); +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerVeloctityCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerVeloctityCallback.java new file mode 100644 index 0000000000..50cf8d8a65 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/ITaxiPassengerVeloctityCallback.java @@ -0,0 +1,10 @@ +package com.mogo.och.taxi.passenger.callback; + +/** + * @author: wangmingjun + * @date: 2022/3/13 + */ +public interface ITaxiPassengerVeloctityCallback { + //限速 + void onLimitingVelocityChange(int limitingVelocity); +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/Shadow.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/Shadow.kt deleted file mode 100644 index 6b678ce172..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/callback/Shadow.kt +++ /dev/null @@ -1,65 +0,0 @@ -package com.mogo.och.taxi.passenger.callback - -import androidx.annotation.ColorRes - -/** - * @author: wangmingjun - * @date: 2022/1/21 - */ -interface Shadow { - //设置阴影半径 - fun setShadowRadius(radius:Float): Shadow - - //添加单位设置 - fun setShadowRadius(unit:Int,radius: Float): Shadow - - //设置应用颜色 - fun setShadowColor(color:Int): Shadow - - //设置阴影颜色资源文件id - fun setShadowColorRes(@ColorRes color: Int): Shadow - /** - * 设置模糊半径 - * @param radius - */ - fun setBlurRadius(radius:Float): Shadow - - /** - * - * @param unit @{@link android.util.TypedValue#TYPE_DIMENSION} - * @param radius 模糊半径 - */ - fun setBlurRadius(unit:Int,radius:Float): Shadow - - /** - * 设置水平方向的偏移量 - * @param offset x轴偏移 - */ - fun setXOffset(offset:Float): Shadow - - - /** - * 设置x方向的偏移量,设置单位 - * @param unit @{@link android.util.TypedValue#TYPE_DIMENSION} - * @param offset x轴偏移 - */ - fun setXOffset(unit:Int,offset:Float): Shadow - - /** - * 设置竖直方向的偏移量 - * @param offset y轴偏移 - */ - fun setYOffset(offset:Float): Shadow - - /** - * 设置竖直方向的偏移量,带单位 - * @param unit @{@link android.util.TypedValue#TYPE_DIMENSION} - * @param offset y轴偏移 - */ - fun setYOffset(unit:Int,offset:Float): Shadow - - /** - * 更新绘制 - */ - fun commit(); -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OCHTaxiConst.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OCHTaxiConst.kt deleted file mode 100644 index da9eab278c..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OCHTaxiConst.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.mogo.och.taxi.passenger.constant - -import com.mogo.commons.debug.DebugConfig - -/** - * Created on 2021/12/6 - */ -class OCHTaxiConst { - companion object { - - private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com" - private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com" - private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com" - - @JvmStatic - fun getBaseUrl(): String { - return when (DebugConfig.getNetMode()) { - DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_DEMO -> BASE_URL_OCH_DEV - DebugConfig.NET_MODE_QA -> BASE_URL_OCH_QA - DebugConfig.NET_MODE_RELEASE -> BASE_URL_OCH_RELEASE - else -> BASE_URL_OCH_RELEASE - } - } - - // OCH arouter 路由path - const val PATH = "/och/api" - - // 到达起始点围栏 - const val ARRIVE_AT_START_STATION_DISTANCE = 50 //围栏由20m改为50m - - // 上报心跳轮询ms - const val LOOP_PERIOD_60S = 60 * 1000L - - // 轮询查询进行中/待服务订单的间隔时间 2秒 - const val LOOP_PERIOD_2S = 2 * 1000L - // 轮询查询新到预约单 1秒 - const val LOOP_PERIOD_1S = 1 * 1000L - const val LOOP_DELAY = 100L - - // 订单信息 - const val SP_KEY_OCH_TAXI_ORDER = "SP_KEY_OCH_TAXI_ORDER" - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderCancelReasons.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderCancelReasons.kt deleted file mode 100644 index 67150540de..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderCancelReasons.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.mogo.och.taxi.passenger.constant - -/** - * 司机端取消订单的原因定义 - * Created on 2021/12/7 - * - * * String int - * 进行中订单: - * 车况异常 0 - * 设备异常 1 - * 电量不足 2 - * 身体不适 3 - * 乘客未到 4 - * 乘客中途下车 5 - * - * 待服务订单: - * 2000 车辆故障 - * 2001 乘客联系取消 - * 2002 行程冲突 - * 2003 车电量不足 - * 2004 其他 - */ -enum class OrderCancelReasons(val type: Int, val msg: String) { - CarBroken(1000, "车况异常"), - DeviceBroken(1001, "设备异常"), - BatteryLow(1002, "电量不足"), - DriverIsIll(1003, "身体不适"), - PassengerNotArrive(1004, "乘客未到"), - PassengerStopOver(1005, "乘客中途下车"), - - BookCarBroken(2000, "车辆故障"), - BookPassengerCancel(2001, "乘客联系取消"), - BookJourneyConflict(2002, "行程冲突"), - BookBatteryLow(2003, "车电量不足"), - BookOther(2004, "其他"); - - companion object { - @JvmStatic - fun getType(msg: String): Int { - for (value in values()) { - if (value.msg == msg) { - return value.type - } - } - return 0 - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderStatusEnum.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderStatusEnum.kt deleted file mode 100644 index a16e12cdf2..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderStatusEnum.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.mogo.och.taxi.passenger.constant - -/** - * Created on 2021/12/7 - * - * * Old code:START - * 未派单 0 - * 去往上车站点 1 - * 车辆已到达上车站点 2 - * 乘客已到达上车站点 3 - * 去往下车站点 4 - * 到达下车站点 5 - * 已完成 6 - * 已取消 7 - * Old code:END - * - * 0 订单创建(为派单), - * 10 已派上司机(司机去往上车点), - * 20 司机到达上车点, - * 30 乘客到达上车点, - * 40 服务中(去往目的地), - * 50 到达目的地, - * 60 已完成, - * 70 已取消 - */ -enum class OrderStatusEnum(val code: Int) { - None( 0 ), - OnTheWayToStartStation( 10), - ArriveAtStartStation( 20), - UserArriveAtStartStation( 30), - OnTheWayToEndStation( 40), - ArriveAtEndStation( 50), - JourneyCompleted(60),//行程完成 - Cancel( 70); - - companion object { - @JvmStatic - fun valueOf(code: Int): OrderStatusEnum? { - for (value in values()) { - if (value.code == code) { - return value - } - } - return None - } - } -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderTypeEnum.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderTypeEnum.kt deleted file mode 100644 index bcf94ded11..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/OrderTypeEnum.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.mogo.och.taxi.passenger.constant - -/** - * RoboTaxi订单类型声明 - * - * Created on 2021/12/6 - */ -enum class OrderTypeEnum(val type: Int) { - Instant(1), // 即时单 - Reserved(2) // 预约单 -} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt new file mode 100644 index 0000000000..a17c9add6c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerConst.kt @@ -0,0 +1,46 @@ +package com.mogo.och.taxi.passenger.constant + +import com.mogo.commons.debug.DebugConfig + +/** + * Created on 2021/12/6 + */ +class TaxiPassengerConst { + companion object { + + private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com" + private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com" + private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com" + + @JvmStatic + fun getBaseUrl(): String { + return when (DebugConfig.getNetMode()) { + DebugConfig.NET_MODE_DEV, DebugConfig.NET_MODE_DEMO -> BASE_URL_OCH_DEV + DebugConfig.NET_MODE_QA -> BASE_URL_OCH_QA + DebugConfig.NET_MODE_RELEASE -> BASE_URL_OCH_RELEASE + else -> BASE_URL_OCH_RELEASE + } + } + + // OCH arouter 路由path + const val PATH = "/och/api" + + // 上报心跳轮询ms + const val LOOP_PERIOD_60S = 60 * 1000L + + // 轮询查询进行中/待服务订单的间隔时间 2秒 + const val LOOP_PERIOD_2S = 2 * 1000L + // 轮询查询新到预约单 1秒 + const val LOOP_PERIOD_1S = 1 * 1000L + const val LOOP_DELAY = 100L + + // 订单信息 + const val SP_KEY_OCH_TAXI_ORDER = "SP_KEY_OCH_TAXI_ORDER" + + // 订单总里程 + const val SP_KEY_ORDER_SUM_DIS = "SP_KEY_ORDER_SUM_DIS" + + //实时查询订单剩余时间 和 剩余里程 轮询间隔2s + const val LOOP_CALCULATEROUTE_2S = 2 * 1000L + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt new file mode 100644 index 0000000000..1e3ec5ccd0 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/constant/TaxiPassengerOrderStatusEnum.kt @@ -0,0 +1,47 @@ +package com.mogo.och.taxi.passenger.constant + +/** + * Created on 2021/12/7 + * + * * Old code:START + * 未派单 0 + * 去往上车站点 1 + * 车辆已到达上车站点 2 + * 乘客已到达上车站点 3 + * 去往下车站点 4 + * 到达下车站点 5 + * 已完成 6 + * 已取消 7 + * Old code:END + * + * 0 订单创建(为派单), + * 10 已派上司机(司机去往上车点), + * 20 司机到达上车点, + * 30 乘客到达上车点, + * 40 服务中(去往目的地), + * 50 到达目的地, + * 60 已完成, + * 70 已取消 + */ +enum class TaxiPassengerOrderStatusEnum(val code: Int) { + None( 0 ), + OnTheWayToStart( 10), + ArriveAtStart( 20), + UserArriveAtStart( 30), + OnTheWayToEnd( 40), + ArriveAtEnd( 50), + JourneyCompleted(60),//行程完成 + Cancel( 70); + + companion object { + @JvmStatic + fun valueOf(code: Int): TaxiPassengerOrderStatusEnum? { + for (value in values()) { + if (value.code == code) { + return value + } + } + return None + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/MogoOCHTaxiModelNew.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/MogoOCHTaxiModelNew.java deleted file mode 100644 index 5f4c847dd1..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/MogoOCHTaxiModelNew.java +++ /dev/null @@ -1,1016 +0,0 @@ -package com.mogo.och.taxi.passenger.model; - -import android.content.Context; -import android.content.Intent; -import android.location.Location; -import android.net.ConnectivityManager; - -import androidx.annotation.Nullable; - -import com.elegant.network.utils.GsonUtil; -import com.mogo.cloud.commons.utils.CoordinateUtils; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.eagle.core.data.autopilot.ADASTrajectoryInfo; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.autopilot.AutopilotGuardianStatusInfo; -import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo; -import com.mogo.eagle.core.data.autopilot.AutopilotStationInfo; -import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.data.map.MogoLocation; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; -import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.eagle.core.utilcode.util.NetworkUtils; -import com.mogo.map.navi.IMogoCarLocationChangedListener2; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.taxi.passenger.bean.DriverServiceDataRespBean; -import com.mogo.och.taxi.passenger.bean.DriverStatusQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabRespBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabStatusQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersInServiceQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersListQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersNewBookingQueryRespBean; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiADASStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiAutopilotPlanningCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiCarStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiControllerStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiOrderStatusCallback; -import com.mogo.och.taxi.passenger.constant.OCHTaxiConst; -import com.mogo.och.taxi.passenger.constant.OrderStatusEnum; -import com.mogo.och.taxi.passenger.constant.OrderTypeEnum; -import com.mogo.och.taxi.passenger.network.OCHTaxiServiceCallback; -import com.mogo.och.taxi.passenger.network.OCHTaxiServiceManagerNew; -import com.mogo.och.taxi.passenger.utils.OrderUtil; -import com.mogo.och.taxi.passenger.utils.PinYinUtil; -import com.mogo.service.IMogoServiceApis; -import com.mogo.service.cloud.socket.IMogoLifecycleListener; -import com.mogo.service.intent.IMogoIntentListener; -import com.mogo.service.statusmanager.IMogoStatusChangedListener; -import com.mogo.service.statusmanager.StatusDescriptor; - -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Created by pangfan on 2021/8/19 - * - * 网约车 - 出租车业务逻辑处理 - */ -public class MogoOCHTaxiModelNew { - - private static final String TAG = MogoOCHTaxiModelNew.class.getSimpleName(); - - private static final class SingletonHolder { - private static final MogoOCHTaxiModelNew INSTANCE = new MogoOCHTaxiModelNew(); - } - - public static MogoOCHTaxiModelNew getInstance() { - return SingletonHolder.INSTANCE; - } - - private Context mContext; - private volatile int mPrevAPStatus = -1; //前一次自动驾驶状态值 - private volatile int mOCHCarStatus = -1; //出车/收车状态:1 出车;0 收车 - private volatile long mPrevOrderId = -1; //前一次的新到单id(当次和前一次orderId相同时,本次不再弹出) - private volatile OrderQueryRespBean.Result mNewBookingOrder; //新到待抢预约单 - private volatile OrderQueryRespBean.Result mCurrentOCHOrder; //当前订单 - private volatile List mInServiceList = Collections.emptyList(); //进行中订单 - private volatile List mWaitServiceList = Collections.emptyList(); //待服务订单 - - private IOCHTaxiADASStatusCallback mADASStatusCallback; //Model->Presenter:自动驾驶状态相关 - private IOCHTaxiCarStatusCallback mCarStatusCallback; //Model->Presenter:出车/收车状态 - private IOCHTaxiControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 - private IOCHTaxiOrderStatusCallback mOrderStatusCallback; //Model->Presenter:订单变更 - - private IOCHTaxiAutopilotPlanningCallback mAutopilotPlanningCallback; //Model->Presenter:自动驾驶线路规划 - - private double mLongitude, mLatitude; - - private MogoOCHTaxiModelNew() { - } - public void setMoGoAutopilotPlanningListener(IOCHTaxiAutopilotPlanningCallback - moGoAutopilotPlanningCallback) { - this.mAutopilotPlanningCallback = moGoAutopilotPlanningCallback; - } - public void setADASStatusCallback(IOCHTaxiADASStatusCallback callback) { - this.mADASStatusCallback = callback; - } - - public void setCarStatusCallback(IOCHTaxiCarStatusCallback callback) { - this.mCarStatusCallback = callback; - } - - public void setControllerStatusCallback(IOCHTaxiControllerStatusCallback callback) { - this.mControllerStatusCallback = callback; - } - - public void setOrderStatusCallback(IOCHTaxiOrderStatusCallback callback) { - this.mOrderStatusCallback = callback; - } - - public void init( Context context ) { - mContext = context.getApplicationContext(); - initListeners(); - - IMogoServiceApis apis = MogoApisHandler.getInstance().getApis(); - apis.getSocketManagerApi(mContext).init(mContext, DebugConfig.getSocketAppId()); - // TODO: 2021/8/27 因需要通过此回调的location进行坐标上传,暂改为全程监听,退出后再反注册, - // 待后续整体调整location获取来源 - if (DebugConfig.getCarMachineType() != DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE) { - apis.getLocationInfoApi().start(); - } - - if (NetworkUtils.isConnected(mContext)) { -// startOrStopOrderLoop(mOCHCarStatus == 1); - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - queryCarStatus(); - } - } - } - - public void startOrStopOrderLoop(){ - startOrStopOrderLoop(mOCHCarStatus == 1); - } - - public void release() { - startOrStopOrderLoop(false); - releaseListeners(); - } - - private void initListeners() { - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi(mContext) - .registerLifecycleListener(10010,mSocketLifeCycleLisnter); - - // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); - MogoApisHandler.getInstance() - .getApis() - .getIntentManagerApi() - .registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener ); - MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener ); - // 达到起始站围栏监听 - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .registerCarLocationChangedListener( TAG, mCarLocationChangedListener2); - - //2021.11.1 自动驾驶路线规划接口 - CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG,moGoAutopilotPlanningListener); - } - - private void releaseListeners() { - MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); - - // 注销到达起始站围栏监听 - MogoApisHandler.getInstance() - .getApis() - .getRegisterCenterApi() - .unregisterCarLocationChangedListener(TAG, mCarLocationChangedListener2); - - MogoApisHandler.getInstance() - .getApis() - .getSocketManagerApi(mContext) - .unregisterLifecycleListener(10010); - - CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(mGoAutopilotStatusListener); - CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); - } - - private void startOrStopOrderLoop(boolean start) { - Logger.d(TAG, "startOrStopOrderLoop() " + start); - if (start) { - OCHTaxiModelLoopManager.getInstance().startInAndWaitOrdersLoop(); - OCHTaxiModelLoopManager.getInstance().startNewBookingOrderLoop(); - OCHTaxiModelLoopManager.getInstance().startHeartbeatLoop(); - } else { - OCHTaxiModelLoopManager.getInstance().stopInAndWaitOrdersLoop(); - OCHTaxiModelLoopManager.getInstance().stopNewBookingOrderLoop(); - OCHTaxiModelLoopManager.getInstance().stopHeartbeatLoop(); - } - } - - //查询出车/收车状态 - public void queryCarStatus() { - OCHTaxiServiceManagerNew.getInstance().queryDriverServiceStatus(mContext, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(DriverStatusQueryRespBean data) { - if (null != data && 0 == data.code) { - mOCHCarStatus = data.data.serviceStatus == 1 ? 1 : 0; - //更新view - startOrStopOrderLoop(mOCHCarStatus == 1); - if (mCarStatusCallback != null) { - mCarStatusCallback.onCarStatusChanged(mOCHCarStatus == 1); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - } - } - - @Override - public void onFail(int code, String msg) { } - }); - } - - //更新出车收车状态 - public void updateCarStatus() { - if ( mOCHCarStatus == -1){ - queryCarStatus(); - return; - } - final int status = mOCHCarStatus == 1 ? 0 : 1; - OCHTaxiServiceManagerNew.getInstance().updateDriverServiceStatus(mContext, status, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(BaseData data) { - if (null != data && 0 == data.code) { - mOCHCarStatus = status; - startOrStopOrderLoop(mOCHCarStatus == 1); - if (mCarStatusCallback != null) { - mCarStatusCallback.onCarStatusChanged(mOCHCarStatus == 1); - } - Logger.d(TAG, "changeCarStatus:" + status); - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - } - } - - @Override - public void onFail(int code, String msg) { - TipToast.shortTip(code + "," + msg); - } - }); - } - - /** - * 查询订单状态:进行中/待服务(轮询防止因crash导致应用重启、断网没收到推送等) - * - * 注:只有在本地缓存mCurrentOCHOrder为null时(已完成or已取消有明确结果)或id相同且status不同时, - * 才更新最新进行中单到本地 - */ - public void queryInAndWaitOrders() { - OCHTaxiServiceManagerNew.getInstance().queryOrdersInAndWaitService(mContext, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrdersInServiceQueryRespBean data) { - if (data == null || data.data == null) { - return; - } - - //1. 处理进行中订单 - mInServiceList = data.data.servicing; - if (data.data.servicing != null && !data.data.servicing.isEmpty()) { - // 1.1. 当存在进行中单时:对本地currentOrder进行更新 - if (mCurrentOCHOrder == null) { - //1.1.1. 当本地无currentOrder(已经完成or取消),则更新currentOrder,并通知ui更新 - updateNativeCurrentOrder(data.data.servicing.get(0)); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } else { - //1.1.2. 当本地有currentOrder: - //orderId不一致时:通过currentOrder.orderId查询订单状态,并通知ui更新 - //orderId一致且orderStatus不一致时:则更新currentOrder,并通知ui更新 - if (mCurrentOCHOrder.orderId != data.data.servicing.get(0).orderId) { - queryCurOrderStatus(); - } else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) { - updateNativeCurrentOrder(data.data.servicing.get(0)); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } - } - } else { - // 1.2. 当无进行中订单时:如果本地也无则跳过;如果本地仍存在currentOrder,查询此单(完成or取消)并通知ui更新 - if (mCurrentOCHOrder != null) { - queryCurOrderStatus(); - } - } - - //2. 处理待服务订单列表 - if (data.data.waitService != null && !data.data.waitService.isEmpty()) { - //2.1. 当存在待服务订单列表:跟本地待服务列表比较 - if (mWaitServiceList.isEmpty() - || (mWaitServiceList.size() != data.data.waitService.size()) - || !OrderUtil.haveSameOrders(mWaitServiceList, data.data.waitService)) { - // 2.1.1. 当本地无待服务单,或数量和内容不一致,更新本地待服务列表,并通知ui更新 - mWaitServiceList = data.data.waitService; - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onOrdersWaitServiceChanged(mWaitServiceList); - } - } - } else { - //2.2. 当无待服务单时:如果本地也无则跳过;如果本地有,则清除并通知ui更新 - if (!mWaitServiceList.isEmpty()) { - mWaitServiceList.clear(); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onOrdersWaitServiceChanged(mWaitServiceList); - } - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - //仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder - private void queryCurOrderStatus() { - if (mCurrentOCHOrder == null) { - return; - } - final long orderId = mCurrentOCHOrder.orderId; - OCHTaxiServiceManagerNew.getInstance().queryOrderById(mContext, orderId, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrderQueryRespBean data) { - if (data != null && data.data != null - && mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == data.data.orderId) { - if (data.data.orderStatus == OrderStatusEnum.Cancel.getCode() - || data.data.orderStatus == OrderStatusEnum.JourneyCompleted.getCode() - || data.data.orderStatus == OrderStatusEnum.None.getCode()) { - clearCurrentOCHOrder(); - cancelAutopilot(); - } else { - updateNativeCurrentOrder(data.data); - } - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderStatusChanged(data.data); - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - //更新当前订单状态 - public void updateOCHOrderStatus(final OrderStatusEnum orderStatus) { - if ( mCurrentOCHOrder == null ) { - return; - } - final long orderId = mCurrentOCHOrder.orderId; - OCHTaxiServiceManagerNew.getInstance().updateOrderStatus(mContext, orderId, - orderStatus.getCode(), new OCHTaxiServiceCallback() { - @Override - public void onSuccess(BaseData data) { - if (null != data && 0 == data.code - && mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) { - mCurrentOCHOrder.orderStatus = orderStatus.getCode(); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderStatusChanged(mCurrentOCHOrder); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - TipToast.shortTip("网络异常,请稍后重试"); - } - } - - @Override - public void onFail(int code, String msg) { -// TipToast.shortTip(code + "," + msg); - } - }); - } - - // 取消当前订单 - public void cancelCurrentOrder(int reasonType, String reason) { - if (mCurrentOCHOrder == null) { - mOrderStatusCallback.onCurrentOrderCancelDone(); - return; - } - final long orderId = mCurrentOCHOrder.orderId; - OCHTaxiServiceManagerNew.getInstance().cancelOrder(mContext, orderId, reasonType, reason, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(BaseData data) { - if (null != data && 0 == data.code - && mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) { - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderCancelDone(); - } - clearCurrentOCHOrder(); - cancelAutopilot(); - } - } - - @Override - public void onFail(int code, String msg) { -// TipToast.shortTip(code + "," + msg); - } - }); - } - - // 取消待服务中订单 - public void cancelOrderById(final long orderId, int reasonType, String reason) { - OCHTaxiServiceManagerNew.getInstance().cancelOrder(mContext, orderId, reasonType, reason, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(BaseData data) { - if (null != data && 0 == data.code) { - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onOrderCancelDone(orderId); - } - } - } - - @Override - public void onFail(int code, String msg) { -// TipToast.shortTip(code + "," + msg); - } - }); - } - - // 查询当前订单route信息:预估时间、里程等 - public void queryCurOrderRouteInfo() { - if (mCurrentOCHOrder == null) { - return; - } - final long orderId = mCurrentOCHOrder.orderId; - OCHTaxiServiceManagerNew.getInstance().queryOrderRouteInfo(mContext, orderId, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrderQueryRouteInfoRespBean data) { - if (null != data && 0 == data.code - && mCurrentOCHOrder != null && mCurrentOCHOrder.orderId == orderId) { - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onCurrentOrderRouteInfoGot(data.data); - } - } - } - - @Override - public void onFail(int code, String msg) { -// TipToast.shortTip(code + "," + msg); - } - }); - } - - // 获取全部订单列表 - public void queryOrdersList(int page, int size) { - OCHTaxiServiceManagerNew.getInstance().queryOrdersList(mContext, page, size, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrdersListQueryRespBean data) { - if (null != data && 0 == data.code) { - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onOrdersListPageRefresh(data.data.orders); - } - } - } - - @Override - public void onFail(int code, String msg) { - TipToast.shortTip("请求异常,请稍后重试"); - } - }); - } - - /** - * 查询新到预约单 - * - * 注:只有在本地缓存mNewBookingOrder为null时(执行完抢单or司机关闭改单),才更新新到待抢单 - */ - public void queryNewBookingOrder() { - OCHTaxiServiceManagerNew.getInstance().queryNewBookingOrder(mContext, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrdersNewBookingQueryRespBean data) { - if (data != null && data.code == 0 - && data.data != null && data.data.orders.size() > 0) { - // 本地无新到单,且本次新到单id与上次收到的新单id不同时:显示本次新到单 - if (mNewBookingOrder == null ) { - for (Long orderId : data.data.orders) { - if (mPrevOrderId != orderId.longValue()) { - queryNewBookingContent(orderId.longValue()); - break; - } - } - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - // 仅限于获取到新待抢单且需要展示时查询该单信息:(queryOrderById接口可以查询属于该车的单、未派的单) - private void queryNewBookingContent(final long orderId) { - OCHTaxiServiceManagerNew.getInstance().queryOrderById(mContext, orderId, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrderQueryRespBean data) { - if (data != null && data.code == 0 - && data.data != null && data.data.orderId == orderId - && data.data.orderType == OrderTypeEnum.Reserved.getType()) { - mNewBookingOrder = data.data; - mPrevOrderId = data.data.orderId; - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onNewBookingOrderGot(mNewBookingOrder); - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - // 执行抢单动作 - public void grabOrder() { - if (mNewBookingOrder == null) { - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onGrabOrderFailed(null); - } - return; - } - final long orderId = mNewBookingOrder.orderId; - OCHTaxiServiceManagerNew.getInstance().grabOrder(mContext, orderId, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrderGrabRespBean data) { - if (data != null && data.code == 0 - && mNewBookingOrder != null && mNewBookingOrder.orderId == orderId) { - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onGrabOrderExecuteDone(); - OCHTaxiModelLoopManager.getInstance().startGrabResultLoop(); - } - } - } - - @Override - public void onFail(int code, String msg) { - TipToast.shortTip("请求异常,请稍后重试"); - } - }); - } - - // 查询抢单结果 - public void queryOrderGrabStatus() { - if (mNewBookingOrder == null) { - OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop(); - if (mOrderStatusCallback != null) { - mOrderStatusCallback.onGrabOrderFailed(null); - } - return; - } - final long orderId = mNewBookingOrder.orderId; - OCHTaxiServiceManagerNew.getInstance().queryOrderGrabStatus(mContext, orderId, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(OrderGrabStatusQueryRespBean data) { - //OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop(); - if (data != null && data.code == 0 - && mNewBookingOrder != null && mNewBookingOrder.orderId == orderId) { - if (data.data.grabStatus == 0) { - return; //抢单中,不处理继续轮询结果 - } - if (mOrderStatusCallback != null) { - if (data.data.grabStatus == 1) { - mOrderStatusCallback.onGrabOrderSuccess(mNewBookingOrder); - } else if (data.data.grabStatus == 2) { - mOrderStatusCallback.onGrabOrderFailed(mNewBookingOrder); - } else { - // TODO: 2021/9/22 需根据具体内容给予提示,如订单已取消 - mOrderStatusCallback.onGrabOrderFailed(mNewBookingOrder); - } - } - } else { - if (mOrderStatusCallback != null) { - // TODO: 2021/9/22 如果用户已取消单,抢单失败时暂返回null,UI当前直接恢复原页面内容,后续优化 - mOrderStatusCallback.onGrabOrderFailed(null); - } - } - OCHTaxiModelLoopManager.getInstance().stopGrabResultLoop(); - cancelNewBookingOrder(); - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - // 车机端上传心跳数据(只在出车状态时上传) - public void runCarHeartbeat() { - OCHTaxiServiceManagerNew.getInstance().runCarHeartbeat(mContext, mLongitude, mLatitude, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(BaseData data) { - - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - // 查询司机服务数据 - public void queryDriverServiceData() { - OCHTaxiServiceManagerNew.getInstance().queryDriverServiceData(mContext, - new OCHTaxiServiceCallback() { - @Override - public void onSuccess(DriverServiceDataRespBean data) { - if (data != null && data.code == 0 - && data.data != null && data.data.immediate != null) { - if (mCarStatusCallback != null) { - mCarStatusCallback.onServiceDataUpdate( - data.data.immediate.timeDuration, data.data.immediate.orderNum); - } - } - } - - @Override - public void onFail(int code, String msg) { - - } - }); - } - - // 取消当前新到预约单 - public void cancelNewBookingOrder() { - mNewBookingOrder = null; - } - - // 获取当前订单 - public OrderQueryRespBean.Result getCurrentOCHOrder() { - return mCurrentOCHOrder; - } - - // 获取当前订单状态 - public OrderStatusEnum getCurOrderStatus() { - OrderQueryRespBean.Result order = MogoOCHTaxiModelNew.getInstance().getCurrentOCHOrder(); - if (order == null) { - return OrderStatusEnum.None; - } - return OrderStatusEnum.valueOf(order.orderStatus); - } - - //更新本地currentOrder信息,并保存订单到本地避免车机重启丢失数据 - private void updateNativeCurrentOrder(OrderQueryRespBean.Result data) { - if (data == null) { - return; - } - mCurrentOCHOrder = data; - SharedPrefsMgr.getInstance(mContext).putString(OCHTaxiConst.SP_KEY_OCH_TAXI_ORDER, - GsonUtil.jsonFromObject(data)); - } - - //清除订单信息 - public void clearCurrentOCHOrder() { - mCurrentOCHOrder = null; - SharedPrefsMgr.getInstance(mContext).remove(OCHTaxiConst.SP_KEY_OCH_TAXI_ORDER); - } - - //检测当前订单 - public boolean checkCurrentOCHOrder() { - if ( mCurrentOCHOrder != null - && mCurrentOCHOrder.startSiteGcjPoint != null - && mCurrentOCHOrder.endSiteGcjPoint != null) { - return true; - } - return false; - } - - //以当前订单为基础,开启自动驾驶 - public void startAutoPilot() { - if (!checkCurrentOCHOrder()) { - Logger.e( TAG, "no order or order is empty." ); - TipToast.shortTip("当前订单不存在或异常!"); - return; - } - - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE - == Integer.parseInt(DebugConfig.getAutoPilotStatus())) { - // TODO: 2021/11/28 工控机存在刚开始状态为0,但是可以开启变为2,工控机解决前不显示此toast -// TipToast.shortTip("自动驾驶状态为不可用!"); - } - - double startWgsLon = mCurrentOCHOrder.startSitePoint.get(0); - double startWgsLat = mCurrentOCHOrder.startSitePoint.get(1); - double endWgsLon = mCurrentOCHOrder.endSitePoint.get(0); - double endWgsLat = mCurrentOCHOrder.endSitePoint.get(1); - - AutopilotControlParameters parameters = new AutopilotControlParameters(); - parameters.vehicleType = mCurrentOCHOrder.businessType; - parameters.startName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.startSiteAddr); // 起点名称拼音首字母大写:科学城B区2号门(KXCBQ2HM) - parameters.endName = PinYinUtil.getPinYinHeadChar(mCurrentOCHOrder.endSiteAddr); // 终点名称拼音首字母大写:科学城C区三号门(KXCCQSHM) - parameters.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon); - parameters.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon); - CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters); - Logger.d(TAG, "start autopilot with parameter: %s", GsonUtil.jsonFromObject(parameters) - +" ,startSiteName="+ mCurrentOCHOrder.startSiteAddr+" ,endSiteName="+mCurrentOCHOrder.endSiteAddr); - if (DebugConfig.isDebug()) { - // TipToast.shortTip("Start autopilot!"); - } - - // TODO: 2021/8/20 无工控机环境, 手动调起自动驾驶开启返回结果,有工控机环境要删除 -// OCHTaxiUiController.getInstance().onAutoPilotStatusChanged( IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING, "开启自动驾驶" ); - } - - //结束自动驾驶 - public void cancelAutopilot() { - try { - CallerAutoPilotManager.INSTANCE.cancelAutoPilot(); - Logger.d(TAG, "结束自动驾驶"); - } catch ( Exception e ) { - e.printStackTrace(); - } - } - - //根据围栏判断,是否到达起点 - private void judgeStartStation(Location location) { - if (mCurrentOCHOrder == null || mCurrentOCHOrder.startSiteGcjPoint == null - || mCurrentOCHOrder.startSiteGcjPoint.size() < 2) { - return; - } - double startLon = mCurrentOCHOrder.startSiteGcjPoint.get(0); - double startLat = mCurrentOCHOrder.startSiteGcjPoint.get(1); - double distance = CoordinateUtils.calculateLineDistance( - startLon, startLat, - location.getLongitude(), location.getLatitude() ); - - if (DebugConfig.isDebug() && mCurrentOCHOrder.orderStatus == OrderStatusEnum.OnTheWayToStartStation.getCode()) { - // TipToast.shortTip("距离上车点:" + Double.valueOf(distance).intValue()); - } - - Logger.i(TAG, "judgeStartStation() distance = " + distance); -// if (mOrderStatusCallback != null && distance >= 0) { -// mOrderStatusCallback.onCurrentOrderDistToStartChanged((long) distance, 0); -// } - - if ( distance > OCHTaxiConst.ARRIVE_AT_START_STATION_DISTANCE ) { - distance = CoordinateUtils.calculateLineDistance(startLon, startLat, - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLon(), - MogoApisHandler.getInstance().getApis().getAdasControllerApi().getLastLat() ); - } - - if ( distance <= OCHTaxiConst.ARRIVE_AT_START_STATION_DISTANCE ) { - updateOCHOrderStatus( OrderStatusEnum.ArriveAtStartStation); - return; - } - } - - // TODO: 2021/9/12 - public void calculateTravelDistance(Location carLocation){ - if (checkCurrentOCHOrder() && mCurrentOCHOrder.endSiteGcjPoint.size()>0) { - double endLon = mCurrentOCHOrder.endSiteGcjPoint.get(0); - double endLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); - double distance = CoordinateUtils.calculateLineDistance( - endLon, endLat, - carLocation.getLongitude(), carLocation.getLatitude()); - mCurrentOCHOrder.decreaseTravelDistance(distance); - if (mOrderStatusCallback != null && distance >= 0) { - mOrderStatusCallback.onCurrentOrderDistToEndChanged((long) distance, 0); - } - } - } - - //监听网络变化,避免启动机器时无网导致无法更新订单信息 - private IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { - @Override - public void onIntentReceived( String intentStr, Intent intent ) { - Logger.d( TAG, "onIntentReceived = %s", intentStr ); - if ( ConnectivityManager.CONNECTIVITY_ACTION.equals( intentStr ) ) { - if ( NetworkUtils.isConnected( mContext ) ) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - startOrStopOrderLoop(mOCHCarStatus == 1); - queryCarStatus(); - } - } - } - } - }; - - private IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { - // VR mode变更回调 - @Override - public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { - if (StatusDescriptor.VR_MODE == descriptor) { - if (mControllerStatusCallback != null) { - mControllerStatusCallback.onVRModeChanged(isTrue); - } - } - } - }; - - private IMogoLifecycleListener mSocketLifeCycleLisnter = new IMogoLifecycleListener() { - @Override - public void onConnectFailure() { Logger.e(TAG,"socket onConnectFailure"); } - - @Override - public void onConnectSuccess() { Logger.e(TAG,"socket onConnectSuccess"); } - - @Override - public void onConnectLost() { Logger.e(TAG,"socket onConnectLost"); } - }; - - // 自车定位 - private IMogoCarLocationChangedListener2 mCarLocationChangedListener2 = new IMogoCarLocationChangedListener2() { - - @Override - public void onCarLocationChanged2( Location location ) { - IMogoServiceApis apis = MogoApisHandler.getInstance().getApis(); - MogoLocation mogoLocation = new MogoLocation(); - mogoLocation.setAccuracy(location.getAccuracy()); - mogoLocation.setProvider(location.getProvider()); - mogoLocation.setLongitude(location.getLongitude()); - mogoLocation.setLatitude(location.getLatitude()); - mogoLocation.setSpeed(location.getSpeed()); - mogoLocation.setBearing(location.getBearing()); - // TODO: 2021/9/2 因0830新版server后台只能过滤locType=1&&satellites>=4的定位数据,暂固话值,后续优化 - mogoLocation.setLocType(1); - mogoLocation.setSatellite(4); - - apis.getLocationInfoApi().provideLocation(mogoLocation); - //位置变化时,通过围栏判断是否到达x点 - if (location != null && checkCurrentOCHOrder()) { - if (getCurOrderStatus() == OrderStatusEnum.OnTheWayToStartStation) { - judgeStartStation(location); - } else if (getCurOrderStatus() == OrderStatusEnum.OnTheWayToEndStation) { - calculateTravelDistance(location); - } - } - mLongitude = location.getLongitude(); - mLatitude = location.getLatitude(); - if (mControllerStatusCallback != null) { - mControllerStatusCallback.onCarLocationChanged(location); - } - } - }; - - /** - * 订单流转debug START - */ - public void setArriveAtStartStation() { - if (mCurrentOCHOrder == null - || mCurrentOCHOrder.orderStatus != OrderStatusEnum.OnTheWayToStartStation.getCode()) { - TipToast.shortTip("订单状态不匹配该操作!"); - return; - } - updateOCHOrderStatus(OrderStatusEnum.ArriveAtStartStation); - } - - public void setArriveAtEndStation() { - if (mCurrentOCHOrder == null - || mCurrentOCHOrder.orderStatus != OrderStatusEnum.OnTheWayToEndStation.getCode()) { - TipToast.shortTip("订单状态不匹配该操作!"); - return; - } - updateOCHOrderStatus(OrderStatusEnum.ArriveAtEndStation); - } - - /** - * 测试开始服务 - */ - public void setOnTheWayToEndStation() { - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); - if (mCurrentOCHOrder == null - || mCurrentOCHOrder.orderStatus != OrderStatusEnum.ArriveAtStartStation.getCode()) { - TipToast.shortTip("订单状态不匹配该操作!"); - } - updateOCHOrderStatus(OrderStatusEnum.OnTheWayToEndStation); - } - private IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ - - private boolean arriveAtEnd = false; //乘客app专用字段 - - @Override - public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { - if (autopilotStatusInfo == null) return; - int state = autopilotStatusInfo.getState(); - Logger.d( TAG, "state = %s", state ); - if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); - if (mCurrentOCHOrder != null - && getCurOrderStatus() == OrderStatusEnum.ArriveAtStartStation - && state != mPrevAPStatus) { - // 当高频返回autopilot 2时,不重复调用订单状态变更 - mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态 - updateOCHOrderStatus(OrderStatusEnum.OnTheWayToEndStation); - } - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { - mPrevAPStatus = state; - - if (FunctionBuildConfig.isDemoMode - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - // 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态 - if (!arriveAtEnd) { - return; - } else { - arriveAtEnd = false; - } - } - - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); - } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { - mPrevAPStatus = state; - - if (FunctionBuildConfig.isDemoMode - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - // 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态 - if (!arriveAtEnd) { - return; - } else { - arriveAtEnd = false; - } - } - - if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); - } - } - - @Override - public void onAutopilotSNRequest() { - - } - - @Override - public void onAutopilotGuardian(@Nullable AutopilotGuardianStatusInfo autopilotGuardianStatusInfo) { - - } - - @Override - public void onAutopilotArriveAtStation(@Nullable AutopilotStationInfo data) { - if (FunctionBuildConfig.isDemoMode - && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - arriveAtEnd = true; - } - - if (data == null || !checkCurrentOCHOrder() - || (getCurOrderStatus() == OrderStatusEnum.ArriveAtEndStation)) { - return; - } - if (DebugConfig.isDebug()) { - // TipToast.shortTip("到达目的地"); - } - updateOCHOrderStatus(OrderStatusEnum.ArriveAtEndStation); - } - }; - private IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){ - - @Override - public void onAutopilotTrajectory(ArrayList trajectoryInfos) { - - } - - @Override - public void onAutopilotRotting(AutopilotRouteInfo routeList) { - if (null != routeList && routeList.getModels() != null){ - mAutopilotPlanningCallback.routeResult(routeList.getModels()); - } - } - }; - /** - * END - */ -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/NaviToDestinationModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/NaviToDestinationModel.java deleted file mode 100644 index 38410c2606..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/NaviToDestinationModel.java +++ /dev/null @@ -1,433 +0,0 @@ -package com.mogo.och.taxi.passenger.model; - -import android.Manifest; -import android.content.Context; -import android.util.Log; -import android.widget.Toast; - -import com.amap.api.navi.AMapNavi; -import com.amap.api.navi.AMapNaviListener; -import com.amap.api.navi.enums.NaviType; -import com.amap.api.navi.model.AMapCalcRouteResult; -import com.amap.api.navi.model.AMapLaneInfo; -import com.amap.api.navi.model.AMapModelCross; -import com.amap.api.navi.model.AMapNaviCameraInfo; -import com.amap.api.navi.model.AMapNaviCross; -import com.amap.api.navi.model.AMapNaviInfo; -import com.amap.api.navi.model.AMapNaviLocation; -import com.amap.api.navi.model.AMapNaviRouteNotifyData; -import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo; -import com.amap.api.navi.model.AMapServiceAreaInfo; -import com.amap.api.navi.model.AimLessModeCongestionInfo; -import com.amap.api.navi.model.AimLessModeStat; -import com.amap.api.navi.model.NaviInfo; -import com.amap.api.navi.model.NaviLatLng; -import com.autonavi.tbt.TrafficFacilityInfo; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.eagle.core.utilcode.util.NetworkUtils; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiNaviChangedCallback; -import com.mogo.och.taxi.passenger.utils.PermissionUtil; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * @author: wangmingjun - * @date: 2021/12/6 - */ -public class NaviToDestinationModel implements AMapNaviListener { - 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 IOCHTaxiNaviChangedCallback mNaviChangedCallback; - private AtomicInteger errorCount = new AtomicInteger(0); - private boolean isPlay; - public static NaviToDestinationModel getInstance(Context context) { - mContext = context; - return SingletonHolder.INSTANCE; - } - - private static final class SingletonHolder { - private static final NaviToDestinationModel INSTANCE = new NaviToDestinationModel(); - } - private NaviToDestinationModel(){ - } - public void initAMapNavi(NaviLatLng startLatLng,NaviLatLng endLatLng) { - try { - mAMapNavi = AMapNavi.getInstance(mContext); - mAMapNavi.addAMapNaviListener(this); - mAMapNavi.setUseInnerVoice(true, true); - sList.add(startLatLng); - eList.add(endLatLng); - }catch (Exception e) { - e.printStackTrace(); - } - } - public void setVoiceIsMute(boolean isPlay){ - if (mAMapNavi == null) return; - this.isPlay = isPlay; - if (isPlay){ - mAMapNavi.startSpeak(); - }else { - mAMapNavi.stopSpeak(); - } - } - - public AMapNavi getmAMapNavi() { - return mAMapNavi; - } - - public void destroyAmaNavi(){ - if (mAMapNavi != null){ - isPlay = false; - mAMapNavi.stopNavi(); - mAMapNavi.destroy(); - mAMapNavi = null; - mNaviChangedCallback = null; - } - } - - public void setOCHTaciNaviChangedCallback(IOCHTaxiNaviChangedCallback callback){ - this.mNaviChangedCallback = callback; - } - @Override - public void onInitNaviFailure() { - Toast.makeText(mContext, "init navi Failed", Toast.LENGTH_SHORT).show(); - } - - @Override - public void onInitNaviSuccess() { - //初始化成功 - /** - * 方法: int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数: - * - * @congestion 躲避拥堵 - * @avoidhightspeed 不走高速 - * @cost 避免收费 - * @hightspeed 高速优先 - * @multipleroute 多路径 - * - * 说明: 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。 - * 注意: 不走高速与高速优先不能同时为true 高速优先与避免收费不能同时为true - */ - int strategy = 0; - try { - //再次强调,最后一个参数为true时代表多路径,否则代表单路径 - strategy = mAMapNavi.strategyConvert(true, false, false, false, false); - } catch (Exception e) { - e.printStackTrace(); - } - mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy); - } - @Override - public void onCalculateRouteSuccess(int[] ints) { - //多路径算路成功回调 - mAMapNavi.startNavi(NaviType.GPS); - } - - @Override - public void onNaviInfoUpdate(NaviInfo naviinfo) { - //导航过程中的信息更新,请看NaviInfo的具体说明 - if (null != mNaviChangedCallback){ - mNaviChangedCallback.onCurrentNaviDistAndTimeChanged(naviinfo.getPathRetainDistance(),naviinfo.getPathRetainTime());// 米、秒 - } - } - - @Override - public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) { - errorCount.set(0); - } - - @Override - public void onCalculateRouteFailure(AMapCalcRouteResult result) { - //路线计算失败 - //多路径算路成功回调 - if (errorCount.get() < 5){ - errorCount.getAndIncrement(); - if (mNaviChangedCallback != null){ - mNaviChangedCallback.reInitNaviAmap(isPlay,true); - } - } - if (!NetworkUtils.isConnected(mContext) || result.getErrorCode() == 2){ - TipToast.longTip("网络异常,请重试"); - if (mNaviChangedCallback != null){ - mNaviChangedCallback.reInitNaviAmap(isPlay,false); - } - return; - } - if (!PermissionUtil.isLocServiceEnable(mContext) || !PermissionUtil.checkPermission(mContext,new String[]{Manifest.permission.ACCESS_FINE_LOCATION})){ - TipToast.longTip("请开启车机定位后重试"); - if (mNaviChangedCallback != null){ - mNaviChangedCallback.reInitNaviAmap(isPlay,false); - } - return; - } -// if (result.getErrorCode() == 3){ -// TipToast.longTip("车辆当前坐标错误"); -// }else if (result.getErrorCode() == 6){ -// TipToast.longTip("终点坐标错误"); -// } - Log.i("dm", "路线计算失败:错误码=" + result.getErrorCode() + ",Error Message= " + result.getErrorDetail()); - Log.i("dm", "错误码详细链接见:http://lbs.amap.com/api/android-navi-sdk/guide/tools/errorcode/"); - } - @Override - public void onStartNavi(int type) { - //开始导航回调 - } - - @Override - public void onTrafficStatusUpdate() { - // - } - - @Override - public void onLocationChange(AMapNaviLocation location) { - //当前位置回调 - } - - @Override - public void onGetNavigationText(int type, String text) { - //播报类型和播报文字回调 - } - - @Override - public void onGetNavigationText(String s) { - - } - - @Override - public void onEndEmulatorNavi() { - //结束模拟导航 - } - - @Override - public void onArriveDestination() { - //到达目的地 - } - - @Override - public void onCalculateRouteFailure(int errorInfo) { - - } - - @Override - public void onReCalculateRouteForYaw() { - //偏航后重新计算路线回调 - } - - @Override - public void onReCalculateRouteForTrafficJam() { - //拥堵后重新计算路线回调 - } - - @Override - public void onArrivedWayPoint(int wayID) { - //到达途径点 - } - - @Override - public void onGpsOpenStatus(boolean enabled) { - //GPS开关状态回调 - } - @Override - public void showModeCross(AMapModelCross aMapModelCross) { - } - - @Override - public void hideModeCross() { - - } - - @Override - public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) { - - } - - @Override - public void showLaneInfo(AMapLaneInfo aMapLaneInfo) { - //显示车道信息 -// StringBuffer sb = new StringBuffer(); -// sb.append("共" + aMapLaneInfo.frontLane.length + "车道"); -// for (int i = 0; i < aMapLaneInfo.frontLane.length; i++) { -// //当前车道可以选择的动作 -// int background = aMapLaneInfo.backgroundLane[i]; -// //当前用户要执行的动作 -// int recommend = aMapLaneInfo.frontLane[i]; -// -// Log.e("ggb", "---->>> background is " + background + " ; recommend is " + recommend); -// //根据文档中每个动作对应的枚举类型,显示对应的图片 -// try { -// sb.append(",第" + (i + 1) + "车道为" + array[background]); -// if (recommend != 255) { -// sb.append(",当前车道可 " + actions[recommend]); -// } -// -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// Log.e("showLaneInfo", sb.toString()); - } - - @Override - public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) { - - } - - @Override - public void updateCameraInfo(AMapNaviCameraInfo[] aMapCameraInfos) { - - } - - @Override - public void onServiceAreaUpdate(AMapServiceAreaInfo[] amapServiceAreaInfos) { - - } - - @Override - public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) { - - } - - @Override - public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) { - //已过时 - } - - @Override - public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) { - - } - - @Override - public void showCross(AMapNaviCross aMapNaviCross) { - //显示放大图回调 - } - - @Override - public void hideCross() { - //隐藏放大图回调 - } - - @Override - public void showLaneInfo(AMapLaneInfo[] laneInfos, byte[] laneBackgroundInfo, byte[] laneRecommendedInfo) { - //过时 - } - - @Override - public void hideLaneInfo() { - //隐藏车道信息 - } - - @Override - public void notifyParallelRoad(int i) { - } - - @Override - public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) { - //更新交通设施信息 - } - - @Override - public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) { - //更新巡航模式的统计信息 - } - - - @Override - public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) { - //更新巡航模式的拥堵信息 - } - - @Override - 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-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/OCHTaxiModelLoopManager.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/OCHTaxiModelLoopManager.java deleted file mode 100644 index a58fc4b411..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/OCHTaxiModelLoopManager.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.mogo.och.taxi.passenger.model; - -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.och.taxi.passenger.constant.OCHTaxiConst; - -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -/** - * Created on 2021/9/10 - * - * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) - */ -public class OCHTaxiModelLoopManager { - - private static final String TAG = OCHTaxiModelLoopManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final OCHTaxiModelLoopManager INSTANCE = new OCHTaxiModelLoopManager(); - } - - public static OCHTaxiModelLoopManager getInstance() { - return SingletonHolder.INSTANCE; - } - - private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询 - private Disposable mNewBookingOrderDisposable; //新到待抢预约单轮询 - private Disposable mGrabResultDisposable; //抢单结果轮询 - private Disposable mHeartbeatDisposable; //心跳轮询 - - public void startInAndWaitOrdersLoop() { - if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { - return; - } - Logger.i(TAG, "startInAndWaitOrdersLoop()"); - mInAndWaitServiceDisposable = Observable.interval(OCHTaxiConst.LOOP_DELAY, - OCHTaxiConst.LOOP_PERIOD_2S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> MogoOCHTaxiModelNew.getInstance().queryInAndWaitOrders()); - } - - public void stopInAndWaitOrdersLoop() { - if (mInAndWaitServiceDisposable != null) { - Logger.i(TAG, "stopInAndWaitOrdersLoop()"); - mInAndWaitServiceDisposable.dispose(); - mInAndWaitServiceDisposable = null; - } - } - - public void startNewBookingOrderLoop() { - if (mNewBookingOrderDisposable != null && !mNewBookingOrderDisposable.isDisposed()) { - return; - } - Logger.i(TAG, "startNewBookingOrderLoop()"); - mNewBookingOrderDisposable = Observable.interval(OCHTaxiConst.LOOP_DELAY, - OCHTaxiConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> MogoOCHTaxiModelNew.getInstance().queryNewBookingOrder()); - } - - public void stopNewBookingOrderLoop() { - if (mNewBookingOrderDisposable != null) { - Logger.i(TAG, "stopNewBookingOrderLoop()"); - mNewBookingOrderDisposable.dispose(); - mNewBookingOrderDisposable = null; - } - } - - public void startGrabResultLoop() { - if (mGrabResultDisposable != null && !mGrabResultDisposable.isDisposed()) { - return; - } - Logger.i(TAG, "startGrabResultLoop()"); - mGrabResultDisposable = Observable.interval(OCHTaxiConst.LOOP_DELAY, - OCHTaxiConst.LOOP_PERIOD_1S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> MogoOCHTaxiModelNew.getInstance().queryOrderGrabStatus()); - } - - public void stopGrabResultLoop() { - if (mGrabResultDisposable != null) { - Logger.i(TAG, "stopGrabResultLoop()"); - mGrabResultDisposable.dispose(); - mGrabResultDisposable = null; - } - } - - public void startHeartbeatLoop() { - if (mHeartbeatDisposable != null && !mHeartbeatDisposable.isDisposed()) { - return; - } - Logger.i(TAG, "startHeartbeatLoop()"); - mHeartbeatDisposable = Observable.interval(OCHTaxiConst.LOOP_DELAY, - OCHTaxiConst.LOOP_PERIOD_60S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> MogoOCHTaxiModelNew.getInstance().runCarHeartbeat()); - } - - public void stopHeartbeatLoop() { - if (mHeartbeatDisposable != null) { - Logger.i(TAG, "stopHeartbeatLoop()"); - mHeartbeatDisposable.dispose(); - mHeartbeatDisposable = null; - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java new file mode 100644 index 0000000000..1543ad8da0 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerGeocodeSearchModel.java @@ -0,0 +1,120 @@ +package com.mogo.och.taxi.passenger.model; + +import android.content.Context; + +import com.amap.api.services.core.LatLonPoint; +import com.amap.api.services.geocoder.GeocodeResult; +import com.amap.api.services.geocoder.GeocodeSearch; +import com.amap.api.services.geocoder.RegeocodeQuery; +import com.amap.api.services.geocoder.RegeocodeResult; +import com.amap.api.services.geocoder.RegeocodeRoad; +import com.mogo.eagle.core.network.utils.GsonUtil; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback; + +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +/** + * @author: wangmingjun + * @date: 2021/12/6 + */ +public class TaxiPassengerGeocodeSearchModel implements GeocodeSearch.OnGeocodeSearchListener { + + private final String TAG = TaxiPassengerGeocodeSearchModel.class.getSimpleName(); + + private static Context mContext; + + private IOCHTaxiPassengerNaviChangedCallback mNaviChangedCallback; + + GeocodeSearch mGeocodeSearch = null; + + private String roadName = ""; + + private Timer timer ; + + TimerTask timerTask; + + public static TaxiPassengerGeocodeSearchModel getInstance(Context context) { + mContext = context; + return SingletonHolder.INSTANCE; + } + + private static final class SingletonHolder { + private static final TaxiPassengerGeocodeSearchModel INSTANCE = new TaxiPassengerGeocodeSearchModel(); + } + + private TaxiPassengerGeocodeSearchModel(){ + } + + public void initGeocodeSearch(){ + //通过经纬度逆地理编码得到位置 + mGeocodeSearch = new GeocodeSearch(mContext); + mGeocodeSearch.setOnGeocodeSearchListener(this); + timer = new Timer(); + timerTask = new TimerTask() { + @Override + public void run() { + if (mNaviChangedCallback != null){ + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "roadName道路名称: " + roadName); + mNaviChangedCallback.onCurrentRoadName(roadName); + } + } + }; + try{ + timer.schedule(timerTask,500,2000); + }catch (Exception e){ + e.printStackTrace(); + } + } + + public void searchLocationInfo(double lat, double lon){ + if (null != mGeocodeSearch){ + LatLonPoint latLng = new LatLonPoint(lat, lon); + //第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 + RegeocodeQuery query = new RegeocodeQuery(latLng, 200, GeocodeSearch.AMAP); + mGeocodeSearch.getFromLocationAsyn(query); + } + } + + public void destroyGeocodeSearch(){ + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "destroyGeocodeSearch"); + if (mGeocodeSearch != null){ + mGeocodeSearch = null; + } + if (mNaviChangedCallback != null){ + mNaviChangedCallback = null; + } + if (null != timer){ + timer.cancel(); + } + if (null != timerTask){ + timerTask = null; + } + roadName = ""; + } + + public void setOCHTaciNaviChangedCallback(IOCHTaxiPassengerNaviChangedCallback callback){ + this.mNaviChangedCallback = callback; + } + + @Override + public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {//更新频率几十 ms, 暂定更新UI为2s一次 + if (regeocodeResult != null) { + List roads = regeocodeResult.getRegeocodeAddress().getRoads(); + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "位置roads:" + GsonUtil.jsonFromObject(roads)); + if (roads != null && roads.size() > 0){ + roadName = roads.get(0).getName();//当前路的名字 +// mNaviChangedCallback.onCurrentRoadName(roads.get(0).getName()); + } + } + } + + @Override + public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { + + } +} 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 new file mode 100644 index 0000000000..cdcaf0cd1f --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -0,0 +1,687 @@ +package com.mogo.och.taxi.passenger.model; + +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.net.ConnectivityManager; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.amap.api.maps.model.LatLng; +import com.elegant.network.utils.GsonUtil; +import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager; +import com.mogo.cloud.commons.utils.CoordinateUtils; +import com.mogo.commons.debug.DebugConfig; +import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; +import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.api.v2x.LimitingVelocityListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager; +import com.mogo.eagle.core.function.call.v2x.CallLimitingVelocityListenerManager; +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.NetworkUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.map.navi.IMogoCarLocationChangedListener2; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRemainingResp; +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.callback.IOCHTaxiPassengerADASStatusCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerNaviChangedCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback; +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.TPCoordinateCalculateRouteUtil; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.statusmanager.IMogoStatusChangedListener; +import com.mogo.service.statusmanager.StatusDescriptor; + +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import io.reactivex.exceptions.UndeliverableException; +import io.reactivex.functions.Consumer; +import io.reactivex.plugins.RxJavaPlugins; +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI; +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +/** + * Created by pangfan on 2021/8/19 + * + * 网约车 - 出租车业务逻辑处理 + */ +public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback { + + private static final String TAG = TaxiPassengerModel.class.getSimpleName(); + + private static final class SingletonHolder { + private static final TaxiPassengerModel INSTANCE = new TaxiPassengerModel(); + } + + public static TaxiPassengerModel getInstance() { + return SingletonHolder.INSTANCE; + } + + private Context mContext; + private volatile int mPrevAPStatus = -1; //前一次自动驾驶状态值 + private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentOCHOrder; //当前订单 + private volatile List mInServiceList = Collections.emptyList(); //进行中订单 + private volatile List mWaitServiceList = Collections.emptyList(); //待服务订单 + + private IOCHTaxiPassengerADASStatusCallback mADASStatusCallback; //Model->Presenter:自动驾驶状态相关 + private IOCHTaxiPassengerAutopilotPlanningCallback mAutopilotPlanningCallback; //Model->Presenter:自动驾驶线路规划 + + private Map mOrderStatusCallbackMap = new ConcurrentHashMap<>(); + private Map mControllerStatusCallbackMap = new ConcurrentHashMap<>(); + + private ITaxiPassengerVeloctityCallback mVeloctityCallback;//道路限速返回 + + private double mLongitude, mLatitude; + + private TaxiPassengerModel() { + } + + public void setMoGoAutopilotPlanningListener(IOCHTaxiPassengerAutopilotPlanningCallback + moGoAutopilotPlanningCallback) { + this.mAutopilotPlanningCallback = moGoAutopilotPlanningCallback; + } + + public void setADASStatusCallback(IOCHTaxiPassengerADASStatusCallback callback) { + this.mADASStatusCallback = callback; + } + + public void setControllerStatusCallback(String tag,IOCHTaxiPassengerControllerStatusCallback callback) { + if (tag == null || "".equals(tag)) return; + + if (callback == null) { + mControllerStatusCallbackMap.remove(tag); + return; + } + + mControllerStatusCallbackMap.put(tag,callback); + + } + + public void setOrderStatusCallback(String tag ,IOCHTaxiPassengerOrderStatusCallback callback) { + if (tag == null || "".equals(tag)) return; + + if (callback == null) { + mOrderStatusCallbackMap.remove(tag); + return; + } + + mOrderStatusCallbackMap.put(tag,callback); + } + + public void setVeloctityCallback(ITaxiPassengerVeloctityCallback callback){ + this.mVeloctityCallback = callback; + } + + public void init( Context context ) { + mContext = context.getApplicationContext(); + initListeners(); + + // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 + // The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the excTeption has nowhere to go to begin with + RxJavaPlugins.setErrorHandler(new Consumer() { + @Override + public void accept(Throwable e) { + if (e instanceof UndeliverableException) { + e = e.getCause(); + CallerLogger.INSTANCE.d(M_TAXI + TAG, "UndeliverableException"); + } + if ((e instanceof IOException)) {// + // fine, irrelevant network problem or API that throws on cancellation + CallerLogger.INSTANCE.d(M_TAXI + TAG, "IOException"); + return; + } + if (e instanceof InterruptedException) { + // fine, some blocking code was interrupted by a dispose call + CallerLogger.INSTANCE.d(M_TAXI + TAG, "InterruptedException"); + return; + } + if ((e instanceof NullPointerException) || (e instanceof IllegalArgumentException)) { + // that's likely a bug in the application + CallerLogger.INSTANCE.d(M_TAXI + TAG, "NullPointerException or IllegalArgumentException"); + Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); + return; + } + if (e instanceof IllegalStateException) { + // that's a bug in RxJava or in a custom operator + CallerLogger.INSTANCE.d(M_TAXI + TAG, "IllegalStateException"); + Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e); + return; + } + CallerLogger.INSTANCE.d(M_TAXI + TAG,"Undeliverable exception"); + } + }); + + startOrStopOrderLoop(); + } + + /** + * 订单轮询 + */ + public void startOrStopOrderLoop(){ + if (NetworkUtils.isConnected(mContext)) { + startOrStopOrderLoop(true); + } + } + + public void release() { + startOrStopOrderLoop(false); + startOrStopQueryOrderRemaining(false); + releaseListeners(); + } + + private void initListeners() { + MogoAiCloudSocketManager.getInstance(mContext) + .registerLifecycleListener(10010,mSocketLifeCycleLisnter); + + // 2021.11.1重构自动驾驶 实现接口 IMoGoAutopilotStatusListener 注册监听 替换IMogoAdasOCHCallback接口 + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener); + MogoApisHandler.getInstance() + .getApis() + .getIntentManagerApi() + .registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener ); + MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .registerStatusChangedListener( TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener ); + // 达到起始站围栏监听 + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() + .registerCarLocationChangedListener( TAG, mCarLocationChangedListener2); + + //2021.11.1 自动驾驶路线规划接口 + CallerAutopilotPlanningListenerManager.INSTANCE.addListener(TAG,moGoAutopilotPlanningListener); + + //增加限速监听 + CallLimitingVelocityListenerManager.INSTANCE.addListener(TAG,limitingVelocityListener); + } + + private void releaseListeners() { + MogoApisHandler.getInstance() + .getApis() + .getStatusManagerApi() + .unregisterStatusChangedListener(TAG, StatusDescriptor.VR_MODE, mMogoStatusChangedListener); + + // 注销到达起始站围栏监听 + MogoApisHandler.getInstance() + .getApis() + .getRegisterCenterApi() + .unregisterCarLocationChangedListener(TAG, mCarLocationChangedListener2); + + MogoAiCloudSocketManager.getInstance(mContext) + .unregisterLifecycleListener(10010); + + CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(mGoAutopilotStatusListener); + CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); + CallLimitingVelocityListenerManager.INSTANCE.removeListener(limitingVelocityListener); + } + + private void startOrStopOrderLoop(boolean start) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startOrStopOrderLoop() " + start); + if (start) { + TaxiPassengerModelLoopManager.getInstance().startInAndWaitOrdersLoop(); + } else { + TaxiPassengerModelLoopManager.getInstance().stopInAndWaitOrdersLoop(); + } + } + + /** + * 查询订单状态:进行中/待服务(轮询防止因crash导致应用重启、断网没收到推送等) + * + * 注:只有在本地缓存mCurrentOCHOrder为null时(已完成or已取消有明确结果)或id相同且status不同时, + * 才更新最新进行中单到本地 + */ + public void queryInAndWaitOrders() { + TaxiPassengerServiceManager.getInstance().queryOrdersInAndWaitService(mContext, + new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerOrdersInServiceQueryRespBean data) { + if (data == null || data.data == null) { + return; + } + + //1. 处理进行中订单 + mInServiceList = data.data.servicing; + if (data.data.servicing != null && !data.data.servicing.isEmpty()) { + // 1.1. 当存在进行中单时:对本地currentOrder进行更新 + if (mCurrentOCHOrder == null) { + //1.1.1. 当本地无currentOrder(已经完成or取消),则更新currentOrder,并通知ui更新 + updateNativeCurrentOrder(data.data.servicing.get(0)); + if (mOrderStatusCallbackMap.size() > 0) { + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); + } + } + } else { + //1.1.2. 当本地有currentOrder: + //orderId不一致时:通过currentOrder.orderId查询订单状态,并通知ui更新 + //orderId一致且orderStatus不一致时:则更新currentOrder,并通知ui更新 + if (!mCurrentOCHOrder.orderNo.equals(data.data.servicing.get(0).orderNo)) { + queryCurOrderStatus(); +// } else if (mCurrentOCHOrder.orderStatus != data.data.servicing.get(0).orderStatus) { + } else { //todo 订单拦截放到各自实现去做 + updateNativeCurrentOrder(data.data.servicing.get(0)); + if (mOrderStatusCallbackMap.size() > 0) { + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); + } + } + } + } + } else { + // 1.2. 当无进行中订单时:如果本地也无则跳过;如果本地仍存在currentOrder,查询此单(完成or取消)并通知ui更 + if (mCurrentOCHOrder != null) { + queryCurOrderStatus(); + } + recoverNaviInfo(); + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + //仅用于轮询时查到本地有mCurrentOCHOrder但请求结果无进行中单or orderId不一致是复查本地currentOrder + private void queryCurOrderStatus() { + if (mCurrentOCHOrder == null) { + return; + } + final String orderNo = mCurrentOCHOrder.orderNo; + TaxiPassengerServiceManager.getInstance().queryOrderById(mContext, orderNo, + new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerOrderQueryRespBean data) { + if (data != null && data.data != null + && mCurrentOCHOrder != null && mCurrentOCHOrder.orderNo.equals(data.data.orderNo)) { + if (data.data.orderStatus == TaxiPassengerOrderStatusEnum.Cancel.getCode() + || data.data.orderStatus == TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() + || data.data.orderStatus == TaxiPassengerOrderStatusEnum.None.getCode()) { + if (mOrderStatusCallbackMap.size() > 0) { + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentOrderStatusChanged(data.data); + } + } + clearCurrentOCHOrder(); + } else { + updateNativeCurrentOrder(data.data); + if (mOrderStatusCallbackMap.size() > 0) { + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentOrderStatusChanged(mCurrentOCHOrder); + } + } + } + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + // 获取当前订单 + public TaxiPassengerOrderQueryRespBean.Result getCurrentOCHOrder() { + return mCurrentOCHOrder; + } + + // 获取当前订单状态 + public TaxiPassengerOrderStatusEnum getCurOrderStatus() { + TaxiPassengerOrderQueryRespBean.Result order = TaxiPassengerModel.getInstance().getCurrentOCHOrder(); + if (order == null) { + return TaxiPassengerOrderStatusEnum.None; + } + return TaxiPassengerOrderStatusEnum.valueOf(order.orderStatus); + } + + //更新本地currentOrder信息,并保存订单到本地避免车机重启丢失数据 + private void updateNativeCurrentOrder(TaxiPassengerOrderQueryRespBean.Result data) { + if (data == null) { + return; + } + mCurrentOCHOrder = data; + SharedPrefsMgr.getInstance(mContext).putString(TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER, + GsonUtil.jsonFromObject(data)); + } + + //清除订单信息 + public void clearCurrentOCHOrder() { + mCurrentOCHOrder = null; + SharedPrefsMgr.getInstance(mContext).remove(TaxiPassengerConst.SP_KEY_OCH_TAXI_ORDER); + } + + //检测当前订单 + public boolean checkCurrentOCHOrder() { + if ( mCurrentOCHOrder != null + && mCurrentOCHOrder.startSiteGcjPoint != null + && mCurrentOCHOrder.endSiteGcjPoint != null) { + return true; + } + return false; + } + + // TODO: 2021/9/12 + public void calculateTravelDistance(Location carLocation){ + if (checkCurrentOCHOrder() && mCurrentOCHOrder.endSiteGcjPoint.size()>0) { + double endLon = mCurrentOCHOrder.endSiteGcjPoint.get(0); + double endLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); + double distance = CoordinateUtils.calculateLineDistance( + endLon, endLat, + carLocation.getLongitude(), carLocation.getLatitude()); + mCurrentOCHOrder.decreaseTravelDistance(distance); + } + } + + /** + * 计算订单起终距离 + * @return + */ + public int calculateOrderDistanceSum(){ + double endLon = mCurrentOCHOrder.endSiteGcjPoint.get(0); + double endLat = mCurrentOCHOrder.endSiteGcjPoint.get(1); + double startLon = mCurrentOCHOrder.startSiteGcjPoint.get(0); + double startLat = mCurrentOCHOrder.startSiteGcjPoint.get(1); + double distance = CoordinateUtils.calculateLineDistance( + endLon, endLat, + startLon, startLat); + return new Double(distance).intValue(); + } + + //监听网络变化,避免启动机器时无网导致无法更新订单信息 + private final IMogoIntentListener mNetWorkIntentListener = new IMogoIntentListener() { + @Override + public void onIntentReceived( String intentStr, Intent intent ) { + CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "onIntentReceived = %s", intentStr ); + if ( ConnectivityManager.CONNECTIVITY_ACTION.equals( intentStr ) ) { + if ( NetworkUtils.isConnected( mContext ) ) { + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + startOrStopOrderLoop(true); + } + } + } + } + }; + + private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { + // VR mode变更回调 + @Override + public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) { + if (StatusDescriptor.VR_MODE == descriptor) { + if (mControllerStatusCallbackMap.size() > 0) { + for (IOCHTaxiPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ + callback.onVRModeChanged(isTrue); + } + } + } + } + }; + + private final IMogoLifecycleListener mSocketLifeCycleLisnter = new IMogoLifecycleListener() { + @Override + public void onConnectFailure() { CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"socket onConnectFailure"); } + + @Override + public void onConnectSuccess() { CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"socket onConnectSuccess"); } + + @Override + public void onConnectLost() { CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"socket onConnectLost"); } + }; + + // 自车定位 + private final IMogoCarLocationChangedListener2 mCarLocationChangedListener2 = new IMogoCarLocationChangedListener2() { + + @Override + public void onCarLocationChanged2( Location location ) { + //位置变化时,通过围栏判断是否到达x点 + if (location != null && checkCurrentOCHOrder()) { + if (getCurOrderStatus() == TaxiPassengerOrderStatusEnum.OnTheWayToEnd) { + calculateTravelDistance(location); + } + } + mLongitude = location.getLongitude(); + mLatitude = location.getLatitude(); + CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"mLongitude = "+mLongitude+", mLatitude = "+mLatitude); + for (IOCHTaxiPassengerControllerStatusCallback callback :mControllerStatusCallbackMap.values()){ + callback.onCarLocationChanged(location); + } + } + }; + + private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener(){ + + @Override + public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { + + } + + private boolean arriveAtEnd = false; //乘客app专用字段 + + @Override + public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { + if (autopilotStatusInfo == null) return; + int state = autopilotStatusInfo.getState(); + CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "state = %s", state ); + if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotRunning(); + if (mCurrentOCHOrder != null + && getCurOrderStatus() == TaxiPassengerOrderStatusEnum.ArriveAtStart + && state != mPrevAPStatus) { + // 当高频返回autopilot 2时,不重复调用订单状态变更 + mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态 +// updateOCHOrderStatus(OrderStatusEnum.OnTheWayToEndStation); + } + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + mPrevAPStatus = state; + + if (FunctionBuildConfig.isDemoMode + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + // 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态 + if (!arriveAtEnd) { + return; + } else { + arriveAtEnd = false; + } + } + + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotEnable(); + } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) { + mPrevAPStatus = state; + + if (FunctionBuildConfig.isDemoMode + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + // 当美化模式(演示模式)开启时:且是乘客app、且未到终点时,维持自动驾驶icon开启状态 + if (!arriveAtEnd) { + return; + } else { + arriveAtEnd = false; + } + } + + if (mADASStatusCallback != null) mADASStatusCallback.onAutopilotDisable(); + } + } + + @Override + public void onAutopilotSNRequest() { + + } + + @Override + public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) { + if (FunctionBuildConfig.isDemoMode + && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { + arriveAtEnd = true; + } + + if (arrivalNotification == null || !checkCurrentOCHOrder() + || (getCurOrderStatus() == TaxiPassengerOrderStatusEnum.ArriveAtEnd)) { + return; + } + if (DebugConfig.isDebug()) { + // TipToast.shortTip("到达目的地"); + } + } + + }; + + private final IMoGoAutopilotPlanningListener moGoAutopilotPlanningListener = new IMoGoAutopilotPlanningListener(){ + + @Override + public void onAutopilotTrajectory(@NonNull List trajectoryInfos) { + + } + + @Override + public void onAutopilotRotting(@Nullable MessagePad.GlobalPathResp routeList) { + if (null != routeList && routeList.getWayPointsList().size() > 0){ + calculateRouteLineSum(TPCoordinateCalculateRouteUtil.coordinateConverterWgsToGcjListCommon(mContext,routeList.getWayPointsList())); + updateRouteResult(routeList.getWayPointsList()); + } + } + + }; + + /** + * 限速监听 + */ + private final LimitingVelocityListener limitingVelocityListener = new LimitingVelocityListener(){ + + @Override + public void onLimitingVelocityChange(int limitingVelocity) { + if (mVeloctityCallback != null){ + mVeloctityCallback.onLimitingVelocityChange(limitingVelocity); + } + } + }; + + public void updateRouteResult(List models){ + if (mAutopilotPlanningCallback != null){ + mAutopilotPlanningCallback.routeResult(models); + } + } + /** + * 导航订单起点到终点 获得剩余时间,里程,预计到达时间 + */ + public void initGeocodeSearch() { + if (mCurrentOCHOrder != null){ + TaxiPassengerGeocodeSearchModel.getInstance(mContext).initGeocodeSearch(); + TaxiPassengerGeocodeSearchModel.getInstance(mContext).setOCHTaciNaviChangedCallback(this); + } + } + + public void destoryGeocodeSearch(){ + TaxiPassengerGeocodeSearchModel.getInstance(mContext).destroyGeocodeSearch(); + } + + public void startOrStopQueryOrderRemaining(boolean isStart){ + if (isStart){ + TaxiPassengerModelLoopManager.getInstance().startQueryOrderRemainingtLoop(); + }else { + TaxiPassengerModelLoopManager.getInstance().stopQueryOrderRemainingLoop(); + } + } + + public void queryOrderRemaining(){ + if (mCurrentOCHOrder == null) return; + TaxiPassengerServiceManager.getInstance().queryOrderRemaining(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerOrderQueryRemainingResp data) { + if (data != null && data.data!=null){ + CallerLogger.INSTANCE.e(M_TAXI_P + TAG,"distance = "+data.data.distance+" ,duration = "+data.data.duration); + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentOrderDistToEndChanged(data.data.distance,data.data.duration); + } + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + public void queryOrderRouteList() { + if (mCurrentOCHOrder == null) return; + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route--- queryOrderRouteList"); + TaxiPassengerServiceManager.getInstance().queryOrderRouteList(mContext, mCurrentOCHOrder.orderNo, new TaxiPassengerServiceCallback() { + @Override + public void onSuccess(TaxiPassengerQueryOrderRouteResp data) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "--route---"+GsonUtil.jsonFromObject(data)); + if (data != null && data.data != null && data.data != null && data.data.size() > 0){ + if (mAutopilotPlanningCallback != null){ + calculateRouteLineSum(data.data); + mAutopilotPlanningCallback.routeResultByServer(data.data); + } + }else { + queryOrderRouteList(); + } + } + + @Override + public void onFail(int code, String msg) { + + } + }); + } + + @Override + public void onCurrentRoadName(String currentRoadName) { + for (IOCHTaxiPassengerOrderStatusCallback callback :mOrderStatusCallbackMap.values()){ + callback.onCurrentRoadName(currentRoadName); + } + } + + /** + * 订单结束或者取消的时候, 刷新导航标识位以及缓存的数据 + */ + public void recoverNaviInfo(){ + SharedPrefsMgr.getInstance(mContext).remove(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS); + } + + public void calculateRouteLineSum(List points){ + float sumLength = TPCoordinateCalculateRouteUtil.calculateRouteSumLength(points); + SharedPrefsMgr.getInstance(mContext).putInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,(int) sumLength); + } + + private void runOnUIThread(Runnable executor) { + if (executor == null) { + return; + } + if (Looper.myLooper() != Looper.getMainLooper()) { + UiThreadHandler.post(executor); + } else { + executor.run(); + } + } + +} 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 new file mode 100644 index 0000000000..eacf0496b3 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModelLoopManager.java @@ -0,0 +1,77 @@ +package com.mogo.och.taxi.passenger.model; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; + +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; + +/** + * Created on 2021/9/10 + * + * 管理轮询逻辑(订单轮询、新单轮询、新单抢单结果轮询等等) + */ +public class TaxiPassengerModelLoopManager { + + private static final String TAG = TaxiPassengerModelLoopManager.class.getSimpleName(); + + private static final class SingletonHolder { + private static final TaxiPassengerModelLoopManager INSTANCE = new TaxiPassengerModelLoopManager(); + } + + public static TaxiPassengerModelLoopManager getInstance() { + return SingletonHolder.INSTANCE; + } + + private Disposable mInAndWaitServiceDisposable; //进行中、待服务订单列表轮询 + private Disposable mQueryOrderRemainingDisposable; //心跳轮询 + + public void startInAndWaitOrdersLoop() { + if (mInAndWaitServiceDisposable != null && !mInAndWaitServiceDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startInAndWaitOrdersLoop()"); + mInAndWaitServiceDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, + TaxiPassengerConst.LOOP_PERIOD_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> TaxiPassengerModel.getInstance().queryInAndWaitOrders()); + } + + public void stopInAndWaitOrdersLoop() { + if (mInAndWaitServiceDisposable != null) { + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopInAndWaitOrdersLoop()"); + mInAndWaitServiceDisposable.dispose(); + mInAndWaitServiceDisposable = null; + } + } + + + public void startQueryOrderRemainingtLoop() { + if (mQueryOrderRemainingDisposable != null && !mQueryOrderRemainingDisposable.isDisposed()) { + return; + } + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "startQueryOrderRemainingtLoop()"); + mQueryOrderRemainingDisposable = Observable.interval(TaxiPassengerConst.LOOP_DELAY, + TaxiPassengerConst.LOOP_CALCULATEROUTE_2S, TimeUnit.MILLISECONDS) + .map((aLong -> aLong + 1)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(aLong -> TaxiPassengerModel.getInstance().queryOrderRemaining()); + } + + public void stopQueryOrderRemainingLoop() { + if (mQueryOrderRemainingDisposable != null) { + CallerLogger.INSTANCE.i(M_TAXI_P + TAG, "stopQueryOrderRemainingLoop()"); + mQueryOrderRemainingDisposable.dispose(); + mQueryOrderRemainingDisposable = null; + } + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceApiNew.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceApiNew.java deleted file mode 100644 index 90b5213cbd..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceApiNew.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.mogo.och.taxi.passenger.network; -import com.mogo.eagle.core.data.BaseData; -import com.mogo.och.taxi.passenger.bean.CarHeartbeatReqBean; -import com.mogo.och.taxi.passenger.bean.DriverServiceDataRespBean; -import com.mogo.och.taxi.passenger.bean.DriverStatusQueryRespBean; -import com.mogo.och.taxi.passenger.bean.DriverStatusUpdateReqBean; -import com.mogo.och.taxi.passenger.bean.OrderCancelReqBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabReqBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabRespBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabStatusQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryReqBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoReqBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.passenger.bean.OrderStatusUpdateReqBean; -import com.mogo.och.taxi.passenger.bean.OrdersInServiceQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersListQueryReqBean; -import com.mogo.och.taxi.passenger.bean.OrdersListQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersNewBookingQueryRespBean; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; - -/** - * Created by pangfan on 2021/8/19 - * - * 网约车-出租车接口定义 - */ -interface OCHTaxiServiceApiNew { - - /** - * 查询全部服务中/待服务订单(没有的时候返回code 0,空列表) - * @param sn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET("/autopilot-car-hailing/api/v1/driver/orderInService/query") - Observable queryOrdersInAndWaitService(@Query("sn") String sn); - - /** - * 查询新到的预约单 - * @param sn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/api/v1/driver/newBookingOrder/query" ) - Observable queryNewBookingOrder(@Query("sn") String sn); - - /** - * (预约单)执行抢单动作 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/grabOrder" ) - Observable grabOrder(@Body OrderGrabReqBean data); - - /** - * (预约单)查询抢单结果 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/grabStatus/query" ) - Observable queryOrderGrabStatus(@Body OrderGrabReqBean data); - - /** - * 查询订单路径规划信息(到上车点、起始点间的距离和预估时间) - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/routeInfo/query" ) - Observable queryOrderRouteInfo(@Body OrderQueryRouteInfoReqBean data); - - /** - * 通过orderId查询订单信息(用于本地已经有orderId时) - * @param data - * @return - * @deprecated v2.1_0930需求中暂不再使用此接口 - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/queryOrderById" ) - Observable queryOrderById(@Body OrderQueryReqBean data); - - /** - * 查询服务中订单信息(用于本地无orderId时) - * 如果有多条,只会返回时间最近的一条 - * @param sn - * @return - * @deprecated v2.1_0930需求中暂不再使用此接口 - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/api/v1/driver/queryOrderInService" ) - Observable queryOrderInService(@Query("sn") String sn); - - /** - * 取消订单 - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/autopilot-car-hailing/api/v1/driver/cancelOrder") - Observable cancelOrder(@Body OrderCancelReqBean data); - - /** - * 订单列表获取 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/queryOrders" ) - Observable queryOrdersList(@Body OrdersListQueryReqBean data); - - /** - * 订单状态更新 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/order/updateStatus" ) - Observable updateOrderStatus(@Body OrderStatusUpdateReqBean data); - - /** - * 收车/出车状态更新 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/serviceStatus/update" ) - Observable updateDriverServiceStatus(@Body DriverStatusUpdateReqBean data); - - /** - * 收车/出车状态查询 - * @param sn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) - Observable queryDriverServiceStatus(@Query("sn") String sn); - - /** - * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 - * @param data - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @POST( "/autopilot-car-hailing/api/v1/driver/heartbeat" ) - Observable runCarHeartbeat(@Body CarHeartbeatReqBean data); - - /** - * 查询司机服务数据 - * @param sn - * @return - */ - @Headers( {"Content-type:application/json;charset=UTF-8"} ) - @GET( "/autopilot-car-hailing/api/v1/driver/serviceData/query" ) - Observable queryServiceData(@Query("sn") String sn); -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceCallback.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceCallback.java deleted file mode 100644 index 7eb540694a..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceCallback.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mogo.och.taxi.passenger.network; - -/** - * @author congtaowang - * @since 2021/1/15 - * - * 修改订单状态回调接口 - */ -public interface OCHTaxiServiceCallback< 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/OCHTaxiServiceManagerNew.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceManagerNew.java deleted file mode 100644 index 6f14a0afdc..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/OCHTaxiServiceManagerNew.java +++ /dev/null @@ -1,352 +0,0 @@ -package com.mogo.och.taxi.passenger.network; - -import android.content.Context; - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig; -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.Logger; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.taxi.passenger.bean.CarHeartbeatReqBean; -import com.mogo.och.taxi.passenger.bean.DriverServiceDataRespBean; -import com.mogo.och.taxi.passenger.bean.DriverStatusQueryRespBean; -import com.mogo.och.taxi.passenger.bean.DriverStatusUpdateReqBean; -import com.mogo.och.taxi.passenger.bean.OrderCancelReqBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabReqBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabRespBean; -import com.mogo.och.taxi.passenger.bean.OrderGrabStatusQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryReqBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoReqBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.passenger.bean.OrderStatusUpdateReqBean; -import com.mogo.och.taxi.passenger.bean.OrdersInServiceQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersListQueryReqBean; -import com.mogo.och.taxi.passenger.bean.OrdersListQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrdersNewBookingQueryRespBean; -import com.mogo.och.taxi.passenger.constant.OCHTaxiConst; - -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by pangfan on 2021/8/19 - */ -public class OCHTaxiServiceManagerNew { - private static final String TAG = OCHTaxiServiceManagerNew.class.getSimpleName(); - - private static final class SingletonHolder { - private static final OCHTaxiServiceManagerNew INSTANCE = new OCHTaxiServiceManagerNew(); - } - - public static OCHTaxiServiceManagerNew getInstance() { - return SingletonHolder.INSTANCE; - } - - private String baseUrl = OCHTaxiConst.getBaseUrl(); - private OCHTaxiServiceApiNew mOCHTaxiServiceApi; - - private OCHTaxiServiceManagerNew() { - if (mOCHTaxiServiceApi == null){ - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - } - - /** - * 查询全部服务中/待服务订单列表 - * @param context - * @param callback - */ - public void queryOrdersInAndWaitService(Context context, - OCHTaxiServiceCallback callback) { - if (mOCHTaxiServiceApi == null) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryOrdersInAndWaitService(MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrdersInAndWaitService")); - } - - /** - * 查询新到的预约单 - * @param context - * @param callback - */ - public void queryNewBookingOrder(Context context, - OCHTaxiServiceCallback callback) { - if (mOCHTaxiServiceApi == null) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryNewBookingOrder(MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryNewBookingOrder")); - } - - /** - * (预约单)执行抢单动作 - * @param context - * @param orderId - * @param callback - */ - public void grabOrder(Context context, long orderId, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.grabOrder(new OrderGrabReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), orderId)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "grabOrder")); - } - - /** - * (预约单)查询抢单结果 - * @param context - * @param orderId - * @param callback - */ - public void queryOrderGrabStatus(Context context, long orderId, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryOrderGrabStatus(new OrderGrabReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), orderId)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderGrabStatus")); - } - - /** - * 查询订单路径规划信息(到上车点、起始点间的距离和预估时间) - * @param context - * @param orderId - * @param callback - */ - public void queryOrderRouteInfo(Context context, long orderId, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryOrderRouteInfo(new OrderQueryRouteInfoReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), orderId)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderRouteInfo")); - } - - /** - * 通过orderId查询订单信息(用于本地已经有orderId时) - * @param context - * @param orderId - * @param callback - * @deprecated v2.1_0930需求中暂不再使用此接口 - */ - public void queryOrderById(Context context, long orderId, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryOrderById(new OrderQueryReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), orderId)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderById")); - } - - /** - * 查询未完成态订单信息(用于本地无orderId时) - * 如果有多条,只会返回时间最近的一条 - * @param context - * @param callback - * @deprecated v2.1_0930需求中暂不再使用此接口 - */ - public void queryOrderInService(Context context, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryOrderInService(MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrderInService")); - } - - /** - * 司机取消订单 - * @param context - * @param orderId - * @param cancelType - * @param cancelReason - * @param callback - */ - public void cancelOrder(Context context, long orderId, int cancelType, String cancelReason, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.cancelOrder(new OrderCancelReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), orderId, cancelType, cancelReason)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "cancelOrder")); - } - - /** - * 订单列表获取 - * @param context - * @param page - * @param size - * @param callback - */ - public void queryOrdersList(Context context, int page, int size, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryOrdersList(new OrdersListQueryReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), page, size)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryOrdersList")); - } - - /** - * 订单状态更新 - * @param context - * @param orderId - * @param orderStatus - * @param callback - */ - public void updateOrderStatus(Context context, long orderId, int orderStatus, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.updateOrderStatus(new OrderStatusUpdateReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), orderId, orderStatus)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "updateOrderStatus")); - } - - /** - * 收车/出车状态更新 - * @param context - * @param status - * @param callback - */ - public void updateDriverServiceStatus(Context context, int status, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.updateDriverServiceStatus(new DriverStatusUpdateReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), status)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "updateDriverServiceStatus")); - } - - /** - * 收车/出车状态查询 - * @param context - * @param callback - */ - public void queryDriverServiceStatus(Context context, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryDriverServiceStatus(MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryDriverServiceStatus")); - } - - /** - * 车机端上传心跳数据(只在出车状态时上传):包含高德坐标系经纬度 - * @param context - * @param lon - * @param lat - * @param callback - */ - public void runCarHeartbeat(Context context, double lon, double lat, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.runCarHeartbeat(new CarHeartbeatReqBean( - MoGoAiCloudClientConfig.getInstance().getSn(), lon, lat)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "runCarHeartbeat")); - } - - /** - * 查询司机服务数据 - * @param context - * @param callback - */ - public void queryDriverServiceData(Context context, - OCHTaxiServiceCallback callback) { - if ( mOCHTaxiServiceApi == null ) { - mOCHTaxiServiceApi = MogoApisHandler.getInstance().getApis().getNetworkApi() - .create(OCHTaxiServiceApiNew.class, baseUrl); - } - mOCHTaxiServiceApi.queryServiceData(MoGoAiCloudClientConfig.getInstance().getSn()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getSubscribeImpl(context, callback, "queryDriverServiceData")); - } - - private SubscribeImpl getSubscribeImpl( - Context context, OCHTaxiServiceCallback callback, String apiName) { - return new SubscribeImpl(RequestOptions.create(context)) { - @Override - public void onSuccess(T o) { - super.onSuccess(o); - Logger.e(TAG,apiName + ": onSuccess() " + o.msg); - if (callback != null) { - callback.onSuccess(o); - } - } - - @Override - public void onError(Throwable e) { - super.onError(e); - Logger.e(TAG,apiName + ": onError() " + e.getMessage()); - if (callback != null) { - callback.onError(); - } - } - - @Override - public void onError(String message, int code) { - super.onError(message, code); - Logger.e(TAG,String.format(apiName + ": onError() code = %d; message = %s;", code, message)); - if (callback != null) { - callback.onFail(code, message); - } - } - }; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java new file mode 100644 index 0000000000..7e3d423755 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceApi.java @@ -0,0 +1,66 @@ +package com.mogo.och.taxi.passenger.network; +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 io.reactivex.Observable; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Query; + +/** + * Created by pangfan on 2021/8/19 + * + * 网约车-出租车接口定义 + */ +interface TaxiPassengerServiceApi { + + /** + * 查询全部服务中/待服务订单(没有的时候返回code 0,空列表) + * @param driverSn + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @GET("/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderInService/query") + + Observable queryOrdersInAndWaitService(@Header("appId") String appId, @Header("ticket") String ticket, @Query("driverSn") String driverSn); + + + /** + * 通过orderNo查询订单信息(用于本地已经有orderNo时) + * @param data + * @return + * @deprecated v2.1_0930需求中暂不再使用此接口 + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @POST( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/queryOrderById" ) + Observable queryOrderById(@Header ("appId") String appId,@Header("ticket") String ticket,@Body TaxiPassengerOrderQueryReqBean data); + + /** + * 查询订单剩余里程和时间 + * @param appId + * @param ticket + * @param orderNo + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) + @GET("/autopilot-car-hailing/order/v2/driver/taxi/queryOrderRemaining") + Observable queryOrderRemaining(@Header("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); + + /** + * 查询订单全路径 + * @param appId + * @param ticket + * @param orderNo + * @return + */ + @Headers( {"Content-type:application/json;charset=UTF-8"} ) +// @GET( "/autopilot-car-hailing/api/v1/driver/serviceStatus/query" ) + @GET( "/autopilot-car-hailing/order/v2/driver/taxi/passenger/orderRoute" ) + Observable queryOrderRoute(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("orderNo") String orderNo); +} 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 new file mode 100644 index 0000000000..b2d02607c3 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceCallback.java @@ -0,0 +1,18 @@ +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 new file mode 100644 index 0000000000..d1e111635d --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/network/TaxiPassengerServiceManager.java @@ -0,0 +1,144 @@ +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.module.common.MogoApisHandler; +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.constant.TaxiPassengerConst; + +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(); +// return "X2020210525EFA93B5946FA38D4"; + } + + /** + * 查询全部服务中/待服务订单列表 + * @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); + } + } + }; + } +} 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 new file mode 100644 index 0000000000..fd1d8ef13a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/BaseTaxiPassengerPresenter.java @@ -0,0 +1,177 @@ +package com.mogo.och.taxi.passenger.presenter; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +import android.location.Location; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.mvp.Presenter; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.network.utils.GsonUtil; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerADASStatusCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback; +import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; +import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel; +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; +import com.mogo.och.taxi.passenger.ui.TaxiPassengerBaseFragment; + +/** + * @author: wangmingjun + * @date: 2022/3/4 + */ +public class BaseTaxiPassengerPresenter extends Presenter implements + IOCHTaxiPassengerADASStatusCallback, IOCHTaxiPassengerControllerStatusCallback, + IOCHTaxiPassengerOrderStatusCallback { + + private static final String TAG = BaseTaxiPassengerPresenter.class.getSimpleName(); + + private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentPassengerOrder = null; //当前订单 + + public BaseTaxiPassengerPresenter(TaxiPassengerBaseFragment view) { + super(view); + TaxiPassengerModel.getInstance().init(AbsMogoApplication.getApp()); + initListeners(); + } + + @Override + public void onCreate( @NonNull LifecycleOwner owner ) { + super.onCreate( owner ); + CallerLogger.INSTANCE.d( M_TAXI_P + TAG, "网约车-出租车拿到订单" ); + } + + @Override + public void onDestroy( @NonNull LifecycleOwner owner ) { + super.onDestroy( owner ); + + releaseListeners(); + TaxiPassengerModel.getInstance().release(); + } + + private void initListeners() { + TaxiPassengerModel.getInstance().setADASStatusCallback(this); + TaxiPassengerModel.getInstance().setOrderStatusCallback("BaseTaxiPassengerPresenter",this); + TaxiPassengerModel.getInstance().setControllerStatusCallback("BaseTaxiPassengerPresenter",this); + } + + private void releaseListeners() { + TaxiPassengerModel.getInstance().setADASStatusCallback(null); + TaxiPassengerModel.getInstance().setOrderStatusCallback("BaseTaxiPassengerPresenter",null); + TaxiPassengerModel.getInstance().setControllerStatusCallback("BaseTaxiPassengerPresenter",null); + } + + private void runOnUIThread( Runnable executor ) { + if ( executor == null ) { + return; + } + if ( Looper.myLooper() != Looper.getMainLooper() ) { + UiThreadHandler.post( executor ); + } else { + executor.run(); + } + } + + // 获取当前订单状态 + public TaxiPassengerOrderStatusEnum getCurOrderStatus() { + return TaxiPassengerModel.getInstance().getCurOrderStatus(); + } + + public void startOrStopOrderLoop(){ + TaxiPassengerModel.getInstance().startOrStopOrderLoop(); + } + + @Override + public void onAutopilotArriveEnd() { + + } + + @Override + public void onAutopilotEnable() { + runOnUIThread(() -> mView.onAutopilotStatusChanged( + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE)); + } + + @Override + public void onAutopilotDisable() { + runOnUIThread(() -> mView.onAutopilotStatusChanged( + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE)); + } + + @Override + public void onAutopilotRunning() { + runOnUIThread(() -> mView.onAutopilotStatusChanged( + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)); + } + + @Override + public void onVRModeChanged(boolean isVRMode) { + runOnUIThread(() -> mView.switchVRFlatMode(isVRMode)); + } + + @Override + public void onCarLocationChanged(Location location) { + } + + @Override + public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order)); + if (mCurrentPassengerOrder == null){ + mCurrentPassengerOrder = order; //当前无订单 + updateOrderView(order); + }else if (mCurrentPassengerOrder.orderStatus != order.orderStatus) { + mCurrentPassengerOrder = order; + updateOrderView(order); + } + } + + @Override + public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { + + } + + @Override + public void onCurrentRoadName(String currentRoadName) { + + } + + private void updateOrderView(TaxiPassengerOrderQueryRespBean.Result order) { + CallerLogger.INSTANCE.d(M_TAXI_P+TAG,"updateOrderView = "+order.orderStatus); + if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == order.orderStatus){ + runOnUIThread(() -> mView.showOrHideServingOrderFragment(false)); + TaxiPassengerModel.getInstance().recoverNaviInfo(); + TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); + return; + } + if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus + || TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ + runOnUIThread(() -> mView.showOrHideServingOrderFragment(true)); + return; + } + if (TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == order.orderStatus){ + TaxiPassengerModel.getInstance().recoverNaviInfo(); + TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); + runOnUIThread(() -> { + mView.showOrHideServingOrderFragment(false); + mView.showOrHideArrivedEndLayout(true, order.endSiteAddr); + }); + return; + } + if (TaxiPassengerOrderStatusEnum.JourneyCompleted.getCode() == order.orderStatus){ + runOnUIThread(() -> { + mView.showOrHideServingOrderFragment(false); + mView.showOrHideArrivedEndLayout(false, ""); + }); + TaxiPassengerGeocodeSearchModel.getInstance(getContext()).destroyGeocodeSearch(); + mCurrentPassengerOrder = null; + return; + } + } + +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/OCHTaxiPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/OCHTaxiPresenter.java deleted file mode 100644 index 48decd91d5..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/OCHTaxiPresenter.java +++ /dev/null @@ -1,259 +0,0 @@ -package com.mogo.och.taxi.passenger.presenter; - -import android.location.Location; -import android.os.Build; -import android.os.Looper; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; -import androidx.lifecycle.LifecycleOwner; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.mvp.Presenter; -import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiAutopilotPlanningCallback; -import com.mogo.och.taxi.passenger.constant.OrderStatusEnum; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiADASStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiCarStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiControllerStatusCallback; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiOrderStatusCallback; -import com.mogo.och.taxi.passenger.model.MogoOCHTaxiModelNew; -import com.mogo.och.taxi.passenger.ui.OCHTaxiFragment; - -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -/** - * @author congtaowang - * @since 2021/1/18 - * - * 描述 - */ -public class OCHTaxiPresenter extends Presenter implements IOCHTaxiADASStatusCallback, - IOCHTaxiCarStatusCallback, IOCHTaxiOrderStatusCallback, IOCHTaxiControllerStatusCallback, IOCHTaxiAutopilotPlanningCallback { - - private static final String TAG = OCHTaxiPresenter.class.getSimpleName(); - - public OCHTaxiPresenter(OCHTaxiFragment view) { - super(view); - MogoOCHTaxiModelNew.getInstance().init(AbsMogoApplication.getApp()); - initListeners(); - } - - @Override - public void onCreate( @NonNull LifecycleOwner owner ) { - super.onCreate( owner ); - Logger.d( TAG, "网约车-出租车拿到订单" ); - } - - @Override - public void onDestroy( @NonNull LifecycleOwner owner ) { - super.onDestroy( owner ); - - releaseListeners(); - MogoOCHTaxiModelNew.getInstance().release(); - } - - private void initListeners() { - MogoOCHTaxiModelNew.getInstance().setADASStatusCallback(this); - MogoOCHTaxiModelNew.getInstance().setCarStatusCallback(this); - MogoOCHTaxiModelNew.getInstance().setControllerStatusCallback(this); - MogoOCHTaxiModelNew.getInstance().setOrderStatusCallback(this); - MogoOCHTaxiModelNew.getInstance().setMoGoAutopilotPlanningListener(this); - } - - private void releaseListeners() { - MogoOCHTaxiModelNew.getInstance().setADASStatusCallback(null); - MogoOCHTaxiModelNew.getInstance().setCarStatusCallback(null); - MogoOCHTaxiModelNew.getInstance().setControllerStatusCallback(null); - MogoOCHTaxiModelNew.getInstance().setOrderStatusCallback(null); - MogoOCHTaxiModelNew.getInstance().setMoGoAutopilotPlanningListener(null); - } - - private void runOnUIThread( Runnable executor ) { - if ( executor == null ) { - return; - } - if ( Looper.myLooper() != Looper.getMainLooper() ) { - UiThreadHandler.post( executor ); - } else { - executor.run(); - } - } - - // 开启自动驾驶 - public void startAutoPilot() { - MogoOCHTaxiModelNew.getInstance().startAutoPilot(); - } - - // 更新出车/收车状态 - public void updateCarStatus() { - MogoOCHTaxiModelNew.getInstance().updateCarStatus(); - } - - // 更新当前订单状态(当前订单状态流转) - public void updateCurOrderStatus(OrderStatusEnum status) { - MogoOCHTaxiModelNew.getInstance().updateOCHOrderStatus(status); - } - - // 获取当前订单状态 - public OrderStatusEnum getCurOrderStatus() { - return MogoOCHTaxiModelNew.getInstance().getCurOrderStatus(); - } - - // 取消当前订单 - public void cancelCurOrder(int reasonType, String reason) { - MogoOCHTaxiModelNew.getInstance().cancelCurrentOrder(reasonType, reason); - } - - // 取消待服务中订单 - public void cancelOrderById(long orderId, int reasonType, String reason) { - MogoOCHTaxiModelNew.getInstance().cancelOrderById(orderId, reasonType, reason); - } - - // 查询当前订单route信息:预估时间、里程等 - public void queryCurOrderRouteInfo() { - MogoOCHTaxiModelNew.getInstance().queryCurOrderRouteInfo(); - } - - // 获取全部订单列表 - public void queryOrdersList(int page, int size) { - MogoOCHTaxiModelNew.getInstance().queryOrdersList(page, size); - } - - // 执行抢单动作 - public void grabOrder() { - MogoOCHTaxiModelNew.getInstance().grabOrder(); - } - - // 关闭新到预约单 - public void cancelNewBookingOrder() { - MogoOCHTaxiModelNew.getInstance().cancelNewBookingOrder(); - } - - // 查询司机服务数据 - public void queryDriverServiceData() { - MogoOCHTaxiModelNew.getInstance().queryDriverServiceData(); - } - - @Override - public void onAutopilotArriveEnd() { - - } - - @Override - public void onAutopilotEnable() { - mView.updateAutopilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE); - } - - @Override - public void onAutopilotDisable() { - mView.updateAutopilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE); - } - - @Override - public void onAutopilotRunning() { - mView.updateAutopilotStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); - } - - @Override - public void onCarStatusChanged(boolean inOperation) { - mView.updateOperationStatus(inOperation); - } - - @Override - public void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum) { - mView.onServiceDataUpdate(dailyTimeDuration,dailyOrderNum); - } - - @Override - public void onOrdersInServiceChanged(@NonNull @NotNull List inServiceList) { - - } - - @Override - public void onOrdersWaitServiceChanged(@NonNull @NotNull List waitServiceList) { - mView.onOrdersWaitServiceChanged(waitServiceList); - } - - @RequiresApi(api = Build.VERSION_CODES.P) - @Override - public void onCurrentOrderStatusChanged(OrderQueryRespBean.Result order) { - Log.d(TAG,"order = "+order.toString()); - mView.updateCurrentOrderStatusChanged(order); - } - - @Override - public void onCurrentOrderCancelDone() { - mView.onCurrentOrderCancelDone(); - } - - @Override - public void onOrderCancelDone(long orderId) { - mView.onOrderCancelDone(orderId); - } - - @Override - public void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo) { - mView.onCurrentOrderRouteInfoGot(routeInfo); - } - - @Override - public void onCurrentOrderDistToStartChanged(long meters, long timeInSecond) { - mView.onCurrentOrderDistToStartChanged(meters,timeInSecond); - } - - @Override - public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { - mView.onCurrentOrderDistToEndChanged(meters,timeInSecond); - } - - @Override - public void onOrdersListPageRefresh(List ordersList) { - mView.onOrdersListPageRefresh(ordersList); - } - - @Override - public void onNewBookingOrderGot(OrderQueryRespBean.Result order) { - mView.onNewBookingOrderGot(order); - } - - @Override - public void onGrabOrderExecuteDone() { - mView.onGrabOrderExecuteDone(); - } - - @Override - public void onGrabOrderSuccess(OrderQueryRespBean.Result order) { - mView.onGrabOrderSuccess(order); - } - - @Override - public void onGrabOrderFailed(OrderQueryRespBean.Result order) { - mView.onGrabOrderFailed(order); - } - - @Override - public void onVRModeChanged(boolean isVRMode) { - runOnUIThread(() -> mView.switchVRFlatMode(isVRMode)); - } - - @Override - public void onCarLocationChanged(Location location) { - if (null != location){ - runOnUIThread(() -> mView.updateSpeedView(location.getSpeed())); - mView.updateLocation(location.getLatitude(),location.getLongitude()); - } - } - @Override - public void routeResult(List models) { - if (models != null && models.size() > 0) mView.routeResult(models); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java new file mode 100644 index 0000000000..75a3457e21 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/presenter/TaxiPassengerServingOrderPresenter.java @@ -0,0 +1,160 @@ +package com.mogo.och.taxi.passenger.presenter; + +import android.location.Location; +import android.os.Build; +import android.os.Looper; + +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.lifecycle.LifecycleOwner; + +import com.amap.api.maps.model.LatLng; +import com.mogo.commons.mvp.Presenter; +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.network.utils.GsonUtil; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerAutopilotPlanningCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerControllerStatusCallback; +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback; +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback; +import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; +import com.mogo.och.taxi.passenger.model.TaxiPassengerGeocodeSearchModel; +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; +import com.mogo.och.taxi.passenger.ui.TaxiPassengerServingOrderFragment; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +/** + * @author: wangmingjun + * @date: 2022/3/14 + */ +public class TaxiPassengerServingOrderPresenter extends Presenter + implements IOCHTaxiPassengerAutopilotPlanningCallback, IOCHTaxiPassengerOrderStatusCallback + , IOCHTaxiPassengerControllerStatusCallback, ITaxiPassengerVeloctityCallback { + + private static final String TAG = TaxiPassengerServingOrderPresenter.class.getSimpleName(); + + private volatile TaxiPassengerOrderQueryRespBean.Result mCurrentPassengerOrder = null; //当前订单 + + public TaxiPassengerServingOrderPresenter(TaxiPassengerServingOrderFragment view) { + super(view); + initListener(); + } + + @Override + public void onResume(@NonNull LifecycleOwner owner) { + super.onResume(owner); + } + + private void initListener() { + TaxiPassengerModel.getInstance().setMoGoAutopilotPlanningListener(this); + TaxiPassengerModel.getInstance().setOrderStatusCallback("TaxiPassengerServingOrderPresenter",this); + TaxiPassengerModel.getInstance().setControllerStatusCallback("TaxiPassengerServingOrderPresenter",this); + TaxiPassengerModel.getInstance().setVeloctityCallback(this); + } + + public void releaseListener(){ + TaxiPassengerModel.getInstance().setMoGoAutopilotPlanningListener(null); + TaxiPassengerModel.getInstance().setOrderStatusCallback("TaxiPassengerServingOrderPresenter",null); + TaxiPassengerModel.getInstance().setControllerStatusCallback("TaxiPassengerServingOrderPresenter",null); + TaxiPassengerModel.getInstance().setVeloctityCallback(null); + + } + + @Override + public void routeResult(List models) { + if (models == null) return; + List latLngList = new ArrayList<>(); + for (MessagePad.Location routeModel : models) { + latLngList.add(new MogoLatLng(routeModel.getLatitude(), routeModel.getLongitude())); + } + runOnUIThread(() -> mView.routeResult(latLngList)); + } + + @Override + public void routeResultByServer(List models) { + if (models == null) return; + runOnUIThread(() -> mView.routeResultByServer(models)); + } + + @Override + public void onCurrentOrderStatusChanged(TaxiPassengerOrderQueryRespBean.Result order) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, GsonUtil.jsonFromObject(order)); + + if (mCurrentPassengerOrder == null){ + mCurrentPassengerOrder = order; //当前无订单 + if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ + TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(true); + TaxiPassengerModel.getInstance().queryOrderRouteList(); + } + + mView.updateOrderStatusView(order); + }else if (mCurrentPassengerOrder.orderStatus != order.orderStatus) { + mView.updateOrderStatusView(order); + + if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus){ + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "-----OnTheWayToEndStation----"); + TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(true); + } + + if (TaxiPassengerOrderStatusEnum.Cancel.getCode() == mCurrentPassengerOrder.orderStatus + || TaxiPassengerOrderStatusEnum.ArriveAtEnd.getCode() == mCurrentPassengerOrder.orderStatus){ + TaxiPassengerModel.getInstance().startOrStopQueryOrderRemaining(false); + } + mCurrentPassengerOrder = order; + } + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond) { + runOnUIThread(() -> mView.onCurrentOrderDistToEndChanged(meters, timeInSecond)); + } + + @Override + public void onCurrentRoadName(String currentRoadName) { + runOnUIThread(() -> mView.onCurrentRoadName(currentRoadName)); + } + + @Override + public void onVRModeChanged(boolean isVRMode) { + + } + + @Override + public void onCarLocationChanged(Location location) { + if (location != null){ + runOnUIThread(() -> mView.onCarLocationChanged(location)); + TaxiPassengerGeocodeSearchModel.getInstance(getContext()).searchLocationInfo(location.getLatitude(),location.getLongitude()); + } + } + + @Override + public void onLimitingVelocityChange(int limitingVelocity) { + mView.onLimitingVelocityChange(limitingVelocity); + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) { + super.onDestroy(owner); + releaseListener(); + } + + private void runOnUIThread( Runnable executor ) { + if ( executor == null ) { + return; + } + if ( Looper.myLooper() != Looper.getMainLooper() ) { + UiThreadHandler.post( executor ); + } else { + executor.run(); + } + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BaseOchTaxiTabFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BaseOchTaxiTabFragment.java deleted file mode 100644 index 5abbbf58e4..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BaseOchTaxiTabFragment.java +++ /dev/null @@ -1,478 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.animation.ObjectAnimator; -import android.content.Intent; -import android.graphics.drawable.AnimationDrawable; -import android.os.Handler; -import android.os.Looper; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.animation.LinearInterpolator; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.constraintlayout.widget.Group; -import androidx.fragment.app.FragmentTransaction; - -import com.mogo.commons.AbsMogoApplication; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.mvp.IView; -import com.mogo.commons.mvp.MvpFragment; -import com.mogo.commons.mvp.Presenter; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; -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.map.CallerSmpManager; -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.map.listener.IMogoMapListener; -import com.mogo.map.uicontroller.VisualAngleMode; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.module.common.constants.DataTypes; -import com.mogo.module.common.view.OnPreventFastClickListener; -import com.mogo.och.taxi.passenger.R; - - -/** - * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 - *

- * 部分业务放在了此处处理 - * - * @author tongchenfei - */ -public abstract class BaseOchTaxiTabFragment> extends MvpFragment implements IMogoMapListener { - - private static final String TAG = "BaseOchFragment"; - private LinearLayout ctvAutopilotStatus; - protected TextView tvOperationStatus; - public boolean isOperationStatus;//false-收车,true-出车 - protected FrameLayout flStationPanelContainer; - private FrameLayout flNaviPanelContainer; - private Group groupTestPanel; - private TextView mSpeedView; - private ImageView mAutopilotImage; - private TextView mAutopilotTv; - private LinearLayout mMapswitchBtn; - private ImageView mCloseNaviIcon; - protected LinearLayout mPersonalBtn; - protected LinearLayout mSettingBtn; - protected OCHNaviFragment ochNaviFragment = null; - - private Handler mHandler = new Handler(Looper.getMainLooper()); - - @Override - protected int getLayoutId() { - return R.layout.taxi_base_fragment; - } - - private View panelView; - - @Override - protected void initViews() { - groupTestPanel = findViewById(R.id.groupTestPanel); - ctvAutopilotStatus = findViewById(R.id.module_mogo_och_autopilot_status); - ctvAutopilotStatus.setBackground(getResources().getDrawable(R.drawable.taxi_autopilot_bg_selector)); - mAutopilotImage = findViewById(R.id.module_och_autopilot_iv); - mAutopilotTv = findViewById(R.id.module_och_autopilot_tv); - flStationPanelContainer = findViewById(R.id.module_mogo_och_station_panel_container); - mPersonalBtn = findViewById(R.id.module_och_taxi_personal_layout); - mSpeedView = findViewById(R.id.module_mogo_och_speed_tv); - mCloseNaviIcon = findViewById(R.id.taxi_close_navi_icon); - flNaviPanelContainer = findViewById(R.id.module_mogo_och_navi_panel_container); - if (DebugConfig.isDebug()) { - mSpeedView.setLongClickable(true); - // TODO: 2021/11/27 暂去除此调试功能 -// mSpeedView.setOnClickListener(v -> { -// onAutopilotStatusChanged(false); -// }); - mSpeedView.setOnLongClickListener(v -> { - Log.d(TAG,"长按显示状态工具栏"); - Intent intent = new Intent(); - intent.putExtra("oper", 52); - MogoApisHandler.getInstance().getApis().getIntentManagerApi().invoke("com.mogo.mock", intent); - return true; - }); - } - tvOperationStatus = findViewById(R.id.module_mogo_och_operation_status); - mMapswitchBtn = findViewById(R.id.module_och_taxi_swich_map_layout); - mMapswitchBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //视角切换 - if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isLongSight()) { - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).visibleAllMarkers(); - MogoApisHandler.getInstance().getApis().getMapServiceApi() - .getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); - } else if (MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().getCurrentMapVisualAngle().isMediumSight()) { - MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS); - MogoApisHandler.getInstance().getApis().getMapServiceApi() - .getMapUIController().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); - } - } - }); - mPersonalBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onGoToTaxiOrders(); - } - }); - - mSettingBtn = findViewById(R.id.module_och_taxi_setting_layout); - mSettingBtn.setOnClickListener(v -> { - // TODO: 2021/12/9 - CallerHmiManager.INSTANCE.showToolsView(); - }); - panelView = LayoutInflater.from(getContext()).inflate(getStationPanelViewId(), flStationPanelContainer); - ctvAutopilotStatus.setOnClickListener(new OnPreventFastClickListener() { - @Override - public void onClickImpl(View v) { - // 如果能自动驾驶,就自动驾驶,不能就提示 - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - restartAutopilot(); - } - // TODO: 2021/11/27 通过开启结果更新ui -// onAutopilotStatusChanged(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING); - } - }); - - // debug下调用测试面板 -// if (DebugConfig.isDebug()) { -// ctvAutopilotStatus.setOnLongClickListener(v -> { -// if (groupTestPanel.getVisibility() == View.VISIBLE) { - groupTestPanel.setVisibility(View.GONE); -// } else { -// groupTestPanel.setVisibility(View.VISIBLE); -// } -// return false; -// }); -// } - - onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); - - // 模拟 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接 -// findViewById(R.id.btnAutopilotDisable).setOnClickListener(view -> -// { -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi() -// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE, "不能使用"); -//// Logger.d("lianglihui","模拟 不可自动驾驶"); -// } -// ); - - // 模拟 可自动驾驶,工控机连接正常,且处于人工干预状态 -// findViewById(R.id.btnAutopilotEnable).setOnClickListener(view -> -// { -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi() -// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE, "能使用"); -// -//// Logger.d("lianglihui","模拟 可自动驾驶"); -// } -// ); - - // 模拟 自动驾驶能力,自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人 -// findViewById(R.id.btnAutopilotRunning).setOnClickListener(view -> -// { -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi() -// .mockOchStatus(IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING, "Running"); -//// Logger.d("lianglihui","模拟 自动驾驶能力"); -// } -// ); - - // 模拟 自动驾驶站 -// findViewById(R.id.btnAutopilotArrive).setOnClickListener(view -> -// { -// MogoApisHandler.getInstance().getApis() -// .getAdasControllerApi().mockOchStatus(-1, "Arrived"); -// -//// Logger.d("lianglihui","模拟 自动驾驶站"); -// } -// ); - - // 模拟 站点下发工控 - findViewById(R.id.btnAutopilotControl).setOnClickListener(view -> - { -// Logger.d("lianglihui","模拟 站点下发工控"); - AutopilotControlParameters currentAutopilot = new AutopilotControlParameters(); - currentAutopilot.isSpeakVoice = true; - // 万集东门站 - currentAutopilot.startLatLon = new AutopilotControlParameters.AutoPilotLonLat(40.194795425,116.724476409); - // 市政府前街18号 - currentAutopilot.endLatLon = new AutopilotControlParameters.AutoPilotLonLat(40.1939540844,116.720067); - // 订单运营类型 (9出租车,10小巴) - currentAutopilot.vehicleType = 10; - Logger.d(TAG, "模拟 订单站点下发:" + currentAutopilot); - CallerAutoPilotManager.INSTANCE.startAutoPilot(currentAutopilot); - } - ); - - tvOperationStatus.setOnClickListener(view -> { - onChangeOperationStatus(); - }); - mCloseNaviIcon.setOnClickListener(v -> { - showNaviToStartStationFragment(false); - }); - - if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) { - flStationPanelContainer.setVisibility(View.GONE); - tvOperationStatus.setVisibility(View.GONE); - mSettingBtn.setVisibility(View.GONE); - } - } - protected void onChangeOperationStatus() { - - } - - protected void onGoToTaxiOrders(){ - - } - public void showNotice(String notice) { - getActivity().runOnUiThread(() -> { - AIAssist.getInstance(getContext()).speakTTSVoice(notice); - }); - } - - /** - * 改变自动驾驶状态 - * - * @param status 2 - running 1 - enable 2 - disable - */ - private int mPrevAPStatus = -1; - public void onAutopilotStatusChanged(int status) { - getActivity().runOnUiThread(() -> { - if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status) { - // 1. 主动开启自动驾驶中,不为2(为0、1)则继续loading - return; - } - if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status - && mPrevAPStatus != status) { - // 2. 主动开启自动驾驶中,为2则停止loading,并isStarting = false - startAutopilotDone(true); - return; - } - // 3. 其他过程直接更新 - startOrStopLoadingAnim(false); - AutopilotStatusAnimchanged(status); - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == mPrevAPStatus) { - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) { - // 2->1 -// AIAssist.getInstance(getContext()).speakTTSVoice("已进入人工驾驶模式"); - } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE == status) { - // 2->0 -// AIAssist.getInstance(getContext()).speakTTSVoice("自动驾驶已停止,请人工接管"); - } - } - mPrevAPStatus = status; - }); - } - - private AnimationDrawable animationDrawable; - public void AutopilotStatusAnimchanged(int status) { -// mAutopilotTv.setText(isInAutopilot?"自动驾驶":"开启自动驾驶"); - if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) { - ctvAutopilotStatus.setClickable(true); - mAutopilotTv.setText("自动驾驶"); - mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal)); - mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot); - if (animationDrawable == null) { - ctvAutopilotStatus.setBackground(getResources().getDrawable(R.drawable.anmi_flow)); - animationDrawable = (AnimationDrawable) ctvAutopilotStatus.getBackground(); - } - if (animationDrawable.isRunning()) { - return; - } - animationDrawable.selectDrawable(0); - animationDrawable.start(); - } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){ - ctvAutopilotStatus.setClickable(true); - mAutopilotTv.setText("自动驾驶"); - mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal)); - mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot); - if (animationDrawable != null){ - animationDrawable.selectDrawable(0); - animationDrawable.stop(); - } - ctvAutopilotStatus.setBackground(getResources().getDrawable(R.drawable.taxi_autopilot_bg_selector)); - animationDrawable = null; - } else { - ctvAutopilotStatus.setClickable(false); - mAutopilotTv.setText("自动驾驶"); - mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_disable)); - mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot_disable); - if (animationDrawable != null){ - animationDrawable.selectDrawable(0); - animationDrawable.stop(); - } - ctvAutopilotStatus.setBackground(getResources().getDrawable(R.drawable.taxi_ic_autopilot_bg)); - animationDrawable = null; - } - - } - - private void startAutopilotDone(boolean success) { - if (autopilotLoadingAnimator != null) { - autopilotLoadingAnimator.end(); - mAutopilotImage.clearAnimation(); - autopilotLoadingAnimator = null; - } - if (success) { - mAutopilotTv.setText("成功"); - mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal)); - mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot_success); - } else { - mAutopilotTv.setText("失败"); - mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal)); - mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot_failed); - } - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - startOrStopLoadingAnim(false); - onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); - } - }, 1000L); - } - - private boolean isStarting = false; - private ObjectAnimator autopilotLoadingAnimator; - public void startOrStopLoadingAnim(boolean start) { - if (start) { - isStarting = true; - mAutopilotTv.setText("启动中"); - mAutopilotTv.setTextColor(getResources().getColor(R.color.taxi_autopilot_text_color_normal)); - mAutopilotImage.setImageResource(R.drawable.taxi_ic_autopilot_loading); - if (autopilotLoadingAnimator == null) { - autopilotLoadingAnimator = ObjectAnimator.ofFloat(mAutopilotImage, - "rotation", 0f, 360f); - } - autopilotLoadingAnimator.setInterpolator(new LinearInterpolator()); - autopilotLoadingAnimator.setRepeatCount(-1);//无限循环 - autopilotLoadingAnimator.setStartDelay(100); - autopilotLoadingAnimator.setDuration(1000);//设置持续时间 - autopilotLoadingAnimator.start();//动画开始 - } else { - isStarting = false; - if (autopilotLoadingAnimator != null) { - autopilotLoadingAnimator.end(); - mAutopilotImage.clearAnimation(); - autopilotLoadingAnimator = null; - } - } - } - - /** - * 隐藏【自动驾驶】按钮 - */ - public void hideAutopilotBiz() { - getActivity().runOnUiThread(() -> { -// ctvAutopilotStatus.setVisibility(View.GONE); -// slidePanelView.setVisibility(View.GONE); - }); - } - - /** - * 展示【自动驾驶】按钮 - */ - public void showAutopilotBiz() { - getActivity().runOnUiThread(() -> { - ctvAutopilotStatus.setVisibility(View.VISIBLE); - }); - } - - public void hidPanel() { - getActivity().runOnUiThread(() -> { - flStationPanelContainer.setVisibility(View.GONE); - }); - } - - public void showPanel() { - getActivity().runOnUiThread(() -> { - flStationPanelContainer.setVisibility(View.VISIBLE); - }); - } - - public View getPanelView() { - return panelView; - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - } - - /** - * 获取站点面板view,在{@link #initViews()}时候添加到container中 - * - * @return 站点面板view - */ - public abstract int getStationPanelViewId(); - - /** - * 重新开启自动驾驶 - */ - public abstract void restartAutopilot(); - - - public void changeOperationViewVisible(int visible){ - getActivity().runOnUiThread(() -> { - if (tvOperationStatus == null) return; - tvOperationStatus.setVisibility(visible); - }); - } - - public void updateSpeedView(float newSpeed){ - int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值 - mSpeedView.setText(String.valueOf(speed)); - } - - @Override - public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) { - //todo ui 切换 - } -// private void hideHMI() { -// // 控制 脉速表 显示状态 -// CallerHmiManager.INSTANCE.setSpeedChartViewVisibility(View.GONE); -// // 控制 自动驾驶按钮 显示状态 -// CallerHmiManager.INSTANCE.setAutopilotStatusViewVisibility(View.GONE); -// // 控制 切换视角按钮 显示状态 -// CallerHmiManager.INSTANCE.setPerspectiveSwitchViewVisibility(View.GONE); -// // 控制 车辆检检测按钮 示状态 -// CallerHmiManager.INSTANCE.setCheckStatusViewVisibility(View.GONE); -// } - - protected void showNaviToStartStationFragment(boolean isShow){ - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - if (isShow){ -// if (ochNaviFragment == null){ - ochNaviFragment = OCHNaviFragment.newInstance(); -// } - if (ochNaviFragment.isAdded()){ - return; - } - transaction.add(R.id.module_mogo_och_navi_panel_container,ochNaviFragment).show(ochNaviFragment); - transaction.commitAllowingStateLoss(); - mCloseNaviIcon.setVisibility(View.VISIBLE); - flNaviPanelContainer.setVisibility(View.VISIBLE); - CallerSmpManager.hidePanel();//隐藏小地图 - }else { - if (ochNaviFragment != null){ - ochNaviFragment.onDestroy(); - transaction.remove(ochNaviFragment); - transaction.commitAllowingStateLoss(); - ochNaviFragment = null; - } - mCloseNaviIcon.setVisibility(View.GONE); - flNaviPanelContainer.setVisibility(View.GONE); - CallerSmpManager.showPanel();//显示小地图 - } - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BaseTaxiUIFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BaseTaxiUIFragment.java deleted file mode 100644 index 44339d1d5b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BaseTaxiUIFragment.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -/** - * @author: wangmingjun - * @date: 2021/9/9 - */ -public abstract class BaseTaxiUIFragment extends Fragment { - private View mRootView; - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (mRootView == null) { - mRootView = inflater.inflate(getLayoutId(), container, false); - } else { - ViewGroup viewGroup = (ViewGroup) mRootView.getParent(); - if (viewGroup != null) { - viewGroup.removeView(mRootView); - } - } - initViews(mRootView); - initViews(savedInstanceState); - return mRootView; - } - /** - * 布局资源 - * - * @return - */ - protected abstract int getLayoutId(); - - protected abstract void initViews(View view); - - protected void initViews(Bundle savedInstanceState) { - } - - @Override - public void onDestroy() { - super.onDestroy(); - mRootView = null; - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BorderShadowLayout.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BorderShadowLayout.java deleted file mode 100644 index ac28d03e84..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/BorderShadowLayout.java +++ /dev/null @@ -1,360 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; -import android.graphics.BlurMaskFilter; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.widget.LinearLayout; - -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.callback.Shadow; -import com.mogo.och.taxi.passenger.utils.DimenUtil; - -/** - * @author: wangmingjun - * @date: 2022/1/21 - * 边框阴影 - */ -public class BorderShadowLayout extends LinearLayout { - - - private static final String TAG = "ShadowLayout"; - - //默认阴影半径 - public static final float SHADOW_DEFAULT_RADIUS = DimenUtil.INSTANCE.dp2px(5); - - //阴影最大偏移量 - public static final float SHADOW_MAX_OFFSET = DimenUtil.INSTANCE.dp2px(20); - - //阴影最大模糊半径 - public static final float SHADOW_MAX_BLUR = DimenUtil.INSTANCE.dp2px(20); - - - - //默认模糊半径 - public static final float SHADOW_DEFAULT_BLUR_RADIUS = DimenUtil.INSTANCE.dp2px(5); - - - //阴影颜色 - private int shadowColor = Color.parseColor("#333333"); - - //阴影类型,0:默认为单边 1:单边 2:邻边 3:四边所有 - private int shadowType; - - //阴影半径 - private float shadowRadius = 0f; - - //模糊度半径 - private float blurRadius = SHADOW_DEFAULT_BLUR_RADIUS ; - - //水平位移 - private float xOffset = DimenUtil.INSTANCE.dp2px(10); - - - //竖直方向位移 - private float yOffset = DimenUtil.INSTANCE.dp2px(10); - - //背景色 - private int bgColor = Color.WHITE; - - //是否有点击效果 - private boolean hasEffect = false ; - - - int left =0 ,right =0,top = 0,bottom = 0 ; - - //代理方式 - private Shadow shadow = new BorderShadowLayout.ShadowConfig(this); - - private float mWidthMode; - private float mHeightMode; - private Paint mPaint = new Paint(); - private Paint locationPaint = new Paint(); - - public BorderShadowLayout(Context context) { - super(context,null); - } - - public BorderShadowLayout(Context context, AttributeSet attrs) { - this(context, attrs,0); - } - - public BorderShadowLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - this.setLayerType(LAYER_TYPE_SOFTWARE, null);//取消硬件加速 - TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ShadowLayout); - shadowColor = typedArray.getColor(R.styleable.ShadowLayout_shadowColor, Color.BLUE); - blurRadius = typedArray.getDimension(R.styleable.ShadowLayout_blurRadius, SHADOW_DEFAULT_BLUR_RADIUS); - shadowRadius = typedArray.getDimension(R.styleable.ShadowLayout_shadowRadius,0); - hasEffect = typedArray.getBoolean(R.styleable.ShadowLayout_hasEffect, false); - xOffset = typedArray.getDimension(R.styleable.ShadowLayout_xOffset,DimenUtil.INSTANCE.dp2px(10)); - yOffset = typedArray.getDimension(R.styleable.ShadowLayout_yOffset,DimenUtil.INSTANCE.dp2px(10)); - bgColor = typedArray.getColor(R.styleable.ShadowLayout_bgColor,Color.WHITE); - typedArray.recycle(); - - if (shadowRadius<0){ - shadowRadius = -shadowRadius; - } - if (blurRadius < 0) { - blurRadius = -blurRadius; - } - - blurRadius = Math.min(SHADOW_MAX_BLUR,blurRadius); - - if (Math.abs(xOffset)> SHADOW_MAX_OFFSET){ - xOffset = xOffset/Math.abs(xOffset) * SHADOW_MAX_OFFSET; - } - - if (Math.abs(yOffset) > SHADOW_MAX_OFFSET){ - yOffset = yOffset/Math.abs(yOffset) * SHADOW_MAX_OFFSET; - } - - init(); - } - - private void init(){ - setBackgroundColor(Color.parseColor("#00ffffff")); - if (xOffset>0){ - //水平偏移量为正数,右侧有阴影,阴影长度为blurRadius+|xOffset| - right = (int)(blurRadius + Math.abs(xOffset)); - }else if (xOffset==0){ - //水平偏移为0,水平间距为blurRadius - left = (int)blurRadius; - right = (int)blurRadius; - }else { - //水平偏移为负数,左侧有阴影,阴影长度为blurRadius+|xOffset| - left = (int)(blurRadius + Math.abs(xOffset)); - } - if (yOffset>0){ - //竖直偏移量为正数,底部有阴影,阴影长度为blurRadius+|yOffset| - bottom = (int)(blurRadius + Math.abs(yOffset)); - }else if (yOffset==0){ - //竖直偏移量为0,竖直间距为blurRadius - top = (int)blurRadius; - bottom = (int)blurRadius; - }else { - //竖直偏移量为负数,顶部有阴影,阴影长度为blurRadius+|yOffset| - top = (int)(blurRadius + Math.abs(yOffset)); - } - setPadding(left,top,right,bottom); - } - - - - - - /** - * 获取阴影设置 - * @return 返回阴影设置配置 - */ - public Shadow getShadowConfig(){ - return shadow; - } - - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed,l,t,r,b); - } - - - @Override - protected void dispatchDraw(Canvas canvas) { - super.dispatchDraw(canvas); - } - - - - @Override - protected void onDraw(Canvas canvas) { - drawBackground(canvas);//放在super前是后景,相反是前景,前景会覆盖子布局 - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - - - - //绘制背景色(在子view底部) - private void drawBackground(Canvas canvas){ - - mWidthMode = getMeasuredWidth(); - mHeightMode = getMeasuredHeight(); - float startX = 0; - float startY = 0; - float endX = 0; - float endY = 0; - - if (xOffset==0){ - startX = right; - endX = mWidthMode-blurRadius; - }else { - startX = right+blurRadius; - endX = mWidthMode-left-blurRadius; - } - - if (yOffset==0){ - startY = bottom; - endY = mHeightMode-blurRadius; - }else { - startY = bottom+blurRadius; - endY = mHeightMode-top-blurRadius; - } -// mPaint.setShadowLayer(blurRadius,0,0,shadowColor); - if (blurRadius>0){ - mPaint.setMaskFilter(new BlurMaskFilter(blurRadius,BlurMaskFilter.Blur.NORMAL)); - } - mPaint.setColor(shadowColor); - mPaint.setAntiAlias(true); - - RectF shadowRect = new RectF(startX,startY,endX,endY); - - RectF locationRectF = new RectF(left,top,mWidthMode-right,mHeightMode-bottom); - if (shadowRadius==0){ - //不是圆角 - canvas.drawRect(shadowRect,mPaint); - }else { - //圆角,角度为shadowRadius - canvas.drawRoundRect(shadowRect,shadowRadius,shadowRadius,mPaint); - } - - locationPaint.setColor(bgColor); - locationPaint.setAntiAlias(true); - - if (shadowRadius==0){ - //不是圆角 - canvas.drawRect(locationRectF,locationPaint); - }else { - //圆角,角度为shadowRadius - canvas.drawRoundRect(locationRectF,shadowRadius,shadowRadius,locationPaint); - } - } - - - - /** - * 阴影配置 - */ - class ShadowConfig implements Shadow{ - - //代理 - private BorderShadowLayout shadow; - - private ShadowConfig(BorderShadowLayout shadow) { - this.shadow = shadow; - } - - @Override - public Shadow setShadowRadius(float radius) { - return setShadowRadius(TypedValue.COMPLEX_UNIT_DIP,radius); - } - - @Override - public Shadow setShadowRadius(int unit, float radius) { - Context c = getContext(); - Resources r; - - if (c == null) { - r = Resources.getSystem(); - } else { - r = c.getResources(); - } - shadow.shadowRadius = Math.abs(TypedValue.applyDimension(unit,radius,r.getDisplayMetrics())); - return this; - } - - @Override - public Shadow setShadowColor(int color) { - shadow.shadowColor = color; - return this; - } - - @Override - public Shadow setShadowColorRes(int colorRes) { - shadow.shadowColor = shadow.getResources().getColor(colorRes); - return this; - } - - @Override - public Shadow setBlurRadius(float radius) { - return setBlurRadius(TypedValue.COMPLEX_UNIT_DIP,radius); - } - - @Override - public Shadow setBlurRadius(int unit, float radius) { - Context c = getContext(); - Resources r; - if (c == null) { - r = Resources.getSystem(); - } else { - r = c.getResources(); - } - shadow.blurRadius = Math.min(SHADOW_MAX_BLUR,Math.abs(TypedValue.applyDimension(unit,radius,r.getDisplayMetrics()))); - return this; - } - - @Override - public Shadow setXOffset(float offset) { - return setXOffset(TypedValue.COMPLEX_UNIT_DIP,offset); - } - - @Override - public Shadow setXOffset(int unit, float offset) { - Context c = getContext(); - Resources r; - if (c == null) { - r = Resources.getSystem(); - } else { - r = c.getResources(); - } - - float x = TypedValue.applyDimension(unit,offset,r.getDisplayMetrics()); - if (Math.abs(x)> SHADOW_MAX_OFFSET){ - x = x/Math.abs(x) * SHADOW_MAX_OFFSET; - } - shadow.xOffset = x; - return this; - } - - @Override - public Shadow setYOffset(float offset) { - return setYOffset(TypedValue.COMPLEX_UNIT_DIP,offset); - } - - @Override - public Shadow setYOffset(int unit, float offset) { - Context c = getContext(); - Resources r; - if (c == null) { - r = Resources.getSystem(); - } else { - r = c.getResources(); - } - - float y = TypedValue.applyDimension(unit,offset,r.getDisplayMetrics()); - if (Math.abs(y)> SHADOW_MAX_OFFSET){ - y = y/Math.abs(y) * SHADOW_MAX_OFFSET; - } - shadow.yOffset = y; - return this; - } - - @Override - public void commit() { - shadow.init(); - shadow.requestLayout(); - shadow.postInvalidate(); - } - } - - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/CustomSeekBar.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/CustomSeekBar.java new file mode 100644 index 0000000000..c551fd993d --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/CustomSeekBar.java @@ -0,0 +1,51 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatSeekBar; + +/** + * @author: wangmingjun + * @date: 2022/3/21 + */ +public class CustomSeekBar extends AppCompatSeekBar { + + private boolean touch = false; //是否支持拖动, 默认为不可以 + + public CustomSeekBar(@NonNull Context context) { + super(context); + } + + public CustomSeekBar(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public CustomSeekBar(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + } + + public void setTouch(boolean touch) { + this.touch = touch; + } + + /** + * onTouchEvent 处理 + */ + @Override + public boolean onTouchEvent(MotionEvent event) { + if (touch) { + return super.onTouchEvent(event); + } + return false; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/GradientTextView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/GradientTextView.java new file mode 100644 index 0000000000..163d8a9d88 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/GradientTextView.java @@ -0,0 +1,112 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.Shader; +import android.util.AttributeSet; +import androidx.appcompat.widget.AppCompatTextView; + +/** + * @author: wangmingjun + * @date: 2022/3/22 + */ +public class GradientTextView extends AppCompatTextView { + + private LinearGradient mLinearGradient; + private Paint mPaint; + private int mViewWidth = 0;//文字的宽度 + private int mViewHeight = 0;//文字的高度 + private Rect mTextBound = new Rect(); + private int[] mColorList;//存放颜色的数组 + private boolean isVertrial;//默认是横向 + + private float mRadius; + private float mdx; + private float mdy; + private int mColor; + + public GradientTextView(Context context) { + this(context, null); + } + + public GradientTextView(Context context, + AttributeSet attrs) { + super(context, attrs); + //设置默认的颜色 + mColorList = new int[]{0xFFFFFFFF, 0xFFFFFFF}; + } + + + @Override + protected void onDraw(Canvas canvas) { + + if (isVertrial) { + mViewHeight = getMeasuredHeight(); + } else { + mViewWidth = getMeasuredWidth(); + } + mPaint = getPaint(); + String mTipText = getText().toString(); + + setStyle(); + + mPaint.getTextBounds(mTipText, 0, mTipText.length(), mTextBound); + + mPaint.setShadowLayer(mRadius, mdx, mdy, mColor); + + //画出文字 + canvas.drawText(mTipText, getMeasuredWidth() / 2 - mTextBound.width() / 2, getMeasuredHeight() / 2 + mTextBound.height() / 2, mPaint); + } + + /** + * true表示纵向渐变,false变身横向渐变 + * + * @param vertrial + */ + public void setVertrial(boolean vertrial) { + isVertrial = vertrial; + } + + /** + * 设置渐变的颜色 + * + * @param mColorList + */ + public void setmColorList(int[] mColorList) { + if (mColorList != null && mColorList.length < 2) { + throw new RuntimeException("ClorList's length must be > 2"); + } else { + + this.mColorList = mColorList; + } + } + + public void setStyle() { + mPaint.setAntiAlias(true); + mPaint.setDither(true); + mPaint.setFilterBitmap(true); + //前面4个参数分别表示渐变的开始x轴,开始y轴,结束的x轴,结束的y轴,mcolorList表示渐变的颜色数组 + mLinearGradient = new LinearGradient(0, 0, mViewWidth, mViewHeight, mColorList, null, Shader.TileMode.CLAMP); + mPaint.setShader(mLinearGradient); + mPaint.setStrokeJoin(Paint.Join.ROUND); + mPaint.setStrokeCap(Paint.Cap.ROUND); + mPaint.setStyle(Paint.Style.FILL_AND_STROKE); + } + + /** + * 设置投影层 + * @param radius + * @param dx + * @param dy + * @param color + */ + public void setShadowLayerCustom(float radius, float dx, float dy, int color) { + this.mRadius = radius; + this.mdx = dx; + this.mdy = dy; + this.mColor = color; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java new file mode 100644 index 0000000000..533c98f4ed --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/ITaxiPassengerMapDirectionView.java @@ -0,0 +1,18 @@ +package com.mogo.och.taxi.passenger.ui; + +/** + * @author xiaoyuzhou + * @date 2021/6/24 11:33 上午 + */ +public interface ITaxiPassengerMapDirectionView { + + /** + * 绘制路径线 + */ + void drawablePolyline(); + + /** + * 清除路径线 + */ + void clearPolyline(); +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHNaviFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHNaviFragment.java deleted file mode 100644 index 887348c28d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHNaviFragment.java +++ /dev/null @@ -1,304 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.graphics.BitmapFactory; -import android.os.Bundle; -import android.util.Log; -import android.view.View; - -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.function.smp.utils.MapAssetStyleUtils; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiNaviChangedCallback; -import com.mogo.och.taxi.passenger.model.NaviToDestinationModel; - -/** - * @author: wangmingjun - * @date: 2021/11/30 - */ -public class OCHNaviFragment extends BaseTaxiUIFragment implements AMapNaviViewListener, View.OnClickListener { - - private AMapNaviView mAMapNaviView; -// private OverviewButtonView mOverviewButtonView; -// private NextTurnTipView mNextTurnTipView; - private AMap aMap; - private IOCHTaxiNaviChangedCallback mNaviToStartInfoCallback; // 前往乘客上车点 - public static OCHNaviFragment newInstance() { - - Bundle args = new Bundle(); - - OCHNaviFragment fragment = new OCHNaviFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - protected int getLayoutId() { - return R.layout.taxi_navi_view; - } - - @Override - protected void initViews(View view) { - view.bringToFront(); - initMapView(view); - } - - private void initMapView(View view) { -// mOverviewButtonView = view.findViewById(R.id.navi_overviewbuttonview); -// mAMapNaviView.setLazyOverviewButtonView(mOverviewButtonView); - // mOverviewButtonView.setOnClickListener(this); -// DriveWayView mDriveWayView = view.findViewById(R.id.navi_drivewayview); -// mAMapNaviView.setLazyDriveWayView(mDriveWayView); -// mNextTurnTipView = view.findViewById(R.id.navi_nextturntipview); -// mAMapNaviView.setLazyNextTurnTipView(mNextTurnTipView); - mAMapNaviView = view.findViewById(R.id.navi_view); - mAMapNaviView.setAMapNaviViewListener(this); - //车头向上模式 - mAMapNaviView.setNaviMode(AMapNaviView.CAR_UP_MODE); - aMap = mAMapNaviView.getMap(); - //关闭地图文字显示 - aMap.showMapText(false); - // 设置导航地图模式,aMap是地图控制器对象。 - aMap.setMapType(AMap.MAP_TYPE_NIGHT); - // 关闭显示实时路况图层,aMap是地图控制器对象。 - aMap.setTrafficEnabled(false); - setMapViewOptions(); - new Thread(() -> { - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - e.printStackTrace(); - } - if (null == getContext()){ - return; - } - aMap.setCustomMapStyle( - new CustomMapStyleOptions() - .setEnable(true) - .setStyleData(MapAssetStyleUtils.getAssetsStyle(getContext())) - .setStyleExtraData(MapAssetStyleUtils.getAssetsExtraStyle(getContext())) - ); - - //设置希望展示的地图缩放级别 - }).start(); - } - - private void setMapViewOptions() { - AMapNaviViewOptions options = new AMapNaviViewOptions(); - options.setTilt(0);//设置 2D 模式 - options.setLayoutVisible(false);//设置导航界面UI是否显示。 - options.setTrafficBarEnabled(false);//设置路况光柱条是否显示(只适用于驾车导航,需要联网)。 - options.setAutoLockCar(true);//设置6秒后是否自动锁车 - options.setAutoDisplayOverview(true);//设置是否自动全览模式,即在算路成功后自动进入全览模式 - options.setTrafficLine(false); - options.setModeCrossDisplayShow(true);//设置是否显示路口放大图(路口模型图) - options.setAutoChangeZoom(true);//自动缩放级别 - options.setCarBitmap(BitmapFactory.decodeResource(getContext().getResources(), R.drawable.taxi_navi_arrow_icon)); - options.setFourCornersBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.taxi_navi_direction_icon)); - options.setAutoChangeZoom(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);//设置菜单按钮是否在导航界面显示。 - - RouteOverlayOptions routeOverlayOptions = new RouteOverlayOptions(); - -// routeOverlayOptions.setArrowOnTrafficRoute(BitmapFactory.decodeResource(getResources(),R.drawable.custtexture_aolr)); - routeOverlayOptions.setNormalRoute(BitmapFactory.decodeResource(getResources(), R.drawable.taxi_navi_line_icon)); - options.setRouteOverlayOptions(routeOverlayOptions); - - mAMapNaviView.setViewOptions(options); - } - public void goToOverview(){ - if (mAMapNaviView.isRouteOverviewNow()){ - mAMapNaviView.recoverLockMode(); - }else { - mAMapNaviView.displayOverview(); - } - } - - @Override - public void onClick(View v) { -// if (v.getId() == R.id.navi_overviewbuttonview){ -// goToOverview(); -// } - } - @Override - protected void initViews(Bundle savedInstanceState) { - super.initViews(savedInstanceState); - mAMapNaviView.onCreate(savedInstanceState); - } - - @Override - public void onResume() { - super.onResume(); - mAMapNaviView.onResume(); - } - - @Override - public void onPause() { - super.onPause(); - mAMapNaviView.onPause(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - NaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(false); - mAMapNaviView.onDestroy(); - if (mNaviToStartInfoCallback != null){ - mNaviToStartInfoCallback = null; - } - } - - @Override - public void onNaviSetting() { - //底部导航设置点击回调 - } - - @Override - public void onNaviCancel() { - } - - @Override - public void onNaviMapMode(int naviMode) { - //导航态车头模式,0:车头朝上状态;1:正北朝上模式。 - } - - @Override - public void onNaviTurnClick() { - //转弯view的点击回调 - } - - @Override - public void onNextRoadClick() { - //下一个道路View点击回调 - } - - - @Override - public void onScanViewButtonClick() { - //全览按钮点击回调 - } - - - @Override - public void onLockMap(boolean isLock) { - //锁地图状态发生变化时回调 - } - - @Override - public void onNaviViewLoaded() { - Log.d("wlx", "导航页面加载成功"); - Log.d("wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑"); - } - - @Override - public void onMapTypeChanged(int i) { - - } - - @Override - public void onNaviViewShowMode(int i) { - - } - - @Override - public boolean onNaviBackClick() { - return false; - } - - /** - * 车道信息说明: - *

- * 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-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiBeingServerdOrdersFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiBeingServerdOrdersFragment.java deleted file mode 100644 index 7be2d4f97a..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiBeingServerdOrdersFragment.java +++ /dev/null @@ -1,498 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.app.Activity; -import android.graphics.Color; -import android.graphics.drawable.GradientDrawable; -import android.os.Build; -import android.os.Bundle; -import android.text.Html; -import android.util.Log; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.RequiresApi; -import androidx.constraintlayout.widget.ConstraintLayout; - -import com.amap.api.navi.model.NaviLatLng; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.commons.voice.AIAssist; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.eagle.core.utilcode.util.DateTimeUtils; -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.taxi.passenger.callback.IOCHTaxiNaviChangedCallback; -import com.mogo.och.taxi.passenger.constant.OrderStatusEnum; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.passenger.model.MogoOCHTaxiModelNew; -import com.mogo.och.taxi.passenger.model.NaviToDestinationModel; -import com.mogo.och.taxi.passenger.utils.OchTaxiUtils; - -import java.text.DecimalFormat; -import java.util.Calendar; - -/** - * @author congtaowang - * @since 2021/1/18 - * 正在进行中订单 - */ -public class OCHTaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment implements View.OnClickListener, IOCHTaxiNaviChangedCallback { - - public static final String TAG = "OCHTaxiBeingServerd"; - private static Activity mActivity; - private static OCHTaxiFragment mTaxiFragment; - private long mOrderId; - private double mOrderStartStationLat = 0; - private double mOrderStartStationLng = 0; - - public static OCHTaxiBeingServerdOrdersFragment newInstance(Activity activity, OCHTaxiFragment taxiFragment) { - mActivity = activity; - mTaxiFragment = taxiFragment; - Bundle args = new Bundle(); - - OCHTaxiBeingServerdOrdersFragment fragment = new OCHTaxiBeingServerdOrdersFragment(); - fragment.setArguments(args); - return fragment; - } - - private TextView mOrderStatus; - private ImageView mOrderCancel; - private TextView mOrderServerStatus; - private ConstraintLayout mBeingOrderLayout; - private ConstraintLayout mContentModule3; - private ConstraintLayout mContentModule2; - private TextView mDistanceAndTime3; - private TextView mDistanceAndTime2; - private TextView mStationTv2; - private TextView mOrderOtherContent3; - private TextView mArrivedStartTimeTv32; - private TextView mTitleTV2; - - private LinearLayout mContentModule31; - private TextView mStationTv31; - private LinearLayout mContentModule32; - private TextView mStationTv32; - private TextView mArrivedStationTitleTv32; - private TextView mGoAheadStationTitleTv31; - private TextView mCatchStationTitleTv31; - private ImageView mNaviIcon; - - private TextView mNoDatasTv; - - private ConstraintLayout mNoDataView; - - private volatile int saveOrderState = -1; - - @Override - protected int getLayoutId() { - return R.layout.taxi_being_order; - } - - @Override - protected void initViews(View view) { - mOrderStatus = view.findViewById(R.id.module_och_taxi_order_status); - mOrderCancel = view.findViewById(R.id.module_och_taxi_order_cancel_iv); - mOrderServerStatus = view.findViewById(R.id.module_och_taxi_order_server_status_tv); - mBeingOrderLayout = view.findViewById(R.id.module_och_taxi_being_order_content); - mContentModule2 = view.findViewById(R.id.module_och_taxi_order_status_station_2); - mContentModule3 = view.findViewById(R.id.module_och_taxi_order_status_station_3); - mDistanceAndTime2 = view.findViewById(R.id.module_och_taxi_order_distance_anchor_2); - mContentModule31 = view.findViewById(R.id.module_och_taxi_order_go_ahead_station_31); - mContentModule32 = view.findViewById(R.id.module_och_taxi_order_arrive_station_32); - mStationTv2 = view.findViewById(R.id.module_och_taxi_order_station_2); - mStationTv31 = view.findViewById(R.id.module_och_taxi_order_start_station_31); - mStationTv32 = view.findViewById(R.id.module_och_taxi_order_end_station_32); - mOrderOtherContent3 = view.findViewById(R.id.module_och_taxi_order_other_content_3); - mDistanceAndTime3 = view.findViewById(R.id.module_och_taxi_order_distance_anchor_3); - mArrivedStartTimeTv32 = view.findViewById(R.id.module_och_taxi_order_had_arrived_time_32); - mTitleTV2 = view.findViewById(R.id.module_och_taxi_order_station_title_2); - mCatchStationTitleTv31 = view.findViewById(R.id.go_ahead_station_catch_31); - mGoAheadStationTitleTv31 = view.findViewById(R.id.go_ahead_station_31); - mArrivedStationTitleTv32 = view.findViewById(R.id.arrive_station_32); - mNoDatasTv = view.findViewById(R.id.no_order_data_tv); - mNoDataView = view.findViewById(R.id.being_no_data_view); - mOrderCancel.setOnClickListener(this); - mOrderServerStatus.setOnClickListener(this); - - initNaviView(view); - - isHaveBeingOrder(false); - - if (DebugConfig.isDebug()) { - initOrderTestBar(view); - } - } - - @Override - public void onResume() { - super.onResume(); - MogoOCHTaxiModelNew.getInstance().startOrStopOrderLoop(); - } - - private void initNaviView(View view) { - mNaviIcon = view.findViewById(R.id.module_och_taxi_navi_iv); - mNaviIcon.setOnClickListener(this); - } - - private boolean isSpeakedEndingNotice = false; - - /** - * 初始化订单信息 - */ - @RequiresApi(api = Build.VERSION_CODES.P) - public void updateCurrentOrderStatusChanged(OrderQueryRespBean.Result order) { - if (order == null) return; - if (order.orderStatus == OrderStatusEnum.JourneyCompleted.getCode()) { - isHaveBeingOrder(false); - return; - } - mOrderId = order.orderId; - onOrderStatusChanged(order.orderStatus); - if (OrderStatusEnum.ArriveAtEndStation.getCode() == order.orderStatus) { - mTaxiFragment.queryCurOrderRouteInfo(); - mContentModule3.setVisibility(View.GONE); - mContentModule2.setVisibility(View.VISIBLE); - Logger.d(TAG, "已经达到终点"); - mOrderStatus.setText(R.string.module_och_taxi_arrive_at_end_station2); - mOrderServerStatus.setText(R.string.module_och_taxi_order_server_end); - mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); - GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#FF1D5EF3")); - mOrderServerStatus.setClickable(true); -// String strHtml3 = "送乘客至
" -// + "" + order.endSiteAddr + ""; - mTitleTV2.setText("送乘客至"); - mStationTv2.setText(order.endSiteAddr); -// String strHtml2 = "距离 " + "- -" + " 公里," -// + "用时 " + "- -" + " 分钟"; -// mDistanceAndTime.setText(Html.fromHtml(strHtml2)); - } else if (OrderStatusEnum.OnTheWayToEndStation.getCode() == order.orderStatus) { - Logger.d(TAG, "已经去往终点"); - mContentModule3.setVisibility(View.GONE); - mContentModule2.setVisibility(View.VISIBLE); - mOrderStatus.setText(R.string.module_och_taxi_on_the_way_2_end_station); - mOrderServerStatus.setText(R.string.module_och_taxi_order_server_end); - mOrderServerStatus.setTextColor(Color.parseColor("#4DFFFFFF")); - GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#4D1D5EF3")); - mOrderServerStatus.setClickable(false); -// String strHtml3 = "送乘客至
" -// + "" + order.endSiteAddr + ""; - mTitleTV2.setText("送乘客至"); -// mStationTv2.setText(order.endSiteAddr); - mStationTv2.setText(order.endSiteAddr); -// String strHtml4 = "距离 " + "- -" + " 公里," -// + "用时 " + "- -" + " 分钟"; -// mDistanceAndTime.setText(Html.fromHtml(strHtml4)); - } else if (OrderStatusEnum.ArriveAtStartStation.getCode() == order.orderStatus) { - Logger.d(TAG, "已经达到起点"); - mContentModule2.setVisibility(View.GONE); - mContentModule3.setVisibility(View.VISIBLE); - mArrivedStartTimeTv32.setVisibility(View.VISIBLE); - mContentModule32.setVisibility(View.VISIBLE); - mContentModule31.setVisibility(View.GONE); - mOrderOtherContent3.setVisibility(View.GONE); - mOrderStatus.setText(R.string.module_och_taxi_waiting); - mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start); - GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#FF1D5EF3")); - mOrderServerStatus.setTextColor(Color.parseColor("#FFFFFF")); - mOrderServerStatus.setClickable(true); - Calendar currentCale = DateTimeUtils.getCurrentDateTime(); - String currentHM = OchTaxiUtils.formatCalendarToString(currentCale, OchTaxiUtils.TAXI_HH_mm); - String currentDay = OchTaxiUtils.formatCalendarToString(currentCale, OchTaxiUtils.TAXI_yyyy_MM_dd); - String strHtml11 = "已于
" - + "" + currentHM + "" - + "" + " " + "到达乘客上车地点"; - mArrivedStartTimeTv32.setLineHeight(60); - mArrivedStartTimeTv32.setText(Html.fromHtml(strHtml11)); -// String strHtml12 = "送乘客至
" -// + "" + order.endSiteAddr + ""; - mArrivedStationTitleTv32.setText("送乘客至"); - mStationTv32.setText(order.endSiteAddr); - currentCale.add(Calendar.MINUTE, 10); - String strHtml13 = ""; - if (currentDay.equals(OchTaxiUtils.formatCalendarToString(currentCale, OchTaxiUtils.TAXI_yyyy_MM_dd))) { - strHtml13 = "免费等待至 " - + "" + OchTaxiUtils.formatCalendarToString(currentCale, OchTaxiUtils.TAXI_HH_mm) + ""; - - } else { - strHtml13 = "免费等待至" - + "" + OchTaxiUtils.formatCalendarToString(currentCale, OchTaxiUtils.TAXI_MM_dd_HH_mm) + ""; - } - mDistanceAndTime3.setText(Html.fromHtml(strHtml13)); - } else if (MogoOCHTaxiModelNew.getInstance().checkCurrentOCHOrder()) { - Logger.d(TAG, "前往乘客上车地点"); - mContentModule2.setVisibility(View.GONE); - mContentModule3.setVisibility(View.VISIBLE); - mContentModule31.setVisibility(View.VISIBLE); - mArrivedStartTimeTv32.setVisibility(View.GONE); - mContentModule32.setVisibility(View.GONE); - mOrderOtherContent3.setVisibility(View.VISIBLE); - mDistanceAndTime3.setVisibility(View.VISIBLE); - mOrderStatus.setText(R.string.module_och_taxi_new_order); - mOrderServerStatus.setText(R.string.module_och_taxi_order_server_start); - mOrderServerStatus.setTextColor(Color.parseColor("#4DFFFFFF")); - GradientDrawable background = (GradientDrawable) mOrderServerStatus.getBackground();//GradientDrawable是Drawable的子类 - background.setColor(Color.parseColor("#4D1D5EF3")); - mOrderServerStatus.setClickable(false); - mGoAheadStationTitleTv31.setText("前往"); - mCatchStationTitleTv31.setText("接乘客"); -// String strHtml0 = "前往
" -// + "" + order.startSiteAddr + "
" -// + "接乘客"; - mStationTv31.setText(order.startSiteAddr); - Calendar currentCale = DateTimeUtils.getCurrentDateTime(); - Calendar startCale = OchTaxiUtils.formatLongToCalendar(order.bookingTime); - String currentDay = OchTaxiUtils.formatCalendarToString(currentCale, OchTaxiUtils.TAXI_yyyy_MM_dd); - String startDay = OchTaxiUtils.formatCalendarToString(startCale, OchTaxiUtils.TAXI_yyyy_MM_dd); - String strHtml1 = ""; - if (currentDay.equals(startDay)) { - strHtml1 = "乘客将于
" - + "" + OchTaxiUtils.formatCalendarToString(startCale, OchTaxiUtils.TAXI_HH_mm) + "" - + " 用车"; - } else { - strHtml1 = "乘客将于
" - + "" + OchTaxiUtils.formatCalendarToString(startCale, OchTaxiUtils.TAXI_MM_dd_HH_mm) + "" - + " 用车"; - } - mOrderOtherContent3.setText(Html.fromHtml(strHtml1)); -// String strHtml2 = "距离 " + "- -" + " 公里," -// + "用时 " + "- -" + " 分钟"; -// mDistanceAndTime.setText(Html.fromHtml(strHtml2)); - mOrderStartStationLat = order.startSiteGcjPoint.get(1); - mOrderStartStationLng = order.startSiteGcjPoint.get(0); - } - } - - private void startNaviToStartStation(boolean isShow, double orderStartStationLat, double orderStartStationLng) { - NaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); - Log.d(TAG, "currentLatLng=" + mTaxiFragment.mCurLatitude + " " + mTaxiFragment.mCurLongitude); - NaviLatLng startNaviLatLng = new NaviLatLng(mTaxiFragment.mCurLatitude, mTaxiFragment.mCurLongitude); - NaviLatLng endNaviLatLng = new NaviLatLng(orderStartStationLat, orderStartStationLng); - NaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng); - NaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isShow); - NaviToDestinationModel.getInstance(getContext()).setOCHTaciNaviChangedCallback(this); - } - - private void showOrHideNavi(boolean isShow) { - if (!isShow) { - mNaviIcon.setVisibility(View.GONE); - NaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); - mTaxiFragment.showNaviToStartStationFragment(false); - } - } - - public void updateDistanceAndTime(long meters, long timeInSecond) { -// Log.d(TAG,"meters = "+meters); - if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { - DecimalFormat fnum = new DecimalFormat("##0.0"); - String dis = fnum.format((float) meters / 1000); - String strHtml2 = "里程 " + "" + dis + "" + " 公里" - + ",剩余 " + "" + (int) timeInSecond / 60 + "" + " 分钟"; - mDistanceAndTime3.setText(Html.fromHtml(strHtml2)); - mNaviIcon.setVisibility(View.VISIBLE); - } else if (mContentModule2 != null && mContentModule2.getVisibility() == View.VISIBLE) { - DecimalFormat fnum = new DecimalFormat("##0.0"); - String dis = fnum.format((float) meters / 1000); - String strHtml2 = "距离 " + "" + dis + "" + " 公里"; -// + ",用时 " + ""+(int)timeInSecond/60+"" + " 分钟"; - mDistanceAndTime2.setText(Html.fromHtml(strHtml2)); - } - } - - public void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo) { - Log.d(TAG, "meters = " + routeInfo.durationToEnd); - DecimalFormat fnum = new DecimalFormat("##0.0"); - String dis = fnum.format((float) routeInfo.distanceToEnd / 1000); - String strHtml2 = "距离 " + "" + dis + "" + " 公里" - + ",用时 " + "" + (int) routeInfo.durationToEnd / 60 + "" + " 分钟"; - if (mContentModule2 != null && mContentModule2.getVisibility() == View.VISIBLE) { - mDistanceAndTime2.setText(Html.fromHtml(strHtml2)); - } else if (mContentModule3 != null && mContentModule3.getVisibility() == View.VISIBLE) { - mDistanceAndTime3.setText(Html.fromHtml(strHtml2)); - } - } - - public synchronized void SpeakNoticeOnce() { - if (!isSpeakedEndingNotice) { - isSpeakedEndingNotice = true; - showNotice(mActivity.getString(R.string.module_och_taxi_order_complete_1)); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - NaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); - } - - private void startOrEndService(String step) { - if (step.equals("服务完成")) {//点击了完成服务,结束订单并更新订单信息 -// isHaveBeingOrder(false); - mTaxiFragment.completeOrderService(OrderStatusEnum.JourneyCompleted); - showNotice("车辆已停稳,请携带好随身物品,下车请注意安全"); - return; - } else if (step.equals("开始服务")) {//点击服务,开启自动驾驶 - mTaxiFragment.startAutoPilot(); - showNotice("自动驾驶已启动,请系好安全带"); - } - } - - public void onOrderStatusChanged(int status) { - Log.d(TAG, "status==" + status); - mActivity.runOnUiThread(() -> { - if (status == OrderStatusEnum.None.getCode() || status == OrderStatusEnum.Cancel.getCode() || status == OrderStatusEnum.JourneyCompleted.getCode()) { - isSpeakedEndingNotice = false; - isHaveBeingOrder(false); - } else { - isHaveBeingOrder(true); - } - if (status != saveOrderState) { - OrderStatusEnum ochStatus = OrderStatusEnum.valueOf(status); - switch (ochStatus) { - case OnTheWayToStartStation: - showNotice(mActivity.getString(R.string.module_och_taxi_new_order)); - startNaviToStartStation(false, mOrderStartStationLat, mOrderStartStationLng); - showOrHideNavi(true); - break; - case Cancel: - showNotice(mActivity.getString(R.string.module_och_taxi_order_cancel)); - showOrHideNavi(false); - break; - case ArriveAtStartStation: - showNotice(mActivity.getString(R.string.module_och_taxi_order_status_ph_text)); - showOrHideNavi(false); - break; - case OnTheWayToEndStation: -// showNotice("欢迎使用蘑菇智行"); - showOrHideNavi(false); - break; - case ArriveAtEndStation: - showNotice(mActivity.getString(R.string.module_och_taxi_order_complete_1)); - showOrHideNavi(false); - break; - case JourneyCompleted: - showNotice("感谢您使用蘑菇智行,再见~"); - showOrHideNavi(false); - break; - } - } - saveOrderState = status; - }); - } - - /** - * 是否有正在进行的订单,进行UI显示 - * - * @param being - */ - public void isHaveBeingOrder(boolean being) { - Log.d(TAG, "isHaveBeingOrder = " + being); - if (being) { - mNoDataView.setVisibility(View.GONE); - mBeingOrderLayout.setVisibility(View.VISIBLE); - mTaxiFragment.changeOperationViewVisible(View.GONE); - } else { - mNoDataView.setVisibility(View.VISIBLE); - mNoDatasTv.setText("暂无进行中订单"); - mBeingOrderLayout.setVisibility(View.GONE); - mTaxiFragment.changeOperationViewVisible(View.VISIBLE); - } - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.module_och_taxi_order_server_status_tv) { - switch (mOrderServerStatus.getText().toString().trim()) { - case "开始服务": - case "服务完成": - Log.d(TAG, mOrderServerStatus.getText().toString()); - startOrEndService(mOrderServerStatus.getText().toString().trim()); - break; - } - } else if (v.getId() == R.id.module_och_taxi_order_cancel_iv) { - new OCHTaxiOrderCancelDialog(mTaxiFragment, mActivity, mOrderId, saveOrderState).show(); - } else if (v.getId() == R.id.module_och_taxi_navi_iv) { - // TODO: 2021/11/30 打开去往乘客上车点的导航页面 - if (mTaxiFragment != null) { - showNaviToStartStationFragment(true); - } - } - } - - /** - * 显示/隐藏 前往乘客上车点的导航 - * - * @param isShow - */ - private void showNaviToStartStationFragment(boolean isShow) { - mTaxiFragment.showNaviToStartStationFragment(isShow); - startNaviToStartStation(isShow, mOrderStartStationLat, mOrderStartStationLng); - } - - - public void onCurrentOrderCancelDone() { - //提交取消订单后的回调 - TipToast.tip("订单取消成功"); - //更新界面 - isHaveBeingOrder(false); - showOrHideNavi(false); - } - - /** - * 订单流转debug START - */ - private void initOrderTestBar(View view) { - mOrderStatus.setOnLongClickListener(v -> { - mTaxiFragment.clickTestBar(); - return false; - }); - } - - public void showNotice(String notice) { - mActivity.runOnUiThread(() -> { - AIAssist.getInstance(getContext()).speakTTSVoice(notice); - }); - } - - @Override - public void onCurrentNaviDistAndTimeChanged(int meters, int timeInSecond) { - updateDistanceAndTime(meters, timeInSecond); - } - - @Override - public void reInitNaviAmap(boolean isPlay, boolean isRestart) { - Log.d(TAG, "isPlay = " + isPlay + ", isRestart=" + isRestart); - if (!isRestart) { - mTaxiFragment.showNaviToStartStationFragment(false); - return; - } - mTaxiFragment.showNaviToStartStationFragment(false); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - if (saveOrderState == OrderStatusEnum.OnTheWayToStartStation.getCode()) { - startNaviToStartStation(false, mOrderStartStationLat, mOrderStartStationLng); - } - } - }, 2000); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - if (saveOrderState == OrderStatusEnum.OnTheWayToStartStation.getCode()) { - if (mNaviIcon.getVisibility() == View.GONE) { - mNaviIcon.setVisibility(View.VISIBLE); - } - } - - } - }, 3000); - } - /** - * END - */ -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiFragment.java deleted file mode 100644 index 800af8c418..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiFragment.java +++ /dev/null @@ -1,339 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.os.Build; -import android.os.Bundle; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; -import androidx.fragment.app.FragmentTransaction; - -import com.mogo.commons.debug.DebugConfig; -import com.mogo.eagle.core.data.autopilot.AutopilotRouteInfo; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; -import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.module.common.MogoApisHandler; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.constant.OrderStatusEnum; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; -import com.mogo.och.taxi.passenger.model.MogoOCHTaxiModelNew; -import com.mogo.och.taxi.passenger.presenter.OCHTaxiPresenter; -import com.mogo.och.taxi.passenger.utils.PinYinUtil; - -import java.lang.ref.WeakReference; -import java.util.List; - -/** - * @author congtaowang - * @since 2021/1/18 - * - * 网约车-出租车UI - */ -public class OCHTaxiFragment extends BaseOchTaxiTabFragment implements OCHTaxiView{ - - public static final String TAG = "OCHTaxiFragment"; - - public static OCHTaxiFragment newInstance() { - - Bundle args = new Bundle(); - - OCHTaxiFragment fragment = new OCHTaxiFragment(); - fragment.setArguments( args ); - return fragment; - } - private OCHTaxiGrabOrderFragment grabOrderFragment; - private OCHTaxiServerOrdersFragment serverOrdersFragment; - private WeakReference personalDialogFragment = null; - protected double mCurLatitude = 0.0; - protected double mCurLongitude = 0.0; - - @Override - public int getStationPanelViewId() { - return R.layout.taxi_panel; - } - - @Override - public void restartAutopilot() { - // 在自动驾驶中,才会有重新开启自动驾驶的操作 - if (mPresenter.getCurOrderStatus() == OrderStatusEnum.OnTheWayToEndStation) { - Logger.d( TAG, "restartAutopilot" ); - mPresenter.startAutoPilot(); - startOrStopLoadingAnim(true); - } - } - - @Override - public String getTagName() { - return "OCHTaxiFragment"; - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - protected void initViews() { - super.initViews(); - mPersonalBtn.setVisibility(View.GONE); - initFragment(); - hidPanel(); - if ( MogoApisHandler.getInstance() - .getApis() - .getStatusManagerApi() - .isVrMode() ) { - switchVRFlatMode(true); - } else { - switchVRFlatMode(false); - } - - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - tvOperationStatus.setVisibility(View.VISIBLE); - } else { - tvOperationStatus.setVisibility(View.GONE); - } - - if (DebugConfig.isDebug()) { - initOrderTestBar(); - } - - } - - private void initFragment() { - serverOrdersFragment = OCHTaxiServerOrdersFragment.newInstance(); - grabOrderFragment = OCHTaxiGrabOrderFragment.newInstance(); - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - //默认显示OCHTaxiServerOrdersFragment - transaction.add(R.id.fragment_container,serverOrdersFragment).show(serverOrdersFragment); - transaction.add(R.id.fragment_container,grabOrderFragment).hide(grabOrderFragment); - transaction.commitAllowingStateLoss(); - } - - private void showGrabFragmentAndUpdate() { - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - if (grabOrderFragment == null){ - grabOrderFragment = OCHTaxiGrabOrderFragment.newInstance(); - transaction.add(R.id.fragment_container,grabOrderFragment).show(grabOrderFragment).commitAllowingStateLoss(); - }else { - transaction.show(grabOrderFragment).hide(serverOrdersFragment).commitAllowingStateLoss(); - } - } - - public void showServerFragmentAndUpdate() { - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - if (serverOrdersFragment == null){ - serverOrdersFragment = OCHTaxiServerOrdersFragment.newInstance(); - transaction.add(R.id.fragment_container,serverOrdersFragment).show(serverOrdersFragment); - }else { - transaction.show(serverOrdersFragment).hide(grabOrderFragment).commitAllowingStateLoss(); - } - } - - @NonNull - @Override - protected OCHTaxiPresenter createPresenter() { - return new OCHTaxiPresenter( this ); - } - - @Override - protected void onChangeOperationStatus() { - super.onChangeOperationStatus(); - mPresenter.updateCarStatus(); - } - - public void switchVRFlatMode(boolean isVRMode) { - if (mRootView != null) { - mRootView.setVisibility(isVRMode ? View.VISIBLE : View.GONE); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - } - - public void updateOperationStatus(boolean inOperation) { - Logger.e(TAG,"onOperationChanged:"+ inOperation); - isOperationStatus = inOperation; - if ( inOperation ) { - tvOperationStatus.setText( "收车" ); - mPersonalBtn.setVisibility(View.VISIBLE); - tvOperationStatus.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.taxi_back_btn),null,null,null); - showPanel(); - } else { -// AIAssist.getInstance(getContext()).speakTTSVoice("已收车"); - tvOperationStatus.setText("出车"); - tvOperationStatus.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.taxi_out_btn),null,null,null); - mPersonalBtn.setVisibility(View.GONE); - hidPanel(); - } - } - - @Override - protected void onGoToTaxiOrders() { - personalDialogFragment = new WeakReference<>(new OCHTaxiPersonalDialogFragment(this)); - personalDialogFragment.get().show(getActivity().getSupportFragmentManager(),"service_data"); - } - - public void routeResult(List routeList) { - if (routeList == null ) return; -// double distance = calculateTravelDistance(mogoLocation,routeList); -// if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { -// MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().decreaseTravelDistance( distance ); -// updateOrderBaseStatusInfo(); -// } -// Logger.d("lianglihui","routeResult 剩余导航距离:"+distance); -// if (routeList != null && routeList.size() >0){ -// Logger.d("lianglihui","routeResult:"+routeList.size()); -// //adas回调导航路径 绘制引导线 -// if ( ochTaxiOverlayManager == null){ -// ochTaxiOverlayManager = new OCHTaxiOverlayManager(this.getContext()); -// } -// ochTaxiOverlayManager.draw(mogoLocation,routeList); -// } - } - @Override - public void onMapLoaded() { - } - - public void updateAutopilotStatus(int status) { - onAutopilotStatusChanged(status); - } - /** - * 收到自动驾驶通知的成功状态之后,设置本地状态及服务端状态 - */ - private void resetOCHTaxiOrderAutopilotStatus() { - mPresenter.updateCurOrderStatus(OrderStatusEnum.OnTheWayToEndStation); - } - @RequiresApi(api = Build.VERSION_CODES.P) - public void updateCurrentOrderStatusChanged(OrderQueryRespBean.Result order){ - if (serverOrdersFragment != null){ - serverOrdersFragment.updateCurrentOrderStatusChanged(order); - } - } - public void startAutoPilot(){ - mPresenter.startAutoPilot(); - startOrStopLoadingAnim(true); - } - public void completeOrderService(OrderStatusEnum status){ - mPresenter.updateCurOrderStatus(status); - } - public void cancelCurOrder(int reasonType, String reaso){ - mPresenter.cancelCurOrder(reasonType,reaso); - } - - public void cancelOrderById(long orderId, int reasonType, String reason){ - mPresenter.cancelOrderById(orderId,reasonType,reason); - } - public void onCurrentOrderCancelDone(){ - if (null == serverOrdersFragment) return; - serverOrdersFragment.onCurrentOrderCancelDone(); - } - public void onOrderCancelDone(long orderId){ - if (null == serverOrdersFragment) return; - serverOrdersFragment.onOrderCancelDone(orderId); - } - public void onNewBookingOrderGot(OrderQueryRespBean.Result order){ - if (null == order) return; - showGrabFragmentAndUpdate(); - grabOrderFragment.updateGrabOrder(order); - } - public void grabOrder(){ - mPresenter.grabOrder(); - } - public void cancelNewBookingOrder(){ - mPresenter.cancelNewBookingOrder(); - showServerFragmentAndUpdate(); - } - public void onGrabOrderExecuteDone(){ - if (null == grabOrderFragment) return; - grabOrderFragment.onGrabOrderExecuteDone(); - } - public void onGrabOrderSuccess(OrderQueryRespBean.Result order){ - if (null == grabOrderFragment) return; - if (null == order){ - showServerFragmentAndUpdate(); - return; - } - showGrabFragmentAndUpdate(); - grabOrderFragment.onGrabOrderSuccess(); - } - public void onGrabOrderFailed(OrderQueryRespBean.Result order){ - if (order == null){ - showServerFragmentAndUpdate(); - return; - } - if (null == grabOrderFragment) return; - showGrabFragmentAndUpdate(); - grabOrderFragment.onGrabOrderFailed(); - } - public void onOrdersWaitServiceChanged(List waitServiceList){ - if (null == waitServiceList) return; - if (null == serverOrdersFragment) return; - serverOrdersFragment.onOrdersWaitServiceChanged(waitServiceList); - } - public void queryOrdersList(int page, int size){ - mPresenter.queryOrdersList(page,size); - } - public void onOrdersListPageRefresh(List ordersList){ - if (null == personalDialogFragment) personalDialogFragment = new WeakReference<>(new OCHTaxiPersonalDialogFragment(this)); - personalDialogFragment.get().onOrdersListPageRefresh(ordersList); - } - public void queryDriverServiceData(){ - mPresenter.queryDriverServiceData(); - } - public void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum){ - if (null == personalDialogFragment) return; - personalDialogFragment.get().onServiceDataUpdate(dailyTimeDuration,dailyOrderNum); - } - public void queryCurOrderRouteInfo(){ - mPresenter.queryCurOrderRouteInfo(); - } - public void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo){ - if (null == serverOrdersFragment) return; - serverOrdersFragment.onCurrentOrderRouteInfoGot(routeInfo); - } - public void onCurrentOrderDistToStartChanged(long meters, long timeInSecond){ -// if (null == serverOrdersFragment) return; -// serverOrdersFragment.onCurrentOrderDistToStartChanged(meters,timeInSecond); - } - public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond){ - if (null == serverOrdersFragment) return; - serverOrdersFragment.onCurrentOrderDistToEndChanged(meters,timeInSecond); - } - public void updateLocation(double latitude,double longitude){ - this.mCurLatitude = latitude; - this.mCurLongitude = longitude; - } - /** - * 订单流转debug START - */ - public void initOrderTestBar() { - findViewById(R.id.test_bar_to_start).setOnClickListener(v -> { - MogoOCHTaxiModelNew.getInstance().setArriveAtStartStation(); - }); - findViewById(R.id.test_bar_to_end).setOnClickListener(v -> { - MogoOCHTaxiModelNew.getInstance().setArriveAtEndStation(); - }); - findViewById(R.id.test_bar_on_the_way_to_end).setOnClickListener(v ->{ - showNotice("自动驾驶已启动,请系好安全带"); - MogoOCHTaxiModelNew.getInstance().setOnTheWayToEndStation(); - }); - } - public void clickTestBar(){ - View testBar = findViewById(R.id.module_och_taxi_order_status_change_test_bar); - if (testBar.getVisibility() == View.VISIBLE) { - testBar.setVisibility(View.GONE); - } else { - TextView testCurOrderId = findViewById(R.id.test_bar_current_order_id); - TextView testCurStartName = findViewById(R.id.test_bar_current_start_name); - TextView testCurEndName = findViewById(R.id.test_bar_current_end_name); - OrderQueryRespBean.Result order = MogoOCHTaxiModelNew.getInstance().getCurrentOCHOrder(); - - testCurOrderId.setText(order == null ? "" : String.valueOf(order.orderId)); - testCurStartName.setText(order == null ? "" : PinYinUtil.getPinYinHeadChar(order.startSiteAddr)); - testCurEndName.setText(order == null ? "" : PinYinUtil.getPinYinHeadChar(order.endSiteAddr)); - - testBar.setVisibility(View.VISIBLE); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiGrabOrderFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiGrabOrderFragment.java deleted file mode 100644 index edcfff4a28..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiGrabOrderFragment.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.graphics.Color; -import android.graphics.drawable.AnimationDrawable; -import android.os.Bundle; -import android.os.CountDownTimer; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.constraintlayout.widget.ConstraintLayout; - -import com.mogo.eagle.core.utilcode.util.UiThreadHandler; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.utils.OchTaxiUtils; - -import java.util.Calendar; - -/** - * @author: wangmingjun - * @date: 2021/9/9 - */ -public class OCHTaxiGrabOrderFragment extends BaseTaxiUIFragment implements View.OnClickListener { - - private TextView mOrderReserverTime; - private TextView mOrderGrabBt; - private TextView mOrderStartStation; - private TextView mOrderEndStation; - private TextView mOrderStartTitle; - private TextView mOrderEndTitle; - private ImageView mOrderCancelIv; - private ImageView mGrabResultAnimView; - private AnimationDrawable mGrabSuccessAnim; - private AnimationDrawable mGrabFailureAnim; - private CountDownTimer countDownTimer = null; - - public static OCHTaxiGrabOrderFragment newInstance() { - - Bundle args = new Bundle(); - - OCHTaxiGrabOrderFragment fragment = new OCHTaxiGrabOrderFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - protected int getLayoutId() { - return R.layout.taxi_order_grab_view; - } - - @Override - protected void initViews(View view) { - mOrderReserverTime = view.findViewById(R.id.grab_order_reserver_time); - mOrderCancelIv = view.findViewById(R.id.grab_order_cancel_iv); - mOrderGrabBt = view.findViewById(R.id.grab_order_tv); - mOrderStartStation = view.findViewById(R.id.grab_order_start_station); - mOrderEndStation = view.findViewById(R.id.grab_order_end_station); - mOrderEndTitle = view.findViewById(R.id.grab_order_end_station_title); - mOrderStartTitle = view.findViewById(R.id.grab_order_start_station_title); - mGrabResultAnimView = view.findViewById(R.id.grab_result_anim); - mGrabResultAnimView.setVisibility(View.GONE); - mOrderEndTitle.setVisibility(View.VISIBLE); - mOrderStartTitle.setVisibility(View.VISIBLE); - - mOrderCancelIv.setOnClickListener(this); - mOrderGrabBt.setOnClickListener(this); - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.grab_order_cancel_iv){//关闭抢单,如果是在抢单中,则只关闭界面,还继续抢单 - if (mOrderGrabBt.getText().toString().equals("抢单中...")){ - getOchTaxiFragment().showServerFragmentAndUpdate(); - return; - } - if (null != countDownTimer){ - countDownTimer.cancel(); - } - getOchTaxiFragment().cancelNewBookingOrder(); - }else if (v.getId() == R.id.grab_order_tv){ - if (!mOrderGrabBt.getText().toString().equals("抢单中...")){ - getOchTaxiFragment().grabOrder(); - return; - } - } - } - private OCHTaxiFragment getOchTaxiFragment(){ - return (OCHTaxiFragment)getParentFragment(); - } - public void updateGrabOrder(OrderQueryRespBean.Result order){ - mGrabResultAnimView.setVisibility(View.GONE); - Calendar calendar = OchTaxiUtils.formatLongToCalendar(order.bookingTime); - if (OchTaxiUtils.compareDateIsCurrentDay(calendar)){ - mOrderReserverTime.setText("用车时间:今天 "+OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_HH_mm)); - getOchTaxiFragment().showNotice("预约单,今天"+OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_HH_mm)+"从" - +order.startSiteAddr+"到"+order.endSiteAddr); - }else { - mOrderReserverTime.setText("用车时间:"+OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_MM_dd_HH_mm)); - getOchTaxiFragment().showNotice("预约单,"+OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_MM_dd)+"从" - +order.startSiteAddr+"到"+order.endSiteAddr); - } - mOrderStartStation.setText(order.startSiteAddr); - mOrderEndStation.setText(order.endSiteAddr); - mOrderGrabBt.setClickable(true); - mOrderGrabBt.setTextColor(Color.parseColor("#FFFFFF")); - ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams)mOrderGrabBt.getLayoutParams(); - lp.bottomMargin = 3; - mOrderGrabBt.setLayoutParams(lp); - mOrderGrabBt.setBackground(getResources().getDrawable(R.drawable.taxi_driver_grab_order_bt)); - mOrderGrabBt.setText("抢单(10S)"); //开始倒计时任务 - countDownTimer = new CountDownTimer(11000,1000){ - - @Override - public void onTick(long millisUntilFinished) { - mOrderGrabBt.setText("抢单"+"("+millisUntilFinished/1000+")"); - } - - @Override - public void onFinish() {//结束倒计时,不抢单 - cancel(); - getOchTaxiFragment().cancelNewBookingOrder(); - } - }.start(); - } - public void onGrabOrderExecuteDone(){//进入抢单状态,btn样式改变,并不可点击 - if (null != countDownTimer){ - countDownTimer.cancel(); - } - mOrderGrabBt.setTextSize(21); - mOrderGrabBt.setText("抢单中..."); - ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams)mOrderGrabBt.getLayoutParams(); - lp.bottomMargin = 40; - mOrderGrabBt.setLayoutParams(lp); - mOrderGrabBt.setTextColor(Color.parseColor("#181D6D")); - mOrderGrabBt.setBackground(getResources().getDrawable(R.drawable.taxi_grabing_order_btn_bg)); - mOrderGrabBt.setClickable(false); - } -// 接单成功,语音播报“抢单成功,请合理安排后续行程接送乘客” -// 接单未成功,语音播报“接单失败,请继续接单” - public void onGrabOrderSuccess(){//抢单成功,更新btn 和 动画 语音 - getOchTaxiFragment().showNotice("抢单成功,请合理安排后续行程接送乘客"); - mGrabResultAnimView.setVisibility(View.VISIBLE); - mGrabResultAnimView.setImageDrawable(getResources().getDrawable(R.drawable.grab_success_anmi_flow)); - mOrderGrabBt.setClickable(false); - mOrderGrabBt.setText("抢单成功!"); - mGrabSuccessAnim = (AnimationDrawable)mGrabResultAnimView.getDrawable(); - if (mGrabSuccessAnim.isOneShot()){ - return; - } - mGrabSuccessAnim.start(); - //开启动画结束的监听 - long delayMillis = mGrabSuccessAnim.getDuration(0) * mGrabSuccessAnim.getNumberOfFrames(); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - if (null != mGrabSuccessAnim && mGrabSuccessAnim.isRunning()){ - mGrabSuccessAnim.stop(); - } - // if (mGrabSuccessAnim.getFrame(mGrabSuccessAnim.getNumberOfFrames()-1) == mGrabSuccessAnim.getCurrent()){ - getOchTaxiFragment().showServerFragmentAndUpdate(); -// } - } - },delayMillis); - //开启动画结束的监听 - } - public void onGrabOrderFailed(){//抢单失败,更新btn 和 动画 语音 - getOchTaxiFragment().showNotice("接单失败,请继续接单"); - mGrabResultAnimView.setVisibility(View.VISIBLE); - mGrabResultAnimView.setImageDrawable(getResources().getDrawable(R.drawable.grab_failure_anmi_flow)); - mOrderGrabBt.setClickable(false); - mOrderGrabBt.setText("抢单失败!"); - mGrabFailureAnim = (AnimationDrawable)mGrabResultAnimView.getDrawable(); - mGrabFailureAnim.start(); - //开启动画结束的监听 - long delayMillis = mGrabFailureAnim.getDuration(0) * mGrabFailureAnim.getNumberOfFrames(); - UiThreadHandler.postDelayed(new Runnable() { - @Override - public void run() { - if (null != mGrabFailureAnim && mGrabFailureAnim.isRunning()){ - mGrabFailureAnim.stop(); - } - getOchTaxiFragment().showServerFragmentAndUpdate(); - } - },delayMillis); - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (countDownTimer != null) countDownTimer.cancel(); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiOperationDatasFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiOperationDatasFragment.java deleted file mode 100644 index 74f7d32216..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiOperationDatasFragment.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.content.Context; -import android.os.Bundle; -import android.text.Html; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.utils.OchTaxiUtils; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author: wangmingjun - * @date: 2021/9/10 - */ -public class OCHTaxiOperationDatasFragment extends BaseTaxiUIFragment { - - private RecyclerView mRecyclerView; - private static Context mContext; - private List mDurationData = new ArrayList<>(); - private List mOrderNumData = new ArrayList<>(); - private List mData = new ArrayList<>(); - private static int mType = 0;//0: 运营时长 1:运营单数 - private OperationDataAdapter mAdapter; - - public static OCHTaxiOperationDatasFragment newInstance(Context context, int type) { - mContext = context; - mType = type; - Bundle args = new Bundle(); - OCHTaxiOperationDatasFragment fragment = new OCHTaxiOperationDatasFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - protected int getLayoutId() { - return R.layout.taxi_operation_data_view; - } - - @Override - protected void initViews(View view) { - mRecyclerView = view.findViewById(R.id.operation_data_recycler_view); - mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext)); - mAdapter = new OperationDataAdapter(mContext, mData); - mRecyclerView.setAdapter(mAdapter); - } - - public void setmType(int type) { - mType = type; - mData.clear(); - if (mType == 0){ - mData.addAll(mDurationData); - }else if (mType == 1){ - mData.addAll(mOrderNumData); - } - if (mAdapter != null) mAdapter.notifyDataSetChanged(); - } - - public void updateData(long dailyTimeDuration, long dailyOrderNum) { - mDurationData.clear(); - mOrderNumData.clear(); - mData.clear(); - mDurationData.add(dailyTimeDuration); - mOrderNumData.add(dailyOrderNum); - mData.addAll(mDurationData); - mAdapter.notifyDataSetChanged(); - } - - class OperationDataAdapter extends RecyclerView.Adapter { - private List datas; - private Context context; - - public OperationDataAdapter(Context context, List datas) { - this.datas = datas; - this.context = context; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(context).inflate(R.layout.taxi_operation_data_item_view, parent, false); - OperationDataViewHolder viewHolder = new OperationDataViewHolder(view); - return viewHolder; - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - if (holder instanceof OperationDataViewHolder) { - OperationDataViewHolder viewHolder = (OperationDataViewHolder) holder; - if (0 == mType){ - String hourData = TextUtils.isEmpty(OchTaxiUtils.secondsToHourStr(datas.get(position))) ? "0": OchTaxiUtils.secondsToHourStr(datas.get(position)); - String minuteData = OchTaxiUtils.secondsToMinuteStr(datas.get(position)); - String data = "" + hourData + "" + "" + minuteData + ""; - viewHolder.operationDataTv.setText(Html.fromHtml(data)); - viewHolder.operationDataTitle.setText("今日在线时长"); - }else if (1 == mType){ - String data = "" + String.valueOf(datas.get(position)) + "" + " 单" + ""; - viewHolder.operationDataTv.setText(Html.fromHtml(data)); - viewHolder.operationDataTitle.setText("今日订单完成数"); - } - } - } - - @Override - public int getItemCount() { - return datas.size(); - } - } - - class OperationDataViewHolder extends RecyclerView.ViewHolder { - private TextView operationDataTv; - private TextView operationDataTitle; - - public OperationDataViewHolder(@NonNull View itemView) { - super(itemView); - operationDataTv = itemView.findViewById(R.id.operation_data_tv); - operationDataTitle = itemView.findViewById(R.id.operation_data_title_tv); - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiOrderCancelDialog.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiOrderCancelDialog.java deleted file mode 100644 index 9e046ae715..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiOrderCancelDialog.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.app.AlertDialog; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.widget.AdapterView; -import android.widget.BaseAdapter; -import android.widget.GridView; -import android.widget.TextView; - -import androidx.annotation.RequiresApi; - -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.och.taxi.passenger.constant.OrderStatusEnum; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.constant.OrderCancelReasons; - -import java.lang.ref.WeakReference; -/** - * @author: wangmingjun - * @date: 2021/8/18 - */ -public class OCHTaxiOrderCancelDialog extends AlertDialog implements View.OnClickListener,AdapterView.OnItemClickListener { - - private static final String TAG = "OCHTaxiOrderCancelDial"; - protected WeakReference contextWeakReference; - private GridView mContentView; - private TextView mCancelCommitTv; - private TextView mDialogCancelTv; - private String mCurrentReason = ""; - private ContentAdapter mContentAdapter; - private int mOrderStatus;//1:预约单,其他为即时单的状态, 主要是控制乘客上车 乘客下车这几个选项的显示 - private String[] mContentArrays; - private WeakReference mOchTaxiFragmentWeak; - private long mOrderId; - - protected OCHTaxiOrderCancelDialog(OCHTaxiFragment fragment, Context context, long orderId, int orderStatus) { - super(context,R.style.OrderCancelDialog); - mOrderId = orderId; - mOchTaxiFragmentWeak = new WeakReference<>(fragment); - this.mOrderStatus = orderStatus; - contextWeakReference = new WeakReference<>(context); - initReasonArray(); - } - - private void initReasonArray() { - if (1 == mOrderStatus) { - mContentArrays = new String[]{OrderCancelReasons.BookPassengerCancel.getMsg(), OrderCancelReasons.CarBroken.getMsg(), - OrderCancelReasons.BookJourneyConflict.getMsg(), OrderCancelReasons.BatteryLow.getMsg(), - OrderCancelReasons.BookOther.getMsg()}; - return; - } - OrderStatusEnum ochStatus = OrderStatusEnum.valueOf(mOrderStatus); - switch (ochStatus) { - case OnTheWayToStartStation: - mContentArrays = new String[]{OrderCancelReasons.CarBroken.getMsg(), OrderCancelReasons.DeviceBroken.getMsg(), - OrderCancelReasons.BatteryLow.getMsg(), OrderCancelReasons.DriverIsIll.getMsg()}; - break; - case ArriveAtStartStation: - mContentArrays = new String[]{OrderCancelReasons.CarBroken.getMsg(), OrderCancelReasons.DeviceBroken.getMsg(), - OrderCancelReasons.BatteryLow.getMsg(), OrderCancelReasons.DriverIsIll.getMsg(), - OrderCancelReasons.PassengerNotArrive.getMsg()}; - break; - case OnTheWayToEndStation: - case ArriveAtEndStation: - mContentArrays = new String[]{OrderCancelReasons.CarBroken.getMsg(), OrderCancelReasons.DeviceBroken.getMsg(), - OrderCancelReasons.BatteryLow.getMsg(), OrderCancelReasons.DriverIsIll.getMsg(), OrderCancelReasons.PassengerStopOver.getMsg()}; - break; - default: - mContentArrays = new String[]{OrderCancelReasons.CarBroken.getMsg(), OrderCancelReasons.DeviceBroken.getMsg(), - OrderCancelReasons.BatteryLow.getMsg(), OrderCancelReasons.DriverIsIll.getMsg(), - OrderCancelReasons.PassengerNotArrive.getMsg(), OrderCancelReasons.PassengerStopOver.getMsg()}; - break; - - } - } - - protected OCHTaxiOrderCancelDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { - super(context, cancelable, cancelListener); - } - - protected OCHTaxiOrderCancelDialog(Context context, int themeResId) { - super(context, themeResId); - } - - @RequiresApi(api = Build.VERSION_CODES.M) - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - getWindow().setBackgroundDrawableResource(R.drawable.taxi_order_cancel_dialog_bg); - setContentView(R.layout.taxi_order_cancel_view); - initView(); - setCancelable(false); - setCanceledOnTouchOutside(false); - - Window window = getWindow(); - //dialog padding 去掉 - window.getDecorView().setPadding(0,0,0,0); - window.setDimAmount(0.5f); - window.getDecorView().setBackgroundColor(Color.parseColor("#00FFFFFF"));//设置背景, 不然显示不全 - } - - @RequiresApi(api = Build.VERSION_CODES.M) - private void initView() { - mContentView = findViewById(R.id.module_och_taxi_order_cancel_content_gv); - mCancelCommitTv = findViewById(R.id.order_cancel_commit_tv); - mDialogCancelTv = findViewById(R.id.order_dialog_cancel_tv); - mContentAdapter = new ContentAdapter(contextWeakReference.get(), mContentArrays); - mContentView.setAdapter(mContentAdapter); - mContentView.setSelector(new ColorDrawable(Color.TRANSPARENT)); - mContentView.setOnItemClickListener(this); - mCancelCommitTv.setOnClickListener(this); - mDialogCancelTv.setOnClickListener(this); - mContentView.setOnItemClickListener(this); - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.order_cancel_commit_tv) {//bt commit - if (!TextUtils.isEmpty(mCurrentReason) && OrderCancelReasons.getType(mCurrentReason) != 0) { - if (1 == mOrderStatus){//预约单 - mOchTaxiFragmentWeak.get().cancelOrderById(mOrderId,OrderCancelReasons.getType(mCurrentReason),mCurrentReason); - }else {//即时单 - mOchTaxiFragmentWeak.get().cancelCurOrder(OrderCancelReasons.getType(mCurrentReason),mCurrentReason); - } - dismiss(); - }else { - TipToast.longTip("取消原因不能为空"); - } - }else if (v.getId() == R.id.order_dialog_cancel_tv){//close icon - mCurrentReason = ""; - dismiss(); - } - } - - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Log.d(TAG,"mCurrentReason ="+ mContentArrays[position]); - mCurrentReason = mContentArrays[position]; -// GradientDrawable background = (GradientDrawable) mCancelBt.getBackground();//GradientDrawable是Drawable的子类 -// background.setColor(Color.parseColor("#2B6EFF")); -// mCancelBt.setTextColor(Color.parseColor("#FFFFFF")); -// mCancelBt.setClickable(true); - mContentAdapter.notifyCurrentReasons(mCurrentReason); - } - - class ContentAdapter extends BaseAdapter{ - - private Context context; - private String[] datas; - private LayoutInflater layoutInflater; - private String currentReasons = ""; - - public ContentAdapter(Context context, String[] array){ - this.context = context; - datas = array; - layoutInflater = LayoutInflater.from(context); - } - @Override - public int getCount() { - return datas.length; - } - - @Override - public Object getItem(int position) { - return datas[position]; - } - - @Override - public long getItemId(int position) { - return 0; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder viewHolder = null; - if (convertView == null){ - convertView = layoutInflater.inflate(R.layout.taxi_order_checkbox_item,null); - viewHolder = new ViewHolder(); - viewHolder.checkBoxTv = convertView.findViewById(R.id.item_checkbox); - convertView.setTag(viewHolder); - }else { - viewHolder = (ViewHolder) convertView.getTag(); - } - viewHolder.checkBoxTv.setText(datas[position]); - if(viewHolder.checkBoxTv.getText().toString().equals(currentReasons)){ - viewHolder.checkBoxTv.setCompoundDrawablesWithIntrinsicBounds(context.getResources().getDrawable(R.drawable.taxi_selected_btn),null,null,null); - }else { - viewHolder.checkBoxTv.setCompoundDrawablesWithIntrinsicBounds(context.getResources().getDrawable(R.drawable.taxi_unselect_btn),null,null,null); - } - return convertView; - } - public void notifyCurrentReasons(String reason){ - currentReasons = reason; - notifyDataSetChanged(); - } - class ViewHolder { - TextView checkBoxTv; - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiPersonalDialogFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiPersonalDialogFragment.java deleted file mode 100644 index 106b2c7d9f..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiPersonalDialogFragment.java +++ /dev/null @@ -1,533 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.Point; -import android.graphics.Typeface; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager.widget.ViewPager; - -import com.google.android.material.tabs.TabLayout; -import com.mogo.commons.debug.DebugConfig; -import com.mogo.och.taxi.passenger.constant.OrderStatusEnum; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.constant.OrderTypeEnum; -import com.mogo.och.taxi.passenger.utils.OchTaxiUtils; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE; - -/** - * @author: wangmingjun - * @date: 2021/8/18 - */ -public class OCHTaxiPersonalDialogFragment extends DialogFragment implements View.OnClickListener { - - private final static String TAG = "OCHTaxiOrdersDialog"; - - private RelativeLayout mOperationDataRl; - private ImageView mCloseIv; - private RecyclerView mOrdersRv; - private Button mShowOrdersBt; - private TabLayout mOperationTab; - private ViewPager mOperationViewPager; - private OrderAdapter mAdapter; - private ConstraintLayout mNoDatas; - private List orders = new ArrayList<>(); - private String[] mTabTitles = {"在线时长","订单完成数"}; - private List fragments = new ArrayList<>(); - private int mNextPage = 0; - private int mPerPageSize = 10; - private static OCHTaxiFragment mTaxiFragment; - private static boolean serverHadNoData = false; - - public OCHTaxiPersonalDialogFragment(){ - } - - public OCHTaxiPersonalDialogFragment(OCHTaxiFragment taxiFragment){ - mTaxiFragment = taxiFragment; - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { -// getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); - View view = inflater.inflate(R.layout.taxi_orders_list_view, container, false); - initView(view); - return view; - } - - @Override - public void onStart() { - super.onStart(); - setCancelable(false); - getDialog().setCanceledOnTouchOutside(true); - Window window = getDialog().getWindow(); - //dialog padding 去掉 - window.getDecorView().setPadding(0,0,0,0); - window.setDimAmount(0f); - WindowManager.LayoutParams params = window.getAttributes(); - params.x = 0; - params.y = 0; - WindowManager windowManager = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE); - Point point = new Point(); - windowManager.getDefaultDisplay().getSize(point); - params.width = (int)(point.x * 0.375); - params.height = ViewGroup.LayoutParams.MATCH_PARENT; - window.setAttributes(params); - //设置背景, 不然显示不全 - window.getDecorView().setBackgroundColor(Color.parseColor("#00FFFFFF")); - window.setGravity(Gravity.LEFT|Gravity.BOTTOM); - } - - private void initView(View view) { - initOperationTabDatas(view); - mCloseIv = view.findViewById(R.id.module_och_taxi_order_list_close_iv); - mOperationDataRl = view.findViewById(R.id.module_och_taxi_operation_data_rl); - mShowOrdersBt = view.findViewById(R.id.module_och_taxi_order_list_show_bt); - mOrdersRv = view.findViewById(R.id.module_och_taxi_order_list); - - mNoDatas = view.findViewById(R.id.no_order_data_view); - ImageView imageView = view.findViewById(R.id.no_order_data_iv); - imageView.setImageResource(R.drawable.no_order_data); - ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams)imageView.getLayoutParams(); - params.width = 480; - params.height = 480; - imageView.setLayoutParams(params); - - mOrdersRv.setVisibility(View.GONE); - mNoDatas.setVisibility(View.GONE); - - mShowOrdersBt.setOnClickListener(this); - - mCloseIv.setOnClickListener(this); - - } - - private void initOperationTabDatas(View view) { - mOperationTab = view.findViewById(R.id.operation_data_tablayout); - mOperationViewPager = view.findViewById(R.id.operation_data_viewpager); - for (int i= 0;i < mTabTitles.length; i++){ - TabLayout.Tab tab = mOperationTab.newTab(); - tab.view.setBackgroundColor(Color.parseColor("#00000000")); - View tabView = View.inflate(getContext(),R.layout.taxi_operation_tab_item_custom,null); - TextView tv = tabView.findViewById(R.id.operation_tab_title); - tv.setText(mTabTitles[i]); - tab.setCustomView(tabView); - if (0 == i){ - mOperationTab.addTab(tab,true); - changeOperationTabLayoutTabUI(tab,true); - fragments.add(OCHTaxiOperationDatasFragment.newInstance(getActivity(),0)); - }else if (1 == i){ - mOperationTab.addTab(tab); - changeOperationTabLayoutTabUI(tab,false); - fragments.add(OCHTaxiOperationDatasFragment.newInstance(getActivity(),1)); - } - } - mOperationTab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - public void onTabSelected(TabLayout.Tab tab) { - mOperationViewPager.setCurrentItem(tab.getPosition()); - changeOperationTabLayoutTabUI(tab,true); - fragments.get(tab.getPosition()).setmType(tab.getPosition()); - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - public void onTabUnselected(TabLayout.Tab tab) { - changeOperationTabLayoutTabUI(tab,false); - } - - @Override - public void onTabReselected(TabLayout.Tab tab) { - - } - }); - mOperationViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } - - @Override - public void onPageSelected(int position) { - mOperationTab.getTabAt(position).select(); - } - - @Override - public void onPageScrollStateChanged(int state) { - } - }); - mOperationViewPager.setAdapter(new OrdersOperationFragmentAdapter(getChildFragmentManager() - , FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)); - fragments.get(0).setmType(0); - - if (mTaxiFragment == null){ - dismiss(); - }else { - mTaxiFragment.queryDriverServiceData(); - } - } - - /** - * 更新运营数据 时间和订单数 - * @param dailyTimeDuration - * @param dailyOrderNum - */ - public void onServiceDataUpdate(long dailyTimeDuration, long dailyOrderNum){ - for (int i=0; i< fragments.size();i++){ - fragments.get(i).updateData(dailyTimeDuration,dailyOrderNum); - } - } - - private void changeOperationTabLayoutTabUI(TabLayout.Tab tab, boolean isSelected) { - TextView textView = (TextView) tab.getCustomView().findViewById(R.id.operation_tab_title); - ImageView imageView = (ImageView) tab.getCustomView().findViewById(R.id.operation_tab_line_iv); - if (isSelected){ - textView.setTextSize(23); - Log.d(TAG,"SelectTv = "+ textView.getText()); - textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); - textView.setTextColor(Color.parseColor("#FFFFFF")); - imageView.setImageDrawable(getResources().getDrawable(R.drawable.taxi_driver_operation_tab_line)); - }else { - textView.setTextSize(20); - Log.d(TAG,"unSelectTv = "+ textView.getText()); - textView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); - textView.setTextColor(Color.parseColor("#A7B6F0")); - imageView.setImageDrawable(null); - } - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.module_och_taxi_order_list_close_iv){ - dismiss(); - }else { - mOrdersRv.setVisibility(View.VISIBLE); - mOperationDataRl.setVisibility(View.GONE); - mNoDatas.setVisibility(View.GONE); - initOrdersView(); - requestOrdersList(mNextPage, mPerPageSize); - } - } - - private void initOrdersView() { - mAdapter = new OrderAdapter(getContext(),orders); - LinearLayoutManager manager = new LinearLayoutManager(getContext()); - mOrdersRv.setLayoutManager(manager); - mOrdersRv.addOnScrollListener(new OnTaxiOrderRvOnScrollListener() { - @Override - public void onLoadMore() { - if (!serverHadNoData){ - requestOrdersList(mNextPage, mPerPageSize); - } - } - }); - mOrdersRv.setAdapter(mAdapter); - } - - /** - * 请求订单数据 - * @param page - * @param size - */ - private void requestOrdersList(int page, int size){ - mTaxiFragment.queryOrdersList(page,size); - } - - /** - * 订单数据结果返回 - * @param ordersList - */ - public void onOrdersListPageRefresh(List ordersList){ - if (null == ordersList && mNextPage == 0){//无数据 - mOrdersRv.setVisibility(View.GONE); - mNoDatas.setVisibility(View.VISIBLE); - return; - } - mOrdersRv.setVisibility(View.VISIBLE); - mNoDatas.setVisibility(View.GONE); - if ((null == ordersList) || (ordersList.size() < mPerPageSize && mNextPage > 0)){//已经没有更多数据,提示无数据 - //已经没有更多数据 - serverHadNoData = true; - orders.addAll(ordersList); - mAdapter.notifyDataSetChanged(); - mNextPage = mNextPage +1; - return; - } - serverHadNoData = false; - orders.addAll(ordersList); - mAdapter.notifyDataSetChanged(); - mNextPage = mNextPage +1; - } - - class OrderAdapter extends RecyclerView.Adapter{ - private static final int ORDER_DETAIL_ITEM = 0; - private static final int DAY_GROUP_ITEM = 1; - private Context context; - List orders; - public OrderAdapter(Context context,List datas){ - this.context = context; - this.orders = datas; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == ORDER_DETAIL_ITEM){ - View view = LayoutInflater.from(context).inflate(R.layout.taxi_orders_list_item,parent - ,false); - OrderDetailViewHolder viewHolder = new OrderDetailViewHolder(view); - return viewHolder; - }else if (viewType == DAY_GROUP_ITEM){ - View view = LayoutInflater.from(context).inflate(R.layout.taxi_orders_list_day_item,parent - ,false); - DayGroupViewHolder viewHolder = new DayGroupViewHolder(view); - return viewHolder; - } - return null; - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - OrderQueryRespBean.Result queryRespBean = orders.get(position); - if (null == queryRespBean) return; - if (holder instanceof DayGroupViewHolder){ - DayGroupViewHolder groupViewHolder = (DayGroupViewHolder)holder; - groupViewHolder.dayGroupTv.setText(OchTaxiUtils.getYMDTime(queryRespBean.createTime)); - bindOrderDetailData(queryRespBean,groupViewHolder.orderTimeTv,groupViewHolder.startStationTv - , groupViewHolder.endStationTv, groupViewHolder.orderStatusBt,groupViewHolder.orderTypeBt - ,groupViewHolder.orderNumTv); - if (isNoLineItem(position)){ - groupViewHolder.dividerLine.setVisibility(View.VISIBLE); - }else { - groupViewHolder.dividerLine.setVisibility(View.GONE); - } - if (position == orders.size()-1 && serverHadNoData){ - groupViewHolder.mBootNoDataView.setVisibility(View.VISIBLE); - }else { - groupViewHolder.mBootNoDataView.setVisibility(View.GONE); - } - }else if (holder instanceof OrderDetailViewHolder){ - OrderDetailViewHolder detailViewHolder = (OrderDetailViewHolder)holder; - bindOrderDetailData(queryRespBean,detailViewHolder.orderTimeTv, - detailViewHolder.startStationTv,detailViewHolder.endStationTv, - detailViewHolder.orderStatusBt,detailViewHolder.orderTypeBt,detailViewHolder.orderNumTv); - if (isNoLineItem(position)){ - detailViewHolder.dividerLine.setVisibility(View.VISIBLE); - }else { - detailViewHolder.dividerLine.setVisibility(View.GONE); - } - if (position == orders.size()-1 && serverHadNoData){ - detailViewHolder.mBootNoDataView.setVisibility(View.VISIBLE); - }else { - detailViewHolder.mBootNoDataView.setVisibility(View.GONE); - } - } - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public int getItemViewType(int position) { - //第一个要显示时间 - if (position == 0){ - return DAY_GROUP_ITEM; - } - String currentDate = OchTaxiUtils.getYMDTime(orders.get(position).createTime);//获取当前订单时间 - int prevIndex = position - 1; - String preDate = OchTaxiUtils.getYMDTime(orders.get(prevIndex).createTime); - boolean isDifferent = !preDate.equals(currentDate);//前一个订单的日期跟第二个订单的日期是否一致 - return isDifferent ? DAY_GROUP_ITEM : ORDER_DETAIL_ITEM;//一样订单详情, 不一样新添加分组 - } - - private boolean isNoLineItem(int position){ - if (position == orders.size() -1){ - return false; - }else { - String currentDate = OchTaxiUtils.getYMDTime(orders.get(position).createTime);//获取当前订单时间 - int nextIndex = position + 1; - String preDate = OchTaxiUtils.getYMDTime(orders.get(nextIndex).createTime); - boolean isDifferent = preDate.equals(currentDate);//订单跟后一个订单是否是同一天 - return isDifferent;//一样有划分线, 不一样没有划分线 - } - } - - @Override - public int getItemCount() { - return orders.size(); - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private void bindOrderDetailData(OrderQueryRespBean.Result queryRespBean, TextView orderTimeTv, - TextView startStationTv, TextView endStationTv, - Button orderStatusBt, Button orderTypeBt, TextView orderNumTv){ - Calendar calendar= Calendar.getInstance(); - calendar.setTimeInMillis(queryRespBean.createTime); - orderTimeTv.setText(OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_HH_mm)); - startStationTv.setText(queryRespBean.startSiteAddr); - endStationTv.setText(queryRespBean.endSiteAddr); - orderStatusBt.setText(getOrderStatus(queryRespBean.orderStatus,orderStatusBt)); - orderTypeBt.setText(getOrderType(queryRespBean.orderType,orderTypeBt)); - orderNumTv.setText("订单编号:"+String.valueOf(queryRespBean.orderId)); - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private String getOrderStatus(int status, Button button){ - OrderStatusEnum orderStatus = OrderStatusEnum.valueOf(status); - switch (orderStatus){ - case JourneyCompleted: - button.setBackground(context.getDrawable(R.drawable.taxi_order_button_status_canceled_bg)); - return "已完成"; - case Cancel: - button.setBackground(context.getDrawable(R.drawable.taxi_order_button_status_canceled_bg)); - return "已取消"; - default: - button.setBackground(context.getDrawable(R.drawable.taxi_order_button_status_bg)); - return "服务中"; - } - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private String getOrderType(int type, Button button){ - if (type == OrderTypeEnum.Reserved.getType()){ - button.setBackground(context.getDrawable(R.drawable.taxi_order_button_type_reserver_bg)); - return "预约单"; - }else{ - button.setBackground(context.getDrawable(R.drawable.taxi_order_button_type_bg)); - return "即时单"; - } - } - - } - - class OrderDetailViewHolder extends RecyclerView.ViewHolder{ - - protected TextView orderTimeTv; - protected Button orderStatusBt; - protected TextView startStationTv; - protected TextView endStationTv; - protected TextView orderNumTv; - protected Button orderTypeBt; - protected View dividerLine; - protected View mBootNoDataView; - - public OrderDetailViewHolder(@NonNull View itemView) { - super(itemView); - orderTimeTv = itemView.findViewById(R.id.order_time_hm_tv); - orderStatusBt = itemView.findViewById(R.id.order_status_bt); - startStationTv = itemView.findViewById(R.id.grab_order_start_station); - endStationTv = itemView.findViewById(R.id.grab_order_end_station); - orderNumTv = itemView.findViewById(R.id.order_num); - orderTypeBt = itemView.findViewById(R.id.order_type_bt); - dividerLine = itemView.findViewById(R.id.module_och_taxi_order_divider); - mBootNoDataView = itemView.findViewById(R.id.boot_refresh_no_data_view); - if (DebugConfig.isDebug()){ - // TODO: 2021/11/23 因当前上线版本均打开了debug,所以此处隐藏orderId - orderNumTv.setVisibility(View.GONE); - }else { - orderNumTv.setVisibility(View.GONE); - } - } - } - - class DayGroupViewHolder extends OrderDetailViewHolder{ - - private TextView dayGroupTv; - public DayGroupViewHolder(@NonNull View itemView) { - super(itemView); - dayGroupTv = itemView.findViewById(R.id.order_day_tv); - } - } - - abstract class OnTaxiOrderRvOnScrollListener extends RecyclerView.OnScrollListener{ - - private boolean isUpwardSliding = false; - - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); - //不滑动 - if (manager instanceof LinearLayoutManager && newState == SCROLL_STATE_IDLE){ - LinearLayoutManager linearLayoutManager = (LinearLayoutManager) manager; - int lastItemPosition = linearLayoutManager.findLastCompletelyVisibleItemPosition(); - int itemCount = linearLayoutManager.getItemCount(); - Log.d(TAG,"lastItemPosition=="+lastItemPosition+",itemCount=="+itemCount); - //向上滑动到最后一个 - if ((lastItemPosition == itemCount-1) && isUpwardSliding){ - onLoadMore(); - } - } - } - - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - isUpwardSliding = dy > 0; - } - public abstract void onLoadMore(); - } - - @Override - public void dismiss() { - super.dismiss(); - mNextPage = 0; - orders.clear(); - } - - private class OrdersOperationFragmentAdapter extends FragmentPagerAdapter{ - - public OrdersOperationFragmentAdapter(@NonNull FragmentManager fm, int behavior) { - super(fm, behavior); - } - - @NonNull - @Override - public Fragment getItem(int position) { - return fragments.get(position); - } - - @Override - public int getCount() { - return fragments.size(); - } - - @Nullable - @Override - public CharSequence getPageTitle(int position) { - return mTabTitles[position]; - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiRadiuImageView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiRadiuImageView.java deleted file mode 100644 index 39d589031b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiRadiuImageView.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Path; -import android.os.Build; -import android.util.AttributeSet; -import android.view.View; - -import androidx.appcompat.widget.AppCompatImageView; - -import com.mogo.och.taxi.passenger.R; - -/** - * @author: wangmingjun - * @date: 2021/9/29 - */ -public class OCHTaxiRadiuImageView extends AppCompatImageView { - private float width, height; - private int defaultRadius = 0; - private int radius; - private int leftTopRadius; - private int rightTopRadius; - private int rightBottomRadius; - private int leftBottomRadius; - - - public OCHTaxiRadiuImageView(Context context) { - this(context, null); - init(context, null); - } - - public OCHTaxiRadiuImageView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - init(context, attrs); - } - - public OCHTaxiRadiuImageView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context, attrs); - } - - private void init(Context context, AttributeSet attrs) { - if (Build.VERSION.SDK_INT < 18) { - setLayerType(View.LAYER_TYPE_SOFTWARE, null); - } - // 读取配置 - TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RoundCornerImageView); - radius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_radius, defaultRadius); - leftTopRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_left_top_radius, defaultRadius); - rightTopRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_right_top_radius, defaultRadius); - rightBottomRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_right_bottom_radius, defaultRadius); - leftBottomRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_left_bottom_radius, defaultRadius); - - - if (defaultRadius == leftTopRadius) { - leftTopRadius = radius; - } - if (defaultRadius == rightTopRadius) { - rightTopRadius = radius; - } - if (defaultRadius == rightBottomRadius) { - rightBottomRadius = radius; - } - if (defaultRadius == leftBottomRadius) { - leftBottomRadius = radius; - } - array.recycle(); - } - - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - width = getWidth(); - height = getHeight(); - } - - @Override - protected void onDraw(Canvas canvas) { - //这里做下判断,只有图片的宽高大于设置的圆角距离的时候才进行裁剪 - int maxLeft = Math.max(leftTopRadius, leftBottomRadius); - int maxRight = Math.max(rightTopRadius, rightBottomRadius); - int minWidth = maxLeft + maxRight; - int maxTop = Math.max(leftTopRadius, rightTopRadius); - int maxBottom = Math.max(leftBottomRadius, rightBottomRadius); - int minHeight = maxTop + maxBottom; - if (width >= minWidth && height > minHeight) { - Path path = new Path(); - //右上,右下,左下,左上 - path.moveTo(leftTopRadius, 0); - path.lineTo(width - rightTopRadius, 0); - path.quadTo(width, 0, width, rightTopRadius); - - path.lineTo(width, height - rightBottomRadius); - path.quadTo(width, height, width - rightBottomRadius, height); - - path.lineTo(leftBottomRadius, height); - path.quadTo(0, height, 0, height - leftBottomRadius); - - path.lineTo(0, leftTopRadius); - path.quadTo(0, 0, leftTopRadius, 0); - - canvas.clipPath(path); - } - super.onDraw(canvas); - } - -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiReserveOrdersFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiReserveOrdersFragment.java deleted file mode 100644 index 179e762cf0..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiReserveOrdersFragment.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.app.Activity; -import android.content.Context; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.mogo.eagle.core.utilcode.mogo.toast.TipToast; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.utils.OchTaxiUtils; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE; - -/** - * @author: wangmingjun - * @date: 2021/9/2 - * 待服务订单列表 - */ -public class OCHTaxiReserveOrdersFragment extends BaseTaxiUIFragment { - - private RecyclerView mRecyclerView; - private TextView mNodataTv; - private ConstraintLayout mNoDataView; - private View mBootRefreshNoDataView; - private List mDatas = new ArrayList<>(); - private ToBeServedOrdersAdapter mAdapter; - private static OCHTaxiFragment mTaxiFragment; - private static Activity mActivity; - private boolean isUpwardSliding = false; - - public static OCHTaxiReserveOrdersFragment newInstance(Activity activity, OCHTaxiFragment taxiFragment){ - mActivity = activity; - mTaxiFragment = taxiFragment; - Bundle args = new Bundle(); - OCHTaxiReserveOrdersFragment fragment = new OCHTaxiReserveOrdersFragment(); - fragment.setArguments( args ); - return fragment; - } - - @Override - protected int getLayoutId() { - return R.layout.taxi_reserve_orders; - } - - @Override - protected void initViews(View view) { - mRecyclerView = view.findViewById(R.id.order_to_be_served_rv); - mNodataTv = view.findViewById(R.id.no_order_data_tv); - mNoDataView = view.findViewById(R.id.no_order_data_view); - mNodataTv.setText("暂无待服务订单"); - mBootRefreshNoDataView = view.findViewById(R.id.list_boot_refresh_no_data_view); - mBootRefreshNoDataView.setVisibility(View.GONE); - mAdapter = new ToBeServedOrdersAdapter(getActivity(),mDatas); - mRecyclerView.setLayoutManager(new LinearLayoutManager(getParentFragment().getActivity())); - mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - RecyclerView.LayoutManager manager = recyclerView.getLayoutManager(); - //不滑动 - if (manager instanceof LinearLayoutManager && newState == SCROLL_STATE_IDLE){ - LinearLayoutManager linearLayoutManager = (LinearLayoutManager) manager; - int lastItemPosition = linearLayoutManager.findLastCompletelyVisibleItemPosition(); - int itemCount = manager.getItemCount(); - if ((lastItemPosition == itemCount-1) && !isUpwardSliding){ - //显示没有更多数据 - mBootRefreshNoDataView.setVisibility(View.VISIBLE); - } - } - } - - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - isUpwardSliding = dy > 0; - } - }); - mRecyclerView.setAdapter(mAdapter); - } - public void onOrdersWaitServiceChanged(List waitServiceList){//待服务订单展示 - if (waitServiceList.size() == 0){ - showNoDataTip(); - return; - } - mNoDataView.setVisibility(View.GONE); - mRecyclerView.setVisibility(View.VISIBLE); - mDatas.clear(); - mDatas.addAll(waitServiceList); - mAdapter.notifyDataSetChanged(); - } - - private void showNoDataTip() { - mBootRefreshNoDataView.setVisibility(View.GONE); - mNoDataView.setVisibility(View.VISIBLE); - mRecyclerView.setVisibility(View.GONE); - } - - class ToBeServedOrdersAdapter extends RecyclerView.Adapter{ - private List datas; - private Context context; - public ToBeServedOrdersAdapter(Context context, List datas){ - this.datas = datas; - this.context = context; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(context).inflate(R.layout.taxi_order_reserve_item,parent,false); - ToBeServedOrdersViewHolder viewHolder = new ToBeServedOrdersViewHolder(view); - return viewHolder; - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - if (datas != null && datas.size() >0 ){ - ToBeServedOrdersViewHolder viewHolder = (ToBeServedOrdersViewHolder)holder; - OrderQueryRespBean.Result order = datas.get(position); - Calendar calendar = OchTaxiUtils.formatLongToCalendar(order.bookingTime); - if (OchTaxiUtils.compareDateIsCurrentDay(calendar)){ - viewHolder.orderTime.setText("用车时间:今天"+OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_HH_mm)); - }else { - viewHolder.orderTime.setText("用车时间:"+OchTaxiUtils.formatCalendarToString(calendar,OchTaxiUtils.TAXI_MM_dd_HH_mm)); - } - viewHolder.orderCancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new OCHTaxiOrderCancelDialog(mTaxiFragment,context,order.orderId,1).show(); - } - }); - viewHolder.startStation.setText(order.startSiteAddr); - viewHolder.endStation.setText(order.endSiteAddr); - if (position == mDatas.size() -1){ - viewHolder.deliverLine.setVisibility(View.GONE); - } - } - } - - @Override - public int getItemCount() { - return datas.size(); - } - } - class ToBeServedOrdersViewHolder extends RecyclerView.ViewHolder{ - TextView orderTime; - ImageView orderCancel; - TextView startStation; - TextView endStation; - View deliverLine; - public ToBeServedOrdersViewHolder(@NonNull View itemView) { - super(itemView); - orderTime = itemView.findViewById(R.id.to_be_order_time); - orderCancel = itemView.findViewById(R.id.to_be_order_cancel_iv); - startStation = itemView.findViewById(R.id.base_start_station); - endStation = itemView.findViewById(R.id.base_end_station); - deliverLine = itemView.findViewById(R.id.to_be_order_divider); - } - } - public void onOrderCancelDone(long orderId){ - TipToast.tip("订单取消成功"); - for (int i=0; i< mDatas.size();i++){ - OrderQueryRespBean.Result result = mDatas.get(i); - if (orderId == result.orderId){ - mDatas.remove(i); - mAdapter.notifyDataSetChanged(); - break; - } - } - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiServerOrdersFragment.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiServerOrdersFragment.java deleted file mode 100644 index d9a8889cf7..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiServerOrdersFragment.java +++ /dev/null @@ -1,214 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import android.graphics.Color; -import android.graphics.Typeface; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.fragment.app.FragmentTransaction; -import androidx.viewpager.widget.ViewPager; - -import com.google.android.material.tabs.TabLayout; -import com.mogo.eagle.core.utilcode.mogo.logger.Logger; -import com.mogo.och.taxi.passenger.R; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; -import com.mogo.och.taxi.passenger.bean.OrderQueryRouteInfoRespBean; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author congtaowang - * @since 2021/1/18 - * - * 网约车-出租车UI - */ -public class OCHTaxiServerOrdersFragment extends BaseTaxiUIFragment { - - public static final String TAG = "OCHTaxiFragment"; - - public static OCHTaxiServerOrdersFragment newInstance() { - - Bundle args = new Bundle(); - - OCHTaxiServerOrdersFragment fragment = new OCHTaxiServerOrdersFragment(); - fragment.setArguments( args ); - return fragment; - } - private FragmentTransaction mFragmentTransaction; - private TabLayout mTaxiOrderTab; - private TextView mWaitOrderSum; - private ViewPager mTaxiOrderPager; - private String[] mTabTitles = {"进行中","待服务"}; - private List fragments = new ArrayList<>(); - private OCHTaxiBeingServerdOrdersFragment beingServerdOrdersFragment = null; - private OCHTaxiReserveOrdersFragment reserveOrdersFragment = null; - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - protected int getLayoutId() { - return R.layout.taxi_server_orders_panel; - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - protected void initViews(View view) { - initOrderTab(view); - } - - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private void initOrderTab(View view) { - mWaitOrderSum = view.findViewById(R.id.wait_order_num); - mTaxiOrderTab = view.findViewById(R.id.module_och_taxi_tab); - mTaxiOrderPager = view.findViewById(R.id.module_och_taxi_view_pager); - for (int i= 0;i < mTabTitles.length; i++){ - TabLayout.Tab tab = mTaxiOrderTab.newTab(); - tab.view.setBackgroundColor(Color.parseColor("#00000000")); - View tabView = View.inflate(getActivity(),R.layout.taxi_tab_item_custom,null); - TextView tv = tabView.findViewById(R.id.tab_title); - tv.setText(mTabTitles[i]); - tab.setCustomView(tabView); - if (0 == i){ - mTaxiOrderTab.addTab(tab,true); - changeTabLayoutTabUI(tab,true); - beingServerdOrdersFragment = OCHTaxiBeingServerdOrdersFragment.newInstance(getActivity(),(OCHTaxiFragment) getParentFragment()); - fragments.add(beingServerdOrdersFragment); - }else if (1 == i){ - mTaxiOrderTab.addTab(tab); - changeTabLayoutTabUI(tab,false); - reserveOrdersFragment = OCHTaxiReserveOrdersFragment.newInstance(getActivity(),(OCHTaxiFragment) getParentFragment()); - fragments.add(reserveOrdersFragment); - } - - } - Log.d(TAG,"activity="+getActivity()); - mTaxiOrderTab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - public void onTabSelected(TabLayout.Tab tab) { - mTaxiOrderPager.setCurrentItem(tab.getPosition()); - changeTabLayoutTabUI(tab,true); - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - @Override - public void onTabUnselected(TabLayout.Tab tab) { - changeTabLayoutTabUI(tab,false); - } - - @Override - public void onTabReselected(TabLayout.Tab tab) { - - } - }); - mTaxiOrderPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - } - - @Override - public void onPageSelected(int position) { - mTaxiOrderTab.getTabAt(position).select(); - } - - @Override - public void onPageScrollStateChanged(int state) { - } - }); - mTaxiOrderPager.setAdapter(new OrdersFragmentAdapter(getChildFragmentManager(),FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)); - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private void changeTabLayoutTabUI(TabLayout.Tab tab, boolean isSelected){ - TextView textView = (TextView) tab.getCustomView().findViewById(R.id.tab_title); - if (isSelected){ - textView.setBackground(getActivity().getDrawable(R.drawable.taxi_driver_tab_item_bg)); - textView.setTextSize(20); - Log.d(TAG,"SelectTv = "+ textView.getText()); - textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); - textView.setTextColor(Color.parseColor("#FFFFFF")); - }else { - textView.setBackground(null); - textView.setTextSize(18); - Log.d(TAG,"unSelectTv = "+ textView.getText()); - textView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); - textView.setTextColor(Color.parseColor("#CCD4F5")); - } - } - - class OrdersFragmentAdapter extends FragmentPagerAdapter{ - - private FragmentManager fragmentManager; - - public OrdersFragmentAdapter(@NonNull FragmentManager fm, int behavior) { - super(fm, behavior); - this.fragmentManager = fm; - } - - @NonNull - @Override - public Fragment getItem(int position) { - Logger.d( TAG, "getItem="+position); - return fragments.get(position); - } - - @Override - public int getCount() { - return fragments.size(); - } - - @Nullable - @Override - public CharSequence getPageTitle(int position) { - Logger.d( TAG, "getPageTitle="+position); - return mTabTitles[position]; - } - } - @RequiresApi(api = Build.VERSION_CODES.P) - public void updateCurrentOrderStatusChanged(OrderQueryRespBean.Result order){ - if (beingServerdOrdersFragment != null){ - mTaxiOrderTab.getTabAt(0).select(); - beingServerdOrdersFragment.updateCurrentOrderStatusChanged(order); - } - } - public void onOrdersWaitServiceChanged(List waitServiceList){ - if (waitServiceList.size() == 0){ - mWaitOrderSum.setVisibility(View.GONE); - }else { - mWaitOrderSum.setText(String.valueOf(waitServiceList.size())); - mWaitOrderSum.setVisibility(View.VISIBLE); - } - if (null == reserveOrdersFragment) return; - reserveOrdersFragment.onOrdersWaitServiceChanged(waitServiceList); - } - public void onOrderCancelDone(long orderId){ - if (null == reserveOrdersFragment) return; - reserveOrdersFragment.onOrderCancelDone(orderId); - } - public void onCurrentOrderCancelDone(){ - if (null == beingServerdOrdersFragment) return; - beingServerdOrdersFragment.onCurrentOrderCancelDone(); - } - public void onCurrentOrderDistToStartChanged(long meters, long timeInSecond){ - if (null == beingServerdOrdersFragment) return; - beingServerdOrdersFragment.updateDistanceAndTime(meters,timeInSecond); - } - public void onCurrentOrderDistToEndChanged(long meters, long timeInSecond){ - if (null == beingServerdOrdersFragment) return; - beingServerdOrdersFragment.updateDistanceAndTime(meters,timeInSecond); - } - public void onCurrentOrderRouteInfoGot(OrderQueryRouteInfoRespBean.Result routeInfo){ - if (null == beingServerdOrdersFragment) return; - beingServerdOrdersFragment.onCurrentOrderRouteInfoGot(routeInfo); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiView.java deleted file mode 100644 index 8145c47fc5..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/OCHTaxiView.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mogo.och.taxi.passenger.ui; - -import com.mogo.commons.mvp.IView; - -public -/** - * @author congtaowang - * @since 2021/1/18 - * - * 描述 - */ -interface OCHTaxiView extends IView { -} 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 new file mode 100644 index 0000000000..e68dd1af6c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.java @@ -0,0 +1,256 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.os.Handler; +import android.os.Looper; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.fragment.app.FragmentTransaction; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.mvp.MvpFragment; +import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; +import com.mogo.eagle.core.function.call.map.CallerSmpManager; +import com.mogo.eagle.core.utilcode.util.OverlayViewUtils; +import com.mogo.map.MogoMapUIController; +import com.mogo.map.MogoMarkerManager; +import com.mogo.map.listener.IMogoMapListener; +import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.constants.DataTypes; +import com.mogo.och.taxi.passenger.R; +import com.mogo.och.taxi.passenger.presenter.BaseTaxiPassengerPresenter; + + +/** + * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 + *

+ * 部分业务放在了此处处理 + * + * @author tongchenfei + */ +public class TaxiPassengerBaseFragment extends MvpFragment + implements IMogoMapListener, TaxiPassengerTaxiView { + + static final String TAG = "TaxiPassengerBaseFragment"; + + private FrameLayout flNaviPanelContainer; + private ImageView mAutopilotImage; + private ImageView mMapswitchBtn; + private TaxiPassengerTrafficLightView mTrafficLightView; + private TaxiPassengerV2XNotificationView mV2XNotificationView; + +// private ConstraintLayout mArrivedEndCL; + private View mArrivedEndView; + private TextView mArrivedEndStation; + + protected TaxiPassengerServingOrderFragment ochServingOrderFragment = null; + + private Handler mHandler = new Handler(Looper.getMainLooper()); + + @Override + protected int getLayoutId() { + return R.layout.taxi_p_base_fragment; + } + + @Override + public String getTagName() { + return "BaseOchTaxiPassengerFragment"; + } + + @Override + protected void initViews() { + + hideEagleConfig(); + + mAutopilotImage = findViewById(R.id.module_och_autopilot_iv); + flNaviPanelContainer = findViewById(R.id.module_mogo_och_navi_panel_container); + + mTrafficLightView = findViewById(R.id.traffic_light_view); + CallerHmiManager.INSTANCE.setProxyTrafficLightView(mTrafficLightView); + + mV2XNotificationView = new TaxiPassengerV2XNotificationView(getContext()); + CallerHmiManager.INSTANCE.setProxyNotificationView(mV2XNotificationView); + +// mArrivedEndCL = findViewById(R.id.taxi_p_arrive_end_bg); + mArrivedEndView = LayoutInflater.from(getContext()).inflate(R.layout.taxi_p_arrived_end_panel,null); + mArrivedEndStation = mArrivedEndView.findViewById(R.id.arrived_end_station); + + mMapswitchBtn = findViewById(R.id.module_och_taxi_swich_map_iv); + mMapswitchBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //视角切换 + if (MogoMapUIController.getInstance() + .getCurrentMapVisualAngle().isLongSight()) { + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).visibleAllMarkers(); + MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_MEDIUM_SIGHT, null); + } else if (MogoMapUIController.getInstance().getCurrentMapVisualAngle().isMediumSight()) { + MogoMarkerManager.getInstance(AbsMogoApplication.getApp()).inVisibleWithoutMarkers(DataTypes.TYPE_MARKER_ADAS); + MogoMapUIController.getInstance().changeMapVisualAngle(VisualAngleMode.MODE_LONG_SIGHT, null); + } + } + }); + + onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); + + if (MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()){ + switchVRFlatMode(true); + }else { + switchVRFlatMode(false); + } + } + + /** + * 隐藏鹰眼原有控件 + */ + private void hideEagleConfig() { + //隐藏小地图 + CallerSmpManager.INSTANCE.hidePanel(); + } + + @Override + public void onResume() { + super.onResume(); +// mPresenter.startOrStopOrderLoop(); +// showOrHideServingOrderFragment(true); + } + + /** + * VR mode 转换 + * @param isVRMode + */ + public void switchVRFlatMode(boolean isVRMode){ + if (mRootView != null) { + mRootView.setVisibility(isVRMode ? View.VISIBLE : View.GONE); + } + } + + /** + * 改变自动驾驶状态 + * + * @param status 2 - running 1 - enable 2 - disable + */ + private int mPrevAPStatus = -1; + public void onAutopilotStatusChanged(int status) { + getActivity().runOnUiThread(() -> { +// if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status) { +// // 1. 主动开启自动驾驶中,不为2(为0、1)则继续loading +// return; +// } +// if (isStarting && IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status +// && mPrevAPStatus != status) { +// // 2. 主动开启自动驾驶中,为2则停止loading,并isStarting = false +// startAutopilotDone(true); +// return; +// } + // 3. 其他过程直接更新 + if (mPrevAPStatus != status){ + autopilotStatusAnimchanged(status); + } +// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == mPrevAPStatus) { +// if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status) { +// // 2->1 +//// AIAssist.getInstance(getContext()).speakTTSVoice("已进入人工驾驶模式"); +// } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE == status) { +// // 2->0 +//// AIAssist.getInstance(getContext()).speakTTSVoice("自动驾驶已停止,请人工接管"); +// } +// } + mPrevAPStatus = status; + }); + } + + public void autopilotStatusAnimchanged(int status) { +// mAutopilotTv.setText(isInAutopilot?"自动驾驶":"开启自动驾驶"); + if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING == status) { + mAutopilotImage.setImageResource(R.drawable.taxi_p_auto_nor); + } else if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE == status){ + mAutopilotImage.setImageResource(R.drawable.taxi_p_un_auto_nor); + } else { + mAutopilotImage.setImageResource(R.drawable.taxi_p_un_auto_nor); + } + + } + + private void startAutopilotDone(boolean success) { + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + onAutopilotStatusChanged(CallerAutoPilotStatusListenerManager.INSTANCE.getAutoPilotStatusInfo().getState()); + } + }, 1000L); + } + + private boolean isStarting = false; + + @NonNull + @Override + protected BaseTaxiPassengerPresenter createPresenter() { + return new BaseTaxiPassengerPresenter(this); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + } + + @Override + public void onMapVisualAngleChanged(VisualAngleMode visualAngleMode) { + //todo ui 切换 + } + + /** + * 显示或隐藏订单信息 + * @param isShow + */ + public void showOrHideServingOrderFragment(boolean isShow){ + + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + + if (isShow){ + flNaviPanelContainer.setVisibility(View.VISIBLE); + if (ochServingOrderFragment == null){ + ochServingOrderFragment = new TaxiPassengerServingOrderFragment().newInstance(); + } + if (ochServingOrderFragment.isHidden()){ + transaction.show(ochServingOrderFragment).commitAllowingStateLoss(); + return; + } + if (ochServingOrderFragment.isAdded()){ + transaction.show(ochServingOrderFragment).commitAllowingStateLoss(); + return; + } + transaction.add(R.id.module_mogo_och_navi_panel_container, ochServingOrderFragment) + .show(ochServingOrderFragment).commitAllowingStateLoss(); + + }else { + flNaviPanelContainer.setVisibility(View.GONE); + if (ochServingOrderFragment != null){ + transaction.hide(ochServingOrderFragment).commitAllowingStateLoss(); + } + } + } + + /** + * 显示或者隐藏到达乘客站点的洁面 + * @param isShow + */ + public void showOrHideArrivedEndLayout(boolean isShow, String arrivedEndStation){ + if (isShow){ +// mArrivedEndCL.setVisibility(View.VISIBLE); + OverlayViewUtils.showOverlayView(getActivity(),mArrivedEndView); + mArrivedEndStation.setText(arrivedEndStation); + }else { +// mArrivedEndCL.setVisibility(View.GONE); + OverlayViewUtils.dismissOverlayView(mArrivedEndView); + } + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerCardView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerCardView.java new file mode 100644 index 0000000000..2cc2fd4cc6 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerCardView.java @@ -0,0 +1,64 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Region; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; + +import androidx.cardview.widget.CardView; + +import com.mogo.och.taxi.passenger.R; + +/** + * @author: wangmingjun + * @date: 2021/9/29 + */ +public class TaxiPassengerCardView extends CardView { + + private int defaultRadius = 0; + private float tlRadiu; + private float trRadiu; + private float brRadiu; + private float blRadiu; + public TaxiPassengerCardView(Context context) { + this(context, null); + } + + public TaxiPassengerCardView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.materialCardViewStyle); + } + + public TaxiPassengerCardView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + setRadius(0); + TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TaxiPassengerRoundCorner); + + tlRadiu = array.getDimension(R.styleable.TaxiPassengerRoundCorner_taxi_left_top_radius, defaultRadius); + trRadiu = array.getDimension(R.styleable.TaxiPassengerRoundCorner_taxi_right_top_radius, defaultRadius); + brRadiu = array.getDimension(R.styleable.TaxiPassengerRoundCorner_taxi_right_bottom_radius, defaultRadius); + blRadiu = array.getDimension(R.styleable.TaxiPassengerRoundCorner_taxi_left_bottom_radius, defaultRadius); + setBackground(new ColorDrawable()); + } + + @Override + protected void onDraw(Canvas canvas) { + Path path = new Path(); + RectF rectF = getRectF(); + float[] readius = {tlRadiu,tlRadiu,trRadiu,trRadiu,brRadiu,brRadiu,blRadiu,blRadiu}; + path.addRoundRect(rectF,readius,Path.Direction.CW); + canvas.clipPath(path, Region.Op.INTERSECT); + super.onDraw(canvas); + } + + private RectF getRectF() { + Rect rect = new Rect(); + getDrawingRect(rect); + RectF rectF = new RectF(rect); + return rectF; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.java new file mode 100644 index 0000000000..de4c0fcb2a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerMapDirectionView.java @@ -0,0 +1,343 @@ +package com.mogo.och.taxi.passenger.ui; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.RelativeLayout; + +import androidx.annotation.Nullable; + +import com.amap.api.maps.AMap; +import com.amap.api.maps.CameraUpdate; +import com.amap.api.maps.CameraUpdateFactory; +import com.amap.api.maps.CoordinateConverter; +import com.amap.api.maps.TextureMapView; +import com.amap.api.maps.UiSettings; +import com.amap.api.maps.model.BitmapDescriptorFactory; +import com.amap.api.maps.model.CameraPosition; +import com.amap.api.maps.model.CustomMapStyleOptions; +import com.amap.api.maps.model.LatLng; +import com.amap.api.maps.model.LatLngBounds; +import com.amap.api.maps.model.Marker; +import com.amap.api.maps.model.MarkerOptions; +import com.amap.api.maps.model.Polyline; +import com.amap.api.maps.model.PolylineOptions; +import com.mogo.eagle.core.data.map.MogoLatLng; +import com.mogo.eagle.core.data.map.MogoLocation; +import com.mogo.eagle.core.function.api.map.listener.IMoGoMapLocationListener; +import com.mogo.eagle.core.function.call.map.CallerMapLocationListenerManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.och.taxi.passenger.R; +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback; +import com.mogo.och.taxi.passenger.utils.TaxiPassengerMapAssetStyleUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * 乘客屏小地图 + */ +public class TaxiPassengerMapDirectionView + extends RelativeLayout + implements IMoGoMapLocationListener, ITaxiPassengerMapDirectionView, AMap.OnCameraChangeListener { + + //小地图名称 + public static final String TAG = "TPMapDirectionView"; + + private TextureMapView mAMapNaviView; + private AMap mAMap; + private Marker mCarMarker; + private Marker mStartMarker; + private Marker mEndMarker; + + private int zoomLevel = 13; + private List mCoordinatesLatLng = new ArrayList<>(); + private Polyline mPolyline; + private CameraUpdate mCameraUpdate; + private Context mContext; + + private List colorList = new ArrayList<>(); + + private ITaxiPassengerMapViewCallback mITaxiPassengerMapViewCallback; + + public TaxiPassengerMapDirectionView(Context context) { + this(context, null); + } + + public TaxiPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public TaxiPassengerMapDirectionView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + try { + initView(context); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void setTaxiPassengerMapViewCallback(ITaxiPassengerMapViewCallback ITaxiPassengerMapViewCallback){ + this.mITaxiPassengerMapViewCallback = ITaxiPassengerMapViewCallback; + } + + private void initView(Context context) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "initView"); + + mContext = context; + + View smpView = LayoutInflater.from(context).inflate(R.layout.taxi_p_map_view, this); + + mAMapNaviView = (TextureMapView) smpView.findViewById(R.id.taxi_p_order_amap_view); + + initAMapView(); + + // 注册定位监听 + CallerMapLocationListenerManager.INSTANCE.addListener(TAG, this); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + // 注册定位监听 + CallerMapLocationListenerManager.INSTANCE.removeListener(TAG); + } + + private void initAMapView() { + mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel); + mAMap = mAMapNaviView.getMap(); + // 设置导航地图模式,aMap是地图控制器对象。 + mAMap.setMapType(AMap.MAP_TYPE_NIGHT); + + // 关闭显示实时路况图层,aMap是地图控制器对象。 + mAMap.setTrafficEnabled(false); + + // 设置 锚点 图标 + mCarMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_car)) + .anchor(0.5f, 0.5f)); + mStartMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_start))); + mEndMarker = mAMap.addMarker(new MarkerOptions() + .icon(BitmapDescriptorFactory.fromResource(R.drawable.taxi_p_map_view_dir_end))); + + // 加载自定义样式 + CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() + .setEnable(true) + .setStyleData(TaxiPassengerMapAssetStyleUtil.getAssetsStyle(getContext(),"map_style.data")) + .setStyleExtraData(TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(),"map_style_extra.data")); + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions); + + //设置希望展示的地图缩放级别 + mAMap.moveCamera(mCameraUpdate); + + // 设置地图的样式 + UiSettings uiSettings = mAMap.getUiSettings(); + uiSettings.setZoomControlsEnabled(false);// 地图缩放级别的交换按钮 + uiSettings.setAllGesturesEnabled(false);// 所有手势 + uiSettings.setMyLocationButtonEnabled(false); // 显示默认的定位按钮 + uiSettings.setLogoBottomMargin(-150); //设置Logo下边界距离屏幕底部的边距,设置为负值即可 + + mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() { + @Override + public void onMapLoaded() { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "smp---onMapLoaded"); + // 加载自定义样式 + CustomMapStyleOptions customMapStyleOptions = new CustomMapStyleOptions() + .setEnable(true) + .setStyleData(TaxiPassengerMapAssetStyleUtil.getAssetsStyle(getContext(),"map_style.data")) + .setStyleExtraData(TaxiPassengerMapAssetStyleUtil.getAssetsExtraStyle(getContext(),"map_style_extra.data")); + // 设置自定义样式 + mAMap.setCustomMapStyle(customMapStyleOptions); + mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth() / 2, mAMapNaviView.getHeight() / 2); + } + }); + + //设置地图状态的监听接口 + mAMap.setOnCameraChangeListener(this); + } + + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return true; + } + + + @Override + public void onLocationChanged(@org.jetbrains.annotations.Nullable MogoLocation location, int from) { + if (location == null){ + return; + } + LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude()); + + if (mCoordinatesLatLng.size() > 1) { + //圈定地图显示范围 + LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); + //存放经纬度 + LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder(); + boundsBuilder.include(currentLatLng); + boundsBuilder.include(endLatLng); + //第二个参数为四周留空宽度 + mAMap.moveCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 100,100,100,100)); + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--moveCamera :" + location.getLatitude()+", "+location.getLongitude()); + + } else { + //设置希望展示的地图缩放级别 + CameraPosition cameraPosition = new CameraPosition.Builder() + .target(mCarMarker.getPosition()).tilt(0).bearing(location.getBearing()).zoom(zoomLevel).build(); + mAMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); + } + //更新车辆位置 + if (mCarMarker != null) { +// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "location.getBearing() = " + location.getBearing()); + mCarMarker.setRotateAngle(360 - location.getBearing()); + mCarMarker.setPosition(currentLatLng); +// CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "onCarLocationChanged2--loacation :" + location.getLatitude()+", "+location.getLongitude()); + mCarMarker.setToTop(); + } + } + + @Override + public void drawablePolyline() { + clearPolyline(); + if (mAMap != null) { + + addRouteColorList(); + + if (mCoordinatesLatLng.size() > 2) { + // 设置开始结束Marker位置 + + LatLng startLatLng = mCoordinatesLatLng.get(0); + LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1); + + mStartMarker.setPosition(startLatLng); + mEndMarker.setPosition(endLatLng); + mStartMarker.setVisible(true); + mEndMarker.setVisible(true); + + //设置线段纹理 + PolylineOptions polylineOptions = new PolylineOptions(); + polylineOptions.addAll(mCoordinatesLatLng); + polylineOptions.colorValues(colorList); // 1FC3FF -> 57ABFF + polylineOptions.useGradient(true); + polylineOptions.width(10); + polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound); + + // 绘制线 + mPolyline = mAMap.addPolyline(polylineOptions); + + } + } + } + + /** + * 添加画线颜色值 + */ + private void addRouteColorList() { + for (int i = 0; i < mCoordinatesLatLng.size(); i++){ + if (i <= mCoordinatesLatLng.size()/2){ + colorList.add(Color.argb(255, 31, 195, 255));//start + }else { + colorList.add(Color.argb(255, 87, 171, 255));//end + } + } + } + + + public LatLng CoordinateConverterFrom84(Context mContext, MogoLatLng mogoLatLng) { + CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); + mCoordinateConverter.coord(new LatLng(mogoLatLng.lat, mogoLatLng.lon)); + LatLng latLng = mCoordinateConverter.convert(); + return latLng; + } + + public List CoordinateConverterFrom84ForList(Context mContext, List mogoLatLngList) { + List list = new ArrayList<>(); + for (MogoLatLng m : mogoLatLngList) { + LatLng mogoLatLng = CoordinateConverterFrom84(mContext, m); + list.add(mogoLatLng); + } + return list; + } + + @Override + public void clearPolyline() { +// mCoordinatesLatLng.clear(); + if (mPolyline != null) { + mPolyline.remove(); + } + if (mStartMarker != null) { + mStartMarker.setVisible(false); + } + if (mEndMarker != null) { + mEndMarker.setVisible(false); + } + } + + public void resetPolyine() { + mCoordinatesLatLng.clear(); + if (mPolyline != null) { + mPolyline.remove(); + } + if (mStartMarker != null) { + mStartMarker.setVisible(false); + } + if (mEndMarker != null) { + mEndMarker.setVisible(false); + } + } + + public void onCreateView(Bundle savedInstanceState) { + if (mAMapNaviView != null) { + mAMapNaviView.onCreate(savedInstanceState); + } + } + + public void onResume() { + if (mAMapNaviView != null) { + mAMapNaviView.onResume(); + } + } + + public void onPause() { + if (mAMapNaviView != null) { + mAMapNaviView.onPause(); + } + } + + public void onDestroy() { + if (mAMapNaviView != null) { + mAMapNaviView.onDestroy(); + } + } + + public void convert(List coordinates) { + mCoordinatesLatLng.clear(); + List latLngs = CoordinateConverterFrom84ForList(mContext, coordinates); + mCoordinatesLatLng.addAll(latLngs); + } + + public void setCoordinatesLatLng(List latLngs){ + mCoordinatesLatLng.clear(); + mCoordinatesLatLng.addAll(latLngs); + } + + @Override + public void onCameraChange(CameraPosition cameraPosition) { + mITaxiPassengerMapViewCallback.onCameraChange(cameraPosition.bearing); + } + + @Override + public void onCameraChangeFinish(CameraPosition cameraPosition) { + + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerRadiuImageView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerRadiuImageView.java new file mode 100644 index 0000000000..f110b9f5c3 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerRadiuImageView.java @@ -0,0 +1,110 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Path; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; + +import androidx.appcompat.widget.AppCompatImageView; + +import com.mogo.och.taxi.passenger.R; + +/** + * @author: wangmingjun + * @date: 2021/9/29 + */ +public class TaxiPassengerRadiuImageView extends AppCompatImageView { + private float width, height; + private int defaultRadius = 0; + private int radius; + private int leftTopRadius; + private int rightTopRadius; + private int rightBottomRadius; + private int leftBottomRadius; + + + public TaxiPassengerRadiuImageView(Context context) { + this(context, null); + init(context, null); + } + + public TaxiPassengerRadiuImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + init(context, attrs); + } + + public TaxiPassengerRadiuImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + if (Build.VERSION.SDK_INT < 18) { + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + } + // 读取配置 + TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RoundCornerImageView); + radius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_passenger_radius, defaultRadius); + leftTopRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_passenger_left_top_radius, defaultRadius); + rightTopRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_passenger_right_top_radius, defaultRadius); + rightBottomRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_passenger_right_bottom_radius, defaultRadius); + leftBottomRadius = array.getDimensionPixelOffset(R.styleable.RoundCornerImageView_taxi_passenger_left_bottom_radius, defaultRadius); + + + if (defaultRadius == leftTopRadius) { + leftTopRadius = radius; + } + if (defaultRadius == rightTopRadius) { + rightTopRadius = radius; + } + if (defaultRadius == rightBottomRadius) { + rightBottomRadius = radius; + } + if (defaultRadius == leftBottomRadius) { + leftBottomRadius = radius; + } + array.recycle(); + } + + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + width = getWidth(); + height = getHeight(); + } + + @Override + protected void onDraw(Canvas canvas) { + //这里做下判断,只有图片的宽高大于设置的圆角距离的时候才进行裁剪 + int maxLeft = Math.max(leftTopRadius, leftBottomRadius); + int maxRight = Math.max(rightTopRadius, rightBottomRadius); + int minWidth = maxLeft + maxRight; + int maxTop = Math.max(leftTopRadius, rightTopRadius); + int maxBottom = Math.max(leftBottomRadius, rightBottomRadius); + int minHeight = maxTop + maxBottom; + if (width >= minWidth && height > minHeight) { + Path path = new Path(); + //右上,右下,左下,左上 + path.moveTo(leftTopRadius, 0); + path.lineTo(width - rightTopRadius, 0); + path.quadTo(width, 0, width, rightTopRadius); + + path.lineTo(width, height - rightBottomRadius); + path.quadTo(width, height, width - rightBottomRadius, height); + + path.lineTo(leftBottomRadius, height); + path.quadTo(0, height, 0, height - leftBottomRadius); + + path.lineTo(0, leftTopRadius); + path.quadTo(0, 0, leftTopRadius, 0); + + canvas.clipPath(path); + } + super.onDraw(canvas); + } + +} 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 new file mode 100644 index 0000000000..20f6b833e4 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerServingOrderFragment.java @@ -0,0 +1,389 @@ +package com.mogo.och.taxi.passenger.ui; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_TAXI_P; + +import android.location.Location; +import android.os.Build; +import android.os.Bundle; +import android.os.Looper; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.AppCompatSeekBar; + +import com.amap.api.maps.model.LatLng; +import com.mogo.commons.mvp.MvpFragment; +import com.mogo.eagle.core.data.map.MogoLatLng; +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.taxi.passenger.R; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; +import com.mogo.och.taxi.passenger.callback.ITaxiPassengerMapViewCallback; +import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; +import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; +import com.mogo.och.taxi.passenger.presenter.TaxiPassengerServingOrderPresenter; +import com.mogo.och.taxi.passenger.utils.TPRouteDataTestUtils; +import com.mogo.och.taxi.passenger.utils.TaxiPassengerUtils; + +import java.util.Calendar; +import java.util.List; + +/** + * @author: wangmingjun + * @date: 2022/3/8 + */ +public class TaxiPassengerServingOrderFragment extends + MvpFragment + implements TaxiPassengerTaxiView, ITaxiPassengerMapViewCallback { + + private final String TAG = TaxiPassengerServingOrderFragment.class.getSimpleName(); + + private GradientTextView mTPSpeedTv; + private TextView mTPSpeedTvShadowBg; + + private TextView mTPOrderStatus; + private TextView mTPOrderStartStation; + private TextView mTPOrderEndStation; + private TextView mTPOrderRemainDis; + private TextView mTPOrderRemainDisUnit; + private TextView mTPOrderRemainTime; + private TextView mTPOrderRemainArriveTime; + private ImageView mMapArrowIcon; + + private TaxiPassengerMapDirectionView mMapDirectionView; + private float lastBearing = 0; + private RotateAnimation rotateAnimation; + + private AppCompatSeekBar mProgressSeekBar; + private TextView mProgessDes; + + private TaxiPassengerRadiuImageView mSpeedLayoutBg; + + private int mLimitingVelocity = 0;// 返回的道路限速值 + + public static TaxiPassengerServingOrderFragment newInstance() { + + Bundle args = new Bundle(); + + TaxiPassengerServingOrderFragment fragment = new TaxiPassengerServingOrderFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + protected int getLayoutId() { + return R.layout.taxi_p_activity_serving_order_view; + } + + @Override + public String getTagName() { + return "TaxiPassengerServingOrderFragment"; + } + + @Override + protected void initViews() { + + mTPSpeedTv = findViewById(R.id.taxi_p_speed_tv); + mTPSpeedTvShadowBg = findViewById(R.id.taxi_p_speed_tv_bg); + mTPSpeedTv.setVertrial(true); + mTPSpeedTv.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_speed_normal_color1),getResources().getColor(R.color.taxi_p_speed_normal_color2)}); + mTPSpeedTv.setText(String.valueOf(0)); + mTPSpeedTvShadowBg.setText(String.valueOf(0)); + + mTPOrderStatus = findViewById(R.id.taxi_p_order_status_tv); + mTPOrderStartStation = findViewById(R.id.taxi_p_order_status_start_station_tv); + mTPOrderEndStation = findViewById(R.id.taxi_p_order_status_end_station_tv); + mTPOrderRemainDis = findViewById(R.id.taxi_p_order_remain_distance); + mTPOrderRemainDisUnit = findViewById(R.id.taxi_p_order_remain_distance_unit); + mTPOrderRemainTime = findViewById(R.id.taxi_p_order_remain_time); + mTPOrderRemainArriveTime = findViewById(R.id.taxi_p_order_remain_arrive_time); + + mMapArrowIcon = findViewById(R.id.taxi_p_arrow_nor); + mProgressSeekBar = findViewById(R.id.taxi_p_seekbar); + mProgessDes = findViewById(R.id.taxi_p_progress_des); + + mSpeedLayoutBg = findViewById(R.id.taxi_p_speed_bg); + + mTPOrderStatus.setOnLongClickListener(new View.OnLongClickListener() { //测试用 + @Override + public boolean onLongClick(View v) { + TPRouteDataTestUtils.converToRouteData(); + return true; + } + }); + + } + + @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); + } + + @NonNull + @Override + protected TaxiPassengerServingOrderPresenter createPresenter() { + return new TaxiPassengerServingOrderPresenter(this); + } + + /** + * 设置进度条最大值为 起点终点首次规划出的值 + */ + private void setSeekBarMax() { + //计算订单起点和终点距离 + int maxInt = SharedPrefsMgr.getInstance(getContext()).getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0); + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "maxInt = " + maxInt); + mProgressSeekBar.setMax(maxInt); + } + + /** + * 行驶进度值更新 + */ + @RequiresApi(api = Build.VERSION_CODES.N) + private void updateDriveProcessLoading(int progressLoading) { + int progressInt = SharedPrefsMgr.getInstance(getContext()) + .getInt(TaxiPassengerConst.SP_KEY_ORDER_SUM_DIS,0) - progressLoading; + CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"progressInt = "+progressInt); + mProgressSeekBar.setProgress( + progressInt + , true); + mProgressSeekBar.jumpDrawablesToCurrentState(); + } + + private void updateDriveRoadName(String currentRoadName){ + if (mProgessDes != null){ + mProgessDes.setText(currentRoadName); + } + } + + @Override + public void onResume() { + super.onResume(); + if (mMapDirectionView != null) { + mMapDirectionView.onResume(); + } + TaxiPassengerModel.getInstance().initGeocodeSearch(); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + + if (hidden){//fragment 隐藏, 导航取消c + clearPolyline(); + TaxiPassengerModel.getInstance().destoryGeocodeSearch(); + }else { //fragment 显示, 导航开始 + CallerLogger.INSTANCE.e(M_TAXI_P +"TaxiPassengerNaviTo","initGeocodeSearch"); + TaxiPassengerModel.getInstance().initGeocodeSearch(); + } + } + + @Override + public void onPause() { + super.onPause(); + if (mMapDirectionView != null) { + mMapDirectionView.onPause(); + } + + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (mMapDirectionView != null) { + mMapDirectionView.onDestroy(); + } + TaxiPassengerModel.getInstance().destoryGeocodeSearch(); + } + + public void routeResult(List latLngList) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResult:" + latLngList.size()); + if (latLngList.size() > 0) { + drawablePolyline(latLngList); + } else { + clearPolyline(); + } + } + + public void routeResultByServer(List latLngList) { + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "routeResultByServer:" + latLngList.size()); + if (latLngList.size() > 0) { + drawablePolylineByServerRoute(latLngList); + } else { + clearPolyline(); + } + } + + /** + * 绘制 + * + * @param coordinates + */ + private void drawablePolyline(List coordinates) { + if (mMapDirectionView != null) { + mMapDirectionView.convert(coordinates); + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.drawablePolyline(); + } + }); + } + } + + public void drawablePolylineByServerRoute(List mCoordinatesLatLng){ + if (mMapDirectionView != null){ + mMapDirectionView.setCoordinatesLatLng(mCoordinatesLatLng); + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.drawablePolyline(); + } + }); + } + } + private void clearPolyline() { + if (mMapDirectionView != null) { + UiThreadHandler.post(new Runnable() { + @Override + public void run() { + mMapDirectionView.clearPolyline(); + } + }); + } + } + + public void updateOrderStatusView(TaxiPassengerOrderQueryRespBean.Result order) { + mTPOrderStartStation.setText(order.startSiteAddr); + mTPOrderEndStation.setText(order.endSiteAddr); + + if (TaxiPassengerOrderStatusEnum.ArriveAtStart.getCode() == order.orderStatus) { + mTPOrderStatus.setText(getString(R.string.taxi_p_arrive_to_start)); + mTPOrderRemainDis.setText("--"); + mTPOrderRemainTime.setText("--"); + mTPOrderRemainArriveTime.setText("--"); + setSeekBarMax(); + return; + } + + if (TaxiPassengerOrderStatusEnum.OnTheWayToEnd.getCode() == order.orderStatus) { + mTPOrderStatus.setText(R.string.taxi_p_start_to_end); + setSeekBarMax(); + return; + } + } + + /** + * 剩余里程,剩余时间,当前定位点所在道路 + * @param meters 单位 米 + * @param remainTime 单位 秒 + */ + @RequiresApi(api = Build.VERSION_CODES.N) + public void onCurrentOrderDistToEndChanged(long meters, long remainTime) { + String disUnit = "公里"; + String remainDis = "0"; + + if (meters > 0){ + if (meters / 1000 < 1){ + disUnit = "米"; + remainDis = String.valueOf(Math.round(meters)); + }else { + disUnit = "公里"; + remainDis = TaxiPassengerUtils.formatLong((double) meters / 1000); + } + } + + int time = (int)Math.ceil((double)remainTime/ 60f); + + Calendar beforeTime = Calendar.getInstance(); + beforeTime.add(Calendar.MINUTE,time); + String arriveTime = TaxiPassengerUtils.formatCalendarToString(beforeTime,TaxiPassengerUtils.TAXI_HH_mm); + updateOrderDisAndTimeView(remainDis, disUnit,time, arriveTime); + updateDriveProcessLoading(new Long(meters).intValue()); + } + + public void onCurrentRoadName(String roadName){ + updateDriveRoadName(roadName); + } + + private void updateOrderDisAndTimeView(String remainDis, String remainDisUnit, int remainTime, String arriveTime) { + mTPOrderRemainDis.setText(remainDis); + mTPOrderRemainDisUnit.setText(remainDisUnit); + mTPOrderRemainTime.setText(String.valueOf(remainTime)); + mTPOrderRemainArriveTime.setText(arriveTime); + + } + + public void onCarLocationChanged(Location location) { + updateSpeedView(location.getSpeed()); + } + + public void onLimitingVelocityChange(int limitingVelocity) { + mLimitingVelocity = limitingVelocity; + } + + /** + * 更新速度 + * + * @param newSpeed + */ + private void updateSpeedView(float newSpeed) { + int speed = (int) (Math.abs(newSpeed) * 3.6F); // 倒车时工控机反馈定位信息中speed为负值 + CallerLogger.INSTANCE.d(M_TAXI_P + TAG,"mLimitingVelocity = "+mLimitingVelocity); + if (mLimitingVelocity > 0 && speed >= mLimitingVelocity) { + mTPSpeedTv.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_speed_warn_color1),getResources().getColor(R.color.taxi_p_speed_warn_color2)}); + mTPSpeedTv.setText(String.valueOf(speed)); + mTPSpeedTvShadowBg.setText(String.valueOf(speed)); + + mSpeedLayoutBg.setImageResource(R.drawable.taxi_p_speed_light_red_bg); + } else { + mTPSpeedTv.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_speed_normal_color1),getResources().getColor(R.color.taxi_p_speed_normal_color2)}); + mTPSpeedTv.setText(String.valueOf(speed)); + mTPSpeedTvShadowBg.setText(String.valueOf(speed)); + + mSpeedLayoutBg.setImageResource(R.drawable.taxi_p_speed_light_green_bg); + } + } + + private void runOnUIThread(Runnable executor) { + if (executor == null) { + return; + } + if (Looper.myLooper() != Looper.getMainLooper()) { + UiThreadHandler.post(executor); + } else { + executor.run(); + } + } + + @Override + public void onCameraChange(float bearing) { + startIvCompass(bearing); + } + + /** + * 设置指南针旋转 + * + * @param bearing + */ + private void startIvCompass(float bearing) { + bearing = 360 - bearing; + CallerLogger.INSTANCE.d(M_TAXI_P + TAG, "startIvCompass: " + bearing); + rotateAnimation = new RotateAnimation(lastBearing, bearing, Animation.RELATIVE_TO_SELF + , 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + rotateAnimation.setFillAfter(true); + + mMapArrowIcon.startAnimation(rotateAnimation); + lastBearing = bearing; + } + +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTaxiView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTaxiView.java new file mode 100644 index 0000000000..1805bd6821 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTaxiView.java @@ -0,0 +1,13 @@ +package com.mogo.och.taxi.passenger.ui; + +import com.mogo.commons.mvp.IView; + +public +/** + * @author congtaowang + * @since 2021/1/18 + * + * 描述 + */ +interface TaxiPassengerTaxiView extends IView { +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTrafficLightView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTrafficLightView.java new file mode 100644 index 0000000000..000c05ad24 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerTrafficLightView.java @@ -0,0 +1,168 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.content.Context; +import android.graphics.LinearGradient; +import android.graphics.Shader; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import com.mogo.eagle.core.function.api.hmi.view.IViewTrafficLight; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.passenger.R; + +import org.jetbrains.annotations.Nullable; + +/** + * Taxi乘客端:红绿灯view + * + * Created on 2022/3/14 + */ +public class TaxiPassengerTrafficLightView extends IViewTrafficLight { + + private ImageView mLightIconIV; + private GradientTextView mLightTimeTV; + private int mCurrentLightId; + + public TaxiPassengerTrafficLightView(@Nullable Context context) { + this(context, null, 0); + } + + public TaxiPassengerTrafficLightView(@Nullable Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public TaxiPassengerTrafficLightView(@Nullable Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + LayoutInflater.from(context).inflate(R.layout.taxi_p_traffic_light_view, this, true); + mLightIconIV = findViewById(R.id.taxi_p_traffic_light_iv); + mLightTimeTV = findViewById(R.id.taxi_p_traffic_light_time_tv); + } + + /** + * 展示红绿灯预警 + * + * @param checkLightId 0-都是默认,1-红,2-黄,3-绿 + */ + @Override + public void showWarningTrafficLight(int checkLightId) { + super.showWarningTrafficLight(checkLightId); + mCurrentLightId = checkLightId; + updateTrafficLightIcon(checkLightId); + } + + /** + * 关闭红绿灯预警展示,并重制灯态 + */ + @Override + public void disableWarningTrafficLight() { + super.disableWarningTrafficLight(); + UiThreadHandler.post(() -> { + mCurrentLightId = 0; + TaxiPassengerTrafficLightView.this.setVisibility(GONE); + }); + } + + /** + * @param redNum 红灯倒计时 + * @param yellowNum 黄灯倒计时 + * @param greenNum 绿灯倒计时 + */ + @Override + public void changeCountdownTrafficLightNum(int redNum, int yellowNum, int greenNum) { + super.changeCountdownTrafficLightNum(redNum, yellowNum, greenNum); + switch (mCurrentLightId) { + case 1: + changeCountdownRed(redNum); + break; + case 2: + changeCountdownYellow(yellowNum); + break; + case 3: + changeCountdownGreen(greenNum); + break; + default: + UiThreadHandler.post(() -> { + mLightTimeTV.setText(""); + }); + break; + } + } + + @Override + public void changeCountdownRed(int redNum) { + super.changeCountdownRed(redNum); + UiThreadHandler.post(() -> { + if (redNum > 0) { + mLightTimeTV.setVertrial(true); + mLightTimeTV.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_traffic_light_red_color_up), + getResources().getColor(R.color.taxi_p_traffic_light_red_color_down)}); + mLightTimeTV.setText(String.valueOf(redNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + @Override + public void changeCountdownGreen(int greenNum) { + super.changeCountdownGreen(greenNum); + UiThreadHandler.post(() -> { + if (greenNum > 0) { + mLightTimeTV.setVertrial(true); + mLightTimeTV.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_traffic_light_green_color_up), + getResources().getColor(R.color.taxi_p_traffic_light_green_color_down)}); + mLightTimeTV.setText(String.valueOf(greenNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + @Override + public void changeCountdownYellow(int yellowNum) { + super.changeCountdownYellow(yellowNum); + UiThreadHandler.post(() -> { + if (yellowNum > 0) { + mLightTimeTV.setVertrial(true); + mLightTimeTV.setmColorList(new int[]{getResources().getColor(R.color.taxi_p_traffic_light_yellow_color_up), + getResources().getColor(R.color.taxi_p_traffic_light_yellow_color_down)}); + mLightTimeTV.setText(String.valueOf(yellowNum)); + } else { + mLightTimeTV.setText(""); + } + }); + } + + /** + * 更新红绿灯icon + * + * @param lightId 0-都是默认,1-红,2-黄,3-绿 + */ + private void updateTrafficLightIcon(int lightId) { + UiThreadHandler.post(() -> { + switch (lightId) { + case 1: + mLightIconIV.setBackgroundResource(R.drawable.taxi_p_light_red_nor); + TaxiPassengerTrafficLightView.this.setVisibility(VISIBLE); + break; + case 2: + mLightIconIV.setBackgroundResource(R.drawable.taxi_p_lightyellow_nor); + TaxiPassengerTrafficLightView.this.setVisibility(VISIBLE); + break; + case 3: + mLightIconIV.setBackgroundResource(R.drawable.taxi_p_light_green_nor); + TaxiPassengerTrafficLightView.this.setVisibility(VISIBLE); + break; + default: + TaxiPassengerTrafficLightView.this.setVisibility(GONE); + break; + } + }); + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java new file mode 100644 index 0000000000..bebbb2625c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerV2XNotificationView.java @@ -0,0 +1,90 @@ +package com.mogo.och.taxi.passenger.ui; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import com.mogo.eagle.core.data.enums.SidePattern; +import com.mogo.eagle.core.function.api.hmi.view.IViewNotification; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.passenger.R; + +import org.jetbrains.annotations.Nullable; + +/** + * V2X预警事件view:通过FloatWindow呈现,无需加入到自定义layout中 + * + * Created on 2022/3/16 + */ +public class TaxiPassengerV2XNotificationView extends IViewNotification { + + private ImageView mV2XNotificationIcon; + private TextView mV2XNotificationText; + + public TaxiPassengerV2XNotificationView(@Nullable Context context) { + this(context, null, 0); + } + + public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public TaxiPassengerV2XNotificationView(@Nullable Context context, @Nullable AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + LayoutInflater.from(context).inflate(R.layout.taxi_p_v2x_notification_view, this, + true); + + mV2XNotificationIcon = findViewById(R.id.taxi_p_v2x_notification_icon_iv); + mV2XNotificationText = findViewById(R.id.taxi_p_v2x_notification_text_tv); + + // 设置View的出场位置 + setSidePattern(SidePattern.LEFT); + setLayoutGravity(Gravity.LEFT); + // 设置View的停留位置:相对屏幕左上角的位置 + setOffsetX(getResources(). + getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_left)); + setOffsetY(getResources(). + getDimensionPixelSize(R.dimen.taxi_p_v2x_notification_view_margin_top)); + } + + @Override + public void setWarningIcon(int warningIcon) { + super.setWarningIcon(warningIcon); + UiThreadHandler.post(() -> { + mV2XNotificationIcon.setImageResource(warningIcon); + }); + } + + @Override + public void setWarningIcon(@Nullable Drawable drawable) { + super.setWarningIcon(drawable); + UiThreadHandler.post(() -> { + mV2XNotificationIcon.setImageDrawable(drawable); + }); + } + + @Override + public void setWarningContent(@Nullable CharSequence warningContent) { + super.setWarningContent(warningContent); + UiThreadHandler.post(() -> { + mV2XNotificationText.setText(warningContent); + }); + } + + @Override + public void setWarningContent(int warningContentId) { + super.setWarningContent(warningContentId); + UiThreadHandler.post(() -> { + mV2XNotificationText.setText(warningContentId); + }); + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OchTaxiUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OchTaxiUtils.java deleted file mode 100644 index 6576e891e9..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OchTaxiUtils.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.mogo.och.taxi.passenger.utils; - -import com.mogo.eagle.core.utilcode.util.DateTimeUtils; - -import java.text.SimpleDateFormat; -import java.util.Calendar; - -/** - * @author: wangmingjun - * @date: 2021/8/20 - */ -public class OchTaxiUtils { - - public static final String TAXI_HH_mm = "HH:mm"; - public static final String TAXI_MM_dd = "MM-dd"; - public static final String TAXI_MM_dd_HH_mm = "MM-dd HH:mm"; - public static final String TAXI_yyyy_MM_dd = "yyyy-MM-dd"; - public static final String TAXI_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm"; - - public static String formatCalendarToString(Calendar calendar, String format){ - if (calendar == null) return ""; - try { - SimpleDateFormat dateFormat = new SimpleDateFormat(format); - return dateFormat.format(calendar.getTime()); - }catch (Exception e){ - e.printStackTrace(); - } - return ""; - } - - public static boolean compareDateIsCurrentDay(Calendar targetCalendar){ - Calendar currentCale = DateTimeUtils.getCurrentDateTime(); - String currentDay = formatCalendarToString(currentCale,OchTaxiUtils.TAXI_yyyy_MM_dd); - if (currentDay.equals(formatCalendarToString(targetCalendar,OchTaxiUtils.TAXI_yyyy_MM_dd))){ - return true; - }else { - return false; - } - } - - public static Calendar formatLongToCalendar(long time){ - Calendar calendar = null; - try { - calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); - }catch (Exception e){ - e.printStackTrace(); - } - return calendar; - } - public static String formatLongToString(long time, String format){ - try { - SimpleDateFormat dateFormat = new SimpleDateFormat(format); - return dateFormat.format(time); - }catch (Exception e){ - e.printStackTrace(); - } - return ""; - } - public static String getYMDTime(long time){//格式为 2021.8.21 - try { - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(time); - int month = calendar.get(Calendar.MONTH) + 1; - return calendar.get(Calendar.YEAR)+"."+month+"."+ calendar.get(Calendar.DAY_OF_MONTH); - }catch (Exception e){ - e.printStackTrace(); - } - return ""; - } - - /** - * - * @param seconds 60 - * @return 1 时 - */ - public static String secondsToHourStr(long seconds){//秒数转成相应的 小时分钟数 - if (seconds >= 3600){ - int hours = (int)seconds/3600; - return String.valueOf(hours); - } - return ""; - } - /** - * - * @param seconds 60 - * @return 1 时 - */ - public static String secondsToMinuteStr(long seconds){//秒数转成相应的 小时分钟数 - int minute = (int)(seconds % 3600)/60; - return String.valueOf(minute); - } -} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java index aa5b3aaaab..782b963176 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/OrderUtil.java @@ -1,6 +1,6 @@ package com.mogo.och.taxi.passenger.utils; -import com.mogo.och.taxi.passenger.bean.OrderQueryRespBean; +import com.mogo.och.taxi.passenger.bean.TaxiPassengerOrderQueryRespBean; import java.util.Arrays; import java.util.List; @@ -11,10 +11,10 @@ import java.util.List; public class OrderUtil { // 判断两个list中的订单是否相同:依据orderId - public static boolean haveSameOrders(List list1, - List list2) { - OrderQueryRespBean.Result[] arr1 = list1.toArray(new OrderQueryRespBean.Result[]{}); - OrderQueryRespBean.Result[] arr2 = list2.toArray(new OrderQueryRespBean.Result[]{}); + public static boolean haveSameOrders(List list1, + List list2) { + TaxiPassengerOrderQueryRespBean.Result[] arr1 = list1.toArray(new TaxiPassengerOrderQueryRespBean.Result[]{}); + TaxiPassengerOrderQueryRespBean.Result[] arr2 = list2.toArray(new TaxiPassengerOrderQueryRespBean.Result[]{}); Arrays.sort(arr1); Arrays.sort(arr1); return Arrays.equals(arr1,arr2); diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java new file mode 100644 index 0000000000..2208db23a8 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPCoordinateCalculateRouteUtil.java @@ -0,0 +1,55 @@ +package com.mogo.och.taxi.passenger.utils; + +import android.content.Context; + +import com.amap.api.maps.CoordinateConverter; +import com.amap.api.maps.model.LatLng; +import com.mogo.cloud.commons.utils.CoordinateUtils; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * @author: wangmingjun + * @date: 2022/3/28 + */ +public class TPCoordinateCalculateRouteUtil { + + public static float calculateRouteSumLength(List points){ + if (null == points || points.size() == 0) return 0; + + float sumLength = 0; + + //计算全路径总距离 + for (int i = 0;i + 1< points.size();i++){ + double preLat = points.get(i).latitude; + double preLon = points.get(i).longitude; + double laLat = points.get(i+1).latitude; + double laLon = points.get(i+1).longitude; + + float length = CoordinateUtils.calculateLineDistance(laLon,laLat,preLon,preLat); + sumLength += length; + } + return sumLength; + } + + public static List coordinateConverterWgsToGcjListCommon(Context mContext, List models) { + //转成MogoLatLng集合 + List list = new ArrayList<>(); + for (MessagePad.Location m : models) { + LatLng mogoLatLng = coordinateConverterWgsToGcj(mContext, m); + list.add(mogoLatLng); + } + return list; + } + + public static LatLng coordinateConverterWgsToGcj(Context mContext, MessagePad.Location mogoLatLng) { + CoordinateConverter mCoordinateConverter = new CoordinateConverter(mContext); + mCoordinateConverter.from(CoordinateConverter.CoordType.GPS); + mCoordinateConverter.coord(new LatLng(mogoLatLng.getLatitude(), mogoLatLng.getLongitude())); + LatLng latLng = mCoordinateConverter.convert(); + return latLng; + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java new file mode 100644 index 0000000000..b076c189b6 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TPRouteDataTestUtils.java @@ -0,0 +1,45 @@ +package com.mogo.och.taxi.passenger.utils; + +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import mogo.telematics.pad.MessagePad; + +/** + * @author: wangmingjun + * @date: 2022/4/13 + */ +public class TPRouteDataTestUtils { + + static String jsonStr ="{\n" + + " \"models\": [\n" + + " {\n" + + " \"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927760268911,\"lon\":116.73512607061035,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927736555187,\"lon\":116.73498243020299,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927135941599,\"lon\":116.73482951462647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199260672670036,\"lon\":116.73468429259535,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199251260349946,\"lon\":116.73453933465,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924691997577,\"lon\":116.7343756435551,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199247953493625,\"lon\":116.73421240809087,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19924986849947,\"lon\":116.73400425509712,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199249431152175,\"lon\":116.73378579041055,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199248921305724,\"lon\":116.73357811807278,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925012387371,\"lon\":116.73337650020184,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252270195075,\"lon\":116.73318223781153,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992521615169,\"lon\":116.73298632625203,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19925202633083,\"lon\":116.73279582043983,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199261230205735,\"lon\":116.73263403473568,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199327991681926,\"lon\":116.73251962434813,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19944850496711,\"lon\":116.73249661840195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199582026896415,\"lon\":116.73251038561487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199743326352014,\"lon\":116.73253087453938,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199908347167394,\"lon\":116.73255070500186,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200065950595445,\"lon\":116.7325720694418,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20022747460407,\"lon\":116.73259461416663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384057310536,\"lon\":116.73261575018056,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20053849777916,\"lon\":116.73263451936387,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200696919444624,\"lon\":116.7326540541723,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2008524952796,\"lon\":116.7326743511824,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20101429705625,\"lon\":116.73269393580199,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118279997041,\"lon\":116.73271564378308,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201342388452076,\"lon\":116.73273653366076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201476063822355,\"lon\":116.73275292393079,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163479199852,\"lon\":116.73277440686762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181243476041,\"lon\":116.7328052766508,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201991767093304,\"lon\":116.7328453845644,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20215573733484,\"lon\":116.73287624009339,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202313648759784,\"lon\":116.73289887933315,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434745374454,\"lon\":116.7329182210956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253164952098,\"lon\":116.73297539811277,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258043275509,\"lon\":116.73312335324984,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20258233576585,\"lon\":116.73331077089557,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20257107560234,\"lon\":116.73351244039137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202561578580514,\"lon\":116.73370176209845,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20256256788661,\"lon\":116.73391325024126,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20255633158834,\"lon\":116.73413195000244,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202543311179575,\"lon\":116.73436614303907,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20253067346457,\"lon\":116.73458032609663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20251776111356,\"lon\":116.73477082198242,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202503997557805,\"lon\":116.73498624001282,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20249129260376,\"lon\":116.73518976336872,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247877796589,\"lon\":116.73537786253135,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246651610268,\"lon\":116.73559239130266,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245754388014,\"lon\":116.73574239922202,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20244749208,\"lon\":116.73589674090469,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243806550113,\"lon\":116.73607057284322,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243550556816,\"lon\":116.73628106525871,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243654127756,\"lon\":116.7364949950665,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243738221016,\"lon\":116.7367061649993,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243672476754,\"lon\":116.73691115930336,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243590788176,\"lon\":116.73710722104272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202436434375336,\"lon\":116.73730688607075,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243749821501,\"lon\":116.73750140347998,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243625962803,\"lon\":116.73771330926793,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202434515480725,\"lon\":116.73791895606205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024326561388,\"lon\":116.73815206945737,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20243092086137,\"lon\":116.73838655528765,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202430876006126,\"lon\":116.73861890759498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242914053177,\"lon\":116.73882029918758,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242843336561,\"lon\":116.73904465495175,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242661219026,\"lon\":116.73922453252953,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426462811076,\"lon\":116.7393708046956,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242687134937,\"lon\":116.73954685547025,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20242694967377,\"lon\":116.73975021183773,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202424630601236,\"lon\":116.73999740812975,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202422502184625,\"lon\":116.74028266774337,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202419634158936,\"lon\":116.7405942561498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241975959762,\"lon\":116.7409069557092,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241920524113,\"lon\":116.74120156191647,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241765540262,\"lon\":116.74149288504978,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241569149764,\"lon\":116.7418080096762,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202414529497084,\"lon\":116.74210262897205,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241419532155,\"lon\":116.74241767661879,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202413879360954,\"lon\":116.7427571218185,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241287045245,\"lon\":116.7431284691325,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241214965105,\"lon\":116.74343354359334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241141271715,\"lon\":116.7437220210538,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2024080520075,\"lon\":116.74399113498052,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202391714280026,\"lon\":116.74427625698272,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20238163805639,\"lon\":116.74452083315958,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379293010274,\"lon\":116.74475703837204,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202379007817086,\"lon\":116.7449961645494,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20237814181231,\"lon\":116.7452036063558,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202375477619896,\"lon\":116.74539567654291,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2023632396621,\"lon\":116.74555457589031,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20229396554444,\"lon\":116.7456716047369,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20217800547467,\"lon\":116.74574081942625,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202047498095304,\"lon\":116.74573659255675,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20188573786706,\"lon\":116.74571018281719,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201738240263026,\"lon\":116.74568463148606,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20157507049073,\"lon\":116.74565525041498,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20137985142042,\"lon\":116.745619970576,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201187335613575,\"lon\":116.74558631350607,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20098251429043,\"lon\":116.74555055587679,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2007748533628,\"lon\":116.74551426934663,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20057082986032,\"lon\":116.74547749663195,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20036944224329,\"lon\":116.74544156175533,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016365229035,\"lon\":116.74540577510051,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1999958572445,\"lon\":116.74537505807076,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19984100521566,\"lon\":116.7453433678602,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1996863960282,\"lon\":116.74529675648621,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19953919567943,\"lon\":116.74525916493474,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19940587189373,\"lon\":116.74523402869453,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19929047792381,\"lon\":116.74518617038383,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922141745155,\"lon\":116.74506912884067,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920798885308,\"lon\":116.744896716334,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920912644279,\"lon\":116.74467216715483,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199209186509314,\"lon\":116.74448257515108,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19920910709997,\"lon\":116.74430613406223,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992100786082,\"lon\":116.74410888316238,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921081961254,\"lon\":116.74391968819582,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921040855518,\"lon\":116.7437082083402,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921085053439,\"lon\":116.74346931155634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921197237373,\"lon\":116.74325149697013,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921248248983,\"lon\":116.74301103786591,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992139724646,\"lon\":116.74277237066539,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215818352386,\"lon\":116.74253219408898,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216175018876,\"lon\":116.74228853120842,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199215970354246,\"lon\":116.74204663206451,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199216627492966,\"lon\":116.74183871233049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19921789170398,\"lon\":116.74165788334192,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922000138535,\"lon\":116.74144512197054,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199221559127494,\"lon\":116.741249370491,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922287231889,\"lon\":116.7410525810756,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922229019589,\"lon\":116.74085266662037,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.1992216995901,\"lon\":116.74061957723823,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922263073874,\"lon\":116.74041638149129,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922478093337,\"lon\":116.7402123910757,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199227066091595,\"lon\":116.74003419421553,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199228634241756,\"lon\":116.73985841944678,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19922951636012,\"lon\":116.7397079274105,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199252095329484,\"lon\":116.73956265582487,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199346162997905,\"lon\":116.73944690416265,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199470799628024,\"lon\":116.73941941053417,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19962513314346,\"lon\":116.7394280706812,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199780626058924,\"lon\":116.73944255215424,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199961525343376,\"lon\":116.73945856750177,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20016196947193,\"lon\":116.73947572081121,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200384479551936,\"lon\":116.7394949225795,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200595083817475,\"lon\":116.73951027963179,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200792203321086,\"lon\":116.73952526850614,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200985930701684,\"lon\":116.73954125209579,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20115978977055,\"lon\":116.73955610094161,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201321019536124,\"lon\":116.7395695239138,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20147117943043,\"lon\":116.7395823299481,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20163699848565,\"lon\":116.73959633422596,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20178484338371,\"lon\":116.7396085776486,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201962185646316,\"lon\":116.73962351991214,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021018923927,\"lon\":116.7396354059821,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2022137620686,\"lon\":116.73964348380458,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20232600820075,\"lon\":116.73961190446633,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20241090270993,\"lon\":116.73951649703137,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20245777783807,\"lon\":116.73937664238166,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246906634823,\"lon\":116.73920146119093,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470916682884,\"lon\":116.73898763065634,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247034830421,\"lon\":116.73878158418357,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246978204673,\"lon\":116.73857680142473,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247082638905,\"lon\":116.73834517890637,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202471943178196,\"lon\":116.7381047689514,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247131648035,\"lon\":116.73787761484981,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202470799473765,\"lon\":116.73766230702478,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247013054322,\"lon\":116.73743619407796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246999515433,\"lon\":116.73724916823292,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247199652478,\"lon\":116.73704888970806,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202473960263525,\"lon\":116.73684083235807,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202474504753205,\"lon\":116.73665462440796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20247501354581,\"lon\":116.73650710371837,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20246541231906,\"lon\":116.73635807696789,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.202426768984274,\"lon\":116.73622283382787,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20236638788854,\"lon\":116.73610589402243,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20227106919894,\"lon\":116.73600895001849,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2021428343084,\"lon\":116.73596816020945,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20197815580698,\"lon\":116.73594623645097,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20181789535303,\"lon\":116.73593148707488,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201667906886954,\"lon\":116.73591743008926,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.201505897730755,\"lon\":116.7359002912543,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20135083580946,\"lon\":116.73588579696379,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20118617904595,\"lon\":116.73586970398149,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20102374028594,\"lon\":116.73585314703226,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20085554043743,\"lon\":116.73583763953049,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20069451888229,\"lon\":116.73582073901778,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.200530837344964,\"lon\":116.73580314359012,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.2003608457064,\"lon\":116.73578183888779,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20021770046798,\"lon\":116.73575292592922,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.20003454701824,\"lon\":116.7357174959358,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19986125116602,\"lon\":116.73569499961796,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19969408518737,\"lon\":116.73567725223492,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19955533048882,\"lon\":116.73566375985422,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19943174810538,\"lon\":116.73564927714162,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19933167546824,\"lon\":116.735595995086,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.199280357603875,\"lon\":116.73546293260645,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19927848361656,\"lon\":116.73531579486274,\"speed\":0.0},{\"altitude\":0.0,\"angle\":0.0,\"duration\":0,\"lat\":40.19928127892504,\"lon\":116.73505848474375,\"speed\": 0.0\n" + + " }\n" + + " ]\n" + + "}"; + public static void converToRouteData(){ + List list = new ArrayList<>(); + + try { + JSONObject jsonObject = new JSONObject(jsonStr); + JSONArray jsonElements = jsonObject.getJSONArray("models"); + for (int i = 0; i < jsonElements.length(); i++) { + JSONObject s = jsonElements.getJSONObject(i); + MessagePad.Location.Builder builder = MessagePad.Location.newBuilder(); + builder.setLatitude(s.getDouble("lat")); + builder.setLongitude(s.getDouble("lon")); + list.add(builder.build()); + } + TaxiPassengerModel.getInstance().updateRouteResult(list); + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java new file mode 100644 index 0000000000..6605ec413a --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerMapAssetStyleUtil.java @@ -0,0 +1,61 @@ +package com.mogo.och.taxi.passenger.utils; + + +import android.content.Context; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author donghongyu + * @date 12/18/20 5:37 PM + */ +public class TaxiPassengerMapAssetStyleUtil { + + public static byte[] getAssetsStyle(Context context,String fileName) { + byte[] buffer1 = null; + InputStream is1 = null; + try { + is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style.data + int lenght1 = is1.available(); + buffer1 = new byte[lenght1]; + is1.read(buffer1); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (is1 != null) { + is1.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return buffer1; + } + + + public static byte[] getAssetsExtraStyle(Context context, String fileName) { + byte[] buffer1 = null; + InputStream is1 = null; + try { + is1 = context.getResources().getAssets().open(fileName); //eg. small_map_style_extra.data + int lenght1 = is1.available(); + buffer1 = new byte[lenght1]; + is1.read(buffer1); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (is1 != null) { + is1.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return buffer1; + } + + +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerUtils.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerUtils.java new file mode 100644 index 0000000000..cc20ac563c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/utils/TaxiPassengerUtils.java @@ -0,0 +1,109 @@ +package com.mogo.och.taxi.passenger.utils; + +import com.mogo.eagle.core.utilcode.util.DateTimeUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +/** + * @author: wangmingjun + * @date: 2021/8/20 + */ +public class TaxiPassengerUtils { + + public static final String TAXI_HH_mm = "HH:mm"; + public static final String TAXI_MM_dd = "MM-dd"; + public static final String TAXI_MM_dd_HH_mm = "MM-dd HH:mm"; + public static final String TAXI_yyyy_MM_dd = "yyyy-MM-dd"; + public static final String TAXI_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm"; + + public static String formatCalendarToString(Calendar calendar, String format){ + if (calendar == null) return ""; + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(calendar.getTime()); + }catch (Exception e){ + e.printStackTrace(); + } + return ""; + } + + public static boolean compareDateIsCurrentDay(Calendar targetCalendar){ + Calendar currentCale = DateTimeUtils.getCurrentDateTime(); + String currentDay = formatCalendarToString(currentCale, TaxiPassengerUtils.TAXI_yyyy_MM_dd); + if (currentDay.equals(formatCalendarToString(targetCalendar, TaxiPassengerUtils.TAXI_yyyy_MM_dd))){ + return true; + }else { + return false; + } + } + + public static Calendar formatLongToCalendar(long time){ + Calendar calendar = null; + try { + calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + }catch (Exception e){ + e.printStackTrace(); + } + return calendar; + } + public static String formatLongToString(long time, String format){ + try { + SimpleDateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(time); + }catch (Exception e){ + e.printStackTrace(); + } + return ""; + } + public static String getYMDTime(long time){//格式为 2021.8.21 + try { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + int month = calendar.get(Calendar.MONTH) + 1; + return calendar.get(Calendar.YEAR)+"."+month+"."+ calendar.get(Calendar.DAY_OF_MONTH); + }catch (Exception e){ + e.printStackTrace(); + } + return ""; + } + + /** + * + * @param seconds 60 + * @return 1 时 + */ + public static String secondsToHourStr(long seconds){//秒数转成相应的 小时分钟数 + if (seconds >= 3600){ + int hours = (int)seconds/3600; + return String.valueOf(hours); + } + return ""; + } + /** + * + * @param seconds 60 + * @return 1 时 + */ + public static String secondsToMinuteStr(long seconds){//秒数转成相应的 小时分钟数 + int minute = (int)(seconds % 3600)/60; + return String.valueOf(minute); + } + + /** + * 有小数两位, 没有小数保留整数 + * @param d + * @return + */ + public static String formatLong(double d) { + BigDecimal bg = new BigDecimal(d).setScale(1, RoundingMode.HALF_UP); + double num = bg.doubleValue(); + if (Math.round(num) - num == 0) { + return String.valueOf((long) num); + } + return String.valueOf(num); + } +} diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_progress_bar.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_progress_bar.png new file mode 100644 index 0000000000..cd14bf2760 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/bg_progress_bar.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_arrive_end_panel_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_arrive_end_panel_bg.png new file mode 100644 index 0000000000..8c7c04a122 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_arrive_end_panel_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_arrow_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_arrow_nor.png new file mode 100644 index 0000000000..b9d70e5fbb Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_arrow_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_auto_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_auto_nor.png new file mode 100644 index 0000000000..c15a11f4e4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_auto_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_dot_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_dot_line.png new file mode 100644 index 0000000000..46900bd157 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_dot_line.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_light_green_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_light_green_nor.png new file mode 100644 index 0000000000..bc9fed952d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_light_green_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_light_red_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_light_red_nor.png new file mode 100644 index 0000000000..8732508ded Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_light_red_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_lightyellow_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_lightyellow_nor.png new file mode 100644 index 0000000000..bae01408fd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_lightyellow_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_car.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_car.png new file mode 100644 index 0000000000..dedaf093e9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_car.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_view_dir_end.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_view_dir_end.png new file mode 100644 index 0000000000..a81336d4c2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_view_dir_end.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_view_dir_start.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_view_dir_start.png new file mode 100644 index 0000000000..3cee184981 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_map_view_dir_start.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogologo_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogologo_nor.png new file mode 100644 index 0000000000..ec1692cdcd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_mogologo_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_panel_bottom_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_panel_bottom_bg.png new file mode 100644 index 0000000000..83392d5cc4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_panel_bottom_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_seekbar_point_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_seekbar_point_icon.png new file mode 100644 index 0000000000..ab00b6fde3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_seekbar_point_icon.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_speed_light_green_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_speed_light_green_bg.png new file mode 100644 index 0000000000..fda0da73e4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_speed_light_green_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_speed_light_red_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_speed_light_red_bg.png new file mode 100644 index 0000000000..4fa0e570fa Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_speed_light_red_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_switch_map_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_switch_map_bg.png new file mode 100644 index 0000000000..369c10cf46 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_switch_map_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_un_auto_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_un_auto_nor.png new file mode 100644 index 0000000000..08a8e7366a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi-2560x1440/taxi_p_un_auto_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_progress_bar.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_progress_bar.png new file mode 100644 index 0000000000..cd14bf2760 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/bg_progress_bar.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00001.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00001.png deleted file mode 100644 index a45d5016fa..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00001.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00002.png deleted file mode 100644 index cdb7a7a6a9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00002.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00003.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00003.png deleted file mode 100644 index d23de4ef53..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00003.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00004.png deleted file mode 100644 index c3c8cb6ec6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00004.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00005.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00005.png deleted file mode 100644 index c3c8cb6ec6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00005.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00006.png deleted file mode 100644 index c3c8cb6ec6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00006.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00007.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00007.png deleted file mode 100644 index 815f83bf47..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00007.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00008.png deleted file mode 100644 index 2771e6cef3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00008.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00009.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00009.png deleted file mode 100644 index f66b6a0d55..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00009.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00010.png deleted file mode 100644 index bab043383a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00010.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00011.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00011.png deleted file mode 100644 index dde1edcb4d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00011.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00012.png deleted file mode 100644 index f9d513b742..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00012.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00013.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00013.png deleted file mode 100644 index 813fbfe3b2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00013.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00014.png deleted file mode 100644 index 820eda75e2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00014.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00015.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00015.png deleted file mode 100644 index 544aeac6f3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00015.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00016.png deleted file mode 100644 index 7173a3c9f9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00016.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00017.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00017.png deleted file mode 100644 index 518bb6d32d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00017.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00018.png deleted file mode 100644 index 52cb8e1bab..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00018.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00019.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00019.png deleted file mode 100644 index df48bba777..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00019.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00020.png deleted file mode 100644 index ac35dd6e89..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00020.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00021.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00021.png deleted file mode 100644 index 2b553e8263..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00021.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00022.png deleted file mode 100644 index 79f25eaef8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00022.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00023.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00023.png deleted file mode 100644 index 2f5cd12f81..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00023.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00024.png deleted file mode 100644 index 820eda75e2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00024.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00025.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00025.png deleted file mode 100644 index bfd6fc9aee..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00025.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00026.png deleted file mode 100644 index 96671ead5a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00026.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00027.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00027.png deleted file mode 100644 index 8a16ccea5c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00027.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00028.png deleted file mode 100644 index af98dbd5d3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00028.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00029.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00029.png deleted file mode 100644 index b05765193b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00029.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00030.png deleted file mode 100644 index dbf91b1e26..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00030.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00031.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00031.png deleted file mode 100644 index 6e3bd8cf35..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00031.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00032.png deleted file mode 100644 index c3c8cb6ec6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00032.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00033.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00033.png deleted file mode 100644 index 815f83bf47..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00033.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00034.png deleted file mode 100644 index 2771e6cef3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00034.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00035.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00035.png deleted file mode 100644 index f66b6a0d55..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00035.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00036.png deleted file mode 100644 index bab043383a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00036.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00037.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00037.png deleted file mode 100644 index dde1edcb4d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00037.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00038.png deleted file mode 100644 index f9d513b742..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00038.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00039.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00039.png deleted file mode 100644 index 813fbfe3b2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00039.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00040.png deleted file mode 100644 index 820eda75e2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00040.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00041.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00041.png deleted file mode 100644 index 544aeac6f3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00041.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00042.png deleted file mode 100644 index 7173a3c9f9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00042.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00043.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00043.png deleted file mode 100644 index 6dd8ca6079..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00043.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00044.png deleted file mode 100644 index c3c8cb6ec6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00044.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00045.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00045.png deleted file mode 100644 index d1c3e43a46..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/heart_00045.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00001.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00001.png deleted file mode 100644 index 0e2c5b1db9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00001.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00002.png deleted file mode 100644 index 317bc9d185..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00002.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00003.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00003.png deleted file mode 100644 index 743c950458..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00003.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00004.png deleted file mode 100644 index 5e2e72b97d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00004.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00005.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00005.png deleted file mode 100644 index 5e3f4087d0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00005.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00006.png deleted file mode 100644 index 069d93edcd..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00006.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00007.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00007.png deleted file mode 100644 index 0c4a13be2a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00007.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00008.png deleted file mode 100644 index 3e1a8cd7f9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00008.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00009.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00009.png deleted file mode 100644 index ba1d7bd275..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00009.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00010.png deleted file mode 100644 index 7a371cfcff..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00010.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00011.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00011.png deleted file mode 100644 index eb7d2d5e4b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00011.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00012.png deleted file mode 100644 index ec5dc4b49a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00012.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00013.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00013.png deleted file mode 100644 index d19f752212..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00013.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00014.png deleted file mode 100644 index 3c5f8afd16..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00014.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00015.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00015.png deleted file mode 100644 index d63cfc7e6c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00015.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00016.png deleted file mode 100644 index a13bbea6da..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00016.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00017.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00017.png deleted file mode 100644 index b80f8b07d8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00017.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00018.png deleted file mode 100644 index c9887df6a9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00018.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00019.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00019.png deleted file mode 100644 index c8bc1850f8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00019.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00020.png deleted file mode 100644 index 01f4d95b8d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00020.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00021.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00021.png deleted file mode 100644 index d21124dcc0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00021.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00022.png deleted file mode 100644 index 8c9a4d9e62..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00022.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00023.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00023.png deleted file mode 100644 index 587fdbb097..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00023.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00024.png deleted file mode 100644 index 1913a44095..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00024.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00025.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00025.png deleted file mode 100644 index be85d5037a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00025.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00026.png deleted file mode 100644 index 40bd64d32a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00026.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00027.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00027.png deleted file mode 100644 index ed4862fc94..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00027.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00028.png deleted file mode 100644 index 24f9605b4c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00028.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00029.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00029.png deleted file mode 100644 index 5886329415..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00029.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00030.png deleted file mode 100644 index e5309cf535..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00030.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00031.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00031.png deleted file mode 100644 index 9d5034a29e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00031.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00032.png deleted file mode 100644 index 0d8177691a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00032.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00033.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00033.png deleted file mode 100644 index 7cbd992f9f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00033.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00034.png deleted file mode 100644 index 617050c90d..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00034.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00035.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00035.png deleted file mode 100644 index e2222d7b54..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00035.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00036.png deleted file mode 100644 index c189fbec50..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00036.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00037.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00037.png deleted file mode 100644 index 608da06dfb..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00037.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00038.png deleted file mode 100644 index 6477259f2a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00038.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00039.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00039.png deleted file mode 100644 index c5bfee922b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00039.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00040.png deleted file mode 100644 index c5cca129d0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00040.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00041.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00041.png deleted file mode 100644 index eea120cbf6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00041.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00042.png deleted file mode 100644 index a7ce8a753e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00042.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00043.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00043.png deleted file mode 100644 index e552f4f5b0..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00043.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00044.png deleted file mode 100644 index 6beab6b438..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00044.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00045.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00045.png deleted file mode 100644 index 31fdcc6f45..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/success_00045.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_base_slide_block.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_base_slide_block.png deleted file mode 100644 index 8ffd0abe52..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_base_slide_block.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_close_navi_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_close_navi_icon.png deleted file mode 100644 index 56525e7ed2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_close_navi_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_dot_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_dot_line.png deleted file mode 100644 index 186001352c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_dot_line.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_blue_big.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_blue_big.png deleted file mode 100644 index 0c73689e8e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_blue_big.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_blue_small.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_blue_small.png deleted file mode 100644 index e9f6d32873..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_blue_small.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_green_big.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_green_big.png deleted file mode 100644 index 650c5132c2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_green_big.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_green_small.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_green_small.png deleted file mode 100644 index e300c1038c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_circle_green_small.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_grab_order_bt.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_grab_order_bt.png deleted file mode 100644 index 88b524d007..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_grab_order_bt.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_image_circle_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_image_circle_icon.png deleted file mode 100644 index 5e3b7c7a06..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_image_circle_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_operation_tab_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_operation_tab_line.png deleted file mode 100644 index 3f1a233b35..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_operation_tab_line.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_tab_item_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_tab_item_bg.png deleted file mode 100644 index f26800ecbf..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_driver_tab_item_bg.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_grab_dot_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_grab_dot_line.png deleted file mode 100644 index a75cc835fa..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_grab_dot_line.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_grad_order_close_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_grad_order_close_icon.png deleted file mode 100644 index 38584a971e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_grad_order_close_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_icon_arrived_station.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_icon_arrived_station.png deleted file mode 100644 index a676a789c3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_icon_arrived_station.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_icon_arriving_station.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_icon_arriving_station.png deleted file mode 100644 index e1fd463963..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_icon_arriving_station.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png deleted file mode 100644 index a83b7c9e74..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_arrow_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png deleted file mode 100755 index 1b96799531..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_direction_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_icon.png deleted file mode 100644 index bd4e6ccde4..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png deleted file mode 100644 index 7f758d5999..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_navi_line_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_cancel_close.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_cancel_close.png deleted file mode 100644 index 8311715c9a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_cancel_close.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_list_close_iv.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_list_close_iv.png deleted file mode 100644 index 8311715c9a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_list_close_iv.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_list_page.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_list_page.png deleted file mode 100644 index 2a814bbfa9..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_order_list_page.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrive_end_panel_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrive_end_panel_bg.png new file mode 100644 index 0000000000..8c7c04a122 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrive_end_panel_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrow_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrow_nor.png new file mode 100644 index 0000000000..b9d70e5fbb Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_arrow_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_auto_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_auto_nor.png new file mode 100644 index 0000000000..c15a11f4e4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_auto_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_dot_line.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_dot_line.png new file mode 100644 index 0000000000..46900bd157 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_dot_line.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_light_green_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_light_green_nor.png new file mode 100644 index 0000000000..bc9fed952d Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_light_green_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_light_red_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_light_red_nor.png new file mode 100644 index 0000000000..8732508ded Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_light_red_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_lightyellow_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_lightyellow_nor.png new file mode 100644 index 0000000000..bae01408fd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_lightyellow_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png new file mode 100644 index 0000000000..dedaf093e9 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_car.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_view_dir_end.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_view_dir_end.png new file mode 100644 index 0000000000..a81336d4c2 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_view_dir_end.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_view_dir_start.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_view_dir_start.png new file mode 100644 index 0000000000..3cee184981 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_map_view_dir_start.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogologo_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogologo_nor.png new file mode 100644 index 0000000000..ec1692cdcd Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_mogologo_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_panel_bottom_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_panel_bottom_bg.png new file mode 100644 index 0000000000..83392d5cc4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_panel_bottom_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_seekbar_point_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_seekbar_point_icon.png new file mode 100644 index 0000000000..ab00b6fde3 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_seekbar_point_icon.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_speed_light_green_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_speed_light_green_bg.png new file mode 100644 index 0000000000..fda0da73e4 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_speed_light_green_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_speed_light_red_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_speed_light_red_bg.png new file mode 100644 index 0000000000..4fa0e570fa Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_speed_light_red_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_switch_map_bg.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_switch_map_bg.png new file mode 100644 index 0000000000..369c10cf46 Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_switch_map_bg.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_un_auto_nor.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_un_auto_nor.png new file mode 100644 index 0000000000..08a8e7366a Binary files /dev/null and b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_p_un_auto_nor.png differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_report_order_cancel_icon.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_report_order_cancel_icon.png deleted file mode 100644 index ffda52cbdb..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_report_order_cancel_icon.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_selected_btn.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_selected_btn.png deleted file mode 100644 index 2ff45e6bba..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_selected_btn.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_unselect_btn.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_unselect_btn.png deleted file mode 100644 index 6936596ebb..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable-xhdpi/taxi_unselect_btn.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00000.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00000.png deleted file mode 100644 index b71bd0d040..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00000.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00001.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00001.png deleted file mode 100644 index c2ef6ba069..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00001.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00002.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00002.png deleted file mode 100644 index 3ddb02cd12..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00002.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00003.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00003.png deleted file mode 100644 index 191f809256..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00003.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00004.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00004.png deleted file mode 100644 index c3a1dc0a27..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00004.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00005.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00005.png deleted file mode 100644 index 5c20c76fe1..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00005.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00006.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00006.png deleted file mode 100644 index 195edee2ff..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00006.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00007.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00007.png deleted file mode 100644 index 693630b658..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00007.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00008.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00008.png deleted file mode 100644 index d4b8ceab85..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00008.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00009.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00009.png deleted file mode 100644 index 6e4706a238..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00009.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00010.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00010.png deleted file mode 100644 index f8350ebc4e..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00010.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00011.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00011.png deleted file mode 100644 index 33bb429f93..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00011.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00012.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00012.png deleted file mode 100644 index ae5a6bf520..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00012.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00013.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00013.png deleted file mode 100644 index aafcbc5122..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00013.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00014.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00014.png deleted file mode 100644 index 494f1e989b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00014.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00015.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00015.png deleted file mode 100644 index d8ae01fa79..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00015.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00016.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00016.png deleted file mode 100644 index fac9c3acce..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00016.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00017.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00017.png deleted file mode 100644 index f2e7e29e0c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00017.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00018.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00018.png deleted file mode 100644 index f01c9de1f1..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00018.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00019.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00019.png deleted file mode 100644 index 1e570e8da5..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00019.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00020.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00020.png deleted file mode 100644 index 86aeabc0cc..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00020.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00021.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00021.png deleted file mode 100644 index b1f5bf7471..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00021.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00022.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00022.png deleted file mode 100644 index 72be9d9104..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00022.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00023.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00023.png deleted file mode 100644 index 1d5b705848..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00023.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00024.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00024.png deleted file mode 100644 index 367516ea95..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00024.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00025.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00025.png deleted file mode 100644 index 1d0353e635..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00025.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00026.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00026.png deleted file mode 100644 index 52945e2c17..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00026.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00027.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00027.png deleted file mode 100644 index 7a338bd064..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00027.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00028.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00028.png deleted file mode 100644 index 78dc703a46..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00028.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00029.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00029.png deleted file mode 100644 index 58a450edc1..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00029.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00030.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00030.png deleted file mode 100644 index 49d04f78be..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00030.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00031.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00031.png deleted file mode 100644 index c473265692..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00031.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00032.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00032.png deleted file mode 100644 index baf0ced1fa..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00032.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00033.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00033.png deleted file mode 100644 index 3b75e5db6b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00033.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00034.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00034.png deleted file mode 100644 index ca66176618..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00034.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00035.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00035.png deleted file mode 100644 index e858b504e2..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00035.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00036.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00036.png deleted file mode 100644 index 75dfc4dd21..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00036.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00037.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00037.png deleted file mode 100644 index bd6c98b3ff..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00037.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00038.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00038.png deleted file mode 100644 index bb98916b1b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00038.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00039.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00039.png deleted file mode 100644 index 9e0c60b41b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00039.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00040.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00040.png deleted file mode 100644 index fb59f9763c..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00040.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00041.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00041.png deleted file mode 100644 index 26fb304d99..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00041.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00042.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00042.png deleted file mode 100644 index 9e86fa3b7b..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00042.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00043.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00043.png deleted file mode 100644 index 9ac13d48c5..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00043.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00044.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00044.png deleted file mode 100644 index cfc8198864..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00044.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00045.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00045.png deleted file mode 100644 index 352acbb165..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00045.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00046.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00046.png deleted file mode 100644 index cc62f17b67..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00046.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00047.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00047.png deleted file mode 100644 index e96c51d714..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00047.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00048.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00048.png deleted file mode 100644 index a9f4a1ff5f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00048.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00049.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00049.png deleted file mode 100644 index 22346bd12a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00049.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00050.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00050.png deleted file mode 100644 index cb2512ad6a..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00050.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00051.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00051.png deleted file mode 100644 index dfb322b959..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00051.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00052.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00052.png deleted file mode 100644 index 9e8147e189..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00052.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00053.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00053.png deleted file mode 100644 index 3f261747a8..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00053.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00054.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00054.png deleted file mode 100644 index d794d2f3bb..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00054.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00055.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00055.png deleted file mode 100644 index 4d6dc4e91f..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00055.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00056.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00056.png deleted file mode 100644 index 473273f2a6..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00056.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00057.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00057.png deleted file mode 100644 index 990b4b5503..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00057.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00058.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00058.png deleted file mode 100644 index 022e80d1d3..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00058.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00059.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00059.png deleted file mode 100644 index efb86c5569..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anim_flow_00059.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml deleted file mode 100644 index 611cde2035..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/anmi_flow.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_traffic_light_background.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_traffic_light_background.xml new file mode 100644 index 0000000000..941a082881 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_traffic_light_background.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_v2x_notification_view.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_v2x_notification_view.xml new file mode 100644 index 0000000000..c354474ee2 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/bg_taxi_p_v2x_notification_view.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/grab_failure_anmi_flow.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/grab_failure_anmi_flow.xml deleted file mode 100644 index 5a0649a2c5..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/grab_failure_anmi_flow.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/grab_success_anmi_flow.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/grab_success_anmi_flow.xml deleted file mode 100644 index 0447f8441d..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/grab_success_anmi_flow.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/img_taxi_operation_status_bg.9.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/img_taxi_operation_status_bg.9.png deleted file mode 100644 index 0af2b9db73..0000000000 Binary files a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/img_taxi_operation_status_bg.9.png and /dev/null differ diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_cancel_button_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_cancel_button_bg.xml deleted file mode 100644 index 60eb252eab..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_cancel_button_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_checkbox_selector.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_checkbox_selector.xml deleted file mode 100644 index adc3fce148..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_checkbox_selector.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_grab_order_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_grab_order_bg.xml deleted file mode 100644 index d626dfde91..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_grab_order_bg.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_grabing_order_btn_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_grabing_order_btn_bg.xml deleted file mode 100644 index fbe05625d8..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_grabing_order_btn_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_line_bg1.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_line_bg1.xml deleted file mode 100644 index 7fcd53f564..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_line_bg1.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_line_bg2.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_line_bg2.xml deleted file mode 100644 index e0861580ee..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_line_bg2.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_operation_data_item_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_operation_data_item_bg.xml deleted file mode 100644 index dca30d9244..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_operation_data_item_bg.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_bg.xml deleted file mode 100644 index f442e3fb0b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_bg.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_status_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_status_bg.xml deleted file mode 100644 index 103e621370..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_status_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_status_canceled_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_status_canceled_bg.xml deleted file mode 100644 index 8869eec9a6..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_status_canceled_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_type_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_type_bg.xml deleted file mode 100644 index d32f758b8b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_type_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_type_reserver_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_type_reserver_bg.xml deleted file mode 100644 index acae5d44a7..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_button_type_reserver_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_cancel_dialog_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_cancel_dialog_bg.xml deleted file mode 100644 index 942b51b459..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_cancel_dialog_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_viewpager_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_viewpager_bg.xml deleted file mode 100644 index 621dfb107e..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_order_viewpager_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_blue_circle_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_blue_circle_bg.xml new file mode 100644 index 0000000000..7a876437a8 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_blue_circle_bg.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_light_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_light_bg.xml new file mode 100644 index 0000000000..580cfc131c --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_light_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_map_bottom_shape.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_map_bottom_shape.xml new file mode 100644 index 0000000000..381f4772b8 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_map_bottom_shape.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_seekbar_calculator_layer.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_seekbar_calculator_layer.xml new file mode 100644 index 0000000000..320c08d2e9 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_seekbar_calculator_layer.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_yellow_circle_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_yellow_circle_bg.xml new file mode 100644 index 0000000000..28a17cb4d0 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_p_yellow_circle_bg.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_panel_bkg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_panel_bkg.xml deleted file mode 100644 index 04864e072b..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_panel_bkg.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_panel_distance_bkg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_panel_distance_bkg.xml deleted file mode 100644 index bbb05d8127..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_panel_distance_bkg.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_passenger_order_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_passenger_order_bg.xml new file mode 100644 index 0000000000..cd7b067fc3 --- /dev/null +++ b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_passenger_order_bg.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_show_orders_bg.xml b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_show_orders_bg.xml deleted file mode 100644 index c7f6e8e8f0..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/taxi_show_orders_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_base_fragment.xml b/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_base_fragment.xml deleted file mode 100644 index a1158dd2b2..0000000000 --- a/OCH/mogo-och-taxi-passenger/src/main/res/layout/taxi_base_fragment.xml +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -