整合了推送消息的展示到统一的V2XRoadEventAdapter.java

修复了测试推送的展示
This commit is contained in:
董宏宇
2020-07-28 20:19:47 +08:00
parent e6938e60ea
commit 3c360151ed
10 changed files with 181 additions and 78 deletions

View File

@@ -1,7 +1,13 @@
package com.mogo.module.common.entity;
import androidx.annotation.IntDef;
import java.io.Serializable;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.List;
import java.util.Objects;
@@ -14,7 +20,8 @@ import java.util.Objects;
*/
public class V2XEventShowEntity implements Serializable {
// 0---默认展示详情1--直播,4--道路事件详情
// 0---默认展示详情1--直播,
@ViewType
private int viewType;
// 道路事件详情
@@ -23,6 +30,8 @@ public class V2XEventShowEntity implements Serializable {
private V2XLiveCarInfoEntity v2XLiveCarInfoRes;
// 直播车机列表
private List<V2XLiveCarInfoEntity> v2XLiveCarList;
// 推送信息展示
private V2XPushMessageEntity v2XPushMessageEntity;
public int getViewType() {
return viewType;
@@ -56,6 +65,14 @@ public class V2XEventShowEntity implements Serializable {
this.v2XLiveCarList = v2XLiveCarList;
}
public V2XPushMessageEntity getV2XPushMessageEntity() {
return v2XPushMessageEntity;
}
public void setV2XPushMessageEntity(V2XPushMessageEntity v2XPushMessageEntity) {
this.v2XPushMessageEntity = v2XPushMessageEntity;
}
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -76,13 +93,23 @@ public class V2XEventShowEntity implements Serializable {
return Objects.hash(viewType, v2XRoadEventEntity, v2XLiveCarInfoRes, v2XLiveCarList);
}
@Override
public String toString() {
return "V2XEventShowEntity{" +
"viewType=" + viewType +
", v2XRoadEventEntity=" + v2XRoadEventEntity +
", v2XLiveCarInfoRes=" + v2XLiveCarInfoRes +
", v2XLiveCarList=" + v2XLiveCarList +
'}';
@IntDef(value = {
V2XWindowTypeEnum.DEFAULT_WINDOW,
V2XWindowTypeEnum.LIVE_CAR_WINDOW,
V2XWindowTypeEnum.ROAD_EVENT_WINDOW,
V2XWindowTypeEnum.PUSH_EVENT_WINDOW,
V2XWindowTypeEnum.ANIMATION_WINDOW,
V2XWindowTypeEnum.FATIGUE_DRIVING_WINDOW,
V2XWindowTypeEnum.SEEK_HELP_WINDOW,
V2XWindowTypeEnum.ILLEGAL_PARK_WINDOW,
})
@Target({
ElementType.PARAMETER,
ElementType.FIELD,
ElementType.METHOD,
}) //表示注解作用范围,参数注解,成员注解,方法注解
@Retention(RetentionPolicy.SOURCE) //表示注解所存活的时间,在运行时,而不会存在 .class 文件中
public @interface ViewType { //接口,定义新的注解类型
}
}

View File

@@ -1,49 +0,0 @@
package com.mogo.module.v2x.adapter;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.module.v2x.adapter.holder.V2XPushEventDetailVH;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import java.util.List;
/**
* author : donghongyu
* e-mail : 1358506549@qq.com
* date : 2020/3/11 4:05 PM
* desc : V2X 场景事件列表中的数据适配器
* version: 1.0
*/
public class V2XPushEventAdapter extends RecyclerView.Adapter<V2XPushEventDetailVH> {
private List<V2XPushMessageEntity> itemList;
public V2XPushEventAdapter(List<V2XPushMessageEntity> itemList) {
this.itemList = itemList;
}
@NonNull
@Override
public V2XPushEventDetailVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new V2XPushEventDetailVH(parent);
}
@Override
public void onBindViewHolder(@NonNull V2XPushEventDetailVH holder, int position) {
holder.initView(itemList.get(position));
}
@Override
public int getItemViewType(int position) {
return itemList.get(position).getViewType();
}
@Override
public int getItemCount() {
return itemList == null ? 0 : itemList.size();
}
}

View File

@@ -6,9 +6,11 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.module.common.entity.V2XEventShowEntity;
import com.mogo.module.v2x.adapter.holder.V2XLiveVideoVH;
import com.mogo.module.v2x.adapter.holder.V2XRoadEventDetailVH;
import com.mogo.module.common.entity.V2XWindowTypeEnum;
import com.mogo.module.v2x.adapter.holder.V2XIllegalParkDetailVH;
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 java.util.List;
@@ -32,14 +34,24 @@ public class V2XRoadEventAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder;
switch (viewType) {
// 直播
case V2XWindowTypeEnum.LIVE_CAR_WINDOW:
holder = new V2XLiveVideoVH(parent);
break;
//道路事件详情
case V2XWindowTypeEnum.ROAD_EVENT_WINDOW:
holder = new V2XRoadEventDetailVH(parent);
break;
//违章停车
case V2XWindowTypeEnum.ILLEGAL_PARK_WINDOW:
holder = new V2XIllegalParkDetailVH(parent);
break;
//推送展示
case V2XWindowTypeEnum.PUSH_EVENT_WINDOW:
holder = new V2XPushEventDetailVH(parent);
break;
default:
holder = new V2XRoadEventDetailVH(parent);
holder = new V2XPushEventDetailVH(parent);
}
return holder;
}
@@ -52,6 +64,12 @@ public class V2XRoadEventAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
if (holder instanceof V2XRoadEventDetailVH) {
((V2XRoadEventDetailVH) holder).initView(itemList.get(position));
}
if (holder instanceof V2XIllegalParkDetailVH) {
((V2XIllegalParkDetailVH) holder).initView(itemList.get(position));
}
if (holder instanceof V2XPushEventDetailVH) {
((V2XPushEventDetailVH) holder).initView(itemList.get(position));
}
}
@Override

View File

@@ -0,0 +1,38 @@
package com.mogo.module.v2x.adapter.holder;
import android.view.LayoutInflater;
import android.view.ViewGroup;
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.scenario.scene.push.V2XPushEventScenario;
/**
* e-mail : 1358506549@qq.com
* date : 2020/3/11 4:35 PM
* desc : 违章停车弹窗
* version: 1.0
*
* @author donghongyu
*/
public class V2XIllegalParkDetailVH extends V2XBaseViewHolder {
public V2XIllegalParkDetailVH(ViewGroup viewGroup) {
super(LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.window_illegal_parking, viewGroup, false));
}
public void initView(V2XEventShowEntity v2XEventShowEntity) {
}
/**
* 延迟关闭窗体
*/
@Override
public void delayedCloseWindow() {
itemView.postDelayed(() -> V2XPushEventScenario.getInstance().close(), 1000);
}
}

View File

@@ -9,6 +9,7 @@ import android.widget.ImageView;
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;
@@ -133,8 +134,8 @@ public class V2XPushEventDetailVH extends V2XBaseViewHolder {
});
}
public void initView(V2XPushMessageEntity v2XRoadEventEntity) {
mV2XRoadEventEntity = v2XRoadEventEntity;
public void initView(V2XEventShowEntity v2XEventShowEntity) {
mV2XRoadEventEntity = v2XEventShowEntity.getV2XPushMessageEntity();
mNoveltyInfo = new MarkerExploreWay();
mNoveltyInfo.setSn(mV2XRoadEventEntity.getSn());
mNoveltyInfo.setInfoId(mV2XRoadEventEntity.getSceneId());
@@ -143,16 +144,16 @@ public class V2XPushEventDetailVH extends V2XBaseViewHolder {
location.setLon(mV2XRoadEventEntity.getLon());
mNoveltyInfo.setLocation(location);
if (!TextUtils.isEmpty(v2XRoadEventEntity.getMsgImgUrl())) {
if (!TextUtils.isEmpty(mV2XRoadEventEntity.getMsgImgUrl())) {
V2XServiceManager.getImageLoader()
.displayImage(v2XRoadEventEntity.getMsgImgUrl(), ivImg);
.displayImage(mV2XRoadEventEntity.getMsgImgUrl(), ivImg);
}
if (!TextUtils.isEmpty(v2XRoadEventEntity.getHeadImgUrl())) {
if (!TextUtils.isEmpty(mV2XRoadEventEntity.getHeadImgUrl())) {
V2XServiceManager.getImageLoader()
.displayImage(v2XRoadEventEntity.getHeadImgUrl(), ivReportHead);
.displayImage(mV2XRoadEventEntity.getHeadImgUrl(), ivReportHead);
}
switch (v2XRoadEventEntity.getSceneId()) {
switch (mV2XRoadEventEntity.getSceneId()) {
case "100015"://取快递
case "100016"://顺风车
ivRoadEventNav.setVisibility(View.VISIBLE);

View File

@@ -2,19 +2,21 @@ package com.mogo.module.v2x.scenario.scene.livecar;
import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import com.mogo.module.common.entity.MarkerCarInfo;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XServiceManager;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import com.mogo.module.v2x.listener.V2XWindowStatusListener;
import com.mogo.module.v2x.scenario.view.IV2XWindow;
import com.mogo.module.v2x.utils.MarkerUtils;
import com.mogo.module.v2x.view.V2XLiveGSYVideoView;
import com.mogo.service.imageloader.MogoImageView;
import com.mogo.utils.logger.Logger;
import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
@@ -30,6 +32,7 @@ public class V2XPushLiveCarWindow extends RelativeLayout implements IV2XWindow<V
private Context mContext;
private V2XLiveGSYVideoView mV2XLiveGSYVideoView;
private MogoImageView mIvReportHead;
// 弹窗状态监听
private V2XWindowStatusListener mV2XWindowStatusListener;
@@ -60,6 +63,7 @@ public class V2XPushLiveCarWindow extends RelativeLayout implements IV2XWindow<V
LayoutInflater.from(context).inflate(R.layout.window_push_live_video, this);
// 详情列表
mV2XLiveGSYVideoView = findViewById(R.id.videoPlayer);
mIvReportHead = findViewById(R.id.ivReportHead);
}
/**
@@ -70,6 +74,10 @@ public class V2XPushLiveCarWindow extends RelativeLayout implements IV2XWindow<V
if (entity != null) {
Logger.w(MODULE_NAME, "更新直播信息。。。。。" + entity);
if (!TextUtils.isEmpty(entity.getHeadImgUrl())) {
V2XServiceManager.getImageLoader()
.displayImage(entity.getHeadImgUrl(), mIvReportHead);
}
// 启动播放
MarkerCarInfo.CarLiveInfo carLiveInfo = new MarkerCarInfo.CarLiveInfo();
carLiveInfo.setVideoChannel(entity.getVideoChannel());

View File

@@ -13,10 +13,12 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.module.common.entity.V2XEventShowEntity;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import com.mogo.module.common.entity.V2XWindowTypeEnum;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XServiceManager;
import com.mogo.module.v2x.adapter.V2XPushEventAdapter;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import com.mogo.module.v2x.adapter.V2XRoadEventAdapter;
import com.mogo.module.v2x.listener.V2XWindowStatusListener;
import com.mogo.module.v2x.scenario.view.IV2XWindow;
import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
@@ -42,9 +44,9 @@ public class V2XPushEventWindow extends RelativeLayout implements IV2XWindow<V2X
// 展示列表
private RecyclerView mRecyclerView;
// 列表数据适配器
private V2XPushEventAdapter mV2XRoadEventAdapter;
private V2XRoadEventAdapter mV2XRoadEventAdapter;
// 列表展示
private List<V2XPushMessageEntity> mItemList = new ArrayList<>();
private List<V2XEventShowEntity> mItemList = new ArrayList<>();
// 处理道路事件30秒倒计时
private Handler handlerV2XEvent = new Handler();
private Runnable runnableV2XEvent;
@@ -80,7 +82,7 @@ public class V2XPushEventWindow extends RelativeLayout implements IV2XWindow<V2X
LayoutInflater.from(context).inflate(R.layout.window_push_event_detail, this);
// 详情列表
mRecyclerView = findViewById(R.id.rvRoadEventList);
mV2XRoadEventAdapter = new V2XPushEventAdapter(mItemList);
mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList);
mRecyclerView.setAdapter(mV2XRoadEventAdapter);
// 设置切换样式
new PagerSnapHelper().attachToRecyclerView(mRecyclerView);
@@ -110,7 +112,10 @@ public class V2XPushEventWindow extends RelativeLayout implements IV2XWindow<V2X
mItemList.clear();
if (v2XRoadEventEntity != null) {
//Logger.d(MODULE_NAME, "V2X===推送消息:" + v2XRoadEventEntity);
mItemList.add(v2XRoadEventEntity);
V2XEventShowEntity v2XEventShowEntity = new V2XEventShowEntity();
v2XEventShowEntity.setV2XPushMessageEntity(v2XRoadEventEntity);
v2XEventShowEntity.setViewType(V2XWindowTypeEnum.PUSH_EVENT_WINDOW);
mItemList.add(v2XEventShowEntity);
}
// 刷新列表
mV2XRoadEventAdapter.notifyDataSetChanged();

View File

@@ -96,7 +96,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
mBtnTriggerPushLiveCarEvent.setOnClickListener(v -> {
V2XMessageEntity<V2XPushMessageEntity> v2XMessageEntity =
TestOnLineCarUtils.getV2XScenarioPushEventData();
TestOnLineCarUtils.getV2XScenarioPushLiveEventData();
Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION);
intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity);

View File

@@ -2,11 +2,11 @@ package com.mogo.module.v2x.utils;
import com.mogo.module.common.entity.MarkerExploreWay;
import com.mogo.module.common.entity.MarkerResponse;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.entity.net.V2XSpecialCarRes;
import com.mogo.module.common.entity.V2XMessageEntity;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import com.mogo.module.common.entity.V2XRoadEventEntity;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.entity.net.V2XSpecialCarRes;
import com.mogo.utils.network.utils.GsonUtil;
import java.io.ByteArrayOutputStream;
@@ -122,6 +122,40 @@ public class TestOnLineCarUtils {
return null;
}
/**
* 模拟H5推送直播数据
*/
public static V2XMessageEntity<V2XPushMessageEntity> getV2XScenarioPushLiveEventData() {
try {
InputStream inputStream = V2XUtils.getApp()
.getResources()
.openRawResource(R.raw.scenario_push_live_event_data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024];
while ((len = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
inputStream.close();
// 加载数据源
V2XPushMessageEntity v2xRoadEventEntity = GsonUtil.objectFromJson(baos.toString(), V2XPushMessageEntity.class);
V2XMessageEntity<V2XPushMessageEntity> v2xMessageEntity = new V2XMessageEntity<>();
// 控制类型
v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_LIVE_CAR_WARNING);
// 设置数据
v2xMessageEntity.setContent(v2xRoadEventEntity);
// 控制展示状态
v2xMessageEntity.setShowState(true);
return v2xMessageEntity;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 模拟H5推送场景动画数据
*/

View File

@@ -0,0 +1,21 @@
{
"sceneId": "100016",
"alarmContent": "顺风车提醒",
"expireTime": 30000,
"sceneCategory": 0,
"sceneDescription": "周围有路人发起顺风车",
"sceneName": "顺风车提醒",
"sceneLevel": 0,
"videoUrl": "rtmp://58.200.131.2:1935/livetv/hunantv",
"videoChannel": "C_1",
"videoSn": "XTCBA90740400625",
"tts": "附近直播车辆",
"zoom": true,
"zoomScale": 15,
"location": {
"lat": 39.971417,
"lon": 116.415853
},
"userHead": "https://yycp-static-1255510688.cos.ap-beijing.myqcloud.com/defaultUserHeadImg/5.png",
"msgImgUrl": "https://upload.jianshu.io/users/upload_avatars/7663825/7c28763e-002b-4e89-8dea-5b8da210ef2c.jpg"
}