接入基础UI

This commit is contained in:
wangcongtao
2021-01-21 16:44:04 +08:00
parent 5e1961eb33
commit c40126aaf2
6 changed files with 138 additions and 47 deletions

View File

@@ -305,6 +305,7 @@ class MogoOCHTaxiModel {
*/
public void setOnTheWay2EndStation( boolean isOnTheWay2EndStation ) {
this.mIsOnTheWay2EndStation = isOnTheWay2EndStation;
OCHTaxiUiController.getInstance().onTheWay2EndStation();
}
/**

View File

@@ -1,18 +1,18 @@
package com.mogo.och.taxi.ui;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.view.View;
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 +24,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,46 +38,14 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
return fragment;
}
private TextView orderInfo;
private Button autoPilot;
@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();
if ( MogoApisHandler.getInstance()
.getApis()
.getStatusManagerApi()
@@ -124,14 +92,19 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
private void initOrderStatus() {
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
Logger.d( TAG, "已经达到终点" );
slidePanelView.setVisibility( View.VISIBLE );
slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_end_station ) );
return;
}
if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
Logger.d( TAG, "已经去往终点" );
slidePanelView.setVisibility( View.GONE );
return;
}
if ( MogoOCHTaxiModel.getInstance().isArriveAtStartStation() ) {
Logger.d( TAG, "已经达到起点" );
slidePanelView.setVisibility( View.VISIBLE );
slidePanelView.setText( getString( R.string.module_och_taxi_arrive_at_start_station ) );
return;
}
}
@@ -139,11 +112,14 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
@Override
public void onArriveAtStartStation() {
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 +142,8 @@ class OCHTaxiFragment extends MvpFragment< OCHTaxiView, OCHTaxiPresenter > imple
@Override
public void onTheWay2EndStation() {
Logger.d( TAG, "通知去往终点" );
onAutopilotStatusChanged( true );
initOrderStatus();
}
@Override
@@ -177,4 +155,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" );
}
} );
}
}
}

View File

@@ -18,4 +18,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开启自动驾驶" />
<Button
android:id="@+id/complete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="乘客到站下车" />
</LinearLayout>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="module_och_taxi_arrive_at_start_station">乘客已上车,准备出发</string>
<string name="module_och_taxi_arrive_at_end_station">到达站点,乘客已下车</string>
</resources>

View File

@@ -19,7 +19,7 @@ import com.mogo.och.view.SlidePanelView;
* @author tongchenfei
*/
public abstract class BaseOchFragment<V extends IView, P extends Presenter<V>> extends MvpFragment<V, P> {
private SlidePanelView slidePanelView;
protected SlidePanelView slidePanelView;
private TextView tvNotice;
private CheckedTextView ctvAutopilotStatus;
private FrameLayout flStationPanelContainer;

View File

@@ -24,6 +24,7 @@ class MapStyleController {
private MapStyleController() {
mVrAreaFilters.add( new ShunYiArea() );
mVrAreaFilters.add( new OCHArea() );
}
public static MapStyleController getInstance() {
@@ -85,7 +86,21 @@ class MapStyleController {
}
public interface VrAreaFilter {
boolean isVrArea( MogoLocation location );
default boolean isVrArea( MogoLocation location ) {
if ( location == null ) {
return false;
}
return location.getLat() > getLeftBottomLat() && location.getLon() > getLeftBottomLon()
&& location.getLat() < getRightTopLat() && location.getLon() < getRightTopLon();
}
double getLeftBottomLat();
double getLeftBottomLon();
double getRightTopLat();
double getRightTopLon();
}
public static class ShunYiArea implements VrAreaFilter {
@@ -97,12 +112,46 @@ class MapStyleController {
private final double rightTopLon = 116.74804;
@Override
public boolean isVrArea( MogoLocation location ) {
if ( location == null ) {
return false;
}
return location.getLat() > leftBottomLat && location.getLon() > leftBottomLon
&& location.getLat() < rightTopLat && location.getLon() < rightTopLon;
public double getLeftBottomLat() {
return leftBottomLat;
}
@Override
public double getLeftBottomLon() {
return leftBottomLon;
}
@Override
public double getRightTopLat() {
return rightTopLat;
}
@Override
public double getRightTopLon() {
return rightTopLon;
}
}
public static class OCHArea implements VrAreaFilter {
@Override
public double getLeftBottomLat() {
return 39.97645;
}
@Override
public double getLeftBottomLon() {
return 116.41673;
}
@Override
public double getRightTopLat() {
return 0;
}
@Override
public double getRightTopLon() {
return 0;
}
}
}