From df35571cff65671395a134e4565f3846b144eee8 Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Wed, 12 Aug 2020 15:52:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=8B=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5=E7=9B=B8=E5=85=B3=E5=9F=8B=E7=82=B9=E7=AD=96=E7=95=A5?= =?UTF-8?q?=EF=BC=8C=E5=85=A8=E9=83=A8=E7=A7=BB=E5=88=B0=E4=BA=86IMogoTanl?= =?UTF-8?q?uApiProvider=E9=87=8C=E9=9D=A2=EF=BC=8C=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E8=A7=86=E9=A2=91=E6=8A=93=E5=8F=96=E5=B9=BF=E6=92=AD?= =?UTF-8?q?=E7=A6=81=E7=94=A8=EF=BC=8C=E9=87=87=E7=94=A8=E6=96=B0=E7=9A=84?= =?UTF-8?q?IMogoTanluApiProvider=E9=87=8C=E9=9D=A2=E7=9A=84upload=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=BF=9B=E8=A1=8C=E8=A7=86=E9=A2=91=E6=8A=93=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/tanlu/api/MogoTanluApiProvider.java | 29 +++- .../zhidao/roadcondition/constant/Const.kt | 36 +++-- .../receiver/ShareRoadReceiver.kt | 4 +- .../roadcondition/service/MainService.kt | 137 +++++++++--------- .../roadcondition/service/UploadParams.kt | 37 +++++ .../com/mogo/module/share/ShareControl.java | 98 +++++-------- .../module/share/constant/ShareConstants.java | 11 -- .../share/dialog/LaucherShareDialog.java | 105 ++------------ .../mogo/module/share/manager/UploadHelper.kt | 3 +- .../service/tanlu/IMogoTanluProvider.java | 30 +++- .../mogo/service/tanlu/TanluUploadParams.java | 72 +++++++++ 11 files changed, 313 insertions(+), 249 deletions(-) create mode 100644 libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/UploadParams.kt create mode 100644 services/mogo-service-api/src/main/java/com/mogo/service/tanlu/TanluUploadParams.java diff --git a/libraries/mogo-tanlu-api/src/main/java/com/zhidao/mogo/tanlu/api/MogoTanluApiProvider.java b/libraries/mogo-tanlu-api/src/main/java/com/zhidao/mogo/tanlu/api/MogoTanluApiProvider.java index eaad336ca7..44f60ecab8 100644 --- a/libraries/mogo-tanlu-api/src/main/java/com/zhidao/mogo/tanlu/api/MogoTanluApiProvider.java +++ b/libraries/mogo-tanlu-api/src/main/java/com/zhidao/mogo/tanlu/api/MogoTanluApiProvider.java @@ -1,11 +1,20 @@ package com.zhidao.mogo.tanlu.api; import android.content.Context; +import android.util.ArrayMap; import com.alibaba.android.arouter.facade.annotation.Route; +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.analytics.AnalyticsUtils; +import com.mogo.service.IMogoServiceApis; +import com.mogo.service.MogoServicePaths; import com.mogo.service.tanlu.IMogoTanluProvider; +import com.mogo.service.tanlu.TanluUploadParams; import com.mogo.utils.logger.Logger; import com.zhidao.roadcondition.service.MainService; +import com.zhidao.roadcondition.service.UploadParams; + +import java.util.Map; import static com.zhidao.mogo.tanlu.api.TanluApiConst.MODULE_NAME; import static com.zhidao.mogo.tanlu.api.TanluApiConst.MODULE_PATH; @@ -18,15 +27,25 @@ import static com.zhidao.mogo.tanlu.api.TanluApiConst.MODULE_PATH; @Route(path = MODULE_PATH) public class MogoTanluApiProvider implements IMogoTanluProvider { private Context context; + /** * 上传情报 * - * @param type 情报类型 + * @param params 情报类型 */ @Override - public void uploadRoadCondition(String type) { - Logger.d(MODULE_NAME, "uploadRoadCondition: " + type); - MainService.Companion.launchService(context, type); + public void uploadRoadCondition(TanluUploadParams params) { + if(params!=null) { + Logger.d(MODULE_NAME, "uploadRoadCondition: " + params); + Map properties = new ArrayMap<>(); + properties.put("type", params.getEventType()); + properties.put("from", params.getFromType()); + AnalyticsUtils.track("v2x_share_type", properties); + MainService.Companion.launchService(context, new UploadParams(params.getEventType(), + params.getFromType(), params.getDuration())); + }else{ + throw new IllegalArgumentException("TanluUploadParams 不允许为空"); + } } /** @@ -35,7 +54,7 @@ public class MogoTanluApiProvider implements IMogoTanluProvider { @Override public void startTanluService() { Logger.d(MODULE_NAME, "startTanluService"); - MainService.Companion.launchService(context, "0"); + MainService.Companion.launchService(context, null); } @Override diff --git a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/constant/Const.kt b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/constant/Const.kt index e5332eabe1..b7628fd94b 100644 --- a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/constant/Const.kt +++ b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/constant/Const.kt @@ -35,25 +35,43 @@ const val AUTO_NAVI_END = 9 //结束导航 const val VALUE_DICT_DATA_TYPE = "deva_infomation_type" // dict 数据请求类型:情报类型数据 -//上报的类型 +//事件类型 const val TANLU_TRAFFIC_CHECK = "10002" //交通检查 - const val TANLU_ROAD_CLOSURE = "10003" //封路 - const val TANLU_ROAD_WORK = "10006" //施工 - const val TANLU_ROAD_CONGESTION = "10007" //拥堵 - const val TANLU_ROAD_PONDING = "10008" //积水 - const val TANLU_ROAD_HEAVY_FOG = "10010" //大雾 - const val TANLU_ROAD_ICING = "10011" //积冰 - const val TANLU_ROAD_ACCIDENT = "10013" //事故 - const val TANLU_ROAD_CURRENT = "10015" //实时路况 +// 上报类型 +/** + * 用户手点上报 + */ +const val UPLOAD_FROM_USER = 1 +/** + * 用户语音上报 + */ +const val UPLOAD_FROM_VOICE = 2 +/** + * 数据策略:拥堵自动上报 + */ +const val UPLOAD_FROM_STRATEGY_BLOCK_AUTO = 3 +/** + * 数据策略:已有事件云端校验 + */ +const val UPLOAD_FROM_STRATEGY_CLOUD_CHECK = 4 +/** + * 数据策略:交通事故上报 + */ +const val UPLOAD_FROM_STRATEGY_ACCIDENT_AUTO = 5 + +/** + * 默认视频抓取时长,单位是秒 + */ +const val DEFAULT_VIDEO_DURATION = 10 const val DEF_NEWS_LABEL = "拥堵" const val DEF_NEWS_VALUE = "traffic_jam" diff --git a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/receiver/ShareRoadReceiver.kt b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/receiver/ShareRoadReceiver.kt index 331095e683..9eac95e715 100644 --- a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/receiver/ShareRoadReceiver.kt +++ b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/receiver/ShareRoadReceiver.kt @@ -12,8 +12,8 @@ class ShareRoadReceiver : BroadcastReceiver() { Log.d("MainService", "ShareRoadReceiver ------> intent.action = " + intent.action) if (intent.action == "com.zhidao.share.roadcondition.action") { var type = intent.getStringExtra("type") - Log.d("MainService", "ShareRoadReceiver type ----> $type") - MainService.launchService(context, type) + Log.e("MainService", "ShareRoadReceiver type ----> $type ----> 此方法已经废弃了,无法调起服务") +// MainService.launchService(context, type) } } } diff --git a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt index 38f9e76cbd..b701d29dd1 100644 --- a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt +++ b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/MainService.kt @@ -36,10 +36,10 @@ import java.util.concurrent.TimeUnit class MainService : Service() { companion object { - fun launchService(context: Context, type: String) { + fun launchService(context: Context, params: UploadParams?) { val intent = Intent(context, MainService::class.java).apply { - putExtra("type", type) - Log.e("MainService", "launchService type = $type") + Log.e("MainService", "launchService type = $params") + putExtra("params", params) } context.startService(intent) } @@ -47,15 +47,19 @@ class MainService : Service() { private lateinit var mainServiceHttpModel: MainServiceController private var mAlarmManager: AlarmManager = - AbsMogoApplication.getApp().applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager + AbsMogoApplication.getApp().applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager + //是否已经获取过策略 var isGetStrategies: Boolean = false val TAG: String = this.javaClass.simpleName + //1是一次性,2是周期性 var picType: Int = 0 var videoType: Int = 0 var shareType: String = "type" - var isCustom: Boolean = false; + var isCustom: Boolean = false + + var params: UploadParams? = null //发送主动上报结果广播给外部 @@ -76,25 +80,22 @@ class MainService : Service() { // LocationUtil.getInstance().initLocation() //参数说明:appKey: app唯一标识(比如:包名) CosUploadManagerImpl.getInstance(AbsMogoApplication.getApp().applicationContext) - .init(BuildConfig.APPLICATION_ID, 2) + .init(BuildConfig.APPLICATION_ID, 2) //初始化语音 VoiceController.initVoice() if (intent != null) { - shareType = intent.getStringExtra("type") - Log.d(TAG, "onStartCommand shareType = $shareType") - if (shareType.equals(TANLU_ROAD_CONGESTION) || shareType.equals(TANLU_TRAFFIC_CHECK) || shareType.equals( - TANLU_ROAD_CLOSURE - ) || shareType.equals(TANLU_ROAD_CURRENT) - || shareType.equals(TANLU_ROAD_PONDING) || shareType.equals(TANLU_ROAD_ICING) || shareType.equals( - TANLU_ROAD_HEAVY_FOG - ) - || shareType.equals(TANLU_ROAD_ACCIDENT) || shareType.equals( - TANLU_ROAD_WORK - ) - ) { + params = intent.getParcelableExtra("params") + params?.let { + shareType = it.eventType + Log.d(TAG, "onStartCommand shareType = $shareType") + if (shareType == TANLU_ROAD_CONGESTION || shareType == TANLU_TRAFFIC_CHECK || shareType == TANLU_ROAD_CLOSURE || shareType == TANLU_ROAD_CURRENT + || shareType == TANLU_ROAD_PONDING || shareType == TANLU_ROAD_ICING || shareType == TANLU_ROAD_HEAVY_FOG + || shareType == TANLU_ROAD_ACCIDENT || shareType == TANLU_ROAD_WORK + ) { // takePhoto(1, false, true) - takeVideo(10, isCustom = true, id = id) + takeVideo(it.duration, isCustom = true, id = id) + } } } else { Log.e(TAG, "intent == null ") @@ -193,14 +194,14 @@ class MainService : Service() { var info = LocationUtil.getInstance().getLocationInfo() Log.e("MainService", "getImageEvent long = ${info.longitude} ----> lat= ${info.latitude}") Log.d( - "MainService", - "getImageEvent url = " + getImageSuccessEvent.getImageUrl() + ">>>>type =" + getImageSuccessEvent.getType() + "MainService", + "getImageEvent url = " + getImageSuccessEvent.getImageUrl() + ">>>>type =" + getImageSuccessEvent.getType() ) sendMarkerInfoReceiver( - info.latitude, - info.longitude, - getImageSuccessEvent.getImageUrl(), - getImageSuccessEvent.getType() + info.latitude, + info.longitude, + getImageSuccessEvent.getImageUrl(), + getImageSuccessEvent.getType() ) } @@ -241,14 +242,14 @@ class MainService : Service() { private fun handleReportStrategy() { //1是一次性,2是周期性 picType = getStrategyFrequency( - AbsMogoApplication.getApp().applicationContext, - "pic", - getStrategyType("pic") + AbsMogoApplication.getApp().applicationContext, + "pic", + getStrategyType("pic") ) videoType = getStrategyFrequency( - AbsMogoApplication.getApp().applicationContext, - "video", - getStrategyType("video") + AbsMogoApplication.getApp().applicationContext, + "video", + getStrategyType("video") ) Log.d("MainService", "handleReportStrategy picType = $picType ---videoType = $videoType") if (picType == 1) { @@ -284,10 +285,10 @@ class MainService : Service() { // log(TAG, "takePhoto -----2----->") //目前不支持连拍,只能定时2秒拍一张 第一期每次只拍一张 Observable.intervalRange(0, 1, 0, 2_000, TimeUnit.MILLISECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(Consumer { - CarCorderController.takePhoto(1, 1, false, isCustom, TANLU_ROAD_CURRENT) - }) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(Consumer { + CarCorderController.takePhoto(1, 1, false, isCustom, TANLU_ROAD_CURRENT) + }) // } postPhotoAlarmTask(isInterval) @@ -297,15 +298,15 @@ class MainService : Service() { //获取录像 private fun takeVideo( - duration: Int, - isInterval: Boolean = false, - isCustom: Boolean = false, - id: Long = 0 + duration: Int, + isInterval: Boolean = false, + isCustom: Boolean = false, + id: Long = 0 ) { Log.d("MainService", "takeVideo --------1---->") // if (isAuthorization(BaseApplication.getAppContext())) { // log(TAG, "takeVideo --------2---->") - CarCorderController.takeVideo(1, duration, isCustom, id, if(isCustom) shareType else TANLU_ROAD_CURRENT) + CarCorderController.takeVideo(1, duration, isCustom, id, if (isCustom) shareType else TANLU_ROAD_CURRENT) // } postVideoAlarmTask(isInterval) @@ -321,22 +322,22 @@ class MainService : Service() { intent.putExtra("AlarmType", AlarmTypePic) var pendingIntent = PendingIntent.getBroadcast(this, AlarmTypePic, intent, 0) Log.d( - "MainService", - "postPhotoAlarmTask time =" + getStrategyInterval( - AbsMogoApplication.getApp().applicationContext, - "pic", - getStrategyType("pic") - ) - ) - - mAlarmManager.setExact( - AlarmManager.RTC, System.currentTimeMillis() + - getStrategyInterval( + "MainService", + "postPhotoAlarmTask time =" + getStrategyInterval( AbsMogoApplication.getApp().applicationContext, "pic", getStrategyType("pic") - ) - , pendingIntent + ) + ) + + mAlarmManager.setExact( + AlarmManager.RTC, System.currentTimeMillis() + + getStrategyInterval( + AbsMogoApplication.getApp().applicationContext, + "pic", + getStrategyType("pic") + ) + , pendingIntent ) } } @@ -348,28 +349,28 @@ class MainService : Service() { val videoIntent = Intent() videoIntent.action = alarmBroadAction videoIntent.putExtra( - "duration", (VIDEO_DURATION_DEFAULT / 1000).toInt() + "duration", (VIDEO_DURATION_DEFAULT / 1000).toInt() ) videoIntent.putExtra("AlarmType", AlarmTypeVideo) var videoPendingIntent = - PendingIntent.getBroadcast(this, AlarmTypeVideo, videoIntent, 0) + PendingIntent.getBroadcast(this, AlarmTypeVideo, videoIntent, 0) Log.d( - "MainService", - "postVideoAlarmTask time =" + getStrategyInterval( - AbsMogoApplication.getApp().applicationContext, - "video", - getStrategyType("video") - ) - ) - - mAlarmManager.setExact( - AlarmManager.RTC, System.currentTimeMillis() + - getStrategyInterval( + "MainService", + "postVideoAlarmTask time =" + getStrategyInterval( AbsMogoApplication.getApp().applicationContext, "video", getStrategyType("video") - ) - , videoPendingIntent + ) + ) + + mAlarmManager.setExact( + AlarmManager.RTC, System.currentTimeMillis() + + getStrategyInterval( + AbsMogoApplication.getApp().applicationContext, + "video", + getStrategyType("video") + ) + , videoPendingIntent ) } } diff --git a/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/UploadParams.kt b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/UploadParams.kt new file mode 100644 index 0000000000..690b2ec53e --- /dev/null +++ b/libraries/tanlulib/src/main/java/com/zhidao/roadcondition/service/UploadParams.kt @@ -0,0 +1,37 @@ +package com.zhidao.roadcondition.service + +import android.os.Parcel +import android.os.Parcelable + +class UploadParams(val eventType:String,val fromType:String,val duration:Int) : Parcelable { + constructor(parcel: Parcel) : this( + parcel.readString()!!, + parcel.readString()!!, + parcel.readInt()) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(eventType) + parcel.writeString(fromType) + parcel.writeInt(duration) + } + + + + override fun describeContents(): Int { + return 0 + } + + override fun toString(): String { + return "UploadParams(eventType='$eventType', fromType='$fromType', duration=$duration)" + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): UploadParams { + return UploadParams(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} \ No newline at end of file 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 84cb300af5..ee53ecbe2b 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 @@ -11,7 +11,6 @@ import androidx.fragment.app.Fragment; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; -import com.mogo.commons.analytics.AnalyticsUtils; import com.mogo.commons.debug.DebugConfig; import com.mogo.commons.voice.AIAssist; import com.mogo.commons.voice.IMogoVoiceCmdCallBack; @@ -33,15 +32,14 @@ import com.mogo.service.intent.IMogoIntentListener; import com.mogo.service.intent.IMogoIntentManager; import com.mogo.service.module.IMogoModuleLifecycle; import com.mogo.service.share.IMogoShareManager; +import com.mogo.service.tanlu.IMogoTanluProvider; +import com.mogo.service.tanlu.TanluUploadParams; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; import org.jetbrains.annotations.NotNull; import org.json.JSONObject; -import java.util.HashMap; -import java.util.Map; - import static com.mogo.module.share.bean.StepAfterAuthKt.STEP_AFTER_AUTH_TYPE_SEEK_HELP; import static com.mogo.module.share.bean.StepAfterAuthKt.STEP_AFTER_AUTH_TYPE_SHOW_DIALOG; import static com.mogo.module.share.bean.StepAfterAuthKt.STEP_AFTER_AUTH_TYPE_UPLOAD; @@ -50,15 +48,6 @@ import static com.mogo.module.share.constant.ShareConstants.CMD_ROAD_CLOSURE; import static com.mogo.module.share.constant.ShareConstants.CMD_TRAFFIC_CHECK; import static com.mogo.module.share.constant.ShareConstants.CMD_UPLOAD_ACCIDENT; import static com.mogo.module.share.constant.ShareConstants.CMD_UPLOAD_BLOCK; -import static com.mogo.module.share.constant.ShareConstants.TYPE_ACCIDENT; -import static com.mogo.module.share.constant.ShareConstants.TYPE_BLOCK; -import static com.mogo.module.share.constant.ShareConstants.TYPE_CLOSURE; -import static com.mogo.module.share.constant.ShareConstants.TYPE_DENSE_FOG; -import static com.mogo.module.share.constant.ShareConstants.TYPE_REAL_TIME_TRAFFIC; -import static com.mogo.module.share.constant.ShareConstants.TYPE_ROAD_CONSTRUCTION; -import static com.mogo.module.share.constant.ShareConstants.TYPE_ROAD_ICY; -import static com.mogo.module.share.constant.ShareConstants.TYPE_STAGNANT_WATER; -import static com.mogo.module.share.constant.ShareConstants.TYPE_TRAFFIC_CHECK; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_CANCEL_SHARE; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_ACCIDENT; import static com.mogo.module.share.constant.ShareConstants.UNWAKE_UPLOAD_DENSE_FOG; @@ -82,6 +71,15 @@ import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_NO_REPLY_S import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_ROAD_CONDITION; import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_PUB_TROUBLE_HELP; import static com.mogo.module.share.constant.ShareConstants.VOICE_CMD_SHARE_DIALOG_CLOSE; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_ACCIDENT; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_BLOCK; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_CLOSURE; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_DENSE_FOG; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_REAL_TIME_TRAFFIC; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_ROAD_CONSTRUCTION; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_ROAD_ICY; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_STAGNANT_WATER; +import static com.mogo.service.tanlu.IMogoTanluProvider.TYPE_TRAFFIC_CHECK; /** * 分享框的逻辑都放到这里吧 @@ -153,7 +151,9 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo realShowDialog(); break; case STEP_AFTER_AUTH_TYPE_UPLOAD: - UploadHelper.INSTANCE.upload(mContext, stepAfterAuth.getUploadType(),stepAfterAuth.getForcePlayVoice()); + TanluUploadParams params = + new TanluUploadParams(stepAfterAuth.getUploadType(), IMogoTanluProvider.UPLOAD_FROM_VOICE); + UploadHelper.INSTANCE.upload(mContext, params,stepAfterAuth.getForcePlayVoice()); dismissShareDialog(); break; case STEP_AFTER_AUTH_TYPE_SEEK_HELP: @@ -245,41 +245,36 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_BLOCK,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_BLOCK,false); + uploadFromVoice(TYPE_BLOCK); } - trackVoiceWithType(TYPE_BLOCK); break; case UNWAKE_UPLOAD_TRAFFIC_CHECK: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_TRAFFIC_CHECK,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_TRAFFIC_CHECK,false); + uploadFromVoice(TYPE_TRAFFIC_CHECK); } - trackVoiceWithType(TYPE_TRAFFIC_CHECK); break; case UNWAKE_UPLOAD_ROAD_CLOSURE: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_CLOSURE,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_CLOSURE,false); + uploadFromVoice(TYPE_CLOSURE); } - trackVoiceWithType(TYPE_CLOSURE); break; case UNWAKE_UPLOAD_ACCIDENT: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ACCIDENT,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_ACCIDENT,false); + uploadFromVoice(TYPE_ACCIDENT); } - trackVoiceWithType(TYPE_ACCIDENT); break; case UNWAKE_UPLOAD_REAL_TIME_TRAFFIC: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_REAL_TIME_TRAFFIC,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_REAL_TIME_TRAFFIC,false); + uploadFromVoice(TYPE_REAL_TIME_TRAFFIC); } - trackVoiceWithType(TYPE_REAL_TIME_TRAFFIC); break; case UNWAKE_UPLOAD_SEEK_HELP: if (needAuth()) { @@ -293,46 +288,34 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_STAGNANT_WATER,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_STAGNANT_WATER,false); + uploadFromVoice(TYPE_STAGNANT_WATER); } - trackVoiceWithType(TYPE_STAGNANT_WATER); break; case UNWAKE_UPLOAD_ROAD_ICY: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_ICY,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_ROAD_ICY,false); + uploadFromVoice(TYPE_ROAD_ICY); } - trackVoiceWithType(TYPE_ROAD_ICY); break; case UNWAKE_UPLOAD_DENSE_FOG: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_DENSE_FOG,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_DENSE_FOG,false); + uploadFromVoice(TYPE_DENSE_FOG); } - trackVoiceWithType(TYPE_DENSE_FOG); break; case UNWAKE_UPLOAD_ROAD_CONSTRUCTION: if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_CONSTRUCTION,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_ROAD_CONSTRUCTION,false); + uploadFromVoice(TYPE_ROAD_CONSTRUCTION); } - trackVoiceWithType(TYPE_ROAD_CONSTRUCTION); break; default: break; } } - //TODO V2X语音免唤醒词信息上报埋点v2x_share_type - private void trackVoiceWithType(String type){ - Map properties = new HashMap<>(); - properties.put("type",type); - properties.put("from","1"); - AnalyticsUtils.track("v2x_share_type",properties); - } - @Override public void onIntentReceived(String intentStr, Intent intent) { // 此处只接受处理语音相关广播 @@ -357,64 +340,57 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_STAGNANT_WATER,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_STAGNANT_WATER,false); + uploadFromVoice(TYPE_STAGNANT_WATER); dismissShareDialog(); } - trackVoiceWithType(TYPE_STAGNANT_WATER); break; case "积冰": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_ICY,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_ROAD_ICY,false); + uploadFromVoice(TYPE_ROAD_ICY); dismissShareDialog(); } - trackVoiceWithType(TYPE_ROAD_ICY); break; case "雾": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_DENSE_FOG,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_DENSE_FOG,false); + uploadFromVoice(TYPE_DENSE_FOG); dismissShareDialog(); } - trackVoiceWithType(TYPE_DENSE_FOG); break; case "交通事故": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ACCIDENT,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_ACCIDENT,false); + uploadFromVoice(TYPE_ACCIDENT); dismissShareDialog(); } - trackVoiceWithType(TYPE_ACCIDENT); break; case "施工": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_ROAD_CONSTRUCTION,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_ROAD_CONSTRUCTION,false); + uploadFromVoice(TYPE_ROAD_CONSTRUCTION); dismissShareDialog(); } - trackVoiceWithType(TYPE_ROAD_CONSTRUCTION); break; case "封路": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_CLOSURE,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_CLOSURE,false); + uploadFromVoice(TYPE_CLOSURE); dismissShareDialog(); } - trackVoiceWithType(TYPE_CLOSURE); break; case "交通检查": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_TRAFFIC_CHECK,false); } else { - UploadHelper.INSTANCE.upload(mContext, TYPE_TRAFFIC_CHECK,false); + uploadFromVoice(TYPE_TRAFFIC_CHECK); dismissShareDialog(); } - trackVoiceWithType(TYPE_TRAFFIC_CHECK); break; default: break; @@ -429,20 +405,18 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_REAL_TIME_TRAFFIC,false); } else { Logger.d(TAG, "分享框准备触发上报实时路况"); - UploadHelper.INSTANCE.upload(mContext, TYPE_REAL_TIME_TRAFFIC,false); + uploadFromVoice(TYPE_REAL_TIME_TRAFFIC); dismissShareDialog(); } - trackVoiceWithType(TYPE_REAL_TIME_TRAFFIC); break; case "拥堵": if (needAuth()) { goAuth(STEP_AFTER_AUTH_TYPE_UPLOAD, TYPE_BLOCK,false); } else { Logger.d(TAG, "分享框准备触发上报拥堵"); - UploadHelper.INSTANCE.upload(mContext, TYPE_BLOCK,false); + uploadFromVoice(TYPE_BLOCK); dismissShareDialog(); } - trackVoiceWithType(TYPE_BLOCK); break; default: break; @@ -455,7 +429,7 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo break; case UNWAKE_UPLOAD_ROAD_CONDITION: Logger.d(TAG, "免唤醒准备触发上报拥堵"); - UploadHelper.INSTANCE.upload(mContext, TYPE_BLOCK,false); + uploadFromVoice(TYPE_BLOCK); dismissShareDialog(); break; default: @@ -466,6 +440,12 @@ public class ShareControl implements IMogoShareManager, IMogoIntentListener, IMo } } + private void uploadFromVoice(String eventType) { + TanluUploadParams params = new TanluUploadParams(eventType, + IMogoTanluProvider.UPLOAD_FROM_VOICE); + UploadHelper.INSTANCE.upload(mContext, params,false); + } + private void seekHelp() { Intent seekHelp = new Intent(mContext, VoiceCmdService.class); seekHelp.putExtra(ShareConstants.VOICE_CMD_SERVICE_EVENT_KEY, 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 58b2102045..242ce5b7b4 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 @@ -82,15 +82,4 @@ public class ShareConstants { */ public static final String VOICE_CMD_PUB_ROAD_CONDITION = "com.zhidao.pathfinder.report" + ".roadCondition"; - - public static final String TYPE_BLOCK = "10007"; - public static final String TYPE_TRAFFIC_CHECK = "10002"; - public static final String TYPE_CLOSURE = "10003"; - public static final String TYPE_ACCIDENT = "10013"; - public static final String TYPE_REAL_TIME_TRAFFIC = "10015"; - public static final String TYPE_SEEK_HELP = "6"; - public static final String TYPE_STAGNANT_WATER = "10008"; - public static final String TYPE_ROAD_ICY = "10011"; - public static final String TYPE_DENSE_FOG = "10010"; - public static final String TYPE_ROAD_CONSTRUCTION = "10006"; } diff --git a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java index 06a161a806..24202335b1 100644 --- a/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java +++ b/modules/mogo-module-share/src/main/java/com/mogo/module/share/dialog/LaucherShareDialog.java @@ -8,7 +8,6 @@ import android.widget.TextView; import com.alibaba.android.arouter.launcher.ARouter; import com.mogo.module.common.dialog.BaseFloatDialog; import com.mogo.module.share.R; -import com.mogo.module.share.constant.ShareConstants; import com.mogo.module.share.manager.ISeekHelpListener; import com.mogo.module.share.manager.SeekHelpManager; import com.mogo.module.share.manager.UploadHelper; @@ -16,11 +15,10 @@ import com.mogo.service.IMogoServiceApis; import com.mogo.service.MogoServicePaths; import com.mogo.service.analytics.IMogoAnalytics; import com.mogo.service.statusmanager.IMogoStatusManager; +import com.mogo.service.tanlu.IMogoTanluProvider; +import com.mogo.service.tanlu.TanluUploadParams; import com.mogo.utils.logger.Logger; -import java.util.HashMap; -import java.util.Map; - /** * @author lixiaopeng @@ -121,21 +119,17 @@ public class LaucherShareDialog extends BaseFloatDialog implements View.OnClickL if (id == R.id.tvBlock) { //拥堵 Logger.d(TAG,"点击拥堵"); - traceTanluData("1"); - sendShareReceiver(ShareConstants.TYPE_BLOCK); - trackWithType(ShareConstants.TYPE_BLOCK); + sendShareReceiver(IMogoTanluProvider.TYPE_BLOCK); dismiss(); } else if (id == R.id.tvTrafficCheck) { //交通检查 Logger.d(TAG,"点击交通检查"); - sendShareReceiver(ShareConstants.TYPE_TRAFFIC_CHECK); - trackWithType(ShareConstants.TYPE_TRAFFIC_CHECK); + sendShareReceiver(IMogoTanluProvider.TYPE_TRAFFIC_CHECK); dismiss(); } else if (id == R.id.tvClosure) { //封路 Logger.d(TAG,"点击封路"); - sendShareReceiver(ShareConstants.TYPE_CLOSURE); - trackWithType(ShareConstants.TYPE_CLOSURE); + sendShareReceiver(IMogoTanluProvider.TYPE_CLOSURE); dismiss(); } else if (id == R.id.tvSeekHelp) { // 故障求助 @@ -145,48 +139,35 @@ public class LaucherShareDialog extends BaseFloatDialog implements View.OnClickL } else if (id == R.id.tvAccident) { // 事故 Logger.d(TAG,"点击事故"); - sendShareReceiver(ShareConstants.TYPE_ACCIDENT); - trackWithType(ShareConstants.TYPE_ACCIDENT); + sendShareReceiver(IMogoTanluProvider.TYPE_ACCIDENT); dismiss(); } else if (id == R.id.tvConstruction) { // 道路施工 Logger.d(TAG,"点击道路施工"); - sendShareReceiver(ShareConstants.TYPE_ROAD_CONSTRUCTION); - trackWithType(ShareConstants.TYPE_ROAD_CONSTRUCTION); + sendShareReceiver(IMogoTanluProvider.TYPE_ROAD_CONSTRUCTION); dismiss(); } else if (id == R.id.tvRealTimeTraffic) { // 实时路况 Logger.d(TAG,"点击实时路况"); - sendShareReceiver(ShareConstants.TYPE_REAL_TIME_TRAFFIC); - trackWithType(ShareConstants.TYPE_REAL_TIME_TRAFFIC); + sendShareReceiver(IMogoTanluProvider.TYPE_REAL_TIME_TRAFFIC); dismiss(); } else if (id == R.id.tvStagnantWater) { // 道路积水 Logger.d(TAG,"点击道路积水"); - sendShareReceiver(ShareConstants.TYPE_STAGNANT_WATER); - trackWithType(ShareConstants.TYPE_STAGNANT_WATER); + sendShareReceiver(IMogoTanluProvider.TYPE_STAGNANT_WATER); dismiss(); } else if (id == R.id.tvRoadIcy) { // 道路结冰 Logger.d(TAG,"点击道路结冰"); - sendShareReceiver(ShareConstants.TYPE_ROAD_ICY); - trackWithType(ShareConstants.TYPE_ROAD_ICY); + sendShareReceiver(IMogoTanluProvider.TYPE_ROAD_ICY); dismiss(); } else if (id == R.id.tvDenseFog) { // 浓雾 Logger.d(TAG,"点击浓雾"); - sendShareReceiver(ShareConstants.TYPE_DENSE_FOG); - trackWithType(ShareConstants.TYPE_DENSE_FOG); + sendShareReceiver(IMogoTanluProvider.TYPE_DENSE_FOG); dismiss(); } } - //TODO 手动信息上报埋点 - private void trackWithType(String type){ - Map properties = new HashMap<>(); - properties.put("type",type); - properties.put("from","2"); - mAnalytics.track(ShareConstants.LAUNCHER_SHARE_TYPE, properties); - } private ISeekHelpListener seekListener = new ISeekHelpListener() { @Override @@ -208,68 +189,8 @@ public class LaucherShareDialog extends BaseFloatDialog implements View.OnClickL * 发送广播 1拥堵,2交通检查,3封路 */ private void sendShareReceiver(String type) { - UploadHelper.INSTANCE.upload(mContext, type,true); + TanluUploadParams params = new TanluUploadParams(type, IMogoTanluProvider.UPLOAD_FROM_USER); + UploadHelper.INSTANCE.upload(mContext, params,true); } - /** - * type=1 路况 - *

- * type=2 油价 - *

- * type=3 交通检查 - *

- * type=4 封路 - * - * @param type - */ - - private void traceTanluData(String type) { - Map properties = new HashMap<>(); - properties.put("type", type); - mAnalytics.track(ShareConstants.CARNET_USER_UPLOAD, properties); - } - - -// public void show(){ -// Logger.d(TAG,"使用windowManager实现"); -// if (!isShown) { -// windowManager = (WindowManager) mContext.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); -// WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { -// layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; -// } else { -// layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; -// } -// layoutParams.format = PixelFormat.TRANSLUCENT; -// layoutParams.gravity = Gravity.START | Gravity.TOP; -//// mWindowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; -// // FLAG_LAYOUT_IN_SCREEN:将window放置在整个屏幕之内,无视其他的装饰(比如状态栏); FLAG_NOT_TOUCH_MODAL:不阻塞事件传递到后面的窗口 -// layoutParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; -// if (CarSeries.getSeries() == CarSeries.CAR_SERIES_F80X) { -// layoutParams.width = 1920; -// layoutParams.height = 1080; -// }else { -// layoutParams.width = WindowUtils.getScreenWidth(mContext); -// layoutParams.height = WindowUtils.getScreenHeight(mContext); -// } -// Logger.d("ShareDialog", "width: " + layoutParams.width + " height: " + layoutParams.height); -// //后面变暗区域透明... -// layoutParams.dimAmount = 0; -// layoutParams.x = 0; -// layoutParams.y = 0; -// initView(); -// initListener(); -// windowManager.addView(body, layoutParams); -// isShown = true; -// } -// } - -// public void dismiss(){ -// if (isShown && windowManager != null && body != null) { -// windowManager.removeViewImmediate(body); -// windowManager = null; -// isShown = false; -// } -// } - } 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 1dabb1193e..cf54303b38 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 @@ -6,6 +6,7 @@ import com.mogo.commons.debug.DebugConfig import com.mogo.commons.voice.AIAssist import com.mogo.module.share.ShareControl import com.mogo.module.share.dialog.LaucherShareDialog +import com.mogo.service.tanlu.TanluUploadParams import com.mogo.utils.TipToast import com.mogo.utils.logger.Logger @@ -13,7 +14,7 @@ import com.mogo.utils.logger.Logger * 上报工具类 */ object UploadHelper { - fun upload(context:Context, type: String,forcePlayVoice:Boolean = false) { + fun upload(context:Context, type: TanluUploadParams,forcePlayVoice:Boolean = false) { if(ServiceApisManager.serviceApis.statusManagerApi.isUploading){ Logger.d("UploadHelper", "正在上报===") TipToast.tip("正在上报,请稍后重试") diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/IMogoTanluProvider.java b/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/IMogoTanluProvider.java index 388147da06..6fd2b2af19 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/IMogoTanluProvider.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/IMogoTanluProvider.java @@ -45,12 +45,38 @@ public interface IMogoTanluProvider extends IProvider { */ String TYPE_ROAD_CONSTRUCTION = "10006"; + /** + * 用户手点上报 + */ + String UPLOAD_FROM_USER = "2"; + /** + * 用户语音上报 + */ + String UPLOAD_FROM_VOICE = "1"; + /** + * 数据策略:拥堵自动上报 + */ + String UPLOAD_FROM_STRATEGY_BLOCK_AUTO = "3"; + /** + * 数据策略:已有事件云端校验 + */ + String UPLOAD_FROM_STRATEGY_CLOUD_CHECK = "4"; + /** + * 数据策略:交通事故上报 + */ + String UPLOAD_FROM_STRATEGY_ACCIDENT_AUTO = "5"; + + /** + * 默认视频抓取时长 + */ + int DEFAULT_VIDEO_DURATION = 10; + /** * 上传情报 * - * @param type 情报类型 + * @param params 情报类型 */ - void uploadRoadCondition(String type); + void uploadRoadCondition(TanluUploadParams params); /** * 开启探路业务服务 diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/TanluUploadParams.java b/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/TanluUploadParams.java new file mode 100644 index 0000000000..72cd49df3d --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/tanlu/TanluUploadParams.java @@ -0,0 +1,72 @@ +package com.mogo.service.tanlu; + +/** + * 探路事件上报参数封装 + * @author tongchenfei + */ +public class TanluUploadParams { + /** + * 事件类型 + * + * 参考 {@link IMogoTanluProvider#TYPE_BLOCK} + */ + private String eventType; + /** + * 上报类型 + * + * 参考 {@link IMogoTanluProvider#UPLOAD_FROM_USER} + */ + private String fromType; + /** + * 视频时长 + */ + private int duration = IMogoTanluProvider.DEFAULT_VIDEO_DURATION; + + public TanluUploadParams(String eventType){ + this(eventType, IMogoTanluProvider.UPLOAD_FROM_USER); + } + + public TanluUploadParams(String eventType, String fromType) { + if (eventType == null) { + eventType = IMogoTanluProvider.TYPE_BLOCK; + } + if (fromType == null) { + fromType = IMogoTanluProvider.UPLOAD_FROM_USER; + } + this.eventType = eventType; + this.fromType = fromType; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getFromType() { + return fromType; + } + + public void setFromType(String fromType) { + this.fromType = fromType; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + @Override + public String toString() { + return "TanluUploadParams{" + + "eventType='" + eventType + '\'' + + ", fromType='" + fromType + '\'' + + ", duration=" + duration + + '}'; + } +}