+ * 2. 播报默认卡片语音
+ *
+ * @param sendConfigOnly 仅发送配置到
+ */
+ private void renderDefaultLauncherCardConfig( boolean sendConfigOnly ) {
+ if ( mDefaultLauncherCardConfig != null ) {
+ long curr = System.currentTimeMillis();
+ if ( mDefaultLauncherCardConfig.endTime > curr && mDefaultLauncherCardConfig.startTime < curr ) {
+ Intent intent = new Intent( "com.mogo.launcher.v2x.card" );
+ intent.putExtra( "v2x_card_title", mDefaultLauncherCardConfig.name );
+ intent.putExtra( "v2x_card_icon", mDefaultLauncherCardConfig.filePath );
+ intent.putExtra( "v2x_card_content", mDefaultLauncherCardConfig.cardContent );
+ 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 ) ) {
+ mLaunchTTSText = mDefaultLauncherCardConfig.content;
+ }
+ if ( mDefaultLauncherCardConfig.popupNum > 0 ) {
+ mDefaultTTSPlayInterval = mDefaultLauncherCardConfig.popupNum * ONE_MINUTE;
+ }
+ }
+ }
+
+ if ( sendConfigOnly ) {
+ return;
+ }
+
+ if ( mDefaultConfigCounter++ >= 3 ) {
+ return;
+ }
+
+ int counter = SharedPrefsMgr.getInstance( mContext ).getInt( KEY_LauncherCardTipCounter, 0 );
+ if ( counter >= 5 ) {
+ long lastTipTime = SharedPrefsMgr.getInstance( mContext ).getLong( KEY_LauncherCardTipLastTipTime, 0L );
+ if ( System.currentTimeMillis() - lastTipTime < 10 * ONE_DAY ) {
+ return;
+ } else {
+ SharedPrefsMgr.getInstance( mContext ).putInt( KEY_LauncherCardTipCounter, 0 );
+ counter = 0;
+ SharedPrefsMgr.getInstance( mContext ).putLong( KEY_LauncherCardTipLastTipTime, 0L );
+ }
+ }
+ SharedPrefsMgr.getInstance( mContext ).putInt( KEY_LauncherCardTipCounter, ++counter );
+ SharedPrefsMgr.getInstance( mContext ).putLong( KEY_LauncherCardTipLastTipTime, System.currentTimeMillis() );
+
+ try {
+ speakTTS( mLaunchTTSText, true );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ startLoopDefaultConfigStrategy();
+ }
+
+ /**
+ * 请求广告数据
+ */
+ private void loadNetworkConfigStrategy() {
+ final Map< String, Object > query = new ParamsProvider.Builder( mContext )
+ .append( "modelType", 30 )
+ .build();
+ mZhidaoRefreshModel.getRefreshApiService().getCarAdvertisingList( query )
+ .subscribeOn( Schedulers.io() )
+ .observeOn( AndroidSchedulers.mainThread() )
+ .subscribe( new SubscribeImpl< LauncherCardAdvertisementData >( RequestOptions.create( mContext ) ) {
+ @Override
+ public void onError( Throwable e ) {
+ super.onError( e );
+ Logger.e( TAG, e, "获取配置失败" );
+ }
+
+ @Override
+ public void onSuccess( LauncherCardAdvertisementData data ) {
+ super.onSuccess( data );
+ if ( data == null || data.result == null ) {
+ Logger.d( TAG, "carAdvertisingList is empty." );
+ return;
+ }
+ Logger.d( TAG, "获取配置成功" );
+ handleGotCarAdvertisingList( data.result );
+ }
+
+ @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 ) {
+ if ( data == null ) {
+ mAdvertisements = null;
+ return;
+ }
+
+ mAdvertisements = new ArrayList<>();
+ for ( LauncherCardAdvertisementData.LauncherCardAdvertisement launcherCardAdvertisement : data ) {
+ if ( launcherCardAdvertisement == null ) {
+ continue;
+ }
+ if ( launcherCardAdvertisement.cardType == LauncherCardAdvertisementData.TYPE_DEFAULT_CONFIG ) {
+ mDefaultLauncherCardConfig = launcherCardAdvertisement;
+ renderDefaultLauncherCardConfig( true );
+ } else if ( launcherCardAdvertisement.cardType == LauncherCardAdvertisementData.TYPE_ACTIVITY ) {
+ long curr = System.currentTimeMillis();
+ if ( curr > launcherCardAdvertisement.startTime && curr < launcherCardAdvertisement.endTime ) {
+ mAdvertisements.add( launcherCardAdvertisement );
+ } else {
+ Logger.w( TAG, "广告已过期 %s", launcherCardAdvertisement.cardContent );
+ }
+ }
+ }
+
+ 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 );
+ } ) );
+ mAdvertisements = Arrays.asList( sorted );
+ }
+ }
+
+ /**
+ * 默认播报 / 后台配置默认项播报策略
+ */
+ private void startLoopDefaultConfigStrategy() {
+ Message msg = Message.obtain();
+ msg.what = MSG_START_LOOP_DEFAULT_CARD;
+ mHandler.sendMessageDelayed( msg, mDefaultTTSPlayInterval );
+ }
+
+ private void loopRenderAdvertisements( int index ) {
+ try {
+ index = index % mAdvertisements.size();
+ LauncherCardAdvertisementData.LauncherCardAdvertisement advertisement = mAdvertisements.get( index );
+ Message msg = Message.obtain();
+ msg.what = MSG_REFRESH_ADVERTISEMENT;
+ msg.arg1 = ++index;
+ mHandler.sendMessageDelayed( msg, advertisement.popupNum * ONE_MINUTE );
+ renderAdvertisement( advertisement );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "loopRenderAdvertisements" );
+ }
+ }
+
+ /**
+ * 刷新广告
+ */
+ private void renderAdvertisement( LauncherCardAdvertisementData.LauncherCardAdvertisement advertisement ) {
+ if ( advertisement == null ) {
+ return;
+ }
+ long curr = System.currentTimeMillis();
+ if ( advertisement.endTime > curr && advertisement.startTime < curr ) {
+ Intent intent = new Intent( "com.mogo.launcher.v2x.card" );
+ intent.putExtra( "v2x_card_title", advertisement.name );
+ intent.putExtra( "v2x_card_icon", advertisement.filePath );
+ intent.putExtra( "v2x_card_content", advertisement.cardContent );
+ 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 );
+ }
+ Logger.d( TAG, "发送广告配置广播到桌面卡片." );
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java
index ab6e8ff02d..8f58de2d68 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/RefreshApiService.java
@@ -7,12 +7,10 @@ import com.mogo.module.service.network.bean.DemoUserInfoEntity;
import java.util.Map;
import io.reactivex.Observable;
-import io.reactivex.Single;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
-import retrofit2.http.QueryMap;
/**
* @author congtaowang
@@ -26,14 +24,17 @@ public interface RefreshApiService {
@POST( "/yycp-launcherSnapshot/launcherSnapshot/querySnapshotAsync" )
Observable< BaseData > refreshData( @FieldMap Map< String, Object > parameters );
+ @FormUrlEncoded
+ @POST( "/yycp-launcherSnapshot/launcherSnapshot/querySnapshotSync" )
+ Observable< MarkerResponse > refreshDataSync( @FieldMap Map< String, Object > parameters );
+
@FormUrlEncoded
@POST( "/yycp-launcherSnapshot/user/queryOnLineCarWithRoute" )
- Observable
+ * 接口描述
+ */
+public interface ZhidaoApiService {
+
+ /**
+ * 获取桌面卡片配置
+ *
+ * @param parameters
+ * @return
+ */
+ @GET( "/marketing/advertisingPosition/getCarAdvertisingList" )
+ Observable< LauncherCardAdvertisementData > getCarAdvertisingList( @QueryMap Map< String, Object > parameters );
+
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/ZhidaoRefreshModel.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/ZhidaoRefreshModel.java
new file mode 100644
index 0000000000..599e2883bb
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/ZhidaoRefreshModel.java
@@ -0,0 +1,66 @@
+package com.mogo.module.service.network;
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.mogo.commons.data.BaseData;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.commons.network.ParamsProvider;
+import com.mogo.commons.network.SubscribeImpl;
+import com.mogo.commons.network.Utils;
+import com.mogo.map.MogoLatLng;
+import com.mogo.module.common.entity.MarkerResponse;
+import com.mogo.module.service.ServiceConst;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.network.IMogoNetwork;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.RequestOptions;
+import com.mogo.utils.network.utils.GsonUtil;
+
+import java.util.Map;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+
+/**
+ * @author congtaowang
+ * @since 2020-01-03
+ *
+ * 使用智道的域名
+ */
+public class ZhidaoRefreshModel {
+
+ private static final String TAG = "RefreshModel";
+
+ public static final String HOST_DEV = "http://carlife-test.zhidaohulian.com";
+ public static final String HOST_TEST = "http://carlife-test.zhidaohulian.com";
+ public static final String HOST_DEMO = "http://carlife-test.zhidaohulian.com";
+ public static final String HOST_PRODUCT = "https://api.zhidaohulian.com";
+
+ private final Context mContext;
+ private ZhidaoApiService mRefreshApiService;
+
+ public ZhidaoRefreshModel( Context context ) {
+ this.mContext = context;
+ IMogoNetwork network = ( IMogoNetwork ) ARouter.getInstance().build( MogoServicePaths.PATH_SERVICES_NETWORK ).navigation( context );
+ this.mRefreshApiService = network.create( ZhidaoApiService.class, getNetHost() );
+ }
+
+ public ZhidaoApiService getRefreshApiService() {
+ return mRefreshApiService;
+ }
+
+ public static String getNetHost() {
+ switch ( DebugConfig.getNetMode() ) {
+ case DebugConfig.NET_MODE_DEV:
+ return HOST_DEV;
+ case DebugConfig.NET_MODE_QA:
+ return HOST_TEST;
+ case DebugConfig.NET_MODE_DEMO:
+ return HOST_DEMO;
+ default:
+ return HOST_PRODUCT;
+ }
+ }
+}
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
new file mode 100644
index 0000000000..5edeb7193f
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/network/bean/LauncherCardAdvertisementData.java
@@ -0,0 +1,47 @@
+package com.mogo.module.service.network.bean;
+
+import com.mogo.commons.data.BaseData;
+
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/8/24
+ *
+ * 描述
+ */
+class LauncherCardAdvertisementData extends BaseData {
+
+ // 启动展示
+ public static final int TYPE_DEFAULT_CONFIG = 1;
+ // 活动
+ public static final int TYPE_ACTIVITY = 2;
+
+ public List< LauncherCardAdvertisement > result;
+
+ /**
+ * 卡片名称 name
+ * 卡片类型 fileType 1-启动展示、2-活动播报
+ * 卡片样式 filePath
+ * 卡片文案 cardContent
+ * 按钮文案 url
+ * 语音文案 content
+ * 活动期限 是时间戳 ,还是标准时间 startTime endTime Date类型
+ * 播报频次(间隔):popupNum
+ * 活动展示顺序 sort
+ */
+ public static class LauncherCardAdvertisement {
+ public String id;
+ public String name;
+ public int cardType;
+ public String filePath;
+ public String cardContent;
+ public String buttonContent;
+ public String content;
+ public int sort;
+ public long startTime;
+ public long endTime;
+ public int popupNum; // 间隔时间:分钟
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/AccStatusReceiver.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/AccStatusReceiver.java
index a5d1c55c1c..8e3a0abc71 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/AccStatusReceiver.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/AccStatusReceiver.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.intent.IntentHandlerFactory;
+import com.mogo.utils.logger.Logger;
public
/**
@@ -15,6 +16,8 @@ public
* 描述
*/
class AccStatusReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "AccStatusReceiver";
// 诺威达 acc 状态
public static final String PARAM_ACC_STATUS = "extra_mcu_state";
@@ -24,6 +27,7 @@ class AccStatusReceiver extends BroadcastReceiver {
@Override
public void onReceive( Context context, Intent intent ) {
+ Logger.d(TAG, "收到诺威达acc广播");
MarkerServiceHandler.init( context );
IntentHandlerFactory.getInstance().handle( context, intent.getAction(), intent );
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java
index 411d36b927..d1c1876a1e 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/receiver/MogoReceiver.java
@@ -58,6 +58,8 @@ public class MogoReceiver extends BroadcastReceiver {
// 接受高德发过来的广播
public static final String ACTION_AUTO_NAVI_SEND = "AUTONAVI_STANDARD_BROADCAST_SEND";
+ public static final String ACTION_MOGO = "com.mogo.ACTION";
+
private IMogoIntentManager mMogoIntentManager;
public MogoReceiver(Context context) {
diff --git a/modules/mogo-module-service/src/main/res/values/strings.xml b/modules/mogo-module-service/src/main/res/values/strings.xml
index e25a4adb00..78e8c3f560 100644
--- a/modules/mogo-module-service/src/main/res/values/strings.xml
+++ b/modules/mogo-module-service/src/main/res/values/strings.xml
@@ -1,4 +1,7 @@