From 9e478e4a21c1e187567b5610df93f86029034b0a Mon Sep 17 00:00:00 2001 From: wangcongtao Date: Wed, 22 Apr 2020 15:15:41 +0800 Subject: [PATCH] opt --- config.gradle | 2 +- .../java/com/mogo/commons/voice/AIAssist.java | 58 ++++++--- .../commons/voice/IMogoVoiceCmdCallBack.java | 28 ++++ gradle.properties | 4 +- .../amap/navi/AMapNaviListenerAdapter.java | 2 +- .../impl/amap/navi/NaviListenerAdapter.java | 1 + .../mogo/map/impl/amap/navi/TTSSpeaker.java | 120 +++++++++++++++++ .../com/mogo/module/map/MapPresenter.java | 52 ++++---- .../com/mogo/module/map/VoiceConstants.java | 44 ++----- .../navi/ui/search/CategoryPresenter.java | 4 +- .../service/marker/MapMarkerManager.java | 121 +++++++----------- 11 files changed, 279 insertions(+), 157 deletions(-) create mode 100644 libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/TTSSpeaker.java diff --git a/config.gradle b/config.gradle index 1b9170ba35..2419f9593d 100644 --- a/config.gradle +++ b/config.gradle @@ -49,7 +49,7 @@ ext { // 公司服务 - 语音 aiassist : "com.zhidaoauto.common:service:1.0.4.10", // 语音替换方案 暂时只用TTS 解决焦点问题 - aiassistReplace : "com.zhidao.mogoVoicesdk:voice:1.0.4", + aiassistReplace : "com.zhidao.mogoVoicesdk:voice:1.0.5", // 公司服务 - 埋点 analytics : "com.elegant.analytics:analytics:1.1.19", diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index 295fd6d847..bb589895f3 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -26,7 +26,7 @@ import java.util.concurrent.ConcurrentHashMap; *

* 语音助手通信助手 */ -public class AIAssist implements VoiceClient.VoiceCmdCallBack , OnTtsListener { +public class AIAssist implements VoiceClient.VoiceCmdCallBack, OnTtsListener { private static final String TAG = "AIAssist"; private static volatile AIAssist sInstance; @@ -87,9 +87,9 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack , OnTtsListener { /** * 初始化 */ - private void initSpeech( Context context ){ + private void initSpeech( Context context ) { mogoVoiceManager = MogoVoiceManagerImpl.getInstance(); - mogoVoiceManager.init(context, new OnConnStatusListener() { + mogoVoiceManager.init( context, new OnConnStatusListener() { @Override public void onSuccess() { mInitReady = true; @@ -99,11 +99,12 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack , OnTtsListener { public void onFailed() { } - }); + } ); } /** * 是否语音注册成功 + * * @return */ public boolean hasFlush() { @@ -425,36 +426,59 @@ public class AIAssist implements VoiceClient.VoiceCmdCallBack , OnTtsListener { return false; } - public void speakTTSAndDuck(String text ){ - speakTTSAndDuck(text,null); + public void speakTTSAndDuck( String text ) { + speakTTSAndDuck( text, null ); } - public void speakTTSAndDuck( String text, IMogoVoiceCmdCallBack callBack ){ + public void speakTTSAndDuck( String text, IMogoVoiceCmdCallBack callBack ) { try { - if( mInitReady ){ + if ( mInitReady ) { mSpeakVoiceMap.put( text, callBack ); - mogoVoiceManager.toSpeak( text, -3, this); + mogoVoiceManager.toSpeak( text, -3, this ); } } catch ( Exception e ) { } } - @Override - public void onTtsStart(String ext) { + public void shutUp( String ttsId, String text ) { + try { + mSpeakVoiceMap.remove( text ); + mogoVoiceManager.shutUp( ttsId ); + } catch( Exception e ){ + } } - @Override - public void onTtsFinish(String speakText) { - IMogoVoiceCmdCallBack callBack = mSpeakVoiceMap.remove( speakText ); - if ( callBack != null ) { - callBack.onSpeakEnd( speakText ); + public void clearTTSCallback(String text){ + try { + mSpeakVoiceMap.remove( text ); + } catch ( Exception e ) { + e.printStackTrace(); } } @Override - public void onTtsError(String ext) { + public void onTtsStart( String ttsId, String text ) { + IMogoVoiceCmdCallBack callBack = mSpeakVoiceMap.get( text ); + if ( callBack != null ) { + callBack.onTTSStart( ttsId, text ); + } + } + @Override + public void onTtsFinish( String ttsId, String text ) { + IMogoVoiceCmdCallBack callBack = mSpeakVoiceMap.remove( text ); + if ( callBack != null ) { + callBack.onTTSEnd( ttsId, text ); + } + } + + @Override + public void onTtsError( String ttsId, String text ) { + IMogoVoiceCmdCallBack callBack = mSpeakVoiceMap.remove( text ); + if ( callBack != null ) { + callBack.onTTSError( ttsId, text ); + } } } diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/IMogoVoiceCmdCallBack.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/IMogoVoiceCmdCallBack.java index b213d117fa..58365cd886 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/IMogoVoiceCmdCallBack.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/IMogoVoiceCmdCallBack.java @@ -1,6 +1,34 @@ package com.mogo.commons.voice; public interface IMogoVoiceCmdCallBack { + + /** + * 新SDK接口 + * + * @param ttsId + * @param tts + */ + default void onTTSStart( String ttsId, String tts ) { + } + + /** + * 新SDK接口 + * + * @param ttsId + * @param tts + */ + default void onTTSEnd( String ttsId, String tts ) { + } + + /** + * 新SDK接口 + * + * @param ttsId + * @param tts + */ + default void onTTSError( String ttsId, String tts ) { + } + /** * 免唤醒命令响应回调 * diff --git a/gradle.properties b/gradle.properties index 4ab0e0d987..16d60db9d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -54,7 +54,7 @@ MOGO_MODULE_GUIDE_VERSION=1.0.3.8 ## 工程外部模块 # 探路 -MOGO_MODULE_TANLU_VERSION=1.0.4.2 +MOGO_MODULE_TANLU_VERSION=1.0.4.3 # 车聊聊 CARCHATTING_VERSION=1.0.3.2-SNAPSHOT # 车聊聊接口 @@ -74,4 +74,4 @@ MOGO_MODULE_PUSH_VERSION=1.0.1 # 广告资源位 MOGO_MODULE_AD_CARD_VERSION=1.0.1 # 新鲜事 -MOGO_MODULE_FRESH_NEWS_VERSION=1.0.3.2 +MOGO_MODULE_FRESH_NEWS_VERSION=1.0.3.3 diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java index 5e1eff04c3..fe16b38c0e 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/AMapNaviListenerAdapter.java @@ -66,7 +66,7 @@ public abstract class AMapNaviListenerAdapter implements AMapNaviListener { public void onGetNavigationText( String s ) { mLastSpeakWord = s; Logger.d( TAG, s ); - AIAssist.getInstance(AbsMogoApplication.getApp()).speakTTSAndDuck(s); + TTSSpeaker.getInstance().speakTTS( s ); } @Override diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java index c402fdc0a4..96578329ed 100644 --- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java @@ -236,6 +236,7 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter { } public void stopNavi() { + TTSSpeaker.getInstance().shutUp(); mNaviOverlayHelper.clearCalculatedOverlay(); setStopped( true ); setNaviing( false ); diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/TTSSpeaker.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/TTSSpeaker.java new file mode 100644 index 0000000000..dd5c6ec2f6 --- /dev/null +++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/TTSSpeaker.java @@ -0,0 +1,120 @@ +package com.mogo.map.impl.amap.navi; + +import android.text.TextUtils; + +import com.mogo.commons.AbsMogoApplication; +import com.mogo.commons.voice.AIAssist; +import com.mogo.commons.voice.IMogoVoiceCmdCallBack; + +import java.util.LinkedList; + +/** + * @author congtaowang + * @since 2020-04-21 + *

+ * 播报导航TTS + *

+ * 策略:队列缓存预播报的 tts,然后上一句播完后 + */ +public class TTSSpeaker implements IMogoVoiceCmdCallBack { + + private static volatile TTSSpeaker sInstance; + + private TTSSpeaker() { + } + + public static TTSSpeaker getInstance() { + if ( sInstance == null ) { + synchronized ( TTSSpeaker.class ) { + if ( sInstance == null ) { + sInstance = new TTSSpeaker(); + } + } + } + return sInstance; + } + + public synchronized void release() { + sInstance = null; + } + + private LinkedList< String > mWaiting = new LinkedList<>(); + + private String mLastTts = null; + private String mLastTtsId = null; + + public synchronized void speakTTS( String tts ) { + if ( TextUtils.isEmpty( tts ) ) { + return; + } + mWaiting.add( tts ); + peekAndSpeak(); + } + + public synchronized void shutUp() { + if ( mLastTtsId != null ) { + AIAssist.getInstance( AbsMogoApplication.getApp() ).shutUp( mLastTtsId, mLastTts ); + mWaiting.clear(); + mLastTtsId = null; + mLastTts = null; + } + } + + @Override + public void onCmdSelected( String cmd ) { + + } + + @Override + public void onCmdAction( String speakText ) { + + } + + @Override + public void onCmdCancel( String speakText ) { + + } + + @Override + public void onSpeakEnd( String speakText ) { + + } + + @Override + public void onSpeakSelectTimeOut( String speakText ) { + + } + + @Override + public void onTTSStart( String ttsId, String tts ) { + if ( TextUtils.equals( mLastTts, tts ) ) { + mLastTtsId = ttsId; + } + } + + @Override + public void onTTSEnd( String ttsId, String tts ) { + mLastTtsId = null; + peekAndSpeak(); + } + + @Override + public void onTTSError( String ttsId, String tts ) { + mLastTtsId = null; + peekAndSpeak(); + } + + private synchronized void peekAndSpeak() { + if ( mWaiting.isEmpty() ) { + mLastTts = null; + mLastTtsId = null; + return; + } + if ( mLastTtsId != null ) { + // 上一句还没有播完 + return; + } + mLastTts = mWaiting.pop(); + AIAssist.getInstance( AbsMogoApplication.getApp() ).speakTTSAndDuck( mLastTts, this ); + } +} diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java index f94a264cc1..587133880e 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapPresenter.java @@ -135,7 +135,7 @@ public class MapPresenter extends Presenter< MapView > implements int navi_route_prefer = intent.getIntExtra( "NAVI_ROUTE_PREFER", type ); - }else if (key_type == 20009) { + } else if ( key_type == 20009 ) { onOpenNavi(); } @@ -173,12 +173,14 @@ public class MapPresenter extends Presenter< MapView > implements if ( mStatusManager.isMainPageOnResume() ) { mStatusManager.setDisplayOverview( TAG, false ); mView.getUIController().recoverLockMode(); + AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); } else { mLauncher.backToLauncher( getContext() ); UiThreadHandler.postDelayed( () -> { try { mStatusManager.setDisplayOverview( TAG, false ); mView.getUIController().recoverLockMode(); + AIAssist.getInstance( getContext() ).speakTTSVoice( "已为您继续导航" ); } catch ( Exception e ) { e.printStackTrace(); } @@ -195,9 +197,20 @@ public class MapPresenter extends Presenter< MapView > implements Logger.d( TAG, "ADAS模式忽略该请求." ); return; } - mStatusManager.setUserInteractionStatus( TAG, true, false ); - mStatusManager.setDisplayOverview( TAG, true ); - mView.getUIController().displayOverview( mDisplayOverviewBounds ); + if ( !mStatusManager.isMainPageOnResume() ) { + mStatusManager.setUserInteractionStatus( TAG, true, false ); + mStatusManager.setDisplayOverview( TAG, true ); + mView.getUIController().displayOverview( mDisplayOverviewBounds ); + AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" ); + } else { + mLauncher.backToLauncher( getContext() ); + UiThreadHandler.postDelayed( () -> { + mStatusManager.setUserInteractionStatus( TAG, true, false ); + mStatusManager.setDisplayOverview( TAG, true ); + mView.getUIController().displayOverview( mDisplayOverviewBounds ); + AIAssist.getInstance( getContext() ).speakTTSVoice( "展示全程路线" ); + }, 2_000L ); + } } private void zoomMap( boolean zoomIn ) { @@ -225,11 +238,12 @@ public class MapPresenter extends Presenter< MapView > implements } } - private void onOpenNavi(){ + private void onOpenNavi() { mLauncher.backToLauncher( getContext() ); if ( !mMogoMapService.getNavi( getContext() ).isNaviing() && !mStatusManager.isSearchUIShow() ) { mMogoAddressManager.goSearch(); } + AIAssist.getInstance( getContext() ).speakTTSVoice( "已打开" ); } @Override @@ -261,6 +275,10 @@ public class MapPresenter extends Presenter< MapView > implements ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_right_margin ), ResourcesHelper.getDimensionPixelSize( getContext(), R.dimen.module_map_display_overview_bottom_margin ) ); + + for ( String cmd : VoiceConstants.sUnUnRegisterCmds ) { + mMogoIntentManager.registerIntentListener( cmd, this ); + } } @Override @@ -342,34 +360,20 @@ public class MapPresenter extends Presenter< MapView > implements case VoiceConstants.CMD_MAP_3D_UN_WAKEUP: case VoiceConstants.CMD_MAP_3D: mView.getUIController().changeMapMode( EnumMapUI.CarUp_3D ); - break; case VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP: case VoiceConstants.CMD_MAP_DAY_TIME_MODE: mView.getUIController().changeMapMode( EnumMapUI.Type_Light ); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - - //case VoiceConstants.CMD_MAP_GO_COMPANY_UN_WAKEUP: - //case VoiceConstants.CMD_MAP_GO_COMPANY: - // mSearchManager.goCompany(); - // break; - // - //case VoiceConstants.CMD_MAP_GO_HOME_UN_WAKEUP: - //case VoiceConstants.CMD_MAP_GO_HOME: - // mSearchManager.goHome(); - // break; - case VoiceConstants.CMD_MAP_HISTORY_UN_WAKEUP: case VoiceConstants.CMD_MAP_HISTORY: onOpenNavi(); break; - case VoiceConstants.CMD_MAP_STOP_NAVI_MODE_UN_WAKEUP: case VoiceConstants.CMD_MAP_STOP_NAVI_MODE: mSearchManager.showMain(); break; - case VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP: case VoiceConstants.CMD_MAP_NIGHT_MODE: mView.getUIController().changeMapMode( EnumMapUI.Type_Night ); @@ -391,25 +395,15 @@ public class MapPresenter extends Presenter< MapView > implements mView.getUIController().changeMapMode( EnumMapUI.CarUp_2D ); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); break; - - //case VoiceConstants.CMD_MAP_GEO_NEARBY: - // if (intent != null) { - // String keywords = intent.getStringExtra("keyword"); - // mSearchManager.showCategory(keywords); - // } - case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE: case VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP: mSearchManager.speakDraft(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; - case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE: case VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP: mSearchManager.speakDetail(); AIAssist.getInstance( getContext() ).speakTTSVoice( "已切换", null ); - break; case VoiceConstants.CMD_MAP_SPEAK_REMAIN: break; diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java index ac7113e13a..8ac087ef15 100644 --- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java +++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java @@ -121,7 +121,7 @@ public class VoiceConstants { */ public static final String CMD_MAP_GEO_NEARBY = "com.ileja.navi.geo.nearby"; public static final String CMD_MAP_GEO_NEARBY_WAKEUP = "CMD_MAP_GEO_NEARBY_WAKEUP"; - public static final String[] CMD_MAP_GEO_NEARBY_TRIGGER_WORDS = {"查找附近的","查找附近的"}; + public static final String[] CMD_MAP_GEO_NEARBY_TRIGGER_WORDS = {"查找附近的", "查找附近的"}; /** * 车头朝上 @@ -136,12 +136,12 @@ public class VoiceConstants { public static final String CMD_MAP_NORTH_UP_MODE = "com.ileja.traffic.north.up"; public static final String CMD_MAP_NORTH_UP_MODE_UN_WAKEUP = "CMD_MAP_NORTH_UP_MODE_UN_WAKEUP"; public static final String[] CMD_MAP_NORTH_UP_MODE_TRIGGER_WORDS = {"北朝上"}; - /** + /** * 简洁模式 */ public static final String CMD_MAP_SPEAK_DRAFT_MODE = "com.ileja.traffic.speak.draft"; public static final String CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP = "CMD_MAP_SPEAK_DRAFT_MODE_UN_WAKEUP"; - public static final String[] CMD_MAP_SPEAK_DRAFT_MODE_TRIGGER_WORDS = {"简洁模式","简洁播报"}; + public static final String[] CMD_MAP_SPEAK_DRAFT_MODE_TRIGGER_WORDS = {"简洁模式", "简洁播报"}; /** @@ -149,40 +149,18 @@ public class VoiceConstants { */ public static final String CMD_MAP_SPEAK_DETAIL_MODE = "com.ileja.traffic.speak.detail"; public static final String CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP = "CMD_MAP_SPEAK_DETAIL_MODE_UN_WAKEUP"; - public static final String[] CMD_MAP_SPEAK_DETAIL_MODE_TRIGGER_WORDS = {"详细模式","详细播报"}; + public static final String[] CMD_MAP_SPEAK_DETAIL_MODE_TRIGGER_WORDS = {"详细模式", "详细播报"}; /** * 播报当前导航剩余里程和时间 */ public static final String CMD_MAP_SPEAK_REMAIN = "com.ileja.traffic.speak.remain"; public static final String CMD_MAP_SPEAK_REMAIN_UN_WAKEUP = "CMD_MAP_SPEAK_REMAIN_UN_WAKEUP"; - public static final String[] CMD_MAP_SPEAK_REMAIN_TRIGGER_WORDS = {"还有多久","多久到","还有多远"}; - - - //mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_OVERVIEW_BACK_NAVI).setWord("继续导航").setPinyin("ji xu dao hang").setThreshold("0.21").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_CLOSEMAP).setWord("关闭导航").setPinyin("guan bi dao hang").setThreshold("0.19").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_CLOSEMAP).setWord("关闭地图").setPinyin("guan bi di tu").setThreshold("0.215").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_CLOSEMAP).setWord("退出导航").setPinyin("tui chu dao hang").setThreshold("0.2").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_CLOSEMAP).setWord("退出地图").setPinyin("tui chu di tu").setThreshold("0.16").addGreeting("")); - // - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_OPEN_2D_CAR).setWord("车头朝上").setPinyin("che tou chao shang").setThreshold("0.1").addGreeting("车头朝上")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_OPEN_2D_NORTH).setWord("北朝上").setPinyin("bei chao shang").setThreshold("0.14").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_OPEN_3D).setWord("三地模式").setPinyin("san di mo shi").setThreshold("0.13").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_OPEN_2D_NORTH).setWord("二地模式").setPinyin("er di mo shi").setThreshold("0.185").addGreeting("")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_FLEX_UP).setWord("放大地图").setPinyin("fang da di tu").setThreshold("0.17").addGreeting("已放大")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_FLEX_DOWN).setWord("缩小地图").setPinyin("suo xiao di tu").setThreshold("0.125").addGreeting("已缩小")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_MODE_DAY).setWord("白天模式").setPinyin("bai tian mo shi").setThreshold("0.105").addGreeting("切换到白天模式")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_MODE_NIGHT).setWord("夜间模式").setPinyin("ye jian mo shi").setThreshold("0.11").addGreeting("切换到夜间模式")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_MODE_AUTO).setWord("自动模式").setPinyin("zi dong mo shi").setThreshold("0.11").addGreeting("切换到自动模式")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_OPEN_LIVE).setWord("打开路况").setPinyin("da kai lu kuang").setThreshold("0.125").addGreeting("路况已打开")); - // mWakeupWordsList.add(new WakeupWord().setAction(NavConstants.WakeUpCommandApi.COMMAND_MAP_NAVI_CLOSE_LIVE).setWord("关闭路况").setPinyin("guan bi lu kuang").setThreshold("0.1").addGreeting("路况已关闭")); - - - - + public static final String[] CMD_MAP_SPEAK_REMAIN_TRIGGER_WORDS = {"还有多久", "多久到", "还有多远"}; public static final Map< String, String[] > sVoiceCmds = new HashMap<>(); public static final List< String > sCmds = new ArrayList<>(); + public static final List< String > sUnUnRegisterCmds = new ArrayList<>(); static { // 免唤醒 @@ -217,16 +195,16 @@ public class VoiceConstants { sCmds.add( VoiceConstants.CMD_MAP_TRAFFIC_MODE ); sCmds.add( VoiceConstants.CMD_MAP_UN_TRAFFIC_MODE ); sCmds.add( VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE ); - sCmds.add( VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE ); - sCmds.add( VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE ); sCmds.add( VoiceConstants.CMD_MAP_CAR_UP_MODE ); sCmds.add( VoiceConstants.CMD_MAP_NORTH_UP_MODE ); - //sCmds.add( VoiceConstants.CMD_MAP_GO_HOME ); - //sCmds.add( VoiceConstants.CMD_MAP_GO_COMPANY ); - sCmds.add( VoiceConstants.CMD_MAP_HISTORY ); sCmds.add( VoiceConstants.CMD_MAP_STOP_NAVI_MODE ); sCmds.add( VoiceConstants.CMD_MAP_SPEAK_DRAFT_MODE ); sCmds.add( VoiceConstants.CMD_MAP_SPEAK_DETAIL_MODE ); sCmds.add( VoiceConstants.CMD_MAP_SPEAK_REMAIN ); + + // 退到后台不注销的命令 + sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE ); + sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE ); + sUnUnRegisterCmds.add( VoiceConstants.CMD_MAP_HISTORY ); } } diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java index 0e85d32520..4dc1c77384 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategoryPresenter.java @@ -71,7 +71,9 @@ public class CategoryPresenter extends Presenter { inputtipsSearch.setPoiSearchListener(new IMogoPoiSearchListener() { @Override public void onPoiSearched(MogoPoiResult result, int errorCode) { - mView.renderSearchPoiResult(result.getPois()); + if ( result != null ) { + mView.renderSearchPoiResult(result.getPois()); + } } @Override public void onPoiItemSearched(MogoPoiItem item, int errorCode) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index 1194162f1c..7a9dfae316 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -12,6 +12,7 @@ import com.mogo.map.marker.IMogoMarkerClickListener; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.marker.MogoMarkerOptions; import com.mogo.map.marker.MogoMarkersHandler; +import com.mogo.module.common.ModuleNames; import com.mogo.module.common.entity.MarkerCarPois; import com.mogo.module.common.entity.MarkerCardResult; import com.mogo.module.common.entity.MarkerExploreWay; @@ -146,46 +147,13 @@ public class MapMarkerManager implements IMogoMarkerClickListener, // 数据统计代码 final Map properties = new HashMap<>(); - switch (mLastCheckMarker.getOwner()) { - case ServiceConst.CARD_TYPE_CARS_CHATTING: - properties.put("type", 3); - break; - case ServiceConst.CARD_TYPE_USER_DATA: - properties.put("type", 5); - break; - case ServiceConst.CARD_TYPE_ROAD_CONDITION: - properties.put("type", 2); - break; - case ServiceConst.CARD_TYPE_NOVELTY: - MarkerShowEntity showEntity = (MarkerShowEntity) mLastCheckMarker.getObject(); - Object bindObj = showEntity.getBindObj(); - if (bindObj instanceof MarkerNoveltyInfo) { - switch (((MarkerNoveltyInfo) bindObj).getPoiType()) { - case MarkerPoiTypeEnum.GAS_STATION: - properties.put("type", 4); - break; - case MarkerPoiTypeEnum.TRAFFIC_CHECK: - properties.put("type", 8); - break; - case MarkerPoiTypeEnum.ROAD_CLOSED: - properties.put("type", 7); - break; - case MarkerPoiTypeEnum.SHOP_DISCOUNT: - properties.put("type", 9); - break; - case MarkerPoiTypeEnum.FOURS_4S: - properties.put("type", 10); - break; - } - } - break; - case ServiceConst.CARD_TYPE_SHARE_MUSIC: - properties.put("type", 6); - break; + properties.put( "poitype", mLastCheckMarker.getOwner() ); + MarkerShowEntity showEntity = (MarkerShowEntity) mLastCheckMarker.getObject(); + Object bindObj = showEntity.getBindObj(); + if (bindObj instanceof MarkerNoveltyInfo) { + properties.put( "contenttype", ((MarkerNoveltyInfo) bindObj).getPoiType() ); } - MarkerServiceHandler.getMogoAnalytics().track("Launcher_Icon_Click", properties); - } catch (Exception e) { e.printStackTrace(); } @@ -656,49 +624,41 @@ public class MapMarkerManager implements IMogoMarkerClickListener, List noveltyInfoList = markerCardResult.getNoveltyInfo(); int size = onlineCarList == null ? 0 : onlineCarList.size(); - fillNumberTrackEventBody(array, 3, size); + fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_USER_DATA, size); size = exploreWayList == null ? 0 : exploreWayList.size(); - fillNumberTrackEventBody(array, 1, size); + fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_ROAD_CONDITION, size); size = shareMusicList == null ? 0 : shareMusicList.size(); - fillNumberTrackEventBody(array, 4, size); - - int num_gas_station = 0; - int num_traffic_check = 0; - int num_road_closed = 0; - int num_shop_discount = 0; - int num_fours_shop = 0; + fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_SHARE_MUSIC, size); if (noveltyInfoList != null) { + JSONObject novelty = fillPoiTypeTrackBody(array, ModuleNames.CARD_TYPE_NOVELTY, size); + Map counter = new HashMap<>( ); for (MarkerNoveltyInfo markerNoveltyInfo : noveltyInfoList) { if (markerNoveltyInfo == null) { continue; } - switch (markerNoveltyInfo.getPoiType()) { - case MarkerPoiTypeEnum.GAS_STATION: - num_gas_station++; - break; - case MarkerPoiTypeEnum.TRAFFIC_CHECK: - num_traffic_check++; - break; - case MarkerPoiTypeEnum.ROAD_CLOSED: - num_road_closed++; - break; - case MarkerPoiTypeEnum.SHOP_DISCOUNT: - num_shop_discount++; - break; - case MarkerPoiTypeEnum.FOURS_4S: - num_fours_shop++; - break; + String childType = markerNoveltyInfo.getPoiType(); + if ( !counter.containsKey( childType ) ) { + counter.put( childType, 0 ); + } + int s = counter.get( childType ).intValue(); + counter.put( childType, s+1 ); + } + if ( !counter.isEmpty() ) { + JSONArray onlineCarJsonArray = new JSONArray(); + for ( Map.Entry< String, Integer > entry : counter.entrySet() ) { + fillPoiChildTypeTrackBody(onlineCarJsonArray, entry.getKey(), entry.getValue()); + } + if ( onlineCarJsonArray.length() > 0 ) { + try { + novelty.put( "content", onlineCarJsonArray ); + } catch ( JSONException e ) { + e.printStackTrace(); + } } } } - fillNumberTrackEventBody(array, 2, num_gas_station); - fillNumberTrackEventBody(array, 6, num_road_closed); - fillNumberTrackEventBody(array, 5, num_traffic_check); - fillNumberTrackEventBody(array, 7, num_shop_discount); - fillNumberTrackEventBody(array, 8, num_fours_shop); - try { if (array.length() == 0) { return; @@ -750,13 +710,28 @@ public class MapMarkerManager implements IMogoMarkerClickListener, } /** - * 统计埋点 + * 大而全数据计数埋点 */ - private synchronized static void fillNumberTrackEventBody(JSONArray arr, int type, int size) { + private synchronized static JSONObject fillPoiTypeTrackBody( JSONArray arr, String poiType, int poiTypeNum) { JSONObject object = new JSONObject(); try { - object.put("type", type); - object.put("num", size); + object.put("poitype", poiType); + object.put("num", poiTypeNum); + if (arr != null) { + arr.put(object); + } + return object; + } catch (JSONException e) { + e.printStackTrace(); + } + return null; + } + + private synchronized static void fillPoiChildTypeTrackBody(JSONArray arr, String childType, int childTypeNum){ + JSONObject object = new JSONObject(); + try { + object.put("contenttype", childType); + object.put("num", childTypeNum); if (arr != null) { arr.put(object); }