From 9c4fa8d8d12455d89b8ec2603a6d5492330f33b4 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Tue, 22 Sep 2020 19:06:20 +0800 Subject: [PATCH] add voice guide --- .../module/extensions/bean/CommonConfig.java | 50 +++++++ .../extensions/bean/CommonConfigResponse.java | 13 ++ .../extensions/entrance/EntranceFragment.java | 130 ++++++++++++++++++ .../entrance/EntrancePresenter.java | 46 +++++++ .../extensions/net/GetConfigApiServices.java | 23 ++++ .../src/main/res/values/strings.xml | 21 +++ .../com/mogo/module/share/ShareControl.java | 2 + .../module/share/constant/ShareConstants.java | 9 +- .../mogo/module/share/manager/UploadHelper.kt | 6 +- .../mogo/module/share/net/ShareApiService.kt | 2 +- .../src/main/res/values/strings.xml | 20 --- 11 files changed, 295 insertions(+), 27 deletions(-) create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfig.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfigResponse.java create mode 100644 modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/net/GetConfigApiServices.java diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfig.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfig.java new file mode 100644 index 0000000000..0f9f7cd97a --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfig.java @@ -0,0 +1,50 @@ +package com.mogo.module.extensions.bean; + +import com.mogo.commons.data.BaseData; + +/** + * @author lixiaopeng + * @description + * @since 2020/9/22 + */ +public class CommonConfig { + + public Active active;//活动配置 + public Auth auth; //授权配置 + public Speech speech; //语音播报次数 + + public CommonConfig(Active active, Auth auth, Speech speech) { + this.active = active; + this.auth = auth; + this.speech = speech; + } + + public class Active{ + public String imageUrl; + public String webUrl; + public int status; + + Active(String imageUrl, String webUrl, int status) { + this.imageUrl = imageUrl; + this.webUrl = webUrl; + this.status = status; + } + } + + + public class Speech{ + public int count; + + Speech(int count) { + this.count = count; + } + } + + public class Auth{ + int isNeedAuth; + + Auth(int isNeedAuth) { + this.isNeedAuth = isNeedAuth; + } + } +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfigResponse.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfigResponse.java new file mode 100644 index 0000000000..e4e640d788 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/bean/CommonConfigResponse.java @@ -0,0 +1,13 @@ +package com.mogo.module.extensions.bean; + +import com.mogo.commons.data.BaseData; + +/** + * @author lixiaopeng + * @description + * @since 2020/9/22 + */ +public class CommonConfigResponse extends BaseData { + + public CommonConfig result; +} diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java index d1f640ec5a..a940cb0e56 100644 --- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; @@ -21,6 +22,8 @@ import com.bumptech.glide.request.RequestOptions; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.mvp.MvpFragment; +import com.mogo.commons.voice.AIAssist; +import com.mogo.map.MogoLatLng; import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationClient; import com.mogo.map.location.MogoLocation; @@ -64,11 +67,22 @@ import com.mogo.utils.TipToast; import com.mogo.utils.UiThreadHandler; import com.mogo.utils.glide.GlideApp; import com.mogo.utils.logger.Logger; +import com.mogo.utils.storage.SharedPrefsMgr; import java.util.HashMap; import java.util.Map; import java.util.Random; +import static com.mogo.module.share.constant.ShareConstants.KEY_CLICK_SHARE_BUTTON; +import static com.mogo.module.share.constant.ShareConstants.KEY_CLICK_SHARE_TIME; +import static com.mogo.module.share.constant.ShareConstants.KEY_SERVER_SHOW_DAY_COUNT; +import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_INNER_GUIDE; +import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_INNER_GUIDE_TIME; +import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_OUTER_GUIDE; +import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_OUTER_GUIDE_TIME; +import static com.mogo.module.share.constant.ShareConstants.ONE_DAY_TIME; +import static com.mogo.module.share.constant.ShareConstants.SEVEN_DAY_TIME; + /** * @author congtaowang * @since 2020-01-07 @@ -123,6 +137,12 @@ public class EntranceFragment extends MvpFragment { showShareDialog(); + playShareGuideVoice(); }); mDisplayOverview = findViewById(R.id.module_ext_id_display_overview); @@ -320,8 +341,110 @@ public class EntranceFragment extends MvpFragment { + playShareOuterGuideVoice(); + }, 5_000L + ); } + Random random = new Random(); + + /** + * 外部触发引导 + */ + private void playShareOuterGuideVoice() { + long intervalTime = SharedPrefsMgr.getInstance(getContext()).getLong(KEY_SHARE_OUTER_GUIDE_TIME, 0); + int shareItemSum = SharedPrefsMgr.getInstance(getContext()).getInt(KEY_SHARE_OUTER_GUIDE, 0); + int serverIssueCount = SharedPrefsMgr.getInstance(getContext()).getInt(KEY_SERVER_SHOW_DAY_COUNT, 0); //TODO 默认6 + Log.d(TAG, " playShareOuterGuideVoice shareItemSum = " + shareItemSum + "---- intervalTime = " + intervalTime + "----serverIssueCount = " + serverIssueCount); + + if (shareItemSum < serverIssueCount) { + long time = System.currentTimeMillis(); + Log.d(TAG, "playShareOuterGuideVoice time = " + time); + if (intervalTime == 0) { + Log.d(TAG, " playShareOuterGuideVoice -----1-----"); + SharedPrefsMgr.getInstance(getContext()).putLong(KEY_SHARE_OUTER_GUIDE_TIME, time); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_SHARE_OUTER_GUIDE, ++shareItemSum); + AIAssist.getInstance(getContext()).speakTTSVoice(mOuterGuideVoiceStrings[random.nextInt(3)]); + } else { + Log.d(TAG, " playShareOuterGuideVoice else interval = " + (time - intervalTime)); + if ((time - intervalTime) > SEVEN_DAY_TIME) { + SharedPrefsMgr.getInstance(getContext()).putLong(KEY_SHARE_OUTER_GUIDE_TIME, time); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_SHARE_OUTER_GUIDE, ++shareItemSum); + AIAssist.getInstance(getContext()).speakTTSVoice(mOuterGuideVoiceStrings[random.nextInt(3)]); + } else { + Log.e(TAG, " playShareOuterGuideVoice else < ONE_DAY_TIME "); + } + } + } + } + + + private void playShareGuideVoice() { + long intervalTime = SharedPrefsMgr.getInstance(getContext()).getLong(KEY_CLICK_SHARE_TIME, 0); + int shareItemSum = SharedPrefsMgr.getInstance(getContext()).getInt(KEY_CLICK_SHARE_BUTTON, 0); + Log.d(TAG, " playShareGuideVoice shareItemSum = " + shareItemSum + "---- intervalTime = " + intervalTime); + + if (shareItemSum < 3) { + long time = System.currentTimeMillis(); + Log.d(TAG, "playShareGuideVoice time = " + time); + if (intervalTime == 0) { + Log.d(TAG, " playShareGuideVoice -----1-----"); + SharedPrefsMgr.getInstance(getContext()).putLong(KEY_CLICK_SHARE_TIME, time); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_CLICK_SHARE_BUTTON, ++shareItemSum); + AIAssist.getInstance(getContext()).speakTTSVoice(mClickShareVoiceStrings[0]); + } else { + Log.d(TAG, " playShareGuideVoice else interval = " + (time - intervalTime)); + if ((time - intervalTime) > ONE_DAY_TIME) { + SharedPrefsMgr.getInstance(getContext()).putLong(KEY_CLICK_SHARE_TIME, time); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_CLICK_SHARE_BUTTON, ++shareItemSum); + AIAssist.getInstance(getContext()).speakTTSVoice(mClickShareVoiceStrings[1]); + } else { + Log.e(TAG, " playShareGuideVoice else < ONE_DAY_TIME "); + } + } + } + } + + /** + * 地图移动和缩放回调 + * @param latLng 中点的经纬度 + * @param zoom 缩放大小 + * @param tilt 倾斜度 + * @param bearing 旋转角度 + */ + @Override + public void onMapChanged(MogoLatLng latLng, float zoom, float tilt, float bearing) { + long intervalTime = SharedPrefsMgr.getInstance(getContext()).getLong(KEY_SHARE_INNER_GUIDE_TIME, 0); + int shareItemSum = SharedPrefsMgr.getInstance(getContext()).getInt(KEY_SHARE_INNER_GUIDE, 0); + Log.d(TAG, " onMapChanged shareItemSum = " + shareItemSum + "---- intervalTime = " + intervalTime); + if (shareItemSum < 3) { + long time = System.currentTimeMillis(); + Log.d(TAG, "onMapChanged time = " + time); + if (intervalTime == 0) { + Log.d(TAG, " onMapChanged -----1-----"); + SharedPrefsMgr.getInstance(getContext()).putLong(KEY_SHARE_INNER_GUIDE_TIME, time); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_SHARE_INNER_GUIDE, ++shareItemSum); + AIAssist.getInstance(getContext()).speakTTSVoice(mInnerGuideVoiceStrings[0]); + } else { + Log.d(TAG, " onMapChanged else interval = " + (time - intervalTime)); + if ((time - intervalTime) > ONE_DAY_TIME) { + SharedPrefsMgr.getInstance(getContext()).putLong(KEY_SHARE_INNER_GUIDE_TIME, time); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_SHARE_INNER_GUIDE, ++shareItemSum); + if (shareItemSum == 1) { + AIAssist.getInstance(getContext()).speakTTSVoice(mInnerGuideVoiceStrings[1]); + } else { + AIAssist.getInstance(getContext()).speakTTSVoice(mInnerGuideVoiceStrings[2]); + } + } else { + Log.e(TAG, " onMapChanged else < ONE_DAY_TIME "); + } + } + } + } + + /** * 由于Launcher和Independent对于天气的表现形式不太一样,所以通过此方法区分处理 */ @@ -371,6 +494,13 @@ public class EntranceFragment extends MvpFragment implements Weathe // 相当于每次onResume都会请求一下个人信息,目的是能够相对及时的同步手机端的个人信息修改 requestUserInfo(); } + getCommonConfig(); } @Override @@ -120,6 +128,44 @@ public class EntrancePresenter extends Presenter implements Weathe } } + public void getCommonConfig() { + Map params = new ArrayMap<>(); + params.put("sn", Utils.getSn()); + + mNetWork.create(GetConfigApiServices.class, UserInfoConstant.getUserInfoBaseUrl()) + .getConfig(params) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + } + + @Override + public void onSuccess(CommonConfigResponse config) { + Logger.d(TAG, "getCommonConfig onSuccess -----> "); + if (config != null && config.result != null) { + CommonConfig.Speech speech = config.result.speech; + if (speech != null) { + Logger.d(TAG, "getCommonConfig onSuccess speech.count = " + speech.count); + SharedPrefsMgr.getInstance(getContext()).putInt(KEY_SERVER_SHOW_DAY_COUNT, speech.count); + } else { + Logger.e(TAG, "getCommonConfig onSuccess speech == null "); + } + } else { + Logger.e(TAG, "getCommonConfig onSuccess config == null"); + } + } + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + Logger.e(TAG,"getCommonConfig onError ---> e = " + e); + } + }); + } + + private UserInfo userInfo; public void requestUserInfo() { Map params = new ArrayMap<>(); diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/net/GetConfigApiServices.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/net/GetConfigApiServices.java new file mode 100644 index 0000000000..f0c8bca6c4 --- /dev/null +++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/net/GetConfigApiServices.java @@ -0,0 +1,23 @@ +package com.mogo.module.extensions.net; + +import com.mogo.module.extensions.bean.CommonConfig; +import com.mogo.module.extensions.bean.CommonConfigResponse; +import com.mogo.module.extensions.userinfo.UserInfoResponse; + +import java.util.Map; + +import io.reactivex.Observable; +import io.reactivex.Single; +import retrofit2.http.GET; +import retrofit2.http.QueryMap; + +/** + * 获取配置信息 + */ +public interface GetConfigApiServices { + + @GET("dataService/car/customConfig/no/getAll/v1") + Single getConfig(@QueryMap Map parameters); + + +} diff --git a/modules/mogo-module-extensions/src/main/res/values/strings.xml b/modules/mogo-module-extensions/src/main/res/values/strings.xml index def8fbcd0e..24755a16f7 100644 --- a/modules/mogo-module-extensions/src/main/res/values/strings.xml +++ b/modules/mogo-module-extensions/src/main/res/values/strings.xml @@ -47,4 +47,25 @@ 你好小智,打开全部应用 你好小智,返回桌面 + + + + 查询路况,唤醒小智说“天安门附近路况怎么样” + 想知道出行路况,唤醒小智说“中关村堵车吗” + 出行路况早知道,唤醒小智说“长安街路况怎么样” + + + + + 您可以将当前的路况分享给其他车友,帮助他们获得最新的路况信息,试试对我说“上报路况” + 您的分享信息将会帮助更多车友,当您发现以下交通事件,可以直接对我说上报路况 + + + + + 查路况您可以直接唤醒小智说“天安门附近堵不堵” + 出行路况早知道,试试唤醒小智说,“附近路况怎么样” + 提前看看出行路况,试试唤醒小智说,“中关村路况怎么样” + + diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java index 237537b3db..eb70cab35d 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/ShareControl.java @@ -10,6 +10,7 @@ import android.util.ArrayMap; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; 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.commons.voice.AIAssist; @@ -50,6 +51,7 @@ import org.jetbrains.annotations.NotNull; import org.json.JSONObject; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java index 7fca820c05..57fc5c2498 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/constant/ShareConstants.java @@ -92,6 +92,7 @@ public class ShareConstants { */ public static final String KEY_SHARE_OUTER_GUIDE = "KEY_SHARE_OUTER_GUIDE"; public static final String KEY_SHARE_OUTER_GUIDE_TIME = "KEY_SHARE_OUTER_GUIDE_TIME"; + public static final String KEY_SERVER_SHOW_DAY_COUNT = "KEY_SERVER_SHOW_DAY_COUNT"; /** * 内部触发 @@ -112,7 +113,11 @@ public class ShareConstants { public static final String KEY_CLICK_SHARE_ITEM_TIME = "KEY_CLICK_SHARE_ITEM_TIME"; //1天的毫秒 TODO -// public static final long ONE_DAY_TIME = 86400000; - public static final long ONE_DAY_TIME = 120000; + public static final long ONE_DAY_TIME = 86400000; +// public static final long ONE_DAY_TIME = 60000; + + //7天的毫秒 + public static final long SEVEN_DAY_TIME = 604800000; +// public static final long SEVEN_DAY_TIME = 60000; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt index c0f0ba67f8..cdd00f8bc8 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/manager/UploadHelper.kt @@ -21,7 +21,7 @@ import com.mogo.utils.storage.SharedPrefsMgr */ object UploadHelper { fun upload(context: Context, type: TanluUploadParams, forcePlayVoice: Boolean = false) { - if (DebugConfig.isLauncher()) { + if (DebugConfig.isLauncher()) { //TODO launcher和独立应用 if (ServiceApisManager.serviceApis.statusManagerApi.isUploading) { // 上报即成功,当前还有正在上报的事件,仅做界面展示,不做具体操作 Logger.d("UploadHelper", "正在上报===") @@ -36,9 +36,7 @@ object UploadHelper { var intervalTime = SharedPrefsMgr.getInstance(context).getLong(KEY_CLICK_SHARE_ITEM_TIME, 0) Log.d("UploadHelper", "shareItemSum = $shareItemSum --- intervalTime = $intervalTime --type = ${type.eventType}") - if (shareItemSum > 2) { - //TODO - } else { + if (shareItemSum < 3) { var time = System.currentTimeMillis() Log.d("UploadHelper", "time = $time ") if (intervalTime == 0.toLong()) { diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt b/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt index fb427784f0..7921527e17 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/net/ShareApiService.kt @@ -4,7 +4,6 @@ import com.mogo.commons.data.BaseData import com.mogo.module.share.bean.AverateSpeedResponse import com.mogo.module.share.bean.ShareButtonConfigResponse import io.reactivex.Observable -import io.reactivex.Single import okhttp3.RequestBody import retrofit2.http.* @@ -32,4 +31,5 @@ interface ShareApiService { @FormUrlEncoded @POST("/deva/car/poiType/no/poiTypeList") fun queryShareButtonConfig(@FieldMap param: Map):Observable + } \ No newline at end of file diff --git a/modules/mogo-module-share/src/main/res/values/strings.xml b/modules/mogo-module-share/src/main/res/values/strings.xml index a7116bdf5c..4c1ef21f86 100644 --- a/modules/mogo-module-share/src/main/res/values/strings.xml +++ b/modules/mogo-module-share/src/main/res/values/strings.xml @@ -1,24 +1,4 @@ share - - - 查路况您可以直接唤醒小智说“天安门附近堵不堵” - 出行路况早知道,试试唤醒小智说,“附近路况怎么样” - 提前看看出行路况,试试唤醒小智说,“中关村路况怎么样” - - - - - 查询路况,唤醒小智说“天安门附近路况怎么样” - 想知道出行路况,唤醒小智说“中关村堵车吗” - 出行路况早知道,唤醒小智说“长安街路况怎么样” - - - - - 您可以将当前的路况分享给其他车友,帮助他们获得最新的路况信息,试试对我说“上报路况” - 您的分享信息将会帮助更多车友,当您发现以下交通事件,可以直接对我说上报路况 - -