From 3f49398b393c6945bed8f6621253b0faf36b8634 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Fri, 22 Jan 2021 18:25:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BD=A6=E7=AB=99=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 + OCH/mogo-och-bus/build.gradle | 2 + .../och/bus/adapter/OchBusStationAdapter.java | 94 +++++++++++++++++++ .../mogo/och/bus/constant/OchBusConst.java | 13 +++ .../mogo/och/bus/fragment/OchBusFragment.java | 56 ++++++----- .../och/bus/presenter/OchBusPresenter.java | 10 +- ...e_mogo_och_bus_station_green_dash_line.xml | 9 ++ ...dule_mogo_och_bus_station_v_green_dash.xml | 9 ++ .../src/main/res/layout/fragment_och_bus.xml | 57 +++++++++-- .../main/res/layout/item_och_bus_station.xml | 47 ++++++++++ .../src/main/res/values/colors.xml | 9 ++ .../src/main/res/values/dimens.xml | 22 ++++- .../layout/module_mogo_och_base_fragment.xml | 15 +-- 13 files changed, 289 insertions(+), 55 deletions(-) create mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/adapter/OchBusStationAdapter.java create mode 100644 OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/constant/OchBusConst.java create mode 100644 OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_green_dash_line.xml create mode 100644 OCH/mogo-och-bus/src/main/res/drawable/module_mogo_och_bus_station_v_green_dash.xml create mode 100644 OCH/mogo-och-bus/src/main/res/layout/item_och_bus_station.xml create mode 100644 OCH/mogo-och-bus/src/main/res/values/colors.xml 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" /> - - - - - - - - - - - - -