diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 740794bd48..771c1f74d7 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -89,7 +89,6 @@ diff --git a/OCH/mogo-och-taxi/build.gradle b/OCH/mogo-och-taxi/build.gradle index dad79886c1..8a55d2b6af 100644 --- a/OCH/mogo-och-taxi/build.gradle +++ b/OCH/mogo-och-taxi/build.gradle @@ -40,6 +40,7 @@ dependencies { implementation rootProject.ext.dependencies.arouter annotationProcessor rootProject.ext.dependencies.aroutercompiler implementation rootProject.ext.dependencies.rxandroid + implementation rootProject.ext.dependencies.androidxconstraintlayout if (Boolean.valueOf(RELEASE)) { implementation rootProject.ext.dependencies.mogooch diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java index 349f4baf89..1832059020 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/IMogoOCHTaxiArriveCallback.java @@ -9,6 +9,8 @@ public */ interface IMogoOCHTaxiArriveCallback { + void onTheWay2StartStation(); + /** * 到达起始站 */ diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java index 7f0d56e8ad..a9bb7c5d84 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java @@ -305,6 +305,7 @@ class MogoOCHTaxiModel { */ public void setOnTheWay2EndStation( boolean isOnTheWay2EndStation ) { this.mIsOnTheWay2EndStation = isOnTheWay2EndStation; + OCHTaxiUiController.getInstance().onTheWay2EndStation(); } /** diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java index c74e7a86f3..231b02e613 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java @@ -1,18 +1,19 @@ package com.mogo.och.taxi.ui; import android.os.Bundle; -import android.widget.Button; +import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; -import com.mogo.commons.mvp.MvpFragment; import com.mogo.module.common.MogoApisHandler; +import com.mogo.och.BaseOchFragment; import com.mogo.och.taxi.IMogoOCHTaxiArriveCallback; import com.mogo.och.taxi.MogoOCHTaxiModel; import com.mogo.och.taxi.OCHOrderStatus; import com.mogo.och.taxi.OCHOrderStatusCallback; import com.mogo.och.taxi.R; +import com.mogo.och.view.SlidePanelView; import com.mogo.service.statusmanager.IMogoStatusChangedListener; import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; @@ -24,7 +25,7 @@ public * * 网约车-出租车UI */ -class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView, +class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > implements OCHTaxiView, IMogoStatusChangedListener, IMogoOCHTaxiArriveCallback { public static final String TAG = "OCHTaxiFragment"; @@ -38,45 +39,23 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple return fragment; } - private TextView orderInfo; - private Button autoPilot; + private TextView mOrderStatus; + private TextView mStartStationName; + private TextView mEndStationName; + private TextView mDistance; @Override - protected int getLayoutId() { - return R.layout.module_och_taxi_fragment; + public int getStationPanelViewId() { + return R.layout.module_och_taxi_panel; } @Override protected void initViews() { - - orderInfo = findViewById( R.id.orderInfo ); - autoPilot = findViewById( R.id.autoPilot ); - orderInfo.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().toString() ); - autoPilot.setOnClickListener( view -> { - if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { - Logger.w( TAG, "已到达终点" ); - return; - } - MogoOCHTaxiModel.getInstance().startAutoPilot(); - MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true ); - MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() { - @Override - public void onSuccess( Object data ) { - Logger.d( TAG, "更新状态成功" ); - } - - @Override - public void onFail() { - Logger.d( TAG, "更新状态失败" ); - } - - - @Override - public void onError() { - Logger.d( TAG, "更新状态失败2" ); - } - } ); - } ); + super.initViews(); + mOrderStatus = findViewById( R.id.module_och_taxi_order_status ); + mStartStationName = findViewById( R.id.module_och_taxi_order_start_station ); + mEndStationName = findViewById( R.id.module_och_taxi_order_end_station ); + mDistance = findViewById( R.id.module_och_taxi_order_distance ); if ( MogoApisHandler.getInstance() .getApis() @@ -122,28 +101,49 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple } private void initOrderStatus() { + if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { + mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation ); + mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation ); + mDistance.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance + " km" ); + } if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { Logger.d( TAG, "已经达到终点" ); - return; - } - if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { + slidePanelView.setVisibility( View.VISIBLE ); + slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_end_station ) ); + mOrderStatus.setText( "已到达乘客下车地点" ); + } else if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { Logger.d( TAG, "已经去往终点" ); - return; - } - if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() ) { + slidePanelView.setVisibility( View.GONE ); + mOrderStatus.setText( "去往下车地点" ); + } else if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() ) { Logger.d( TAG, "已经达到起点" ); - return; + slidePanelView.setVisibility( View.VISIBLE ); + slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) ); + mOrderStatus.setText( "已到达上车地点,等待乘客上车" ); + } else if ( MogoOCHTaxiModel.getInstance().checkCurrentOCHOrder() ) { + Logger.d( TAG, "去往上车站点" ); + slidePanelView.setVisibility( View.GONE ); + mOrderStatus.setText( "收到新订单,正在前往上车地点" ); } } @Override public void onArriveAtStartStation() { Logger.d( TAG, "通知达到起点" ); + initOrderStatus(); + } + + @Override + public void onTheWay2StartStation() { + Logger.d( TAG, "去往上车站点" ); + initOrderStatus(); } @Override public void onArriveAtEndStation() { Logger.d( TAG, "通知达到终点" ); + onAutopilotStatusChanged( false ); + initOrderStatus(); MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() { @Override public void onSuccess( Object data ) { @@ -166,6 +166,8 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple @Override public void onTheWay2EndStation() { Logger.d( TAG, "通知去往终点" ); + onAutopilotStatusChanged( true ); + initOrderStatus(); } @Override @@ -177,4 +179,56 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple .unregisterStatusChangedListener( TAG, StatusDescriptor.VR_MODE, this ); OCHTaxiUiController.getInstance().setOCHTaxiArriveCallback( null ); } + + @Override + public SlidePanelView.OnSlidePanelMoveToEndListener getSlidePanelOnEndListener() { + return this::onSlidePanelMoveToEnd; + } + + private void onSlidePanelMoveToEnd() { + // 已到达终点,需要结束订单 + if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) { + MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.Completed, new OCHOrderStatusCallback() { + @Override + public void onSuccess( Object data ) { + Logger.d( TAG, "更新状态成功" ); + MogoOCHTaxiModel.getInstance().clearCurrentOCHOrder(); + OCHTaxiUiController.getInstance().removeFragment(); + } + + @Override + public void onFail() { + Logger.d( TAG, "更新状态失败" ); + } + + @Override + public void onError() { + Logger.d( TAG, "更新状态失败2" ); + } + } ); + return; + // 已到达起点,前往下一站并开启自动驾驶 + } else if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() + && !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) { + MogoOCHTaxiModel.getInstance().startAutoPilot(); + MogoOCHTaxiModel.getInstance().setOnTheWay2EndStation( true ); + MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.OnTheWayToEndStation, new OCHOrderStatusCallback() { + @Override + public void onSuccess( Object data ) { + Logger.d( TAG, "更新状态成功" ); + } + + @Override + public void onFail() { + Logger.d( TAG, "更新状态失败" ); + } + + + @Override + public void onError() { + Logger.d( TAG, "更新状态失败2" ); + } + } ); + } + } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java index c29568768c..6b696fef07 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiUiController.java @@ -94,6 +94,11 @@ class OCHTaxiUiController implements IMogoOCHTaxiArriveCallback { this.mOCHTaxiArriveCallback = OCHTaxiArriveCallback; } + @Override + public void onTheWay2StartStation() { + + } + @Override public void onArriveAtStartStation() { runOnUIThread( () -> { diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_blue_dot.png b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_blue_dot.png new file mode 100644 index 0000000000..e1fd463963 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_blue_dot.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_dot_line.png b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_dot_line.png new file mode 100644 index 0000000000..186001352c Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_dot_line.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_green_dot.png b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_green_dot.png new file mode 100644 index 0000000000..a676a789c3 Binary files /dev/null and b/OCH/mogo-och-taxi/src/main/res/drawable-xhdpi/module_och_taxi_green_dot.png differ diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml new file mode 100644 index 0000000000..d6aa33cbcd --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_bkg.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml new file mode 100644 index 0000000000..998e8eeaaf --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/res/drawable/module_och_taxi_panel_distance_bkg.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml b/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml deleted file mode 100644 index efa9185d26..0000000000 --- a/OCH/mogo-och-taxi/src/main/res/layout/module_och_taxi_fragment.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -