From d9c348805439bd328cfe8259df0e842e3ee8db04 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 17 Mar 2020 14:32:38 +0800 Subject: [PATCH 1/4] add voice control --- .idea/misc.xml | 2 +- .../extensions/ExtensionsModuleConst.java | 10 ++ .../entrance/EntrancePresenter.java | 97 ++++++++++++++++--- 3 files changed, 97 insertions(+), 12 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 2dc54c489f..707ee6e613 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleConst.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleConst.java index 10026c2762..0f7ae2a71b 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleConst.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/ExtensionsModuleConst.java @@ -32,6 +32,15 @@ public class ExtensionsModuleConst { public static final String CANCLE_SHARE = "com.zhidao.launcher.cancle.share"; public static final String CLOSE_PAGE = "com.zhidao.launcher.close.page"; public static final String CLOSE = "com.zhidao.launcher.close"; + + //唤醒指令 + //分享路况/上报路况/上报拥堵/上报交通检查/上报封路 唤醒 + public static final String UPLOAD_ROAD_CONDITION_AWAKEN = "com.zhidao.pathfinder.report.roadCondition"; + //关闭分享框 唤醒 + public static final String SHARE_DIALOG_CLOSE = "com.zhidao.share.close"; + //我要分享 + public static final String GO_TO_SHARE = "com.zhidao.share"; + /*** 分享 结束 **/ @@ -58,4 +67,5 @@ public class ExtensionsModuleConst { public static final String LAUNCHER_SHARE_CLICK = "Launcher_Share_Click"; public static final String CARNET_USER_UPLOAD = "CarNet_user_upload"; + } diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java index 205666e137..0ef8d0a9b9 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntrancePresenter.java @@ -3,6 +3,8 @@ package com.mogo.module.extensions.entrance; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.commons.mvp.Presenter; @@ -12,8 +14,12 @@ import com.mogo.module.extensions.ExtensionsModuleConst; import com.mogo.module.share.ShareControl; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; +import com.mogo.service.intent.IMogoIntentListener; +import com.mogo.service.intent.IMogoIntentManager; import com.mogo.utils.logger.Logger; +import org.json.JSONObject; + import java.util.HashMap; import java.util.Map; @@ -27,13 +33,18 @@ public class EntrancePresenter extends Presenter { private Context mContext; private IMogoAnalytics mAnalytics; + private static final String TAG = "EntrancePresenter"; + private IMogoIntentManager mogoIntentManager; + public EntrancePresenter(Context context, EntranceView view) { super(view); mContext = context; mAnalytics = (IMogoAnalytics) ARouter.getInstance().build(MogoServicePaths.PATH_UTILS_ANALYTICS).navigation(getContext()); + mogoIntentManager = (IMogoIntentManager) ARouter.getInstance().build(MogoServicePaths.PATH_INTENT_MANAGER).navigation(getContext()); registerUnWake(); + registerAwakeVoice(); } private void registerUnWake() { @@ -48,8 +59,6 @@ public class EntrancePresenter extends Presenter { ExtensionsModuleConst.CMD_TRAFFIC_CHECK, mogoVoiceListener); AIAssist.getInstance(mContext).registerUnWakeupCommand(ExtensionsModuleConst.UPLOAD_ROAD_CLOSURE, ExtensionsModuleConst.CMD_ROAD_CLOSURE, mogoVoiceListener); -// AIAssist.getInstance(mContext).registerUnWakeupCommand(ExtensionsModuleConst.SHARE_OIL_PRICE, -// ExtensionsModuleConst.CMD_SHARE_OIL_PRICE, mogoVoiceListener); } /** @@ -67,8 +76,6 @@ public class EntrancePresenter extends Presenter { uploadTrfficCheck(); } else if (cmd.equals(ExtensionsModuleConst.UPLOAD_ROAD_CLOSURE)) { //上报封路 uploadRoadClosed(); -// } else if (cmd.equals(ExtensionsModuleConst.SHARE_OIL_PRICE)) { //分享油价 -// shareOilPrice(); } } @@ -89,6 +96,62 @@ public class EntrancePresenter extends Presenter { } }; + /** + * 注册唤醒命令 + */ + private void registerAwakeVoice() { + mogoIntentManager.registerIntentListener(ExtensionsModuleConst.GO_TO_SHARE, mogoIntentListener); + mogoIntentManager.registerIntentListener(ExtensionsModuleConst.SHARE_DIALOG_CLOSE, mogoIntentListener); + mogoIntentManager.registerIntentListener(ExtensionsModuleConst.UPLOAD_ROAD_CONDITION_AWAKEN, mogoIntentListener); + + } + + /** + * 唤醒语音 + */ + private IMogoIntentListener mogoIntentListener = new IMogoIntentListener() { + @Override + public void onIntentReceived(String intentStr, Intent intent) { + String data = intent.getStringExtra("data"); + Logger.d(TAG, "唤醒 mogoIntentListener intentStr =" + intentStr + ">>data =" + data); + if (intentStr.equals(ExtensionsModuleConst.GO_TO_SHARE)) { //我要分享 --ok + String conditionData = intent.getStringExtra("data"); + Log.d(TAG, "唤醒 mogoIntentListener intentStr =" + intentStr + ">>conditionData =" + conditionData); + try { + JSONObject jsonObject = new JSONObject(data); + String typeString = jsonObject.get("ob").toString(); + Log.d(TAG, "mogoIntentListener specified typeString = " + typeString); + if (!TextUtils.isEmpty(typeString)) { + if (typeString.equals("封路")) { + Log.d(TAG, "mogoIntentListener 封路 -------> "); + uploadRoadClosed(); + } else if (typeString.equals("油价")) { + Log.d(TAG, "mogoIntentListener 油价 -------> "); + shareOilPrice(); + } else if (typeString.equals("交通检查")) { + Log.d(TAG, "mogoIntentListener 交通检查 -------> "); + uploadTrfficCheck(); + } + } else { + ShareControl.getInstance(mContext).showDialog(); + Log.d(TAG, "mogoIntentListener 我要分享 ----> "); + traceData("2"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } else if (intentStr.equals(ExtensionsModuleConst.UPLOAD_ROAD_CONDITION_AWAKEN)) { + //分享路况/上报路况/上报拥堵 唤醒 + Log.d(TAG, "mogoIntentListener 分享路况 唤醒 ----> "); + uploadRoadCondition(); + } else if (intentStr.equals(ExtensionsModuleConst.SHARE_DIALOG_CLOSE)) { //关闭分享框 唤醒 + ShareControl.getInstance(mContext).dismissDialog(); + Log.d(TAG, "mogoIntentListener 关闭分享框 唤醒 ----> "); + } + } + }; + + private void uploadRoadCondition() { traceTanluData("2"); sendShareReceiver("1"); @@ -97,13 +160,6 @@ public class EntrancePresenter extends Presenter { ShareControl.getInstance(mContext).dismissDialog(); } - private void shareOilPrice() { - Intent intent = new Intent(); - intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); - mContext.startActivity(intent); - traceTypeData("2"); - } - private void uploadTrfficCheck() { sendShareReceiver("2"); Logger.d("EntrancePresenter", "mogoIntentListener 分享交通检查 ----> "); @@ -118,6 +174,25 @@ public class EntrancePresenter extends Presenter { ShareControl.getInstance(mContext).dismissDialog(); } + /** + * 分享/上报按钮点击 from=1 手动点击 from=2 语音打开 + * + * @param from + */ + private void traceData(String from) { + Map properties = new HashMap<>(); + properties.put("from", from); + mAnalytics.track(ExtensionsModuleConst.LAUNCHER_SHARE_CLICK, properties); + } + + private void shareOilPrice() { + Intent intent = new Intent(); + intent.setData(Uri.parse("freshthing://com.zhidao.fresh.things/shareOilPrice")); + getContext().startActivity(intent); + traceTypeData("2"); + ShareControl.getInstance(mContext).dismissDialog(); + } + /** * 发送广播 1拥堵,2交通检查,3封路 */ From e1165682ec423c62f5b90c046a5a3dad8e646f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 17 Mar 2020 15:40:19 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=B0=94?= =?UTF-8?q?=E6=B3=A1=E5=9C=A8D=E8=BD=A6=E6=9C=BA=E4=B8=8A=E7=A7=BB?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo-module-service/src/main/res/layout/view_map_marker.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml index e2c6b38572..56cc28f5b5 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml @@ -43,7 +43,7 @@ android:layout_width="@dimen/dp_60" android:layout_height="@dimen/dp_60" android:layout_gravity="center" - android:layout_marginTop="@dimen/dp_12" + android:layout_marginTop="@dimen/dp_14" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" From d9f9da1a612da1d4de178b0e66a665e0654a9c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Tue, 17 Mar 2020 15:54:45 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=B0=94?= =?UTF-8?q?=E6=B3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/layout/view_map_marker.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml index 56cc28f5b5..dd210ad9b9 100644 --- a/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml +++ b/modules/mogo-module-service/src/main/res/layout/view_map_marker.xml @@ -29,7 +29,7 @@ android:layout_width="@dimen/dp_76" android:layout_height="@dimen/dp_76" android:layout_gravity="center" - android:layout_marginTop="@dimen/dp_6" + android:layout_marginTop="@dimen/dp_8" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -43,7 +43,7 @@ android:layout_width="@dimen/dp_60" android:layout_height="@dimen/dp_60" android:layout_gravity="center" - android:layout_marginTop="@dimen/dp_14" + android:layout_marginTop="@dimen/dp_16" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" From f0fa2485eafd0e78d3c98d9d0cce22fb7148f517 Mon Sep 17 00:00:00 2001 From: zhangyuanzhen Date: Tue, 17 Mar 2020 16:27:22 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=B1=8F=E8=94=BD=E5=85=A8=E8=A7=88?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/module/map/MapPresenter.java | 2 +- .../navi/ui/search/CategorySearchFragment.kt | 47 +++++++++++++++++-- .../impl/fragmentmanager/FragmentStack.java | 2 +- 3 files changed, 44 insertions(+), 7 deletions(-) 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 01a06696a9..e8e6ad1a86 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 @@ -287,7 +287,7 @@ public class MapPresenter extends Presenter implements case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE_UN_WAKEUP: AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null); case VoiceConstants.CMD_MAP_DISPLAY_OVERVIEW_MODE: - mView.getUIController().displayOverview(); + //mView.getUIController().displayOverview(); break; case VoiceConstants.CMD_MAP_CONTINUE_NAVI_MODE_UN_WAKEUP: AIAssist.getInstance(getContext()).speakTTSVoice("已切换", null); diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt index 2d2718653b..4be59aa3a1 100644 --- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt +++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/search/CategorySearchFragment.kt @@ -56,14 +56,18 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa private val TAG: String = "CategorySearchFragment" private var addMarkers: List? = null + var arrayList = ArrayList() private lateinit var cmds: ArrayList override fun renderSearchPoiResult(datums: List?) { mAdapter.setDatas(datums) cv_search_result.visibility = View.VISIBLE pb_path.visibility = View.GONE - var arrayList = ArrayList() - AIAssist.getInstance(context).speakTTSVoice(String.format("搜索到%d个位置,请选择",datums?.size)) + AIAssist.getInstance(context) + .speakTTSVoice(String.format("搜索到%d个位置,请选择", datums?.size)) + + arrayList.clear() + for (index in 0 until datums!!.size) { var decodeResource = BitmapFactory.decodeResource( @@ -83,18 +87,42 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa .longitude(datums[index].point?.lng ?: 0.0) arrayList.add(options) - var int2String = StringUtils.int2String(index) + var int2String = StringUtils.int2String(index+1) AIAssist.getInstance(context) .registerUnWakeupCommand( "position" + index, arrayOf("第" + int2String + "个", "第" + int2String + "条"), this ) cmds.add("position" + index) + } addMarkers = SearchServiceHolder.getMarkerManger() .addMarkers(TAG, arrayList, true) moveMapToRight() } + private fun registerVoice() { + + for (index in 0 until cmds.size) { + var int2String = StringUtils.int2String(index+1) + AIAssist.getInstance(context) + .registerUnWakeupCommand( + "position" + index, arrayOf("第" + int2String + "个", "第" + int2String + "条"), this + ) + } + + } + + override fun onHiddenChanged(hidden: Boolean) { + super.onHiddenChanged(hidden) + if (!hidden) { + addMarkers = SearchServiceHolder.getMarkerManger() + .addMarkers(TAG, arrayList, true) + registerVoice() + } else { + unRegisterVoice() + } + } + private lateinit var mAdapter: SearchCategoryAdapter private lateinit var mSearchPresenter: CategoryPresenter @@ -107,7 +135,7 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa ) mSearchPresenter = CategoryPresenter(this) lifecycle.addObserver(mSearchPresenter) - cmds=ArrayList() + cmds = ArrayList() } override fun getLayoutId(): Int { @@ -159,6 +187,10 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa ?.setIcon(getMarkerIcon(mAdapter.lastPosition)) addMarkers?.get(mAdapter.current) ?.setIcon(getMarkerIcon(mAdapter.current)) + arrayList.get(mAdapter.lastPosition) + .icon(getMarkerIcon(mAdapter.lastPosition)) + arrayList.get(mAdapter.current) + .icon(getMarkerIcon(mAdapter.current)) } private fun getMarkerIcon(index: Int): Bitmap { @@ -187,8 +219,13 @@ class CategorySearchFragment : BaseFragment(), CategoryView, IMogoVoiceCmdCallBa SearchServiceHolder.getMarkerManger() .removeMarkers(TAG) + unRegisterVoice() + } + + private fun unRegisterVoice() { cmds.forEach { - AIAssist.getInstance(context).unregisterUnWakeupCommand(it) + AIAssist.getInstance(context) + .unregisterUnWakeupCommand(it) } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java index 11b116dec0..0c602eea1d 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/fragmentmanager/FragmentStack.java @@ -78,7 +78,7 @@ public class FragmentStack { if ( descriptor.hasTransition() ) { mFragmentTransaction.setTransition( FragmentTransaction.TRANSIT_FRAGMENT_OPEN ); } - mFragmentTransaction.addToBackStack( null ); + //mFragmentTransaction.addToBackStack( null ); mFragmentTransaction.commitAllowingStateLoss(); if ( descriptor.hasTransition() ) { mFragmentManager.executePendingTransactions();