重新联网时刷新订单状态
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package com.mogo.och.taxi;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.location.Location;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.mogo.commons.data.BaseData;
|
||||
@@ -16,7 +18,10 @@ import com.mogo.service.adas.IMogoAdasOCHCallback;
|
||||
import com.mogo.service.adas.RemoteControlAutoPilotParameters;
|
||||
import com.mogo.service.adas.entity.AdasOCHData;
|
||||
import com.mogo.service.connection.IMogoOnMessageListener;
|
||||
import com.mogo.service.intent.IMogoIntentListener;
|
||||
import com.mogo.utils.CoordinateUtils;
|
||||
import com.mogo.utils.NetworkUtils;
|
||||
import com.mogo.utils.TipToast;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
import com.mogo.utils.network.RequestOptions;
|
||||
import com.mogo.utils.network.utils.GsonUtil;
|
||||
@@ -112,25 +117,43 @@ class MogoOCHTaxiModel {
|
||||
.getApis()
|
||||
.getAdasControllerApi()
|
||||
.addAdasOCHCallback( mNotifyCallback = new OCHArriveNotifyCallback() );
|
||||
|
||||
// 订单恢复
|
||||
String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER );
|
||||
if ( !TextUtils.isEmpty( orderInfo ) ) {
|
||||
mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiOrderResponse.class );
|
||||
if ( mCurrentOCHOrder == null ) {
|
||||
clearCurrentOCHOrder();
|
||||
return;
|
||||
}
|
||||
mRetryCounter = 0;
|
||||
queryOldOrder2RestoreOrderStatus( mCurrentOCHOrder.orderNo );
|
||||
} else {
|
||||
// 解决本地没有缓存订单号的问题
|
||||
queryOldOrder2RestoreOrderStatus( null );
|
||||
MogoApisHandler.getInstance()
|
||||
.getApis()
|
||||
.getIntentManagerApi()
|
||||
.registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener );
|
||||
if ( NetworkUtils.isConnected( mContext ) ) {
|
||||
restoreOrderInfo();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单状态,来恢复旧订单(因crash导致应用重启等)状态
|
||||
* 重新恢复订单状态
|
||||
*/
|
||||
private void restoreOrderInfo() {
|
||||
Logger.d( TAG, "重新查询订单状态" );
|
||||
mRetryCounter = 0;
|
||||
if ( mCurrentOCHOrder == null ) {
|
||||
// 订单恢复
|
||||
String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER );
|
||||
if ( !TextUtils.isEmpty( orderInfo ) ) {
|
||||
mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiOrderResponse.class );
|
||||
if ( mCurrentOCHOrder == null ) {
|
||||
// 解决本地没有缓存订单号的问题
|
||||
query2RestoreOrderStatus( null );
|
||||
} else {
|
||||
query2RestoreOrderStatus( mCurrentOCHOrder.orderNo );
|
||||
}
|
||||
} else {
|
||||
// 解决本地没有缓存订单号的问题
|
||||
query2RestoreOrderStatus( null );
|
||||
}
|
||||
} else {
|
||||
query2RestoreOrderStatus( mCurrentOCHOrder.orderNo );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单状态,来恢复旧订单(因crash导致应用重启、断网没收到推送等)状态
|
||||
* <p>
|
||||
* 已结束、已取消:清除订单状态
|
||||
* 已到达目的地:更新UI,显示到达目的地状态
|
||||
@@ -141,26 +164,34 @@ class MogoOCHTaxiModel {
|
||||
*
|
||||
* @param orderNo
|
||||
*/
|
||||
private void queryOldOrder2RestoreOrderStatus( String orderNo ) {
|
||||
private void query2RestoreOrderStatus( String orderNo ) {
|
||||
queryOCHOrderStatus( orderNo, new OCHOrderStatusCallback< OCHTaxiOrderResponse2 >() {
|
||||
@Override
|
||||
public void onSuccess( OCHTaxiOrderResponse2 data ) {
|
||||
if ( data == null || data.result == null ) {
|
||||
TipToast.shortTip( "订单已取消或已完成" );
|
||||
clearCurrentOCHOrder();
|
||||
OCHTaxiUiController.getInstance().removeFragment();
|
||||
return;
|
||||
}
|
||||
convertCurrentOrder( data );
|
||||
OCHOrderStatus status = OCHOrderStatus.valueOf( data.result.orderDispatchType );
|
||||
switch ( status ) {
|
||||
case Completed:
|
||||
case Cancel:
|
||||
TipToast.shortTip( "订单已完成" );
|
||||
clearCurrentOCHOrder();
|
||||
OCHTaxiUiController.getInstance().removeFragment();
|
||||
break;
|
||||
case Cancel:
|
||||
TipToast.shortTip( "订单已取消" );
|
||||
clearCurrentOCHOrder();
|
||||
OCHTaxiUiController.getInstance().removeFragment();
|
||||
break;
|
||||
case ArriveAtEndStation:
|
||||
mIsArriveAtEndStation = true;
|
||||
mIsArriveAtStartStation = true;
|
||||
mIsArriveAtStartStation = false;
|
||||
mIsOnTheWay2EndStation = false;
|
||||
mIsUserArriveAtStartStation = true;
|
||||
mIsUserArriveAtStartStation = false;
|
||||
OCHTaxiUiController.getInstance().addFragment();
|
||||
break;
|
||||
case ArriveAtStartStation:
|
||||
@@ -178,10 +209,10 @@ class MogoOCHTaxiModel {
|
||||
OCHTaxiUiController.getInstance().addFragment();
|
||||
break;
|
||||
case OnTheWayToEndStation:
|
||||
mIsArriveAtStartStation = true;
|
||||
mIsArriveAtStartStation = false;
|
||||
mIsArriveAtEndStation = false;
|
||||
mIsOnTheWay2EndStation = true;
|
||||
mIsUserArriveAtStartStation = true;
|
||||
mIsUserArriveAtStartStation = false;
|
||||
OCHTaxiUiController.getInstance().addFragment();
|
||||
break;
|
||||
case OnTheWayToStartStation:
|
||||
@@ -200,7 +231,7 @@ class MogoOCHTaxiModel {
|
||||
if ( mRetryCounter++ > 3 ) {
|
||||
return;
|
||||
}
|
||||
queryOldOrder2RestoreOrderStatus( orderNo );
|
||||
query2RestoreOrderStatus( orderNo );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -237,6 +268,21 @@ class MogoOCHTaxiModel {
|
||||
cacheOrderInfo2Native( mCurrentOCHOrder );
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听网络变化,避免启动机器时无网导致无法更新订单信息
|
||||
*/
|
||||
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 ) ) {
|
||||
restoreOrderInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 自车定位
|
||||
*/
|
||||
|
||||
@@ -62,7 +62,10 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
|
||||
|
||||
@Override
|
||||
public void restartAutopilot() {
|
||||
MogoOCHTaxiModel.getInstance().startAutoPilot();
|
||||
// 在自动驾驶中,才会有重新开启自动驾驶的操作
|
||||
if ( MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
|
||||
MogoOCHTaxiModel.getInstance().startAutoPilot();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,6 +173,9 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
|
||||
mStartStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().startStation );
|
||||
mEndStationName.setText( MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().endStation );
|
||||
double distance = MogoOCHTaxiModel.getInstance().getCurrentOCHOrder().travelDistance;
|
||||
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
|
||||
distance = 0;
|
||||
}
|
||||
if ( distance * 1000 >= 1000 ) {
|
||||
mDistance.setText( String.format( "%.1f km", distance ) );
|
||||
} else {
|
||||
@@ -194,8 +200,8 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
|
||||
@Override
|
||||
public void onArriveAtEndStation() {
|
||||
Logger.d( TAG, "通知达到终点" );
|
||||
onAutopilotStatusChanged( false );
|
||||
updateOrderStatus();
|
||||
showNotice( "请携带好随身物品,注意侧后\n方来车,感谢体验蘑菇智行自\n动驾驶车" );
|
||||
MogoOCHTaxiModel.getInstance().updateOCHOrderStatus( OCHOrderStatus.ArriveAtEndStation, new OCHOrderStatusCallback() {
|
||||
@Override
|
||||
public void onSuccess( Object data ) {
|
||||
@@ -222,7 +228,6 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
|
||||
@Override
|
||||
public void onTheWay2EndStation() {
|
||||
Logger.d( TAG, "通知去往终点" );
|
||||
onAutopilotStatusChanged( true );
|
||||
updateOrderStatus();
|
||||
}
|
||||
|
||||
@@ -285,10 +290,10 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
|
||||
@Override
|
||||
public void onAutoPilotStatusChanged( int status, String reason ) {
|
||||
Logger.d( TAG, "status = %s, reason = %s", status, reason );
|
||||
onAutopilotStatusChanged( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING );
|
||||
if ( status == IMogoAdasOCHCallback.STATUS_AUTOPILOT_RUNNING ) {
|
||||
resetOCHTaxiOrderAutopilotStatus();
|
||||
} else {
|
||||
TipToast.shortTip( reason );
|
||||
updateOrderStatus();
|
||||
}
|
||||
}
|
||||
@@ -343,6 +348,9 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i
|
||||
if ( !MogoOCHTaxiModel.getInstance().isOnTheWay2EndStation() ) {
|
||||
return;
|
||||
}
|
||||
if ( MogoOCHTaxiModel.getInstance().isArriveAtEndStation() ) {
|
||||
return;
|
||||
}
|
||||
if ( mLocation == null ) {
|
||||
mLocation = location;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import com.mogo.utils.network.utils.GsonUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
|
||||
public
|
||||
/**
|
||||
@@ -38,7 +38,7 @@ class LogWriter {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
writeHandler = new Handler( WorkThreadHandler.newInstance( "Logger-Writer" ).getLooper() ) {
|
||||
writeHandler = new Handler( WorkThreadHandler.newInstance( "Logger-Writer" + new Random().nextLong() ).getLooper() ) {
|
||||
@Override
|
||||
public void handleMessage( Message msg ) {
|
||||
super.handleMessage( msg );
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
/**
|
||||
* @author congtaowang
|
||||
@@ -45,7 +46,7 @@ public class IntentManager implements IMogoIntentManager {
|
||||
sInstance = null;
|
||||
}
|
||||
|
||||
private Map< String, List< IMogoIntentListener > > mListeners = new ConcurrentHashMap<>();
|
||||
private Map< String, CopyOnWriteArrayList< IMogoIntentListener > > mListeners = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void registerIntentListener( String intent, IMogoIntentListener listener ) {
|
||||
@@ -53,7 +54,7 @@ public class IntentManager implements IMogoIntentManager {
|
||||
return;
|
||||
}
|
||||
if ( !mListeners.containsKey( intent ) ) {
|
||||
mListeners.put( intent, new ArrayList<>() );
|
||||
mListeners.put( intent, new CopyOnWriteArrayList<>() );
|
||||
}
|
||||
mListeners.get( intent ).add( listener );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user