完成违章停车的展示方式修改,换成了V2XRoadEventAdapter.java加载的方式

This commit is contained in:
董宏宇
2020-07-29 11:52:59 +08:00
parent f89ee76ee4
commit 3926e38c86
5 changed files with 210 additions and 85 deletions

View File

@@ -7,6 +7,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.mogo.module.common.entity.V2XEventShowEntity;
import com.mogo.module.common.entity.V2XWindowTypeEnum;
import com.mogo.module.v2x.adapter.holder.V2XFatigueDrivingDetailVH;
import com.mogo.module.v2x.adapter.holder.V2XIllegalParkDetailVH;
import com.mogo.module.v2x.adapter.holder.V2XLiveVideoVH;
import com.mogo.module.v2x.adapter.holder.V2XPushEventDetailVH;
@@ -50,6 +51,10 @@ public class V2XRoadEventAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
case V2XWindowTypeEnum.PUSH_EVENT_WINDOW:
holder = new V2XPushEventDetailVH(parent);
break;
//疲劳驾驶
case V2XWindowTypeEnum.FATIGUE_DRIVING_WINDOW:
holder = new V2XFatigueDrivingDetailVH(parent);
break;
default:
holder = new V2XPushEventDetailVH(parent);
}

View File

@@ -0,0 +1,42 @@
package com.mogo.module.v2x.adapter.holder;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.mogo.module.common.entity.V2XEventShowEntity;
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 V2XFatigueDrivingDetailVH extends V2XBaseViewHolder {
private TextView mTvAddress, mTvAddressDistance;
private ImageView mIvToNav;
public V2XFatigueDrivingDetailVH(ViewGroup viewGroup) {
super(LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.window_fatigue_driving, viewGroup, false));
}
public void initView(V2XEventShowEntity v2XEventShowEntity) {
}
/**
* 延迟关闭窗体
*/
@Override
public void delayedCloseWindow() {
itemView.postDelayed(() -> V2XPushEventScenario.getInstance().close(), 1000);
}
}

View File

@@ -1,12 +1,25 @@
package com.mogo.module.v2x.adapter.holder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.mogo.module.common.entity.MarkerExploreWay;
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;
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.utils.RoadConditionUtils;
import com.mogo.module.v2x.view.HeartLikeView;
import com.mogo.module.v2x.view.HeartUnLikeView;
import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
import com.mogo.module.v2x.voice.V2XVoiceConstants;
import com.mogo.module.v2x.voice.V2XVoiceManager;
import com.mogo.utils.logger.Logger;
import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
/**
* e-mail : 1358506549@qq.com
@@ -17,14 +30,69 @@ import com.mogo.module.v2x.scenario.scene.push.V2XPushEventScenario;
* @author donghongyu
*/
public class V2XIllegalParkDetailVH extends V2XBaseViewHolder {
private TextView mAddressTv;
private TextView mIllegalNumTv;
private HeartLikeView mIlIllegalParkingLike;
private HeartUnLikeView mIIllegalParkingUnLike;
private MarkerExploreWay mExploreWay;
// 反馈按钮语音操控
private V2XVoiceCallbackListener v2XVoiceCallbackYouYongListener = (command, intent) -> roadReportTrue();
private V2XVoiceCallbackListener v2XVoiceCallbackMeiYongListener = (command, intent) -> roadReportErr();
public V2XIllegalParkDetailVH(ViewGroup viewGroup) {
super(LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.window_illegal_parking, viewGroup, false));
mAddressTv = itemView.findViewById(R.id.tvAddress);
mIllegalNumTv = itemView.findViewById(R.id.tvIllegalNum);
mIlIllegalParkingLike = itemView.findViewById(R.id.llIllegalParkingLike);
mIIllegalParkingUnLike = itemView.findViewById(R.id.llIllegalParkingUnLike);
// 设置视图状态监听
itemView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
//Logger.w(MODULE_NAME, "列表View V2XPushEventDetailVH 触发 onViewAttachedToWindow");
// 注册语音交互
V2XVoiceManager.INSTANCE
.registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP,
v2XVoiceCallbackYouYongListener)
.registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_MEIYONG_UN_WAKEUP,
v2XVoiceCallbackMeiYongListener);
}
@Override
public void onViewDetachedFromWindow(View v) {
//Logger.w(MODULE_NAME, "列表View V2XPushEventDetailVH 触发 onViewDetachedFromWindow");
V2XServiceManager.getMogoRegisterCenter().unregisterMogoNaviListener(MODULE_NAME);
// 反注册语音交互
V2XVoiceManager.INSTANCE
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_MEIYONG_UN_WAKEUP);
}
});
}
public void initView(V2XEventShowEntity v2XEventShowEntity) {
mExploreWay = v2XEventShowEntity.getV2XIllegalPark();
mAddressTv.setText(mExploreWay.getAddr());
try {
mIllegalNumTv.setText("违章人数:" + (int) mExploreWay.getItems().get(0).getIllegalCount());
} catch (Exception e) {
e.printStackTrace();
}
mIlIllegalParkingLike.setOnClickCallListener(v -> {
Logger.d(V2XConst.MODULE_NAME, "反馈有用");
roadReportTrue();
});
mIIllegalParkingUnLike.setOnClickCallListener(v -> {
Logger.d(V2XConst.MODULE_NAME, "反馈无用");
roadReportErr();
});
}
/**
@@ -32,7 +100,32 @@ public class V2XIllegalParkDetailVH extends V2XBaseViewHolder {
*/
@Override
public void delayedCloseWindow() {
itemView.postDelayed(() -> V2XPushEventScenario.getInstance().close(), 1000);
itemView.postDelayed(() -> V2XIllegalParkScenario.getInstance().close(), 1000);
}
/**
* 反馈路况正确
*/
private void roadReportTrue() {
if (mExploreWay != null) {
RoadConditionUtils.sendDataErrorReceiverInfo(
mExploreWay.getPoiType(),
mExploreWay.getInfoId(),
"2");
}
delayedCloseWindow();
}
/**
* 反馈路况错误
*/
private void roadReportErr() {
if (mExploreWay != null) {
RoadConditionUtils.sendDataErrorReceiverInfo(
mExploreWay.getPoiType(),
mExploreWay.getInfoId(),
"1");
}
delayedCloseWindow();
}
}

View File

@@ -7,34 +7,39 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.module.common.entity.MarkerExploreWay;
import com.mogo.module.common.entity.V2XEventShowEntity;
import com.mogo.module.common.entity.V2XWindowTypeEnum;
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.view.IV2XWindow;
import com.mogo.module.v2x.utils.RoadConditionUtils;
import com.mogo.module.v2x.utils.V2XUtils;
import com.mogo.module.v2x.view.HeartLikeView;
import com.mogo.module.v2x.view.HeartUnLikeView;
import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
import com.mogo.module.v2x.voice.V2XVoiceConstants;
import com.mogo.module.v2x.voice.V2XVoiceManager;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
import java.util.List;
/**
* 违章停车
* 弹窗视图
*/
public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<MarkerExploreWay> {
private static final String TAG = "V2XLegalParkWindow";
private TextView mAddressTv;
private TextView mIllegalNumTv;
private HeartLikeView mIlIllegalParkingLike;
private HeartUnLikeView mIIllegalParkingUnLike;
private static final String TAG = "V2XIllegalParkWindow";
// 展示列表
private RecyclerView mRecyclerView;
// 列表数据适配器
private V2XRoadEventAdapter mV2XRoadEventAdapter;
// 列表展示
private List<V2XEventShowEntity> mItemList = new ArrayList<>();
// 处理道路事件20秒倒计时
private Handler handlerV2XEvent = new Handler();
@@ -44,10 +49,6 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<M
private MarkerExploreWay mExploreWay;
// 反馈按钮语音操控
private V2XVoiceCallbackListener v2XVoiceCallbackYouYongListener = (command, intent) -> roadReportTrue();
private V2XVoiceCallbackListener v2XVoiceCallbackMeiYongListener = (command, intent) -> roadReportErr();
public V2XIllegalParkWindow() {
this(V2XServiceManager.getContext(), null);
}
@@ -69,12 +70,28 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<M
* 初始化视图
*/
private void initView(Context context) {
LayoutInflater.from(context).inflate(R.layout.window_illegal_parking, this);
mAddressTv = findViewById(R.id.tvAddress);
mIllegalNumTv = findViewById(R.id.tvIllegalNum);
mIlIllegalParkingLike = findViewById(R.id.llIllegalParkingLike);
mIIllegalParkingUnLike = findViewById(R.id.llIllegalParkingUnLike);
LayoutInflater.from(context).inflate(R.layout.window_road_event_detail, this);
// 详情列表
mRecyclerView = findViewById(R.id.rvRoadEventList);
mV2XRoadEventAdapter = new V2XRoadEventAdapter(mItemList);
mRecyclerView.setAdapter(mV2XRoadEventAdapter);
// 设置切换样式
new PagerSnapHelper().attachToRecyclerView(mRecyclerView);
// 配置列表朝向
LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (recyclerView.getChildCount() > 0) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
// 用户处于交互的时候延后隐藏时间
countDownV2XEvent();
}
}
}
});
}
public void show(MarkerExploreWay entity, boolean isAutoClose) {
@@ -89,23 +106,17 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<M
public void show(MarkerExploreWay entity) {
mExploreWay = entity;
//Logger.d(V2XConst.MODULE_NAME, "V2X===违章停车:展示 Window=\n" + entity);
mAddressTv.setText(entity.getAddr());
try {
mIllegalNumTv.setText("违章人数:" + (int) entity.getItems().get(0).getIllegalCount());
} catch (Exception e) {
e.printStackTrace();
// 清空数据
mItemList.clear();
if (mExploreWay != null) {
//Logger.d(MODULE_NAME, "V2X===推送消息:" + v2XRoadEventEntity);
V2XEventShowEntity v2XEventShowEntity = new V2XEventShowEntity();
v2XEventShowEntity.setV2XIllegalPark(mExploreWay);
v2XEventShowEntity.setViewType(V2XWindowTypeEnum.ILLEGAL_PARK_WINDOW);
mItemList.add(v2XEventShowEntity);
}
mIlIllegalParkingLike.setOnClickCallListener(v -> {
Logger.d(V2XConst.MODULE_NAME, "反馈有用");
roadReportTrue();
});
mIIllegalParkingUnLike.setOnClickCallListener(v -> {
Logger.d(V2XConst.MODULE_NAME, "反馈无用");
roadReportErr();
});
// 刷新列表
mV2XRoadEventAdapter.notifyDataSetChanged();
// 倒计时
if (mIsAutoClose) {
countDownV2XEvent();
@@ -120,14 +131,6 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<M
// 添加弹窗
V2XServiceManager.getMogoTopViewManager().addView(this, layoutParams);
// 注册语音交互
V2XVoiceManager.INSTANCE
.registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP,
v2XVoiceCallbackYouYongListener)
.registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_MEIYONG_UN_WAKEUP,
v2XVoiceCallbackMeiYongListener);
}
/**
@@ -136,11 +139,6 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<M
@Override
public void close() {
mIsAutoClose = false;
V2XVoiceManager.INSTANCE
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP)
.unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_MEIYONG_UN_WAKEUP);
// 停止倒计时
if (handlerV2XEvent != null && runnableV2XEvent != null) {
handlerV2XEvent.removeCallbacks(runnableV2XEvent);
@@ -179,31 +177,4 @@ public class V2XIllegalParkWindow extends RelativeLayout implements IV2XWindow<M
Logger.d(V2XConst.MODULE_NAME, "V2X===违章停车 Window 展示开始倒计时:" + mExpireTime);
handlerV2XEvent.postDelayed(runnableV2XEvent, mExpireTime);
}
/**
* 反馈路况正确
*/
private void roadReportTrue() {
if (mExploreWay != null) {
RoadConditionUtils.sendDataErrorReceiverInfo(
mExploreWay.getPoiType(),
mExploreWay.getInfoId(),
"2");
}
close();
}
/**
* 反馈路况错误
*/
private void roadReportErr() {
if (mExploreWay != null) {
RoadConditionUtils.sendDataErrorReceiverInfo(
mExploreWay.getPoiType(),
mExploreWay.getInfoId(),
"1");
}
close();
}
}