diff --git a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java index ede1bc990e..a1f374e4af 100644 --- a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java +++ b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/passport/PassportManager.java @@ -61,7 +61,7 @@ class PassportManager implements IMogoPassportManager { @Override public void onFailure( int code, String msg ) { - Logger.d( TAG, "fail" ); + Logger.d( TAG, "fail code= %s, msg=%s", code, msg ); if ( callback != null ) { callback.onError( code, msg ); } diff --git a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java index 8f77ef1ecb..5a9c740370 100644 --- a/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java +++ b/foudations/mogo-base-services-sdk/src/main/java/com/mogo/base/services/passport/PassportManager.java @@ -69,7 +69,7 @@ class PassportManager implements IMogoPassportManager { @Override public void onFailure( int code ) { - Logger.d( TAG, "fail" ); + Logger.d( TAG, "fail: code = %s", code ); if ( callback != null ) { callback.onError( code, "getTicket error." ); } @@ -79,6 +79,7 @@ class PassportManager implements IMogoPassportManager { @Override public void onFailure( int code, String msg ) { + Logger.d( TAG, "onFailure: code = %s, msg = %s", code, msg ); if ( callback != null ) { callback.onError( code, "login: " + msg ); } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java index 0e788e140a..5d299590a0 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java @@ -41,7 +41,6 @@ public abstract class MvpFragment> exten viewGroup.removeView( mRootView ); } } - mRootView = inflater.inflate(getLayoutId(), container, false); return mRootView; } @@ -90,7 +89,7 @@ public abstract class MvpFragment> exten @Nullable protected T findViewById(int id) { if (mRootView == null) { - mRootView = getView().findViewById(id); + mRootView = getView(); } if (mRootView != null) { return (T) mRootView.findViewById(id); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java index 37ba24720c..465e2dbf3c 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/TopViewAnimHelper.java @@ -671,6 +671,7 @@ public class TopViewAnimHelper { viewCaches.remove(child); IMogoTopViewStatusListener listener = statusListenerMap.remove(child); if (listener != null) { + listener.beforeViewRemoveAnim(child); listener.onViewRemoved(child); } } diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java index 7675cc9b51..e140c4e1ff 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/launchercard/LauncherCardRefresher.java @@ -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 ); diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/bean/LauncherCardAdvertisementData.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/bean/LauncherCardAdvertisementData.java index cd633c1872..5edeb7193f 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/bean/LauncherCardAdvertisementData.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/bean/LauncherCardAdvertisementData.java @@ -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;