diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 771c1f74d7..740794bd48 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -89,6 +89,7 @@
+
diff --git a/OCH/mogo-och-bus/build.gradle b/OCH/mogo-och-bus/build.gradle
index 2e4e685dd9..0cfd857606 100644
--- a/OCH/mogo-och-bus/build.gradle
+++ b/OCH/mogo-och-bus/build.gradle
@@ -44,6 +44,8 @@ dependencies {
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
+ implementation rootProject.ext.dependencies.androidxrecyclerview
+
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.mogooch
implementation rootProject.ext.dependencies.mogoutils
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
new file mode 100644
index 0000000000..59e6699b93
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java
@@ -0,0 +1,94 @@
+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 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.getIsCurrentSite() == OchBusConst.STATION_STATUS_ARRIVING || station.getIsCurrentSite() == OchBusConst.STATION_STATUS_STOPED) {
+ 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) {
+ holder.tvStationName.setText(stationList.get(position).getSiteName());
+ if (position == currentStation) {
+ holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_current_station_name_text_color));
+ } else if (position < currentStation) {
+ // 驶过
+ holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_arrived_station_name_text_color));
+ }else {
+ holder.tvStationName.setTextColor(context.getResources().getColor(R.color.module_mogo_och_bus_not_arrive_station_name_text_color));
+ }
+
+ if (position == 0) {
+ holder.tvStationNotice.setText("起点");
+ holder.tvStationNotice.setVisibility(View.VISIBLE);
+ } else if (position == getItemCount() - 1) {
+ holder.tvStationNotice.setText("终点");
+ holder.tvStationNotice.setVisibility(View.VISIBLE);
+ }else{
+ holder.tvStationNotice.setVisibility(View.GONE);
+ }
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return stationList.size();
+ }
+
+ static class ViewHolder extends RecyclerView.ViewHolder{
+ ImageView ivIcon;
+ TextView tvStationName;
+ TextView tvStationNotice;
+ 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);
+ }
+ }
+}
diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java
new file mode 100644
index 0000000000..b528100786
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java
@@ -0,0 +1,13 @@
+package com.mogo.och.bus.constant;
+
+/**
+ * 常量
+ *
+ * @author tongchenfei
+ */
+public class OchBusConst {
+ public static final int STATION_STATUS_IDLE = 0;
+ public static final int STATION_STATUS_STOPED = 1;
+ public static final int STATION_STATUS_LEAVING = 2;
+ public static final int STATION_STATUS_ARRIVING = 3;
+}
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
index 42933a51dc..4e6c91f6da 100644
--- 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
@@ -1,22 +1,19 @@
package com.mogo.och.bus.fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
-import androidx.constraintlayout.widget.Group;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
-import com.mogo.commons.mvp.MvpFragment;
import com.mogo.module.common.MogoApisHandler;
-import com.mogo.module.common.view.OnPreventFastClickListener;
import com.mogo.och.BaseOchFragment;
import com.mogo.och.bus.R;
+import com.mogo.och.bus.adapter.OchBusStationAdapter;
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.view.SlidePanelView;
-import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
@@ -30,16 +27,25 @@ import java.util.List;
*/
public class OchBusFragment extends BaseOchFragment implements SlidePanelView.OnSlidePanelMoveToEndListener {
private static final String TAG = "OchBusFragment";
- private final List stationList = new ArrayList<>();
- private TextView tvNotice;
+ private TextView tvStationNotice;
+ private TextView tvStationName;
+ private RecyclerView rvStationList;
+
+ private OchBusStationAdapter adapter;
@Override
protected void initViews() {
super.initViews();
- tvNotice = findViewById(R.id.module_mogo_och_bus_station_notice);
+ tvStationNotice = findViewById(R.id.module_mogo_och_bus_current_station_notice);
+ tvStationName = findViewById(R.id.module_mogo_och_bus_current_station_name);
+ rvStationList = findViewById(R.id.module_mogo_och_bus_rv_station_list);
- tvNotice.setOnClickListener(view->{
+ adapter = new OchBusStationAdapter(getContext());
+ rvStationList.setAdapter(adapter);
+ rvStationList.setLayoutManager(new LinearLayoutManager(getContext()));
+
+ tvStationNotice.setOnClickListener(view -> {
showSlidePanle("到达站点,乘客以下车");
});
}
@@ -72,34 +78,34 @@ public class OchBusFragment extends BaseOchFragment busStationList) {
+ public void refreshBusStations(List stationList) {
if (getActivity() == null) {
return;
}
getActivity().runOnUiThread(() -> {
- if (busStationList == null) {
+ if (stationList == null) {
// todo 获取小巴数据失败
} else {
// todo 渲染小巴路线数据
- stationList.clear();
- stationList.addAll(busStationList);
+ adapter.refreshStationList(stationList);
+
for (int i = 0; i < stationList.size(); i++) {
OchBusStation station = stationList.get(i);
- if (station.getIsCurrentSite() == OchBusPresenter.STATION_STATUS_LEAVING) {
- tvNotice.setText("正在从 " + i + "站驶向" + (i + 1) + "站");
- nextStation = stationList.get(i + 1);
+ if (station.getIsCurrentSite() == OchBusConst.STATION_STATUS_ARRIVING) {
+ tvStationName.setText(station.getSiteName());
+ tvStationNotice.setText("下一站");
onAutopilotStatusChanged(true);
break;
- } else if (station.getIsCurrentSite() == OchBusPresenter.STATION_STATUS_STOPED) {
- tvNotice.setText("车辆正停在" + i + "站");
+ } else if (station.getIsCurrentSite() == OchBusConst.STATION_STATUS_STOPED) {
+ tvStationNotice.setText("当前车站");
+ tvStationName.setText(station.getSiteName());
onAutopilotStatusChanged(false);
if (i == stationList.size() - 1) {
+ tvStationNotice.setText("终点");
showSlidePanle("单程结束");
- }else if(i == 0){
+ } else if (i == 0) {
showSlidePanle("准备出发");
- }else{
+ } else {
showSlidePanle("乘客已上车,准备出发");
}
break;
@@ -114,7 +120,7 @@ public class OchBusFragment extends BaseOchFragment implements IMogoA
private static final String TAG = "OchBusPresenter";
private static final int VEHICAL_TYPE = 10;
- public static final int STATION_STATUS_IDLE = 0;
- public static final int STATION_STATUS_STOPED = 1;
- public static final int STATION_STATUS_LEAVING = 2;
- public static final int STATION_STATUS_ARRIVING = 3;
-
public OchBusPresenter(OchBusFragment view) {
super(view);
MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasOCHCallback(this);
diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml
new file mode 100644
index 0000000000..ede7dd747d
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml
new file mode 100644
index 0000000000..d184a7bf11
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml
@@ -0,0 +1,9 @@
+
+
+ -
+
+
+
\ 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 0e51a45408..78888b54d8 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
@@ -1,19 +1,58 @@
-
+ android:layout_height="@dimen/module_mogo_och_bus_station_panel_height"
+ android:background="#FF2C3862">
+
+ android:layout_marginStart="@dimen/module_mogo_och_bus_station_panel_guide_offset_left"
+ android:layout_marginTop="@dimen/module_mogo_och_bus_station_panel_padding_top"
+ android:text="顺义政府站"
+ android:textColor="@color/module_mogo_och_bus_current_station_name_text_color"
+ android:textSize="@dimen/module_mogo_och_bus_current_station_name_text_size"
+ app:layout_constraintLeft_toLeftOf="@id/vGuide"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml b/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml
new file mode 100644
index 0000000000..9e953e0753
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000000..b2dbac5862
--- /dev/null
+++ b/OCH/mogo-och-bus/src/main/res/values/colors.xml
@@ -0,0 +1,9 @@
+
+
+ #FF1FA7FF
+ #FFFFFFFF
+ #FFFFFFFF
+ #FF51649D
+ #FF8299EB
+
+
\ 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 2a67585b14..3e8dc4658a 100644
--- a/OCH/mogo-och-bus/src/main/res/values/dimens.xml
+++ b/OCH/mogo-och-bus/src/main/res/values/dimens.xml
@@ -1,7 +1,25 @@
- 24px
464px
- 310px
+ 348px
+
+ 32px
+ 20px
+ 26px
+ 20px
+
+ 15px
+
+ 20px
+ 36px
+ 28px
+ 36px
+
+ 3px
+ 3px
+ 17px
+ 17px
+
+
\ No newline at end of file
diff --git a/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml b/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml
index 06495b6018..251f80379c 100644
--- a/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml
+++ b/OCH/mogo-och/src/main/res/layout/module_mogo_och_base_fragment.xml
@@ -16,19 +16,6 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-
-
-
-
-
-
-
-
-
-
-
-
-