This commit is contained in:
wangcongtao
2020-08-28 17:54:53 +08:00
parent 15c61e2dfc
commit d3a38a01b2

View File

@@ -29,7 +29,6 @@ import com.mogo.utils.storage.SharedPrefsMgr;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -54,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;
@@ -114,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;
@@ -135,9 +140,6 @@ class LauncherCardRefresher {
int index = msg.arg1;// 当前广告索引
loopRenderAdvertisements( index );
break;
case MSG_START_REFRESH_ADVERTISEMENT:
startAdvertisementsStrategy();
break;
}
}
};
@@ -154,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
);
@@ -168,7 +170,6 @@ class LauncherCardRefresher {
}
Logger.d( TAG, "start" );
mLaunchTTSText = mContext.getString( R.string.module_service_open_app_tip );
startExplorerWayStrategy();
mDefaultConfigCounter = 0;
mRefreshTicketCounter = 0;
// 延时加载数据已保证accOn之后网络恢复正常
@@ -176,13 +177,14 @@ class LauncherCardRefresher {
if ( NetworkUtils.isConnected( mContext ) ) {
delay = 0L;
}
mHandler.sendEmptyMessageDelayed( MSG_START_REFRESH_ADVERTISEMENT, delay );
mHandler.sendEmptyMessageDelayed( MSG_LOAD_NET_CONFIG, delay );
startInduceStrategy();
}
/**
* 道路事件和车友播报
* 引导策略:本地策略 & 网络策略
*/
private void startExplorerWayStrategy() {
private void startInduceStrategy() {
mHandler.sendEmptyMessageDelayed( mRefreshStrategy.getMsgType(), mRefreshStrategy.getInterval() );
mRefreshStop = false;
mStart = true;
@@ -191,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" );
}
@@ -202,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(),
@@ -224,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();
}
} );
}
@@ -355,7 +377,7 @@ class LauncherCardRefresher {
/**
* 请求广告数据
*/
private void startAdvertisementsStrategy() {
private void loadNetworkConfigStrategy() {
final Map< String, Object > query = new ParamsProvider.Builder( mContext )
.append( "modelType", 30 )
.build();
@@ -400,7 +422,7 @@ class LauncherCardRefresher {
public void onTicketGot( String ticket ) {
Logger.d( TAG, "ticket=%s", ticket );
if ( mRefreshTicketCounter < 3 ) {
startAdvertisementsStrategy();
loadNetworkConfigStrategy();
}
}
@@ -458,26 +480,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();