Merge branch 'qa_1.1.3' into dev

This commit is contained in:
wangcongtao
2020-08-31 10:32:04 +08:00
6 changed files with 108 additions and 55 deletions

View File

@@ -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 );

View File

@@ -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;