diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java index f5fbe75e3a..5ed2b9d5d1 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java @@ -134,8 +134,9 @@ public class V2XConst { */ public static final String V2X_OPTIMAL_SPEED_MARKER = "V2X_OPTIMAL_SPEED_MARKER"; - /* + /* TODO 这里是常量,不能作为判断依据,初始化后就存在内存了,不会随着状态改变而改变 * VR模式 * */ public static final boolean VR_MODE = MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode(); + } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java index 3bd380380b..a54183dc3e 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java @@ -19,7 +19,6 @@ import com.mogo.map.listener.IMogoMapListener; import com.mogo.map.location.IMogoLocationListener; import com.mogo.map.marker.IMogoMarker; import com.mogo.map.marker.IMogoMarkerClickListener; -import com.mogo.map.marker.MogoMarkersHandler; import com.mogo.map.model.MogoPoi; import com.mogo.map.navi.IMogoNaviListener; import com.mogo.map.uicontroller.EnumMapUI; @@ -37,7 +36,6 @@ import com.mogo.module.v2x.network.V2XRefreshCallback; import com.mogo.module.v2x.receiver.SceneBroadcastReceiver; import com.mogo.module.v2x.scenario.impl.V2XScenarioManager; import com.mogo.module.v2x.scenario.scene.livecar.V2XVoiceCallLiveBiz; -import com.mogo.module.v2x.scenario.scene.park.V2XIllegalParkScenario; import com.mogo.module.v2x.scenario.scene.park.V2XIllegalParkWindow; import com.mogo.module.v2x.utils.FatigueDrivingUtils; import com.mogo.module.v2x.utils.TimeUtils; @@ -52,12 +50,9 @@ import com.mogo.service.statusmanager.StatusDescriptor; import com.mogo.utils.logger.Logger; import com.mogo.utils.network.utils.GsonUtil; import com.mogo.utils.storage.SharedPrefsMgr; -import static com.mogo.module.v2x.VideoInitKt.initVideo; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; +import static com.mogo.module.v2x.VideoInitKt.initVideo; /** * author : donghongyu @@ -237,12 +232,12 @@ public class V2XModuleProvider implements @Override public boolean onMarkerClicked(IMogoMarker marker) { - Log.d(TAG,"onMarkerClicked2222"); + Log.d(TAG, "onMarkerClicked2222"); //点击的marker的具体数据 MarkerExploreWay exploreWay = extractFromMarker(marker); - MarkerExploreWayItem item = exploreWay.getItems().get(0); + MarkerExploreWayItem item = exploreWay.getItems().get(0); String path = item.getUrl(); - if (path.contains(".mp4")){ + if (path.contains(".mp4")) { initVideo(); } @@ -285,9 +280,9 @@ public class V2XModuleProvider implements Logger.d(V2XConst.MODULE_NAME, "V2X===违章停车:onMarkerClicked=" + markerExploreWay); - ((V2XIllegalParkWindow) V2XIllegalParkScenario.getInstance() - .getV2XWindow()) - .show(markerExploreWay, false); + //直接展示弹窗 + V2XIllegalParkWindow parkScenario = new V2XIllegalParkWindow(); + parkScenario.show(markerExploreWay, false); } catch (Exception e) { e.printStackTrace(); } 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 5c0bc485a3..66dd23a818 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 @@ -14,6 +14,7 @@ import com.mogo.module.v2x.adapter.holder.V2XLiveVideoVH; 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 com.mogo.module.v2x.scenario.view.IV2XWindow; import java.util.List; @@ -28,8 +29,12 @@ public class V2XRoadEventAdapter extends RecyclerView.Adapter itemList; - public V2XRoadEventAdapter(List itemList) { + // 当前展示条目绑定的window + private IV2XWindow mV2XWindow; + + public V2XRoadEventAdapter(List itemList, IV2XWindow v2XWindow) { this.itemList = itemList; + this.mV2XWindow = v2XWindow; } @NonNull @@ -39,31 +44,31 @@ public class V2XRoadEventAdapter extends RecyclerView.Adapter private static final String TAG = "V2XBaseViewHolder"; private ICarsChattingProvider mCarsChattingProvider; - public V2XBaseViewHolder(@NonNull View itemView) { - super(itemView); - } + // 当前展示条目绑定的window + protected IV2XWindow mV2XWindow; + public V2XBaseViewHolder(@NonNull View itemView, IV2XWindow v2XWindow) { + super(itemView); + mV2XWindow = v2XWindow; + } /** * 填充View视图 @@ -58,7 +62,13 @@ public abstract class V2XBaseViewHolder /** * 延迟关闭窗体视图 */ - public abstract void delayedCloseWindow(); + public void delayedCloseWindow() { + itemView.post(() -> { + if (mV2XWindow != null) { + mV2XWindow.close(); + } + }); + } /** * 点赞 @@ -105,7 +115,7 @@ public abstract class V2XBaseViewHolder String name = noveltyInfo.getUserInfo().getUserName(); mogoDriverInfo.setUserName(name != null ? name : ""); mogoDriverInfo.setUserHead(noveltyInfo.getUserInfo().getUserHead()); - if ( mCarsChattingProvider != null ) { + if (mCarsChattingProvider != null) { mCarsChattingProvider.showUserWindow(MODULE_NAME, mogoDriverInfo, this.itemView.getContext()); } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XEventUgcVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XEventUgcVH.java index 36847bf09e..c56f2f34ac 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XEventUgcVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XEventUgcVH.java @@ -16,7 +16,7 @@ import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.V2XServiceManager; -import com.mogo.module.v2x.scenario.scene.ugc.V2XEventUgcScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.EventTypeUtils; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; @@ -59,9 +59,10 @@ public class V2XEventUgcVH extends V2XBaseViewHolder { private V2XRoadEventEntity mV2XRoadEventEntity; private V2XEventShowEntity mV2XEventShowEntity; - public V2XEventUgcVH(ViewGroup viewGroup) { + public V2XEventUgcVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { super(LayoutInflater.from(viewGroup.getContext()) - .inflate(R.layout.item_v2x_event_ugc, viewGroup, false)); + .inflate(R.layout.item_v2x_event_ugc, viewGroup, false) + , v2XWindow); ivEventTypeIcon = itemView.findViewById(R.id.ivEventTypeIcon); tvEventUgcTitle = itemView.findViewById(R.id.tvEventUgcTitle); ivEventReportTrue = itemView.findViewById(R.id.ivEventReportTrue); @@ -197,12 +198,4 @@ public class V2XEventUgcVH extends V2XBaseViewHolder { delayedCloseWindow(); } - /** - * 延迟关闭窗体 - */ - @Override - public void delayedCloseWindow() { - itemView.postDelayed(() -> V2XEventUgcScenario.getInstance().close(), 1000); - } - } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XFatigueDrivingVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XFatigueDrivingVH.java index ed99977aa1..594c294723 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XFatigueDrivingVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XFatigueDrivingVH.java @@ -14,7 +14,7 @@ import com.mogo.module.common.entity.V2XEventShowEntity; import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.service.Utils; import com.mogo.module.v2x.R; -import com.mogo.module.v2x.scenario.scene.fatigue.V2XFatigueDrivingScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.LocationUtils; import com.mogo.module.v2x.utils.SpanUtils; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; @@ -39,15 +39,16 @@ public class V2XFatigueDrivingVH extends V2XBaseViewHolder { // 语音控制导航 private V2XVoiceCallbackListener mNaviCb = (command, intent) -> triggerStartNavi(mNoveltyInfo); - public V2XFatigueDrivingVH(ViewGroup viewGroup) { + public V2XFatigueDrivingVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { super(LayoutInflater.from(viewGroup.getContext()) - .inflate(R.layout.item_v2x_fatigue_driving, viewGroup, false)); + .inflate(R.layout.item_v2x_fatigue_driving, viewGroup, false) + , v2XWindow); mTvAddress = itemView.findViewById(R.id.tvAddress); mTvAddressDistance = itemView.findViewById(R.id.tvAddressDistance); mIvToNav = itemView.findViewById(R.id.ivToNav); mIvClose = itemView.findViewById(R.id.ivClose); mIvToNav.setOnClickListener(v -> triggerStartNavi(mNoveltyInfo)); - mIvClose.setOnClickListener(v -> V2XFatigueDrivingScenario.getInstance().close()); + mIvClose.setOnClickListener(v -> delayedCloseWindow()); // 设置视图状态监听 itemView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @@ -106,12 +107,5 @@ public class V2XFatigueDrivingVH extends V2XBaseViewHolder { .create(); } - /** - * 延迟关闭窗体 - */ - @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/V2XHistoryBaseViewHolder.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XHistoryBaseViewHolder.java new file mode 100644 index 0000000000..dd9efee1cf --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XHistoryBaseViewHolder.java @@ -0,0 +1,260 @@ +package com.mogo.module.v2x.adapter.holder; + +import android.util.Log; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.mogo.commons.voice.AIAssist; +import com.mogo.map.MogoLatLng; +import com.mogo.map.navi.IMogoNaviListener; +import com.mogo.map.navi.MogoNaviInfo; +import com.mogo.map.navi.MogoTraffic; +import com.mogo.module.common.entity.MarkerExploreWay; +import com.mogo.module.common.entity.MarkerLocation; +import com.mogo.module.common.entity.V2XEventZanData; +import com.mogo.module.v2x.V2XConst; +import com.mogo.module.v2x.V2XServiceManager; +import com.mogo.module.v2x.scenario.view.IV2XWindow; +import com.mogo.module.v2x.utils.ChartingUtil; +import com.mogo.module.v2x.utils.RoadConditionUtils; +import com.mogo.module.v2x.utils.TimeUtils; +import com.mogo.module.v2x.utils.TrackUtils; +import com.mogo.module.v2x.utils.V2XSQLiteUtils; +import com.mogo.module.v2x.utils.V2XUtils; +import com.mogo.utils.TipToast; +import com.mogo.utils.logger.Logger; +import com.zhidao.carchattingprovider.CallChattingProviderConstant; +import com.zhidao.carchattingprovider.ICarsChattingProvider; +import com.zhidao.carchattingprovider.MogoDriverInfo; + +import static com.mogo.module.v2x.V2XConst.MODULE_NAME; + +/** + * 出行动态 + * + * @author donghongyu + */ +public abstract class V2XHistoryBaseViewHolder + extends RecyclerView.ViewHolder + implements IMogoNaviListener { + + private static final String TAG = "V2XBaseViewHolder"; + private ICarsChattingProvider mCarsChattingProvider; + + + public V2XHistoryBaseViewHolder(@NonNull View itemView) { + super(itemView); + } + + /** + * 填充View视图 + * + * @param viewData 与视图绑定的数据 + */ + public abstract void initView(T viewData); + + /** + * 延迟关闭窗体视图 + */ + public void delayedCloseWindow() { + + } + + /** + * 点赞 + */ + public void triggerZan(MarkerExploreWay noveltyInfo) { + try { + AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("已点赞", null); + showTip("已点赞"); + if (noveltyInfo != null) { + // 调用网络API接口 + V2XServiceManager.getV2XMarkerService() + .getV2XRefreshModel() + .giveLikeLiveVideo(null, noveltyInfo.getSn()); + + V2XEventZanData v2XEventZanData = new V2XEventZanData(); + v2XEventZanData.setEventId(noveltyInfo.getInfoId()); + v2XEventZanData.setTriggerTime(TimeUtils.getNowMills()); + V2XSQLiteUtils.saveEventZanLocalStory(v2XEventZanData); + + + // 上报数据统计 + TrackUtils.trackV2xRoadEvent( + noveltyInfo.getInfoId(), + noveltyInfo.getSn(), + V2XConst.V2X_ROAD_ZAN); + } + } catch (Exception e) { + e.printStackTrace(); + } + delayedCloseWindow(); + } + + public void triggerIVReportHead(MarkerExploreWay noveltyInfo) { + Log.d(TAG, "点击头像" + mCarsChattingProvider); + try { + mCarsChattingProvider = (ICarsChattingProvider) ARouter.getInstance().build(CallChattingProviderConstant.CAR_CALL_PROVIDER).navigation(); + MogoDriverInfo mogoDriverInfo = new MogoDriverInfo(); + int ageNumber = noveltyInfo.getUserInfo().getAgeNumber(); + mogoDriverInfo.setAge(ageNumber); + String gender = noveltyInfo.getUserInfo().getGender(); + mogoDriverInfo.setGender(gender); + String sn = noveltyInfo.getUserInfo().getSn(); + mogoDriverInfo.setSn(sn != null ? sn : ""); + String name = noveltyInfo.getUserInfo().getUserName(); + mogoDriverInfo.setUserName(name != null ? name : ""); + mogoDriverInfo.setUserHead(noveltyInfo.getUserInfo().getUserHead()); + if (mCarsChattingProvider != null) { + mCarsChattingProvider.showUserWindow(MODULE_NAME, mogoDriverInfo, this.itemView.getContext()); + } + + } catch (Exception e) { + Log.d(TAG, "点击头像发生错误--triggerIVReportHead" + e); + e.printStackTrace(); + } + } + + /** + * 打电话 + */ + public void triggerCallChart(MarkerExploreWay noveltyInfo) { + try { + MarkerLocation location = new MarkerLocation(); + location.setLat(noveltyInfo.getLocation().getLat()); + location.setLon(noveltyInfo.getLocation().getLon()); + + ChartingUtil.callChatting(noveltyInfo.getUserInfo(), location); + + TrackUtils.trackV2xRoadEvent( + noveltyInfo.getInfoId(), + noveltyInfo.getSn(), + V2XConst.V2X_ROAD_CHAT); + } catch (Exception e) { + e.printStackTrace(); + TipToast.tip("用户信息异常"); + } + delayedCloseWindow(); + } + + /** + * 反馈路况错误 + */ + public void triggerReportErr(MarkerExploreWay noveltyInfo) { + try { + RoadConditionUtils.sendShareReceiverInfo( + noveltyInfo.getInfoId(), + noveltyInfo.getPoiType(), + 3); + + TrackUtils.trackV2xRoadEvent( + noveltyInfo.getInfoId(), + noveltyInfo.getSn(), + V2XConst.V2X_ROAD_REPORT_ERROR); + } catch (Exception e) { + e.printStackTrace(); + TipToast.tip("路况信息异常"); + } + delayedCloseWindow(); + } + + /** + * 反馈路况正确 + */ + public void triggerReportTrue(MarkerExploreWay noveltyInfo) { + try { + RoadConditionUtils.sendShareReceiverInfo( + noveltyInfo.getInfoId(), + noveltyInfo.getPoiType(), + 2); + + TrackUtils.trackV2xRoadEvent( + noveltyInfo.getInfoId(), + noveltyInfo.getSn(), + V2XConst.V2X_ROAD_REPORT_RIGHT); + } catch (Exception e) { + e.printStackTrace(); + TipToast.tip("路况信息异常"); + } + delayedCloseWindow(); + } + + /** + * 导航规划路线 + */ + public void triggerStartNavi(MarkerExploreWay noveltyInfo) { + try { + V2XServiceManager.getMogoRegisterCenter().registerMogoNaviListener(MODULE_NAME, this); + + MogoLatLng endPoint = new MogoLatLng( + noveltyInfo.getLocation().getLat(), + noveltyInfo.getLocation().getLon()); + + V2XServiceManager.getNavi().naviTo(endPoint); + + TrackUtils.trackV2xRoadEvent( + noveltyInfo.getInfoId(), + noveltyInfo.getSn(), + V2XConst.V2X_ROAD_NAVI); + } catch (Exception e) { + e.printStackTrace(); + TipToast.tip("路况信息异常"); + } + delayedCloseWindow(); + } + + + /** + * 显示自定义 Toast + * + * @param msg + */ + public void showTip(String msg) { + TipToast.tip(msg); + } + + @Override + public void onInitNaviFailure() { + + } + + @Override + public void onInitNaviSuccess() { + + } + + @Override + public void onNaviInfoUpdate(MogoNaviInfo naviinfo) { + + } + + @Override + public void onStartNavi() { + + } + + @Override + public void onStopNavi() { + + } + + @Override + public void onCalculateSuccess() { + Logger.w(TAG, "onCalculateSuccess"); + V2XServiceManager.getNavi().startNavi(true); + V2XServiceManager.getMogoRegisterCenter().unregisterMogoNaviListener(MODULE_NAME); + } + + @Override + public void onoCalculateFailed() { + + } + + @Override + public void onUpdateTraffic(MogoTraffic traffic) { + + } +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java index b97e836e9b..1d84a736b6 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XIllegalParkVH.java @@ -12,7 +12,7 @@ import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.V2XServiceManager; -import com.mogo.module.v2x.scenario.scene.park.V2XIllegalParkScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.RoadConditionUtils; import com.mogo.module.v2x.utils.V2XSQLiteUtils; import com.mogo.module.v2x.view.HeartLikeView; @@ -24,7 +24,6 @@ import com.mogo.utils.logger.Logger; import com.mogo.utils.network.utils.GsonUtil; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; -import static com.mogo.module.v2x.V2XConst.VR_MODE; /** * e-mail : 1358506549@qq.com @@ -46,9 +45,12 @@ public class V2XIllegalParkVH extends V2XBaseViewHolder { private V2XVoiceCallbackListener v2XVoiceCallbackYouYongListener = (command, intent) -> roadReportTrue(); private V2XVoiceCallbackListener v2XVoiceCallbackMeiYongListener = (command, intent) -> roadReportErr(); - public V2XIllegalParkVH(ViewGroup viewGroup) { + public V2XIllegalParkVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { super(LayoutInflater.from(viewGroup.getContext()) - .inflate(VR_MODE ? R.layout.item_v2x_illegal_parking_vr : R.layout.item_v2x_illegal_parking, viewGroup, false)); + .inflate(V2XServiceManager.getMoGoStatusManager().isVrMode() ? + R.layout.item_v2x_illegal_parking_vr : + R.layout.item_v2x_illegal_parking, viewGroup, false) + , v2XWindow); mAddressTv = itemView.findViewById(R.id.tvAddress); mIllegalNumTv = itemView.findViewById(R.id.tvIllegalNum); @@ -111,7 +113,7 @@ public class V2XIllegalParkVH extends V2XBaseViewHolder { v2XHistoryScenarioData.setEventJsonData(GsonUtil.jsonFromObject(mExploreWay)); v2XHistoryScenarioData.setEventJsonDataHashCode(mExploreWay.hashCode()); V2XSQLiteUtils.updateScenarioHistoryDataIsDispose(v2XHistoryScenarioData); - itemView.postDelayed(() -> V2XIllegalParkScenario.getInstance().close(), 1000); + super.delayedCloseWindow(); } /** diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XLiveVideoVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XLiveVideoVH.java index 37c3ab96e7..9ffdeddda2 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XLiveVideoVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XLiveVideoVH.java @@ -11,6 +11,7 @@ import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.scenario.scene.road.V2XRoadEventScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.TrackUtils; import com.mogo.module.v2x.view.V2XLiveGSYVideoView; import com.mogo.service.imageloader.MogoImageView; @@ -21,6 +22,7 @@ import com.mogo.service.imageloader.MogoImageView; * date : 2020/3/11 4:35 PM * desc : 直播类型的卡片 * version: 1.0 + * * @author donghongyu */ public class V2XLiveVideoVH extends V2XBaseViewHolder { @@ -35,8 +37,8 @@ public class V2XLiveVideoVH extends V2XBaseViewHolder { // 预警的道路事件数据 private V2XRoadEventEntity mV2XRoadEventEntity; - public V2XLiveVideoVH(ViewGroup viewGroup) { - super(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_live_video, viewGroup, false)); + public V2XLiveVideoVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { + super(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_live_video, viewGroup, false), v2XWindow); videoPlayer = itemView.findViewById(R.id.videoPlayer); ivReportHead = itemView.findViewById(R.id.ivReportHead); } @@ -57,9 +59,4 @@ public class V2XLiveVideoVH extends V2XBaseViewHolder { TrackUtils.trackV2xRoadEvent(mV2XRoadEventEntity.getNoveltyInfo().getInfoId(), v2XLiveCarEntity.getSn(), V2XConst.V2X_ROAD_VIDEO); } - @Override - public void delayedCloseWindow() { - ivReportHead.postDelayed(() -> V2XRoadEventScenario.getInstance().close(), 2000); - } - } 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 index e866a3038a..37c49f4e49 100644 --- 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 @@ -12,7 +12,6 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.mogo.commons.debug.DebugConfig; -import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerLocation; import com.mogo.module.common.entity.MarkerUserInfo; @@ -20,7 +19,7 @@ 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.seek.V2XSeekHelpScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.ChartingUtil; import com.mogo.module.v2x.utils.SpanUtils; import com.mogo.module.v2x.utils.V2XUtils; @@ -36,7 +35,6 @@ import java.util.Locale; import static android.view.View.GONE; import static android.view.View.VISIBLE; -import static com.mogo.module.v2x.V2XConst.VR_MODE; /** * e-mail : 1358506549@qq.com @@ -75,9 +73,12 @@ public class V2XOtherSeekHelpVH extends V2XBaseViewHolder { // 查看车辆信息 private V2XVoiceCallbackListener mVoiceOpenCarInfoLis = ((command, intent) -> triggerIVReportHead(mNoveltyInfo)); - public V2XOtherSeekHelpVH(ViewGroup viewGroup) { + public V2XOtherSeekHelpVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { super(LayoutInflater.from(viewGroup.getContext()) - .inflate(VR_MODE ? R.layout.item_v2x_fault_help_vr : R.layout.item_v2x_fault_help, viewGroup, false)); + .inflate(V2XServiceManager.getMoGoStatusManager().isVrMode() ? + R.layout.item_v2x_fault_help_vr : + R.layout.item_v2x_fault_help, viewGroup, false) + , v2XWindow); mContext = viewGroup.getContext(); ivHead = itemView.findViewById(R.id.ivFaultHelpHead); tvName = itemView.findViewById(R.id.tvFaultHelpName); @@ -185,7 +186,7 @@ public class V2XOtherSeekHelpVH extends V2XBaseViewHolder { } try { if (!TextUtils.isEmpty(mV2XPushMessageEntity.getHeadImgUrl())) { - if (VR_MODE) { + if (V2XServiceManager.getMoGoStatusManager().isVrMode()) { Glide.with(mContext).load(mV2XPushMessageEntity.getHeadImgUrl()).apply(RequestOptions.bitmapTransform( new GlideRoundedCornersTransform(20, GlideRoundedCornersTransform.CornerType.LEFT))).into(ivHead); } else { @@ -208,7 +209,7 @@ public class V2XOtherSeekHelpVH extends V2XBaseViewHolder { .setFontSize((int) itemView.getResources().getDimension(R.dimen.module_v2x_event_distance_text)) .append("米") .setFontSize((int) itemView.getResources().getDimension( - VR_MODE ? + V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.dimen.module_v2x_event_distance_title_vr : R.dimen.module_v2x_event_distance_title)) .create(); } @@ -222,12 +223,4 @@ public class V2XOtherSeekHelpVH extends V2XBaseViewHolder { } } - /** - * 延迟关闭窗体 - */ - @Override - public void delayedCloseWindow() { - itemView.postDelayed(() -> V2XSeekHelpScenario.getInstance().close(), 1000); - } - } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java index c5e6749eb6..61f553babb 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java @@ -13,7 +13,7 @@ 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.push.V2XPushEventScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; import com.mogo.module.v2x.voice.V2XVoiceConstants; import com.mogo.module.v2x.voice.V2XVoiceManager; @@ -27,6 +27,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * date : 2020/3/11 4:35 PM * desc : TODO 这里是前瞻演示需求,推送的消息, * version: 1.0 + * * @author donghongyu */ public class V2XPushEventVH extends V2XBaseViewHolder { @@ -65,9 +66,10 @@ public class V2XPushEventVH extends V2XBaseViewHolder { // 点赞语音回调 private V2XVoiceCallbackListener v2XVoiceCallbackLickListener = (command, intent) -> triggerZan(mNoveltyInfo); - public V2XPushEventVH(ViewGroup viewGroup) { + public V2XPushEventVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { super(LayoutInflater.from(viewGroup.getContext()) - .inflate(R.layout.item_v2x_push_event_detail, viewGroup, false)); + .inflate(R.layout.item_v2x_push_event_detail, viewGroup, false) + , v2XWindow); ivImg = itemView.findViewById(R.id.ivImg); ivReportHead = itemView.findViewById(R.id.ivReportHead); @@ -178,12 +180,4 @@ public class V2XPushEventVH extends V2XBaseViewHolder { } } - /** - * 延迟关闭窗体 - */ - @Override - public void delayedCloseWindow() { - itemView.postDelayed(() -> V2XPushEventScenario.getInstance().close(), 1000); - } - } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java index c159852853..8b61879c5f 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XRoadEventVH.java @@ -13,7 +13,6 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.mogo.commons.debug.DebugConfig; -import com.mogo.module.common.MogoApisHandler; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.MarkerUserInfo; import com.mogo.module.common.entity.V2XEventShowEntity; @@ -25,9 +24,9 @@ import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.entity.net.V2XUserInfoRes; import com.mogo.module.v2x.network.V2XRefreshCallback; import com.mogo.module.v2x.scenario.scene.livecar.V2XRoadLiveCarScenario; -import com.mogo.module.v2x.scenario.scene.road.V2XRoadEventScenario; import com.mogo.module.v2x.scenario.scene.road.V2XRoadEventWindow; import com.mogo.module.v2x.scenario.scene.road.V2XRoadVideoCarScenario; +import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.ChartingUtil; import com.mogo.module.v2x.utils.EventTypeUtils; import com.mogo.module.v2x.utils.V2XSQLiteUtils; @@ -36,9 +35,7 @@ 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.service.impl.imageloader.glide.transform.GlideRoundBitmapTransform; import com.mogo.utils.ArrayUtils; -import com.mogo.utils.BitmapHelper; import com.mogo.utils.DateTimeUtils; import com.mogo.utils.glide.GlideRoundedCornersTransform; import com.mogo.utils.logger.Logger; @@ -51,7 +48,6 @@ import java.util.List; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; -import static com.mogo.module.v2x.V2XConst.VR_MODE; /** * author : donghongyu @@ -146,11 +142,11 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { ivEventReportErr = itemView.findViewById(R.id.ivEventReportErr); } - public V2XRoadEventVH(ViewGroup viewGroup) { - super(VR_MODE ? - LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_event_detail_vr, viewGroup, false) : - LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_event_detail, viewGroup, false) - ); + public V2XRoadEventVH(ViewGroup viewGroup, IV2XWindow v2XWindow) { + super(V2XServiceManager.getMoGoStatusManager().isVrMode() ? + LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_event_detail_vr, viewGroup, false) : + LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_v2x_event_detail, viewGroup, false) + , v2XWindow); mContext = viewGroup.getContext(); init(itemView); // 设置视图状态监听 @@ -214,7 +210,7 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { imgUrl = mNoveltyInfo.getItems().get(0).getUrl(); } if (!TextUtils.isEmpty(imgUrl)) { - if (VR_MODE) { + if (V2XServiceManager.getMoGoStatusManager().isVrMode()) { Glide.with(mContext).load(imgUrl).apply(RequestOptions.bitmapTransform( new GlideRoundedCornersTransform(20, GlideRoundedCornersTransform.CornerType.LEFT))).into(ivEventImg); } else { @@ -353,8 +349,11 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { V2XRoadLiveCarScenario.getInstance().init(v2XMessageEntity); // 打开直播后,窗口倒计时暂停关闭,直播被关闭后继续倒计时 - V2XRoadEventWindow window = (V2XRoadEventWindow) V2XRoadEventScenario.getInstance().getV2XWindow(); - window.stopCountDown(); + if (mV2XWindow != null) { + if (mV2XWindow instanceof V2XRoadEventWindow) { + ((V2XRoadEventWindow) mV2XWindow).stopCountDown(); + } + } } } @@ -427,18 +426,18 @@ public class V2XRoadEventVH extends V2XBaseViewHolder { }); } } - - /** - * 延迟关闭窗体 - */ - @Override - public void delayedCloseWindow() { - itemView.postDelayed(() -> { - // 移除窗体 - V2XServiceManager - .getIMogoWindowManager() - .removeView(V2XRoadEventScenario.getInstance().getV2XWindow().getView()); - V2XRoadEventScenario.getInstance().close(); - }, 1000); - } +// +// /** +// * 延迟关闭窗体 +// */ +// @Override +// public void delayedCloseWindow() { +//// itemView.postDelayed(() -> { +//// // 移除窗体 +//// V2XServiceManager +//// .getIMogoWindowManager() +//// .removeView(V2XRoadEventScenario.getInstance().getV2XWindow().getView()); +//// V2XRoadEventScenario.getInstance().close(); +//// }, 1000); +// } } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XScenarioHistoryIllegalParkVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XScenarioHistoryIllegalParkVH.java index 5448409c33..b53631a4bd 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XScenarioHistoryIllegalParkVH.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XScenarioHistoryIllegalParkVH.java @@ -5,8 +5,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import androidx.annotation.NonNull; - import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.V2XHistoryScenarioData; import com.mogo.module.v2x.R; @@ -23,7 +21,7 @@ import com.mogo.utils.network.utils.GsonUtil; * * @author donghongyu */ -public class V2XScenarioHistoryIllegalParkVH extends V2XBaseViewHolder { +public class V2XScenarioHistoryIllegalParkVH extends V2XHistoryBaseViewHolder { private TextView mTvAddress; private TextView mTvIllegalNum; @@ -37,7 +35,7 @@ public class V2XScenarioHistoryIllegalParkVH extends V2XBaseViewHolder { +public class V2XScenarioHistoryOtherSeekHelpVH extends V2XHistoryBaseViewHolder { private TextView mTagEventType; private TextView mTagEventEvaluate; @@ -54,7 +52,7 @@ public class V2XScenarioHistoryOtherSeekHelpVH extends V2XBaseViewHolder { +public class V2XScenarioHistoryRoadEventVH extends V2XHistoryBaseViewHolder { private TextView mTvAddress; private TextView mTvIllegalNum; private ImageView mIvIconP; @@ -39,7 +37,7 @@ public class V2XScenarioHistoryRoadEventVH extends V2XBaseViewHolder implements IV2XScenario { private IV2XWindow mV2XWindow; private IV2XButton mV2XButton; private IV2XMarker mV2XMarker; - private IMoGoV2XStatusManager mV2XStatusManager; private V2XMessageEntity mV2XMessageEntity; protected AbsV2XScenario() { - this.mV2XStatusManager = V2XServiceManager.getMoGoV2XStatusManager(); } public abstract void init(@Nullable V2XMessageEntity v2XMessageEntity); @@ -50,6 +42,16 @@ public abstract class AbsV2XScenario implements IV2XScenario { clearPOI(); } + /** + * 释放资源 + */ + public void release() { + mV2XMessageEntity = null; + mV2XWindow = null; + mV2XButton = null; + mV2XMarker = null; + } + @Override public void speakTTSVoice(@Nullable String msg, IMogoVoiceCmdCallBack callBack) { if (!TextUtils.isEmpty(msg)) { diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java index 4f2d8ac7c7..41e131b359 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java @@ -22,9 +22,6 @@ import com.mogo.module.v2x.scenario.scene.ugc.V2XEventUgcScenario; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.utils.TipToast; import com.mogo.utils.logger.Logger; -import com.mogo.utils.network.utils.GsonUtil; - -import java.util.HashMap; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; @@ -37,8 +34,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; */ public class V2XScenarioManager implements IV2XScenarioManager { private static V2XScenarioManager mV2XScenarioManager; - private AbsV2XScenario mV2XScenario; - private HashMap mV2XScenarioSet = new HashMap<>(); + private AbsV2XScenario mV2XScenario = null; private V2XScenarioManager() { } @@ -64,55 +60,50 @@ public class V2XScenarioManager implements IV2XScenarioManager { V2XUtils.runOnUiThread(() -> { // 提取之前存储的场景 if (v2XMessageEntity != null) { - - // 广播给应用内部其它模块 Intent intent = new Intent(V2XConst.BROADCAST_SCENE_ACTION); intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity); LocalBroadcastManager.getInstance(V2XUtils.getApp()).sendBroadcast(intent); - - mV2XScenario = mV2XScenarioSet.get(v2XMessageEntity.getType()); // 如果没有拿到之前的,根据类型分发 - if (mV2XScenario == null) { - switch (v2XMessageEntity.getType()) { - case V2XMessageEntity.V2XTypeEnum.ALERT_ROAD_WARNING: - mV2XScenario = V2XRoadEventScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_SEEK_WARNING: - mV2XScenario = V2XSeekHelpScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_FATIGUE_DRIVING: - mV2XScenario = V2XFatigueDrivingScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_WINDOW_WARNING: - mV2XScenario = V2XPushEventScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_LIVE_CAR_WARNING: - mV2XScenario = V2XPushLiveCarScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_ANIMATION_WARNING: - mV2XScenario = V2XAnimationScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_CAR_FOR_HELP: - mV2XScenario = V2XCarForHelpScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_ILLEGAL_PARK_WARNING: - mV2XScenario = V2XIllegalParkScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_EVENT_UGC_WARNING: - mV2XScenario = V2XEventUgcScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_VOICE_CALL_FOR_LIVECAR_SHOW: - mV2XScenario = V2XVoiceCallLiveScenario.getInstance(); - break; - case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW: - mV2XScenario = V2XPushVREventScenario.getInstance(); - break; - default: - Logger.e(MODULE_NAME, "当前V2X消息类型未定义。"); - TipToast.tip("当前V2X消息类型未定义"); - return; - } + switch (v2XMessageEntity.getType()) { + case V2XMessageEntity.V2XTypeEnum.ALERT_ROAD_WARNING: + mV2XScenario = new V2XRoadEventScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_SEEK_WARNING: + mV2XScenario = new V2XSeekHelpScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_FATIGUE_DRIVING: + mV2XScenario = new V2XFatigueDrivingScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_WINDOW_WARNING: + mV2XScenario = new V2XPushEventScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_LIVE_CAR_WARNING: + mV2XScenario = new V2XPushLiveCarScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_ANIMATION_WARNING: + mV2XScenario = new V2XAnimationScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_CAR_FOR_HELP: + mV2XScenario = new V2XCarForHelpScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_ILLEGAL_PARK_WARNING: + mV2XScenario = new V2XIllegalParkScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_EVENT_UGC_WARNING: + mV2XScenario = new V2XEventUgcScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_VOICE_CALL_FOR_LIVECAR_SHOW: + mV2XScenario = new V2XVoiceCallLiveScenario(); + break; + case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW: + mV2XScenario = new V2XPushVREventScenario(); + break; + default: + mV2XScenario = null; + Logger.e(MODULE_NAME, "当前V2X消息类型未定义。"); + TipToast.tip("当前V2X消息类型未定义"); + return; } // 展示最新的消息 @@ -121,7 +112,6 @@ public class V2XScenarioManager implements IV2XScenarioManager { hidOtherPanel(); } mV2XScenario.init(v2XMessageEntity); - mV2XScenarioSet.put(v2XMessageEntity.getType(), mV2XScenario); } } }); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/V2XBasWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/V2XBasWindow.java new file mode 100644 index 0000000000..b805c72c5d --- /dev/null +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/V2XBasWindow.java @@ -0,0 +1,48 @@ +package com.mogo.module.v2x.scenario.scene; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.RelativeLayout; + +import com.mogo.utils.logger.Logger; + +/** + * @author donghongyu + * @date 12/11/20 10:35 AM + */ +public class V2XBasWindow extends RelativeLayout { + private final String TAG = "V2XBasWindow"; + + public V2XBasWindow(Context context) { + super(context); + } + + public V2XBasWindow(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public V2XBasWindow(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + Logger.w(TAG, "onAttachedToWindow……"); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + Logger.w(TAG, "onDetachedFromWindow……"); + release(); + } + + /** + * 这里释放资源 + */ + protected void release() { + Logger.w(TAG, "release……"); + + } +} diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationScenario.java index c307a293ce..0dbc613663 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationScenario.java @@ -2,10 +2,10 @@ package com.mogo.module.v2x.scenario.scene.animation; import androidx.annotation.Nullable; -import com.mogo.module.v2x.V2XConst; -import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.common.entity.V2XPushMessageEntity; +import com.mogo.module.v2x.V2XConst; +import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.listener.V2XWindowStatusListener; import com.mogo.module.v2x.scenario.impl.AbsV2XScenario; import com.mogo.module.v2x.utils.ADASUtils; @@ -20,22 +20,8 @@ import com.mogo.utils.logger.Logger; */ public class V2XAnimationScenario extends AbsV2XScenario { - private static V2XAnimationScenario mV2XAnimationScenario; - - private V2XAnimationScenario() { - } - - - public static V2XAnimationScenario getInstance() { - if (mV2XAnimationScenario == null) { - synchronized (V2XAnimationScenario.class) { - if (mV2XAnimationScenario == null) { - mV2XAnimationScenario = new V2XAnimationScenario(); - mV2XAnimationScenario.setV2XWindow(new V2XAnimationWindow()); - } - } - } - return mV2XAnimationScenario; + public V2XAnimationScenario() { + setV2XWindow(new V2XAnimationWindow()); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingScenario.java index f8154af9af..92f7e1e32e 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingScenario.java @@ -6,11 +6,11 @@ import android.view.ViewGroup; import androidx.annotation.Nullable; import com.mogo.map.MogoLatLng; +import com.mogo.module.common.entity.V2XMessageEntity; +import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.V2XServiceManager; -import com.mogo.module.common.entity.V2XMessageEntity; -import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.scenario.impl.AbsV2XScenario; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; @@ -30,23 +30,11 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; */ public class V2XFatigueDrivingScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { - private static V2XFatigueDrivingScenario mV2XTiredScenario; // 语音控制导航 private V2XVoiceCallbackListener mNaviCb = (command, intent) -> startNavi(); - private V2XFatigueDrivingScenario() { - } - - public static V2XFatigueDrivingScenario getInstance() { - if (mV2XTiredScenario == null) { - synchronized (V2XFatigueDrivingScenario.class) { - if (mV2XTiredScenario == null) { - mV2XTiredScenario = new V2XFatigueDrivingScenario(); - mV2XTiredScenario.setV2XWindow(new V2XFatigueDrivingWindow()); - } - } - } - return mV2XTiredScenario; + public V2XFatigueDrivingScenario() { + setV2XWindow(new V2XFatigueDrivingWindow()); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingWindow.java index d1e0dbd9eb..22b5541df7 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/fatigue/V2XFatigueDrivingWindow.java @@ -19,6 +19,7 @@ import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.adapter.V2XRoadEventAdapter; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.utils.logger.Logger; @@ -34,7 +35,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * desc : 疲劳驾驶场景Window * version: 1.0 */ -public class V2XFatigueDrivingWindow extends RelativeLayout +public class V2XFatigueDrivingWindow extends V2XBasWindow implements IV2XWindow { // 展示列表 private RecyclerView mRecyclerView; @@ -72,7 +73,7 @@ public class V2XFatigueDrivingWindow extends RelativeLayout LayoutInflater.from(context).inflate(R.layout.window_fault_help, this); // 详情列表 mRecyclerView = findViewById(R.id.rvRoadEventList); - mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList); + mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList,this); mRecyclerView.setAdapter(mV2XRoadEventAdapter); // 设置切换样式 new PagerSnapHelper().attachToRecyclerView(mRecyclerView); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/help/V2XCarForHelpScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/help/V2XCarForHelpScenario.java index b850854af8..b558ffa800 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/help/V2XCarForHelpScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/help/V2XCarForHelpScenario.java @@ -43,23 +43,12 @@ public class V2XCarForHelpScenario extends AbsV2XScenario implements IM private V2XSeekHelpDialog v2xFaultHelpDialog; private V2XSeekHelpButton mV2XSeekHelpButton; - private V2XCarForHelpScenario() { + public V2XCarForHelpScenario() { mV2XSeekHelpButton = new V2XSeekHelpButton(); setV2XButton(mV2XSeekHelpButton); V2XServiceManager.getMoGoStatusManager().registerStatusChangedListener(TAG, StatusDescriptor.SEEK_HELPING, this); } - public static V2XCarForHelpScenario getInstance() { - if (mV2XCarForHelpScenario == null) { - synchronized (V2XCarForHelpScenario.class) { - if (mV2XCarForHelpScenario == null) { - mV2XCarForHelpScenario = new V2XCarForHelpScenario(); - } - } - } - return mV2XCarForHelpScenario; - } - @Override public void init(@Nullable V2XMessageEntity v2XMessageEntity) { // 设置Button的显示 diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarScenario.java index 7cc982eced..68d8db9e04 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarScenario.java @@ -9,16 +9,12 @@ import androidx.annotation.Nullable; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.R; -import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.scenario.impl.AbsV2XScenario; import com.mogo.module.v2x.utils.ADASUtils; import com.mogo.module.v2x.utils.V2XUtils; import com.mogo.service.windowview.IMogoTopViewStatusListener; import com.mogo.utils.TipToast; -import com.mogo.utils.logger.Logger; - -import static com.mogo.module.v2x.V2XConst.MODULE_NAME; /** * author : donghongyu @@ -29,21 +25,8 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; */ public class V2XPushLiveCarScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { - private static V2XPushLiveCarScenario mV2XLiveCarScenario; - - private V2XPushLiveCarScenario() { - } - - public static V2XPushLiveCarScenario getInstance() { - if (mV2XLiveCarScenario == null) { - synchronized (V2XPushLiveCarScenario.class) { - if (mV2XLiveCarScenario == null) { - mV2XLiveCarScenario = new V2XPushLiveCarScenario(); - mV2XLiveCarScenario.setV2XWindow(new V2XPushLiveCarWindow()); - } - } - } - return mV2XLiveCarScenario; + public V2XPushLiveCarScenario() { + setV2XWindow(new V2XPushLiveCarWindow()); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarWindow.java index c64906b058..92e7004ef9 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XPushLiveCarWindow.java @@ -14,6 +14,7 @@ import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.MarkerUtils; import com.mogo.module.v2x.view.V2XLiveGSYVideoView; @@ -29,7 +30,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * desc : TODO 演示使用的推送单车机直播场景 * version: 1.0 */ -public class V2XPushLiveCarWindow extends RelativeLayout implements IV2XWindow { +public class V2XPushLiveCarWindow extends V2XBasWindow implements IV2XWindow { private Context mContext; private V2XLiveGSYVideoView mV2XLiveGSYVideoView; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XRoadLiveCarScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XRoadLiveCarScenario.java index fd45db1954..87c3408f56 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XRoadLiveCarScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XRoadLiveCarScenario.java @@ -144,8 +144,8 @@ public class V2XRoadLiveCarScenario extends AbsV2XScenario> { private String TAG = "V2XRoadEventDetailWindow"; private TextView mTvEventStubClose; @@ -105,7 +102,7 @@ public class V2XRoadLiveCarWindow extends RelativeLayout close(); }); - mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList); + mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList, this); mRecyclerView.setAdapter(mV2XRoadEventAdapter); // 设置切换样式 new PagerSnapHelper().attachToRecyclerView(mRecyclerView); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java index 911b7db6c0..11ea4647d4 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java @@ -107,8 +107,8 @@ public class V2XVoiceCallLiveBiz { return; } V2XMessageEntity v2XMessageEntity = buildCallLiveParams(liveCarSn, null); - V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCallLiveCarWindow()); - V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity); +// V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCallLiveCarWindow()); +// V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity); } public void getOpenRoadCameraLive() { @@ -122,8 +122,8 @@ public class V2XVoiceCallLiveBiz { if (result != null && result.getResult().getUrl() != null) { String liveUrl = result.getResult().getUrl(); V2XMessageEntity v2XMessageEntity = buildCallLiveParams(null, liveUrl); - V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCrossRoadLiveWindow()); - V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity); +// V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCrossRoadLiveWindow()); +// V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity); } else { Logger.d(MODULE_NAME, "getOpenRoadCameraLive 路口实况直播地址为空"); } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java index fd4c5474e4..d70cf7a504 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java @@ -14,13 +14,14 @@ import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.view.V2XCarLiveVideoView; import com.mogo.utils.logger.Logger; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; -public class V2XVoiceCallLiveCarWindow extends RelativeLayout +public class V2XVoiceCallLiveCarWindow extends V2XBasWindow implements IV2XWindow { private V2XCarLiveVideoView mV2XCarLiveVideoView; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java index 8e8af5abc2..70a240ad6a 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java @@ -24,23 +24,10 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; */ public class V2XVoiceCallLiveScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { - private V2XVoiceCallLiveScenario() { + public V2XVoiceCallLiveScenario() { } - private static volatile V2XVoiceCallLiveScenario mV2XVoiceCallLiveCarScenario; - - public static V2XVoiceCallLiveScenario getInstance() { - if (mV2XVoiceCallLiveCarScenario == null) { - synchronized (V2XVoiceCallLiveScenario.class) { - if (mV2XVoiceCallLiveCarScenario == null) { - mV2XVoiceCallLiveCarScenario = new V2XVoiceCallLiveScenario(); - } - } - } - return mV2XVoiceCallLiveCarScenario; - } - @Override public void init(@Nullable V2XMessageEntity v2XMessageEntity) { if (v2XMessageEntity == null) { diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java index 025321de65..007a308593 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java @@ -14,13 +14,14 @@ import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.view.V2XCrossRoadVideoView; import com.mogo.utils.logger.Logger; import static com.mogo.module.v2x.V2XConst.MODULE_NAME; -public class V2XVoiceCrossRoadLiveWindow extends RelativeLayout +public class V2XVoiceCrossRoadLiveWindow extends V2XBasWindow implements IV2XWindow { private V2XCrossRoadVideoView mV2XCrossRoadVideoView; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkScenario.java index c946cd0c1a..ad499bdbc6 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkScenario.java @@ -5,7 +5,6 @@ import androidx.annotation.Nullable; import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.common.entity.V2XPoiTypeEnum; -import com.mogo.module.common.entity.V2XPushMessageEntity; import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.V2XStatusManager; @@ -29,19 +28,9 @@ import java.util.List; public class V2XIllegalParkScenario extends AbsV2XScenario> { private static final String TAG = "V2XILLegalParkScenario"; - private static V2XIllegalParkScenario mV2XIllegalParkScenario; - - public static V2XIllegalParkScenario getInstance() { - if (mV2XIllegalParkScenario == null) { - synchronized (V2XIllegalParkScenario.class) { - if (mV2XIllegalParkScenario == null) { - mV2XIllegalParkScenario = new V2XIllegalParkScenario(); - mV2XIllegalParkScenario.setV2XWindow(new V2XIllegalParkWindow()); - mV2XIllegalParkScenario.setV2XMarker(new V2XIllegalParkMarker()); - } - } - } - return mV2XIllegalParkScenario; + public V2XIllegalParkScenario() { + setV2XWindow(new V2XIllegalParkWindow()); + setV2XMarker(new V2XIllegalParkMarker()); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkWindow.java index 8523fedea3..b689aa9ef9 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/park/V2XIllegalParkWindow.java @@ -6,7 +6,6 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.RelativeLayout; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; @@ -17,13 +16,12 @@ import com.mogo.module.common.entity.MarkerExploreWay; import com.mogo.module.common.entity.V2XEventShowEntity; import com.mogo.module.common.entity.V2XMessageEntity; import com.mogo.module.v2x.R; -import com.mogo.module.v2x.V2XConst; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.adapter.V2XRoadEventAdapter; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.utils.V2XUtils; -import com.mogo.utils.logger.Logger; import java.util.ArrayList; import java.util.List; @@ -32,7 +30,7 @@ import java.util.List; * 违章停车 * 弹窗视图 */ -public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow { +public class V2XIllegalParkWindow extends V2XBasWindow implements IV2XWindow { private static final String TAG = "V2XIllegalParkWindow"; // 展示列表 private RecyclerView mRecyclerView; @@ -73,7 +71,7 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow implements IMogoTopViewStatusListener { - private static V2XPushEventScenario mV2XPushEventScenario; - private V2XPushEventScenario() { + public V2XPushEventScenario() { + setV2XMarker(new V2XPushEventMarker()); + setV2XWindow(new V2XPushEventWindow()); } - public static V2XPushEventScenario getInstance() { - if (mV2XPushEventScenario == null) { - synchronized (V2XPushEventScenario.class) { - if (mV2XPushEventScenario == null) { - mV2XPushEventScenario = new V2XPushEventScenario(); - mV2XPushEventScenario.setV2XMarker(new V2XPushEventMarker()); - mV2XPushEventScenario.setV2XWindow(new V2XPushEventWindow()); - } - } - } - return mV2XPushEventScenario; - } - - @Override public void init(@Nullable V2XMessageEntity v2XMessageEntity) { Logger.w(MODULE_NAME, "处理推送场景:" + GsonUtil.jsonFromObject(v2XMessageEntity)); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/push/V2XPushEventWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/push/V2XPushEventWindow.java index 4473dd9190..88917a149d 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/push/V2XPushEventWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/push/V2XPushEventWindow.java @@ -6,7 +6,6 @@ import android.os.Handler; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; -import android.widget.RelativeLayout; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; @@ -20,6 +19,7 @@ import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.adapter.V2XRoadEventAdapter; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; import com.mogo.module.v2x.voice.V2XVoiceConstants; @@ -39,7 +39,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * TODO 目前睡前瞻推送使用的消息都在这里展示 * version: 1.0 */ -public class V2XPushEventWindow extends RelativeLayout implements IV2XWindow { +public class V2XPushEventWindow extends V2XBasWindow implements IV2XWindow { private String TAG = "V2XPushEventDetailWindow"; // 展示列表 private RecyclerView mRecyclerView; @@ -82,7 +82,7 @@ public class V2XPushEventWindow extends RelativeLayout implements IV2XWindow v2XMessageEntity) { Logger.w(V2XConst.MODULE_NAME + "_" + TAG, "处理推送VR场景:" + GsonUtil.jsonFromObject(v2XMessageEntity)); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventScenario.java index a969aa78d1..a979e1d733 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventScenario.java @@ -29,23 +29,11 @@ import java.util.Map; */ public class V2XRoadEventScenario extends AbsV2XScenario implements IMogoTopViewStatusListener { private static final String TAG = "V2XRoadEventScenario"; - private static V2XRoadEventScenario mV2XRoadEventScenario; - private V2XRoadEventScenario() { - } - - public static V2XRoadEventScenario getInstance() { - if (mV2XRoadEventScenario == null) { - synchronized (V2XRoadEventScenario.class) { - if (mV2XRoadEventScenario == null) { - mV2XRoadEventScenario = new V2XRoadEventScenario(); - mV2XRoadEventScenario.setV2XButton(new V2XRoadEventButton()); - mV2XRoadEventScenario.setV2XMarker(new V2XRoadEventMarker()); - mV2XRoadEventScenario.setV2XWindow(new V2XRoadEventWindow()); - } - } - } - return mV2XRoadEventScenario; + public V2XRoadEventScenario() { + setV2XButton(new V2XRoadEventButton()); + setV2XMarker(new V2XRoadEventMarker()); + setV2XWindow(new V2XRoadEventWindow()); } @Override @@ -201,7 +189,8 @@ public class V2XRoadEventScenario extends AbsV2XScenario imp @Override public void onViewRemoved(View view) { - //Logger.d(MODULE_NAME, "关闭 Window 动画结束"); + Logger.d(V2XConst.MODULE_NAME, "关闭 Window 动画结束"); + release(); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventWindow.java index 566a7e4802..e0a68ba46d 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadEventWindow.java @@ -6,37 +6,33 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; -import android.widget.RelativeLayout; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.PagerSnapHelper; import androidx.recyclerview.widget.RecyclerView; -import com.mogo.module.common.MogoApisHandler; +import com.mogo.module.common.entity.V2XEventShowEntity; import com.mogo.module.common.entity.V2XMessageEntity; +import com.mogo.module.common.entity.V2XPoiTypeEnum; +import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.adapter.V2XRoadEventAdapter; -import com.mogo.module.common.entity.V2XEventShowEntity; import com.mogo.module.v2x.entity.net.V2XLiveCarRes; -import com.mogo.module.common.entity.V2XPoiTypeEnum; -import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.v2x.listener.V2XWindowStatusListener; import com.mogo.module.v2x.network.V2XRefreshCallback; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.voice.V2XVoiceCallbackListener; import com.mogo.module.v2x.voice.V2XVoiceConstants; import com.mogo.module.v2x.voice.V2XVoiceManager; import com.mogo.module.v2x.voice.V2XVoicePagingListener; -import com.mogo.utils.logger.Logger; import java.util.ArrayList; import java.util.List; import static com.mogo.module.common.entity.MarkerPoiTypeEnum.FOURS_BLOCK_UP; -import static com.mogo.module.v2x.V2XConst.MODULE_NAME; -import static com.mogo.module.v2x.V2XConst.VR_MODE; /** * author : donghongyu @@ -45,7 +41,7 @@ import static com.mogo.module.v2x.V2XConst.VR_MODE; * desc : 显示事件的列表 * version: 1.0 */ -public class V2XRoadEventWindow extends RelativeLayout +public class V2XRoadEventWindow extends V2XBasWindow implements V2XRefreshCallback, IV2XWindow { private String TAG = "V2XRoadEventDetailWindow"; // 关闭按钮 @@ -55,11 +51,11 @@ public class V2XRoadEventWindow extends RelativeLayout // 列表数据适配器 private V2XRoadEventAdapter mV2XRoadEventAdapter; // 列表展示 - private List mItemList = new ArrayList<>(); + private final List mItemList = new ArrayList<>(); // 当前展示的位置 private int mCurPosition; // 处理道路事件,30秒倒计时 - private Handler handlerV2XEvent = new Handler(); + private final Handler handlerV2XEvent = new Handler(); private Runnable runnableV2XEvent; private int mExpireTime = 20000; // 关闭弹窗回调 @@ -105,7 +101,7 @@ public class V2XRoadEventWindow extends RelativeLayout private void initView(Context context) { //Logger.d(MODULE_NAME, "V2X===初始化道路事件小窗口View。。。。。"); // 填充布局 - LayoutInflater.from(context).inflate(VR_MODE ? + LayoutInflater.from(context).inflate(V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.layout.window_road_event_detail_vr : R.layout.window_road_event_detail, this); // 详情列表 mBtnCloseWindow = findViewById(R.id.btnCloseWindow); @@ -119,7 +115,7 @@ public class V2XRoadEventWindow extends RelativeLayout } }); - mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList); + mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList, this); mRecyclerView.setAdapter(mV2XRoadEventAdapter); // 设置切换样式 new PagerSnapHelper().attachToRecyclerView(mRecyclerView); @@ -208,8 +204,6 @@ public class V2XRoadEventWindow extends RelativeLayout @Override public void onSuccess(V2XLiveCarRes result) { - // TODO 这里是测试数据 - //result = TestOnLineCarUtils.queryNearbyVehicleLiveByLocation(); //Logger.d(MODULE_NAME, "V2X===事件周边的直播车机:" + result); try { if (!mItemList.isEmpty() && @@ -302,4 +296,9 @@ public class V2XRoadEventWindow extends RelativeLayout runnableV2XEvent = null; } } + + @Override + protected void release() { + super.release(); + } } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java index d8039b2c5a..e0b652b069 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/road/V2XRoadVideoWindow.java @@ -16,6 +16,7 @@ import com.mogo.module.common.entity.V2XRoadEventEntity; import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.module.v2x.view.SimpleCoverVideoPlayer; import com.mogo.utils.BitmapHelper; @@ -32,7 +33,7 @@ import static com.shuyu.gsyvideoplayer.utils.GSYVideoType.SCREEN_MATCH_FULL; /** * https://github.com/CarGuo/GSYVideoPlayer/tree/master/doc SimpleCoverVideoPlayer文档 */ -public class V2XRoadVideoWindow extends RelativeLayout implements +public class V2XRoadVideoWindow extends V2XBasWindow implements IV2XWindow, IDestroyable { private static final String TAG = "V2XRoadVideoWindow"; @@ -69,7 +70,7 @@ public class V2XRoadVideoWindow extends RelativeLayout implements } private void initView(Context context) { - LayoutInflater.from(mContext).inflate(VR_MODE ? R.layout.window_road_video_layout_vr : R.layout.window_road_video_layout, this); + LayoutInflater.from(mContext).inflate(V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.layout.window_road_video_layout_vr : R.layout.window_road_video_layout, this); playImageView = this.findViewById(R.id.window_video_play); thumbnailImage = this.findViewById(R.id.thumbnail_image); simpleCoverVideoPlayer = this.findViewById(R.id.roadVideoView); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java index ddbc70f883..25108d961c 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java @@ -33,22 +33,10 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; */ public class V2XSeekHelpScenario extends AbsV2XScenario> implements IMogoTopViewStatusListener { - private volatile static V2XSeekHelpScenario mV2XSeekHelpScenario; - private V2XSeekHelpScenario() { - } - - public static V2XSeekHelpScenario getInstance() { - if (mV2XSeekHelpScenario == null) { - synchronized (V2XSeekHelpScenario.class) { - if (mV2XSeekHelpScenario == null) { - mV2XSeekHelpScenario = new V2XSeekHelpScenario(); - mV2XSeekHelpScenario.setV2XWindow(new V2XSeekHelpWindow()); - mV2XSeekHelpScenario.setV2XMarker(new V2XSeekHelpMarker()); - } - } - } - return mV2XSeekHelpScenario; + public V2XSeekHelpScenario() { + setV2XWindow(new V2XSeekHelpWindow()); + setV2XMarker(new V2XSeekHelpMarker()); } private List mMarkerEntity; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpWindow.java index ed5b35d582..b0b6576882 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpWindow.java @@ -19,6 +19,7 @@ import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.adapter.V2XRoadEventAdapter; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.utils.logger.Logger; @@ -34,7 +35,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * desc : 他人发起的故障求助 * version: 1.0 */ -public class V2XSeekHelpWindow extends ConstraintLayout implements IV2XWindow { +public class V2XSeekHelpWindow extends V2XBasWindow implements IV2XWindow { private static final String TAG = "V2XSeekHelpWindow"; // 展示列表 @@ -73,7 +74,7 @@ public class V2XSeekHelpWindow extends ConstraintLayout implements IV2XWindow implements IMogoTopViewStatusListener { - private static V2XEventUgcScenario mV2XTiredScenario; - - private V2XEventUgcScenario() { - } - - public static V2XEventUgcScenario getInstance() { - if (mV2XTiredScenario == null) { - synchronized (V2XEventUgcScenario.class) { - if (mV2XTiredScenario == null) { - mV2XTiredScenario = new V2XEventUgcScenario(); - mV2XTiredScenario.setV2XWindow(new V2XEventUgcWindow()); - } - } - } - return mV2XTiredScenario; + public V2XEventUgcScenario() { + setV2XWindow(new V2XEventUgcWindow()); } @Override diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/ugc/V2XEventUgcWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/ugc/V2XEventUgcWindow.java index 16da3940c7..dbf229e921 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/ugc/V2XEventUgcWindow.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/ugc/V2XEventUgcWindow.java @@ -19,6 +19,7 @@ import com.mogo.module.v2x.R; import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.adapter.V2XRoadEventAdapter; import com.mogo.module.v2x.listener.V2XWindowStatusListener; +import com.mogo.module.v2x.scenario.scene.V2XBasWindow; import com.mogo.module.v2x.scenario.view.IV2XWindow; import com.mogo.utils.logger.Logger; @@ -36,7 +37,7 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME; * http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=42321443 * version: 1.0 */ -public class V2XEventUgcWindow extends RelativeLayout +public class V2XEventUgcWindow extends V2XBasWindow implements IV2XWindow { // 展示列表 private RecyclerView mRecyclerView; @@ -74,7 +75,7 @@ public class V2XEventUgcWindow extends RelativeLayout LayoutInflater.from(context).inflate(R.layout.window_fault_help, this); // 详情列表 mRecyclerView = findViewById(R.id.rvRoadEventList); - mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList); + mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList, this); mRecyclerView.setAdapter(mV2XRoadEventAdapter); // 设置切换样式 new PagerSnapHelper().attachToRecyclerView(mRecyclerView); diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/EventTypeUtils.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/EventTypeUtils.java index bb1d51fefc..08fe9ead82 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/EventTypeUtils.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/EventTypeUtils.java @@ -4,6 +4,7 @@ import com.mogo.module.common.entity.V2XPoiTypeEnum; import com.mogo.module.common.marker.PoiWrapper; import com.mogo.module.common.utils.CloudPoiManager; import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; import com.mogo.module.v2x.voice.V2XVoiceConstants; import com.mogo.utils.logger.Logger; @@ -103,7 +104,7 @@ public class EventTypeUtils { case V2XPoiTypeEnum.FOURS_BLOCK_UP: // 拥堵 case V2XPoiTypeEnum.FOURS_LIVING: // 实时路况 case V2XPoiTypeEnum.FOURS_NEALY: // 身边 - strBg = VR_MODE ? R.drawable.bg_v2x_event_type_orange_vr : R.drawable.bg_v2x_event_type_orange; + strBg = V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.drawable.bg_v2x_event_type_orange_vr : R.drawable.bg_v2x_event_type_orange; break; case V2XPoiTypeEnum.TRAFFIC_CHECK:// 交通检查 case V2XPoiTypeEnum.ROAD_CLOSED:// 封路 @@ -112,10 +113,10 @@ public class EventTypeUtils { case V2XPoiTypeEnum.FOURS_FOG: // 浓雾 case V2XPoiTypeEnum.FOURS_ICE: // 结冰 case V2XPoiTypeEnum.FOURS_ACCIDENT: // 事故 - strBg = VR_MODE ? R.drawable.bg_v2x_event_type_red_vr : R.drawable.bg_v2x_event_type_read; + strBg = V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.drawable.bg_v2x_event_type_red_vr : R.drawable.bg_v2x_event_type_read; break; default: - strBg = VR_MODE ? R.drawable.bg_v2x_event_type_red_vr : R.drawable.bg_v2x_event_type_read; + strBg = V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.drawable.bg_v2x_event_type_red_vr : R.drawable.bg_v2x_event_type_read; break; } return strBg; diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartLikeView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartLikeView.java index dc9e155ed7..706a0734da 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartLikeView.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartLikeView.java @@ -13,6 +13,7 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; import static com.mogo.module.v2x.V2XConst.VR_MODE; @@ -46,7 +47,7 @@ public class HeartLikeView extends LinearLayout implements Animator.AnimatorList inflate(context, R.layout.view_heart_like_gray_back, this); mIllegalParkingLike = findViewById(R.id.ivLikeForGrayBack); } else { - inflate(context, VR_MODE ? R.layout.view_heart_like_vr : R.layout.view_heart_like, this); + inflate(context, V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.layout.view_heart_like_vr : R.layout.view_heart_like, this); mIllegalParkingLike = findViewById(R.id.ivIllegalParkingLike); } diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java index 6a4e6f841c..91c40334d1 100644 --- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java +++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/HeartUnLikeView.java @@ -12,6 +12,7 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; import com.mogo.module.v2x.R; +import com.mogo.module.v2x.V2XServiceManager; import static com.mogo.module.v2x.V2XConst.VR_MODE; @@ -37,7 +38,7 @@ public class HeartUnLikeView extends LinearLayout implements Animator.AnimatorLi public HeartUnLikeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - inflate(context, VR_MODE ? R.layout.view_heart_unlike_vr : R.layout.view_heart_unlike, this); + inflate(context, V2XServiceManager.getMoGoStatusManager().isVrMode() ? R.layout.view_heart_unlike_vr : R.layout.view_heart_unlike, this); mIllegalParkingUnLike = findViewById(R.id.ivIllegalParkingUnLike); setOnClickListener(v -> {