From 36dc2c85b069b3b81be13fcb4175b6c0344ea403 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 22 Jun 2022 12:01:45 +0800 Subject: [PATCH] =?UTF-8?q?[change]=20=E6=B7=BB=E5=8A=A0=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=99=A8=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E9=95=BF=E6=97=B6=E9=97=B4=E5=90=8E=E5=8F=B0=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E6=9D=83=E9=99=90=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_ipc_monitoring/build.gradle | 4 +- .../client/ui/AutopilotConfigActivity.java | 33 +- .../zhidao/adas/client/ui/MainActivity.java | 44 +- .../drawable/icon_dev_status_net_disable.png | Bin 0 -> 7558 bytes .../drawable/icon_dev_status_net_enable.png | Bin 0 -> 10675 bytes .../src/main/res/drawable/selector_router.xml | 6 + .../src/main/res/layout/item_main.xml | 8 + .../README.md | 463 ------------------ ...PermissionLongBackgroundRunningDialog.java | 41 -- ...das_permission_long_background_running.xml | 13 - .../.gitignore | 0 libraries/mogo-adas-other/README.md | 7 + .../build.gradle | 1 + .../consumer-rules.pro | 0 .../gradle.properties | 0 .../proguard-rules.pro | 0 .../src/main/AndroidManifest.xml | 13 +- .../permission/BackgrounderPermission.java | 48 +- .../permission/OnAdasPermissionListener.java | 10 + ...PermissionLongBackgroundRunningDialog.java | 87 ++++ .../other/router/PlaceholderFragment.java | 190 +++++++ .../high/other/router/RouterActivity.java | 108 ++++ .../other/router/SectionsPagerAdapter.java | 41 ++ .../src/main/res/anim/dialog_in.xml | 0 .../src/main/res/anim/dialog_out.xml | 0 .../src/main/res/drawable/bg_adas_dialog.xml | 0 .../src/main/res/layout/activity_router.xml | 65 +++ ...das_permission_long_background_running.xml | 35 ++ .../src/main/res/layout/fragment_router.xml | 31 ++ .../src/main/res/values/strings.xml | 0 .../src/main/res/values/styles.xml | 4 + settings.gradle | 2 +- 32 files changed, 690 insertions(+), 564 deletions(-) create mode 100644 app_ipc_monitoring/src/main/res/drawable/icon_dev_status_net_disable.png create mode 100644 app_ipc_monitoring/src/main/res/drawable/icon_dev_status_net_enable.png create mode 100644 app_ipc_monitoring/src/main/res/drawable/selector_router.xml delete mode 100644 libraries/mogo-adas-backgrounder-permission/README.md delete mode 100644 libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java delete mode 100644 libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/.gitignore (100%) create mode 100644 libraries/mogo-adas-other/README.md rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/build.gradle (95%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/consumer-rules.pro (100%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/gradle.properties (100%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/proguard-rules.pro (100%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/src/main/AndroidManifest.xml (50%) rename libraries/{mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high => mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other}/permission/BackgrounderPermission.java (71%) create mode 100644 libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/OnAdasPermissionListener.java create mode 100644 libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/PermissionLongBackgroundRunningDialog.java create mode 100644 libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/PlaceholderFragment.java create mode 100644 libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/RouterActivity.java create mode 100644 libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/SectionsPagerAdapter.java rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/src/main/res/anim/dialog_in.xml (100%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/src/main/res/anim/dialog_out.xml (100%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/src/main/res/drawable/bg_adas_dialog.xml (100%) create mode 100644 libraries/mogo-adas-other/src/main/res/layout/activity_router.xml create mode 100644 libraries/mogo-adas-other/src/main/res/layout/dialog_adas_permission_long_background_running.xml create mode 100644 libraries/mogo-adas-other/src/main/res/layout/fragment_router.xml rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/src/main/res/values/strings.xml (100%) rename libraries/{mogo-adas-backgrounder-permission => mogo-adas-other}/src/main/res/values/styles.xml (82%) diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle index a023efe6fa..c72bbeb32c 100644 --- a/app_ipc_monitoring/build.gradle +++ b/app_ipc_monitoring/build.gradle @@ -69,8 +69,8 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation rootProject.ext.dependencies.gson implementation project(':libraries:mogo-adas') - implementation project(':libraries:mogo-adas-backgrounder-permission') -// implementation 'com.zhidao.support.adas:high:2.6.6.0' + implementation project(':libraries:mogo-adas-other') +// implementation 'com.zhidao.support.adas:high:2.7.0.0' // implementation 'com.zhjt.mogo.adas.data:adas-data:2.6.6.0' compileOnly project(':core:mogo-core-data') implementation project(':core:mogo-core-utils') diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java index c49b03a313..925e539745 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java @@ -309,22 +309,23 @@ public class AutopilotConfigActivity extends BaseActivity { } private void onBack() { - new AlertDialog.Builder(this) - .setTitle("退出提示") - .setMessage("是否配置页面") - .setNegativeButton("取消", - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } - }) - .setPositiveButton("确认", - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { - finish(); - } - }).show(); + finish(); +// new AlertDialog.Builder(this) +// .setTitle("退出提示") +// .setMessage("是否配置页面") +// .setNegativeButton("取消", +// new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dialog.cancel(); +// } +// }) +// .setPositiveButton("确认", +// new DialogInterface.OnClickListener() { +// public void onClick(DialogInterface dialog, int whichButton) { +// finish(); +// } +// }).show(); } //返回键处理 diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index a87b053975..1ba98d69a3 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -89,6 +89,9 @@ import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.ProtocolStatus; import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; +import com.zhidao.support.adas.high.other.permission.BackgrounderPermission; +import com.zhidao.support.adas.high.other.permission.OnAdasPermissionListener; +import com.zhidao.support.adas.high.other.router.RouterActivity; import java.net.Inet4Address; import java.net.InetAddress; @@ -282,7 +285,12 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas tvConnectState = findViewById(R.id.tv_connect_state); ipcIp = findViewById(R.id.ipc_ip); localIp = findViewById(R.id.local_ip); - + findViewById(R.id.btn_router).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + RouterActivity.newInstance(MainActivity.this, false); + } + }); role.setSelected(BuildConfig.IS_CLIENT); if (BuildConfig.IS_CLIENT) { @@ -527,21 +535,25 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } }); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { -// String str = "后台运行:" + (AdasManager.getInstance().isPermissionLongBackgroundRunning(this) ? "已优化" : "未优化"); -// background.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)); -// background.setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// -//// Permission.requestAddDataSaverWhite(MainActivity.this); -//// AdasManager.getInstance().requestIgnoreBatteryOptimizations(MainActivity.this); -// AdasManager.getInstance().showPermissionLongBackgroundRunningDialog(MainActivity.this); -// } -// }); -// } else { -// background.setVisibility(View.GONE); -// } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + String str = "后台运行:" + (BackgrounderPermission.getInstance().isPermissionLongBackgroundRunning(this) ? "已优化" : "未优化"); + background.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)); + background.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + BackgrounderPermission.getInstance().showPermissionLongBackgroundRunningDialog(MainActivity.this); + } + }); + BackgrounderPermission.getInstance().setListener(new OnAdasPermissionListener() { + @Override + public void onBackgrounderPermission(boolean isAllow) { + String str = "后台运行:" + (isAllow ? "已优化" : "未优化"); + background.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)); + } + }); + } else { + background.setVisibility(View.GONE); + } } private void showListPopupWindow() { diff --git a/app_ipc_monitoring/src/main/res/drawable/icon_dev_status_net_disable.png b/app_ipc_monitoring/src/main/res/drawable/icon_dev_status_net_disable.png new file mode 100644 index 0000000000000000000000000000000000000000..885b4603f045d78228be56c2f633336f8a00c10e GIT binary patch literal 7558 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 Z{|}J!w(H#k`Op9W002ovPDHLkV1jRh(zgHr literal 0 HcmV?d00001 diff --git a/app_ipc_monitoring/src/main/res/drawable/selector_router.xml b/app_ipc_monitoring/src/main/res/drawable/selector_router.xml new file mode 100644 index 0000000000..6d820136c1 --- /dev/null +++ b/app_ipc_monitoring/src/main/res/drawable/selector_router.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app_ipc_monitoring/src/main/res/layout/item_main.xml b/app_ipc_monitoring/src/main/res/layout/item_main.xml index 2c33569728..4f3acb94c9 100644 --- a/app_ipc_monitoring/src/main/res/layout/item_main.xml +++ b/app_ipc_monitoring/src/main/res/layout/item_main.xml @@ -283,6 +283,14 @@ android:layout_marginStart="-42dp" android:scaleType="centerInside" android:src="@drawable/selector_history_ip" /> + + \ No newline at end of file diff --git a/libraries/mogo-adas-backgrounder-permission/README.md b/libraries/mogo-adas-backgrounder-permission/README.md deleted file mode 100644 index 2014927e77..0000000000 --- a/libraries/mogo-adas-backgrounder-permission/README.md +++ /dev/null @@ -1,463 +0,0 @@ -#### 说明 -# ADAS LIB -## 与工控机交互LIB - -# 使用方法参见【app_ipc_monitoring】中的代码 - -## 可用接口 -~~~java - /** - * 设置多设备监听 - * - * @param l 监听 - */ - AdasManager.getInstance().setOnMultiDeviceListener(OnMultiDeviceListener l); -~~~ -~~~java - /** - * 设置工控机数据监听 - * - * @param l 监听 - */ - AdasManager.getInstance().setOnAdasListener(OnAdasListener l); -~~~ -~~~java - /** - * 创建一个连接 - * - * @param options 连接参数 - * @param onAdasConnectStatusListener 连接状态监听 - */ - AdasManager.getInstance().create(AdasOptions options, OnAdasConnectStatusListener onAdasConnectStatusListener); -~~~ -~~~java - /** - * ADAS LIB 版本 - * - * @return 版本 - */ - AdasManager.getInstance().getAdasVersion(); -~~~ -~~~java - /** - * 获取协议版本 - * - * @return 版本 - */ - AdasManager.getInstance().getProtocolVersion(); -~~~ -~~~java - /** - * 获取工控机配置信息 - * - * @return 配置信息 未连接为null 断开连接会清空 - */ - AdasManager.getInstance().getCarConfig(); -~~~ -~~~java - /** - * 连接工控机 - */ - AdasManager.getInstance().connect(); -~~~ -~~~java - /** - * 与工控机断开连接 - */ - AdasManager.getInstance().disconnect(); -~~~ -~~~java - /** - * 获取当前工控机的链接状态 - * - * @return {@link Constants.IPC_CONNECTION_STATUS} - */ - AdasManager.getInstance().getIpcConnectionStatus(); -~~~ -~~~java - - /** - * Log是否开启打印 - */ - AdasManager.getInstance().setEnableLog(boolean isEnableLog); -~~~ -~~~java - /** - * 系统命令请求, 比如系统重启,启用新镜像 - * - * @param type SystemCmdType。SYSTEMCMD_REBOOT 重启所有节点 - * SystemCmdType。SYSTEMCMD_EMPLOY_NEW_IMAGE 使用新镜像(推镜像) - * SystemCmdType。SYSTEMCMD_SHUT_DOWN 关机 - * @return boolean - */ - AdasManager.getInstance().sendSystemCmdReq(@NonNull MessagePad.SystemCmdType type); -~~~ -~~~java - /** - * 解析工控机发送过来的数据 - * 多设备时使用 - * - * @param bytes 数据 - */ - AdasManager.getInstance().parseIPCData(byte[] bytes); -~~~ -~~~java - /** - * 获取工控机链接配置 - * - * @return 工控机链接参数 - */ - AdasManager.getInstance().getAdasOptions(); -~~~ -~~~java - /** - * 获取已经链接成功的工控机IP 未连接为null - * - * @return ip null:表示未连接 - */ - AdasManager.getInstance().getIpcConnectedIp(); -~~~ -~~~java - /** - * 获取已经链接成功的工控机端口 - * - * @return 端口 未连接为默认端口 - */ - AdasManager.getInstance().getIpcConnectedPort(); -~~~ -~~~java - - /** - * 自动驾驶设备基础信息应答 - * - * @param sn SN - * @param environment 1: 研发环境, 2:测试环境, 3:生产环境 4:演示环境 - * @return - */ - AdasManager.getInstance().sendBasicInfoResp(@NonNull String sn, int environment); -~~~ -~~~java - /** - * 设置自动驾驶模式 启动自动驾驶 - * - * @param mode 1: enter autopilot mode, 0: quit autopilot mode - * @param source 命令来源: 0: pad模拟(模拟时routeInfo传null), 1: AICloud业务 - * @param routeInfo 自动驾驶路径信息 - * @return - */ - AdasManager.getInstance().sendAutoPilotModeReq(int mode, int source, MessagePad.RouteInfo routeInfo); -~~~ -~~~java - /** - * 设置演示模式 - * - * @param enable 1: enable, 0: disable - * @return - */ - AdasManager.getInstance().sendDemoModeReq(int enable); -~~~ -~~~java - /** - * 车机基础信息请求 - * - * @return - */ - AdasManager.getInstance().sendCarConfigReq(); -~~~ -~~~java - /** - * 记录人工接管原因 - * - * @param key bag key 唯一标识 - * @param filename 文件路径 - * @param reasonID 接管原因id - * @param reason 接管原因 - * @return - */ - AdasManager.getInstance().sendRecordCause(long key, @NonNull String filename, @NonNull String reasonID, @NonNull String reason); -~~~ -~~~java - /** - * 同下 - * - * @param id - * @param type - * @return - */ - AdasManager.getInstance().startRecordPackage(int id, int type); -~~~ -~~~java - /** - * 同下 - * - * @param id - * @param type - * @return - */ - AdasManager.getInstance().startRecordPackage(int id, int duration, int type); -~~~ -~~~java - /** - * 同下 - * - * @param id - * @param type - * @return - */ - - AdasManager.getInstance().stopRecordPackage(int id, int type); -~~~ -~~~java - /** - * 数据采集请求 主动录制Bag包 - * - * @param id 采集id - * @param duration 采集时间长 - * @param type 采集类型, 1:badcase, 2: map; 3: rests - * @param isRecord 采集指令, true: 采集, false: 停止采集 - * @param sustain 是否持续采集 - * @return - */ - - AdasManager.getInstance().sendRecordData(int id, int duration, int type, boolean isRecord); -~~~ -~~~java - /** - * 设置自动驾驶最大速度 - * - * @param speedLimit 最大车辆速度 m/s - * @return - */ - AdasManager.getInstance().sendAutopilotSpeedReq(double speedLimit); -~~~ -~~~java - /** - * 发送红绿灯数据到工控机 - * - * @param crossID roadID - * @param latitude - * @param longitude - * @param heading 红绿灯方向 - * @param direction 路的航向角 - * @param lightId 红绿灯ID - * @param laneNo 车道号 - * @param arrowNo 当前车道对应地面要素转向 - * @param flashYellow 黄灯总时间 - * @param laneDetail 灯态具体信息 - * @return - */ - AdasManager.getInstance().sendTrafficLightData(@NonNull String crossID, double latitude, double longitude, @NonNull String heading, @NonNull String direction, int lightId, int laneNo, int arrowNo, int flashYellow, MessagePad.TrafficLightDetail laneDetail); -~~~ -~~~java - /** - * 自动驾驶路径请求 - * - * @return - */ - AdasManager.getInstance().sendGlobalPathReq(); -~~~ -~~~java - /** - * 获取工控机固定IP列表 - * - * @return 返回默认工控机IP列表 - */ - AdasManager.getInstance().getIPCFixationIPList(Context context); -~~~ -~~~java - /** - * 增加工控机固定IP - * - * @param ipcIP IP - */ - AdasManager.getInstance().addIPCFixationIP(Context context, String ipcIP); -~~~ -~~~java - /** - * 删除指定的工控机固定IP - * - * @param ipcIP IP - */ - AdasManager.getInstance().delIPCFixationIP(Context context, String ipcIP); -~~~ -~~~java - /** - * 删除所有工控机固定IP - */ - AdasManager.getInstance().delIPCFixationIP(Context context); -~~~ - - -## OnAdasListener -### 工控机数据回调 -#### 回调中对象的字段详情参见各个proto文件 -~~~java - /** - * 自动驾驶局部轨迹 前车引导线 - * - * @param header 头 - * @param trajectory 数据 - */ - void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory); -~~~ -~~~java - /** - * 障碍物 他车数据 - * - * @param header 头 - * @param trackedObjects 数据 - */ - void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects); -~~~ -~~~java - /** - * 惯导信息 - * - * @param header 头 - * @param gnssInfo 数据 - */ - void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo); -~~~ -~~~java - /** - * 底盘信息, 透传底盘状态,pb参考底盘 - * - * @param header 头 - * @param vehicleState 数据 - */ - void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState); -~~~ -~~~java - /** - * 自动驾驶状态 - * - * @param header 头 - * @param autopilotState 数据 - */ - void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState); -~~~ -~~~java - /** - * 监控事件报告 - * - * @param header 头 - * @param mogoReportMessage 数据 - */ - void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage); -~~~ -~~~java - /** - * 感知红绿灯 - * - * @param header 头 - * @param trafficLights 感知红绿灯 - */ - void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights); -~~~ -~~~java - /** - * 他车轨迹预测 - * - * @param header 头 - * @param predictionObjects 他车轨迹预测数据 - */ - void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects); -~~~ -~~~java - /** - * 自动驾驶设备基础信息请求 - * - * @param header 头 - * @param basicInfoReq 数据 目前没有任何参数 - */ - void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq); -~~~ -~~~java - /** - * 车机基础信息应答 - * - * @param header 头 - * @param carConfigResp 数据 - */ - void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp); -~~~ -~~~java - /** - * 数据采集结果 - * - * @param header 头 - * @param recordPanel 数据 - */ - void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel); -~~~ -~~~java - /** - * 自动驾驶路径应答 - * - * @param header 头 - * @param globalPathResp 数据 - */ - void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp); -~~~ -~~~java - /** - * 报警信息 - * 暂时保留,目前没有使用 - * - * @param header 头 - * @param warn 数据 - */ - @Deprecated - void onWarn(MessagePad.Header header, MessagePad.Warn warn); -~~~ -~~~java - /** - * 到站提醒 自动驾驶站点 - * - * @param header 头 - * @param arrivalNotification 数据 - */ - void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification); -~~~ -~~~java - /** - * 向IPC发送命令返回结果 - * - * @param info - */ - void onSSHResult(SSHResult info); -~~~ -~~~java - /** - * 数据错误 - * - * @param status 错误原因 - * @param bytes 原始数据 - */ - void onError(ProtocolStatus status, byte[] bytes); -~~~ - -## OnAdasConnectStatusListener -### 连接状态监听 -~~~java - /** - * 与工控机链接状态变化 - * - * @param ipcConnectionStatus {@link Constants.IPC_CONNECTION_STATUS} - * @param reason 连接信息 需要判null - * 如果ipcConnectionStatus==Constants.IPC_CONNECTION_STATUS.DISCONNECTED&&reason==null 表示主动断开连接 - */ - void onConnectionIPCStatus(@Define.IPCConnectionStatus int ipcConnectionStatus, @Nullable String reason); -~~~ - -## OnMultiDeviceListener -### 多设备链接监听 -~~~java - /** - * 转发工控机消息 - * 如果是客户端此回调不会被调用 - * - * @param bytes 数据 - */ - void onForwardingIPCMessage(byte[] bytes); -~~~ \ No newline at end of file diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java b/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java deleted file mode 100644 index 853c043a76..0000000000 --- a/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/dialog/PermissionLongBackgroundRunningDialog.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.zhidao.support.adas.high.permission.dialog; - -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.zhidao.support.adas.high.permission.R; - -/** - * 数据用量及电池优化 权限申请 - * 高版本Android系统会针对熄屏、休眠或后台 对电池WiFi等进行优化,长时间网络可能会断开连接 - */ -public class PermissionLongBackgroundRunningDialog extends AppCompatActivity { - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - overridePendingTransition(R.anim.dialog_in, R.anim.dialog_out); - setContentView(R.layout.dialog_adas_permission_long_background_running); -// //设置弹出窗口与屏幕对齐 -// Window win = this.getWindow(); -// int density = (int) (getResources().getDisplayMetrics().density + 0.5f); -////设置内边距,这里设置为10dp -// win.getDecorView().setPadding(10 * density, 10 * density, 10 * density, 10 * density); -// WindowManager.LayoutParams lp = win.getAttributes(); -////设置窗口宽度 -// lp.width = WindowManager.LayoutParams.MATCH_PARENT; -////设置窗口高度 -// lp.height = WindowManager.LayoutParams.WRAP_CONTENT; -////设置Dialog位置 -// lp.gravity = Gravity.TOP; -// win.setAttributes(lp); - } - - @Override - public void finish() { - super.finish(); - //在此时设置转场动画 - overridePendingTransition(R.anim.dialog_out, R.anim.dialog_in); - } -} diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml b/libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml deleted file mode 100644 index 63b16efa72..0000000000 --- a/libraries/mogo-adas-backgrounder-permission/src/main/res/layout/dialog_adas_permission_long_background_running.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libraries/mogo-adas-backgrounder-permission/.gitignore b/libraries/mogo-adas-other/.gitignore similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/.gitignore rename to libraries/mogo-adas-other/.gitignore diff --git a/libraries/mogo-adas-other/README.md b/libraries/mogo-adas-other/README.md new file mode 100644 index 0000000000..e4603dc5bb --- /dev/null +++ b/libraries/mogo-adas-other/README.md @@ -0,0 +1,7 @@ +#### 说明 +# ADAS LIB 其他功能 +## 与工控机交互LIB + +# 申请后台运行权限《关闭电池优化》 + +# 路由器管理 \ No newline at end of file diff --git a/libraries/mogo-adas-backgrounder-permission/build.gradle b/libraries/mogo-adas-other/build.gradle similarity index 95% rename from libraries/mogo-adas-backgrounder-permission/build.gradle rename to libraries/mogo-adas-other/build.gradle index c58c14698e..aabf73fe53 100644 --- a/libraries/mogo-adas-backgrounder-permission/build.gradle +++ b/libraries/mogo-adas-other/build.gradle @@ -32,5 +32,6 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation rootProject.ext.dependencies.androidxappcompat + implementation rootProject.ext.dependencies.material } diff --git a/libraries/mogo-adas-backgrounder-permission/consumer-rules.pro b/libraries/mogo-adas-other/consumer-rules.pro similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/consumer-rules.pro rename to libraries/mogo-adas-other/consumer-rules.pro diff --git a/libraries/mogo-adas-backgrounder-permission/gradle.properties b/libraries/mogo-adas-other/gradle.properties similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/gradle.properties rename to libraries/mogo-adas-other/gradle.properties diff --git a/libraries/mogo-adas-backgrounder-permission/proguard-rules.pro b/libraries/mogo-adas-other/proguard-rules.pro similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/proguard-rules.pro rename to libraries/mogo-adas-other/proguard-rules.pro diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/AndroidManifest.xml b/libraries/mogo-adas-other/src/main/AndroidManifest.xml similarity index 50% rename from libraries/mogo-adas-backgrounder-permission/src/main/AndroidManifest.xml rename to libraries/mogo-adas-other/src/main/AndroidManifest.xml index da52cf04c3..b58604c1e6 100644 --- a/libraries/mogo-adas-backgrounder-permission/src/main/AndroidManifest.xml +++ b/libraries/mogo-adas-other/src/main/AndroidManifest.xml @@ -1,14 +1,19 @@ + package="com.zhidao.support.adas.high.other"> + - + - + diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/BackgrounderPermission.java b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/BackgrounderPermission.java similarity index 71% rename from libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/BackgrounderPermission.java rename to libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/BackgrounderPermission.java index 8f3436b394..c6481e3306 100644 --- a/libraries/mogo-adas-backgrounder-permission/src/main/java/com/zhidao/support/adas/high/permission/BackgrounderPermission.java +++ b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/BackgrounderPermission.java @@ -1,22 +1,43 @@ -package com.zhidao.support.adas.high.permission; +package com.zhidao.support.adas.high.other.permission; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.Uri; +import android.os.Build; import android.os.PowerManager; import android.provider.Settings; import android.util.Log; -import com.zhidao.support.adas.high.permission.dialog.PermissionLongBackgroundRunningDialog; +import androidx.annotation.RequiresApi; /** * 长时间后台运行权限检查 */ +@RequiresApi(api = Build.VERSION_CODES.N) public class BackgrounderPermission { + private static volatile BackgrounderPermission INSTANCE; + private OnAdasPermissionListener listener; + private BackgrounderPermission() { + } + public static BackgrounderPermission getInstance() { + if (INSTANCE == null) { + synchronized (BackgrounderPermission.class) { + if (INSTANCE == null) { + INSTANCE = new BackgrounderPermission(); + } + } + } + return INSTANCE; + } + + public void setListener(OnAdasPermissionListener listener) { + this.listener = listener; + } public void showPermissionLongBackgroundRunningDialog(Context context) { Intent intent = new Intent(context, PermissionLongBackgroundRunningDialog.class); @@ -24,6 +45,12 @@ public class BackgrounderPermission { } + void onBackgrounderPermission(boolean isBackgrounderPermission) { + if (listener != null) { + listener.onBackgrounderPermission(isBackgrounderPermission); + } + } + /** * 获取当前是否开启电池优化 @@ -31,7 +58,7 @@ public class BackgrounderPermission { * @param context 上下文 * @return 否在设备的电源白名单上 true 表示未优化 */ - public boolean isIgnoringBatteryOptimizations(Context context) { + boolean isIgnoringBatteryOptimizations(Context context) { boolean isIgnoring = false; PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (powerManager != null) { @@ -45,10 +72,11 @@ public class BackgrounderPermission { * * @param context */ - public void requestIgnoreBatteryOptimizations(Context context) { + + void requestIgnoreBatteryOptimizations(Activity context) { Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + context.getPackageName())); - context.startActivity(intent); + context.startActivityForResult(intent, PermissionLongBackgroundRunningDialog.REQUEST_CODE_BATTERY_OPTIMIZATIONS); } /** @@ -59,7 +87,7 @@ public class BackgrounderPermission { * @return */ - public boolean isIgnoringMeteredNetworkRestrictions(Context context) { + private boolean isIgnoringMeteredNetworkRestrictions(Context context) { ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 检查设备是否在计费网络 // if (connMgr.isActiveNetworkMetered()) { @@ -90,7 +118,7 @@ public class BackgrounderPermission { /** * 除非应用的核心功能受到不利影响,否则 Google Play 政策禁止应用请求直接豁免 Android 6.0+ 中的电源管理功能(低电耗模式和应用待机模式) */ - public static void requestAddDataSaverWhite(Context context) { + private static void requestAddDataSaverWhite(Context context) { // ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // if (connMgr != null && connMgr.getRestrictBackgroundStatus() == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED) { Intent intent = new Intent(Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS); @@ -101,11 +129,15 @@ public class BackgrounderPermission { /** * 是否允许长时间后台运行 + * 目前测试得出:电池优化会影响后台运行 * * @param context 上下文 * @return */ public boolean isPermissionLongBackgroundRunning(Context context) { - return isIgnoringBatteryOptimizations(context) && isIgnoringMeteredNetworkRestrictions(context); +// return isIgnoringBatteryOptimizations(context) && isIgnoringMeteredNetworkRestrictions(context); + return isIgnoringBatteryOptimizations(context); } + + } diff --git a/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/OnAdasPermissionListener.java b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/OnAdasPermissionListener.java new file mode 100644 index 0000000000..5fd7a694bd --- /dev/null +++ b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/OnAdasPermissionListener.java @@ -0,0 +1,10 @@ +package com.zhidao.support.adas.high.other.permission; + +public interface OnAdasPermissionListener { + /** + * 是否允许后台运行 + * 目前只检查了是否关闭电池优化 + * @param isAllow 是否允许后台运行 + */ + void onBackgrounderPermission(boolean isAllow); +} diff --git a/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/PermissionLongBackgroundRunningDialog.java b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/PermissionLongBackgroundRunningDialog.java new file mode 100644 index 0000000000..7af0a7296b --- /dev/null +++ b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/permission/PermissionLongBackgroundRunningDialog.java @@ -0,0 +1,87 @@ +package com.zhidao.support.adas.high.other.permission; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.text.Html; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; + +import com.zhidao.support.adas.high.other.R; + + +/** + * 数据用量及电池优化 权限申请 + * 高版本Android系统会针对熄屏、休眠或后台 对电池WiFi等进行优化,长时间网络可能会断开连接 + */ +@RequiresApi(api = Build.VERSION_CODES.N) +public class PermissionLongBackgroundRunningDialog extends AppCompatActivity { + public static final int REQUEST_CODE_BATTERY_OPTIMIZATIONS = 0x01; + private TextView hint_battery; + private Button btn_close_battery_optimizations; + private BackgrounderPermission listener; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + overridePendingTransition(R.anim.dialog_in, R.anim.dialog_out); + setContentView(R.layout.dialog_adas_permission_long_background_running); + initView(); + setBatteryHint(); +// //设置弹出窗口与屏幕对齐 +// Window win = this.getWindow(); +// int density = (int) (getResources().getDisplayMetrics().density + 0.5f); +////设置内边距,这里设置为10dp +// win.getDecorView().setPadding(10 * density, 10 * density, 10 * density, 10 * density); +// WindowManager.LayoutParams lp = win.getAttributes(); +////设置窗口宽度 +// lp.width = WindowManager.LayoutParams.MATCH_PARENT; +////设置窗口高度 +// lp.height = WindowManager.LayoutParams.WRAP_CONTENT; +////设置Dialog位置 +// lp.gravity = Gravity.TOP; +// win.setAttributes(lp); + } + + private void initView() { + hint_battery = findViewById(R.id.hint_battery); + btn_close_battery_optimizations = findViewById(R.id.btn_close_battery_optimizations); + btn_close_battery_optimizations.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + BackgrounderPermission.getInstance().requestIgnoreBatteryOptimizations(PermissionLongBackgroundRunningDialog.this); + } + }); + } + + + private boolean setBatteryHint() { + boolean isIgnoringBatteryOptimizations = BackgrounderPermission.getInstance().isIgnoringBatteryOptimizations(this); + btn_close_battery_optimizations.setVisibility(isIgnoringBatteryOptimizations ? View.INVISIBLE : View.VISIBLE); + String str = "电池优化:" + (isIgnoringBatteryOptimizations ? "不优化" : "优化"); + hint_battery.setText(Html.fromHtml(str, Html.FROM_HTML_MODE_LEGACY)); + return isIgnoringBatteryOptimizations; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK) { + if (requestCode == REQUEST_CODE_BATTERY_OPTIMIZATIONS) { + BackgrounderPermission.getInstance().onBackgrounderPermission(setBatteryHint()); + } + } + } + + @Override + public void finish() { + super.finish(); + //在此时设置转场动画 + overridePendingTransition(R.anim.dialog_out, R.anim.dialog_in); + } +} diff --git a/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/PlaceholderFragment.java b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/PlaceholderFragment.java new file mode 100644 index 0000000000..eb24783f71 --- /dev/null +++ b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/PlaceholderFragment.java @@ -0,0 +1,190 @@ +package com.zhidao.support.adas.high.other.router; + +import android.content.Context; +import android.content.SharedPreferences; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.CookieManager; +import android.webkit.JsResult; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ProgressBar; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; + +import com.zhidao.support.adas.high.other.R; + + +/** + * A placeholder fragment containing a simple view. + */ +public class PlaceholderFragment extends Fragment { + private static final String TAG = PlaceholderFragment.class.getSimpleName(); + private static final String ROUTER_URL = "router_url"; + private static final String ROUTER_COOKIE = "router_cookie"; + private String url; + private ProgressBar progressBar; + private WebView webView; + private CookieManager cookieManager; + + private SharedPreferences sharedPreferences; + + public static PlaceholderFragment newInstance(String url) { + PlaceholderFragment fragment = new PlaceholderFragment(); + Bundle bundle = new Bundle(); + bundle.putString(ROUTER_URL, url); + fragment.setArguments(bundle); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + url = getArguments().getString(ROUTER_URL); + } + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_router, container, false); + webView = view.findViewById(R.id.web_view); + progressBar = view.findViewById(R.id.progressbar);//进度条 + if (getActivity() != null) + sharedPreferences = getActivity().getSharedPreferences("adas_config", Context.MODE_PRIVATE); + cookieManager = CookieManager.getInstance(); + cookieManager.setAcceptCookie(true); + initWebView(); + return view; + } + + public void onRefresh() { + webView.reload(); + } + + private void initWebView() { + String cokkie = null; + if (sharedPreferences != null) + cokkie = sharedPreferences.getString(ROUTER_COOKIE, null); + if (cokkie != null && cokkie.length() > 0 && cokkie.contains(url)) { + int index = cokkie.indexOf("##"); + cookieManager.setCookie(this.url, cokkie.substring(index)); + } + webView.loadUrl(url);//加载url + webView.addJavascriptInterface(this, "android");//添加js监听 这样html就能调用客户端 + webView.setWebChromeClient(webChromeClient); + webView.setWebViewClient(webViewClient); + WebSettings webSettings = webView.getSettings(); + webSettings.setJavaScriptEnabled(true);//允许使用js + + /** + * LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据 + * LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。 + * LOAD_NO_CACHE: 不使用缓存,只从网络获取数据. + * LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。 + */ + webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存,只从网络获取数据. + //支持屏幕缩放 + webSettings.setSupportZoom(true); + webSettings.setBuiltInZoomControls(true); + //不显示webview缩放按钮 + webSettings.setDisplayZoomControls(false); +// webSettings.setUseWideViewPort(true);//自适应屏幕 + webSettings.setLoadWithOverviewMode(true); + webSettings.setAllowFileAccess(true); + webSettings.setAppCacheEnabled(true); + webSettings.setDomStorageEnabled(true); + webSettings.setDatabaseEnabled(true); + + } + + //WebViewClient主要帮助WebView处理各种通知、请求事件 + private final WebViewClient webViewClient = new WebViewClient() { + @Override + public void onPageFinished(WebView view, String url) {//页面加载完成 + progressBar.setVisibility(View.GONE); + String oldCookie = cookieManager.getCookie(url); + if (!TextUtils.isEmpty(oldCookie)) { + String cokkie = null; + if (sharedPreferences != null) + cokkie = sharedPreferences.getString(ROUTER_COOKIE, null); + if (!TextUtils.equals(cokkie, oldCookie)) { + sharedPreferences.edit().putString(url + "##" + ROUTER_COOKIE, oldCookie).apply(); + } + } + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载 + progressBar.setVisibility(View.VISIBLE); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + //返回true 拦截 + return super.shouldOverrideUrlLoading(view, url); + } + + }; + + //WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等 + private final WebChromeClient webChromeClient = new WebChromeClient() { + //不支持js的alert弹窗,需要自己监听然后通过dialog弹窗 + @Override + public boolean onJsAlert(WebView webView, String url, String message, JsResult result) { + AlertDialog.Builder localBuilder = new AlertDialog.Builder(webView.getContext()); + localBuilder.setMessage(message).setPositiveButton("确定", null); + localBuilder.setCancelable(false); + localBuilder.create().show(); + + //注意: + //必须要这一句代码:result.confirm()表示: + //处理结果为确定状态同时唤醒WebCore线程 + //否则不能继续点击按钮 + result.confirm(); + return true; + } + + //获取网页标题 + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + Log.i(TAG, "网页标题:" + title); + } + + //加载进度回调 + @Override + public void onProgressChanged(WebView view, int newProgress) { + progressBar.setProgress(newProgress); + } + }; + + public boolean onKeyDownChild(int keyCode) { + Log.i(TAG, "是否有上一个页面:" + webView.canGoBack()); + if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) {//点击返回按钮的时候判断有没有上一页 + webView.goBack(); // goBack()表示返回webView的上一页面 + return true; + } + return false; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + //释放资源 + webView.destroy(); + webView = null; + } + + +} \ No newline at end of file diff --git a/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/RouterActivity.java b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/RouterActivity.java new file mode 100644 index 0000000000..d4e7bda46a --- /dev/null +++ b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/RouterActivity.java @@ -0,0 +1,108 @@ +package com.zhidao.support.adas.high.other.router; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.widget.ViewPager2; + +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; +import com.zhidao.support.adas.high.other.R; + + +public class RouterActivity extends AppCompatActivity { + private static final String[] TAB_TITLES = new String[]{"Bus", "Taxi"}; + private boolean isBus; + private int currentPosition = 0;//默认选中bus + + public static void newInstance(Context context, boolean isBus) { + Intent intent = new Intent(context, RouterActivity.class); + intent.putExtra("is_bus", isBus); + context.startActivity(intent); + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_router); + SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, TAB_TITLES); + ViewPager2 viewPager = findViewById(R.id.view_pager); + + viewPager.setAdapter(sectionsPagerAdapter); + TabLayout tabs = findViewById(R.id.tabs); + viewPager.setOffscreenPageLimit(1); + TabLayoutMediator mediator = new TabLayoutMediator(tabs, viewPager, new TabLayoutMediator.TabConfigurationStrategy() { + @Override + public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { + tab.setText(TAB_TITLES[position]); + } + }); + mediator.attach(); + viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); + } + + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + currentPosition = position; + Log.i("dddd", "当前 Pos=" + currentPosition); + } + }); + findViewById(R.id.close).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!isClose(KeyEvent.KEYCODE_BACK)) + finish(); + } + }); + findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PlaceholderFragment fragment = (PlaceholderFragment) getViewPagerFragment(currentPosition); + if (fragment != null) { + fragment.onRefresh(); + } + } + }); + + Intent intent = getIntent(); + if (intent != null) { + isBus = intent.getBooleanExtra("is_bus", true); + } + currentPosition = isBus ? 0 : 1; + viewPager.setCurrentItem(currentPosition, false); + } + + /** + * @param position fragment 的位置 + * @return + */ + private Fragment getViewPagerFragment(int position) { + return getSupportFragmentManager().findFragmentByTag("f" + position); + } + + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + return isClose(keyCode) || super.onKeyDown(keyCode, event); + } + + private boolean isClose(int keyCode) { + PlaceholderFragment fragment = (PlaceholderFragment) getViewPagerFragment(currentPosition); + if (fragment != null) { + return fragment.onKeyDownChild(keyCode); + } + return false; + } +} \ No newline at end of file diff --git a/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/SectionsPagerAdapter.java b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/SectionsPagerAdapter.java new file mode 100644 index 0000000000..4e01e40871 --- /dev/null +++ b/libraries/mogo-adas-other/src/main/java/com/zhidao/support/adas/high/other/router/SectionsPagerAdapter.java @@ -0,0 +1,41 @@ +package com.zhidao.support.adas.high.other.router; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import java.util.HashMap; +import java.util.Map; + + +public class SectionsPagerAdapter extends FragmentStateAdapter { + + private final String[] TAB_TITLES; + public final Map fragments = new HashMap<>(); + private final FragmentActivity fragmentActivity; + + public SectionsPagerAdapter(@NonNull FragmentActivity fragmentActivity, String[] TAB_TITLES) { + super(fragmentActivity); + this.fragmentActivity = fragmentActivity; + this.TAB_TITLES = TAB_TITLES; + } + + + @NonNull + @Override + public Fragment createFragment(int position) { + String url = "192.168.1.1"; + if ("Bus".equals(TAB_TITLES[position])) { + url = "192.168.8.1"; + } + return PlaceholderFragment.newInstance(url); + } + + + @Override + public int getItemCount() { + return TAB_TITLES.length; + } + +} \ No newline at end of file diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_in.xml b/libraries/mogo-adas-other/src/main/res/anim/dialog_in.xml similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_in.xml rename to libraries/mogo-adas-other/src/main/res/anim/dialog_in.xml diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_out.xml b/libraries/mogo-adas-other/src/main/res/anim/dialog_out.xml similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/src/main/res/anim/dialog_out.xml rename to libraries/mogo-adas-other/src/main/res/anim/dialog_out.xml diff --git a/libraries/mogo-adas-backgrounder-permission/src/main/res/drawable/bg_adas_dialog.xml b/libraries/mogo-adas-other/src/main/res/drawable/bg_adas_dialog.xml similarity index 100% rename from libraries/mogo-adas-backgrounder-permission/src/main/res/drawable/bg_adas_dialog.xml rename to libraries/mogo-adas-other/src/main/res/drawable/bg_adas_dialog.xml diff --git a/libraries/mogo-adas-other/src/main/res/layout/activity_router.xml b/libraries/mogo-adas-other/src/main/res/layout/activity_router.xml new file mode 100644 index 0000000000..0abd4797e8 --- /dev/null +++ b/libraries/mogo-adas-other/src/main/res/layout/activity_router.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + +