(RequestOptions.create(context)) {
+ @Override
+ public void onSuccess(CheckResultData o) {
+ super.onSuccess(o);
+ Log.d(TAG, "车辆自检结果是:" + o.toString());
+ ThreadUtils.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (o != null && mCheckAdapter != null) {
+ mCheckAdapter.mCheckResultData = o;
+ mCheckAdapter.notifyDataSetChanged();
+ }
+
+ if (((CheckResultData) o).getData().getVehicle().getState() == 1) {
+ CallerCheckManager.updateMonitoringStatus(MogoReceiver.ACTION_CHECK_VEHICLE_MONITORING, false);
+ } else {
+ CallerCheckManager.updateMonitoringStatus(MogoReceiver.ACTION_CHECK_VEHICLE_MONITORING, true);
+ showDialog(context);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onError(String message, int code) {
+ super.onError(message, code);
+ Log.d(TAG, "车辆自检失败,请稍后重试" + "==" + message + String.valueOf(code));
+ }
+ });
+
}
/**
@@ -166,10 +183,12 @@ public class CheckActivity extends AppCompatActivity {
* **************************************************************************************检测动画
*/
public void animation() {
- ObjectAnimator animatorX = ObjectAnimator.ofFloat(scanLineImage, "translationX", scanBottomCarImage.getWidth(), 0);
- ObjectAnimator animatorAl = ObjectAnimator.ofFloat(scanLineImage, "alpha", 0, 1);
+ ObjectAnimator animatorX = ObjectAnimator.ofFloat(scanLineImage, "translationX",
+ scanBottomCarImage.getWidth(), 0);
+ ObjectAnimator animatorAl = ObjectAnimator.ofFloat(scanLineImage, "alpha",
+ 0, 1);
setAnimation.playTogether(animatorX, animatorAl);
- setAnimation.setDuration(800);
+ setAnimation.setDuration(DURATION_TIME);
setAnimation.start();
setAnimation.addListener(new AnimatorListenerAdapter() {
@Override
@@ -248,311 +267,6 @@ public class CheckActivity extends AppCompatActivity {
}
}
- /**
- * **************************************************************************************版本检测
- */
- public static void versionCheckResult() {
- ArrayList arrayVer = new ArrayList();
- //adas 检测指标
-
- //鹰眼当前版本
- String verCodeStr = CommonUtils.getVersionName(context, true);
- Log.d(TAG, "版本检测结果:鹰眼" + verCodeStr);
-
- //测试数据
- CheckItemInfo itemInfo = new CheckItemInfo();
- itemInfo.setViewTitle("版本检测:");
- itemInfo.setTitle("自动驾驶升级到\n 版本3.1.2.7");
- if ("不是最新版本" != null) {
- itemInfo.setUsual(false);
- itemInfo.setValue("版本升级");
- } else {
- itemInfo.setUsual(true);
- itemInfo.setValue("最新版本 无风险");
- }
- arrayVer.add(itemInfo);
-
- CheckItemInfo yingyan = new CheckItemInfo();
- UpgradeInfo upgradeInfo = Beta.getUpgradeInfo();
- if (upgradeInfo == null) {
- yingyan.setUsual(true);
- yingyan.setTitle(" 鹰眼 \n版本" + verCodeStr);
- yingyan.setValue("最新版本 无风险");
- } else {
- yingyan.setUsual(false);
- yingyan.setTitle(" 鹰眼升级到 \n版本" + upgradeInfo.versionName);
- yingyan.setValue("版本升级");
- }
- arrayVer.add(yingyan);
- dataArrayList.add(arrayVer);
- }
-
- /**
- * **************************************************************************************系统检测
- */
- public static void systemCheckResult() {
- ArrayList arrSys = new ArrayList();
- //网络
- netStatus();
- //电量
- float battery = CommonUtils.getBattery(context);
- //cpu占比
- double cpu = CommonUtils.getCPU(packageName);
- //内存占比
- double memory = CommonUtils.getMemory(packageName);
- //风险状态
- CheckItemInfo itemInfo = new CheckItemInfo();
- itemInfo.setViewTitle("系统检测:");
- itemInfo.setTitle("自动驾驶系统");
- itemInfo.setUsual(false);
- itemInfo.setValue("存在风险");
- ArrayList list = new ArrayList();
- //详细指标值
- CheckItemInfo.DetailItem item = new CheckItemInfo.DetailItem();
- item.setTitle("工控机链接状态");
- item.setValue("断开");
- list.add(item);
- arrSys.add(itemInfo);
-
- //鹰眼测试数据
- CheckItemInfo yingyan = new CheckItemInfo();
- yingyan.setTitle("鹰眼软件");
- yingyan.setUsual(false);
- yingyan.setValue("无风险");
-
- CheckItemInfo.DetailItem netItem = new CheckItemInfo.DetailItem();
- netItem.setTitle("网络状态");
- netItem.setValue(String.valueOf(sNetWorkStatus.getSignalStrength()));
- list.add(netItem);
-
- CheckItemInfo.DetailItem batteryItem = new CheckItemInfo.DetailItem();
- batteryItem.setTitle("电池状态");
- batteryItem.setValue(String.valueOf(battery));
- list.add(batteryItem);
-
- CheckItemInfo.DetailItem cpuItem = new CheckItemInfo.DetailItem();
- cpuItem.setTitle("CPU占比");
- cpuItem.setValue(String.valueOf(cpu));
- list.add(cpuItem);
-
- CheckItemInfo.DetailItem memoryItem = new CheckItemInfo.DetailItem();
- memoryItem.setTitle("内存占比");
- memoryItem.setValue(String.valueOf(memory));
- list.add(memoryItem);
- yingyan.setItemList(list);
- arrSys.add(yingyan);
-
- dataArrayList.add(arrSys);
-
- }
-
- /**
- * 网络
- */
- public static NetworkStatusUtil.NetWorkStatus netStatus() {
- //网络类型
- sNetWorkStatus = NetworkStatusUtil.networkState(context);
- //网络强度
- if (sNetWorkStatus != null && sNetWorkStatus.getStatus() != null && sNetWorkStatus.getStatus() != "UNKNOWN") {
- Log.d(TAG, "网络类型:" + sNetWorkStatus.getStatus() + "网络强度:" + sNetWorkStatus.getSignalStrength());
- if (sNetWorkStatus.getSignalStrength() <= -90) {
- AIAssist.getInstance(context).speakTTSVoice("网络信号差");
- }
- } else {
- Log.d(TAG, "网络未连接");
- AIAssist.getInstance(context).speakTTSVoice("网络未连接");
- }
- return sNetWorkStatus;
-
- }
-
- /**
- * **************************************************************************************软件测试
- * 自动驾驶侧:
- * 1、车控节点
- *
- * 2、轨迹地图加载节点
- *
- * 3、轨迹规划节点
- *
- * 4、定位转化节点
- *
- * 5、融合节点
- *
- * 6、yolov5节点(包含红绿灯检测)
- *
- * 7、激光雷达渲染节点
- *
- * 8、摄像头驱动节点
- *
- * 9、gnss定位驱动节点
- *
- * 10、中激光驱动节点
- *
- * 11、左激光解码节点
- *
- * 12、左激光驱动节点
- *
- * 13、右激光解码节点
- *
- * 14、右激光驱动节点
- *
- * 15、监控节点
- *
- * 16、通讯交互节点
- *
- * 17、轨迹录制节点
- *
- * 18、can车辆控制节点
- *
- * 数据上报频率 什么数据的上报频率
- *
- * 时延 工控机->云 工控机->鹰眼 什么数据的时延
- */
- public static void software() {
- ArrayList arrSoftware = new ArrayList();
- CheckItemInfo itemInfo = new CheckItemInfo();
- itemInfo.setViewTitle("软件检测:");
- itemInfo.setTitle("自动驾驶系统");
- itemInfo.setUsual(true);
- itemInfo.setValue("无风险");
- arrSoftware.add(itemInfo);
-
- CheckItemInfo itemY = new CheckItemInfo();
- itemY.setTitle("鹰眼软件");
- itemY.setUsual(true);
- itemY.setValue("无风险");
- arrSoftware.add(itemY);
- dataArrayList.add(arrSoftware);
-
- time();
- }
-
- /**
- * 时延
- * 需要产品确认哪些指标? 定位+周边识别?
- */
- public static long time() {
-
- final long start = System.nanoTime();
- long adasDataTime = TimeUnit.NANOSECONDS.toMillis((System.nanoTime() - start));
- Log.i("ADAS数据延时", "接收数据 -> 发出 cost :" + adasDataTime + "ms");
- return adasDataTime;
- }
-
- /**
- * **************************************************************************************硬件测试
- * 1、主激光雷达
- *
- * 2、侧激光雷达-2个
- *
- * 3、ADAS长焦摄像头-前
- *
- * 4、ADAS广角摄像头-前
- *
- * 5、ADAS标准摄像头-前
- *
- * 6、ADAS广角摄像头-后
- *
- * 7、RTK设备
- *
- * 8、OBU设备
- *
- * 9、路由器
- */
- public static void hardware() {
- ArrayList arrHardware = new ArrayList();
- CheckItemInfo itemInfo = new CheckItemInfo();
- itemInfo.setViewTitle("硬件检测:");
- itemInfo.setTitle("自动驾驶系统");
- itemInfo.setUsual(false);
-
- ArrayList detailItem = new ArrayList();
- CheckItemInfo.DetailItem padItem = new CheckItemInfo.DetailItem();
- padItem.setTitle("Pad");
- padItem.setValue("异常");
- detailItem.add(padItem);
-
- CheckItemInfo.DetailItem cameraTop = new CheckItemInfo.DetailItem();
- cameraTop.setTitle("摄像头_top");
- cameraTop.setValue("正常");
- detailItem.add(cameraTop);
-
- CheckItemInfo.DetailItem cameraMiddle = new CheckItemInfo.DetailItem();
- cameraMiddle.setTitle("摄像头_Middle");
- cameraMiddle.setValue("正常");
- detailItem.add(cameraMiddle);
-
- CheckItemInfo.DetailItem cameraBottom = new CheckItemInfo.DetailItem();
- cameraBottom.setTitle("摄像头_Bottom");
- cameraBottom.setValue("正常");
- detailItem.add(cameraBottom);
-
- CheckItemInfo.DetailItem zhuJiGuang = new CheckItemInfo.DetailItem();
- zhuJiGuang.setTitle("主机光雷达");
- zhuJiGuang.setValue("异常");
- detailItem.add(zhuJiGuang);
-
-
- CheckItemInfo.DetailItem jiGuangLeft = new CheckItemInfo.DetailItem();
- jiGuangLeft.setTitle("左侧激光雷达");
- jiGuangLeft.setValue("异常");
- detailItem.add(jiGuangLeft);
-
- CheckItemInfo.DetailItem jiGuangRight = new CheckItemInfo.DetailItem();
- jiGuangRight.setTitle("右侧激光雷达");
- jiGuangRight.setValue("正常");
- detailItem.add(jiGuangRight);
-
- CheckItemInfo.DetailItem changjiao = new CheckItemInfo.DetailItem();
- changjiao.setTitle("ADAS长焦摄像头");
- changjiao.setValue("正常");
- detailItem.add(changjiao);
-
- CheckItemInfo.DetailItem guangJiaoFront = new CheckItemInfo.DetailItem();
- guangJiaoFront.setTitle("ADAS广焦摄像头-前");
- guangJiaoFront.setValue("正常");
- detailItem.add(guangJiaoFront);
-
- CheckItemInfo.DetailItem custom = new CheckItemInfo.DetailItem();
- custom.setTitle("ADAS标准摄像头");
- custom.setValue("正常");
- detailItem.add(custom);
-
- CheckItemInfo.DetailItem guangJiaoBe = new CheckItemInfo.DetailItem();
- guangJiaoBe.setTitle("ADAS广焦摄像头-后");
- guangJiaoBe.setValue("正常");
- detailItem.add(guangJiaoBe);
-
- CheckItemInfo.DetailItem rtk = new CheckItemInfo.DetailItem();
- rtk.setTitle("RTK设备");
- rtk.setValue("正常");
- detailItem.add(rtk);
-
- CheckItemInfo.DetailItem obu = new CheckItemInfo.DetailItem();
- obu.setTitle("OUB设备");
- obu.setValue("正常");
- detailItem.add(obu);
-
- CheckItemInfo.DetailItem luyou = new CheckItemInfo.DetailItem();
- luyou.setTitle("路由器");
- luyou.setValue("正常");
- detailItem.add(luyou);
- itemInfo.setItemList(detailItem);
-
- arrHardware.add(itemInfo);
- dataArrayList.add(arrHardware);
-
- }
-
- /**
- * 检测指标上报
- */
- public void publishCheckDetail() {
-// MogoApisHandler.getInstance().getApis().getNetworkApi().create(CheckApiServices.class,
-// HostConst.DEVA_HOST).uploadCheckDetail().
- }
-
public static void start(Context context) {
Intent starter = new Intent(context, CheckActivity.class);
context.startActivity(starter);
@@ -562,14 +276,21 @@ public class CheckActivity extends AppCompatActivity {
* 指标异常弹框
*/
public static void showDialog(Context context) {
- CheckDialog dialog = new CheckDialog(context, true);
- dialog.show();
+ try {
+ if (dialog != null) {
+ dialog.cancel();
+ }
+ dialog = new CheckDialog(context, true);
+ dialog.show();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
@Override
protected void onDestroy() {
super.onDestroy();
- dataArrayList.clear();
+ isFront = false;
}
@Override
diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java
index f8e7a6b115..7a0d5ef96f 100644
--- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java
+++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckAdapter.java
@@ -1,7 +1,6 @@
package com.mogo.eagle.core.function.check.view;
import android.content.Context;
-import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -9,31 +8,34 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.annotation.CheckResult;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.eagle.core.function.check.R;
import com.mogo.eagle.core.function.check.model.CheckItemInfo;
+import com.mogo.eagle.core.function.check.net.CheckResultData;
import java.util.ArrayList;
+
/**
* @author liujing
- * @description 检测界面单元格
+ * @description 检测首页单元格
* @since: 7/27/21
*/
public class CheckAdapter extends RecyclerView.Adapter {
private static final String TAG = "CheckActivity";
LayoutInflater mLayoutInflater;
- ArrayList dataArrayList;
+ CheckResultData mCheckResultData;
private Context mContext;
+ private static CheckInfoListDialog mCheckInfoListDialog;
- public CheckAdapter(@NonNull Context context, @NonNull ArrayList checkArray) {
+ public CheckAdapter(@NonNull Context context, @NonNull CheckResultData checkResult) {
mContext = context;
+ mCheckResultData = checkResult;
mLayoutInflater = LayoutInflater.from(context);
- dataArrayList = checkArray;
- Log.d(TAG, dataArrayList.toString());
}
@Override
@@ -41,10 +43,8 @@ public class CheckAdapter extends RecyclerView.Adapter
if (position == 0) {
return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_TITLE;
- } else if (position == 1) {
- return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_LIST;
}
- return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_IMAGE;
+ return CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_LIST;
}
@NonNull
@@ -56,12 +56,6 @@ public class CheckAdapter extends RecyclerView.Adapter
CheckTitleViewHolder holder = new CheckTitleViewHolder(v);
return holder;
}
- if (viewType == CheckItemInfo.CheckAdapterStyleEnum.ITEM_TYPE_CHECK_IMAGE) {
- View v = mLayoutInflater.inflate(R.layout.check_hardware, parent,
- false);
- CheckImage holder = new CheckImage(v);
- return holder;
- }
View v = mLayoutInflater.inflate(R.layout.check_list, parent,
false);
CheckListViewHolder holder = new CheckListViewHolder(v);
@@ -77,8 +71,8 @@ public class CheckAdapter extends RecyclerView.Adapter
public CheckTitleViewHolder(@NonNull View itemView) {
super(itemView);
- errorImage = itemView.findViewById(R.id.error_tip_image);
- mTextView = itemView.findViewById(R.id.error_title);
+ errorImage = itemView.findViewById(R.id.check_tip_image);
+ mTextView = itemView.findViewById(R.id.check_title);
}
}
@@ -89,151 +83,81 @@ public class CheckAdapter extends RecyclerView.Adapter
private TextView viewTitle;
private TextView iconAutoTitle;
private TextView autoRiskState;
-
- private TextView iconyingTitle;
- private TextView yingRiskState;
+ private ImageView iconAuto;
public CheckListViewHolder(@NonNull View itemView) {
super(itemView);
viewTitle = itemView.findViewById(R.id.list_item_title);
//自动驾驶
+ iconAuto = itemView.findViewById(R.id.icon_auto);
iconAutoTitle = itemView.findViewById(R.id.icon_auto_title);
autoRiskState = itemView.findViewById(R.id.auto_risk_state);
- //鹰眼应用
- iconyingTitle = itemView.findViewById(R.id.icon_ying_title);
- yingRiskState = itemView.findViewById(R.id.ying_risk_state);
- itemView.setLongClickable(true);
- itemView.setOnLongClickListener(v -> {
- Log.d(TAG, "长按显示状态工具栏");
- Intent intent = new Intent();
- intent.putExtra("oper", 52);
- return true;
- });
-
- }
- }
-
- /**
- * 硬件检测
- */
- class CheckImage extends RecyclerView.ViewHolder {
- private ImageView pad;
- private ImageView jiaoJiGuangTop;
- private TextView jiaoJiGuangTopText;
- private ImageView jiaoJiGuangBottom;
- private TextView jiaoJiGuangBottomText;
- private ImageView zhuJiGuang;
- private ImageView rtk;
- private ImageView cameraTop;
- private ImageView cameraMiddle;
- private ImageView cameraBottom;
- private ImageView cameraBehind;
- private ImageView luyouqi;
- private ImageView obu;
-
- public CheckImage(@NonNull View itemView) {
- super(itemView);
- pad = itemView.findViewById(R.id.pad);
- jiaoJiGuangTop = itemView.findViewById(R.id.jiaoJiGuangTop);
- jiaoJiGuangTopText = itemView.findViewById(R.id.jiaoJiGuangTop_txt);
- jiaoJiGuangBottom = itemView.findViewById(R.id.jiaoJiGuangBottom);
- jiaoJiGuangBottomText = itemView.findViewById(R.id.jiaoJiGuangBottom_txt);
- zhuJiGuang = itemView.findViewById(R.id.zhujiguang);
- rtk = itemView.findViewById(R.id.rtk);
- cameraTop = itemView.findViewById(R.id.top);
- cameraMiddle = itemView.findViewById(R.id.middle);
- cameraBottom = itemView.findViewById(R.id.bottom);
- cameraBehind = itemView.findViewById(R.id.camera_begind);
- luyouqi = itemView.findViewById(R.id.luyouqi);
- obu = itemView.findViewById(R.id.obu);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ if (mCheckResultData == null || mCheckResultData.getData() == null) {
+ return;
+ }
try {
- Object list = dataArrayList.get(position);
if (position == 0) {
- if (list instanceof ArrayList && ((ArrayList) list).size() > 0) {
- CheckItemInfo item = (CheckItemInfo) ((ArrayList) list).get(0);
- ((CheckTitleViewHolder) holder).mTextView.setText(item.getTitle());
- if (item.isUsual() == true) {
- ((CheckTitleViewHolder) holder).errorImage.setImageResource(R.drawable.check_right);
- } else {
- ((CheckTitleViewHolder) holder).errorImage.setImageResource(R.drawable.check_wrong);
- }
+ if (mCheckResultData.getData().getVehicle().getState() == 1) {
+ ((CheckTitleViewHolder) holder).errorImage.setImageResource(R.drawable.check_right);
+ ((CheckTitleViewHolder) holder).mTextView.setText("车辆自检正常");
+ } else {
+ ((CheckTitleViewHolder) holder).errorImage.setImageResource(R.drawable.check_wrong);
+ ((CheckTitleViewHolder) holder).mTextView.setText("车辆存在异常项");
}
- } else if (position == dataArrayList.size() - 1) {
+ } else if (position == 1) {
((CheckListViewHolder) holder).viewTitle.setText("硬件检测:");
- if (list instanceof ArrayList) {
- refreshHardware(holder, (ArrayList) list);
+ if (mCheckResultData.getData().getDeviceState() == 1) {
+ ((CheckListViewHolder) holder).autoRiskState.setTextColor(
+ (mContext.getResources().getColor(R.color.check_little_btn_green)));
+ ((CheckListViewHolder) holder).autoRiskState.setText("运行正常");
+ } else {
+ ((CheckListViewHolder) holder).autoRiskState.setTextColor(
+ (mContext.getResources().getColor(R.color.check_icon_error_color)));
+ ((CheckListViewHolder) holder).autoRiskState.setText("存在异常项");
}
- } else {
- if (list instanceof ArrayList && ((ArrayList) list).size() > 1) {
- CheckItemInfo item = (CheckItemInfo) ((ArrayList) list).get(0);
- ((CheckListViewHolder) holder).viewTitle.setText(item.getViewTitle());
- //自动驾驶 状态展示
- ((CheckListViewHolder) holder).iconAutoTitle.setText(item.getTitle());
- ((CheckListViewHolder) holder).autoRiskState.setText(item.getValue());
- if (item.isUsual() == true) {
- ((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
- } else {
- ((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.check_tip_error_color));
- }
- if (position == 1) {
- if (item.isUsual() == false) {
- ((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.modules_commons_toast_text_color));
- ((CheckListViewHolder) holder).autoRiskState.setBackground(mContext.getResources().getDrawable(R.drawable.check_detail));
- ((CheckListViewHolder) holder).autoRiskState.setOnClickListener(v -> {
- Log.d(TAG, "点击自动驾驶升级");
- });
- } else {
- ((CheckListViewHolder) holder).autoRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
- }
- }
- //鹰眼 状态展示
- CheckItemInfo itemForYing = (CheckItemInfo) ((ArrayList) list).get(1);
- ((CheckListViewHolder) holder).iconyingTitle.setText(itemForYing.getTitle());
- ((CheckListViewHolder) holder).yingRiskState.setText(itemForYing.getValue());
- if (itemForYing.isUsual() == true) {
- ((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
- } else {
- ((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.check_tip_error_color));
- }
- if (position == 1) {
- if (itemForYing.isUsual() == false) {
- ((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.modules_commons_toast_text_color));
- ((CheckListViewHolder) holder).yingRiskState.setBackground(mContext.getResources().getDrawable(R.drawable.check_detail));
- ((CheckListViewHolder) holder).yingRiskState.setOnClickListener(v -> {
- Log.d(TAG, "点击鹰眼升级");
- });
- } else {
- ((CheckListViewHolder) holder).yingRiskState.setTextColor(mContext.getResources().getColor(R.color.check_little_btn_green));
- }
+ ((CheckListViewHolder) holder).iconAuto.setOnClickListener(v -> {
+ Log.d(TAG, "硬件检测结果:");
+ if (mCheckInfoListDialog != null){
+ mCheckInfoListDialog.dismiss();
}
+ mCheckInfoListDialog = new CheckInfoListDialog(mContext, CheckItemInfo.CheckInfoStyle.CHECK_INFO_STYLE_DEVICES, mCheckResultData);
+ mCheckInfoListDialog.show();
+
+ });
+ } else if (position == 2) {
+ ((CheckListViewHolder) holder).viewTitle.setText("系统检测:");
+ if (mCheckResultData.getData().getSoftState() == 1) {
+ ((CheckListViewHolder) holder).autoRiskState.setTextColor(
+ (mContext.getResources().getColor(R.color.check_little_btn_green)));
+ ((CheckListViewHolder) holder).autoRiskState.setText("运行正常");
+ } else {
+ ((CheckListViewHolder) holder).autoRiskState.setTextColor(
+ (mContext.getResources().getColor(R.color.check_icon_error_color)));
+ ((CheckListViewHolder) holder).autoRiskState.setText("存在异常项");
}
+ ((CheckListViewHolder) holder).iconAuto.setOnClickListener(v -> {
+ Log.d(TAG, "系统检测结果:");
+ if (mCheckInfoListDialog != null){
+ mCheckInfoListDialog.dismiss();
+ }
+ mCheckInfoListDialog = new CheckInfoListDialog(mContext, CheckItemInfo.CheckInfoStyle.CHECK_INFO_STYLE_SOFT, mCheckResultData);
+ mCheckInfoListDialog.show();
+ });
}
+
} catch (Exception e) {
e.printStackTrace();
}
}
-
- /**
- * 硬件检测指标
- *
- * @param list
- */
- public void refreshHardware(@NonNull RecyclerView.ViewHolder holder, ArrayList list) {
- if (list.size() > 0) {
- CheckItemInfo info = (CheckItemInfo) list.get(0);
- }
-
- }
-
@Override
public int getItemCount() {
- return dataArrayList.size();
+ return 3;
}
}
diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java
index e7468440cd..cb597417dd 100644
--- a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java
+++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckDialog.java
@@ -1,26 +1,33 @@
package com.mogo.eagle.core.function.check.view;
import android.content.Context;
+import android.content.Intent;
import android.view.View;
import android.widget.ImageView;
+import android.widget.TextView;
import androidx.annotation.NonNull;
+import com.mogo.eagle.core.function.call.check.CallerCheckManager;
import com.mogo.eagle.core.function.check.R;
import com.mogo.module.common.dialog.BaseFloatDialog;
/**
* @author liujing
- * @description 车辆监控弹框提示
+ * @description 车辆监控弹框提示(长时间未检测或者后台任务检测出现问题的弹框)
+ * 第一版本为添加长时间未检测的提示框,因为逻辑冲突,二期需求与产品确认,UI公用
* @since: 7/30/21
*/
public class CheckDialog extends BaseFloatDialog {
private ImageView cancel;
private boolean showWarning;
+ private TextView checkDetail;
+ private Context mContext;
public CheckDialog(@NonNull Context context, boolean hasError) {
super(context);
+ mContext = context;
showWarning = hasError;
initView();
}
@@ -35,6 +42,13 @@ public class CheckDialog extends BaseFloatDialog {
cancel.setOnClickListener(v -> {
cancel();
});
+ checkDetail = findViewById(R.id.check_detail);
+ checkDetail.setOnClickListener(v -> {
+ cancel();
+ if (mContext != null) {
+ CallerCheckManager.startCheckActivity(mContext);
+ }
+ });
//根据条件显示体检页面/风险提示
if (showWarning == true) {
diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java
new file mode 100644
index 0000000000..b2e2f90ce2
--- /dev/null
+++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoAdapter.java
@@ -0,0 +1,110 @@
+package com.mogo.eagle.core.function.check.view;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.mogo.eagle.core.function.check.R;
+import com.mogo.eagle.core.function.check.net.CheckResultData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author liujing
+ * @description 点击自动驾驶icon显示各个检测指标结果
+ * @since: 9/23/21
+ */
+public class CheckInfoAdapter extends RecyclerView.Adapter {
+ private static final String TAG = "CheckInfoAdapter";
+ LayoutInflater mLayoutInflater;
+ private Context mContext;
+ private String mStyle;
+ private List showData;
+
+ public CheckInfoAdapter(Context context, String style, List checkResultData) {
+ mContext = context;
+ mStyle = style;
+ showData = checkResultData;
+ mLayoutInflater = LayoutInflater.from(context);
+ }
+
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View v = mLayoutInflater.inflate(R.layout.check_info_adapter, parent,
+ false);
+ CheckInfoAdapter.CheckInfoViewHolder holder = new CheckInfoAdapter.CheckInfoViewHolder(v);
+ return holder;
+ }
+
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ if (position == 0 || position == 2) {
+ ((CheckInfoViewHolder) holder).checkIcon.setVisibility(View.GONE);
+ ((CheckInfoViewHolder) holder).mTextView.setText("模块名称");
+ } else if (position == 1 || position == 3) {
+ ((CheckInfoViewHolder) holder).checkIcon.setVisibility(View.GONE);
+ ((CheckInfoViewHolder) holder).mTextView.setText("运行状态");
+ } else {
+ try {
+ if ((position - 4) < showData.size() * 2) {
+ int index = (position - 4) / 2;
+ CheckResultData.CheckListItem positionItem = showData.get(index);
+ if (isEven(position) == true) {//偶数隐藏图片显示检测指标
+ ((CheckInfoViewHolder) holder).checkIcon.setVisibility(View.GONE);
+ ((CheckInfoViewHolder) holder).mTextView.setText(positionItem.getName());
+ } else {//奇数显示图片和检测指标结果
+ ((CheckInfoViewHolder) holder).checkIcon.setVisibility(View.VISIBLE);
+ String state = (String) positionItem.getStateValue();
+ if (state.equals("1")) {
+ ((CheckInfoViewHolder) holder).mTextView.setText("正常");
+ ((CheckInfoViewHolder) holder).checkIcon.setImageResource(R.drawable.check_right);
+ } else if ((state.equals("0"))) {
+ ((CheckInfoViewHolder) holder).mTextView.setText("异常");
+ ((CheckInfoViewHolder) holder).checkIcon.setImageResource(R.drawable.check_wrong);
+ } else {
+ ((CheckInfoViewHolder) holder).mTextView.setText(state);
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ public boolean isEven(int position) {
+ if (position % 2 == 0) {
+ System.out.println("偶数");
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return showData.size() * 2 + 4;
+ }
+
+ public class CheckInfoViewHolder extends RecyclerView.ViewHolder {
+ private ImageView checkIcon;
+ private TextView mTextView;
+
+ public CheckInfoViewHolder(View v) {
+ super(v);
+ checkIcon = v.findViewById(R.id.info_check_icon);
+ mTextView = v.findViewById(R.id.info_result_tx);
+ }
+ }
+}
diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java
new file mode 100644
index 0000000000..cbc7bdf1ef
--- /dev/null
+++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoGridItemDivider.java
@@ -0,0 +1,232 @@
+package com.mogo.eagle.core.function.check.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
+import android.view.View;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.StaggeredGridLayoutManager;
+
+/**
+ * @author liujing
+ * @description 网格布局网格绘制类
+ * @since: 9/22/21
+ */
+public class CheckInfoGridItemDivider extends RecyclerView.ItemDecoration {
+ private String TAG = getClass().getSimpleName();
+ private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
+ private Drawable divider;
+
+ public CheckInfoGridItemDivider(Context context) {
+ final TypedArray a = context.obtainStyledAttributes(ATTRS);
+ divider = a.getDrawable(0);
+ a.recycle();
+ }
+
+ public CheckInfoGridItemDivider(Drawable drawable) {
+ divider = drawable;
+ }
+
+ public CheckInfoGridItemDivider(int height, int color) {
+ GradientDrawable shapeDrawable = new GradientDrawable();
+ shapeDrawable.setColor(color);
+ shapeDrawable.setShape(GradientDrawable.RECTANGLE);
+ shapeDrawable.setSize(height, height);
+ divider = shapeDrawable;
+ }
+
+
+ @Override
+ public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+
+ drawHorizontal(c, parent);
+ drawVertical(c, parent);
+
+ }
+
+ private int getSpanCount(RecyclerView parent) {
+ // 列数
+ int spanCount = -1;
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) {
+
+ spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
+ } else if (layoutManager instanceof StaggeredGridLayoutManager) {
+ spanCount = ((StaggeredGridLayoutManager) layoutManager)
+ .getSpanCount();
+ }
+ return spanCount;
+ }
+
+ public void drawHorizontal(Canvas c, RecyclerView parent) {
+ int childCount = parent.getChildCount(); //获取可见item的数量
+ int spanCount = getSpanCount(parent);
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ final int left = child.getLeft() - params.leftMargin;
+ final int right = child.getRight() + params.rightMargin
+ + divider.getIntrinsicWidth();
+ final int top = child.getBottom() + params.bottomMargin;
+ final int bottom = top + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ if (i < spanCount) { //画第一行顶部的分割线
+ drawHorizontalForFirstRow(c, child);
+ }
+ }
+ }
+
+ private void drawHorizontalForFirstRow(Canvas c, View child) {
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ int left = child.getLeft() - params.leftMargin - divider.getIntrinsicWidth();
+ int top = child.getTop() - params.topMargin - divider.getIntrinsicHeight();
+ int right = child.getRight() + params.rightMargin + divider.getIntrinsicWidth();
+ int bottom = top + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ }
+
+ private void drawVerticalForFirstColum(Canvas c, View child) {
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();//在父布局的
+ int left = child.getLeft() - params.leftMargin - divider.getIntrinsicWidth();
+ int top = child.getTop() - params.topMargin;
+ int right = child.getLeft() - params.leftMargin;
+ int bottom = top + child.getHeight() + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ }
+
+ //待修改为右侧
+ private void drawVerticalForLastColum(Canvas c, View child) {
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ int left = child.getRight() - params.leftMargin - divider.getIntrinsicWidth();
+ int top = child.getTop() - params.topMargin;
+ int right = child.getRight() - params.leftMargin + divider.getIntrinsicWidth();
+ int bottom = top + child.getHeight() + divider.getIntrinsicHeight();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ }
+
+ public void drawVertical(Canvas c, RecyclerView parent) {
+ final int childCount = parent.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = parent.getChildAt(i);
+
+ final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
+ .getLayoutParams();
+ final int top = child.getTop() - params.topMargin;
+ final int bottom = child.getBottom() + params.bottomMargin;
+ final int left = child.getRight() + params.rightMargin;
+ final int right = left + divider.getIntrinsicWidth();
+ divider.setBounds(left, top, right, bottom);
+ divider.draw(c);
+ if (isFirstColum(parent, i, getSpanCount(parent))) { //画第一列左边分割线
+ drawVerticalForFirstColum(c, child);
+ }
+ if (isLastColum(parent, i, getSpanCount(parent), childCount)) {//画最后一列右侧分割线
+ drawVerticalForLastColum(c, child);
+ }
+ }
+ }
+
+ private boolean isLastColum(RecyclerView parent, int pos, int spanCount,
+ int childCount) {
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) {
+ if ((pos + 1) % spanCount == 0)// 如果是最后一列,则不需要绘制右边
+ {
+ return true;
+ }
+ } else if (layoutManager instanceof StaggeredGridLayoutManager) {
+ int orientation = ((StaggeredGridLayoutManager) layoutManager)
+ .getOrientation();
+ if (orientation == StaggeredGridLayoutManager.VERTICAL) {
+ if ((pos + 1) % spanCount == 0)// 如果是最后一列,则不需要绘制右边
+ {
+ return true;
+ }
+ } else {
+ childCount = childCount - childCount % spanCount;
+ if (pos >= childCount)// 如果是最后一列,则不需要绘制右边
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isLastRaw(RecyclerView parent, int pos, int spanCount,
+ int childCount) {
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) {
+ childCount = childCount - childCount % spanCount;
+ if (pos >= childCount)// 如果是最后一行,则不需要绘制底部
+ return true;
+ } else if (layoutManager instanceof StaggeredGridLayoutManager) {
+ int orientation = ((StaggeredGridLayoutManager) layoutManager)
+ .getOrientation();
+ if (orientation == StaggeredGridLayoutManager.VERTICAL) {
+ childCount = childCount - childCount % spanCount;
+ // 如果是最后一行,则不需要绘制底部
+ if (pos >= childCount)
+ return true;
+ } else {
+ // 如果是最后一行,则不需要绘制底部
+ if ((pos + 1) % spanCount == 0) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ //是否为第一列
+ private boolean isFirstColum(RecyclerView parent, int pos, int spanCount) {
+ RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
+ if (layoutManager instanceof GridLayoutManager) { //网格布局
+ if ((pos + 1) % spanCount == 1) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //是否为第一行
+ private boolean isFirstRaw(int pos, int spanCount) {
+ if (pos < spanCount) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void getItemOffsets(Rect outRect, int itemPosition,
+ RecyclerView parent) {
+ int spanCount = getSpanCount(parent); //列数
+
+ if (itemPosition == 0) { //第一行第一个,四边都画
+ outRect.set(divider.getIntrinsicWidth(), divider.getIntrinsicHeight(),
+ divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ } else if (isFirstRaw(itemPosition, spanCount)) { //第一行,画上下右三边
+ outRect.set(0, divider.getIntrinsicHeight(), divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ } else if (isFirstColum(parent, itemPosition, spanCount)) { //第一列,画左右下三边
+ outRect.set(divider.getIntrinsicWidth(), 0, divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ } else { //其他,画右下两边
+ outRect.set(0, 0, divider.getIntrinsicWidth(), divider.getIntrinsicHeight());
+ }
+
+ }
+
+}
+
diff --git a/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java
new file mode 100644
index 0000000000..c4a119bad9
--- /dev/null
+++ b/core/function-impl/mogo-core-function-check/src/main/java/com/mogo/eagle/core/function/check/view/CheckInfoListDialog.java
@@ -0,0 +1,116 @@
+package com.mogo.eagle.core.function.check.view;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.util.Log;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.mogo.eagle.core.function.check.R;
+import com.mogo.eagle.core.function.check.model.CheckItemInfo;
+import com.mogo.eagle.core.function.check.net.CheckResultData;
+import com.mogo.module.common.dialog.BaseFloatDialog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author liujing
+ * @description 检测指标详情弹框
+ * @since: 9/22/21
+ */
+public class CheckInfoListDialog extends BaseFloatDialog {
+
+ private static final String TAG = "CheckInfoListDialog";
+ private RecyclerView mRecyclerView;
+ private Context mContext;
+ private TextView titleView;
+ private int span;
+ private String mStyle;
+ private CheckResultData mCheckResultData;
+ private List result = new ArrayList<>();
+
+
+ public CheckInfoListDialog(@NonNull Context context, String style, CheckResultData checkResultData) {
+ super(context);
+ mContext = context;
+ mStyle = style;
+ mCheckResultData = checkResultData;
+ initView();
+ }
+
+ public CheckInfoListDialog(@NonNull Context context, int themeResId) {
+ super(context, themeResId);
+ }
+
+ public void initView() {
+ setContentView(R.layout.check_info_list);
+ mRecyclerView = findViewById(R.id.check_list_recycler);
+ titleView = findViewById(R.id.check_info_title);
+ if (mStyle.equals(CheckItemInfo.CheckInfoStyle.CHECK_INFO_STYLE_DEVICES)) {
+ titleView.setText("硬件自检结果");
+ } else {
+ titleView.setText("系统自检结果");
+ }
+ //网格布局
+ GridLayoutManager layoutManager = new GridLayoutManager(mContext, 4);
+ mRecyclerView.setLayoutManager(layoutManager);
+ layoutManager.setOrientation(GridLayoutManager.VERTICAL);
+ //网格绘制
+ try {
+ CheckInfoGridItemDivider gridLayoutDivider = new CheckInfoGridItemDivider(1,
+ (mContext.getResources().getColor(R.color.check_info_position_line_color)));
+ mRecyclerView.addItemDecoration(gridLayoutDivider);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ List resultData = showInfoResult();
+ mRecyclerView.setAdapter(new CheckInfoAdapter(mContext, mStyle, resultData));
+ //关闭按钮
+ findViewById(R.id.cancel_info_list_button).setOnClickListener(v -> {
+ cancel();
+ });
+ }
+
+ public List showInfoResult() {
+ if (result.size() > 0) {
+ result.clear();
+ }
+ try {
+ List checkListResult = new ArrayList();
+ try {
+ if (mStyle.equals(CheckItemInfo.CheckInfoStyle.CHECK_INFO_STYLE_DEVICES)) {
+ checkListResult = mCheckResultData.getData().getDevices();
+ } else {
+ checkListResult = mCheckResultData.getData().getSoft();
+ }
+ for (CheckResultData.CheckListItem item : checkListResult) {
+ if (item.getStateValue() != null) {
+ result.addAll(checkListResult);
+ }
+ if (item.getItems() != null) {
+ result.addAll(item.getItems());
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ Log.d(TAG, "检测指标结果值===" + result.toString());
+ } catch (Exception e) {
+
+ }
+ return result;
+ }
+
+ public void cancel() {
+ super.dismiss();
+ }
+
+ @Override
+ public void dismiss() {
+
+ }
+}
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml b/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml
new file mode 100644
index 0000000000..04aae14090
--- /dev/null
+++ b/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_driver.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_recycler_shape.xml b/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_recycler_shape.xml
new file mode 100644
index 0000000000..b46d99a0b8
--- /dev/null
+++ b/core/function-impl/mogo-core-function-check/src/main/res/drawable/check_recycler_shape.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/layout/activity_check.xml b/core/function-impl/mogo-core-function-check/src/main/res/layout/activity_check.xml
index 66ddb09fd9..b9ae3f9dcd 100644
--- a/core/function-impl/mogo-core-function-check/src/main/res/layout/activity_check.xml
+++ b/core/function-impl/mogo-core-function-check/src/main/res/layout/activity_check.xml
@@ -14,7 +14,7 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent"/>
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_list.xml b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_list.xml
new file mode 100644
index 0000000000..2bb0fae42d
--- /dev/null
+++ b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_info_list.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/layout/check_list.xml b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_list.xml
index 8f9869e6e8..f3ad400460 100644
--- a/core/function-impl/mogo-core-function-check/src/main/res/layout/check_list.xml
+++ b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_list.xml
@@ -3,11 +3,11 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="2360px"
- android:layout_height="@dimen/dp_643"
+ android:layout_height="@dimen/dp_525"
android:layout_marginStart="@dimen/dp_100"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_100"
- android:layout_marginBottom="@dimen/dp_15"
+ android:layout_marginBottom="@dimen/dp_35"
android:background="@drawable/check_list_item_back">
+ android:src="@drawable/auto"
+ android:clickable="true"/>
@@ -59,10 +60,11 @@
@@ -76,6 +78,7 @@
android:layout_marginTop="@dimen/dp_78"
android:layout_marginBottom="@dimen/dp_108"
android:orientation="vertical"
+ android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/auto_layout"
app:layout_constraintTop_toBottomOf="@+id/title">
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/layout/check_titel.xml b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_titel.xml
index e226db0ae3..89aa819e03 100644
--- a/core/function-impl/mogo-core-function-check/src/main/res/layout/check_titel.xml
+++ b/core/function-impl/mogo-core-function-check/src/main/res/layout/check_titel.xml
@@ -9,7 +9,7 @@
android:layout_marginBottom="@dimen/dp_15">
+ app:layout_constraintLeft_toRightOf="@+id/check_tip_image"
+ app:layout_constraintTop_toTopOf="@+id/check_tip_image" />
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/values/colors.xml b/core/function-impl/mogo-core-function-check/src/main/res/values/colors.xml
index 3d6008947a..c63e5870bf 100644
--- a/core/function-impl/mogo-core-function-check/src/main/res/values/colors.xml
+++ b/core/function-impl/mogo-core-function-check/src/main/res/values/colors.xml
@@ -8,5 +8,9 @@
#997AFF87
#7AFF87
#242B59
+ #EE3132
+ #666DA5
+ #767FCD
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml b/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml
index 7b4a8dce13..a75b06b449 100644
--- a/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml
+++ b/core/function-impl/mogo-core-function-check/src/main/res/values/styles.xml
@@ -6,5 +6,6 @@
@android:drawable/progress_indeterminate_horizontal
- @drawable/check_progress
+ - @drawable/check_driver
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/build.gradle b/core/function-impl/mogo-core-function-hmi/build.gradle
index 687a17828a..aa8fc72bc4 100644
--- a/core/function-impl/mogo-core-function-hmi/build.gradle
+++ b/core/function-impl/mogo-core-function-hmi/build.gradle
@@ -54,12 +54,13 @@ dependencies {
if (Boolean.valueOf(RELEASE)) {
} else {
- api project(':services:mogo-service-api')
+ implementation project(':services:mogo-service-api')
implementation project(':modules:mogo-module-common')
implementation project(':core:mogo-core-data')
implementation project(':core:mogo-core-utils')
implementation project(':core:mogo-core-function-api')
+ implementation project(':core:mogo-core-function-call')
}
}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java
index 2c91444d63..da920a1bc9 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/WaringConst.java
@@ -5,7 +5,7 @@ package com.mogo.eagle.core.function.hmi;
* @date 2021/8/3 4:26 下午
*/
public class WaringConst {
- public static String MODULE_NAME = "MODULE_LEFT_PANEL";
+ public static String MODULE_NAME = "MODULE_HMI_WARING";
// V2X 弹窗预警
// 是否展示:true-展示,false-关闭
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
similarity index 96%
rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningFragment.kt
rename to core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
index 8af016c6be..098ff1099c 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningFragment.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
@@ -17,22 +17,24 @@ import com.mogo.eagle.core.function.hmi.ui.widget.V2XNotificationView
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
import com.mogo.eagle.core.function.hmi.R
import com.mogo.utils.logger.Logger
-import kotlinx.android.synthetic.main.fragment_warning.*
+import kotlinx.android.synthetic.main.fragment_hmi.*
/**
* @author xiaoyuzhou
* @date 2021/8/3 2:40 下午
* 预警图层
*/
-class MoGoWarningFragment : MvpFragment(),
+class MoGoHmiFragment : MvpFragment(),
MoGoWarningContract.View {
var mWarningFloat: WarningFloat.Builder? = null
- override fun initViews() {}
+ override fun initViews() {
+ autopilotStatus.visibility = View.VISIBLE
+ }
override fun getLayoutId(): Int {
- return R.layout.fragment_warning
+ return R.layout.fragment_hmi
}
override fun createPresenter(): WaringPresenter {
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/AutoPilotStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/AutoPilotStatusView.kt
new file mode 100644
index 0000000000..a64f9d92a8
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/AutoPilotStatusView.kt
@@ -0,0 +1,105 @@
+package com.mogo.eagle.core.function.hmi.ui.widget
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.mogo.eagle.core.data.autopilot.AdasOCHData
+import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
+import com.mogo.eagle.core.function.hmi.R
+import com.mogo.eagle.core.utilcode.util.LogUtils
+import com.mogo.eagle.core.utilcode.util.ToastUtils
+import com.mogo.module.common.MogoApisHandler
+import com.mogo.service.adas.IMogoAdasOCHCallback
+import kotlinx.android.synthetic.main.view_autopilot_status.view.*
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/9/22 3:59 下午
+ * 自动驾驶状态按钮
+ */
+class AutoPilotStatusView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet
+) : ConstraintLayout(context, attrs), View.OnClickListener, IMogoAdasOCHCallback {
+
+ private val TAG = "AutopilotStatusView"
+
+ private var mAutopilotStatus: Int = 0
+
+ init {
+ initView(context)
+ }
+
+ private fun initView(context: Context) {
+ LayoutInflater.from(context).inflate(R.layout.view_autopilot_status, this, true)
+
+ val lp = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
+ layoutParams = lp
+
+ // 设置点击监听
+ setOnClickListener(this)
+ // 首次查询自动驾驶状态
+ mAutopilotStatus = MogoApisHandler.getInstance().apis.adasControllerApi.autopilotStatus
+ // 自动驾驶状态监听
+ MogoApisHandler.getInstance().apis.adasControllerApi.addAdasOCHCallback(this)
+
+ LogUtils.dTag(TAG, "autopilotStatus: $mAutopilotStatus")
+ setAutoPilotStatus(mAutopilotStatus)
+ }
+
+ override fun onClick(v: View?) {
+ when (mAutopilotStatus) {
+ 0 -> {// 不可自动驾驶,adas与工控机没有链接,或工控机异常
+ LogUtils.eTag(TAG, "不可自动驾驶,adas与工控机没有链接,或工控机异常,请检查")
+ ToastUtils.showShort("不可自动驾驶,adas与工控机没有链接,或工控机异常,请检查")
+ // TODO 这里临时触发自动驾驶能力,测试功过这里删除
+ CallerHmiListenerManager.invokeCheckAutoPilotBtnListener(true)
+ }
+ 1 -> {// 可自动驾驶,目前处于人工干预状态
+ CallerHmiListenerManager.invokeCheckAutoPilotBtnListener(true)
+ }
+ 2 -> {// 自动驾驶中
+ CallerHmiListenerManager.invokeCheckAutoPilotBtnListener(false)
+ }
+ }
+ }
+
+ /**
+ * 设置自动驾驶状态
+ * 0-// 不可自动驾驶,adas与工控机没有链接,或工控机异常
+ * 1-// 可自动驾驶,目前处于人工干预状态
+ * 2-// 自动驾驶中
+ */
+ private fun setAutoPilotStatus(autopilotStatus: Int) {
+ mAutopilotStatus = autopilotStatus
+ when (autopilotStatus) {
+ 0 -> {// 不可自动驾驶,adas与工控机没有链接,或工控机异常
+ clAutopilotStatus.setBackgroundResource(R.drawable.module_hmi_autopilot_status_disabled_bg)
+ tvStatusDes.setTextColor(resources.getColor(R.color.module_mogo_autopilot_status_disable))
+ ivStatusIcon.setImageResource(R.drawable.icon_autopilot_status_disabled)
+ }
+ 1 -> {// 可自动驾驶,目前处于人工干预状态
+ clAutopilotStatus.setBackgroundResource(R.drawable.module_hmi_autopilot_status_enable_bg)
+ tvStatusDes.setTextColor(resources.getColor(R.color.module_mogo_autopilot_status_enable))
+ ivStatusIcon.setImageResource(R.drawable.icon_autopilot_status)
+ }
+ 2 -> {// 自动驾驶中
+ clAutopilotStatus.setBackgroundResource(R.drawable.module_hmi_autopilot_status_checked_bg)
+ tvStatusDes.setTextColor(resources.getColor(R.color.module_mogo_autopilot_status_enable))
+ ivStatusIcon.setImageResource(R.drawable.icon_autopilot_status)
+ }
+ }
+ }
+
+ override fun onArriveAt(data: AdasOCHData?) {
+
+ }
+
+ override fun onStateChanged(state: Int, reason: String?) {
+ setAutoPilotStatus(state)
+ }
+
+
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.java
deleted file mode 100644
index a4c128f6ef..0000000000
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.mogo.eagle.core.function.hmi.warning;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-
-import com.alibaba.android.arouter.facade.annotation.Route;
-import com.mogo.eagle.core.data.enums.WarningDirectionEnum;
-import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider;
-import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener;
-import com.mogo.eagle.core.function.hmi.WaringConst;
-import com.mogo.eagle.core.function.hmi.ui.MoGoWarningFragment;
-import com.mogo.service.MogoServicePaths;
-import com.mogo.utils.logger.Logger;
-
-/**
- * @author xiaoyuzhou
- * @date 2021/8/2 5:52 下午
- * 预警模块
- */
-@Route(path = MogoServicePaths.PATH_V2X_WARNING)
-public class MoGoWarningProvider implements IMoGoWaringProvider {
- private String TAG = "MoGoWarningProvider";
-
- private MoGoWarningFragment mMoGoWarningFragment;
- private Context mContext;
-
- @Override
- public void init(Context context) {
- Logger.d(TAG, "初始化蘑菇预警模块 ……");
- mContext = context;
- }
-
- @Override
- public Fragment createCoverage(Context context, Bundle data) {
- Logger.d(TAG, "初始化蘑菇预警模块 Fragment……");
- mMoGoWarningFragment = new MoGoWarningFragment();
- return mMoGoWarningFragment;
- }
-
- @NonNull
- @Override
- public String getFunctionName() {
- return WaringConst.MODULE_NAME;
- }
-
- @Override
- public void showWarningTrafficLight(int checkLightId) {
- mMoGoWarningFragment.showWarningTrafficLight(checkLightId);
- }
-
- @Override
- public void disableWarningTrafficLight() {
- mMoGoWarningFragment.disableWarningTrafficLight();
- }
-
- @Override
- public void showLimitingVelocity(int limitingSpeed) {
- mMoGoWarningFragment.showLimitingVelocity(limitingSpeed);
- }
-
- @Override
- public void disableLimitingVelocity() {
- mMoGoWarningFragment.disableLimitingVelocity();
- }
-
- @Override
- public void changeCountdownRed(int redNum) {
- mMoGoWarningFragment.changeCountdownRed(redNum);
- }
-
- @Override
- public void changeCountdownYellow(int yellowNum) {
- mMoGoWarningFragment.changeCountdownYellow(yellowNum);
- }
-
- @Override
- public void changeCountdownGreen(int greenNum) {
- mMoGoWarningFragment.changeCountdownGreen(greenNum);
- }
-
- @Override
- public void changeCountdownTrafficLightNum(int readNum, int yellowNum, int greenNum) {
- mMoGoWarningFragment.changeCountdownTrafficLightNum(readNum, yellowNum, greenNum);
- }
-
- @Override
- public void showWarningV2X(int v2xType, @Nullable String alertContent,
- @Nullable String ttsContent, @Nullable String tag,
- @Nullable WarningStatusListener listener) {
- mMoGoWarningFragment.showWarningV2X(v2xType, alertContent, ttsContent, tag, listener);
- }
-
- @Override
- public void disableWarningV2X(String tag) {
- mMoGoWarningFragment.disableWarningV2X(tag);
- }
-
- @Override
- public void showWarning(@NonNull WarningDirectionEnum direction) {
- mMoGoWarningFragment.showWarning(direction);
- }
-
- @Override
- public void showWarning(@NonNull WarningDirectionEnum direction, long closeTime) {
- mMoGoWarningFragment.showWarning(direction, closeTime);
- }
-
- @Override
- public void onDestroy() {
- Log.d(TAG, "onDestroy");
- }
-}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt
new file mode 100644
index 0000000000..02b48d0420
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/warning/MoGoWarningProvider.kt
@@ -0,0 +1,95 @@
+package com.mogo.eagle.core.function.hmi.warning
+
+import android.content.Context
+import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
+import com.mogo.eagle.core.function.hmi.ui.MoGoHmiFragment
+import android.os.Bundle
+import android.util.Log
+import androidx.fragment.app.Fragment
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.mogo.eagle.core.function.hmi.WaringConst
+import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
+import com.mogo.eagle.core.data.enums.WarningDirectionEnum
+import com.mogo.service.MogoServicePaths
+import com.mogo.utils.logger.Logger
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/8/2 5:52 下午
+ * 预警模块
+ */
+@Route(path = MogoServicePaths.PATH_V2X_WARNING)
+class MoGoWarningProvider : IMoGoWaringProvider {
+ private val TAG = "MoGoWarningProvider"
+ private var mMoGoHmiFragment: MoGoHmiFragment? = null
+ private var mContext: Context? = null
+ override fun init(context: Context) {
+ Logger.d(TAG, "初始化蘑菇预警模块 ……")
+ mContext = context
+ }
+
+ override fun createCoverage(context: Context?, data: Bundle?): Fragment? {
+ Logger.d(TAG, "初始化蘑菇预警模块 Fragment……")
+ mMoGoHmiFragment = MoGoHmiFragment()
+ return mMoGoHmiFragment
+ }
+
+ override val functionName: String
+ get() = WaringConst.MODULE_NAME
+
+ override fun showWarningTrafficLight(checkLightId: Int) {
+ mMoGoHmiFragment?.showWarningTrafficLight(checkLightId)
+ }
+
+ override fun disableWarningTrafficLight() {
+ mMoGoHmiFragment?.disableWarningTrafficLight()
+ }
+
+ override fun showLimitingVelocity(limitingSpeed: Int) {
+ mMoGoHmiFragment?.showLimitingVelocity(limitingSpeed)
+ }
+
+ override fun disableLimitingVelocity() {
+ mMoGoHmiFragment?.disableLimitingVelocity()
+ }
+
+ override fun changeCountdownRed(redNum: Int) {
+ mMoGoHmiFragment?.changeCountdownRed(redNum)
+ }
+
+ override fun changeCountdownYellow(yellowNum: Int) {
+ mMoGoHmiFragment?.changeCountdownYellow(yellowNum)
+ }
+
+ override fun changeCountdownGreen(greenNum: Int) {
+ mMoGoHmiFragment?.changeCountdownGreen(greenNum)
+ }
+
+ override fun changeCountdownTrafficLightNum(readNum: Int, yellowNum: Int, greenNum: Int) {
+ mMoGoHmiFragment?.changeCountdownTrafficLightNum(readNum, yellowNum, greenNum)
+ }
+
+ override fun showWarningV2X(
+ v2xType: Int, alertContent: String?,
+ ttsContent: String?, tag: String?,
+ listener: WarningStatusListener?
+ ) {
+ mMoGoHmiFragment?.showWarningV2X(v2xType, alertContent, ttsContent, tag, listener)
+ }
+
+ override fun disableWarningV2X(tag: String?) {
+ mMoGoHmiFragment?.disableWarningV2X(tag!!)
+ }
+
+ override fun showWarning(direction: WarningDirectionEnum) {
+ mMoGoHmiFragment?.showWarning(direction)
+ }
+
+ override fun showWarning(direction: WarningDirectionEnum, closeTime: Long) {
+ mMoGoHmiFragment?.showWarning(direction, closeTime)
+ }
+
+ override fun onDestroy() {
+ Log.d(TAG, "onDestroy")
+ }
+}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_warning.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
similarity index 75%
rename from core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_warning.xml
rename to core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
index fe8d7fea80..555f7c0390 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_warning.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
@@ -18,12 +18,23 @@
android:id="@+id/flSpeedChartView"
android:layout_width="@dimen/module_ext_speed_width"
android:layout_height="@dimen/module_ext_speed_height"
- android:layout_marginLeft="@dimen/dp_40"
- android:layout_marginTop="@dimen/dp_40"
+ android:layout_marginLeft="@dimen/module_mogo_autopilot_status_margin_left"
+ android:layout_marginTop="@dimen/module_ext_arcView_top"
android:elevation="@dimen/dp_10"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-map/.gitignore b/core/function-impl/mogo-core-function-map/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-map/build.gradle b/core/function-impl/mogo-core-function-map/build.gradle
new file mode 100644
index 0000000000..bd30d9d646
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/build.gradle
@@ -0,0 +1,67 @@
+plugins {
+ id 'com.android.library'
+ id 'kotlin-android'
+ id 'kotlin-android-extensions'
+ id 'kotlin-kapt'
+ id 'com.alibaba.arouter'
+}
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+ // buildToolsVersion rootProject.ext.android.buildToolsVersion
+ defaultConfig {
+ minSdkVersion rootProject.ext.android.minSdkVersion
+ targetSdkVersion rootProject.ext.android.targetSdkVersion
+ versionCode Integer.valueOf(VERSION_CODE)
+ versionName getValueFromRootProperties("${project.name.replace("-", "_").toUpperCase()}_VERSION")
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ //ARouter apt 参数
+ kapt {
+ useBuildCache = false
+ arguments {
+ arg("AROUTER_MODULE_NAME", project.getName())
+ }
+ }
+
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation rootProject.ext.dependencies.kotlinstdlibjdk7
+ implementation rootProject.ext.dependencies.androidxccorektx
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.arouter
+ implementation rootProject.ext.dependencies.rxandroid
+
+ kapt rootProject.ext.dependencies.aroutercompiler
+
+ implementation "com.zhidao.support.adas:high:1.2.0.2"
+
+ if (Boolean.valueOf(RELEASE)) {
+
+ } else {
+
+ implementation project(':core:mogo-core-data')
+ implementation project(':core:mogo-core-utils')
+ implementation project(':core:mogo-core-function-api')
+ implementation project(':core:mogo-core-function-call')
+ }
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/core/function-impl/mogo-core-function-map/consumer-rules.pro b/core/function-impl/mogo-core-function-map/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/core/function-impl/mogo-core-function-map/gradle.properties b/core/function-impl/mogo-core-function-map/gradle.properties
new file mode 100644
index 0000000000..79e8393fa8
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.eagle.core
+POM_ARTIFACT_ID=function-map
+VERSION_CODE=1
diff --git a/core/function-impl/mogo-core-function-map/proguard-rules.pro b/core/function-impl/mogo-core-function-map/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-map/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-map/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..fb2b0d007d
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml b/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml
index 7e30806cb7..d63cdb1837 100644
--- a/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml
+++ b/core/function-impl/mogo-core-function-notice/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.mogo.eagle.core.function.notice">
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt
index 73a552b774..ba0b28cc56 100644
--- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt
+++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/utils/TrafficDataConvertUtils.kt
@@ -1,8 +1,8 @@
package com.mogo.eagle.core.function.obu.mogo.utils
import com.mogo.eagle.core.utilcode.util.LogUtils
-import com.mogo.module.common.drawer.bean.TrafficData
-import com.mogo.module.common.enums.TrafficTypeEnum
+import com.mogo.eagle.core.data.traffic.TrafficData
+import com.mogo.eagle.core.data.enums.TrafficTypeEnum
import com.zhidao.support.obu.constants.ObuConstants
import com.zhidao.support.obu.model.CvxPtcThreatIndInfo
import com.zhidao.support.obu.model.CvxRtiThreatIndInfo
diff --git a/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/RoutePathConvertUtils.java b/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/RoutePathConvertUtils.java
new file mode 100644
index 0000000000..b841bcbb56
--- /dev/null
+++ b/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/RoutePathConvertUtils.java
@@ -0,0 +1,34 @@
+package com.mogo.eagle.core.function.smp;
+
+import com.mogo.eagle.core.data.map.MogoLatLng;
+
+import java.util.List;
+
+public class RoutePathConvertUtils {
+
+
+ public List routeList;
+
+ public int ROUTE_LEFT = 1;
+ public int ROUTE_RIGHT = 2;
+ public int ROUTE_STRAIGHT = 0;
+ public int route_direction =-1;
+ public void convert(){
+ for (int i = 0; i 0.0){
+ route_direction = ROUTE_LEFT;
+ }else {
+ route_direction = ROUTE_RIGHT;
+ }
+ }
+ }
+
+}
diff --git a/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java
index dd6cb6f74f..ddbc4248f4 100644
--- a/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java
+++ b/core/function-impl/mogo-core-function-smp/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java
@@ -1,13 +1,13 @@
package com.mogo.eagle.core.function.smp;
import android.content.Context;
-import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.location.Location;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
-import android.view.animation.LinearInterpolator;
-import android.widget.ImageView;
+import android.view.View;
import android.widget.RelativeLayout;
import androidx.annotation.Nullable;
@@ -15,26 +15,31 @@ import androidx.annotation.Nullable;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
+import com.amap.api.maps.TextureMapView;
import com.amap.api.maps.UiSettings;
-import com.amap.api.maps.model.CameraPosition;
+import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CustomMapStyleOptions;
-import com.amap.api.navi.AMapNavi;
-import com.amap.api.navi.AMapNaviView;
-import com.amap.api.navi.AMapNaviViewOptions;
-import com.mogo.commons.AbsMogoApplication;
+import com.amap.api.maps.model.LatLng;
+import com.amap.api.maps.model.LatLngBounds;
+import com.amap.api.maps.model.Marker;
+import com.amap.api.maps.model.MarkerOptions;
+import com.amap.api.maps.model.Polyline;
+import com.amap.api.maps.model.PolylineOptions;
+import com.mogo.cloud.commons.utils.CoordinateUtils;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.eagle.core.data.map.MogoLatLng;
-import com.mogo.eagle.core.function.smp.animation.DirectionRotateAnimation;
import com.mogo.eagle.core.function.smp.utils.MapAssetStyleUtils;
import com.mogo.eagle.core.function.smp.view.ISmallMapDirectionView;
-import com.mogo.eagle.core.view.RoundLayout;
+import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
+import com.mogo.utils.logger.Logger;
-import java.math.RoundingMode;
-import java.text.NumberFormat;
+import java.util.ArrayList;
import java.util.List;
+import ch.hsr.geohash.GeoHash;
+
/**
* 小地图的方向View
*
@@ -46,17 +51,20 @@ public class SmallMapDirectionView
implements IMogoCarLocationChangedListener2, ISmallMapDirectionView {
//小地图名称
- public static final String MODULE_NAME = "SmallMapDirectionView";
+ public static final String MODULE_NAME = "SmallMap";
private RoundLayout rlSmallMapBorder;
- private ImageView mIvMapBorder;
- private DirectionRotateAnimation mRotateAnimation;
- private int lastAngle = 0;
-
- private AMapNaviView mAMapNaviView;
+ private TextureMapView mAMapNaviView;
private AMap mAMap;
- private AMapNavi mAMapNavi;
- private int zoomLevel = 15;
+ private Marker mCarMarker;
+ private Marker mStartMarker;
+ private Marker mEndMarker;
+
+ private int zoomLevel = 13;
+ private List mCoordinatesLatLng = new ArrayList<>();
+ private List mCoordinatesLatLngCurrent = new ArrayList<>();
+ private Polyline mPolyline;
+ private CameraUpdate mCameraUpdate;
public SmallMapDirectionView(Context context) {
this(context, null);
@@ -76,15 +84,11 @@ public class SmallMapDirectionView
}
private void initView(Context context) {
- mRotateAnimation = new DirectionRotateAnimation(context, null);
+ View smpView = LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this);
- LayoutInflater.from(context).inflate(R.layout.module_small_map_view, this);
-
- mAMapNaviView = AbsMogoApplication.getMapNaviView();
+ mAMapNaviView = (TextureMapView)smpView.findViewById(R.id.aMapNaviView);
rlSmallMapBorder = findViewById(R.id.rlSmallMapBorder);
rlSmallMapBorder.addView(mAMapNaviView);
- mIvMapBorder = findViewById(R.id.ivMapBorder);
-
initAMapView();
@@ -117,10 +121,7 @@ public class SmallMapDirectionView
}
private void initAMapView() {
- // 车头朝上
- mAMapNaviView.setNaviMode(AMapNaviView.CAR_UP_MODE);
- // 设置电子眼所在路线的可见性
- mAMapNaviView.setRouteOverlayVisible(false);
+ mCameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel);
mAMap = mAMapNaviView.getMap();
// 关闭地图文字标注
mAMap.showMapText(false);
@@ -128,25 +129,15 @@ public class SmallMapDirectionView
mAMap.setMapType(AMap.MAP_TYPE_NIGHT);
// 关闭显示实时路况图层,aMap是地图控制器对象。
mAMap.setTrafficEnabled(false);
- mAMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
- @Override
- public void onCameraChange(CameraPosition cameraPosition) {
- if (cameraPosition != null) {
- //Log.w("onCameraChange", "cameraPosition=" + cameraPosition.bearing);
- changeAngle((int) cameraPosition.bearing);
- }
- }
-
- @Override
- public void onCameraChangeFinish(CameraPosition cameraPosition) {
-
- }
- });
-
- mAMapNavi = AMapNavi.getInstance(getContext());
- //使用外部GPS数据
- mAMapNavi.setIsUseExtraGPSData(true);
+ // 设置 锚点 图标
+ mCarMarker = mAMap.addMarker(new MarkerOptions()
+ .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_my_location_logo))
+ .anchor(0.5f, 0.5f));
+ mStartMarker = mAMap.addMarker(new MarkerOptions()
+ .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_start)));
+ mEndMarker = mAMap.addMarker(new MarkerOptions()
+ .icon(BitmapDescriptorFactory.fromResource(R.drawable.module_small_map_view_dir_end)));
new Thread(() -> {
try {
@@ -162,8 +153,7 @@ public class SmallMapDirectionView
);
//设置希望展示的地图缩放级别
- CameraUpdate cameraUpdate = CameraUpdateFactory.zoomTo(zoomLevel);
- mAMap.moveCamera(cameraUpdate);
+ mAMap.moveCamera(mCameraUpdate);
}).start();
// 设置地图的样式
@@ -172,71 +162,12 @@ public class SmallMapDirectionView
uiSettings.setAllGesturesEnabled(false);// 所有手势
uiSettings.setMyLocationButtonEnabled(false); // 显示默认的定位按钮
uiSettings.setLogoBottomMargin(-150); //设置Logo下边界距离屏幕底部的边距,设置为负值即可
-
- // 导航地图
- AMapNaviViewOptions options = mAMapNaviView.getViewOptions();
- //设置导航界面UI是否显示。
- if (options != null) {
- // 设置是否开启自动黑夜模式切换,默认为false,不自动切换
- options.setAutoNaviViewNightMode(false);
- // 设置6秒后是否自动锁车
- options.setAutoLockCar(true);
- // 设置路线上的摄像头气泡是否显示
- options.setCameraBubbleShow(false);
- // 设置路线相关的配置属性,如:路线的路况颜色,路线上是否显示摄像头气泡等。
- // options.setRouteOverlayOptions( MapStyleUtils.getRouteOverlayOptions() );
- // 设置自车的图片对象
- options.setCarBitmap(BitmapFactory.decodeResource(getContext().getResources(),
- R.drawable.module_small_map_view_my_location_logo));
- // 设置罗盘位图对象
- options.setFourCornersBitmap(BitmapFactory.decodeResource(getContext().getResources(),
- R.drawable.icon_module_small_map_four_corners));
- // 设置指南针图标否在导航界面显示,默认显示。true,显示;false,隐藏。
- options.setCompassEnabled(false);
- //设置路况光柱条是否显示(只适用于驾车导航,需要联网)。
- options.setTrafficBarEnabled(false);
- // 设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。
- options.setTrafficLayerEnabled(false);
- // 设置导航界面是否显示路线全览按钮。
- options.setRouteListButtonShow(false);
- // 设置屏幕是否常亮,默认开启
- options.setScreenAlwaysBright(false);
- // 设置交通播报是否打开(只适用于驾车导航,需要联网)。
- options.setTrafficInfoUpdateEnabled(false);
- // 设置摄像头播报是否打开(只适用于驾车导航)。
- options.setCameraInfoUpdateEnabled(false);
- // 设置菜单按钮是否在导航界面显示。
- options.setSettingMenuEnabled(false);
- // 设置是否绘制显示交通路况的线路(彩虹线),拥堵-红色,畅通-绿色,缓慢-黄色,未知-蓝色。默认不绘制彩虹线。
- options.setTrafficLine(false);
- // 设置是否绘制牵引线(当前位置到目的地的指引线)。默认不绘制牵引线。
- options.setLeaderLineEnabled(-1);
- // 设置导航界面UI是否显示。
- options.setLayoutVisible(false);
- // 设置是否自动画路
- options.setAutoDrawRoute(false);
- // 设置是否显示路口放大图(实景图)
- options.setRealCrossDisplayShow(false);
- // 设置是否显示路口放大图(路口模型图)
- options.setModeCrossDisplayShow(false);
- // 设置是否显示道路信息view
- options.setLaneInfoShow(false);
- // 设置是否自动改变缩放等级
- options.setAutoChangeZoom(false);
- // 设置是否自动全览模式,即在算路成功后自动进入全览模式
- options.setAutoDisplayOverview(false);
- // 设置路线转向箭头隐藏和显示
- options.setNaviArrowVisible(false);
- // 通过路线是否自动置灰,仅支持驾车导航
- options.setAfterRouteAutoGray(false);
- options.setZoom(((int) 10));
- //options.setPointToCenter(0.7D, 0.5D);
- // 2D模式
- options.setTilt(0);
- // 黑夜模式
- options.setNaviNight(true);
- mAMapNaviView.setViewOptions(options);
- }
+ mAMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
+ @Override
+ public void onMapLoaded() {
+ mAMapNaviView.getMap().setPointToCenter(mAMapNaviView.getWidth()/2, mAMapNaviView.getHeight()/2);
+ }
+ });
}
@@ -247,58 +178,106 @@ public class SmallMapDirectionView
@Override
public void onCarLocationChanged2(Location latLng) {
- //Logger.d(MODULE_NAME, "onCarLocationChanged2 latLng:" + latLng);
- if (mAMapNavi != null) {
- NumberFormat nf = NumberFormat.getNumberInstance();
- // 保留两位小数
- nf.setMaximumFractionDigits(6);
- // 如果不需要四舍五入,可以使用RoundingMode.DOWN
- nf.setRoundingMode(RoundingMode.UP);
- try {
- latLng.setLatitude(Double.valueOf(nf.format(latLng.getLatitude())));
- latLng.setLongitude(Double.valueOf(nf.format(latLng.getLongitude())));
- } catch (NumberFormatException e) {
- e.printStackTrace();
- latLng.setLatitude(latLng.getLatitude());
- latLng.setLongitude(latLng.getLongitude());
+ Logger.d(MODULE_NAME, "onCarLocationChanged2 latLng:" + latLng);
+ LatLng currentLatLng = new LatLng(latLng.getLatitude(), latLng.getLongitude());
+
+ if (mCarMarker != null) {
+ mCarMarker.setRotateAngle(360 - latLng.getBearing());
+ mCarMarker.setPosition(currentLatLng);
+ mCarMarker.setToTop();
+ }
+
+
+ if (mCoordinatesLatLng.size() > 1) {
+ mCoordinatesLatLngCurrent.clear();
+ for (LatLng lng : mCoordinatesLatLng) {
+ MogoLatLng mogoLatLng = new MogoLatLng(lng.latitude, lng.longitude);
+ mCoordinatesLatLngCurrent.add(mogoLatLng);
}
- mAMapNavi.setExtraGPSData(2, latLng);
+
+ // 结束位置
+ LatLng endLatLng = mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1);
+ // 与结束位置进行 GeoHash 0-12
+// GeoHash endGeoHash = GeoHash.withCharacterPrecision(endLatLng.latitude, endLatLng.longitude, 7);
+// GeoHash currentGeoHash = GeoHash.withCharacterPrecision(currentLatLng.latitude, currentLatLng.longitude, 7);
+// Log.d(MODULE_NAME, "currentGeoHash=" + currentGeoHash);
+// Log.d(MODULE_NAME, "endGeoHash=" + endGeoHash);
+
+ float calculateDistance = CoordinateUtils.calculateLineDistance(
+ endLatLng.latitude, endLatLng.longitude,
+ currentLatLng.latitude, currentLatLng.longitude
+ );
+
+ Log.d(MODULE_NAME, "calculateDistance=" + calculateDistance);
+ if (calculateDistance <= 20) {
+ clearPolyline();
+ } else {
+ drawablePolyline(mCoordinatesLatLngCurrent);
+ }
+ } else {
+ //设置希望展示的地图缩放级别
+ mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLatLng, zoomLevel));
}
}
@Override
public void onCarLocationChanged(MogoLatLng latLng) {
- //Logger.d(MODULE_NAME, "onCarLocationChanged latLng:" + latLng);
+ Logger.d(MODULE_NAME, "onCarLocationChanged latLng:" + latLng);
}
@Override
public void drawablePolyline(List coordinates) {
+ clearPolyline();
+ mCoordinatesLatLng.clear();
+ for (MogoLatLng coordinate : coordinates) {
+ mCoordinatesLatLng.add(new LatLng(coordinate.getLat(), coordinate.getLon()));
+ }
+
+ if (mAMap != null) {
+ if (mCoordinatesLatLng.size() > 2) {
+ // 设置开始结束Marker位置
+ mStartMarker.setPosition(mCoordinatesLatLng.get(0));
+ mEndMarker.setPosition(mCoordinatesLatLng.get(mCoordinatesLatLng.size() - 1));
+ mStartMarker.setVisible(true);
+ mEndMarker.setVisible(true);
+
+ //存放所有点的经纬度
+ LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();
+
+ for (int i = 0; i < mCoordinatesLatLng.size(); i++) {
+ //把所有点都include进去(LatLng类型)
+ boundsBuilder.include(mCoordinatesLatLng.get(i));
+ }
+ //第二个参数为四周留空宽度
+ mAMap.animateCamera(CameraUpdateFactory.newLatLngBoundsRect(boundsBuilder.build(), 65, 65, 65, 65));
+
+ // 绘制线
+ mPolyline = mAMap.addPolyline(
+ new PolylineOptions()
+ .addAll(mCoordinatesLatLng)
+ .color(Color.argb(255, 31, 127, 255))
+ .width(5));
+
+ } else {
+ //设置希望展示的地图缩放级别
+ mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mCoordinatesLatLng.get(0), zoomLevel));
+ }
+ }
}
@Override
public void clearPolyline() {
-
+ mCoordinatesLatLng.clear();
+ if (mPolyline != null) {
+ mPolyline.remove();
+ }
+ if (mStartMarker != null) {
+ mStartMarker.setVisible(false);
+ }
+ if (mEndMarker != null) {
+ mEndMarker.setVisible(false);
+ }
}
- /**
- * 修改角度
- *
- * @param angle 角度 0 - 359度旋转,相对于自身中心位置
- */
- public void changeAngle(int angle) {
- int tempAngle = 360 - angle;
- mRotateAnimation.setFromDegrees(lastAngle);
- mRotateAnimation.setToDegrees(tempAngle);
-
- //设置线性插值,可以解决旋转一圈后卡顿问题
- mRotateAnimation.setInterpolator(new LinearInterpolator());
- //设置旋转一圈时间
- mRotateAnimation.setDuration(300);
- //控件动画结束时是否保持动画最后的状态
- mRotateAnimation.setFillAfter(true);
- mIvMapBorder.startAnimation(mRotateAnimation);
- // 刷新最后一次角度
- lastAngle = tempAngle;
- }
}
diff --git a/core/function-impl/mogo-core-function-smp/src/main/res/layout/module_small_map_view.xml b/core/function-impl/mogo-core-function-smp/src/main/res/layout/module_small_map_view.xml
index fdf0e6dddc..f64b971776 100644
--- a/core/function-impl/mogo-core-function-smp/src/main/res/layout/module_small_map_view.xml
+++ b/core/function-impl/mogo-core-function-smp/src/main/res/layout/module_small_map_view.xml
@@ -12,7 +12,7 @@
android:layout_centerInParent="true"
android:background="@drawable/module_small_map_view_border" />
-
-
+
+
+
+
+ -->
-
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/占位文件.java b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/占位文件.java
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/core/mogo-core-data/src/main/AndroidManifest.xml b/core/mogo-core-data/src/main/AndroidManifest.xml
index ca10114319..a9c24d7a83 100644
--- a/core/mogo-core-data/src/main/AndroidManifest.xml
+++ b/core/mogo-core-data/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.mogo.eagle.core.data">
\ No newline at end of file
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasControlCommandParameter.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AdasControlCommandParameter.java
similarity index 87%
rename from services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasControlCommandParameter.java
rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AdasControlCommandParameter.java
index 391b8fcb72..66bcbd48fd 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasControlCommandParameter.java
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AdasControlCommandParameter.java
@@ -1,4 +1,4 @@
-package com.mogo.service.impl.adas;
+package com.mogo.eagle.core.data.autopilot;
public
/**
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/AdasOCHData.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AdasOCHData.java
similarity index 88%
rename from services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/AdasOCHData.java
rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AdasOCHData.java
index d9d8f501b6..248be4cbf7 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/AdasOCHData.java
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AdasOCHData.java
@@ -1,4 +1,4 @@
-package com.mogo.service.adas.entity;
+package com.mogo.eagle.core.data.autopilot;
public
/**
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/RemoteControlAutoPilotParameters.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/RemoteControlAutoPilotParameters.java
similarity index 79%
rename from services/mogo-service-api/src/main/java/com/mogo/service/adas/RemoteControlAutoPilotParameters.java
rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/RemoteControlAutoPilotParameters.java
index 9089d57260..42dbb6571f 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/RemoteControlAutoPilotParameters.java
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/RemoteControlAutoPilotParameters.java
@@ -1,18 +1,17 @@
-package com.mogo.service.adas;
+package com.mogo.eagle.core.data.autopilot;
import java.util.List;
-public
/**
- * @author congtaowang
- * @since 2020/10/16
- *
- * 自动驾驶参数
+ * @author donghongyu
+ * @since 2021/09/22
+ *
+ * 启动自动驾驶参数
*/
-class RemoteControlAutoPilotParameters {
+public class RemoteControlAutoPilotParameters {
public AutoPilotLonLat startLatLon;
- public List< AutoPilotLonLat > wayLatLons;
+ public List wayLatLons;
public AutoPilotLonLat endLatLon;
public float speedLimit;
public int vehicleType;// 运营类型
@@ -28,7 +27,7 @@ class RemoteControlAutoPilotParameters {
public AutoPilotLonLat() {
}
- public AutoPilotLonLat( double lat, double lon ) {
+ public AutoPilotLonLat(double lat, double lon) {
this.lat = lat;
this.lon = lon;
}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt
similarity index 94%
rename from modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt
rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt
index 2a26036ee6..812d6e42b3 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/TrafficTypeEnum.kt
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/enums/TrafficTypeEnum.kt
@@ -1,6 +1,7 @@
-package com.mogo.module.common.enums
+package com.mogo.eagle.core.data.enums
+
+import com.mogo.eagle.core.data.R
-import com.mogo.module.common.R
/**
* @author xiaoyuzhou
diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/model/V2XThreatIndInfo.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/model/V2XThreatIndInfo.kt
deleted file mode 100644
index 43e103e990..0000000000
--- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/model/V2XThreatIndInfo.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.mogo.eagle.core.data.model
-
-/**
- *@author xiaoyuzhou
- *@date 2021/9/14 3:51 下午
- */
-class V2XThreatIndInfo {
-// /**
-// * RV temperary vehicle ID
-// */
-// private val vehicle_id: String? = null
-// /**
-// * V2V threat status 0: update 1: add 2: delete
-// * range(0..2)
-// * [com.zhidao.support.obu.constants.ObuConstants.STATUS]
-// */
-// private val status = 0
-//
-// /**
-// * RV threat information 目前判断RV方向使用的是 ext_info 中的 target_classification 变量
-// */
-// private val threat_info: V2vThreat? = null
-//
-// /**
-// * 目前判断RV方向使用的是 ext_info 中的 target_classification 变量
-// * The extension information of V2V threat
-// */
-// private val ext_info: V2vThreatExt? = null
-//
-// /**
-// * RV basic information
-// */
-// private val basic_info: MovingObjectInfo? = null
-// /**
-// * Wgs84坐标系,线性经纬度轨迹列表
-// */
-// private val locus_list: List? = null
-//
-// /**
-// * 高德坐标系Gcj,线性经纬度轨迹列表
-// */
-// private val gd_locus_list: List? = null
-
-}
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/bean/TrafficData.java b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/traffic/TrafficData.kt
similarity index 63%
rename from modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/bean/TrafficData.java
rename to core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/traffic/TrafficData.kt
index a7707482d3..2c6ef0b396 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/bean/TrafficData.java
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/traffic/TrafficData.kt
@@ -1,69 +1,68 @@
-package com.mogo.module.common.drawer.bean;
+package com.mogo.eagle.core.data.traffic
-import com.mogo.module.common.enums.TrafficTypeEnum;
+import com.mogo.eagle.core.data.enums.TrafficTypeEnum
/**
* @author xiaoyuzhou
* @date 2021/8/17 8:41 下午
* 交通元素数据,
*/
-public class TrafficData {
-
+class TrafficData {
/**
* 交通元素类型, 车、人、摩托、大巴车、卡车、自行车
*/
- public TrafficTypeEnum type;
+ var type: TrafficTypeEnum = TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI
/**
* 识别物体唯一标识
*/
- public String uuid;
+ var uuid: String = ""
/**
* 识别物体的纬度
*/
- public double lat;
+ var lat = 0.0
/**
* 识别物体的经度
*/
- public double lon;
+ var lon = 0.0
/**
* 车头朝向
*/
- public double heading;
+ var heading = 0.0
/**
* 系统时间
*/
- public long systemTime;
+ var systemTime: Long = 0
/**
* 定位卫星时间
*/
- public long satelliteTime;
+ var satelliteTime: Long = 0
/**
* 海拔
*/
- public double alt;
+ var alt = 0.0
/**
* 速度
*/
- public double speed;
+ var speed = 0.0
/**
* 莫顿码
*/
- public long mortonCode;
+ var mortonCode: Long = 0
/**
* 实际距离
* 使用distanceX和distanceY计算
*/
- public double distance;
+ var distance = 0.0
/**
* 危险等级
@@ -73,5 +72,5 @@ public class TrafficData {
* 0x02: 通知 -- 黄
* 0x03: 警告 -- 红
*/
- public int threatLevel;
-}
+ var threatLevel = 0
+}
\ No newline at end of file
diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/AdvanceWarningBean.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/AdvanceWarningBean.kt
new file mode 100644
index 0000000000..f64ea6cd66
--- /dev/null
+++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/v2x/AdvanceWarningBean.kt
@@ -0,0 +1,27 @@
+package com.mogo.eagle.core.data.v2x
+
+import androidx.annotation.Keep
+
+/**
+ * 路口碰撞预警、盲区预警等通用Bean
+ */
+@Keep
+data class AdvanceWarningBean(
+ var objectId: String,
+ var status: Int,
+ var typeId: Int,
+ var time: Long,
+ var level: Int,
+ var position: Position,
+ var heading: Int,
+ var speed: Double,
+ var distance: Double,
+ var roadId: String,
+ var laneId: String,
+ var laneNum: Int,
+ var gdLocusList: List,
+ var locusList: List
+)
+
+@Keep
+data class Position(var lat: Double, var lon: Double)
diff --git a/core/mogo-core-function-api/README.md b/core/mogo-core-function-api/README.md
index de56e4f933..2ffb28425e 100644
--- a/core/mogo-core-function-api/README.md
+++ b/core/mogo-core-function-api/README.md
@@ -1,11 +1,18 @@
### 模块说明
本模块定义业务层具备那些功能,不提供具体业务实现;所有具体业务实现均在mogo-core-function-impl模块中
+
+base
+ IMoGoFunctionProvider--------带界面的功能模块
+ IMoGoFunctionServerProvider--服务类型的功能模块
+
adas--域控制器相关
chat--车聊聊相关
check--车辆检测相关
dispatch--车辆调度相关
hmi--UI这里承载的是所有鹰眼的UI展示
map--地图相关
+ hd--高精地图
+ smp--小地图
notice--公告
obu--OBU预警逻辑相关
tts--语音播报&语音交互相关
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotIdentifyListener.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotIdentifyListener.java
new file mode 100644
index 0000000000..7b90e37885
--- /dev/null
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotIdentifyListener.java
@@ -0,0 +1,22 @@
+package com.mogo.eagle.core.function.api.autopilot;
+
+import com.mogo.eagle.core.data.traffic.TrafficData;
+
+import java.util.List;
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/9/23 11:23 上午
+ * 自动驾驶识别数据监听,回调后做数据可视化呈现
+ */
+public interface IMoGoAutoPilotIdentifyListener {
+
+ /**
+ * 识别交通元素数据发生更新
+ *
+ * @param trafficData 交通元素信息列表
+ */
+ void onIdentifyDataUpdate(List trafficData);
+
+
+}
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotProvider.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotProvider.java
new file mode 100644
index 0000000000..6c19059386
--- /dev/null
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotProvider.java
@@ -0,0 +1,32 @@
+package com.mogo.eagle.core.function.api.autopilot;
+
+import com.mogo.eagle.core.data.autopilot.RemoteControlAutoPilotParameters;
+import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider;
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/9/22 8:27 下午
+ * 自动驾驶节点
+ */
+public interface IMoGoAutoPilotProvider extends IMoGoFunctionServerProvider {
+
+ /**
+ * 开启自动驾驶
+ *
+ * @param result
+ */
+ void startAutoPilot(RemoteControlAutoPilotParameters result);
+
+ /**
+ * 结束自动驾驶
+ */
+ void cancelAutoPilot();
+
+ /**
+ * 获取车辆自动驾驶状态
+ *
+ * @return
+ */
+ int getAutopilotStatus();
+
+}
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotStatusListener.java b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotStatusListener.java
new file mode 100644
index 0000000000..70fc0a5efa
--- /dev/null
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoAutoPilotStatusListener.java
@@ -0,0 +1,38 @@
+package com.mogo.eagle.core.function.api.autopilot;
+
+import com.mogo.eagle.core.data.autopilot.AdasOCHData;
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/9/22 8:59 下午
+ * 自动驾驶状态回调监听
+ */
+public interface IMoGoAutoPilotStatusListener {
+
+ /**
+ * 不可自动驾驶,目前场景是刚开机,adas还未和工控机连接
+ */
+ int STATUS_AUTOPILOT_DISABLE = 0;
+ /**
+ * 可自动驾驶,工控机连接正常,且处于人工干预状态
+ */
+ int STATUS_AUTOPILOT_ENABLE = 1;
+ /**
+ * 自动驾驶中,可能是停车,可能是行进,但是是机器在处理车的前进后退,不是人
+ */
+ int STATUS_AUTOPILOT_RUNNING = 2;
+
+
+ /**
+ * 到站
+ * @param data 所到车站的简单信息
+ */
+ void onArriveAt( AdasOCHData data );
+
+ /**
+ * 自动驾驶状态发生改变
+ * @param state {@link #STATUS_AUTOPILOT_DISABLE}
+ * @param reason 不能自动驾驶的原因
+ */
+ void onStateChanged(int state, String reason);
+}
diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/autopilot/IMoGoCheckAutoPilotBtnListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/autopilot/IMoGoCheckAutoPilotBtnListener.kt
new file mode 100644
index 0000000000..cbfb84bd8a
--- /dev/null
+++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/hmi/autopilot/IMoGoCheckAutoPilotBtnListener.kt
@@ -0,0 +1,10 @@
+package com.mogo.eagle.core.function.api.hmi.autopilot
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/9/22 9:26 下午
+ * 自动驾驶控制按钮回调监听
+ */
+interface IMoGoCheckAutoPilotBtnListener {
+ fun onCheck(isChecked: Boolean)
+}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/AndroidManifest.xml b/core/mogo-core-function-call/src/main/AndroidManifest.xml
index baa0e8faa4..0f8743e68e 100644
--- a/core/mogo-core-function-call/src/main/AndroidManifest.xml
+++ b/core/mogo-core-function-call/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.mogo.eagle.core.function.call">
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiListenerManager.kt
new file mode 100644
index 0000000000..6ee5aebb34
--- /dev/null
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiListenerManager.kt
@@ -0,0 +1,56 @@
+package com.mogo.eagle.core.function.call.hmi
+
+import androidx.annotation.Nullable
+import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
+import com.mogo.eagle.core.function.call.base.CallerBase
+import com.mogo.eagle.core.utilcode.util.LogUtils
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/9/23 10:22 上午
+ * HMI 视图上的监听管理
+ */
+object CallerHmiListenerManager : CallerBase() {
+
+ private val TAG = "CallerHmiListenerManager"
+
+ private val checkAutoPilotBtnListeners: HashMap =
+ HashMap()
+
+
+ /**
+ * 添加自动驾驶按钮选中监听
+ * @param tag 标记,用来注销监听使用
+ * @param listener 监听回调
+ */
+ fun addCheckAutoPilotBtnListener(
+ @Nullable tag: String,
+ @Nullable listener: IMoGoCheckAutoPilotBtnListener
+ ) {
+ checkAutoPilotBtnListeners[tag] = listener
+ }
+
+ /**
+ * 删除自动驾驶按钮选中监听
+ * @param tag 标记,用来注销监听使用
+ */
+ fun removeCheckAutoPilotBtnListener(@Nullable tag: String) {
+ checkAutoPilotBtnListeners.remove(tag)
+ }
+
+ /**
+ * 触发自动驾驶按钮选中监听
+ * @param isChecked 选中状态
+ */
+ fun invokeCheckAutoPilotBtnListener(isChecked: Boolean) {
+ LogUtils.dTag(TAG, "isChecked:$isChecked")
+ checkAutoPilotBtnListeners.forEach {
+ val tag = it.key
+ val listener = it.value
+ LogUtils.dTag(TAG, "tag:$tag listener:$listener")
+ listener.onCheck(isChecked)
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
index 0e0fe6b589..cd618ab7fa 100644
--- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
+++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/hmi/CallerHmiManager.kt
@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.call.hmi
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
+import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWaringProvider
import com.mogo.eagle.core.function.api.hmi.warning.WarningStatusListener
import com.mogo.eagle.core.function.call.base.CallerBase
diff --git a/core/mogo-core-res/build.gradle b/core/mogo-core-res/build.gradle
index 6a4b325422..058751820b 100644
--- a/core/mogo-core-res/build.gradle
+++ b/core/mogo-core-res/build.gradle
@@ -41,7 +41,7 @@ android {
sourceSets {
main {
res.srcDirs = [
- 'src/main/function-common-res',
+ 'src/main/res',
'src/main/function-adas-res',
'src/main/function-chat-res',
'src/main/function-check-res',
@@ -60,6 +60,18 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation rootProject.ext.dependencies.kotlinstdlibjdk7
+
+ implementation rootProject.ext.dependencies.kotlinstdlibjdk7
+ implementation rootProject.ext.dependencies.androidxccorektx
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxrecyclerview
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+
+ if (Boolean.valueOf(RELEASE)) {
+
+ } else {
+ implementation project(':core:mogo-core-utils')
+ }
}
apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/core/mogo-core-res/src/main/AndroidManifest.xml b/core/mogo-core-res/src/main/AndroidManifest.xml
index baa0e8faa4..aff9fa88bd 100644
--- a/core/mogo-core-res/src/main/AndroidManifest.xml
+++ b/core/mogo-core-res/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.mogo.eagle.core.widget">
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/function-common-res/values/styles.xml b/core/mogo-core-res/src/main/function-common-res/values/styles.xml
deleted file mode 100644
index e727caa8e8..0000000000
--- a/core/mogo-core-res/src/main/function-common-res/values/styles.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_autopilot_status.png b/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_autopilot_status.png
new file mode 100644
index 0000000000..927296d690
Binary files /dev/null and b/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_autopilot_status.png differ
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_autopilot_status_disabled.png b/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_autopilot_status_disabled.png
new file mode 100644
index 0000000000..a56130bc12
Binary files /dev/null and b/core/mogo-core-res/src/main/function-hmi-res/drawable-xxhdpi/icon_autopilot_status_disabled.png differ
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_bg.xml b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_bg.xml
new file mode 100644
index 0000000000..96123080b7
--- /dev/null
+++ b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_bg.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_checked_bg.xml b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_checked_bg.xml
new file mode 100644
index 0000000000..d18c145877
--- /dev/null
+++ b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_checked_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_disabled_bg.xml b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_disabled_bg.xml
new file mode 100644
index 0000000000..21ff274a65
--- /dev/null
+++ b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_disabled_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_enable_bg.xml b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_enable_bg.xml
new file mode 100644
index 0000000000..fac249b7fa
--- /dev/null
+++ b/core/mogo-core-res/src/main/function-hmi-res/drawable/module_hmi_autopilot_status_enable_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/core/mogo-core-res/src/main/function-hmi-res/drawable/yi_biao_pan_bg_nor.xml b/core/mogo-core-res/src/main/function-hmi-res/drawable/yi_biao_pan_bg_nor.xml
index 06579a8582..f62c0fb5d2 100644
--- a/core/mogo-core-res/src/main/function-hmi-res/drawable/yi_biao_pan_bg_nor.xml
+++ b/core/mogo-core-res/src/main/function-hmi-res/drawable/yi_biao_pan_bg_nor.xml
@@ -5,8 +5,8 @@
android:endColor="#3B4577"
android:startColor="#3B4577" />
+ android:bottomLeftRadius="@dimen/module_ext_speed_width_big_radius"
+ android:bottomRightRadius="@dimen/module_ext_speed_width_sm_radius"
+ android:topLeftRadius="@dimen/module_ext_speed_width_sm_radius"
+ android:topRightRadius="@dimen/module_ext_speed_width_big_radius" />
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/function-hmi-res/values-xhdpi-2560x1440/dimens.xml b/core/mogo-core-res/src/main/function-hmi-res/values-xhdpi-2560x1440/dimens.xml
deleted file mode 100644
index 6b2cd8c0f7..0000000000
--- a/core/mogo-core-res/src/main/function-hmi-res/values-xhdpi-2560x1440/dimens.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- 460px
- 460px
-
- 320px
- 320px
- 20px
- 110px
- 40px
-
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/function-hmi-res/values-xhdpi/dimens.xml b/core/mogo-core-res/src/main/function-hmi-res/values-xhdpi/dimens.xml
deleted file mode 100644
index c7c9f95016..0000000000
--- a/core/mogo-core-res/src/main/function-hmi-res/values-xhdpi/dimens.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- 300px
- 300px
-
- 200px
- 200px
- 10px
- 80px
- 28px
-
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/AnimationView.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AnimationView.java
similarity index 96%
rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/AnimationView.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AnimationView.java
index 3a247bf092..30acdb6d5c 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/AnimationView.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/AnimationView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.v2x.view;
+package com.mogo.eagle.core.widget;
import android.content.Context;
import android.graphics.Bitmap;
@@ -13,7 +13,8 @@ import android.view.View;
import androidx.annotation.Nullable;
-import com.mogo.module.v2x.utils.ImageUtil;
+
+import com.mogo.eagle.core.utilcode.util.ImageUtils;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -173,7 +174,7 @@ public class AnimationView extends View implements Handler.Callback {
if (mAnimDataList != null && mAnimDataList.size() > 0) {
mCurAnimPos = 0;
AnimData animData = mAnimDataList.get(mCurAnimPos);
- mCurShowBmp = ImageUtil.getBitmap(getContext(), animData.filePath, mWidth, mHeight);
+ mCurShowBmp = ImageUtils.getBitmap(animData.filePath, mWidth, mHeight);
invalidate();
if (mListener != null) {
mListener.onAnimChange(mCurAnimPos, mCurShowBmp);
@@ -296,7 +297,7 @@ public class AnimationView extends View implements Handler.Callback {
}
public static class AnimData {
- public Object filePath;
+ public String filePath;
}
public static class ProcessAnimThread {
@@ -312,7 +313,7 @@ public class AnimationView extends View implements Handler.Callback {
public ProcessAnimThread(Context context, Handler handler) {
mUiHandler = handler;
- mContext = new WeakReference(context);
+ mContext = new WeakReference<>(context);
init();
}
@@ -333,7 +334,7 @@ public class AnimationView extends View implements Handler.Callback {
switch (msg.what) {
case PROCESS_DATA: {
AnimData animData = (AnimData) msg.obj;
- Bitmap bitmap = ImageUtil.getBitmap(mContext.get(), animData.filePath, mWidth, mHeight);
+ Bitmap bitmap = ImageUtils.getBitmap(animData.filePath, mWidth, mHeight);
if (bitmap != null) {
Message finishMsg = Message.obtain();
finishMsg.what = PROCESS_ANIM_FINISH;
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/widget/CustomCircleImageView.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/CustomCircleImageView.java
similarity index 99%
rename from modules/mogo-module-common/src/main/java/com/mogo/module/common/widget/CustomCircleImageView.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/CustomCircleImageView.java
index c743b08a24..5f254b9cb7 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/widget/CustomCircleImageView.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/CustomCircleImageView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.common.widget;
+package com.mogo.eagle.core.widget;
import android.annotation.SuppressLint;
import android.content.Context;
@@ -23,7 +23,6 @@ import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
-import com.mogo.module.common.R;
@SuppressLint("AppCompatCustomView")
public class CustomCircleImageView extends ImageView {
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/GestureTopCloseLayout.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/GestureTopCloseLayout.java
similarity index 93%
rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/GestureTopCloseLayout.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/GestureTopCloseLayout.java
index c1b19bcd19..7bd1eb7d26 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/GestureTopCloseLayout.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/GestureTopCloseLayout.java
@@ -1,4 +1,4 @@
-package com.mogo.module.v2x.view;
+package com.mogo.eagle.core.widget;
import android.content.Context;
import android.util.AttributeSet;
@@ -9,8 +9,7 @@ import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.customview.widget.ViewDragHelper;
-import com.mogo.module.v2x.V2XConst;
-import com.mogo.utils.logger.Logger;
+import com.mogo.eagle.core.utilcode.util.LogUtils;
import org.jetbrains.annotations.NotNull;
@@ -22,6 +21,9 @@ import org.jetbrains.annotations.NotNull;
* version: 1.0
*/
public class GestureTopCloseLayout extends ConstraintLayout {
+
+ private String TAG = "GestureTopCloseLayout";
+
private ViewDragHelper mViewDragHelper;
private ViewCloseListener mViewCloseListener;
@@ -77,7 +79,7 @@ public class GestureTopCloseLayout extends ConstraintLayout {
@Override
public void onViewPositionChanged(@NonNull View changedView, int left, int top, int dx, int dy) {
super.onViewPositionChanged(changedView, left, top, dx, dy);
- Logger.w(V2XConst.MODULE_NAME, "onViewPositionChanged==top=" + top +
+ LogUtils.wTag(TAG, "onViewPositionChanged==top=" + top +
" changedView.getHeight()==" + changedView.getHeight());
if (top < 0) {
mTop = top;
@@ -94,7 +96,7 @@ public class GestureTopCloseLayout extends ConstraintLayout {
//手指释放的时候回调
@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
- Logger.w(V2XConst.MODULE_NAME, "onViewReleased==mTop=" + mTop + " getHeight=" + getHeight());
+ LogUtils.wTag(TAG, "onViewReleased==mTop=" + mTop + " getHeight=" + getHeight());
if (mTop < 0) {
mViewDragHelper.settleCapturedViewAt(0, -getHeight());
invalidate();
diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/view/LiveRoundLayout.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/LiveRoundLayout.java
similarity index 96%
rename from core/mogo-core-res/src/main/java/com/mogo/eagle/core/view/LiveRoundLayout.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/LiveRoundLayout.java
index dab80bf240..8a8ab02489 100644
--- a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/view/LiveRoundLayout.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/LiveRoundLayout.java
@@ -1,4 +1,4 @@
-package com.mogo.eagle.core.view;
+package com.mogo.eagle.core.widget;
import android.content.Context;
import android.content.res.TypedArray;
@@ -8,8 +8,6 @@ import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
-import com.mogo.eagle.core.function.call.api.R;
-
public class LiveRoundLayout extends RelativeLayout {
private float roundLayoutRadius = 14f;
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/RoundConstraintLayout.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java
similarity index 97%
rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/RoundConstraintLayout.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java
index 5541ebc128..74f6ab1fbd 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/RoundConstraintLayout.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundConstraintLayout.java
@@ -1,4 +1,4 @@
-package com.mogo.module.v2x.view;
+package com.mogo.eagle.core.widget;
import android.content.Context;
import android.content.res.TypedArray;
@@ -9,7 +9,6 @@ import android.util.AttributeSet;
import androidx.constraintlayout.widget.ConstraintLayout;
-import com.mogo.module.v2x.R;
/**
* author : donghongyu
diff --git a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/view/RoundLayout.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundLayout.java
similarity index 96%
rename from core/mogo-core-res/src/main/java/com/mogo/eagle/core/view/RoundLayout.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundLayout.java
index 2158c157e5..cb74ee8a8e 100644
--- a/core/mogo-core-res/src/main/java/com/mogo/eagle/core/view/RoundLayout.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/RoundLayout.java
@@ -1,4 +1,4 @@
-package com.mogo.eagle.core.view;
+package com.mogo.eagle.core.widget;
import android.content.Context;
import android.content.res.TypedArray;
@@ -10,8 +10,6 @@ import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
-import com.mogo.eagle.core.function.call.api.R;
-
/**
* author : donghongyu
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/TextureVideoView.java b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/TextureVideoView.java
similarity index 79%
rename from modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/TextureVideoView.java
rename to core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/TextureVideoView.java
index b628bcd25f..b3568658fa 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/TextureVideoView.java
+++ b/core/mogo-core-res/src/main/java/com/mogo/eagle/core/widget/TextureVideoView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.v2x.view;
+package com.mogo.eagle.core.widget;
/*
* Copyright (C) 2006 The Android Open Source Project
@@ -33,14 +33,12 @@ import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.MediaController.MediaPlayerControl;
-import com.mogo.module.v2x.R;
-import com.mogo.module.v2x.V2XConst;
-import com.mogo.utils.logger.Logger;
+
+import com.mogo.eagle.core.utilcode.util.LogUtils;
import java.io.IOException;
import java.util.Map;
-import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
/**
* Displays a video file. The VideoView class can load images from various
@@ -50,15 +48,25 @@ import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
*/
public class TextureVideoView extends TextureView implements MediaPlayerControl {
private String TAG = "V2XModuleProvider";
+
+ public static final int STATE_ERROR = -1;
+ public static final int STATE_IDLE = 0;
+ public static final int STATE_PREPARING = 1;
+ public static final int STATE_PREPARED = 2;
+ public static final int STATE_PLAYING = 3;
+ public static final int STATE_PAUSED = 4;
+ public static final int STATE_PLAYBACK_COMPLETED = 5;
+ public static final int STATE_SEEKING = 6;
+
// settable by the client
private Uri mUri;
private Map mHeaders;
private int mDuration;
// all possible internal states
- private int mCurrentState = V2XConst.STATE_IDLE;
+ private int mCurrentState = STATE_IDLE;
private int mTargetState = mCurrentState, mTagetStateBackup = mCurrentState;
- private int mPrepareState = V2XConst.STATE_PREPARED;
+ private int mPrepareState = STATE_PREPARED;
// All the stuff we need for playing and showing a video
private Surface mSurface = null;
@@ -113,8 +121,8 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
- mCurrentState = V2XConst.STATE_IDLE;
- mTargetState = V2XConst.STATE_IDLE;
+ mCurrentState = STATE_IDLE;
+ mTargetState = STATE_IDLE;
}
public boolean requestAudioFocus() {
@@ -131,9 +139,9 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
public void setVideoURI(Uri uri, Map headers) {
if (uri == null) {
- Logger.i(MODULE_NAME, "setVideoURI--- uri = null");
+ LogUtils.iTag(TAG, "setVideoURI--- uri = null");
} else {
- Logger.i(MODULE_NAME, "setVideoURI--- uri = " + uri.getPath());
+ LogUtils.iTag(TAG, "setVideoURI--- uri = " + uri.getPath());
}
mUri = uri;
mHeaders = headers;
@@ -149,21 +157,21 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
- mTargetState = mCurrentState = V2XConst.STATE_IDLE;
+ mTargetState = mCurrentState = STATE_IDLE;
}
}
@SuppressLint("NewApi")
private void openVideo() {
- Logger.i(MODULE_NAME, "openVideo");
+ LogUtils.iTag(TAG, "openVideo");
if (mUri == null) {
- Logger.i(MODULE_NAME, "mUri == null ");
+ LogUtils.iTag(TAG, "mUri == null ");
}
if (mSurface == null) {
- Logger.i(MODULE_NAME, "mSurface == null ");
+ LogUtils.iTag(TAG, "mSurface == null ");
}
if (mUri == null || mSurface == null || isSuspendFromActivity) {
- Logger.i(MODULE_NAME, "isSuspendFromActivity = " + isSuspendFromActivity);
+ LogUtils.iTag(TAG, "isSuspendFromActivity = " + isSuspendFromActivity);
return;
}
release(false);
@@ -192,7 +200,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
mMediaPlayer.setScreenOnWhilePlaying(true);
mMediaPlayer.setVolume(0, 0);
mMediaPlayer.prepare();
- mPrepareState = mCurrentState = V2XConst.STATE_PREPARING;
+ mPrepareState = mCurrentState = STATE_PREPARING;
} catch (IOException | SecurityException | IllegalStateException | IllegalArgumentException ex) {
ex.printStackTrace();
onError();
@@ -200,7 +208,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
private void onError() {
- mTargetState = mCurrentState = V2XConst.STATE_ERROR;
+ mTargetState = mCurrentState = STATE_ERROR;
if (mErrorListener != null)
mErrorListener.onError(mMediaPlayer,
MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
@@ -211,24 +219,24 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
mVideoWidth = mp.getVideoWidth();
mVideoHeight = mp.getVideoHeight();
if (mVideoWidth != 0 && mVideoHeight != 0) {
- Logger.d(MODULE_NAME, "OnVideoSizeChangedListener mVideoWidth:" + " mVideoWidth:" + mVideoWidth + " mVideoHeight:" + mVideoHeight);
+ LogUtils.dTag(TAG, "OnVideoSizeChangedListener mVideoWidth:" + " mVideoWidth:" + mVideoWidth + " mVideoHeight:" + mVideoHeight);
}
}
};
MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
- Logger.i(MODULE_NAME, "MediaPlayer.OnPreparedListener");
- mPrepareState = mCurrentState = V2XConst.STATE_PREPARED;
+ LogUtils.iTag(TAG, "MediaPlayer.OnPreparedListener");
+ mPrepareState = mCurrentState = STATE_PREPARED;
mVideoWidth = mp.getVideoWidth();
mVideoHeight = mp.getVideoHeight();
int seekToPosition = mSeekWhenPrepared;
-// Logger.i(MODULE_NAME, "seekToPosition = " + seekToPosition);
+// LogUtils.iTag(TAG, "seekToPosition = " + seekToPosition);
if (seekToPosition != 0) {
seekTo(seekToPosition);
}
- if (mTargetState == V2XConst.STATE_PLAYING) {
+ if (mTargetState == STATE_PLAYING) {
start();
}
if (mOnPreparedListener != null) {
@@ -244,8 +252,8 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
private OnCompletionListener mCompletionListener = new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
- Logger.i(MODULE_NAME, "MediaPlayer.OnCompletionListener");
- mTargetState = mCurrentState = V2XConst.STATE_PLAYBACK_COMPLETED;
+ LogUtils.iTag(TAG, "MediaPlayer.OnCompletionListener");
+ mTargetState = mCurrentState = STATE_PLAYBACK_COMPLETED;
if (mOnCompletionListener != null) {
mOnCompletionListener.onCompletion(mMediaPlayer);
}
@@ -253,19 +261,19 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
};
private OnSeekCompleteListener mSeekCompleteListener = mp -> {
- Logger.i(MODULE_NAME, "MediaPlayer.OnSeekCompleteListener");
+ LogUtils.iTag(TAG, "MediaPlayer.OnSeekCompleteListener");
try {
- mCurrentState = mMediaPlayer.isPlaying() ? V2XConst.STATE_PLAYING : V2XConst.STATE_PAUSED;
+ mCurrentState = mMediaPlayer.isPlaying() ? STATE_PLAYING : STATE_PAUSED;
} catch (Exception e) {
- mCurrentState = V2XConst.STATE_PLAYING;
+ mCurrentState = STATE_PLAYING;
e.printStackTrace();
}
};
private OnErrorListener mErrorListener = new OnErrorListener() {
public boolean onError(MediaPlayer mp, int framework_err, int impl_err) {
- Logger.i(MODULE_NAME, "MediaPlayer.onError");
- mTargetState = mPrepareState = mCurrentState = V2XConst.STATE_ERROR;
+ LogUtils.iTag(TAG, "MediaPlayer.onError");
+ mTargetState = mPrepareState = mCurrentState = STATE_ERROR;
if (mOnErrorListener != null) {
mOnErrorListener.onError(mMediaPlayer, framework_err,
impl_err);
@@ -279,7 +287,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
- Logger.i(MODULE_NAME, "MediaPlayer.OnInfoListener---what = " + what + ";extra = " + extra);
+ LogUtils.iTag(TAG, "MediaPlayer.OnInfoListener---what = " + what + ";extra = " + extra);
int messageId = 0;
if (what == MEDIA_INFO_VIDEO_NOT_SUPPORTED) {
messageId = R.string.VideoView_info_text_video_not_supported;
@@ -298,7 +306,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
private MediaPlayer.OnBufferingUpdateListener mBufferingUpdateListener = new MediaPlayer.OnBufferingUpdateListener() {
public void onBufferingUpdate(MediaPlayer mp, int percent) {
- Logger.i(MODULE_NAME, "MediaPlayer.OnBufferingUpdateListener");
+ LogUtils.iTag(TAG, "MediaPlayer.OnBufferingUpdateListener");
mCurrentBufferPercentage = percent;
}
};
@@ -341,15 +349,15 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
SurfaceTextureListener mSurfaceTextureListener = new SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
- Logger.i(MODULE_NAME, "onSurfaceTextureAvailable");
+ LogUtils.iTag(TAG, "onSurfaceTextureAvailable");
mSurface = new Surface(surface);
openVideo();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
- Logger.d(MODULE_NAME, "onSurfaceTextureSizeChanged mVideoWidth:" + " mVideoWidth:" + mVideoWidth + " mVideoHeight:" + mVideoHeight);
- boolean isValidState = (mTargetState == V2XConst.STATE_PLAYING);
+ LogUtils.dTag(TAG, "onSurfaceTextureSizeChanged mVideoWidth:" + " mVideoWidth:" + mVideoWidth + " mVideoHeight:" + mVideoHeight);
+ boolean isValidState = (mTargetState == STATE_PLAYING);
boolean hasValidSize = (mVideoWidth == width && mVideoHeight == height);
if (mMediaPlayer != null && isValidState && hasValidSize) {
if (mSeekWhenPrepared != 0) {
@@ -366,7 +374,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
- Logger.i(MODULE_NAME, "onSurfaceTextureDestroyed");
+ LogUtils.iTag(TAG, "onSurfaceTextureDestroyed");
mSurface = null;
release(false);
return false;
@@ -382,11 +390,11 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
* release the media player in any state
*/
private void release(boolean cleartargetstate) {
- Logger.i(MODULE_NAME, "release ---cleartargetstate=" + cleartargetstate);
- mCurrentState = V2XConst.STATE_IDLE;
+ LogUtils.iTag(TAG, "release ---cleartargetstate=" + cleartargetstate);
+ mCurrentState = STATE_IDLE;
if (cleartargetstate) {
- mTargetState = V2XConst.STATE_IDLE;
+ mTargetState = STATE_IDLE;
new Thread(new Runnable() {
@Override
@@ -429,40 +437,40 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
public boolean isPrepared() {
- return mPrepareState == V2XConst.STATE_PREPARED
+ return mPrepareState == STATE_PREPARED
|| isSuspendFromActivity;
}
public void start() {
- Logger.i(MODULE_NAME, "TextureVideoView---start");
+ LogUtils.iTag(TAG, "TextureVideoView---start");
if (isFocusLoss) {
- mTagetStateBackup = V2XConst.STATE_PLAYING;
+ mTagetStateBackup = STATE_PLAYING;
return;
}
- //Logger.i(MODULE_NAME, "mCurrentState = " + mCurrentState);
+ //LogUtils.iTag(TAG, "mCurrentState = " + mCurrentState);
if (isInPlaybackState()) {
- Logger.i(MODULE_NAME, "MediaPlayer.start");
+ LogUtils.iTag(TAG, "MediaPlayer.start");
mMediaPlayer.start();
- mCurrentState = V2XConst.STATE_PLAYING;
+ mCurrentState = STATE_PLAYING;
}
- mTargetState = V2XConst.STATE_PLAYING;
+ mTargetState = STATE_PLAYING;
}
public void pause() {
- Logger.i(MODULE_NAME, "TextureVideoView---pause");
- Logger.i(MODULE_NAME, "mCurrentState = " + mCurrentState);
+ LogUtils.iTag(TAG, "TextureVideoView---pause");
+ LogUtils.iTag(TAG, "mCurrentState = " + mCurrentState);
if (isInPlaybackState()) {
if (mMediaPlayer.isPlaying()) {
- Logger.i(MODULE_NAME, " MediaPlayer.pause");
+ LogUtils.iTag(TAG, " MediaPlayer.pause");
mMediaPlayer.pause();
- mCurrentState = V2XConst.STATE_PAUSED;
+ mCurrentState = STATE_PAUSED;
}
}
- mTagetStateBackup = mTargetState = V2XConst.STATE_PAUSED;
+ mTagetStateBackup = mTargetState = STATE_PAUSED;
}
public void suspend() {
- Logger.i(MODULE_NAME, "TextureVideoView---suspend");
+ LogUtils.iTag(TAG, "TextureVideoView---suspend");
if (!isSuspendFromActivity) {
isSuspendFromActivity = true;
if (mMediaPlayer != null) {
@@ -475,20 +483,20 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
public void resume() {
- Logger.i(MODULE_NAME, "TextureVideoView---resume");
+ LogUtils.iTag(TAG, "TextureVideoView---resume");
isSuspendFromActivity = false;
openVideo();
seekTo(progressWhileSuspend);
- if (mTagetStateBackup == V2XConst.STATE_IDLE)
+ if (mTagetStateBackup == STATE_IDLE)
mTagetStateBackup = mTargetState;
- Logger.i(MODULE_NAME, "isFocusLoss = " + isFocusLoss);
- Logger.i(MODULE_NAME, "isInPlaybackState() = " + isInPlaybackState());
+ LogUtils.iTag(TAG, "isFocusLoss = " + isFocusLoss);
+ LogUtils.iTag(TAG, "isInPlaybackState() = " + isInPlaybackState());
if (isFocusLoss) {
if (isInPlaybackState()) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.pause();
- mCurrentState = V2XConst.STATE_PAUSED;
+ mCurrentState = STATE_PAUSED;
}
}
}
@@ -515,12 +523,12 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
public void seekTo(int msec) {
- Logger.i(MODULE_NAME, "TextureVideoView---seekTo---msec = " + msec);
- if (isInPlaybackState() && mCurrentState != V2XConst.STATE_SEEKING
+ LogUtils.iTag(TAG, "TextureVideoView---seekTo---msec = " + msec);
+ if (isInPlaybackState() && mCurrentState != STATE_SEEKING
&& msec > 0 && msec < getDuration()) {
- mCurrentState = V2XConst.STATE_SEEKING;
+ mCurrentState = STATE_SEEKING;
- Logger.i(MODULE_NAME, "MediaPlayer.seekTo(msec) = " + msec);
+ LogUtils.iTag(TAG, "MediaPlayer.seekTo(msec) = " + msec);
mMediaPlayer.seekTo(msec);
mSeekWhenPrepared = 0;
} else {
@@ -541,8 +549,8 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
private boolean isInPlaybackState() {
- return (mMediaPlayer != null && mCurrentState != V2XConst.STATE_ERROR
- && mCurrentState != V2XConst.STATE_IDLE && mCurrentState != V2XConst.STATE_PREPARING);
+ return (mMediaPlayer != null && mCurrentState != STATE_ERROR
+ && mCurrentState != STATE_IDLE && mCurrentState != STATE_PREPARING);
}
@Override
@@ -575,7 +583,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
public boolean isPause() {
- return mTargetState == V2XConst.STATE_PAUSED;
+ return mTargetState == STATE_PAUSED;
}
@Override
@@ -584,7 +592,7 @@ public class TextureVideoView extends TextureView implements MediaPlayerControl
}
public int getCurrentState() {
- Logger.i(MODULE_NAME, "mCurrentState == " + mCurrentState);
+ LogUtils.iTag(TAG, "mCurrentState == " + mCurrentState);
return mCurrentState;
}
}
diff --git a/core/mogo-core-res/src/main/function-common-res/drawable-mdpi/placeholder.png b/core/mogo-core-res/src/main/res/drawable-mdpi/placeholder.png
similarity index 100%
rename from core/mogo-core-res/src/main/function-common-res/drawable-mdpi/placeholder.png
rename to core/mogo-core-res/src/main/res/drawable-mdpi/placeholder.png
diff --git a/core/mogo-core-res/src/main/function-common-res/drawable-xhdpi/placeholder.png b/core/mogo-core-res/src/main/res/drawable-xhdpi/placeholder.png
similarity index 100%
rename from core/mogo-core-res/src/main/function-common-res/drawable-xhdpi/placeholder.png
rename to core/mogo-core-res/src/main/res/drawable-xhdpi/placeholder.png
diff --git a/core/mogo-core-res/src/main/function-common-res/drawable/placeholder.png b/core/mogo-core-res/src/main/res/drawable/placeholder.png
similarity index 100%
rename from core/mogo-core-res/src/main/function-common-res/drawable/placeholder.png
rename to core/mogo-core-res/src/main/res/drawable/placeholder.png
diff --git a/modules/mogo-module-common/src/main/res/raw/daba.nt3d b/core/mogo-core-res/src/main/res/raw/daba.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/daba.nt3d
rename to core/mogo-core-res/src/main/res/raw/daba.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/kache.nt3d b/core/mogo-core-res/src/main/res/raw/kache.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/kache.nt3d
rename to core/mogo-core-res/src/main/res/raw/kache.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/motuoche.nt3d b/core/mogo-core-res/src/main/res/raw/motuoche.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/motuoche.nt3d
rename to core/mogo-core-res/src/main/res/raw/motuoche.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/people.nt3d b/core/mogo-core-res/src/main/res/raw/people.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/people.nt3d
rename to core/mogo-core-res/src/main/res/raw/people.nt3d
diff --git a/libraries/map-custom/src/main/res/raw/qfpz.n3d b/core/mogo-core-res/src/main/res/raw/qfpz.n3d
similarity index 100%
rename from libraries/map-custom/src/main/res/raw/qfpz.n3d
rename to core/mogo-core-res/src/main/res/raw/qfpz.n3d
diff --git a/libraries/map-custom/src/main/res/raw/selfbus.n3d b/core/mogo-core-res/src/main/res/raw/selfbus.n3d
similarity index 100%
rename from libraries/map-custom/src/main/res/raw/selfbus.n3d
rename to core/mogo-core-res/src/main/res/raw/selfbus.n3d
diff --git a/modules/mogo-module-common/src/main/res/raw/shexiangtou.nt3d b/core/mogo-core-res/src/main/res/raw/shexiangtou.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/shexiangtou.nt3d
rename to core/mogo-core-res/src/main/res/raw/shexiangtou.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/special_vehicle.nt3d b/core/mogo-core-res/src/main/res/raw/special_vehicle.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/special_vehicle.nt3d
rename to core/mogo-core-res/src/main/res/raw/special_vehicle.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/stopline.nt3d b/core/mogo-core-res/src/main/res/raw/stopline.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/stopline.nt3d
rename to core/mogo-core-res/src/main/res/raw/stopline.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/tachexiaoche.nt3d b/core/mogo-core-res/src/main/res/raw/tachexiaoche.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/tachexiaoche.nt3d
rename to core/mogo-core-res/src/main/res/raw/tachexiaoche.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_daolujiebing.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_daolujiebing.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_daolujiebing.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_daolujiebing.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_daolujishui.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_daolujishui.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_daolujishui.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_daolujishui.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_daolushigong.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_daolushigong.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_daolushigong.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_daolushigong.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_guzhangqiuzhu.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_guzhangqiuzhu.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_guzhangqiuzhu.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_guzhangqiuzhu.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_jiaotongjiancha.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_jiaotongjiancha.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_jiaotongjiancha.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_jiaotongjiancha.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_nongwu.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_nongwu.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_nongwu.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_nongwu.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_shigong_warning.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_shigong_warning.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_shigong_warning.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_shigong_warning.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_shigu.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_shigu.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_shigu.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_shigu.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_shishilukuang.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_shishilukuang.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_shishilukuang.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_shishilukuang.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/v2x_yongdu.nt3d b/core/mogo-core-res/src/main/res/raw/v2x_yongdu.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/v2x_yongdu.nt3d
rename to core/mogo-core-res/src/main/res/raw/v2x_yongdu.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/ziche.nt3d b/core/mogo-core-res/src/main/res/raw/ziche.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/ziche.nt3d
rename to core/mogo-core-res/src/main/res/raw/ziche.nt3d
diff --git a/modules/mogo-module-common/src/main/res/raw/zixingche.nt3d b/core/mogo-core-res/src/main/res/raw/zixingche.nt3d
similarity index 100%
rename from modules/mogo-module-common/src/main/res/raw/zixingche.nt3d
rename to core/mogo-core-res/src/main/res/raw/zixingche.nt3d
diff --git a/core/mogo-core-res/src/main/res/values-xhdpi-2560x1440/dimens.xml b/core/mogo-core-res/src/main/res/values-xhdpi-2560x1440/dimens.xml
new file mode 100644
index 0000000000..4fd980836a
--- /dev/null
+++ b/core/mogo-core-res/src/main/res/values-xhdpi-2560x1440/dimens.xml
@@ -0,0 +1,31 @@
+
+
+ 460px
+ 460px
+
+ 30px
+ 130px
+
+ 40px
+ 320px
+ 320px
+ 20px
+ 110px
+ 40px
+
+ 74px
+ 92px
+
+ 460px
+ 140px
+ 40px
+ 30px
+ 92px
+ 44px
+ 28px
+
+ 30px
+ 70px
+
+
+
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/res/values/color.xml b/core/mogo-core-res/src/main/res/values/color.xml
new file mode 100644
index 0000000000..5c0e10bf2e
--- /dev/null
+++ b/core/mogo-core-res/src/main/res/values/color.xml
@@ -0,0 +1,5 @@
+
+
+ #FFFFFF
+ #4DFFFFFF
+
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/res/values/dimens.xml b/core/mogo-core-res/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000..3d1a96d9ed
--- /dev/null
+++ b/core/mogo-core-res/src/main/res/values/dimens.xml
@@ -0,0 +1,29 @@
+
+
+ 300px
+ 300px
+
+ 20px
+ 110px
+
+ 40px
+ 200px
+ 200px
+ 10px
+ 80px
+ 28px
+
+ 46px
+ 60px
+
+ 300px
+ 100px
+ 40px
+ 30px
+ 20px
+ 30px
+ 18px
+
+ 20px
+ 50px
+
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/res/values/string.xml b/core/mogo-core-res/src/main/res/values/string.xml
new file mode 100644
index 0000000000..eb4163b982
--- /dev/null
+++ b/core/mogo-core-res/src/main/res/values/string.xml
@@ -0,0 +1,7 @@
+
+
+
+ "不支持该视频。"
+ 此文件不支持播放
+
+
\ No newline at end of file
diff --git a/core/mogo-core-res/src/main/res/values/styles.xml b/core/mogo-core-res/src/main/res/values/styles.xml
new file mode 100644
index 0000000000..d983a865a0
--- /dev/null
+++ b/core/mogo-core-res/src/main/res/values/styles.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/foudations/mogo-aicloud-services-sdk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java b/foudations/mogo-aicloud-services-sdk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java
index 2313dd529f..ac9f284b7a 100644
--- a/foudations/mogo-aicloud-services-sdk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java
+++ b/foudations/mogo-aicloud-services-sdk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java
@@ -167,6 +167,10 @@ public class MogoAiCloudSocketManager extends ConnectionLifecycleListener implem
@Override
public void onMsgReceived(int msgType, Object obj) {
+ if (obj == null) {
+ Logger.e(TAG,"Failed to parse the received message!");
+ return;
+ }
Logger.d(TAG,"onMsgReceived obj className : " + obj.getClass().getName());
List listeners = mListeners.get(msgType);
if (listeners != null && !listeners.isEmpty()) {
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java
index 6fe6e20428..c330c54261 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/AbsMogoApplication.java
@@ -13,7 +13,6 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter;
-import com.amap.api.navi.AMapNaviView;
import com.mogo.aicloud.services.httpdns.IMogoHttpDns;
import com.mogo.aicloud.services.httpdns.MogoHttpDnsHandler;
import com.mogo.commons.analytics.AnalyticsUtils;
@@ -54,23 +53,15 @@ public abstract class AbsMogoApplication extends Application {
return sApp;
}
- public static AMapNaviView aMapNaviView;
-
- public static AMapNaviView getMapNaviView() {
- return aMapNaviView;
- }
-
private static IMogoHttpDns sApis;
@Override
public void onCreate() {
super.onCreate();
- aMapNaviView = new AMapNaviView(this);
- aMapNaviView.onCreate(null);
sApp = this;
initARouter();
Utils.init(this);
- if ( shouldInit() ) {
+ if (shouldInit()) {
init();
}
}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java
index a1b0312719..118d0ed3f3 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpActivity.java
@@ -26,8 +26,7 @@ import com.mogo.utils.logger.Logger;
*
* mvp 的 activity
*/
-public abstract class MvpActivity>
- extends AppCompatActivity implements IView {
+public abstract class MvpActivity> extends AppCompatActivity implements IView {
protected static final String TAG = "MvpActivity";
@@ -45,15 +44,6 @@ public abstract class MvpActivity>
initViews();
mPresenter = createPresenter();
getLifecycle().addObserver(mPresenter);
- //申请悬浮窗权限
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- // 检查是否有悬浮窗权限
- if (Settings.canDrawOverlays(this)) {
- startVoicePad();
- }
- } else {
- startVoicePad();
- }
}
@Override
@@ -62,41 +52,13 @@ public abstract class MvpActivity>
hideBottomUIMenu();
}
- /**
- * 在Pad上拉起语音
- */
- public void startVoicePad() {
- try {
- getWindow().getDecorView().postDelayed(new Runnable() {
- @Override
- public void run() {
- try {
- if (DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_LENOVO) {
- Logger.d(TAG, "启动小智语音");
- Intent intent = new Intent();
- intent.setComponent(new ComponentName("com.zhidao.speech",
- "com.zhidao.speech.MainActivity"));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }, 3000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
//隐藏导航栏
protected void hideBottomUIMenu() {
//隐藏虚拟按键
if (Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = getWindow().getDecorView();
- int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+ int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
}
}
@@ -158,10 +120,4 @@ public abstract class MvpActivity>
mPresenter = null;
}
-// @NonNull
-// @Override
-// public AppCompatDelegate getDelegate() {
-// return MogoSkinManager.getInstance().getInstaller().getSkinAppCompatDelegate(this,
-// super.getDelegate(), this);
-// }
}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideRoundedCornersTransform.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideRoundedCornersTransform.java
index 7d0ad513bb..5f0e0b9a89 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideRoundedCornersTransform.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideRoundedCornersTransform.java
@@ -1,6 +1,5 @@
package com.mogo.utils.glide;
-import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
@@ -13,7 +12,6 @@ import androidx.annotation.NonNull;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.mogo.utils.BuildConfig;
-import com.mogo.utils.R;
import java.security.MessageDigest;
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java
index 99e20b07aa..cd5756d753 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java
@@ -29,14 +29,13 @@ import java.util.Random;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-public
- /*
- * @author congtaowang
- * @since 2020/10/30
- *
- * 描述
- */
-class BaseDrawer {
+/*
+ * @author congtaowang
+ * @since 2020/10/30
+ *
+ * 描述
+ */
+public class BaseDrawer {
// 移除过期的 marker
public static final int MSG_REMOVE_DIRTY_MARKERS = 9990;
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt
index 4314acb5a9..efbc855319 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/TrafficMarkerDrawer.kt
@@ -5,13 +5,12 @@ import android.content.Context
import android.os.Handler
import android.os.Message
import com.mogo.commons.AbsMogoApplication
-import com.mogo.eagle.core.data.map.MogoLatLng
import com.mogo.map.marker.IMogoMarker
import com.mogo.map.marker.MogoMarkerOptions
import com.mogo.module.common.MogoApisHandler
import com.mogo.module.common.constants.DataTypes
-import com.mogo.module.common.drawer.bean.TrafficData
-import com.mogo.module.common.enums.TrafficTypeEnum
+import com.mogo.eagle.core.data.traffic.TrafficData
+import com.mogo.eagle.core.data.enums.TrafficTypeEnum
import com.mogo.utils.WorkThreadHandler
import com.mogo.utils.logger.Logger
import java.util.concurrent.ConcurrentHashMap
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt
index 57b80da672..7da7b86751 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/enums/EventTypeEnum.kt
@@ -202,7 +202,7 @@ enum class EventTypeEnum(
"限速预警",
poiTypeSrcVr=R.drawable.icon_warning_v2x_over_speed,
content="已超速",
- tts=""
+ tts="已超速"
),
TYPE_USECASE_ID_LTA(
ObuConstants.USE_CASE_ID.LTA.toString(),
@@ -223,7 +223,7 @@ enum class EventTypeEnum(
"车内标牌",
poiTypeSrcVr=R.drawable.icon_warning_v2x_road_construction,
content="前方施工",
- tts=""
+ tts="前方施工"
),
TYPE_USECASE_ID_TJW(
ObuConstants.USE_CASE_ID.TJW.toString(),
diff --git a/modules/mogo-module-common/src/main/res/values/attr.xml b/modules/mogo-module-common/src/main/res/values/attr.xml
index 073636bd02..e4b5b4510d 100644
--- a/modules/mogo-module-common/src/main/res/values/attr.xml
+++ b/modules/mogo-module-common/src/main/res/values/attr.xml
@@ -7,12 +7,7 @@
-
-
-
-
-
-
+
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
index 64190b4bf3..e786a39c67 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/entrance/EntranceFragment.java
@@ -1,5 +1,20 @@
package com.mogo.module.extensions.entrance;
+import static com.mogo.module.common.utils.SPConst.getSPGuideRecord;
+import static com.mogo.module.common.utils.SPConst.getSpGuide;
+import static com.mogo.module.extensions.ExtensionsModuleConst.TYPE_ENTRANCE;
+import static com.mogo.module.service.receiver.MogoReceiver.ACTION_V2X_REMOVE_TIP_WINDOW;
+import static com.mogo.module.share.constant.ShareConstants.KEY_CLICK_SHARE_BUTTON;
+import static com.mogo.module.share.constant.ShareConstants.KEY_CLICK_SHARE_TIME;
+import static com.mogo.module.share.constant.ShareConstants.KEY_SERVER_SHOW_DAY_COUNT;
+import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_INNER_GUIDE;
+import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_INNER_GUIDE_TIME;
+import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_OUTER_GUIDE;
+import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_OUTER_GUIDE_TIME;
+import static com.mogo.module.share.constant.ShareConstants.ONE_DAY_TIME;
+import static com.mogo.module.share.constant.ShareConstants.SEVEN_DAY_TIME;
+import static com.mogo.module.share.constant.ShareConstants.VOICE_ALERT_COUNT;
+
import android.content.Intent;
import android.graphics.Rect;
import android.location.Location;
@@ -14,7 +29,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
-import android.widget.CheckedTextView;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
@@ -72,8 +86,6 @@ import com.mogo.module.extensions.utils.TopViewNoLinkageAnimHelper;
import com.mogo.module.service.receiver.MogoReceiver;
import com.mogo.module.share.manager.ServiceApisManager;
import com.mogo.service.IMogoServiceApis;
-import com.mogo.service.adas.IMogoAdasOCHCallback;
-import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.cloud.socket.IMogoOnMessageListener;
import com.mogo.service.entrance.ButtonIndex;
@@ -101,21 +113,6 @@ import java.util.Locale;
import java.util.Map;
import java.util.Random;
-import static com.mogo.module.common.utils.SPConst.getSPGuideRecord;
-import static com.mogo.module.common.utils.SPConst.getSpGuide;
-import static com.mogo.module.extensions.ExtensionsModuleConst.TYPE_ENTRANCE;
-import static com.mogo.module.service.receiver.MogoReceiver.ACTION_V2X_REMOVE_TIP_WINDOW;
-import static com.mogo.module.share.constant.ShareConstants.KEY_CLICK_SHARE_BUTTON;
-import static com.mogo.module.share.constant.ShareConstants.KEY_CLICK_SHARE_TIME;
-import static com.mogo.module.share.constant.ShareConstants.KEY_SERVER_SHOW_DAY_COUNT;
-import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_INNER_GUIDE;
-import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_INNER_GUIDE_TIME;
-import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_OUTER_GUIDE;
-import static com.mogo.module.share.constant.ShareConstants.KEY_SHARE_OUTER_GUIDE_TIME;
-import static com.mogo.module.share.constant.ShareConstants.ONE_DAY_TIME;
-import static com.mogo.module.share.constant.ShareConstants.SEVEN_DAY_TIME;
-import static com.mogo.module.share.constant.ShareConstants.VOICE_ALERT_COUNT;
-
/**
* @author congtaowang
* @since 2020-01-07
@@ -129,9 +126,8 @@ public class EntranceFragment extends MvpFragment {
- ctvAutopilotStatus.setChecked(isInAutopilot);
- });
- }
-
- private void autopilotStatusClick() {
- EntranceViewHolder.getInstance().entranceAutopilotStatusClick();
- }
-
private int debugPanelClickCount = 0;
private long lastDebugPanelClickTime = 0;
@@ -443,8 +422,7 @@ public class EntranceFragment extends MvpFragment {
-// MyLocationUtil.emphasizeMyLocation();
+ // MyLocationUtil.emphasizeMyLocation();
View v = LayoutInflater.from(getContext()).inflate(R.layout.demo_top, null);
TextView tv = v.findViewById(R.id.tvIndex);
tv.setText("sub view height: " + currentHeight + ": " + v);
@@ -1053,17 +1031,17 @@ public class EntranceFragment extends MvpFragment {
-// SharedPrefsMgr.getInstance(getContext()).putString("MY_LOCATION_CONFIG", "https" +
-// "://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605705508574" +
-// "&di=339d3259ad21f5f48c8abcd1bafff324&imgtype=0&src=http%3A%2F%2Fc-ssl" +
-// ".duitang.com%2Fuploads%2Fitem%2F202004%2F23%2F20200423111550_4AJLr.thumb" +
-// ".1000_0.jpeg");
-// MyLocationUtil.setMyLocationIconUrl(getContext(),"https" +
-// "://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605705508574" +
-// "&di=339d3259ad21f5f48c8abcd1bafff324&imgtype=0&src=http%3A%2F%2Fc-ssl" +
-// ".duitang.com%2Fuploads%2Fitem%2F202004%2F23%2F20200423111550_4AJLr.thumb" +
-// ".1000_0.jpeg");
-// MyLocationUtil.emphasizeMyLocation();
+ // SharedPrefsMgr.getInstance(getContext()).putString("MY_LOCATION_CONFIG", "https" +
+ // "://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605705508574" +
+ // "&di=339d3259ad21f5f48c8abcd1bafff324&imgtype=0&src=http%3A%2F%2Fc-ssl" +
+ // ".duitang.com%2Fuploads%2Fitem%2F202004%2F23%2F20200423111550_4AJLr.thumb" +
+ // ".1000_0.jpeg");
+ // MyLocationUtil.setMyLocationIconUrl(getContext(),"https" +
+ // "://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605705508574" +
+ // "&di=339d3259ad21f5f48c8abcd1bafff324&imgtype=0&src=http%3A%2F%2Fc-ssl" +
+ // ".duitang.com%2Fuploads%2Fitem%2F202004%2F23%2F20200423111550_4AJLr.thumb" +
+ // ".1000_0.jpeg");
+ // MyLocationUtil.emphasizeMyLocation();
View v = LayoutInflater.from(getContext()).inflate(R.layout.demo_top, null);
TextView tv = v.findViewById(R.id.tvIndex);
Random random = new Random();
@@ -1071,7 +1049,7 @@ public class EntranceFragment extends MvpFragment listeners = new ArrayList<>();
- private final List btnClickListeners = new ArrayList<>();
public void addEntranceViewListener(IMogoEntranceViewListener listener) {
listeners.add(listener);
@@ -280,20 +278,6 @@ public class EntranceViewHolder {
listeners.remove(listener);
}
- public void addEntranceAutopilotStatusClickListener(IMogoEntranceAutopilotStatusClickListener listener) {
- btnClickListeners.add(listener);
- }
-
- public void removeEntranceAutopilotStatusClickListener(IMogoEntranceAutopilotStatusClickListener listener) {
- btnClickListeners.remove(listener);
- }
-
- public void entranceAutopilotStatusClick() {
- for (IMogoEntranceAutopilotStatusClickListener listener : btnClickListeners) {
- listener.click();
- }
- }
-
public void release() {
rootViewGroup = null;
featureViewGroup = null;
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_autopilot.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_autopilot.png
deleted file mode 100644
index be978145dc..0000000000
Binary files a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_ic_autopilot.png and /dev/null differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_mogo_autopilot_status_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_mogo_autopilot_status_bg.xml
deleted file mode 100644
index b5596fad13..0000000000
--- a/modules/mogo-module-extensions/src/main/res/drawable/module_mogo_autopilot_status_bg.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
diff --git a/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml b/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml
index 9e213c7753..c73e0db0f8 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/camera_view_video_layout_normal.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
index 2ac66fe2ce..4a54127863 100644
--- a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
+++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_entrance.xml
@@ -6,27 +6,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
-
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml
index eb835762b1..2b86120186 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi-2560x1440/dimens.xml
@@ -9,10 +9,5 @@
50px
60px
- 460px
- 140px
- 20px
- 530px
- 92px
- 44px
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values/dimens.xml b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
index 55739ccfca..064dab01f5 100644
--- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
@@ -251,11 +251,5 @@
35px
38px
- 300px
- 100px
- 20px
- 345px
- 20px
- 30px
\ No newline at end of file
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
index 721a2ba77d..7c694e9073 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/MainActivity.java
@@ -468,14 +468,7 @@ public class MainActivity extends MvpActivity implement
Logger.d(TAG, "requestCode: " + requestCode + " resultCode: " + resultCode);
if (requestCode == REQUEST_CODE_DIALOG) {
//申请悬浮窗权限
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- // 检查是否有悬浮窗权限
- if (Settings.canDrawOverlays(this)) {
- startVoicePad();
- }
- } else {
- startVoicePad();
- }
+
}
}
}
diff --git a/modules/mogo-module-push/src/main/java/com/mogo/module/push/PushModuleProvider.java b/modules/mogo-module-push/src/main/java/com/mogo/module/push/PushModuleProvider.java
index 83ef3d1b42..d2f30c05d9 100644
--- a/modules/mogo-module-push/src/main/java/com/mogo/module/push/PushModuleProvider.java
+++ b/modules/mogo-module-push/src/main/java/com/mogo/module/push/PushModuleProvider.java
@@ -79,11 +79,6 @@ public class PushModuleProvider implements IMogoModuleProvider {
@Override
public void init(final Context context) {
- HandlerUtils.INSTANCE.getMBgHandler().post(new Runnable() {
- @Override
- public void run() {
- PushRepository.Companion.init(context);
- }
- });
+ HandlerUtils.INSTANCE.getMBgHandler().post(() -> PushRepository.Companion.init(context));
}
}
diff --git a/modules/mogo-module-push/src/main/java/com/mogo/module/push/repository/PushRepository.kt b/modules/mogo-module-push/src/main/java/com/mogo/module/push/repository/PushRepository.kt
index 827c89c747..366ca47a00 100644
--- a/modules/mogo-module-push/src/main/java/com/mogo/module/push/repository/PushRepository.kt
+++ b/modules/mogo-module-push/src/main/java/com/mogo/module/push/repository/PushRepository.kt
@@ -123,7 +123,9 @@ class PushRepository(mContext: Context) {
} else {
return
}
- iterateNext()
+ mHandler.post {
+ iterateNext()
+ }
}
}
diff --git a/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatView.kt b/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatView.kt
index af956153da..41b486d196 100644
--- a/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatView.kt
+++ b/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatView.kt
@@ -1,22 +1,15 @@
package com.mogo.module.push.view
-import android.animation.Animator
-import android.animation.ObjectAnimator
-import android.annotation.SuppressLint
import android.content.Context
-import android.graphics.PixelFormat
-import android.os.Build
import android.os.Handler
import android.os.Looper
-import android.view.*
+import android.view.LayoutInflater
+import android.view.View
import android.widget.FrameLayout
-import android.widget.ImageView
import android.widget.Scroller
import android.widget.TextView
import androidx.annotation.LayoutRes
-import androidx.core.animation.doOnEnd
-import androidx.core.view.isVisible
-import com.elegant.analytics.utils.Logger
+import com.mogo.commons.context.ContextHolderUtil
import com.mogo.commons.voice.AIAssist
import com.mogo.module.push.Config
import com.mogo.module.push.R
@@ -27,14 +20,15 @@ import com.mogo.module.push.view.roundimage.RoundedImageView
import com.mogo.module.push.viewmodel.PushViewModel
import com.mogo.service.windowview.IMogoTopViewManager
import com.mogo.service.windowview.IMogoTopViewStatusListener
-import com.mogo.utils.ResourcesHelper
import com.mogo.utils.ThreadPoolService
import com.mogo.utils.UiThreadHandler
import com.mogo.utils.glide.GlideApp
+import com.mogo.utils.logger.Logger
+import kotlin.math.log
class FloatView constructor(
- private val pushViewModel: PushViewModel,
- private val context: Context
+ private val pushViewModel: PushViewModel,
+ private val context: Context
) {
companion object {
@@ -46,44 +40,37 @@ class FloatView constructor(
interface PushViewController {
fun show(bean: PushBean?)
fun hide()
- fun timer(time: Int)
fun inflateView(@LayoutRes layoutId: Int)
}
abstract inner class PushView(context: Context) : FrameLayout(context),
- PushViewController {
- private lateinit var appIcon: ImageView
+ PushViewController {
private lateinit var titleIconContainer: View
private lateinit var pushTitle: TextView
private lateinit var pushImage: RoundedImageView
private lateinit var pushContent: TextView
- private lateinit var pushTimer: TextView
- private lateinit var pushButtonLeft: TextView
- private lateinit var pushButtonRight: TextView
- lateinit var pushButton: View
+ private lateinit var pushCheck: TextView
+
+ private var pushData: PushBean? = null
override fun inflateView(layoutId: Int) {
LayoutInflater.from(context).inflate(layoutId, this, true)
- appIcon = findViewById(R.id.module_push_app_icon)
pushTitle = findViewById(R.id.module_push_title)
+ pushCheck = findViewById(R.id.module_push_check)
pushImage = findViewById(R.id.module_push_image)
pushContent = findViewById(R.id.module_push_content)
- pushButtonLeft = findViewById(R.id.module_push_button_left)
- pushButtonRight = findViewById(R.id.module_push_button_right)
- pushTimer = findViewById(R.id.module_push_timer)
titleIconContainer = findViewById(R.id.module_push_app_icon_title)
- pushButton = findViewById(R.id.module_push_buttons)
setOnClickListener {
pushViewModel.dealCmd(PushViewModel.VOICE_ACTION_PUSH_MAIN, "1")
turnNextMessage()
}
- pushButtonLeft.setOnClickListener {
- pushViewModel.dealCmd(PushViewModel.VOICE_ACTION_PUSH_LEFT, "1")
- turnNextMessage()
- }
- pushButtonRight.setOnClickListener {
- pushViewModel.dealCmd(PushViewModel.VOICE_ACTION_PUSH_RIGHT, "1")
- turnNextMessage()
+ pushCheck.setOnClickListener {
+ pushData?.let {
+ if (pushCheckDialog == null) {
+ pushCheckDialog = PushCheckDialog(ContextHolderUtil.getContext())
+ }
+ pushCheckDialog!!.showCheckDialog(it.title, it.content)
+ }
}
}
@@ -94,35 +81,11 @@ class FloatView constructor(
}
}
- fun hasButtons(bean: PushBean?): Boolean {
- bean?.buttons?.forEach {
- if (it.text.isNotEmpty()) {
- return true
- }
- }
- return false
- }
-
- fun hasTextContent(bean: PushBean?): Boolean =
- bean?.content?.isEmpty()?.not() ?: false
-
- fun hasImgContent(bean: PushBean?): Boolean = bean?.QRCode?.isEmpty()?.not() ?: false
-
open fun setBean(bean: PushBean) {
- // app icon
- if (bean.appIcon.isNotEmpty()) {
- appIcon.visible()
- GlideApp.with(this).load(bean.appIcon).into(appIcon)
- } else {
- appIcon.gone()
- }
-
+ pushData = bean
// title
pushTitle.text = bean.title
- // decrease timer
- pushTimer.text = if (bean.showTimeout > 99) "" else "${bean.showTimeout}s"
-
// image
if (bean.imageUrl.isEmpty() && bean.QRCode.isEmpty()) {
pushImage.gone()
@@ -140,9 +103,9 @@ class FloatView constructor(
pushImage.layoutParams = params
ThreadPoolService.execute {
val bmp = stringConverterBitmap(
- bean.QRCode,
- getQrImgWidth(),
- getQrImgHeight()
+ bean.QRCode,
+ getQrImgWidth(),
+ getQrImgHeight()
)
UiThreadHandler.post {
pushImage.setImageBitmap(bmp)
@@ -151,22 +114,6 @@ class FloatView constructor(
}
}
- // button
- pushButton.gone()
- pushButtonLeft.gone()
- pushButtonRight.gone()
- if (!bean.buttons.isNullOrEmpty()) {
- if (bean.buttons[0].text.isNotEmpty()) {
- pushButton.visible()
- pushButtonLeft.text = bean.buttons[0].text
- pushButtonLeft.visible()
- }
- if (bean.buttons.size > 1 && bean.buttons[1].text.isNotEmpty()) {
- pushButtonRight.text = bean.buttons[1].text
- pushButtonRight.visible()
- }
- }
-
// content
if (bean.content.isEmpty()) {
pushContent.gone()
@@ -175,10 +122,10 @@ class FloatView constructor(
pushContent.visible()
}
- // tts
- if (bean.tts.isNotEmpty()) {
- AIAssist.getInstance(context).speakTTSVoice(bean.tts)
- }
+ // 产品侧需要重新梳理,tts暂时不播报
+// if (bean.tts.isNotEmpty()) {
+// AIAssist.getInstance(context).speakTTSVoice(bean.tts)
+// }
}
abstract fun getImgWidth(): Int
@@ -186,12 +133,6 @@ class FloatView constructor(
abstract fun getQrImgWidth(): Int
abstract fun getQrImgHeight(): Int
- @SuppressLint("SetTextI18n")
- override fun timer(time: Int) {
- Logger.d(TAG, "time = $time")
- pushTimer.text = "${time}s"
- }
-
override fun show(bean: PushBean?) {
isAddWindow = true
uiHandler.removeCallbacks(delayClosePush)
@@ -252,184 +193,175 @@ class FloatView constructor(
}
override fun getImgWidth(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_width)
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_width)
override fun getImgHeight(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
override fun getQrImgWidth(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
override fun getQrImgHeight(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
}
- inner class PushViewInWindowView(context: Context) : PushView(context), View.OnTouchListener {
-
- private val mContentContainer: View
- private val mWindowManager =
- context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
-
- private val params = WindowManager.LayoutParams()
-
- init {
-
- @Suppress("DEPRECATION")
- params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
- params.flags = (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
- or WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
- or WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE
- or WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
- or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
- params.width = WindowManager.LayoutParams.WRAP_CONTENT
- params.height = WindowManager.LayoutParams.WRAP_CONTENT
- params.gravity = Gravity.START or Gravity.BOTTOM
- params.format = PixelFormat.TRANSLUCENT
- params.x = context.resources.getDimensionPixelSize(R.dimen.module_push_window_x)
- params.y = context.resources.getDimensionPixelSize(R.dimen.module_push_window_x)
- if (Build.VERSION.SDK_INT > 25) {
- params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
- }
-
- inflateView(R.layout.module_push_item_vertical)
- mContentContainer = findViewById(R.id.module_push_content_container)
- setOnTouchListener(this)
- }
-
- override fun show(bean: PushBean?) {
- super.show(bean)
- mLastVisibleType = TYPE_WINDOW_MANAGER
- setBean(bean!!)
-
- try {
- mWindowManager.addView(this, params)
- } catch (e: Exception) {
- mWindowManager.updateViewLayout(this, params)
- }
- translationXAnimation(
- -ResourcesHelper.getDimension(context, R.dimen.module_push_ui_width_vertical),
- 0f
- ) {
- if (pushViewModel.pushBean != null) {
- startClosePush()
- }
- }
- }
-
- private fun translationXAnimation(
- from: Float,
- to: Float,
- doOnEnd: (animator: Animator) -> Unit
- ) {
- val transitionXAnimator: ObjectAnimator =
- ObjectAnimator.ofFloat(
- this,
- View.TRANSLATION_X,
- from,
- to
- )
- transitionXAnimator.duration = 200
- transitionXAnimator.doOnEnd(doOnEnd)
- transitionXAnimator.start()
- }
-
- override fun setBean(bean: PushBean) {
- super.setBean(bean)
- var paddingBottom = 0
- if (pushButton.isVisible) {
- paddingBottom =
- context.resources.getDimensionPixelSize(R.dimen.module_push_content_paddingBottom_vertical)
- }
- mContentContainer.setPadding(0, 0, 0, paddingBottom)
- }
-
- override fun hide() {
- super.hide()
- translationXAnimation(
- this.x,
- -ResourcesHelper.getDimension(context, R.dimen.module_push_ui_width_vertical)
- ) {
- Logger.d(TAG, "here")
- this.x = 0f
- mWindowManager.removeViewImmediate(this)
- }
- }
-
- override fun onTouch(v: View?, ev: MotionEvent?): Boolean {
-
- if (mLastVisibleType != TYPE_WINDOW_MANAGER) {
- return false
- }
- when (ev?.action) {
- MotionEvent.ACTION_DOWN -> {
- needInterceptClick = false
- startX = ev.x
- }
- MotionEvent.ACTION_MOVE -> {
- moveX = startX - ev.x
- scrollBy(moveX.toInt(), 0)
- startX = ev.x
- if (scrollX < 0) {
- scrollTo(0, 0)
- }
- if (!needInterceptClick && scrollX > 20) {
- needInterceptClick = true
- }
- invalidate()
- }
- MotionEvent.ACTION_UP -> {
- if (scrollX > 0) {
- mScroller.startScroll(scrollX, 0, width - scrollX, 0)
- invalidate()
- return true
- }
- if (needInterceptClick) {
- return true
- }
- }
- else -> {
- startX = 0f
- moveX = 0f
- }
- }
- return false
- }
-
- override fun computeScroll() {
- if (mScroller.computeScrollOffset()) {
- scrollTo(mScroller.currX, mScroller.currY)
- invalidate()
- } else {
- if (mScroller.currX == 0) {
- return
- }
- mScroller.finalX = 0
- removeCallbacks(delayClosePush)
- if (isAddWindow) {
- if (currentBean != null) {
- AnalyticsUtils.track(Config.NEWS_CARD_SWIPE, "trigger_type", "1")
- }
- mWindowManager.removeView(this)
- isAddWindow = false
- }
- pushViewModel.pushBean?.showTimeout = 0
- updateTimer()
- }
- }
-
- override fun getImgWidth(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_width_vertical)
-
- override fun getImgHeight(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height_vertical)
-
- override fun getQrImgWidth(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_image_qr_size_vertical)
-
- override fun getQrImgHeight(): Int =
- context.resources.getDimensionPixelSize(R.dimen.module_push_image_qr_size_vertical)
- }
+// inner class PushViewInWindowView(context: Context) : PushView(context), View.OnTouchListener {
+//
+// private val mContentContainer: View
+// private val mWindowManager =
+// context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+//
+// private val params = WindowManager.LayoutParams()
+//
+// init {
+//
+// @Suppress("DEPRECATION")
+// params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
+// params.flags = (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+// or WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
+// or WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE
+// or WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+// or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
+// params.width = WindowManager.LayoutParams.WRAP_CONTENT
+// params.height = WindowManager.LayoutParams.WRAP_CONTENT
+// params.gravity = Gravity.START or Gravity.BOTTOM
+// params.format = PixelFormat.TRANSLUCENT
+// params.x = context.resources.getDimensionPixelSize(R.dimen.module_push_window_x)
+// params.y = context.resources.getDimensionPixelSize(R.dimen.module_push_window_x)
+// if (Build.VERSION.SDK_INT > 25) {
+// params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
+// }
+//
+// inflateView(R.layout.module_push_item_vertical)
+// mContentContainer = findViewById(R.id.module_push_content_container)
+// setOnTouchListener(this)
+// }
+//
+// override fun show(bean: PushBean?) {
+// super.show(bean)
+// mLastVisibleType = TYPE_WINDOW_MANAGER
+// setBean(bean!!)
+//
+// try {
+// mWindowManager.addView(this, params)
+// } catch (e: Exception) {
+// mWindowManager.updateViewLayout(this, params)
+// }
+// translationXAnimation(
+// -ResourcesHelper.getDimension(context, R.dimen.module_push_ui_width_vertical),
+// 0f
+// ) {
+// if (pushViewModel.pushBean != null) {
+// startClosePush()
+// }
+// }
+// }
+//
+// private fun translationXAnimation(
+// from: Float,
+// to: Float,
+// doOnEnd: (animator: Animator) -> Unit
+// ) {
+// val transitionXAnimator: ObjectAnimator =
+// ObjectAnimator.ofFloat(
+// this,
+// View.TRANSLATION_X,
+// from,
+// to
+// )
+// transitionXAnimator.duration = 200
+// transitionXAnimator.doOnEnd(doOnEnd)
+// transitionXAnimator.start()
+// }
+//
+// override fun hide() {
+// super.hide()
+// translationXAnimation(
+// this.x,
+// -ResourcesHelper.getDimension(context, R.dimen.module_push_ui_width_vertical)
+// ) {
+// Logger.d(TAG, "here")
+// this.x = 0f
+// mWindowManager.removeViewImmediate(this)
+// }
+// }
+//
+// override fun onTouch(v: View?, ev: MotionEvent?): Boolean {
+//
+// if (mLastVisibleType != TYPE_WINDOW_MANAGER) {
+// return false
+// }
+// when (ev?.action) {
+// MotionEvent.ACTION_DOWN -> {
+// needInterceptClick = false
+// startX = ev.x
+// }
+// MotionEvent.ACTION_MOVE -> {
+// moveX = startX - ev.x
+// scrollBy(moveX.toInt(), 0)
+// startX = ev.x
+// if (scrollX < 0) {
+// scrollTo(0, 0)
+// }
+// if (!needInterceptClick && scrollX > 20) {
+// needInterceptClick = true
+// }
+// invalidate()
+// }
+// MotionEvent.ACTION_UP -> {
+// if (scrollX > 0) {
+// mScroller.startScroll(scrollX, 0, width - scrollX, 0)
+// invalidate()
+// return true
+// }
+// if (needInterceptClick) {
+// return true
+// }
+// }
+// else -> {
+// startX = 0f
+// moveX = 0f
+// }
+// }
+// return false
+// }
+//
+// override fun computeScroll() {
+// if (mScroller.computeScrollOffset()) {
+// scrollTo(mScroller.currX, mScroller.currY)
+// invalidate()
+// } else {
+// if (mScroller.currX == 0) {
+// return
+// }
+// mScroller.finalX = 0
+// removeCallbacks(delayClosePush)
+// if (isAddWindow) {
+// if (currentBean != null) {
+// AnalyticsUtils.track(Config.NEWS_CARD_SWIPE, "trigger_type", "1")
+// }
+// mWindowManager.removeView(this)
+// isAddWindow = false
+// }
+// pushViewModel.pushBean?.showTimeout = 0
+// updateTimer()
+// }
+// }
+//
+// override fun getImgWidth(): Int =
+// context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_width_vertical)
+//
+// override fun getImgHeight(): Int =
+// context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height_vertical)
+//
+// override fun getQrImgWidth(): Int =
+// context.resources.getDimensionPixelSize(R.dimen.module_push_image_qr_size_vertical)
+//
+// override fun getQrImgHeight(): Int =
+// context.resources.getDimensionPixelSize(R.dimen.module_push_image_qr_size_vertical)
+// }
+ private var pushCheckDialog: PushCheckDialog? = null
private val delayClosePush: Runnable
private var isAddWindow = false
private val uiHandler = Handler(Looper.getMainLooper())
@@ -473,10 +405,8 @@ class FloatView constructor(
val time = pushViewModel.pushBean?.showTimeout ?: 0
if (time > 0) {
pushViewModel.pushBean!!.showTimeout--
- pushViewController?.timer(time)
uiHandler.postDelayed(delayClosePush, 1000)
} else {
- pushViewController?.timer(0)
pushViewModel.pushMessageFinish(true)
}
}
@@ -520,17 +450,17 @@ class FloatView constructor(
}
private fun showByWindowManager(bean: PushBean?) {
- if (pushViewController !is PushViewInWindowView) {
- pushViewController = PushViewInWindowView(context)
- }
- pushViewController?.show(bean)
+// if (pushViewController !is PushViewInWindowView) {
+// pushViewController = PushViewInWindowView(context)
+// }
+// pushViewController?.show(bean)
}
private fun startClosePush() {
uiHandler.removeCallbacks(delayClosePush)
uiHandler.postDelayed(
- delayClosePush,
- 1000L
+ delayClosePush,
+ 1000L
)
}
diff --git a/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatViewOrigin.kt b/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatViewOrigin.kt
new file mode 100644
index 0000000000..d2b24659c9
--- /dev/null
+++ b/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/FloatViewOrigin.kt
@@ -0,0 +1,568 @@
+package com.mogo.module.push.view
+
+import android.animation.Animator
+import android.animation.ObjectAnimator
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.PixelFormat
+import android.os.Build
+import android.os.Handler
+import android.os.Looper
+import android.view.*
+import android.widget.FrameLayout
+import android.widget.ImageView
+import android.widget.Scroller
+import android.widget.TextView
+import androidx.annotation.LayoutRes
+import androidx.core.animation.doOnEnd
+import androidx.core.view.isVisible
+import com.elegant.analytics.utils.Logger
+import com.mogo.commons.voice.AIAssist
+import com.mogo.module.push.Config
+import com.mogo.module.push.R
+import com.mogo.module.push.model.PushBean
+import com.mogo.module.push.utils.AnalyticsUtils
+import com.mogo.module.push.utils.stringConverterBitmap
+import com.mogo.module.push.view.roundimage.RoundedImageView
+import com.mogo.module.push.viewmodel.PushViewModel
+import com.mogo.service.windowview.IMogoTopViewManager
+import com.mogo.service.windowview.IMogoTopViewStatusListener
+import com.mogo.utils.ResourcesHelper
+import com.mogo.utils.ThreadPoolService
+import com.mogo.utils.UiThreadHandler
+import com.mogo.utils.glide.GlideApp
+
+class FloatViewOrigin constructor(
+ private val pushViewModel: PushViewModel,
+ private val context: Context
+) {
+
+ companion object {
+ const val TYPE_TOP_VIEW = 1
+ const val TYPE_WINDOW_MANAGER = 2
+ const val TAG: String = "FloatViewOrigin.kt"
+ }
+
+ interface PushViewController {
+ fun show(bean: PushBean?)
+ fun hide()
+ fun timer(time: Int)
+ fun inflateView(@LayoutRes layoutId: Int)
+ }
+
+ abstract inner class PushViewOrigin(context: Context) : FrameLayout(context),
+ PushViewController {
+ private lateinit var appIcon: ImageView
+ private lateinit var titleIconContainer: View
+ private lateinit var pushTitle: TextView
+ private lateinit var pushImage: RoundedImageView
+ private lateinit var pushContent: TextView
+ private lateinit var pushTimer: TextView
+ private lateinit var pushButtonLeft: TextView
+ private lateinit var pushButtonRight: TextView
+ lateinit var pushButton: View
+
+ override fun inflateView(layoutId: Int) {
+ LayoutInflater.from(context).inflate(layoutId, this, true)
+ appIcon = findViewById(R.id.module_push_app_icon)
+ pushTitle = findViewById(R.id.module_push_title)
+ pushImage = findViewById(R.id.module_push_image)
+ pushContent = findViewById(R.id.module_push_content)
+ pushButtonLeft = findViewById(R.id.module_push_button_left)
+ pushButtonRight = findViewById(R.id.module_push_button_right)
+ pushTimer = findViewById(R.id.module_push_timer)
+ titleIconContainer = findViewById(R.id.module_push_app_icon_title)
+ pushButton = findViewById(R.id.module_push_buttons)
+ setOnClickListener {
+ pushViewModel.dealCmd(PushViewModel.VOICE_ACTION_PUSH_MAIN, "1")
+ turnNextMessage()
+ }
+ pushButtonLeft.setOnClickListener {
+ pushViewModel.dealCmd(PushViewModel.VOICE_ACTION_PUSH_LEFT, "1")
+ turnNextMessage()
+ }
+ pushButtonRight.setOnClickListener {
+ pushViewModel.dealCmd(PushViewModel.VOICE_ACTION_PUSH_RIGHT, "1")
+ turnNextMessage()
+ }
+ }
+
+ private fun turnNextMessage() {
+ pushViewModel.pushBean?.apply {
+ showTimeout = 0
+ updateTimer()
+ }
+ }
+
+ fun hasButtons(bean: PushBean?): Boolean {
+ bean?.buttons?.forEach {
+ if (it.text.isNotEmpty()) {
+ return true
+ }
+ }
+ return false
+ }
+
+ fun hasTextContent(bean: PushBean?): Boolean =
+ bean?.content?.isEmpty()?.not() ?: false
+
+ fun hasImgContent(bean: PushBean?): Boolean = bean?.QRCode?.isEmpty()?.not() ?: false
+
+ open fun setBean(bean: PushBean) {
+ // app icon
+ if (bean.appIcon.isNotEmpty()) {
+ appIcon.visible()
+ GlideApp.with(this).load(bean.appIcon).into(appIcon)
+ } else {
+ appIcon.gone()
+ }
+
+ // title
+ pushTitle.text = bean.title
+
+ // decrease timer
+ pushTimer.text = if (bean.showTimeout > 99) "" else "${bean.showTimeout}s"
+
+ // image
+ if (bean.imageUrl.isEmpty() && bean.QRCode.isEmpty()) {
+ pushImage.gone()
+ } else if (bean.imageUrl.isNotEmpty()) {
+ val params = pushImage.layoutParams
+ params.width = getImgWidth()
+ params.height = getImgHeight()
+ pushImage.layoutParams = params
+ pushImage.visible()
+ GlideApp.with(this).load(bean.imageUrl).into(pushImage)
+ } else if (bean.QRCode.isNotEmpty()) {
+ val params = pushImage.layoutParams
+ params.width = getQrImgWidth()
+ params.height = getQrImgHeight()
+ pushImage.layoutParams = params
+ ThreadPoolService.execute {
+ val bmp = stringConverterBitmap(
+ bean.QRCode,
+ getQrImgWidth(),
+ getQrImgHeight()
+ )
+ UiThreadHandler.post {
+ pushImage.setImageBitmap(bmp)
+ pushImage.visible()
+ }
+ }
+ }
+
+ // button
+ pushButton.gone()
+ pushButtonLeft.gone()
+ pushButtonRight.gone()
+ if (!bean.buttons.isNullOrEmpty()) {
+ if (bean.buttons[0].text.isNotEmpty()) {
+ pushButton.visible()
+ pushButtonLeft.text = bean.buttons[0].text
+ pushButtonLeft.visible()
+ }
+ if (bean.buttons.size > 1 && bean.buttons[1].text.isNotEmpty()) {
+ pushButtonRight.text = bean.buttons[1].text
+ pushButtonRight.visible()
+ }
+ }
+
+ // content
+ if (bean.content.isEmpty()) {
+ pushContent.gone()
+ } else {
+ pushContent.text = bean.content
+ pushContent.visible()
+ }
+
+ // tts
+ if (bean.tts.isNotEmpty()) {
+ AIAssist.getInstance(context).speakTTSVoice(bean.tts)
+ }
+ }
+
+ abstract fun getImgWidth(): Int
+ abstract fun getImgHeight(): Int
+ abstract fun getQrImgWidth(): Int
+ abstract fun getQrImgHeight(): Int
+
+ @SuppressLint("SetTextI18n")
+ override fun timer(time: Int) {
+ Logger.d(TAG, "time = $time")
+ pushTimer.text = "${time}s"
+ }
+
+ override fun show(bean: PushBean?) {
+ isAddWindow = true
+ uiHandler.removeCallbacks(delayClosePush)
+ }
+
+ override fun hide() {
+ isAddWindow = false
+ }
+ }
+
+ open inner class PushViewInTopView(context: Context) : PushViewOrigin(context) {
+
+ private val mTopViewManager: IMogoTopViewManager = getApis(context).topViewManager
+
+ init {
+ inflateView(R.layout.module_push_item_origin)
+ }
+
+ private var topViewStatusListener = object : IMogoTopViewStatusListener {
+ override fun onViewRemoved(view: View?) {
+ isAddWindow = false
+ if (pushViewModel.pushBean?.showTimeout ?: 0 > 0) {
+ if (getApis(context).statusManagerApi.isV2XShow) {
+ // 被中断的消息,需要再次被显示一次
+ uiHandler.removeCallbacks(delayClosePush)
+ pushViewModel.push()
+ pushViewModel.pushMessageFinish()
+ return
+ }
+ }
+ pushViewModel.pushBean?.showTimeout = 0
+ updateTimer()
+ }
+
+ override fun onViewAdded(view: View?) {
+ if (pushViewModel.pushBean != null) {
+ startClosePush()
+ }
+ }
+
+ override fun beforeViewRemoveAnim(view: View?) {
+ }
+
+ override fun beforeViewAddAnim(view: View?) {
+ }
+ }
+
+ override fun show(bean: PushBean?) {
+ super.show(bean)
+ mLastVisibleType = TYPE_TOP_VIEW
+ mTopViewManager.addView(this, topViewStatusListener)
+ setBean(bean!!)
+ }
+
+ override fun hide() {
+ super.hide()
+ mTopViewManager.removeView(this)
+ }
+
+ override fun getImgWidth(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_width)
+
+ override fun getImgHeight(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
+
+ override fun getQrImgWidth(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
+
+ override fun getQrImgHeight(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height)
+ }
+
+ inner class PushViewInWindowView(context: Context) : PushViewOrigin(context), View.OnTouchListener {
+
+ private val mContentContainer: View
+ private val mWindowManager =
+ context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
+
+ private val params = WindowManager.LayoutParams()
+
+ init {
+
+ @Suppress("DEPRECATION")
+ params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
+ params.flags = (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+ or WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
+ or WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE
+ or WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+ or WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
+ params.width = WindowManager.LayoutParams.WRAP_CONTENT
+ params.height = WindowManager.LayoutParams.WRAP_CONTENT
+ params.gravity = Gravity.START or Gravity.BOTTOM
+ params.format = PixelFormat.TRANSLUCENT
+ params.x = context.resources.getDimensionPixelSize(R.dimen.module_push_window_x)
+ params.y = context.resources.getDimensionPixelSize(R.dimen.module_push_window_x)
+ if (Build.VERSION.SDK_INT > 25) {
+ params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
+ }
+
+ inflateView(R.layout.module_push_item_vertical)
+ mContentContainer = findViewById(R.id.module_push_content_container)
+ setOnTouchListener(this)
+ }
+
+ override fun show(bean: PushBean?) {
+ super.show(bean)
+ mLastVisibleType = TYPE_WINDOW_MANAGER
+ setBean(bean!!)
+
+ try {
+ mWindowManager.addView(this, params)
+ } catch (e: Exception) {
+ mWindowManager.updateViewLayout(this, params)
+ }
+ translationXAnimation(
+ -ResourcesHelper.getDimension(context, R.dimen.module_push_ui_width_vertical),
+ 0f
+ ) {
+ if (pushViewModel.pushBean != null) {
+ startClosePush()
+ }
+ }
+ }
+
+ private fun translationXAnimation(
+ from: Float,
+ to: Float,
+ doOnEnd: (animator: Animator) -> Unit
+ ) {
+ val transitionXAnimator: ObjectAnimator =
+ ObjectAnimator.ofFloat(
+ this,
+ View.TRANSLATION_X,
+ from,
+ to
+ )
+ transitionXAnimator.duration = 200
+ transitionXAnimator.doOnEnd(doOnEnd)
+ transitionXAnimator.start()
+ }
+
+ override fun setBean(bean: PushBean) {
+ super.setBean(bean)
+ var paddingBottom = 0
+ if (pushButton.isVisible) {
+ paddingBottom =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_content_paddingBottom_vertical)
+ }
+ mContentContainer.setPadding(0, 0, 0, paddingBottom)
+ }
+
+ override fun hide() {
+ super.hide()
+ translationXAnimation(
+ this.x,
+ -ResourcesHelper.getDimension(context, R.dimen.module_push_ui_width_vertical)
+ ) {
+ Logger.d(TAG, "here")
+ this.x = 0f
+ mWindowManager.removeViewImmediate(this)
+ }
+ }
+
+ override fun onTouch(v: View?, ev: MotionEvent?): Boolean {
+
+ if (mLastVisibleType != TYPE_WINDOW_MANAGER) {
+ return false
+ }
+ when (ev?.action) {
+ MotionEvent.ACTION_DOWN -> {
+ needInterceptClick = false
+ startX = ev.x
+ }
+ MotionEvent.ACTION_MOVE -> {
+ moveX = startX - ev.x
+ scrollBy(moveX.toInt(), 0)
+ startX = ev.x
+ if (scrollX < 0) {
+ scrollTo(0, 0)
+ }
+ if (!needInterceptClick && scrollX > 20) {
+ needInterceptClick = true
+ }
+ invalidate()
+ }
+ MotionEvent.ACTION_UP -> {
+ if (scrollX > 0) {
+ mScroller.startScroll(scrollX, 0, width - scrollX, 0)
+ invalidate()
+ return true
+ }
+ if (needInterceptClick) {
+ return true
+ }
+ }
+ else -> {
+ startX = 0f
+ moveX = 0f
+ }
+ }
+ return false
+ }
+
+ override fun computeScroll() {
+ if (mScroller.computeScrollOffset()) {
+ scrollTo(mScroller.currX, mScroller.currY)
+ invalidate()
+ } else {
+ if (mScroller.currX == 0) {
+ return
+ }
+ mScroller.finalX = 0
+ removeCallbacks(delayClosePush)
+ if (isAddWindow) {
+ if (currentBean != null) {
+ AnalyticsUtils.track(Config.NEWS_CARD_SWIPE, "trigger_type", "1")
+ }
+ mWindowManager.removeView(this)
+ isAddWindow = false
+ }
+ pushViewModel.pushBean?.showTimeout = 0
+ updateTimer()
+ }
+ }
+
+ override fun getImgWidth(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_width_vertical)
+
+ override fun getImgHeight(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_ui_image_height_vertical)
+
+ override fun getQrImgWidth(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_image_qr_size_vertical)
+
+ override fun getQrImgHeight(): Int =
+ context.resources.getDimensionPixelSize(R.dimen.module_push_image_qr_size_vertical)
+ }
+
+ private val delayClosePush: Runnable
+ private var isAddWindow = false
+ private val uiHandler = Handler(Looper.getMainLooper())
+
+ private var startX = 0f
+ private var moveX = 0f
+ private val mScroller: Scroller = Scroller(context)
+ private var needInterceptClick = false
+ private var pause = false
+
+ private var currentBean: PushBean? = null
+
+
+ private var mLastVisibleType = -1
+ private var pushViewController: PushViewController? = null
+
+ init {
+ delayClosePush = Runnable {
+ updateTimer()
+ }
+ }
+
+ fun pushBeanChanged(bean: PushBean?) {
+ uiHandler.post {
+ uiHandler.removeCallbacks(delayClosePush)
+ if (bean == null) {
+ if (currentBean != null) {
+ AnalyticsUtils.track(Config.NEWS_CARD_DISAPPEAR, "title", currentBean!!.title)
+ }
+ hide()
+ } else {
+ show(bean)
+ AnalyticsUtils.track(Config.NEWS_CARD_SHOW, "title", bean.title)
+ }
+ currentBean = bean
+ }
+ }
+
+ private fun updateTimer() {
+ uiHandler.removeCallbacks(delayClosePush)
+ val time = pushViewModel.pushBean?.showTimeout ?: 0
+ if (time > 0) {
+ pushViewModel.pushBean!!.showTimeout--
+ pushViewController?.timer(time)
+ uiHandler.postDelayed(delayClosePush, 1000)
+ } else {
+ pushViewController?.timer(0)
+ pushViewModel.pushMessageFinish(true)
+ }
+ }
+
+ private fun show(bean: PushBean) {
+ if (isAddWindow) {
+ if (getApis(context).statusManagerApi.isMainPageOnResume) {
+ if (mLastVisibleType != TYPE_TOP_VIEW) {
+ hide()
+ (pushViewController as View).postDelayed({
+ show(bean)
+ }, 750L)
+ } else {
+ showByTopView(bean)
+ }
+ } else {
+ if (mLastVisibleType != TYPE_WINDOW_MANAGER) {
+ hide()
+ (pushViewController as View).postDelayed({
+ show(bean)
+ }, 750L)
+ } else {
+ showByWindowManager(bean)
+ }
+ }
+ startClosePush()
+ } else {
+ if (getApis(context).statusManagerApi.isMainPageOnResume) {
+ showByTopView(bean)
+ } else {
+ showByWindowManager(bean)
+ }
+ }
+ }
+
+ private fun showByTopView(bean: PushBean) {
+ if (pushViewController !is PushViewInTopView) {
+ pushViewController = PushViewInTopView(context)
+ }
+ pushViewController?.show(bean)
+ }
+
+ private fun showByWindowManager(bean: PushBean?) {
+ if (pushViewController !is PushViewInWindowView) {
+ pushViewController = PushViewInWindowView(context)
+ }
+ pushViewController?.show(bean)
+ }
+
+ private fun startClosePush() {
+ uiHandler.removeCallbacks(delayClosePush)
+ uiHandler.postDelayed(
+ delayClosePush,
+ 1000L
+ )
+ }
+
+
+ fun hide() {
+ if (!isAddWindow) {
+ return
+ }
+ try {
+ pushViewController?.hide()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+
+
+ fun pauseTimer(on: Boolean) {
+ if (on) {
+ uiHandler.removeCallbacks(delayClosePush)
+ } else {
+ updateTimer()
+ uiHandler.post {
+ if (on) {
+ pause = true
+ uiHandler.removeCallbacks(delayClosePush)
+ } else if (pause) {
+ pause = false
+ updateTimer()
+ }
+ }
+ }
+ }
+
+ fun isAddWindow(): Boolean = isAddWindow
+}
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/PushCheckDialog.kt b/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/PushCheckDialog.kt
new file mode 100644
index 0000000000..8d4f47a7c2
--- /dev/null
+++ b/modules/mogo-module-push/src/main/java/com/mogo/module/push/view/PushCheckDialog.kt
@@ -0,0 +1,37 @@
+package com.mogo.module.push.view
+
+import android.content.Context
+import android.widget.ImageView
+import android.widget.TextView
+import com.mogo.module.common.dialog.BaseFloatDialog
+import com.mogo.module.push.R
+
+class PushCheckDialog(context: Context) : BaseFloatDialog(context) {
+
+ private var pushCheckClose: ImageView? = null
+ private var pushCheckTitle: TextView? = null
+ private var pushCheckContent: TextView? = null
+
+ init {
+ setContentView(R.layout.module_push_dialog_check)
+ setCanceledOnTouchOutside(true)
+ pushCheckClose = findViewById(R.id.module_push_dialog_close)
+ pushCheckTitle = findViewById(R.id.module_push_dialog_title)
+ pushCheckContent = findViewById(R.id.module_push_dialog_content)
+ pushCheckClose?.setOnClickListener {
+ dismiss()
+ }
+ }
+
+ fun showCheckDialog(title: String, content: String) {
+ if (isShowing) {
+ return
+ }
+ if (title.isBlank() || content.isBlank()) {
+ return
+ }
+ pushCheckTitle?.text = title
+ pushCheckContent?.text = content
+ show()
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/drawable-xhdpi/module_push_dialog_close.png b/modules/mogo-module-push/src/main/res/drawable-xhdpi/module_push_dialog_close.png
new file mode 100644
index 0000000000..95a08f52f4
Binary files /dev/null and b/modules/mogo-module-push/src/main/res/drawable-xhdpi/module_push_dialog_close.png differ
diff --git a/modules/mogo-module-push/src/main/res/drawable/module_push_dialog_check_background.xml b/modules/mogo-module-push/src/main/res/drawable/module_push_dialog_check_background.xml
new file mode 100644
index 0000000000..4d721f27c8
--- /dev/null
+++ b/modules/mogo-module-push/src/main/res/drawable/module_push_dialog_check_background.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/drawable/module_push_item_background.xml b/modules/mogo-module-push/src/main/res/drawable/module_push_item_background.xml
index 0d24d54394..a70936cd5d 100644
--- a/modules/mogo-module-push/src/main/res/drawable/module_push_item_background.xml
+++ b/modules/mogo-module-push/src/main/res/drawable/module_push_item_background.xml
@@ -1,7 +1,11 @@
-
+
+
-
diff --git a/modules/mogo-module-push/src/main/res/drawable/module_push_item_background_origin.xml b/modules/mogo-module-push/src/main/res/drawable/module_push_item_background_origin.xml
new file mode 100644
index 0000000000..0d24d54394
--- /dev/null
+++ b/modules/mogo-module-push/src/main/res/drawable/module_push_item_background_origin.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/modules/mogo-module-push/src/main/res/layout/module_push_dialog_check.xml b/modules/mogo-module-push/src/main/res/layout/module_push_dialog_check.xml
new file mode 100644
index 0000000000..8b13014fe8
--- /dev/null
+++ b/modules/mogo-module-push/src/main/res/layout/module_push_dialog_check.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/layout/module_push_item.xml b/modules/mogo-module-push/src/main/res/layout/module_push_item.xml
index f43312ef3f..f6375db0f6 100644
--- a/modules/mogo-module-push/src/main/res/layout/module_push_item.xml
+++ b/modules/mogo-module-push/src/main/res/layout/module_push_item.xml
@@ -4,18 +4,19 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/module_push_ui_height"
- android:background="@drawable/module_push_item_background_p">
+ android:layout_marginTop="@dimen/module_push_ui_margin_top"
+ android:background="@drawable/module_push_item_background">
+ app:riv_corner_radius_bottom_left="@dimen/module_push_ui_image_corner"
+ app:riv_corner_radius_top_left="@dimen/module_push_ui_image_corner" />
-
-
+ app:layout_constrainedWidth="true"
+ tools:text="官方公告" />
-
+ android:textSize="@dimen/module_push_ui_title_text_size" />
-
-
-
-
-
-
-
+
-
-
+
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/layout/module_push_item_origin.xml b/modules/mogo-module-push/src/main/res/layout/module_push_item_origin.xml
new file mode 100644
index 0000000000..f43312ef3f
--- /dev/null
+++ b/modules/mogo-module-push/src/main/res/layout/module_push_item_origin.xml
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/layout/module_push_item_vertical.xml b/modules/mogo-module-push/src/main/res/layout/module_push_item_vertical.xml
index f42acaf28d..d7829a2fb7 100644
--- a/modules/mogo-module-push/src/main/res/layout/module_push_item_vertical.xml
+++ b/modules/mogo-module-push/src/main/res/layout/module_push_item_vertical.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/module_push_ui_width_vertical"
android:layout_height="wrap_content"
- android:background="@drawable/module_push_item_background"
+ android:background="@drawable/module_push_item_background_origin"
android:maxHeight="@dimen/module_push_item_maxHeight_vertical"
android:orientation="vertical"
android:paddingLeft="@dimen/module_push_ui_app_icon_leftMargin_vertical"
diff --git a/modules/mogo-module-push/src/main/res/values-xhdpi-2560x1440/dimens.xml b/modules/mogo-module-push/src/main/res/values-xhdpi-2560x1440/dimens.xml
new file mode 100644
index 0000000000..4afc379245
--- /dev/null
+++ b/modules/mogo-module-push/src/main/res/values-xhdpi-2560x1440/dimens.xml
@@ -0,0 +1,39 @@
+
+
+
+ 230px
+ 230px
+ 230px
+ 30px
+ 21px
+ 34px
+ 33px
+ 2px
+ 120px
+ 30px
+ 55px
+ 42px
+ 208px
+ 394px
+ 42px
+ 567px
+ 100px
+ 20px
+ 34px
+ 34px
+
+
+ 1200px
+ 763px
+ 32px
+ 107px
+ 107px
+ 40px
+ 54px
+ 56px
+ 1000px
+ 33px
+ 43px
+ 20px
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/values/colors.xml b/modules/mogo-module-push/src/main/res/values/colors.xml
index cd5df39f48..d01c09cbad 100644
--- a/modules/mogo-module-push/src/main/res/values/colors.xml
+++ b/modules/mogo-module-push/src/main/res/values/colors.xml
@@ -4,4 +4,7 @@
#FFFFFF
#B2FFFFFF
#999999
+ #B3FFFFFF
+ #5A8EFD
+ #E63B4577
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/values/dimens.xml b/modules/mogo-module-push/src/main/res/values/dimens.xml
index 06dbe9cde9..dc5f0d6635 100644
--- a/modules/mogo-module-push/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-push/src/main/res/values/dimens.xml
@@ -98,4 +98,29 @@
118px
86px
8px
+
+
+ 34px
+ 567px
+ 100px
+
+ 2px
+ 120px
+ 30px
+ 55px
+ 42px
+ 208px
+
+ 1200px
+ 763px
+ 32px
+ 107px
+ 107px
+ 40px
+ 54px
+ 56px
+ 1000px
+ 33px
+ 43px
+ 20px
\ No newline at end of file
diff --git a/modules/mogo-module-push/src/main/res/values/strings.xml b/modules/mogo-module-push/src/main/res/values/strings.xml
index c873da000f..808d1e2474 100644
--- a/modules/mogo-module-push/src/main/res/values/strings.xml
+++ b/modules/mogo-module-push/src/main/res/values/strings.xml
@@ -3,4 +3,5 @@
清除
清空历史消息
暂无消息
+ 查看
diff --git a/modules/mogo-module-service/build.gradle b/modules/mogo-module-service/build.gradle
index eea585b4bb..f51f32bd73 100644
--- a/modules/mogo-module-service/build.gradle
+++ b/modules/mogo-module-service/build.gradle
@@ -60,6 +60,8 @@ dependencies {
implementation project(':modules:mogo-module-common')
implementation project(':core:mogo-core-data')
+ implementation project(':core:mogo-core-res')
+ implementation project(':core:mogo-core-function-call')
}
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java
index 8878076d39..15ba3a9061 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java
@@ -18,6 +18,7 @@ import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.module.common.utils.CarSeries;
import com.mogo.module.service.dispatch.DispatchAutoPilotManager;
import com.mogo.module.service.location.MogoRTKLocation;
+import com.mogo.module.service.routeoverlay.MogoRouteOverlayManager;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoModuleProvider;
import com.mogo.service.module.ModuleType;
@@ -106,6 +107,7 @@ public class MogoServiceProvider implements IMogoModuleProvider {
MogoServices.getInstance().preInit( context );
MogoServices.getInstance().init( AbsMogoApplication.getApp() );
DispatchAutoPilotManager.getInstance().initSocket(context);
+ MogoRouteOverlayManager.getInstance(context).init();
UiThreadHandler.postDelayed( () -> {
}, 5_000L );
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotRemoteController.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotRemoteController.java
index acd8e143a5..b47d2c7884 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotRemoteController.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotRemoteController.java
@@ -2,7 +2,7 @@ package com.mogo.module.service.autopilot;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.module.common.MogoApisHandler;
-import com.mogo.service.adas.RemoteControlAutoPilotParameters;
+import com.mogo.eagle.core.data.autopilot.RemoteControlAutoPilotParameters;
import com.mogo.service.cloud.socket.IMogoOnMessageListener;
import com.mogo.service.cloud.socket.IMogoSocketManager;
import com.mogo.utils.logger.Logger;
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/dispatch/DispatchAutoPilotManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/dispatch/DispatchAutoPilotManager.java
index b86dd5b92b..09f4e7182a 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/dispatch/DispatchAutoPilotManager.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/dispatch/DispatchAutoPilotManager.java
@@ -10,7 +10,11 @@ import android.os.Handler;
import android.os.Message;
import com.mogo.cloud.commons.utils.CoordinateUtils;
+import com.mogo.eagle.core.data.autopilot.AdasOCHData;
+import com.mogo.eagle.core.data.autopilot.RemoteControlAutoPilotParameters;
import com.mogo.eagle.core.data.map.MogoLatLng;
+import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener;
+import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.module.common.MogoApisHandler;
@@ -19,10 +23,7 @@ import com.mogo.module.service.dispatch.model.DispatchServiceModel;
import com.mogo.module.service.dispatch.model.IDispatch;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.adas.IMogoAdasOCHCallback;
-import com.mogo.service.adas.RemoteControlAutoPilotParameters;
-import com.mogo.service.adas.entity.AdasOCHData;
import com.mogo.service.cloud.socket.IMogoOnMessageListener;
-import com.mogo.service.entrance.IMogoEntranceAutopilotStatusClickListener;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
@@ -31,7 +32,7 @@ import java.util.List;
//负责监听自动驾驶状态并进行状态上报,自动驾驶路线上报,接收调度指令展示指令弹窗
public class DispatchAutoPilotManager implements IMogoOnMessageListener
, IDispatchRemindClickListener
- , IMogoCarLocationChangedListener2, IMogoAdasOCHCallback, IMogoEntranceAutopilotStatusClickListener {
+ , IMogoCarLocationChangedListener2, IMogoAdasOCHCallback, IMoGoCheckAutoPilotBtnListener {
private static final String TAG = "DispatchAutoPilotManager";
private static volatile DispatchAutoPilotManager instance;
@@ -95,7 +96,7 @@ public class DispatchAutoPilotManager implements IMogoOnMessageListener routeList) {
+ RouteOverlayDrawer.getInstance(mContext).putRouteList(routeList);
+ }
+ });
+
+ }
+
+ public static MogoRouteOverlayManager getInstance(Context context) {
+ if (sInstance == null) {
+ synchronized (MogoRouteOverlayManager.class) {
+ if (sInstance == null) {
+ sInstance = new MogoRouteOverlayManager(context);
+ }
+ }
+ }
+ return sInstance;
+ }
+
+
+ @Override
+ public void onCarLocationChanged2(Location latLng) {
+ updateLocation(latLng);
+ }
+
+ @Override
+ public void onCarLocationChanged(MogoLatLng latLng) {
+
+ }
+ public void updateLocation(Location location){
+ if (location == null){
+ return;
+ }
+ //坐标转换
+ MogoLocation loc = new MogoLocation();
+ loc.setTime(loc.getTime());
+ loc.setAccuracy(location.getAccuracy());
+ loc.setSpeed(location.getSpeed());
+ loc.setLongitude(location.getLongitude());
+ loc.setLatitude(location.getLatitude());
+ loc.setAltitude(location.getAltitude());
+ loc.setBearing(location.getBearing());
+ loc.setProvider(location.getProvider());
+ RouteOverlayDrawer.getInstance(mContext).drawRouteOverlay(loc);
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java
new file mode 100644
index 0000000000..a04e023e0f
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/RouteOverlayDrawer.java
@@ -0,0 +1,114 @@
+package com.mogo.module.service.routeoverlay;
+
+import android.content.Context;
+
+import com.mogo.eagle.core.data.map.MogoLatLng;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.map.overlay.IMogoOverlayManager;
+import com.mogo.map.overlay.IMogoPolyline;
+import com.mogo.map.overlay.MogoPolylineOptions;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.drawer.MarkerDrawer;
+import com.mogo.module.common.utils.LocationUtils;
+import com.mogo.utils.ColorUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RouteOverlayDrawer {
+
+ private IMogoPolyline mMoGoPolyline;
+ // 连接线参数
+ private MogoPolylineOptions mPolylineOptions;
+ // 线路径集合
+ private List mPolylinePointList;
+ // 渐变色
+ private List mPolylineColors;
+ private Context mContext;
+ IMogoOverlayManager mogoOverlayManager;
+
+ private static volatile RouteOverlayDrawer sInstance;
+
+ private RouteOverlayDrawer(Context context) {
+ mPolylineOptions = new MogoPolylineOptions();
+ // 绘制路径集合
+ mPolylinePointList = new ArrayList<>();
+ // 引导线颜色
+ mPolylineColors = new ArrayList<>();
+ mContext = context;
+ mogoOverlayManager = MogoApisHandler.getInstance().getApis().getMapServiceApi().getOverlayManager(mContext);
+ }
+
+ public static RouteOverlayDrawer getInstance(Context context) {
+ if (sInstance == null) {
+ synchronized (RouteOverlayDrawer.class) {
+ if (sInstance == null) {
+ sInstance = new RouteOverlayDrawer(context);
+ }
+ }
+ }
+ return sInstance;
+ }
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ private List mRouteList;
+
+ public void drawRouteOverlay(MogoLocation location){
+ if (mRouteList == null ){
+ clearMogoRouteOverlay();
+ return;
+ }
+ if (mRouteList.size() >0){
+ //adas回调导航路径 绘制引导线
+ draw(location,mRouteList);
+ }
+ }
+
+ /**
+ * 绘制最优路线
+ *
+ * @param routelist 要绘制的经纬度度集合
+ */
+ public IMogoPolyline draw(MogoLocation carLocal, List routelist) {
+ clearMogoRouteOverlay();
+ if (routelist != null) {
+
+ // 将当前车辆位置放进去
+ mPolylinePointList.add(new MogoLatLng(carLocal.getLatitude(), carLocal.getLongitude()));
+ // 过滤后台推送的推荐路线集合
+ for (MogoLatLng polyline : routelist) {
+ //需要剔除已经行驶过的经纬度,这里需要比对推荐路线集合中的点是否在当前车辆行驶方向前面如果不在则抛弃
+ if (LocationUtils.isPointOnCarFront(carLocal, polyline)) {
+ mPolylinePointList.add(polyline);
+ }
+ }
+ mPolylineColors.addAll(ColorUtils.getGradientAlpha("#002965ED", "#FF2965ED", "#002965ED", mPolylinePointList.size()));
+ // 替换路径集合
+ mPolylineOptions.points(mPolylinePointList);
+ // 线条粗细,渐变,渐变色值
+ mPolylineOptions.width(25).useGradient(true).colorValues(mPolylineColors);
+ // 绘制线
+ mMoGoPolyline = mogoOverlayManager.addPolyline(mPolylineOptions);
+ }
+ return mMoGoPolyline;
+ }
+
+ public void clearMogoRouteOverlay(){
+ if (mMoGoPolyline != null) {
+ mMoGoPolyline.remove();
+ mPolylinePointList.clear();
+ mPolylineColors.clear();
+ }
+ }
+
+ public void putRouteList(List routeList) {
+ this.mRouteList = routeList;
+ }
+}
diff --git a/modules/mogo-module-service/src/main/res/layout/module_services_online_car_panel_item.xml b/modules/mogo-module-service/src/main/res/layout/module_services_online_car_panel_item.xml
index 13915be41a..1e91684d50 100644
--- a/modules/mogo-module-service/src/main/res/layout/module_services_online_car_panel_item.xml
+++ b/modules/mogo-module-service/src/main/res/layout/module_services_online_car_panel_item.xml
@@ -10,7 +10,7 @@
android:paddingStart="@dimen/module_services_panel_item_start"
android:paddingBottom="@dimen/module_services_panel_item_padding">
- {
+ @Override
+ public Class target() {
+ return AdvanceWarningBean.class;
+ }
+
+ @Override
+ public void onMsgReceived(AdvanceWarningBean message) {
+ // 将接收到的数据转换成最优车道推荐的场景数据
+ Logger.i(MODULE_NAME, "V2XMessageListener_404000:" + GsonUtil.jsonFromObject(message));
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java
index 356e7dac1d..619735fd63 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/manager/impl/MoGoV2XMarkerManager.java
@@ -28,6 +28,7 @@ import com.mogo.module.common.utils.CarSeries;
import com.mogo.module.service.ServiceConst;
import com.mogo.module.service.Utils;
import com.mogo.module.v2x.MoGoV2XServicePaths;
+import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XConst;
import com.mogo.module.v2x.V2XServiceManager;
import com.mogo.module.v2x.entity.net.V2XSpecialCarRes.V2XMarkerEntity;
@@ -288,7 +289,7 @@ public class MoGoV2XMarkerManager implements IMoGoV2XMarkerManager {
MogoMarkerOptions options = new MogoMarkerOptions().object(roadEventEntity)
.latitude(roadEventEntity.getLocation().getLat()).longitude(roadEventEntity.getLocation().getLon());
options.anchor(0.5f, 0.5f);
- options.icon3DRes(com.mogo.module.common.R.raw.special_vehicle);
+ options.icon3DRes(R.raw.special_vehicle);
options.anchorColor("#FFBF29FF");
m3DMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_EVENT_ALARM_POI, options);
m3DMarker.setToTop();
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java
index 0a3fe0121c..347db3042e 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/animation/V2XAnimationWindow.java
@@ -14,7 +14,7 @@ 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.view.IV2XWindow;
-import com.mogo.module.v2x.view.TextureVideoView;
+import com.mogo.eagle.core.widget.TextureVideoView;
import com.mogo.utils.logger.Logger;
import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/CarZegoLiveVideoView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/CarZegoLiveVideoView.java
index 4b8e411b45..bed10d979a 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/CarZegoLiveVideoView.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/CarZegoLiveVideoView.java
@@ -17,6 +17,7 @@ import com.mogo.cloud.trafficlive.api.ITrafficCarLiveCallBack;
import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.voice.AIAssist;
+import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.map.location.MogoLocation;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XServiceManager;
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/RoundLayout.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/RoundLayout.java
deleted file mode 100644
index 814211419b..0000000000
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/RoundLayout.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.mogo.module.v2x.view;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Path;
-import android.graphics.RectF;
-import android.util.AttributeSet;
-import android.widget.RelativeLayout;
-
-import com.mogo.module.v2x.R;
-
-/**
- * author : donghongyu
- * e-mail : 1358506549@qq.com
- * date : 2020/3/25 11:39 AM
- * desc :
- * version: 1.0
- */
-public class RoundLayout extends RelativeLayout {
- private float roundLayoutRadius = 14f;
- private Path roundPath;
- private RectF rectF;
-
- public RoundLayout(Context context) {
- this(context, null);
- }
-
- public RoundLayout(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public RoundLayout(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
-
- TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundLayout);
- roundLayoutRadius = typedArray.getDimensionPixelSize(R.styleable.RoundLayout_roundLayoutRadius, (int) roundLayoutRadius);
- typedArray.recycle();
-
- init();
-
- }
-
-
- private void init() {
- setWillNotDraw(false);//如果你继承的是ViewGroup,注意此行,否则draw方法是不会回调的;
- roundPath = new Path();
- rectF = new RectF();
- }
-
- private void setRoundPath() {
- //添加一个圆角矩形到path中, 如果要实现任意形状的View, 只需要手动添加path就行
- roundPath.addRoundRect(rectF, roundLayoutRadius, roundLayoutRadius, Path.Direction.CW);
- }
-
-
- public void setRoundLayoutRadius(float roundLayoutRadius) {
- this.roundLayoutRadius = roundLayoutRadius;
- setRoundPath();
- postInvalidate();
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- super.onLayout(changed, l, t, r, b);
- rectF.set(0f, 0f, getMeasuredWidth(), getMeasuredHeight());
- setRoundPath();
- }
-
- @Override
- public void draw(Canvas canvas) {
- if (roundLayoutRadius > 0f) {
- canvas.clipPath(roundPath);
- }
- super.draw(canvas);
- }
-
-}
-
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCarLiveVideoView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCarLiveVideoView.java
index 9db24bde03..82427c0623 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCarLiveVideoView.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCarLiveVideoView.java
@@ -16,6 +16,7 @@ import androidx.core.content.ContextCompat;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.voice.AIAssist;
+import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.module.common.entity.MarkerCarInfo;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XServiceManager;
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCrossRoadVideoView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCrossRoadVideoView.java
index 0a6fef8f20..10a50e823e 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCrossRoadVideoView.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCrossRoadVideoView.java
@@ -15,6 +15,7 @@ import androidx.core.content.ContextCompat;
import com.mogo.cloud.trafficlive.api.ITrafficIntersectionLiveCallBack;
import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive;
import com.mogo.commons.voice.AIAssist;
+import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.map.location.MogoLocation;
import com.mogo.module.common.entity.MarkerCarInfo;
import com.mogo.module.v2x.R;
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java
index 59c3eebacd..d1259085f3 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XLiveGSYVideoView.java
@@ -16,6 +16,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import com.mogo.commons.voice.AIAssist;
+import com.mogo.eagle.core.widget.RoundLayout;
import com.mogo.module.common.entity.MarkerCarInfo;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.utils.V2XUtils;
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail.xml
index 435eb8b454..eb700a4ab8 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_event_detail.xml
@@ -9,7 +9,7 @@
android:paddingBottom="@dimen/dp_20"
app:roundLayoutRadius="@dimen/dp_30">
-
-
+
-
-
-
-
+
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video.xml
index 09a73bd6ff..a9be84977b 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video_vr.xml
index a9340a7bd6..4f15d3ace7 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video_vr.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video_vr.xml
@@ -1,5 +1,5 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_normal.xml b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_normal.xml
index 42614dd5d9..4146ffe8da 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_normal.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_normal.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_live.xml b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_live.xml
index 8c6e2c3547..bfcde64354 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_live.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_live.xml
@@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
@@ -70,6 +70,6 @@
app:layout_constraintTop_toBottomOf="@+id/ivErrorIcon" />
-
+
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_animation.xml b/modules/mogo-module-v2x/src/main/res/layout/window_animation.xml
index 921c20b656..28bc512ec5 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_animation.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_animation.xml
@@ -6,14 +6,14 @@
android:layout_height="match_parent"
android:paddingStart="@dimen/module_main_v2x_animation_width">
-
-
-
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml
index e86b7068cd..98bddcdc78 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout.xml
@@ -7,7 +7,7 @@
android:background="@drawable/v2x_alert_window_bg"
android:layout_margin="@dimen/dp_3">
-
@@ -47,6 +47,6 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:src="@drawable/module_common_close_selector" />
-
+
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout_vr.xml b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout_vr.xml
index 83891cf1a4..0c7085d84a 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout_vr.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_road_video_layout_vr.xml
@@ -8,7 +8,7 @@
android:layout_margin="@dimen/dp_3"
android:background="@drawable/v2x_bg_video_tip_vr">
-
@@ -48,6 +48,6 @@
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:src="@drawable/module_common_close_selector_vr" />
-
+
diff --git a/modules/mogo-module-v2x/src/main/res/values/strings.xml b/modules/mogo-module-v2x/src/main/res/values/strings.xml
index 7939eedeac..d66b049f49 100644
--- a/modules/mogo-module-v2x/src/main/res/values/strings.xml
+++ b/modules/mogo-module-v2x/src/main/res/values/strings.xml
@@ -1,7 +1,5 @@
mogo-module-v2x
- "不支持该视频。"
- 此文件不支持播放
车速
已提交
感谢已送达
diff --git a/modules/mogo-module-v2x/src/main/res/values/style.xml b/modules/mogo-module-v2x/src/main/res/values/style.xml
index 0918a68fcb..003c09ed59 100644
--- a/modules/mogo-module-v2x/src/main/res/values/style.xml
+++ b/modules/mogo-module-v2x/src/main/res/values/style.xml
@@ -1,8 +1,5 @@
-
-
-