diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java index 98c3b35002..70c0f7f2c5 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerUserInfo.java @@ -114,6 +114,14 @@ public class MarkerUserInfo implements Serializable { this.gender = gender; } + public void setGender(int gender) { + if (gender == 0) { + this.gender = "男"; + } else { + this.gender = "女"; + } + } + public String getSn() { if (TextUtils.isEmpty(sn)) { return ""; diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XEventShowEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XEventShowEntity.java index a1bcb968d9..e0ee2e5bec 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XEventShowEntity.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XEventShowEntity.java @@ -30,7 +30,7 @@ public class V2XEventShowEntity implements Serializable { private V2XLiveCarInfoEntity v2XLiveCarInfoRes; // 直播车机列表 private List v2XLiveCarList; - // 推送信息,疲劳驾驶, + // 推送信息,疲劳驾驶,他人发起故障求助 private V2XPushMessageEntity v2XPushMessageEntity; // 违章停车 private MarkerExploreWay v2XIllegalPark; diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java index 4c4d1af587..78e6e6e47d 100644 --- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java +++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java @@ -28,6 +28,7 @@ public class V2XPushMessageEntity implements Serializable { private String videoSn; private String videoChannel; private int expireTime; + private long createTime; private double lat; private double lon; private String sn; @@ -37,6 +38,11 @@ public class V2XPushMessageEntity implements Serializable { private double distance; private boolean isShowWindow; + private int age; + private String displayName; + private int sex; + private long userId; + public int getViewType() { return viewType; } @@ -220,10 +226,54 @@ public class V2XPushMessageEntity implements Serializable { isShowWindow = showWindow; } + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } + @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } V2XPushMessageEntity that = (V2XPushMessageEntity) o; return Objects.equals(sceneId, that.sceneId) && Objects.equals(tts, that.tts); @@ -234,31 +284,5 @@ public class V2XPushMessageEntity implements Serializable { return Objects.hash(sceneId, tts); } - @Override - public String toString() { - return "V2XPushMessageEntity{" + - "viewType=" + viewType + - ", sceneId='" + sceneId + '\'' + - ", sceneName='" + sceneName + '\'' + - ", sceneCategory=" + sceneCategory + - ", sceneLevel=" + sceneLevel + - ", sceneDescription='" + sceneDescription + '\'' + - ", zoom=" + zoom + - ", zoomScale=" + zoomScale + - ", alarmContent='" + alarmContent + '\'' + - ", tts='" + tts + '\'' + - ", videoUrl='" + videoUrl + '\'' + - ", videoSn='" + videoSn + '\'' + - ", videoChannel='" + videoChannel + '\'' + - ", expireTime=" + expireTime + - ", lat=" + lat + - ", lon=" + lon + - ", sn='" + sn + '\'' + - ", headImgUrl='" + headImgUrl + '\'' + - ", msgImgUrl='" + msgImgUrl + '\'' + - ", address='" + address + '\'' + - ", distance=" + distance + - ", isShowWindow=" + isShowWindow + - '}'; - } + } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XRoadEventAdapter.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XRoadEventAdapter.java index 7a350fc2c2..273422e80b 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XRoadEventAdapter.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/V2XRoadEventAdapter.java @@ -7,11 +7,12 @@ import androidx.recyclerview.widget.RecyclerView; import com.mogo.module.common.entity.V2XEventShowEntity; import com.mogo.module.common.entity.V2XWindowTypeEnum; -import com.mogo.module.v2x.adapter.holder.V2XFatigueDrivingDetailVH; -import com.mogo.module.v2x.adapter.holder.V2XIllegalParkDetailVH; +import com.mogo.module.v2x.adapter.holder.V2XFatigueDrivingVH; +import com.mogo.module.v2x.adapter.holder.V2XIllegalParkVH; import com.mogo.module.v2x.adapter.holder.V2XLiveVideoVH; -import com.mogo.module.v2x.adapter.holder.V2XPushEventDetailVH; -import com.mogo.module.v2x.adapter.holder.V2XRoadEventDetailVH; +import com.mogo.module.v2x.adapter.holder.V2XOtherSeekHelpVH; +import com.mogo.module.v2x.adapter.holder.V2XPushEventVH; +import com.mogo.module.v2x.adapter.holder.V2XRoadEventVH; import java.util.List; @@ -41,22 +42,26 @@ public class V2XRoadEventAdapter extends RecyclerView.Adapter triggerStartNavi(mNoveltyInfo); - public V2XFatigueDrivingDetailVH(ViewGroup viewGroup) { + public V2XFatigueDrivingVH(ViewGroup viewGroup) { super(LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.window_fatigue_driving, viewGroup, false)); mTvAddress = itemView.findViewById(R.id.tvAddress); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkDetailVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java similarity index 97% rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkDetailVH.java rename to modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java index 3e5e822623..d66488d4cd 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkDetailVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java @@ -29,7 +29,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * * @author donghongyu */ -public class V2XIllegalParkDetailVH extends V2XBaseViewHolder { +public class V2XIllegalParkVH extends V2XBaseViewHolder { private TextView mAddressTv; private TextView mIllegalNumTv; private HeartLikeView mIlIllegalParkingLike; @@ -41,7 +41,7 @@ public class V2XIllegalParkDetailVH extends V2XBaseViewHolder { private V2XVoiceCallbackListener v2XVoiceCallbackYouYongListener = (command, intent) -> roadReportTrue(); private V2XVoiceCallbackListener v2XVoiceCallbackMeiYongListener = (command, intent) -> roadReportErr(); - public V2XIllegalParkDetailVH(ViewGroup viewGroup) { + public V2XIllegalParkVH(ViewGroup viewGroup) { super(LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.window_illegal_parking, viewGroup, false)); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java new file mode 100644 index 0000000000..dae163a823 --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XOtherSeekHelpVH.java @@ -0,0 +1,194 @@ +package com.mogo.module.v2x.adapter.holder; + +import android.content.res.Resources; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.mogo.commons.debug.DebugConfig; +import com.mogo.module.common.entity.MarkerExploreWay; +import com.mogo.module.common.entity.MarkerLocation; +import com.mogo.module.common.entity.MarkerUserInfo; +import com.mogo.module.common.entity.V2XEventShowEntity; +import com.mogo.module.common.entity.V2XPushMessageEntity; +import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; +import com.mogo.module.v2x.scenario.scene.fatigue.V2XFatigueDrivingScenario; +import com.mogo.module.v2x.utils.ChartingUtil; +import com.mogo.module.v2x.utils.SpanUtils; +import com.mogo.module.v2x.utils.V2XUtils; +import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; +import com.mogo.module.v2x.voice.V2XVoiceConstants; +import com.mogo.module.v2x.voice.V2XVoiceManager; +import com.mogo.service.imageloader.MogoImageView; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import static android.view.View.GONE; +import static android.view.View.VISIBLE; + +/** + * e-mail : 1358506549@qq.com + * date : 2020/3/11 4:35 PM + * desc : 他人故障求助Window + * version: 1.0 + * + * @author donghongyu + */ +public class V2XOtherSeekHelpVH extends V2XBaseViewHolder { + + private MogoImageView ivHead; + private TextView tvName; + private TextView tvDistance; + private TextView tvEventTime; + private ImageView ivCall; + private ImageView ivNavi; + + private V2XPushMessageEntity mV2XPushMessageEntity; + private MarkerExploreWay mNoveltyInfo; + + // 上传事件的用户信息 + private MarkerUserInfo mUserInfo = new MarkerUserInfo(); + + // 语音控制导航 + private V2XVoiceCallbackListener mNaviCb = (command, intent) -> triggerStartNavi(mNoveltyInfo); + // 语音控制拨打电话 + private V2XVoiceCallbackListener mCallChartingCb = (command, intent) -> { + try { + mUserInfo.setSn(mV2XPushMessageEntity.getSn()); + mUserInfo.setUserHead(mV2XPushMessageEntity.getHeadImgUrl()); + mUserInfo.setUserName(mV2XPushMessageEntity.getDisplayName()); + mUserInfo.setGender(mV2XPushMessageEntity.getSex()); + mUserInfo.setAge(30); + mNoveltyInfo.setUserInfo(mUserInfo); + triggerCallChart(mNoveltyInfo); + } catch (Exception e) { + e.printStackTrace(); + } + }; + + public V2XOtherSeekHelpVH(ViewGroup viewGroup) { + super(LayoutInflater.from(viewGroup.getContext()) + .inflate(R.layout.window_fault_help, viewGroup, false)); + ivHead = itemView.findViewById(R.id.ivFaultHelpHead); + tvName = itemView.findViewById(R.id.tvFaultHelpName); + tvDistance = itemView.findViewById(R.id.tvFaultHelpDistance); + tvEventTime = itemView.findViewById(R.id.tvFaultHelpEventTime); + ivCall = itemView.findViewById(R.id.ivFaultHelpEventCall); + ivNavi = itemView.findViewById(R.id.ivFaultHelpEventNavi); + ivNavi.setOnClickListener(v -> { + triggerStartNavi(mNoveltyInfo); + }); + + // 设置视图状态监听 + itemView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(View v) { + //Logger.w(MODULE_NAME, "列表View V2XPushEventDetailVH 触发 onViewAttachedToWindow"); + // 注册语音交互 + V2XVoiceManager.INSTANCE + .registerWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_NAVI, + mNaviCb) + .registerUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_NAVI_UN_WAKEUP, + mNaviCb) + .registerWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_CALL_CHATTING, + mCallChartingCb) + .registerUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_CHAT_MORE_UN_WAKEUP, + mCallChartingCb); + } + + @Override + public void onViewDetachedFromWindow(View v) { + //Logger.w(MODULE_NAME, "列表View V2XPushEventDetailVH 触发 onViewDetachedFromWindow"); + // 反注册语音交互 + V2XVoiceManager.INSTANCE + .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_NAVI) + .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_NAVI_UN_WAKEUP) + .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_CALL_CHATTING) + .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_CHAT_MORE_UN_WAKEUP); + } + }); + } + + public void initView(V2XEventShowEntity v2XEventShowEntity) { + mV2XPushMessageEntity = v2XEventShowEntity.getV2XPushMessageEntity(); + // 只有自研车机才会 有车聊聊通话 + if (DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE) { + // 判断是否可以打电话 + ChartingUtil.isCanCall(b -> { + if (b) { + // 判断是否可以打电话 + ChartingUtil.isOnLine(mV2XPushMessageEntity.getSn(), b1 -> { + if (b1) { + ivCall.setVisibility(VISIBLE); + } else { + ivCall.setVisibility(GONE); + } + }); + } else { + ivCall.setVisibility(GONE); + } + }); + + ivCall.setOnClickListener(v -> { + if (!V2XUtils.isFastClick()) { + try { + mUserInfo.setSn(mV2XPushMessageEntity.getSn()); + mUserInfo.setUserHead(mV2XPushMessageEntity.getHeadImgUrl()); + mUserInfo.setUserName(mV2XPushMessageEntity.getDisplayName()); + mUserInfo.setGender(mV2XPushMessageEntity.getSex()); + mUserInfo.setAge(30); + mNoveltyInfo.setUserInfo(mUserInfo); + triggerCallChart(mNoveltyInfo); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + try { + MarkerLocation markerLocation = new MarkerLocation(); + markerLocation.setLon(mV2XPushMessageEntity.getLon()); + markerLocation.setLat(mV2XPushMessageEntity.getLat()); + mNoveltyInfo = new MarkerExploreWay(); + mNoveltyInfo.setLocation(markerLocation); + } catch (Exception e) { + e.printStackTrace(); + } + try { + if (!TextUtils.isEmpty(mV2XPushMessageEntity.getHeadImgUrl())) { + V2XServiceManager.getImageLoader() + .displayImage(mV2XPushMessageEntity.getHeadImgUrl(), ivHead); + } + tvName.setText(mV2XPushMessageEntity.getDisplayName()); + SpanUtils.with(tvDistance) + .append("" + mV2XPushMessageEntity.getDistance()) + .setFontSize((int) tvDistance.getResources().getDimension(R.dimen.dp_80)) + .append("M") + .setFontSize((int) tvDistance.getResources().getDimension(R.dimen.dp_30)) + .create(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.CHINA); + String eventTime = String.format("%s发布求助信息", + sdf.format(new Date(mV2XPushMessageEntity.getCreateTime()))); + tvEventTime.setText(eventTime); + + } catch (Resources.NotFoundException e) { + e.printStackTrace(); + } + } + + /** + * 延迟关闭窗体 + */ + @Override + public void delayedCloseWindow() { + itemView.postDelayed(() -> V2XFatigueDrivingScenario.getInstance().close(), 1000); + } + +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventDetailVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java similarity index 97% rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventDetailVH.java rename to modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java index 9916ed2d92..134926fe46 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventDetailVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java @@ -14,12 +14,10 @@ import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.scenario.scene.push.V2XPushEventScenario; -import com.mogo.module.v2x.utils.ChartingUtil; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; import com.mogo.module.v2x.voice.V2XVoiceConstants; import com.mogo.module.v2x.voice.V2XVoiceManager; import com.mogo.service.imageloader.MogoImageView; -import com.mogo.utils.logger.Logger; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; @@ -30,7 +28,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * desc : TODO 这里是前瞻演示需求,推送的消息, * version: 1.0 */ -public class V2XPushEventDetailVH extends V2XBaseViewHolder { +public class V2XPushEventVH extends V2XBaseViewHolder { private MogoImageView ivImg; private MogoImageView ivReportHead; @@ -57,6 +55,7 @@ public class V2XPushEventDetailVH extends V2XBaseViewHolder { mUserInfo.setUserName("蘑菇用户"); mUserInfo.setGender("男"); mUserInfo.setAge(30); + mNoveltyInfo.setUserInfo(mUserInfo); triggerCallChart(mNoveltyInfo); } catch (Exception e) { e.printStackTrace(); @@ -65,7 +64,7 @@ public class V2XPushEventDetailVH extends V2XBaseViewHolder { // 点赞语音回调 private V2XVoiceCallbackListener v2XVoiceCallbackLickListener = (command, intent) -> triggerZan(mNoveltyInfo); - public V2XPushEventDetailVH(ViewGroup viewGroup) { + public V2XPushEventVH(ViewGroup viewGroup) { super(LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.item_v2x_push_event_detail, viewGroup, false)); ivImg = itemView.findViewById(R.id.ivImg); @@ -86,6 +85,7 @@ public class V2XPushEventDetailVH extends V2XBaseViewHolder { mUserInfo.setUserName("蘑菇用户"); mUserInfo.setGender("男"); mUserInfo.setAge(30); + mNoveltyInfo.setUserInfo(mUserInfo); triggerCallChart(mNoveltyInfo); } catch (Exception e) { e.printStackTrace(); @@ -125,9 +125,9 @@ public class V2XPushEventDetailVH extends V2XBaseViewHolder { .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_CLOSE_WINDOW) .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_CLOSE_WINDOW_UN_WAKEUP) .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_CALL_CHATTING) + .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_CHAT_MORE_UN_WAKEUP) .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ZAN) .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REPORT) - .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_CHAT_MORE_UN_WAKEUP) .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_ZAN_UN_WAKEUP) .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_FEEDBACK_TRUE) .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_V2X_TO_FEEDBACK_ERROR) diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventDetailVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java similarity index 99% rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventDetailVH.java rename to modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java index 93bd2ef442..75c28a20f1 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventDetailVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java @@ -50,7 +50,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * desc : 道路事件详情 * version: 1.0 */ -public class V2XRoadEventDetailVH extends V2XBaseViewHolder { +public class V2XRoadEventVH extends V2XBaseViewHolder { private MogoImageView ivEventImg; private MogoImageView ivReportHead; private ImageView ivEventPlay; @@ -125,7 +125,7 @@ public class V2XRoadEventDetailVH extends V2XBaseViewHolder { ivEventReportErr = itemView.findViewById(R.id.ivEventReportErr); } - public V2XRoadEventDetailVH(ViewGroup viewGroup) { + public V2XRoadEventVH(ViewGroup viewGroup) { super(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_event_detail, viewGroup, false)); init(itemView); // 设置视图状态监听