Merge branch 'qa_1.1.3' into dev
This commit is contained in:
@@ -20,7 +20,9 @@ import com.mogo.module.service.network.RefreshCallback;
|
||||
import com.mogo.module.service.network.RefreshModel;
|
||||
import com.mogo.module.service.network.ZhidaoRefreshModel;
|
||||
import com.mogo.module.service.network.bean.LauncherCardAdvertisementData;
|
||||
import com.mogo.service.passport.IMogoTicketCallback;
|
||||
import com.mogo.utils.AppUtils;
|
||||
import com.mogo.utils.NetworkUtils;
|
||||
import com.mogo.utils.logger.Logger;
|
||||
import com.mogo.utils.network.RequestOptions;
|
||||
import com.mogo.utils.storage.SharedPrefsMgr;
|
||||
@@ -51,13 +53,15 @@ class LauncherCardRefresher {
|
||||
private static volatile LauncherCardRefresher sInstance;
|
||||
|
||||
// 刷新道路事件/车友
|
||||
public static final int MSG_REFRESH = 2020;
|
||||
public static final int MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA = 2020;
|
||||
// 开始引导策略
|
||||
public static final int MSG_INDUCE = 2019;
|
||||
// 刷新卡片默认显示内容
|
||||
public static final int MSG_REFRESH_DEFAULT_CARD = 2021;
|
||||
// 刷新卡片广告
|
||||
public static final int MSG_REFRESH_ADVERTISEMENT = 2022;
|
||||
// 开始刷新广告数据
|
||||
public static final int MSG_START_REFRESH_ADVERTISEMENT = 2023;
|
||||
// 加载网络配置数据
|
||||
public static final int MSG_LOAD_NET_CONFIG = 2023;
|
||||
// 默认播报
|
||||
public static final int MSG_START_LOOP_DEFAULT_CARD = 2024;
|
||||
public static final long ONE_MINUTE = 60 * 1000L;
|
||||
@@ -72,6 +76,11 @@ class LauncherCardRefresher {
|
||||
*/
|
||||
private int mDefaultConfigCounter = 0;
|
||||
|
||||
/**
|
||||
* 因为缓存ticket失效导致失败的情况,需要重新请求ticket然后再次获取数据,这里重试3次
|
||||
*/
|
||||
private int mRefreshTicketCounter = 0;
|
||||
|
||||
private LauncherCardRefresher( Context context ) {
|
||||
mContext = context;
|
||||
mRefreshModel = new RefreshModel( mContext );
|
||||
@@ -106,20 +115,24 @@ class LauncherCardRefresher {
|
||||
return;
|
||||
}
|
||||
switch ( msg.what ) {
|
||||
case MSG_REFRESH:
|
||||
try {
|
||||
handleRefreshMsg();
|
||||
} catch ( Exception e ) {
|
||||
Logger.e( TAG, e, "error when refresh launcher card." );
|
||||
}
|
||||
case MSG_LOAD_NET_CONFIG:
|
||||
loadNetworkConfigStrategy();
|
||||
break;
|
||||
case MSG_REFRESH_DEFAULT_CARD:
|
||||
renderDefaultLauncherCardConfig();
|
||||
// 开启广告
|
||||
startLoopRenderAdvertisements();
|
||||
mRefreshStrategy = mRefreshStrategy.getNext();
|
||||
restart();
|
||||
break;
|
||||
case MSG_INDUCE:
|
||||
handleInduceStrategy();
|
||||
break;
|
||||
case MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA:
|
||||
try {
|
||||
handleRefreshExplorerWayOrOnlineCarMsg();
|
||||
} catch ( Exception e ) {
|
||||
Logger.e( TAG, e, "error when refresh launcher card." );
|
||||
}
|
||||
break;
|
||||
case MSG_START_LOOP_DEFAULT_CARD:
|
||||
renderDefaultLauncherCardConfig();
|
||||
break;
|
||||
@@ -127,9 +140,6 @@ class LauncherCardRefresher {
|
||||
int index = msg.arg1;// 当前广告索引
|
||||
loopRenderAdvertisements( index );
|
||||
break;
|
||||
case MSG_START_REFRESH_ADVERTISEMENT:
|
||||
startAdvertisementsStrategy();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -146,8 +156,8 @@ class LauncherCardRefresher {
|
||||
new LauncherCardRefreshStrategy(
|
||||
5 * ONE_MINUTE,
|
||||
null,
|
||||
MSG_REFRESH ),
|
||||
MSG_REFRESH ),
|
||||
MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA ),
|
||||
MSG_INDUCE ),
|
||||
MSG_REFRESH_DEFAULT_CARD
|
||||
);
|
||||
|
||||
@@ -160,16 +170,21 @@ class LauncherCardRefresher {
|
||||
}
|
||||
Logger.d( TAG, "start" );
|
||||
mLaunchTTSText = mContext.getString( R.string.module_service_open_app_tip );
|
||||
startExplorerWayStrategy();
|
||||
// 延时一分钟加载数据,已保证accOn之后网络恢复正常
|
||||
mHandler.sendEmptyMessageDelayed( MSG_START_REFRESH_ADVERTISEMENT, ONE_MINUTE );
|
||||
mDefaultConfigCounter = 0;
|
||||
mRefreshTicketCounter = 0;
|
||||
// 延时加载数据,已保证accOn之后网络恢复正常
|
||||
long delay = ONE_MINUTE;
|
||||
if ( NetworkUtils.isConnected( mContext ) ) {
|
||||
delay = 0L;
|
||||
}
|
||||
mHandler.sendEmptyMessageDelayed( MSG_LOAD_NET_CONFIG, delay );
|
||||
startInduceStrategy();
|
||||
}
|
||||
|
||||
/**
|
||||
* 道路事件和车友播报
|
||||
* 引导策略:本地策略 & 网络策略
|
||||
*/
|
||||
private void startExplorerWayStrategy() {
|
||||
private void startInduceStrategy() {
|
||||
mHandler.sendEmptyMessageDelayed( mRefreshStrategy.getMsgType(), mRefreshStrategy.getInterval() );
|
||||
mRefreshStop = false;
|
||||
mStart = true;
|
||||
@@ -178,9 +193,12 @@ class LauncherCardRefresher {
|
||||
public void stop() {
|
||||
mRefreshStop = true;
|
||||
mStart = false;
|
||||
mHandler.removeMessages( MSG_REFRESH );
|
||||
mHandler.removeMessages( MSG_INDUCE );
|
||||
mHandler.removeMessages( MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA );
|
||||
mHandler.removeMessages( MSG_REFRESH_DEFAULT_CARD );
|
||||
mHandler.removeMessages( MSG_START_LOOP_DEFAULT_CARD );
|
||||
mHandler.removeMessages( MSG_REFRESH_ADVERTISEMENT );
|
||||
mHandler.removeMessages( MSG_LOAD_NET_CONFIG );
|
||||
Logger.d( TAG, "stop" );
|
||||
}
|
||||
|
||||
@@ -189,21 +207,40 @@ class LauncherCardRefresher {
|
||||
return;
|
||||
}
|
||||
mRefreshStop = false;
|
||||
mHandler.removeMessages( MSG_REFRESH );
|
||||
mHandler.removeMessages( mRefreshStrategy.getMsgType() );
|
||||
mHandler.sendEmptyMessageDelayed( mRefreshStrategy.getMsgType(), mRefreshStrategy.getInterval() );
|
||||
}
|
||||
|
||||
private void handleRefreshMsg() {
|
||||
/**
|
||||
* 开始诱导策略
|
||||
* 第一次如果有活动,则优先播报活动,否则播报道路事件/车友
|
||||
* 后面的按各自的时间间隔播报
|
||||
*/
|
||||
private void handleInduceStrategy() {
|
||||
if ( mAdvertisements != null && !mAdvertisements.isEmpty() ) {
|
||||
loopRenderAdvertisements( 0 );
|
||||
startNextRefreshStrategy();
|
||||
} else {
|
||||
handleRefreshExplorerWayOrOnlineCarMsg();
|
||||
}
|
||||
}
|
||||
|
||||
private void startNextRefreshStrategy() {
|
||||
mRefreshStrategy = mRefreshStrategy.getNext();
|
||||
restart();
|
||||
}
|
||||
|
||||
private void handleRefreshExplorerWayOrOnlineCarMsg() {
|
||||
MogoLocation location = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation();
|
||||
if ( location == null ) {
|
||||
restart();
|
||||
return;
|
||||
}
|
||||
MogoLatLng latLng = new MogoLatLng( location.getLatitude(), location.getLongitude() );
|
||||
handleRefreshData( latLng, mRefreshStrategy.getType() );
|
||||
handleRefreshExplorerWayOrOnlineCarData( latLng, mRefreshStrategy.getType() );
|
||||
}
|
||||
|
||||
private void handleRefreshData( MogoLatLng latLng, LauncherCardRefreshType type ) {
|
||||
private void handleRefreshExplorerWayOrOnlineCarData( MogoLatLng latLng, LauncherCardRefreshType type ) {
|
||||
mRefreshModel.refreshDataSync( latLng,
|
||||
mRefreshStrategy.getRadius(),
|
||||
mRefreshStrategy.getLimit(),
|
||||
@@ -211,14 +248,12 @@ class LauncherCardRefresher {
|
||||
@Override
|
||||
public void onSuccess( MarkerResponse response ) {
|
||||
notifyRefreshChanged( type, response );
|
||||
mRefreshStrategy = mRefreshStrategy.getNext();
|
||||
restart();
|
||||
startNextRefreshStrategy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail() {
|
||||
mRefreshStrategy = mRefreshStrategy.getNext();
|
||||
restart();
|
||||
startNextRefreshStrategy();
|
||||
}
|
||||
} );
|
||||
}
|
||||
@@ -251,6 +286,9 @@ class LauncherCardRefresher {
|
||||
}
|
||||
}
|
||||
|
||||
Logger.d( TAG, "返回数据情况:道路事件:%s, 车友: %s", response.getResult().getExploreWay() == null ? 0 : response.getResult().getExploreWay().size(),
|
||||
response.getResult().getOnlineCar() == null ? 0 : response.getResult().getOnlineCar().size() );
|
||||
|
||||
if ( size == 0 ) {
|
||||
return false;
|
||||
}
|
||||
@@ -301,6 +339,7 @@ class LauncherCardRefresher {
|
||||
intent.putExtra( "v2x_card_button_name", mDefaultLauncherCardConfig.buttonContent );
|
||||
intent.putExtra( "v2x_card_startTime", mDefaultLauncherCardConfig.startTime );
|
||||
intent.putExtra( "v2x_card_endTime", mDefaultLauncherCardConfig.endTime );
|
||||
intent.putExtra( "v2x_card_is_default", true );
|
||||
mContext.sendBroadcast( intent );
|
||||
Logger.d( TAG, "发送默认配置广播到桌面卡片." );
|
||||
if ( !TextUtils.isEmpty( mDefaultLauncherCardConfig.content ) ) {
|
||||
@@ -341,7 +380,7 @@ class LauncherCardRefresher {
|
||||
/**
|
||||
* 请求广告数据
|
||||
*/
|
||||
private void startAdvertisementsStrategy() {
|
||||
private void loadNetworkConfigStrategy() {
|
||||
final Map< String, Object > query = new ParamsProvider.Builder( mContext )
|
||||
.append( "modelType", 30 )
|
||||
.build();
|
||||
@@ -369,9 +408,37 @@ class LauncherCardRefresher {
|
||||
@Override
|
||||
public void onError( String message, int code ) {
|
||||
super.onError( message, code );
|
||||
if ( code == 100046 ) {
|
||||
refreshTicket();
|
||||
}
|
||||
Logger.e( TAG, "获取配置失败 msg = %s, code = %s", message, code );
|
||||
}
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
private void refreshTicket() {
|
||||
mRefreshTicketCounter++;
|
||||
Logger.d( TAG, "刷新ticket" );
|
||||
MarkerServiceHandler.getApis().getPassportManagerApi().requestTicket( new IMogoTicketCallback() {
|
||||
@Override
|
||||
public void onTicketGot( String ticket ) {
|
||||
Logger.d( TAG, "ticket=%s", ticket );
|
||||
if ( mRefreshTicketCounter < 3 ) {
|
||||
loadNetworkConfigStrategy();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError( int code, String msg ) {
|
||||
Logger.d( TAG, "code=%s, msg=%s", code, msg );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoginSuccess( String token, String sn ) {
|
||||
Logger.d( TAG, "token=%s, sn=%s", token, sn );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
private void handleGotCarAdvertisingList( List< LauncherCardAdvertisementData.LauncherCardAdvertisement > data ) {
|
||||
@@ -399,6 +466,7 @@ class LauncherCardRefresher {
|
||||
|
||||
if ( !mAdvertisements.isEmpty() && mAdvertisements.size() > 1 ) {
|
||||
LauncherCardAdvertisementData.LauncherCardAdvertisement[] sorted = new LauncherCardAdvertisementData.LauncherCardAdvertisement[mAdvertisements.size()];
|
||||
sorted = mAdvertisements.toArray( sorted );
|
||||
Arrays.sort( sorted, ( ( o1, o2 ) -> {
|
||||
return o1.sort < o2.sort ? 1 : ( o1.sort == o2.sort ? 0 : -1 );
|
||||
} ) );
|
||||
@@ -415,26 +483,6 @@ class LauncherCardRefresher {
|
||||
mHandler.sendMessageDelayed( msg, mDefaultTTSPlayInterval );
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始按策略展示广告
|
||||
*/
|
||||
private void startLoopRenderAdvertisements() {
|
||||
Message msg = Message.obtain();
|
||||
if ( mAdvertisements == null || mAdvertisements.isEmpty() ) {
|
||||
return;
|
||||
} else {
|
||||
try {
|
||||
LauncherCardAdvertisementData.LauncherCardAdvertisement advertisement = mAdvertisements.get( 0 );
|
||||
msg.what = MSG_REFRESH_ADVERTISEMENT;
|
||||
msg.arg1 = 1;
|
||||
mHandler.sendMessageDelayed( msg, advertisement.popupNum * ONE_MINUTE );
|
||||
} catch ( Exception e ) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loopRenderAdvertisements( int index ) {
|
||||
try {
|
||||
index = index % mAdvertisements.size();
|
||||
@@ -465,6 +513,9 @@ class LauncherCardRefresher {
|
||||
intent.putExtra( "v2x_card_button_name", advertisement.buttonContent );
|
||||
intent.putExtra( "v2x_card_startTime", advertisement.startTime );
|
||||
intent.putExtra( "v2x_card_endTime", advertisement.endTime );
|
||||
intent.putExtra( "v2x_card_activity_id", advertisement.id );
|
||||
intent.putExtra( "v2x_card_timeout", 20 * 1000 );
|
||||
intent.putExtra( "v2x_card_is_default", false );
|
||||
mContext.sendBroadcast( intent );
|
||||
if ( !AppUtils.isAppForeground( mContext ) ) {
|
||||
speakTTS( advertisement.content, true );
|
||||
|
||||
@@ -32,6 +32,7 @@ class LauncherCardAdvertisementData extends BaseData {
|
||||
* 活动展示顺序 sort
|
||||
*/
|
||||
public static class LauncherCardAdvertisement {
|
||||
public String id;
|
||||
public String name;
|
||||
public int cardType;
|
||||
public String filePath;
|
||||
|
||||
Reference in New Issue
Block a user