/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+8-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
9 android:targetSdkVersion="22" />
-9-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+9-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
10
11
-11-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:5-79
-11-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:22-76
+11-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:5-79
+11-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:22-76
12
-12-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:5-76
-12-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:22-73
+12-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:5-76
+12-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:22-73
13
-13-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:5-67
-13-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:22-64
+13-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:5-67
+13-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:22-64
14
15
16
-16-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:5-75
-16-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:22-72
+16-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:5-75
+16-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:22-72
17
18
19
-19-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:5-81
-19-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:22-78
+19-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:5-81
+19-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:22-78
20
21
-21-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:14:5-18:19
+21-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:14:5-18:19
22 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:9-86
+22-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:9-86
23 android:name="HTTP_DNS_APP_KEY"
-23-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:20-51
+23-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:20-51
24 android:value="0I00093F244N42WU" />
-24-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:52-84
+24-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:52-84
25 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:9-69
+25-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:9-69
26 android:name="HTTP_DNS_ID"
-26-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:20-46
+26-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:20-46
27 android:value="2742" />
-27-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:47-67
+27-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:47-67
28 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:9-74
+28-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:9-74
29 android:name="HTTP_DNS_KEY"
-29-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:20-47
+29-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:20-47
30 android:value="7Pplkaua" />
-30-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:48-72
+30-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:48-72
31
32
33
diff --git a/foudations/httpdns-tencent/build/outputs/logs/manifest-merger-debug-report.txt b/foudations/httpdns-tencent/build/outputs/logs/manifest-merger-debug-report.txt
index 106aa807d3..c071e1aed8 100644
--- a/foudations/httpdns-tencent/build/outputs/logs/manifest-merger-debug-report.txt
+++ b/foudations/httpdns-tencent/build/outputs/logs/manifest-merger-debug-report.txt
@@ -1,77 +1,77 @@
-- Merging decision tree log ---
manifest
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
package
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:2:5-31
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:2:5-31
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
android:versionName
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
android:versionCode
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:1-19:12
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
xmlns:android
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:11-69
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:1:11-69
uses-permission#android.permission.ACCESS_NETWORK_STATE
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:5-79
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:5-79
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:22-76
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:4:22-76
uses-permission#android.permission.ACCESS_WIFI_STATE
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:5-76
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:5-76
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:22-73
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:5:22-73
uses-permission#android.permission.INTERNET
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:5-67
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:5-67
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:22-64
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:6:22-64
uses-permission#android.permission.READ_PHONE_STATE
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:5-75
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:5-75
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:22-72
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:9:22-72
uses-permission#android.permission.WRITE_EXTERNAL_STORAGE
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:5-81
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:5-81
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:22-78
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:12:22-78
application
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:14:5-18:19
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:14:5-18:19
meta-data#HTTP_DNS_APP_KEY
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:9-86
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:9-86
android:value
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:52-84
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:52-84
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:20-51
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:15:20-51
meta-data#HTTP_DNS_ID
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:9-69
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:9-69
android:value
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:47-67
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:47-67
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:20-46
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:16:20-46
meta-data#HTTP_DNS_KEY
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:9-74
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:9-74
android:value
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:48-72
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:48-72
android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:20-47
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml:17:20-47
uses-sdk
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml reason: use-sdk injection requested
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml reason: use-sdk injection requested
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
android:targetSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
android:minSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/httpdns-tencent/src/main/AndroidManifest.xml
diff --git a/foudations/httpdns-tencent/consumer-rules.pro b/foudations/httpdns-tencent/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/foudations/httpdns-tencent/gradle.properties b/foudations/httpdns-tencent/gradle.properties
new file mode 100644
index 0000000000..32c09bbf9b
--- /dev/null
+++ b/foudations/httpdns-tencent/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.httpdns
+POM_ARTIFACT_ID=httpdns-tencent
+VERSION_CODE=1
\ No newline at end of file
diff --git a/foudations/httpdns-tencent/proguard-rules.pro b/foudations/httpdns-tencent/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/foudations/httpdns-tencent/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/foudations/httpdns-tencent/src/main/AndroidManifest.xml b/foudations/httpdns-tencent/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..a30884aeb4
--- /dev/null
+++ b/foudations/httpdns-tencent/src/main/AndroidManifest.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/foudations/httpdns-tencent/src/main/java/com/mogo/httpdns/tencent/HttpDnsIpsCache.java b/foudations/httpdns-tencent/src/main/java/com/mogo/httpdns/tencent/HttpDnsIpsCache.java
new file mode 100644
index 0000000000..0e3d0feca4
--- /dev/null
+++ b/foudations/httpdns-tencent/src/main/java/com/mogo/httpdns/tencent/HttpDnsIpsCache.java
@@ -0,0 +1,171 @@
+package com.mogo.httpdns.tencent;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.text.TextUtils;
+
+import com.mogo.httpdns.IHttpDnsTtlCallback;
+import com.mogo.utils.ThreadPoolService;
+import com.mogo.utils.logger.Logger;
+import com.tencent.msdk.dns.MSDKDnsResolver;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author congtaowang
+ * @since 2020/11/18
+ *
+ * 描述
+ */
+class HttpDnsIpsCache {
+
+ private static final String TAG = "HttpDnsIpsCache";
+
+ // 缓存过期时间
+ public static final long INTERVAL_CACHE = 1 * 60 * 1000;
+
+ // 刷新缓存时间
+ public static final long TTL = ( long ) ( INTERVAL_CACHE * 0.75 );
+
+ // 使用dns新域名
+ public static final int MSG_DNS_FLUSH = 6000000;
+ // ttl
+ public static final int MSG_DNS_TTL = 6000001;
+
+ private static Map< String, String > sCaches = new ConcurrentHashMap<>();
+ private static Map< String, String > sTTLCaches = new ConcurrentHashMap<>();
+
+ private static Map< String, IHttpDnsTtlCallback > sTtlCallbacks = new ConcurrentHashMap<>();
+
+ private static Handler sHandler = new Handler( Looper.getMainLooper() ) {
+ @Override
+ public void handleMessage( Message msg ) {
+ super.handleMessage( msg );
+ if ( msg.what == MSG_DNS_FLUSH ) {
+ flushNewDnsCache();
+ postTtlCallback();
+ loopDnsParse();
+ } else if ( msg.what == MSG_DNS_TTL ) {
+ parseHosts();
+ }
+ }
+ };
+
+ /**
+ * 将 ttl 消息回调
+ */
+ static void postTtlCallback() {
+ if ( sTtlCallbacks.isEmpty() ) {
+ return;
+ }
+ Collection< IHttpDnsTtlCallback > callbacks = sTtlCallbacks.values();
+ if ( callbacks == null || callbacks.isEmpty() ) {
+ return;
+ }
+ for ( IHttpDnsTtlCallback callback : callbacks ) {
+ if ( callback == null ) {
+ continue;
+ }
+ try {
+ callback.onTtl();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * 缓存域名
+ *
+ * @param host
+ * @param ip
+ */
+ static void cache( String host, String ip ) {
+ sCaches.put( host, ip );
+ }
+
+ /**
+ * 获取缓存中的域名
+ *
+ * @param host
+ * @return
+ */
+ static String getHttpDnsIps( String host ) {
+ return sCaches.get( host );
+ }
+
+ /**
+ * 使用新的 dns 缓存
+ */
+ static void flushNewDnsCache() {
+ sCaches.clear();
+ sCaches.putAll( sTTLCaches );
+ }
+
+ /**
+ * ttl 到达后,刷新一遍 dns 域名
+ */
+ static void loopDnsParse() {
+ Logger.d( TAG, "使用新的dns列表" );
+ sHandler.sendEmptyMessageDelayed( MSG_DNS_FLUSH, INTERVAL_CACHE );
+ sHandler.sendEmptyMessageDelayed( MSG_DNS_TTL, TTL );
+ }
+
+ /**
+ * ttl 到期,刷新域名
+ */
+ static void parseHosts() {
+ Logger.d( TAG, "ttl 过期,刷新dns列表" );
+ ThreadPoolService.execute( new Runnable() {
+ @Override
+ public void run() {
+ Set< String > hostSet = sCaches.keySet();
+ if ( hostSet.isEmpty() ) {
+ return;
+ }
+ for ( String host : hostSet ) {
+ String newIp = parseHostFromHttpDns( host );
+ if ( TextUtils.isEmpty( newIp ) ) {
+ continue;
+ }
+ sTTLCaches.put( host, newIp );
+ }
+ }
+ } );
+ }
+
+ /**
+ * 使用腾讯服务解析域名
+ *
+ * @param host
+ * @return
+ */
+ static String parseHostFromHttpDns( String host ) {
+ String ips = MSDKDnsResolver.getInstance().getAddrByName( host );
+ String[] ipArr = ips.split( ";" );
+ if ( 0 == ipArr.length ) {
+ return null;
+ }
+ for ( String ip : ipArr ) {
+ if ( TextUtils.isEmpty( ip ) || TextUtils.equals( "0", ip ) ) {
+ continue;
+ }
+ Logger.d( TAG, "parse: %s - %s", host, ip );
+ return ip;
+ }
+ return null;
+ }
+
+
+ static void addHttpDnsTtlCallback( String host, IHttpDnsTtlCallback callback ) {
+ sTtlCallbacks.put( host, callback );
+ }
+
+ static void removeHttpDnsTtlCallback( String host ) {
+ sTtlCallbacks.remove( host );
+ }
+}
diff --git a/foudations/httpdns-tencent/src/main/java/com/mogo/httpdns/tencent/TencentHttpDns.java b/foudations/httpdns-tencent/src/main/java/com/mogo/httpdns/tencent/TencentHttpDns.java
new file mode 100644
index 0000000000..b975630e8f
--- /dev/null
+++ b/foudations/httpdns-tencent/src/main/java/com/mogo/httpdns/tencent/TencentHttpDns.java
@@ -0,0 +1,116 @@
+package com.mogo.httpdns.tencent;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.httpdns.HttpDnsConst;
+import com.mogo.httpdns.IHttpDnsCallback;
+import com.mogo.httpdns.IHttpDnsTtlCallback;
+import com.mogo.httpdns.IMogoHttpDns;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.HttpDns;
+import com.tencent.msdk.dns.MSDKDnsResolver;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/11/18
+ *
+ * 描述
+ */
+@Route( path = HttpDnsConst.PATH )
+class TencentHttpDns implements IMogoHttpDns, HttpDns {
+
+ private static volatile boolean sInited = false;
+
+ private static final String TAG = "TencentHttpDns";
+
+ @Override
+ public HttpDns dns() {
+ return this;
+ }
+
+ @Override
+ public List< InetAddress > lookup( String hostname ) throws UnknownHostException {
+ Logger.d( TAG, "需要dns解析" );
+ String cacheIp = getCacheOrParseIpIfNecessary( hostname );
+ if ( TextUtils.isEmpty( cacheIp ) ) {
+ return Collections.emptyList();
+ }
+
+ return Arrays.asList( InetAddress.getAllByName( cacheIp ) );
+ }
+
+ @Override
+ public String getCachedHttpDnsIps( String host ) {
+ return HttpDnsIpsCache.getHttpDnsIps( host );
+ }
+
+ private String getCacheOrParseIpIfNecessary( String host ) {
+ String cacheIp = HttpDnsIpsCache.getHttpDnsIps( host );
+ if ( TextUtils.isEmpty( cacheIp ) ) {
+ cacheIp = HttpDnsIpsCache.parseHostFromHttpDns( host );
+ if ( !TextUtils.isEmpty( cacheIp ) ) {
+ HttpDnsIpsCache.cache( host, cacheIp );
+ }
+ }
+ return cacheIp;
+ }
+
+ @Override
+ public void getHttpDnsIp( String host, boolean useCache, IHttpDnsCallback callback ) {
+ String cacheIp = null;
+ if ( useCache ) {
+ cacheIp = getCacheOrParseIpIfNecessary( host );
+ } else {
+ cacheIp = HttpDnsIpsCache.parseHostFromHttpDns( host );
+ if ( !TextUtils.isEmpty( cacheIp ) ) {
+ HttpDnsIpsCache.cache( host, cacheIp );
+ }
+ }
+ if ( !TextUtils.isEmpty( cacheIp ) ) {
+ if ( callback != null ) {
+ callback.onParsed( cacheIp );
+ return;
+ }
+ }
+ if ( callback != null ) {
+ callback.onParsed( null );
+ }
+ }
+
+ @Override
+ public void addHttpDnsTtlCallback( String host, IHttpDnsTtlCallback callback ) {
+ HttpDnsIpsCache.addHttpDnsTtlCallback( host, callback );
+ }
+
+ @Override
+ public void removeHttpDnsTtlCallback( String host ) {
+ HttpDnsIpsCache.removeHttpDnsTtlCallback( host );
+ }
+
+ @Override
+ public void init( Context context ) {
+ if ( sInited ) {
+ return;
+ }
+ MSDKDnsResolver.getInstance().init( context.getApplicationContext(),
+ "0I00093F244N42WU",
+ "2742",
+ "7Pplkaua",
+ DebugConfig.isDebug(),
+ 1_000
+ );
+ MSDKDnsResolver.getInstance().WGSetDnsOpenId( "1AE58PG9444E3G9L" );
+ HttpDnsIpsCache.loopDnsParse();
+ sInited = true;
+ }
+}
diff --git a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java
index f49e36068e..a89c7c6b7c 100644
--- a/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java
+++ b/foudations/mogo-base-services-apk/src/main/java/com/mogo/base/services/socket/SocketManager.java
@@ -95,7 +95,7 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac
try {
MogoConnsvr.Payload payload = MogoConnsvr.Payload.parseFrom( content );
int msgType = payload.getMsgType();
- Logger.d( TAG, "received msg type = %d", msgType );
+ Logger.d( TAG, "received msg type = " + msgType );
List< IMogoOnMessageListener > listeners = mListeners.get( msgType );
if ( listeners != null && !listeners.isEmpty() ) {
Iterator< IMogoOnMessageListener > iterator = listeners.iterator();
diff --git a/foudations/mogo-base-websocket-sdk/.gitignore b/foudations/mogo-base-websocket-sdk/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/build.gradle b/foudations/mogo-base-websocket-sdk/build.gradle
new file mode 100644
index 0000000000..30bfc4afea
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/build.gradle
@@ -0,0 +1,49 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion rootProject.ext.android.compileSdkVersion
+
+ 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"
+ }
+
+ 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.arouter
+
+ implementation "com.mogo.module.carchatting:module-carchatt-socket:1.1.2"
+
+ if (Boolean.valueOf(RELEASE)) {
+ implementation rootProject.ext.dependencies.mogoutils
+ implementation rootProject.ext.dependencies.mogocommons
+ implementation rootProject.ext.dependencies.mogoserviceapi
+ } else {
+ implementation project(":foudations:mogo-utils")
+ implementation project(":foudations:mogo-commons")
+ implementation project(":services:mogo-service-api")
+ implementation project(':modules:mogo-module-common')
+ }
+ implementation project(':foudations:httpdns-base')
+
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/compile_library_classes/debug/classes.jar b/foudations/mogo-base-websocket-sdk/build/intermediates/compile_library_classes/debug/classes.jar
index 10af1b99b8..812f61cee9 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/compile_library_classes/debug/classes.jar and b/foudations/mogo-base-websocket-sdk/build/intermediates/compile_library_classes/debug/classes.jar differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar b/foudations/mogo-base-websocket-sdk/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar
index 977a9a1e96..d8fd43bc2c 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar and b/foudations/mogo-base-websocket-sdk/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/debug-mergeNativeLibs/merge-state b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/debug-mergeNativeLibs/merge-state
deleted file mode 100644
index df183d6b90..0000000000
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/debug-mergeNativeLibs/merge-state and /dev/null differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
index 5f3a30fa23..cc8d9bcbdf 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugShaders/merger.xml b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugShaders/merger.xml
index 83d6e1e351..a63d5cf987 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugShaders/merger.xml
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/mergeDebugShaders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugAssets/merger.xml b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugAssets/merger.xml
index f8f788dca1..c1a0c44ab5 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugAssets/merger.xml
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugAssets/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
index 100683dd06..a821a655ae 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
@@ -1 +1 @@
-#Mon Dec 07 12:00:01 CST 2020
+#Wed Nov 11 09:57:53 CST 2020
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/merger.xml b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/merger.xml
index 022459aec4..de932b34c6 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/merger.xml
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/incremental/packageDebugResources/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketConstant.class b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketConstant.class
index ff63d4ff98..ff82d12792 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketConstant.class and b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketConstant.class differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketData.class b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketData.class
index 0f38d746a3..28ee129a54 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketData.class and b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketData.class differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketDnsManager.class b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketDnsManager.class
index 0c42a6bd5f..a3357d3ec4 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketDnsManager.class and b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketDnsManager.class differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager$1.class b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager$1.class
index 2c5d4f03d1..8fa5d1d18f 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager$1.class and b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager$1.class differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager.class b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager.class
index c0ecee30d0..265c7e3823 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager.class and b/foudations/mogo-base-websocket-sdk/build/intermediates/javac/debug/classes/com/mogo/base/websocket/WebSocketManager.class differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/foudations/mogo-base-websocket-sdk/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
index 30d6871547..49d275f4a5 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
@@ -6,9 +6,9 @@
6
7 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+8-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
9 android:targetSdkVersion="22" />
-9-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+9-->/Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
10 /
11
12
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt b/foudations/mogo-base-websocket-sdk/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt
index f0e8e4ff0a..b707930a3b 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt
@@ -43,6 +43,7 @@ array map_style_value
array mapdist
array mapscale
array values_list_preference
+attr OtherHeartImg
attr actionBarDivider
attr actionBarItemBackground
attr actionBarPopupTheme
@@ -565,6 +566,7 @@ color material_grey_600
color material_grey_800
color material_grey_850
color material_grey_900
+color module_commons_FFF_333
color module_commons_dlg_bkg
color module_commons_wm_dialog_text_textColor
color modules_commons_toast_text_color
@@ -1757,6 +1759,9 @@ dimen module_commons_toast_with_left_drawable_marginBottom
dimen module_commons_toast_with_left_drawable_marginLeft
dimen module_commons_toast_with_left_drawable_marginTop
dimen module_commons_toast_y_offset
+dimen module_map_amap_my_location_bg_size
+dimen module_map_amap_my_location_icon_height
+dimen module_map_amap_my_location_icon_width
dimen module_service_content_minWidth
dimen module_service_content_textSize
dimen module_service_id_marker_content_paddingRight
@@ -1827,6 +1832,7 @@ dimen padding_medium
dimen padding_small
dimen panel_list_item_title_size
dimen path_width
+dimen ratingbar_padding
dimen scale
dimen share_item_address
dimen sp_10
@@ -2101,7 +2107,9 @@ drawable ic_snapshot_ph
drawable icon_default_user_head
drawable icon_heart_choose
drawable icon_heart_second
+drawable icon_heart_second_other
drawable icon_heart_unchoose
+drawable icon_heart_unchoose_other
drawable icon_map_marker_4s
drawable icon_map_marker_book
drawable icon_map_marker_car_gray
@@ -2157,12 +2165,47 @@ drawable mapcolor
drawable mapscale
drawable marker_blue
drawable menu_left_btn_p
+drawable module_common_close_selector
drawable module_common_default_user_head
+drawable module_common_ic_rc_accident3
+drawable module_common_ic_rc_accident3_white
+drawable module_common_ic_rc_dark_frog2
+drawable module_common_ic_rc_dark_frog2_white
+drawable module_common_ic_rc_freeze2
+drawable module_common_ic_rc_freeze2_white
+drawable module_common_ic_rc_illegal_park
+drawable module_common_ic_rc_illegal_park_white
+drawable module_common_ic_rc_parking2
+drawable module_common_icon_close
+drawable module_common_icon_close_press
+drawable module_common_icon_map_marker_4s
+drawable module_common_icon_map_marker_living
+drawable module_common_icon_map_marker_living_white
+drawable module_common_icon_map_marker_pondingl2
+drawable module_common_icon_map_marker_pondingl2_white
+drawable module_common_icon_map_marker_refuel
+drawable module_common_icon_map_marker_road_block_off2
+drawable module_common_icon_map_marker_road_block_off2_white
+drawable module_common_icon_map_marker_road_block_up2
+drawable module_common_icon_map_marker_road_block_up2_white
+drawable module_common_icon_map_marker_road_check2
+drawable module_common_icon_map_marker_road_check2_white
+drawable module_common_icon_map_marker_road_work2
+drawable module_common_icon_map_marker_road_work2_white
+drawable module_common_icon_map_marker_shear_news
+drawable module_common_icon_map_marker_shop
+drawable module_common_icon_map_marker_shop_discount
+drawable module_common_icon_seek_help
+drawable module_common_my_location_bg
drawable module_common_online_car_vr_left
drawable module_common_online_car_vr_machine_middle
drawable module_common_online_car_vr_middle
drawable module_common_online_car_vr_reverse
drawable module_common_online_car_vr_right
+drawable module_common_selector_call
+drawable module_commons_dialog_bg
+drawable module_commons_dialog_left_bg
+drawable module_commons_dialog_right_bg
drawable module_commons_heart_ratingbar_drawable
drawable module_commons_machine_car_other_left_normal
drawable module_commons_machine_car_other_left_reverse_normal
@@ -2190,6 +2233,10 @@ drawable module_commons_user_car_self
drawable module_commons_user_car_self_left
drawable module_commons_user_car_self_right
drawable module_dw_common_corner_bkg_light
+drawable module_ext_drawable_shadow_bg
+drawable module_ext_shadow_bkg
+drawable module_ext_shadow_bkg_pressed
+drawable module_map_amap_my_location_icon
drawable module_service_ic_call
drawable module_service_ic_rc_accident
drawable module_service_ic_rc_accident2
@@ -2239,6 +2286,8 @@ drawable result_color
drawable seagreen
drawable search_information_normal
drawable search_information_press
+drawable selector_call_btn_normal
+drawable selector_call_btn_pressed
drawable selector_nav_btn
drawable shadow_left
drawable shadow_line
@@ -2504,6 +2553,8 @@ id module_commons_toast_msg
id module_commons_wm_dialog_button_cancel
id module_commons_wm_dialog_button_ok
id module_commons_wm_dialog_content
+id module_map_amap_my_location_bg_iv
+id module_map_amap_my_location_iv
id movePathView
id multiply
id navi_sdk_tmc_bar_container
@@ -2740,10 +2791,12 @@ layout layout_panel_guidance
layout modeules_commons_layout_custom_ratingbar
layout modudle_services_marker_layout
layout modudle_services_marker_layout_info
+layout module_common_my_location
layout module_commons_layout_car
layout module_commons_layout_toast
layout module_commons_layout_toast_with_left_drawable
layout module_commons_layout_wm_dialog
+layout module_map_amap_my_location
layout navi_control_btn
layout network_loading_item
layout notification_action
@@ -3533,7 +3586,7 @@ styleable ConstraintSet android_alpha android_elevation android_id android_layou
styleable CoordinatorLayout keylines statusBarBackground
styleable CoordinatorLayout_Layout android_layout_gravity layout_anchor layout_anchorGravity layout_behavior layout_dodgeInsetEdges layout_insetEdge layout_keyline
styleable CustomCircleImageView civ_border_color civ_border_overlay civ_border_width civ_fill_color
-styleable CustomRatingBar clickable elenmentCount elenmentEmpty elenmentFill elenmentHarf elenmentHeight elenmentPadding elenmentStep elenmentWidth stepSize
+styleable CustomRatingBar OtherHeartImg clickable elenmentCount elenmentEmpty elenmentFill elenmentHarf elenmentHeight elenmentPadding elenmentStep elenmentWidth stepSize
styleable DiscreteScrollView dsv_orientation
styleable DrawerArrowToggle arrowHeadLength arrowShaftLength barLength color drawableSize gapBetweenBars spinBars thickness
styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/runtime_library_classes/debug/classes.jar b/foudations/mogo-base-websocket-sdk/build/intermediates/runtime_library_classes/debug/classes.jar
index 10af1b99b8..812f61cee9 100644
Binary files a/foudations/mogo-base-websocket-sdk/build/intermediates/runtime_library_classes/debug/classes.jar and b/foudations/mogo-base-websocket-sdk/build/intermediates/runtime_library_classes/debug/classes.jar differ
diff --git a/foudations/mogo-base-websocket-sdk/build/intermediates/symbols/debug/R.txt b/foudations/mogo-base-websocket-sdk/build/intermediates/symbols/debug/R.txt
index c7baf2de78..90e94ac6bf 100644
--- a/foudations/mogo-base-websocket-sdk/build/intermediates/symbols/debug/R.txt
+++ b/foudations/mogo-base-websocket-sdk/build/intermediates/symbols/debug/R.txt
@@ -42,449 +42,450 @@ int array map_style_value 0x7f030005
int array mapdist 0x7f030006
int array mapscale 0x7f030007
int array values_list_preference 0x7f030008
-int attr actionBarDivider 0x7f040001
-int attr actionBarItemBackground 0x7f040002
-int attr actionBarPopupTheme 0x7f040003
-int attr actionBarSize 0x7f040004
-int attr actionBarSplitStyle 0x7f040005
-int attr actionBarStyle 0x7f040006
-int attr actionBarTabBarStyle 0x7f040007
-int attr actionBarTabStyle 0x7f040008
-int attr actionBarTabTextStyle 0x7f040009
-int attr actionBarTheme 0x7f04000a
-int attr actionBarWidgetTheme 0x7f04000b
-int attr actionButtonStyle 0x7f04000c
-int attr actionDropDownStyle 0x7f04000d
-int attr actionLayout 0x7f04000e
-int attr actionMenuTextAppearance 0x7f04000f
-int attr actionMenuTextColor 0x7f040010
-int attr actionModeBackground 0x7f040011
-int attr actionModeCloseButtonStyle 0x7f040012
-int attr actionModeCloseDrawable 0x7f040013
-int attr actionModeCopyDrawable 0x7f040014
-int attr actionModeCutDrawable 0x7f040015
-int attr actionModeFindDrawable 0x7f040016
-int attr actionModePasteDrawable 0x7f040017
-int attr actionModePopupWindowStyle 0x7f040018
-int attr actionModeSelectAllDrawable 0x7f040019
-int attr actionModeShareDrawable 0x7f04001a
-int attr actionModeSplitBackground 0x7f04001b
-int attr actionModeStyle 0x7f04001c
-int attr actionModeWebSearchDrawable 0x7f04001d
-int attr actionOverflowButtonStyle 0x7f04001e
-int attr actionOverflowMenuStyle 0x7f04001f
-int attr actionProviderClass 0x7f040020
-int attr actionViewClass 0x7f040021
-int attr activityChooserViewStyle 0x7f040022
-int attr actualImageScaleType 0x7f040023
-int attr actualImageUri 0x7f040024
-int attr alertDialogButtonGroupStyle 0x7f040025
-int attr alertDialogCenterButtons 0x7f040026
-int attr alertDialogStyle 0x7f040027
-int attr alertDialogTheme 0x7f040028
-int attr allowStacking 0x7f040029
-int attr alpha 0x7f04002a
-int attr alphabeticModifiers 0x7f04002b
-int attr arrowHeadLength 0x7f04002c
-int attr arrowShaftLength 0x7f04002d
-int attr autoCompleteTextViewStyle 0x7f04002e
-int attr autoSizeMaxTextSize 0x7f04002f
-int attr autoSizeMinTextSize 0x7f040030
-int attr autoSizePresetSizes 0x7f040031
-int attr autoSizeStepGranularity 0x7f040032
-int attr autoSizeTextType 0x7f040033
-int attr background 0x7f040034
-int attr backgroundImage 0x7f040035
-int attr backgroundSplit 0x7f040036
-int attr backgroundStacked 0x7f040037
-int attr backgroundTint 0x7f040038
-int attr backgroundTintMode 0x7f040039
-int attr barLength 0x7f04003a
-int attr barrierAllowsGoneWidgets 0x7f04003b
-int attr barrierDirection 0x7f04003c
-int attr borderlessButtonStyle 0x7f04003d
-int attr buttonBarButtonStyle 0x7f04003e
-int attr buttonBarNegativeButtonStyle 0x7f04003f
-int attr buttonBarNeutralButtonStyle 0x7f040040
-int attr buttonBarPositiveButtonStyle 0x7f040041
-int attr buttonBarStyle 0x7f040042
-int attr buttonCompat 0x7f040043
-int attr buttonGravity 0x7f040044
-int attr buttonIconDimen 0x7f040045
-int attr buttonPanelSideLayout 0x7f040046
-int attr buttonStyle 0x7f040047
-int attr buttonStyleSmall 0x7f040048
-int attr buttonTint 0x7f040049
-int attr buttonTintMode 0x7f04004a
-int attr cardBackgroundColor 0x7f04004b
-int attr cardCornerRadius 0x7f04004c
-int attr cardElevation 0x7f04004d
-int attr cardMaxElevation 0x7f04004e
-int attr cardPreventCornerOverlap 0x7f04004f
-int attr cardUseCompatPadding 0x7f040050
-int attr cardViewStyle 0x7f040051
-int attr chainUseRtl 0x7f040052
-int attr checkboxStyle 0x7f040053
-int attr checkedTextViewStyle 0x7f040054
-int attr civ_border_color 0x7f040055
-int attr civ_border_overlay 0x7f040056
-int attr civ_border_width 0x7f040057
-int attr civ_fill_color 0x7f040058
-int attr clickable 0x7f040059
-int attr closeIcon 0x7f04005a
-int attr closeItemLayout 0x7f04005b
-int attr collapseContentDescription 0x7f04005c
-int attr collapseIcon 0x7f04005d
-int attr color 0x7f04005e
-int attr colorAccent 0x7f04005f
-int attr colorBackgroundFloating 0x7f040060
-int attr colorButtonNormal 0x7f040061
-int attr colorControlActivated 0x7f040062
-int attr colorControlHighlight 0x7f040063
-int attr colorControlNormal 0x7f040064
-int attr colorError 0x7f040065
-int attr colorPrimary 0x7f040066
-int attr colorPrimaryDark 0x7f040067
-int attr colorSwitchThumbNormal 0x7f040068
-int attr commitIcon 0x7f040069
-int attr constraintSet 0x7f04006a
-int attr constraint_referenced_ids 0x7f04006b
-int attr content 0x7f04006c
-int attr contentDescription 0x7f04006d
-int attr contentInsetEnd 0x7f04006e
-int attr contentInsetEndWithActions 0x7f04006f
-int attr contentInsetLeft 0x7f040070
-int attr contentInsetRight 0x7f040071
-int attr contentInsetStart 0x7f040072
-int attr contentInsetStartWithNavigation 0x7f040073
-int attr contentPadding 0x7f040074
-int attr contentPaddingBottom 0x7f040075
-int attr contentPaddingLeft 0x7f040076
-int attr contentPaddingRight 0x7f040077
-int attr contentPaddingTop 0x7f040078
-int attr controlBackground 0x7f040079
-int attr coordinatorLayoutStyle 0x7f04007a
-int attr cpd_inAnimDuration 0x7f04007b
-int attr cpd_inStepColors 0x7f04007c
-int attr cpd_inStepPercent 0x7f04007d
-int attr cpd_initialAngle 0x7f04007e
-int attr cpd_keepDuration 0x7f04007f
-int attr cpd_maxSweepAngle 0x7f040080
-int attr cpd_minSweepAngle 0x7f040081
-int attr cpd_outAnimDuration 0x7f040082
-int attr cpd_padding 0x7f040083
-int attr cpd_reverse 0x7f040084
-int attr cpd_rotateDuration 0x7f040085
-int attr cpd_strokeColor 0x7f040086
-int attr cpd_strokeColors 0x7f040087
-int attr cpd_strokeSecondaryColor 0x7f040088
-int attr cpd_strokeSize 0x7f040089
-int attr cpd_transformDuration 0x7f04008a
-int attr cpd_transformInterpolator 0x7f04008b
-int attr customNavigationLayout 0x7f04008c
-int attr defaultQueryHint 0x7f04008d
-int attr dialogCornerRadius 0x7f04008e
-int attr dialogPreferredPadding 0x7f04008f
-int attr dialogTheme 0x7f040090
-int attr displayOptions 0x7f040091
-int attr divider 0x7f040092
-int attr dividerHorizontal 0x7f040093
-int attr dividerPadding 0x7f040094
-int attr dividerVertical 0x7f040095
-int attr drawableBottomCompat 0x7f040096
-int attr drawableEndCompat 0x7f040097
-int attr drawableLeftCompat 0x7f040098
-int attr drawableRightCompat 0x7f040099
-int attr drawableSize 0x7f04009a
-int attr drawableStartCompat 0x7f04009b
-int attr drawableTint 0x7f04009c
-int attr drawableTintMode 0x7f04009d
-int attr drawableTopCompat 0x7f04009e
-int attr drawerArrowStyle 0x7f04009f
-int attr dropDownListViewStyle 0x7f0400a0
-int attr dropdownListPreferredItemHeight 0x7f0400a1
-int attr dsv_orientation 0x7f0400a2
-int attr editTextBackground 0x7f0400a3
-int attr editTextColor 0x7f0400a4
-int attr editTextStyle 0x7f0400a5
-int attr elenmentCount 0x7f0400a6
-int attr elenmentEmpty 0x7f0400a7
-int attr elenmentFill 0x7f0400a8
-int attr elenmentHarf 0x7f0400a9
-int attr elenmentHeight 0x7f0400aa
-int attr elenmentPadding 0x7f0400ab
-int attr elenmentStep 0x7f0400ac
-int attr elenmentWidth 0x7f0400ad
-int attr elevation 0x7f0400ae
-int attr emptyVisibility 0x7f0400af
-int attr expandActivityOverflowButtonDrawable 0x7f0400b0
-int attr fadeDuration 0x7f0400b1
-int attr failureImage 0x7f0400b2
-int attr failureImageScaleType 0x7f0400b3
-int attr fastScrollEnabled 0x7f0400b4
-int attr fastScrollHorizontalThumbDrawable 0x7f0400b5
-int attr fastScrollHorizontalTrackDrawable 0x7f0400b6
-int attr fastScrollVerticalThumbDrawable 0x7f0400b7
-int attr fastScrollVerticalTrackDrawable 0x7f0400b8
-int attr firstBaselineToTopHeight 0x7f0400b9
-int attr font 0x7f0400ba
-int attr fontFamily 0x7f0400bb
-int attr fontProviderAuthority 0x7f0400bc
-int attr fontProviderCerts 0x7f0400bd
-int attr fontProviderFetchStrategy 0x7f0400be
-int attr fontProviderFetchTimeout 0x7f0400bf
-int attr fontProviderPackage 0x7f0400c0
-int attr fontProviderQuery 0x7f0400c1
-int attr fontStyle 0x7f0400c2
-int attr fontVariationSettings 0x7f0400c3
-int attr fontWeight 0x7f0400c4
-int attr gapBetweenBars 0x7f0400c5
-int attr goIcon 0x7f0400c6
-int attr height 0x7f0400c7
-int attr hideOnContentScroll 0x7f0400c8
-int attr homeAsUpIndicator 0x7f0400c9
-int attr homeLayout 0x7f0400ca
-int attr icon 0x7f0400cb
-int attr iconTint 0x7f0400cc
-int attr iconTintMode 0x7f0400cd
-int attr iconifiedByDefault 0x7f0400ce
-int attr imageButtonStyle 0x7f0400cf
-int attr indeterminateProgressStyle 0x7f0400d0
-int attr initialActivityCount 0x7f0400d1
-int attr isLightTheme 0x7f0400d2
-int attr itemPadding 0x7f0400d3
-int attr keylines 0x7f0400d4
-int attr lastBaselineToBottomHeight 0x7f0400d5
-int attr layout 0x7f0400d6
-int attr layoutManager 0x7f0400d7
-int attr layout_anchor 0x7f0400d8
-int attr layout_anchorGravity 0x7f0400d9
-int attr layout_behavior 0x7f0400da
-int attr layout_constrainedHeight 0x7f0400db
-int attr layout_constrainedWidth 0x7f0400dc
-int attr layout_constraintBaseline_creator 0x7f0400dd
-int attr layout_constraintBaseline_toBaselineOf 0x7f0400de
-int attr layout_constraintBottom_creator 0x7f0400df
-int attr layout_constraintBottom_toBottomOf 0x7f0400e0
-int attr layout_constraintBottom_toTopOf 0x7f0400e1
-int attr layout_constraintCircle 0x7f0400e2
-int attr layout_constraintCircleAngle 0x7f0400e3
-int attr layout_constraintCircleRadius 0x7f0400e4
-int attr layout_constraintDimensionRatio 0x7f0400e5
-int attr layout_constraintEnd_toEndOf 0x7f0400e6
-int attr layout_constraintEnd_toStartOf 0x7f0400e7
-int attr layout_constraintGuide_begin 0x7f0400e8
-int attr layout_constraintGuide_end 0x7f0400e9
-int attr layout_constraintGuide_percent 0x7f0400ea
-int attr layout_constraintHeight_default 0x7f0400eb
-int attr layout_constraintHeight_max 0x7f0400ec
-int attr layout_constraintHeight_min 0x7f0400ed
-int attr layout_constraintHeight_percent 0x7f0400ee
-int attr layout_constraintHorizontal_bias 0x7f0400ef
-int attr layout_constraintHorizontal_chainStyle 0x7f0400f0
-int attr layout_constraintHorizontal_weight 0x7f0400f1
-int attr layout_constraintLeft_creator 0x7f0400f2
-int attr layout_constraintLeft_toLeftOf 0x7f0400f3
-int attr layout_constraintLeft_toRightOf 0x7f0400f4
-int attr layout_constraintRight_creator 0x7f0400f5
-int attr layout_constraintRight_toLeftOf 0x7f0400f6
-int attr layout_constraintRight_toRightOf 0x7f0400f7
-int attr layout_constraintStart_toEndOf 0x7f0400f8
-int attr layout_constraintStart_toStartOf 0x7f0400f9
-int attr layout_constraintTop_creator 0x7f0400fa
-int attr layout_constraintTop_toBottomOf 0x7f0400fb
-int attr layout_constraintTop_toTopOf 0x7f0400fc
-int attr layout_constraintVertical_bias 0x7f0400fd
-int attr layout_constraintVertical_chainStyle 0x7f0400fe
-int attr layout_constraintVertical_weight 0x7f0400ff
-int attr layout_constraintWidth_default 0x7f040100
-int attr layout_constraintWidth_max 0x7f040101
-int attr layout_constraintWidth_min 0x7f040102
-int attr layout_constraintWidth_percent 0x7f040103
-int attr layout_dodgeInsetEdges 0x7f040104
-int attr layout_editor_absoluteX 0x7f040105
-int attr layout_editor_absoluteY 0x7f040106
-int attr layout_goneMarginBottom 0x7f040107
-int attr layout_goneMarginEnd 0x7f040108
-int attr layout_goneMarginLeft 0x7f040109
-int attr layout_goneMarginRight 0x7f04010a
-int attr layout_goneMarginStart 0x7f04010b
-int attr layout_goneMarginTop 0x7f04010c
-int attr layout_insetEdge 0x7f04010d
-int attr layout_keyline 0x7f04010e
-int attr layout_optimizationLevel 0x7f04010f
-int attr lineHeight 0x7f040110
-int attr listChoiceBackgroundIndicator 0x7f040111
-int attr listChoiceIndicatorMultipleAnimated 0x7f040112
-int attr listChoiceIndicatorSingleAnimated 0x7f040113
-int attr listDividerAlertDialog 0x7f040114
-int attr listItemLayout 0x7f040115
-int attr listLayout 0x7f040116
-int attr listMenuViewStyle 0x7f040117
-int attr listPopupWindowStyle 0x7f040118
-int attr listPreferredItemHeight 0x7f040119
-int attr listPreferredItemHeightLarge 0x7f04011a
-int attr listPreferredItemHeightSmall 0x7f04011b
-int attr listPreferredItemPaddingEnd 0x7f04011c
-int attr listPreferredItemPaddingLeft 0x7f04011d
-int attr listPreferredItemPaddingRight 0x7f04011e
-int attr listPreferredItemPaddingStart 0x7f04011f
-int attr logo 0x7f040120
-int attr logoDescription 0x7f040121
-int attr maxButtonHeight 0x7f040122
-int attr measureWithLargestChild 0x7f040123
-int attr menu 0x7f040124
-int attr miv_blurRadius 0x7f040125
-int attr miv_borderColor 0x7f040126
-int attr miv_bottomLeftRadius 0x7f040127
-int attr miv_bottomRightRadius 0x7f040128
-int attr miv_failureHolder 0x7f040129
-int attr miv_isBlur 0x7f04012a
-int attr miv_overlayImageId 0x7f04012b
-int attr miv_placeHolder 0x7f04012c
-int attr miv_radius 0x7f04012d
-int attr miv_shape 0x7f04012e
-int attr miv_shapeBorderWidth 0x7f04012f
-int attr miv_topLeftRadius 0x7f040130
-int attr miv_topRightRadius 0x7f040131
-int attr multiChoiceItemLayout 0x7f040132
-int attr navigationContentDescription 0x7f040133
-int attr navigationIcon 0x7f040134
-int attr navigationMode 0x7f040135
-int attr numericModifiers 0x7f040136
-int attr overlapAnchor 0x7f040137
-int attr overlayImage 0x7f040138
-int attr paddingBottomNoButtons 0x7f040139
-int attr paddingEnd 0x7f04013a
-int attr paddingStart 0x7f04013b
-int attr paddingTopNoTitle 0x7f04013c
-int attr panelBackground 0x7f04013d
-int attr panelMenuListTheme 0x7f04013e
-int attr panelMenuListWidth 0x7f04013f
-int attr placeholderImage 0x7f040140
-int attr placeholderImageScaleType 0x7f040141
-int attr popupMenuStyle 0x7f040142
-int attr popupTheme 0x7f040143
-int attr popupWindowStyle 0x7f040144
-int attr preserveIconSpacing 0x7f040145
-int attr pressedStateOverlayImage 0x7f040146
-int attr progressBarAutoRotateInterval 0x7f040147
-int attr progressBarImage 0x7f040148
-int attr progressBarImageScaleType 0x7f040149
-int attr progressBarPadding 0x7f04014a
-int attr progressBarStyle 0x7f04014b
-int attr pv_progressMode 0x7f04014c
-int attr queryBackground 0x7f04014d
-int attr queryHint 0x7f04014e
-int attr radioButtonStyle 0x7f04014f
-int attr ratingBarStyle 0x7f040150
-int attr ratingBarStyleIndicator 0x7f040151
-int attr ratingBarStyleSmall 0x7f040152
-int attr realtimeBlurRadius 0x7f040153
-int attr realtimeDownsampleFactor 0x7f040154
-int attr realtimeOverlayColor 0x7f040155
-int attr recyclerViewStyle 0x7f040156
-int attr retryImage 0x7f040157
-int attr retryImageScaleType 0x7f040158
-int attr reverseLayout 0x7f040159
-int attr roundAsCircle 0x7f04015a
-int attr roundBottomLeft 0x7f04015b
-int attr roundBottomRight 0x7f04015c
-int attr roundTopLeft 0x7f04015d
-int attr roundTopRight 0x7f04015e
-int attr roundWithOverlayColor 0x7f04015f
-int attr roundedCornerRadius 0x7f040160
-int attr roundingBorderColor 0x7f040161
-int attr roundingBorderPadding 0x7f040162
-int attr roundingBorderWidth 0x7f040163
-int attr searchHintIcon 0x7f040164
-int attr searchIcon 0x7f040165
-int attr searchViewStyle 0x7f040166
-int attr seekBarStyle 0x7f040167
-int attr selectableItemBackground 0x7f040168
-int attr selectableItemBackgroundBorderless 0x7f040169
-int attr showAsAction 0x7f04016a
-int attr showDividers 0x7f04016b
-int attr showText 0x7f04016c
-int attr showTitle 0x7f04016d
-int attr singleChoiceItemLayout 0x7f04016e
-int attr spanCount 0x7f04016f
-int attr spinBars 0x7f040170
-int attr spinnerDropDownItemStyle 0x7f040171
-int attr spinnerStyle 0x7f040172
-int attr splitTrack 0x7f040173
-int attr srcCompat 0x7f040174
-int attr stackFromEnd 0x7f040175
-int attr state_above_anchor 0x7f040176
-int attr statusBarBackground 0x7f040177
-int attr stepSize 0x7f040178
-int attr subMenuArrow 0x7f040179
-int attr submitBackground 0x7f04017a
-int attr subtitle 0x7f04017b
-int attr subtitleTextAppearance 0x7f04017c
-int attr subtitleTextColor 0x7f04017d
-int attr subtitleTextStyle 0x7f04017e
-int attr suggestionRowLayout 0x7f04017f
-int attr switchMinWidth 0x7f040180
-int attr switchPadding 0x7f040181
-int attr switchStyle 0x7f040182
-int attr switchTextAppearance 0x7f040183
-int attr textAllCaps 0x7f040184
-int attr textAppearanceLargePopupMenu 0x7f040185
-int attr textAppearanceListItem 0x7f040186
-int attr textAppearanceListItemSecondary 0x7f040187
-int attr textAppearanceListItemSmall 0x7f040188
-int attr textAppearancePopupMenuHeader 0x7f040189
-int attr textAppearanceSearchResultSubtitle 0x7f04018a
-int attr textAppearanceSearchResultTitle 0x7f04018b
-int attr textAppearanceSmallPopupMenu 0x7f04018c
-int attr textColorAlertDialogListItem 0x7f04018d
-int attr textColorSearchUrl 0x7f04018e
-int attr textLocale 0x7f04018f
-int attr theme 0x7f040190
-int attr thickness 0x7f040191
-int attr thumbTextPadding 0x7f040192
-int attr thumbTint 0x7f040193
-int attr thumbTintMode 0x7f040194
-int attr tickMark 0x7f040195
-int attr tickMarkTint 0x7f040196
-int attr tickMarkTintMode 0x7f040197
-int attr tint 0x7f040198
-int attr tintMode 0x7f040199
-int attr title 0x7f04019a
-int attr titleMargin 0x7f04019b
-int attr titleMarginBottom 0x7f04019c
-int attr titleMarginEnd 0x7f04019d
-int attr titleMarginStart 0x7f04019e
-int attr titleMarginTop 0x7f04019f
-int attr titleMargins 0x7f0401a0
-int attr titleTextAppearance 0x7f0401a1
-int attr titleTextColor 0x7f0401a2
-int attr titleTextStyle 0x7f0401a3
-int attr toolbarNavigationButtonStyle 0x7f0401a4
-int attr toolbarStyle 0x7f0401a5
-int attr tooltipForegroundColor 0x7f0401a6
-int attr tooltipFrameBackground 0x7f0401a7
-int attr tooltipText 0x7f0401a8
-int attr track 0x7f0401a9
-int attr trackTint 0x7f0401aa
-int attr trackTintMode 0x7f0401ab
-int attr ttcIndex 0x7f0401ac
-int attr viewAspectRatio 0x7f0401ad
-int attr viewInflaterClass 0x7f0401ae
-int attr voiceIcon 0x7f0401af
-int attr windowActionBar 0x7f0401b0
-int attr windowActionBarOverlay 0x7f0401b1
-int attr windowActionModeOverlay 0x7f0401b2
-int attr windowFixedHeightMajor 0x7f0401b3
-int attr windowFixedHeightMinor 0x7f0401b4
-int attr windowFixedWidthMajor 0x7f0401b5
-int attr windowFixedWidthMinor 0x7f0401b6
-int attr windowMinWidthMajor 0x7f0401b7
-int attr windowMinWidthMinor 0x7f0401b8
-int attr windowNoTitle 0x7f0401b9
-int attr xRadius 0x7f0401ba
-int attr yRadius 0x7f0401bb
+int attr OtherHeartImg 0x7f040001
+int attr actionBarDivider 0x7f040002
+int attr actionBarItemBackground 0x7f040003
+int attr actionBarPopupTheme 0x7f040004
+int attr actionBarSize 0x7f040005
+int attr actionBarSplitStyle 0x7f040006
+int attr actionBarStyle 0x7f040007
+int attr actionBarTabBarStyle 0x7f040008
+int attr actionBarTabStyle 0x7f040009
+int attr actionBarTabTextStyle 0x7f04000a
+int attr actionBarTheme 0x7f04000b
+int attr actionBarWidgetTheme 0x7f04000c
+int attr actionButtonStyle 0x7f04000d
+int attr actionDropDownStyle 0x7f04000e
+int attr actionLayout 0x7f04000f
+int attr actionMenuTextAppearance 0x7f040010
+int attr actionMenuTextColor 0x7f040011
+int attr actionModeBackground 0x7f040012
+int attr actionModeCloseButtonStyle 0x7f040013
+int attr actionModeCloseDrawable 0x7f040014
+int attr actionModeCopyDrawable 0x7f040015
+int attr actionModeCutDrawable 0x7f040016
+int attr actionModeFindDrawable 0x7f040017
+int attr actionModePasteDrawable 0x7f040018
+int attr actionModePopupWindowStyle 0x7f040019
+int attr actionModeSelectAllDrawable 0x7f04001a
+int attr actionModeShareDrawable 0x7f04001b
+int attr actionModeSplitBackground 0x7f04001c
+int attr actionModeStyle 0x7f04001d
+int attr actionModeWebSearchDrawable 0x7f04001e
+int attr actionOverflowButtonStyle 0x7f04001f
+int attr actionOverflowMenuStyle 0x7f040020
+int attr actionProviderClass 0x7f040021
+int attr actionViewClass 0x7f040022
+int attr activityChooserViewStyle 0x7f040023
+int attr actualImageScaleType 0x7f040024
+int attr actualImageUri 0x7f040025
+int attr alertDialogButtonGroupStyle 0x7f040026
+int attr alertDialogCenterButtons 0x7f040027
+int attr alertDialogStyle 0x7f040028
+int attr alertDialogTheme 0x7f040029
+int attr allowStacking 0x7f04002a
+int attr alpha 0x7f04002b
+int attr alphabeticModifiers 0x7f04002c
+int attr arrowHeadLength 0x7f04002d
+int attr arrowShaftLength 0x7f04002e
+int attr autoCompleteTextViewStyle 0x7f04002f
+int attr autoSizeMaxTextSize 0x7f040030
+int attr autoSizeMinTextSize 0x7f040031
+int attr autoSizePresetSizes 0x7f040032
+int attr autoSizeStepGranularity 0x7f040033
+int attr autoSizeTextType 0x7f040034
+int attr background 0x7f040035
+int attr backgroundImage 0x7f040036
+int attr backgroundSplit 0x7f040037
+int attr backgroundStacked 0x7f040038
+int attr backgroundTint 0x7f040039
+int attr backgroundTintMode 0x7f04003a
+int attr barLength 0x7f04003b
+int attr barrierAllowsGoneWidgets 0x7f04003c
+int attr barrierDirection 0x7f04003d
+int attr borderlessButtonStyle 0x7f04003e
+int attr buttonBarButtonStyle 0x7f04003f
+int attr buttonBarNegativeButtonStyle 0x7f040040
+int attr buttonBarNeutralButtonStyle 0x7f040041
+int attr buttonBarPositiveButtonStyle 0x7f040042
+int attr buttonBarStyle 0x7f040043
+int attr buttonCompat 0x7f040044
+int attr buttonGravity 0x7f040045
+int attr buttonIconDimen 0x7f040046
+int attr buttonPanelSideLayout 0x7f040047
+int attr buttonStyle 0x7f040048
+int attr buttonStyleSmall 0x7f040049
+int attr buttonTint 0x7f04004a
+int attr buttonTintMode 0x7f04004b
+int attr cardBackgroundColor 0x7f04004c
+int attr cardCornerRadius 0x7f04004d
+int attr cardElevation 0x7f04004e
+int attr cardMaxElevation 0x7f04004f
+int attr cardPreventCornerOverlap 0x7f040050
+int attr cardUseCompatPadding 0x7f040051
+int attr cardViewStyle 0x7f040052
+int attr chainUseRtl 0x7f040053
+int attr checkboxStyle 0x7f040054
+int attr checkedTextViewStyle 0x7f040055
+int attr civ_border_color 0x7f040056
+int attr civ_border_overlay 0x7f040057
+int attr civ_border_width 0x7f040058
+int attr civ_fill_color 0x7f040059
+int attr clickable 0x7f04005a
+int attr closeIcon 0x7f04005b
+int attr closeItemLayout 0x7f04005c
+int attr collapseContentDescription 0x7f04005d
+int attr collapseIcon 0x7f04005e
+int attr color 0x7f04005f
+int attr colorAccent 0x7f040060
+int attr colorBackgroundFloating 0x7f040061
+int attr colorButtonNormal 0x7f040062
+int attr colorControlActivated 0x7f040063
+int attr colorControlHighlight 0x7f040064
+int attr colorControlNormal 0x7f040065
+int attr colorError 0x7f040066
+int attr colorPrimary 0x7f040067
+int attr colorPrimaryDark 0x7f040068
+int attr colorSwitchThumbNormal 0x7f040069
+int attr commitIcon 0x7f04006a
+int attr constraintSet 0x7f04006b
+int attr constraint_referenced_ids 0x7f04006c
+int attr content 0x7f04006d
+int attr contentDescription 0x7f04006e
+int attr contentInsetEnd 0x7f04006f
+int attr contentInsetEndWithActions 0x7f040070
+int attr contentInsetLeft 0x7f040071
+int attr contentInsetRight 0x7f040072
+int attr contentInsetStart 0x7f040073
+int attr contentInsetStartWithNavigation 0x7f040074
+int attr contentPadding 0x7f040075
+int attr contentPaddingBottom 0x7f040076
+int attr contentPaddingLeft 0x7f040077
+int attr contentPaddingRight 0x7f040078
+int attr contentPaddingTop 0x7f040079
+int attr controlBackground 0x7f04007a
+int attr coordinatorLayoutStyle 0x7f04007b
+int attr cpd_inAnimDuration 0x7f04007c
+int attr cpd_inStepColors 0x7f04007d
+int attr cpd_inStepPercent 0x7f04007e
+int attr cpd_initialAngle 0x7f04007f
+int attr cpd_keepDuration 0x7f040080
+int attr cpd_maxSweepAngle 0x7f040081
+int attr cpd_minSweepAngle 0x7f040082
+int attr cpd_outAnimDuration 0x7f040083
+int attr cpd_padding 0x7f040084
+int attr cpd_reverse 0x7f040085
+int attr cpd_rotateDuration 0x7f040086
+int attr cpd_strokeColor 0x7f040087
+int attr cpd_strokeColors 0x7f040088
+int attr cpd_strokeSecondaryColor 0x7f040089
+int attr cpd_strokeSize 0x7f04008a
+int attr cpd_transformDuration 0x7f04008b
+int attr cpd_transformInterpolator 0x7f04008c
+int attr customNavigationLayout 0x7f04008d
+int attr defaultQueryHint 0x7f04008e
+int attr dialogCornerRadius 0x7f04008f
+int attr dialogPreferredPadding 0x7f040090
+int attr dialogTheme 0x7f040091
+int attr displayOptions 0x7f040092
+int attr divider 0x7f040093
+int attr dividerHorizontal 0x7f040094
+int attr dividerPadding 0x7f040095
+int attr dividerVertical 0x7f040096
+int attr drawableBottomCompat 0x7f040097
+int attr drawableEndCompat 0x7f040098
+int attr drawableLeftCompat 0x7f040099
+int attr drawableRightCompat 0x7f04009a
+int attr drawableSize 0x7f04009b
+int attr drawableStartCompat 0x7f04009c
+int attr drawableTint 0x7f04009d
+int attr drawableTintMode 0x7f04009e
+int attr drawableTopCompat 0x7f04009f
+int attr drawerArrowStyle 0x7f0400a0
+int attr dropDownListViewStyle 0x7f0400a1
+int attr dropdownListPreferredItemHeight 0x7f0400a2
+int attr dsv_orientation 0x7f0400a3
+int attr editTextBackground 0x7f0400a4
+int attr editTextColor 0x7f0400a5
+int attr editTextStyle 0x7f0400a6
+int attr elenmentCount 0x7f0400a7
+int attr elenmentEmpty 0x7f0400a8
+int attr elenmentFill 0x7f0400a9
+int attr elenmentHarf 0x7f0400aa
+int attr elenmentHeight 0x7f0400ab
+int attr elenmentPadding 0x7f0400ac
+int attr elenmentStep 0x7f0400ad
+int attr elenmentWidth 0x7f0400ae
+int attr elevation 0x7f0400af
+int attr emptyVisibility 0x7f0400b0
+int attr expandActivityOverflowButtonDrawable 0x7f0400b1
+int attr fadeDuration 0x7f0400b2
+int attr failureImage 0x7f0400b3
+int attr failureImageScaleType 0x7f0400b4
+int attr fastScrollEnabled 0x7f0400b5
+int attr fastScrollHorizontalThumbDrawable 0x7f0400b6
+int attr fastScrollHorizontalTrackDrawable 0x7f0400b7
+int attr fastScrollVerticalThumbDrawable 0x7f0400b8
+int attr fastScrollVerticalTrackDrawable 0x7f0400b9
+int attr firstBaselineToTopHeight 0x7f0400ba
+int attr font 0x7f0400bb
+int attr fontFamily 0x7f0400bc
+int attr fontProviderAuthority 0x7f0400bd
+int attr fontProviderCerts 0x7f0400be
+int attr fontProviderFetchStrategy 0x7f0400bf
+int attr fontProviderFetchTimeout 0x7f0400c0
+int attr fontProviderPackage 0x7f0400c1
+int attr fontProviderQuery 0x7f0400c2
+int attr fontStyle 0x7f0400c3
+int attr fontVariationSettings 0x7f0400c4
+int attr fontWeight 0x7f0400c5
+int attr gapBetweenBars 0x7f0400c6
+int attr goIcon 0x7f0400c7
+int attr height 0x7f0400c8
+int attr hideOnContentScroll 0x7f0400c9
+int attr homeAsUpIndicator 0x7f0400ca
+int attr homeLayout 0x7f0400cb
+int attr icon 0x7f0400cc
+int attr iconTint 0x7f0400cd
+int attr iconTintMode 0x7f0400ce
+int attr iconifiedByDefault 0x7f0400cf
+int attr imageButtonStyle 0x7f0400d0
+int attr indeterminateProgressStyle 0x7f0400d1
+int attr initialActivityCount 0x7f0400d2
+int attr isLightTheme 0x7f0400d3
+int attr itemPadding 0x7f0400d4
+int attr keylines 0x7f0400d5
+int attr lastBaselineToBottomHeight 0x7f0400d6
+int attr layout 0x7f0400d7
+int attr layoutManager 0x7f0400d8
+int attr layout_anchor 0x7f0400d9
+int attr layout_anchorGravity 0x7f0400da
+int attr layout_behavior 0x7f0400db
+int attr layout_constrainedHeight 0x7f0400dc
+int attr layout_constrainedWidth 0x7f0400dd
+int attr layout_constraintBaseline_creator 0x7f0400de
+int attr layout_constraintBaseline_toBaselineOf 0x7f0400df
+int attr layout_constraintBottom_creator 0x7f0400e0
+int attr layout_constraintBottom_toBottomOf 0x7f0400e1
+int attr layout_constraintBottom_toTopOf 0x7f0400e2
+int attr layout_constraintCircle 0x7f0400e3
+int attr layout_constraintCircleAngle 0x7f0400e4
+int attr layout_constraintCircleRadius 0x7f0400e5
+int attr layout_constraintDimensionRatio 0x7f0400e6
+int attr layout_constraintEnd_toEndOf 0x7f0400e7
+int attr layout_constraintEnd_toStartOf 0x7f0400e8
+int attr layout_constraintGuide_begin 0x7f0400e9
+int attr layout_constraintGuide_end 0x7f0400ea
+int attr layout_constraintGuide_percent 0x7f0400eb
+int attr layout_constraintHeight_default 0x7f0400ec
+int attr layout_constraintHeight_max 0x7f0400ed
+int attr layout_constraintHeight_min 0x7f0400ee
+int attr layout_constraintHeight_percent 0x7f0400ef
+int attr layout_constraintHorizontal_bias 0x7f0400f0
+int attr layout_constraintHorizontal_chainStyle 0x7f0400f1
+int attr layout_constraintHorizontal_weight 0x7f0400f2
+int attr layout_constraintLeft_creator 0x7f0400f3
+int attr layout_constraintLeft_toLeftOf 0x7f0400f4
+int attr layout_constraintLeft_toRightOf 0x7f0400f5
+int attr layout_constraintRight_creator 0x7f0400f6
+int attr layout_constraintRight_toLeftOf 0x7f0400f7
+int attr layout_constraintRight_toRightOf 0x7f0400f8
+int attr layout_constraintStart_toEndOf 0x7f0400f9
+int attr layout_constraintStart_toStartOf 0x7f0400fa
+int attr layout_constraintTop_creator 0x7f0400fb
+int attr layout_constraintTop_toBottomOf 0x7f0400fc
+int attr layout_constraintTop_toTopOf 0x7f0400fd
+int attr layout_constraintVertical_bias 0x7f0400fe
+int attr layout_constraintVertical_chainStyle 0x7f0400ff
+int attr layout_constraintVertical_weight 0x7f040100
+int attr layout_constraintWidth_default 0x7f040101
+int attr layout_constraintWidth_max 0x7f040102
+int attr layout_constraintWidth_min 0x7f040103
+int attr layout_constraintWidth_percent 0x7f040104
+int attr layout_dodgeInsetEdges 0x7f040105
+int attr layout_editor_absoluteX 0x7f040106
+int attr layout_editor_absoluteY 0x7f040107
+int attr layout_goneMarginBottom 0x7f040108
+int attr layout_goneMarginEnd 0x7f040109
+int attr layout_goneMarginLeft 0x7f04010a
+int attr layout_goneMarginRight 0x7f04010b
+int attr layout_goneMarginStart 0x7f04010c
+int attr layout_goneMarginTop 0x7f04010d
+int attr layout_insetEdge 0x7f04010e
+int attr layout_keyline 0x7f04010f
+int attr layout_optimizationLevel 0x7f040110
+int attr lineHeight 0x7f040111
+int attr listChoiceBackgroundIndicator 0x7f040112
+int attr listChoiceIndicatorMultipleAnimated 0x7f040113
+int attr listChoiceIndicatorSingleAnimated 0x7f040114
+int attr listDividerAlertDialog 0x7f040115
+int attr listItemLayout 0x7f040116
+int attr listLayout 0x7f040117
+int attr listMenuViewStyle 0x7f040118
+int attr listPopupWindowStyle 0x7f040119
+int attr listPreferredItemHeight 0x7f04011a
+int attr listPreferredItemHeightLarge 0x7f04011b
+int attr listPreferredItemHeightSmall 0x7f04011c
+int attr listPreferredItemPaddingEnd 0x7f04011d
+int attr listPreferredItemPaddingLeft 0x7f04011e
+int attr listPreferredItemPaddingRight 0x7f04011f
+int attr listPreferredItemPaddingStart 0x7f040120
+int attr logo 0x7f040121
+int attr logoDescription 0x7f040122
+int attr maxButtonHeight 0x7f040123
+int attr measureWithLargestChild 0x7f040124
+int attr menu 0x7f040125
+int attr miv_blurRadius 0x7f040126
+int attr miv_borderColor 0x7f040127
+int attr miv_bottomLeftRadius 0x7f040128
+int attr miv_bottomRightRadius 0x7f040129
+int attr miv_failureHolder 0x7f04012a
+int attr miv_isBlur 0x7f04012b
+int attr miv_overlayImageId 0x7f04012c
+int attr miv_placeHolder 0x7f04012d
+int attr miv_radius 0x7f04012e
+int attr miv_shape 0x7f04012f
+int attr miv_shapeBorderWidth 0x7f040130
+int attr miv_topLeftRadius 0x7f040131
+int attr miv_topRightRadius 0x7f040132
+int attr multiChoiceItemLayout 0x7f040133
+int attr navigationContentDescription 0x7f040134
+int attr navigationIcon 0x7f040135
+int attr navigationMode 0x7f040136
+int attr numericModifiers 0x7f040137
+int attr overlapAnchor 0x7f040138
+int attr overlayImage 0x7f040139
+int attr paddingBottomNoButtons 0x7f04013a
+int attr paddingEnd 0x7f04013b
+int attr paddingStart 0x7f04013c
+int attr paddingTopNoTitle 0x7f04013d
+int attr panelBackground 0x7f04013e
+int attr panelMenuListTheme 0x7f04013f
+int attr panelMenuListWidth 0x7f040140
+int attr placeholderImage 0x7f040141
+int attr placeholderImageScaleType 0x7f040142
+int attr popupMenuStyle 0x7f040143
+int attr popupTheme 0x7f040144
+int attr popupWindowStyle 0x7f040145
+int attr preserveIconSpacing 0x7f040146
+int attr pressedStateOverlayImage 0x7f040147
+int attr progressBarAutoRotateInterval 0x7f040148
+int attr progressBarImage 0x7f040149
+int attr progressBarImageScaleType 0x7f04014a
+int attr progressBarPadding 0x7f04014b
+int attr progressBarStyle 0x7f04014c
+int attr pv_progressMode 0x7f04014d
+int attr queryBackground 0x7f04014e
+int attr queryHint 0x7f04014f
+int attr radioButtonStyle 0x7f040150
+int attr ratingBarStyle 0x7f040151
+int attr ratingBarStyleIndicator 0x7f040152
+int attr ratingBarStyleSmall 0x7f040153
+int attr realtimeBlurRadius 0x7f040154
+int attr realtimeDownsampleFactor 0x7f040155
+int attr realtimeOverlayColor 0x7f040156
+int attr recyclerViewStyle 0x7f040157
+int attr retryImage 0x7f040158
+int attr retryImageScaleType 0x7f040159
+int attr reverseLayout 0x7f04015a
+int attr roundAsCircle 0x7f04015b
+int attr roundBottomLeft 0x7f04015c
+int attr roundBottomRight 0x7f04015d
+int attr roundTopLeft 0x7f04015e
+int attr roundTopRight 0x7f04015f
+int attr roundWithOverlayColor 0x7f040160
+int attr roundedCornerRadius 0x7f040161
+int attr roundingBorderColor 0x7f040162
+int attr roundingBorderPadding 0x7f040163
+int attr roundingBorderWidth 0x7f040164
+int attr searchHintIcon 0x7f040165
+int attr searchIcon 0x7f040166
+int attr searchViewStyle 0x7f040167
+int attr seekBarStyle 0x7f040168
+int attr selectableItemBackground 0x7f040169
+int attr selectableItemBackgroundBorderless 0x7f04016a
+int attr showAsAction 0x7f04016b
+int attr showDividers 0x7f04016c
+int attr showText 0x7f04016d
+int attr showTitle 0x7f04016e
+int attr singleChoiceItemLayout 0x7f04016f
+int attr spanCount 0x7f040170
+int attr spinBars 0x7f040171
+int attr spinnerDropDownItemStyle 0x7f040172
+int attr spinnerStyle 0x7f040173
+int attr splitTrack 0x7f040174
+int attr srcCompat 0x7f040175
+int attr stackFromEnd 0x7f040176
+int attr state_above_anchor 0x7f040177
+int attr statusBarBackground 0x7f040178
+int attr stepSize 0x7f040179
+int attr subMenuArrow 0x7f04017a
+int attr submitBackground 0x7f04017b
+int attr subtitle 0x7f04017c
+int attr subtitleTextAppearance 0x7f04017d
+int attr subtitleTextColor 0x7f04017e
+int attr subtitleTextStyle 0x7f04017f
+int attr suggestionRowLayout 0x7f040180
+int attr switchMinWidth 0x7f040181
+int attr switchPadding 0x7f040182
+int attr switchStyle 0x7f040183
+int attr switchTextAppearance 0x7f040184
+int attr textAllCaps 0x7f040185
+int attr textAppearanceLargePopupMenu 0x7f040186
+int attr textAppearanceListItem 0x7f040187
+int attr textAppearanceListItemSecondary 0x7f040188
+int attr textAppearanceListItemSmall 0x7f040189
+int attr textAppearancePopupMenuHeader 0x7f04018a
+int attr textAppearanceSearchResultSubtitle 0x7f04018b
+int attr textAppearanceSearchResultTitle 0x7f04018c
+int attr textAppearanceSmallPopupMenu 0x7f04018d
+int attr textColorAlertDialogListItem 0x7f04018e
+int attr textColorSearchUrl 0x7f04018f
+int attr textLocale 0x7f040190
+int attr theme 0x7f040191
+int attr thickness 0x7f040192
+int attr thumbTextPadding 0x7f040193
+int attr thumbTint 0x7f040194
+int attr thumbTintMode 0x7f040195
+int attr tickMark 0x7f040196
+int attr tickMarkTint 0x7f040197
+int attr tickMarkTintMode 0x7f040198
+int attr tint 0x7f040199
+int attr tintMode 0x7f04019a
+int attr title 0x7f04019b
+int attr titleMargin 0x7f04019c
+int attr titleMarginBottom 0x7f04019d
+int attr titleMarginEnd 0x7f04019e
+int attr titleMarginStart 0x7f04019f
+int attr titleMarginTop 0x7f0401a0
+int attr titleMargins 0x7f0401a1
+int attr titleTextAppearance 0x7f0401a2
+int attr titleTextColor 0x7f0401a3
+int attr titleTextStyle 0x7f0401a4
+int attr toolbarNavigationButtonStyle 0x7f0401a5
+int attr toolbarStyle 0x7f0401a6
+int attr tooltipForegroundColor 0x7f0401a7
+int attr tooltipFrameBackground 0x7f0401a8
+int attr tooltipText 0x7f0401a9
+int attr track 0x7f0401aa
+int attr trackTint 0x7f0401ab
+int attr trackTintMode 0x7f0401ac
+int attr ttcIndex 0x7f0401ad
+int attr viewAspectRatio 0x7f0401ae
+int attr viewInflaterClass 0x7f0401af
+int attr voiceIcon 0x7f0401b0
+int attr windowActionBar 0x7f0401b1
+int attr windowActionBarOverlay 0x7f0401b2
+int attr windowActionModeOverlay 0x7f0401b3
+int attr windowFixedHeightMajor 0x7f0401b4
+int attr windowFixedHeightMinor 0x7f0401b5
+int attr windowFixedWidthMajor 0x7f0401b6
+int attr windowFixedWidthMinor 0x7f0401b7
+int attr windowMinWidthMajor 0x7f0401b8
+int attr windowMinWidthMinor 0x7f0401b9
+int attr windowNoTitle 0x7f0401ba
+int attr xRadius 0x7f0401bb
+int attr yRadius 0x7f0401bc
int bool abc_action_bar_embed_tabs 0x7f050001
int bool abc_allow_stacked_button_bar 0x7f050002
int bool abc_config_actionMenuItemAllCaps 0x7f050003
@@ -564,56 +565,57 @@ int color material_grey_600 0x7f060048
int color material_grey_800 0x7f060049
int color material_grey_850 0x7f06004a
int color material_grey_900 0x7f06004b
-int color module_commons_dlg_bkg 0x7f06004c
-int color module_commons_wm_dialog_text_textColor 0x7f06004d
-int color modules_commons_toast_text_color 0x7f06004e
-int color notification_action_color_filter 0x7f06004f
-int color notification_icon_bg_color 0x7f060050
-int color notification_material_background_media_default_color 0x7f060051
-int color pressed 0x7f060052
-int color primary_dark_material_dark 0x7f060053
-int color primary_dark_material_light 0x7f060054
-int color primary_material_dark 0x7f060055
-int color primary_material_light 0x7f060056
-int color primary_text_default_material_dark 0x7f060057
-int color primary_text_default_material_light 0x7f060058
-int color primary_text_disabled_material_dark 0x7f060059
-int color primary_text_disabled_material_light 0x7f06005a
-int color retangle_color 0x7f06005b
-int color ripple_material_dark 0x7f06005c
-int color ripple_material_light 0x7f06005d
-int color secondary_text_default_material_dark 0x7f06005e
-int color secondary_text_default_material_light 0x7f06005f
-int color secondary_text_disabled_material_dark 0x7f060060
-int color secondary_text_disabled_material_light 0x7f060061
-int color selected 0x7f060062
-int color selected_list 0x7f060063
-int color selector_white_gray 0x7f060064
-int color share_btn 0x7f060065
-int color switch_thumb_disabled_material_dark 0x7f060066
-int color switch_thumb_disabled_material_light 0x7f060067
-int color switch_thumb_material_dark 0x7f060068
-int color switch_thumb_material_light 0x7f060069
-int color switch_thumb_normal_material_dark 0x7f06006a
-int color switch_thumb_normal_material_light 0x7f06006b
-int color text_bg_color 0x7f06006c
-int color text_btn_color 0x7f06006d
-int color text_color 0x7f06006e
-int color text_color_bg 0x7f06006f
-int color text_list_color 0x7f060070
-int color tooltip_background_dark 0x7f060071
-int color tooltip_background_light 0x7f060072
-int color traf_list_s 0x7f060073
-int color transparent 0x7f060074
-int color unfocused 0x7f060075
-int color unselected 0x7f060076
-int color unselected_list 0x7f060077
-int color v2x_FFF_666 0x7f060078
-int color white 0x7f060079
-int color white_30 0x7f06007a
-int color white_50 0x7f06007b
-int color white_argb_0 0x7f06007c
-int color widgettext 0x7f06007d
+int color module_commons_FFF_333 0x7f06004c
+int color module_commons_dlg_bkg 0x7f06004d
+int color module_commons_wm_dialog_text_textColor 0x7f06004e
+int color modules_commons_toast_text_color 0x7f06004f
+int color notification_action_color_filter 0x7f060050
+int color notification_icon_bg_color 0x7f060051
+int color notification_material_background_media_default_color 0x7f060052
+int color pressed 0x7f060053
+int color primary_dark_material_dark 0x7f060054
+int color primary_dark_material_light 0x7f060055
+int color primary_material_dark 0x7f060056
+int color primary_material_light 0x7f060057
+int color primary_text_default_material_dark 0x7f060058
+int color primary_text_default_material_light 0x7f060059
+int color primary_text_disabled_material_dark 0x7f06005a
+int color primary_text_disabled_material_light 0x7f06005b
+int color retangle_color 0x7f06005c
+int color ripple_material_dark 0x7f06005d
+int color ripple_material_light 0x7f06005e
+int color secondary_text_default_material_dark 0x7f06005f
+int color secondary_text_default_material_light 0x7f060060
+int color secondary_text_disabled_material_dark 0x7f060061
+int color secondary_text_disabled_material_light 0x7f060062
+int color selected 0x7f060063
+int color selected_list 0x7f060064
+int color selector_white_gray 0x7f060065
+int color share_btn 0x7f060066
+int color switch_thumb_disabled_material_dark 0x7f060067
+int color switch_thumb_disabled_material_light 0x7f060068
+int color switch_thumb_material_dark 0x7f060069
+int color switch_thumb_material_light 0x7f06006a
+int color switch_thumb_normal_material_dark 0x7f06006b
+int color switch_thumb_normal_material_light 0x7f06006c
+int color text_bg_color 0x7f06006d
+int color text_btn_color 0x7f06006e
+int color text_color 0x7f06006f
+int color text_color_bg 0x7f060070
+int color text_list_color 0x7f060071
+int color tooltip_background_dark 0x7f060072
+int color tooltip_background_light 0x7f060073
+int color traf_list_s 0x7f060074
+int color transparent 0x7f060075
+int color unfocused 0x7f060076
+int color unselected 0x7f060077
+int color unselected_list 0x7f060078
+int color v2x_FFF_666 0x7f060079
+int color white 0x7f06007a
+int color white_30 0x7f06007b
+int color white_50 0x7f06007c
+int color white_argb_0 0x7f06007d
+int color widgettext 0x7f06007e
int dimen abc_action_bar_content_inset_material 0x7f070001
int dimen abc_action_bar_content_inset_with_nav 0x7f070002
int dimen abc_action_bar_default_height_material 0x7f070003
@@ -1756,126 +1758,130 @@ int dimen module_commons_toast_with_left_drawable_marginBottom 0x7f070473
int dimen module_commons_toast_with_left_drawable_marginLeft 0x7f070474
int dimen module_commons_toast_with_left_drawable_marginTop 0x7f070475
int dimen module_commons_toast_y_offset 0x7f070476
-int dimen module_service_content_minWidth 0x7f070477
-int dimen module_service_content_textSize 0x7f070478
-int dimen module_service_id_marker_content_paddingRight 0x7f070479
-int dimen module_service_id_marker_content_paddingRight_widthoutCall 0x7f07047a
-int dimen module_service_marker_anchor_size 0x7f07047b
-int dimen module_service_marker_bounds_bottomMargin 0x7f07047c
-int dimen module_service_marker_bounds_leftMargin 0x7f07047d
-int dimen module_service_marker_bounds_rightMargin 0x7f07047e
-int dimen module_service_marker_bounds_topMargin 0x7f07047f
-int dimen module_service_marker_bubble_height 0x7f070480
-int dimen module_service_marker_bubble_icon_height 0x7f070481
-int dimen module_service_marker_bubble_icon_marginBottom 0x7f070482
-int dimen module_service_marker_bubble_icon_width 0x7f070483
-int dimen module_service_marker_bubble_width 0x7f070484
-int dimen module_service_marker_dot_marginTop 0x7f070485
-int dimen module_service_tag_textSize 0x7f070486
-int dimen module_service_user_header_height 0x7f070487
-int dimen module_service_user_header_width 0x7f070488
-int dimen module_services_empty_tip_marginTop 0x7f070489
-int dimen module_services_empty_tip_textSize 0x7f07048a
-int dimen module_services_id_panel_item_avatar_border_width 0x7f07048b
-int dimen module_services_id_panel_item_distance_marginLeft 0x7f07048c
-int dimen module_services_info_window_height 0x7f07048d
-int dimen module_services_info_window_paddingEnd 0x7f07048e
-int dimen module_services_info_window_paddingStart 0x7f07048f
-int dimen module_services_load_strategy_marginRight 0x7f070490
-int dimen module_services_load_strategy_paddingLeft 0x7f070491
-int dimen module_services_load_strategy_paddingTop 0x7f070492
-int dimen module_services_load_strategy_textSize 0x7f070493
-int dimen module_services_online_car_panel_close_margin_top 0x7f070494
-int dimen module_services_online_car_panel_marginBottom 0x7f070495
-int dimen module_services_online_car_panel_marginRight 0x7f070496
-int dimen module_services_online_car_panel_marginTop 0x7f070497
-int dimen module_services_online_car_panel_paddingBottom 0x7f070498
-int dimen module_services_online_car_panel_paddingLeft 0x7f070499
-int dimen module_services_online_car_panel_recycler_view_margin_top 0x7f07049a
-int dimen module_services_online_car_panel_title_margin_top 0x7f07049b
-int dimen module_services_online_car_panel_title_text_size 0x7f07049c
-int dimen module_services_panel_item_avatar_size 0x7f07049d
-int dimen module_services_panel_item_corner 0x7f07049e
-int dimen module_services_panel_item_detail_bkg_corner 0x7f07049f
-int dimen module_services_panel_item_detail_padding 0x7f0704a0
-int dimen module_services_panel_item_detail_textSize 0x7f0704a1
-int dimen module_services_panel_item_distance_textSize 0x7f0704a2
-int dimen module_services_panel_item_marginBottom 0x7f0704a3
-int dimen module_services_panel_item_nickname_marginLeft 0x7f0704a4
-int dimen module_services_panel_item_nickname_textSize 0x7f0704a5
-int dimen module_services_panel_item_padding 0x7f0704a6
-int dimen module_services_panel_strategy_button_bkg_corner 0x7f0704a7
-int dimen module_services_panel_strategy_button_marginTop 0x7f0704a8
-int dimen notification_action_icon_size 0x7f0704a9
-int dimen notification_action_text_size 0x7f0704aa
-int dimen notification_big_circle_margin 0x7f0704ab
-int dimen notification_content_margin_start 0x7f0704ac
-int dimen notification_large_icon_height 0x7f0704ad
-int dimen notification_large_icon_width 0x7f0704ae
-int dimen notification_main_column_padding_top 0x7f0704af
-int dimen notification_media_narrow_margin 0x7f0704b0
-int dimen notification_right_icon_size 0x7f0704b1
-int dimen notification_right_side_padding_top 0x7f0704b2
-int dimen notification_small_icon_background_padding 0x7f0704b3
-int dimen notification_small_icon_size_as_large 0x7f0704b4
-int dimen notification_subtext_size 0x7f0704b5
-int dimen notification_top_pad 0x7f0704b6
-int dimen notification_top_pad_large_text 0x7f0704b7
-int dimen padding_large 0x7f0704b8
-int dimen padding_medium 0x7f0704b9
-int dimen padding_small 0x7f0704ba
-int dimen panel_list_item_title_size 0x7f0704bb
-int dimen path_width 0x7f0704bc
-int dimen scale 0x7f0704bd
-int dimen share_item_address 0x7f0704be
-int dimen sp_10 0x7f0704bf
-int dimen sp_11 0x7f0704c0
-int dimen sp_12 0x7f0704c1
-int dimen sp_13 0x7f0704c2
-int dimen sp_14 0x7f0704c3
-int dimen sp_15 0x7f0704c4
-int dimen sp_16 0x7f0704c5
-int dimen sp_17 0x7f0704c6
-int dimen sp_18 0x7f0704c7
-int dimen sp_19 0x7f0704c8
-int dimen sp_20 0x7f0704c9
-int dimen sp_21 0x7f0704ca
-int dimen sp_22 0x7f0704cb
-int dimen sp_23 0x7f0704cc
-int dimen sp_24 0x7f0704cd
-int dimen sp_25 0x7f0704ce
-int dimen sp_28 0x7f0704cf
-int dimen sp_30 0x7f0704d0
-int dimen sp_32 0x7f0704d1
-int dimen sp_34 0x7f0704d2
-int dimen sp_36 0x7f0704d3
-int dimen sp_38 0x7f0704d4
-int dimen sp_40 0x7f0704d5
-int dimen sp_42 0x7f0704d6
-int dimen sp_48 0x7f0704d7
-int dimen sp_6 0x7f0704d8
-int dimen sp_7 0x7f0704d9
-int dimen sp_8 0x7f0704da
-int dimen sp_9 0x7f0704db
-int dimen subtitle_corner_radius 0x7f0704dc
-int dimen subtitle_outline_width 0x7f0704dd
-int dimen subtitle_shadow_offset 0x7f0704de
-int dimen subtitle_shadow_radius 0x7f0704df
-int dimen text_size_btn 0x7f0704e0
-int dimen text_size_btn2 0x7f0704e1
-int dimen text_size_middle 0x7f0704e2
-int dimen text_size_nav 0x7f0704e3
-int dimen tooltip_corner_radius 0x7f0704e4
-int dimen tooltip_horizontal_padding 0x7f0704e5
-int dimen tooltip_margin 0x7f0704e6
-int dimen tooltip_precise_anchor_extra_offset 0x7f0704e7
-int dimen tooltip_precise_anchor_threshold 0x7f0704e8
-int dimen tooltip_vertical_padding 0x7f0704e9
-int dimen tooltip_y_offset_non_touch 0x7f0704ea
-int dimen tooltip_y_offset_touch 0x7f0704eb
-int dimen v2x_panel_loading_top 0x7f0704ec
-int dimen v2x_share_btn_height 0x7f0704ed
-int dimen v2x_share_btn_width 0x7f0704ee
+int dimen module_map_amap_my_location_bg_size 0x7f070477
+int dimen module_map_amap_my_location_icon_height 0x7f070478
+int dimen module_map_amap_my_location_icon_width 0x7f070479
+int dimen module_service_content_minWidth 0x7f07047a
+int dimen module_service_content_textSize 0x7f07047b
+int dimen module_service_id_marker_content_paddingRight 0x7f07047c
+int dimen module_service_id_marker_content_paddingRight_widthoutCall 0x7f07047d
+int dimen module_service_marker_anchor_size 0x7f07047e
+int dimen module_service_marker_bounds_bottomMargin 0x7f07047f
+int dimen module_service_marker_bounds_leftMargin 0x7f070480
+int dimen module_service_marker_bounds_rightMargin 0x7f070481
+int dimen module_service_marker_bounds_topMargin 0x7f070482
+int dimen module_service_marker_bubble_height 0x7f070483
+int dimen module_service_marker_bubble_icon_height 0x7f070484
+int dimen module_service_marker_bubble_icon_marginBottom 0x7f070485
+int dimen module_service_marker_bubble_icon_width 0x7f070486
+int dimen module_service_marker_bubble_width 0x7f070487
+int dimen module_service_marker_dot_marginTop 0x7f070488
+int dimen module_service_tag_textSize 0x7f070489
+int dimen module_service_user_header_height 0x7f07048a
+int dimen module_service_user_header_width 0x7f07048b
+int dimen module_services_empty_tip_marginTop 0x7f07048c
+int dimen module_services_empty_tip_textSize 0x7f07048d
+int dimen module_services_id_panel_item_avatar_border_width 0x7f07048e
+int dimen module_services_id_panel_item_distance_marginLeft 0x7f07048f
+int dimen module_services_info_window_height 0x7f070490
+int dimen module_services_info_window_paddingEnd 0x7f070491
+int dimen module_services_info_window_paddingStart 0x7f070492
+int dimen module_services_load_strategy_marginRight 0x7f070493
+int dimen module_services_load_strategy_paddingLeft 0x7f070494
+int dimen module_services_load_strategy_paddingTop 0x7f070495
+int dimen module_services_load_strategy_textSize 0x7f070496
+int dimen module_services_online_car_panel_close_margin_top 0x7f070497
+int dimen module_services_online_car_panel_marginBottom 0x7f070498
+int dimen module_services_online_car_panel_marginRight 0x7f070499
+int dimen module_services_online_car_panel_marginTop 0x7f07049a
+int dimen module_services_online_car_panel_paddingBottom 0x7f07049b
+int dimen module_services_online_car_panel_paddingLeft 0x7f07049c
+int dimen module_services_online_car_panel_recycler_view_margin_top 0x7f07049d
+int dimen module_services_online_car_panel_title_margin_top 0x7f07049e
+int dimen module_services_online_car_panel_title_text_size 0x7f07049f
+int dimen module_services_panel_item_avatar_size 0x7f0704a0
+int dimen module_services_panel_item_corner 0x7f0704a1
+int dimen module_services_panel_item_detail_bkg_corner 0x7f0704a2
+int dimen module_services_panel_item_detail_padding 0x7f0704a3
+int dimen module_services_panel_item_detail_textSize 0x7f0704a4
+int dimen module_services_panel_item_distance_textSize 0x7f0704a5
+int dimen module_services_panel_item_marginBottom 0x7f0704a6
+int dimen module_services_panel_item_nickname_marginLeft 0x7f0704a7
+int dimen module_services_panel_item_nickname_textSize 0x7f0704a8
+int dimen module_services_panel_item_padding 0x7f0704a9
+int dimen module_services_panel_strategy_button_bkg_corner 0x7f0704aa
+int dimen module_services_panel_strategy_button_marginTop 0x7f0704ab
+int dimen notification_action_icon_size 0x7f0704ac
+int dimen notification_action_text_size 0x7f0704ad
+int dimen notification_big_circle_margin 0x7f0704ae
+int dimen notification_content_margin_start 0x7f0704af
+int dimen notification_large_icon_height 0x7f0704b0
+int dimen notification_large_icon_width 0x7f0704b1
+int dimen notification_main_column_padding_top 0x7f0704b2
+int dimen notification_media_narrow_margin 0x7f0704b3
+int dimen notification_right_icon_size 0x7f0704b4
+int dimen notification_right_side_padding_top 0x7f0704b5
+int dimen notification_small_icon_background_padding 0x7f0704b6
+int dimen notification_small_icon_size_as_large 0x7f0704b7
+int dimen notification_subtext_size 0x7f0704b8
+int dimen notification_top_pad 0x7f0704b9
+int dimen notification_top_pad_large_text 0x7f0704ba
+int dimen padding_large 0x7f0704bb
+int dimen padding_medium 0x7f0704bc
+int dimen padding_small 0x7f0704bd
+int dimen panel_list_item_title_size 0x7f0704be
+int dimen path_width 0x7f0704bf
+int dimen ratingbar_padding 0x7f0704c0
+int dimen scale 0x7f0704c1
+int dimen share_item_address 0x7f0704c2
+int dimen sp_10 0x7f0704c3
+int dimen sp_11 0x7f0704c4
+int dimen sp_12 0x7f0704c5
+int dimen sp_13 0x7f0704c6
+int dimen sp_14 0x7f0704c7
+int dimen sp_15 0x7f0704c8
+int dimen sp_16 0x7f0704c9
+int dimen sp_17 0x7f0704ca
+int dimen sp_18 0x7f0704cb
+int dimen sp_19 0x7f0704cc
+int dimen sp_20 0x7f0704cd
+int dimen sp_21 0x7f0704ce
+int dimen sp_22 0x7f0704cf
+int dimen sp_23 0x7f0704d0
+int dimen sp_24 0x7f0704d1
+int dimen sp_25 0x7f0704d2
+int dimen sp_28 0x7f0704d3
+int dimen sp_30 0x7f0704d4
+int dimen sp_32 0x7f0704d5
+int dimen sp_34 0x7f0704d6
+int dimen sp_36 0x7f0704d7
+int dimen sp_38 0x7f0704d8
+int dimen sp_40 0x7f0704d9
+int dimen sp_42 0x7f0704da
+int dimen sp_48 0x7f0704db
+int dimen sp_6 0x7f0704dc
+int dimen sp_7 0x7f0704dd
+int dimen sp_8 0x7f0704de
+int dimen sp_9 0x7f0704df
+int dimen subtitle_corner_radius 0x7f0704e0
+int dimen subtitle_outline_width 0x7f0704e1
+int dimen subtitle_shadow_offset 0x7f0704e2
+int dimen subtitle_shadow_radius 0x7f0704e3
+int dimen text_size_btn 0x7f0704e4
+int dimen text_size_btn2 0x7f0704e5
+int dimen text_size_middle 0x7f0704e6
+int dimen text_size_nav 0x7f0704e7
+int dimen tooltip_corner_radius 0x7f0704e8
+int dimen tooltip_horizontal_padding 0x7f0704e9
+int dimen tooltip_margin 0x7f0704ea
+int dimen tooltip_precise_anchor_extra_offset 0x7f0704eb
+int dimen tooltip_precise_anchor_threshold 0x7f0704ec
+int dimen tooltip_vertical_padding 0x7f0704ed
+int dimen tooltip_y_offset_non_touch 0x7f0704ee
+int dimen tooltip_y_offset_touch 0x7f0704ef
+int dimen v2x_panel_loading_top 0x7f0704f0
+int dimen v2x_share_btn_height 0x7f0704f1
+int dimen v2x_share_btn_width 0x7f0704f2
int drawable abc_ab_share_pack_mtrl_alpha 0x7f080001
int drawable abc_action_bar_item_background_material 0x7f080002
int drawable abc_btn_borderless_material 0x7f080003
@@ -2100,197 +2106,240 @@ int drawable ic_snapshot_ph 0x7f0800dd
int drawable icon_default_user_head 0x7f0800de
int drawable icon_heart_choose 0x7f0800df
int drawable icon_heart_second 0x7f0800e0
-int drawable icon_heart_unchoose 0x7f0800e1
-int drawable icon_map_marker_4s 0x7f0800e2
-int drawable icon_map_marker_book 0x7f0800e3
-int drawable icon_map_marker_car_gray 0x7f0800e4
-int drawable icon_map_marker_car_gray_selected 0x7f0800e5
-int drawable icon_map_marker_car_type2 0x7f0800e6
-int drawable icon_map_marker_car_type_110 0x7f0800e7
-int drawable icon_map_marker_car_type_119 0x7f0800e8
-int drawable icon_map_marker_car_type_120 0x7f0800e9
-int drawable icon_map_marker_car_type_bus 0x7f0800ea
-int drawable icon_map_marker_car_type_taxi 0x7f0800eb
-int drawable icon_map_marker_living 0x7f0800ec
-int drawable icon_map_marker_living_white 0x7f0800ed
-int drawable icon_map_marker_location_yellow 0x7f0800ee
-int drawable icon_map_marker_location_yellow_vr 0x7f0800ef
-int drawable icon_map_marker_misic 0x7f0800f0
-int drawable icon_map_marker_news 0x7f0800f1
-int drawable icon_map_marker_pondingl 0x7f0800f2
-int drawable icon_map_marker_pondingl2 0x7f0800f3
-int drawable icon_map_marker_pondingl2_white 0x7f0800f4
-int drawable icon_map_marker_refuel 0x7f0800f5
-int drawable icon_map_marker_road_block_off 0x7f0800f6
-int drawable icon_map_marker_road_block_off2 0x7f0800f7
-int drawable icon_map_marker_road_block_off2_white 0x7f0800f8
-int drawable icon_map_marker_road_block_up 0x7f0800f9
-int drawable icon_map_marker_road_block_up2 0x7f0800fa
-int drawable icon_map_marker_road_block_up2_white 0x7f0800fb
-int drawable icon_map_marker_road_check 0x7f0800fc
-int drawable icon_map_marker_road_check2 0x7f0800fd
-int drawable icon_map_marker_road_check2_white 0x7f0800fe
-int drawable icon_map_marker_road_work 0x7f0800ff
-int drawable icon_map_marker_road_work2 0x7f080100
-int drawable icon_map_marker_road_work2_white 0x7f080101
-int drawable icon_map_marker_shear_news 0x7f080102
-int drawable icon_map_marker_shop 0x7f080103
-int drawable icon_map_marker_shop_discount 0x7f080104
-int drawable join_checkbox_bg 0x7f080105
-int drawable keyboard_background_holo 0x7f080106
-int drawable line_v 0x7f080107
-int drawable list_line 0x7f080108
-int drawable listview_bg_dark 0x7f080109
-int drawable live_exit 0x7f08010a
-int drawable location_city_image 0x7f08010b
-int drawable main_solid_left_page_up_normal 0x7f08010c
-int drawable main_solid_left_page_up_press 0x7f08010d
-int drawable main_solid_right_page_up_normal 0x7f08010e
-int drawable main_solid_right_page_up_press 0x7f08010f
-int drawable mainpage_location_img 0x7f080110
-int drawable map_api_ic_current_location2 0x7f080111
-int drawable map_custom_ic_current_location2 0x7f080112
-int drawable map_location_normal 0x7f080113
-int drawable map_location_press 0x7f080114
-int drawable mapcolor 0x7f080115
-int drawable mapscale 0x7f080116
-int drawable marker_blue 0x7f080117
-int drawable menu_left_btn_p 0x7f080118
-int drawable module_common_default_user_head 0x7f080119
-int drawable module_common_online_car_vr_left 0x7f08011a
-int drawable module_common_online_car_vr_machine_middle 0x7f08011b
-int drawable module_common_online_car_vr_middle 0x7f08011c
-int drawable module_common_online_car_vr_reverse 0x7f08011d
-int drawable module_common_online_car_vr_right 0x7f08011e
-int drawable module_commons_heart_ratingbar_drawable 0x7f08011f
-int drawable module_commons_machine_car_other_left_normal 0x7f080120
-int drawable module_commons_machine_car_other_left_reverse_normal 0x7f080121
-int drawable module_commons_machine_car_other_normal 0x7f080122
-int drawable module_commons_machine_car_other_reverse_normal 0x7f080123
-int drawable module_commons_machine_car_other_right_normal 0x7f080124
-int drawable module_commons_machine_car_other_right_reverse_normal 0x7f080125
-int drawable module_commons_shape_dlg_round_bkg 0x7f080126
-int drawable module_commons_shape_left_btn_bkg 0x7f080127
-int drawable module_commons_shape_right_btn_bkg 0x7f080128
-int drawable module_commons_toast_bkg 0x7f080129
-int drawable module_commons_user_car_other_dangerous 0x7f08012a
-int drawable module_commons_user_car_other_left_normal 0x7f08012b
-int drawable module_commons_user_car_other_left_normal_dangerous 0x7f08012c
-int drawable module_commons_user_car_other_left_reverse_dangerous 0x7f08012d
-int drawable module_commons_user_car_other_left_reverse_normal 0x7f08012e
-int drawable module_commons_user_car_other_normal 0x7f08012f
-int drawable module_commons_user_car_other_reverse_dangerous 0x7f080130
-int drawable module_commons_user_car_other_reverse_normal 0x7f080131
-int drawable module_commons_user_car_other_right_dangerous 0x7f080132
-int drawable module_commons_user_car_other_right_normal 0x7f080133
-int drawable module_commons_user_car_other_right_reverse_dangerous 0x7f080134
-int drawable module_commons_user_car_other_right_reverse_normal 0x7f080135
-int drawable module_commons_user_car_self 0x7f080136
-int drawable module_commons_user_car_self_left 0x7f080137
-int drawable module_commons_user_car_self_right 0x7f080138
-int drawable module_dw_common_corner_bkg_light 0x7f080139
-int drawable module_service_ic_call 0x7f08013a
-int drawable module_service_ic_rc_accident 0x7f08013b
-int drawable module_service_ic_rc_accident2 0x7f08013c
-int drawable module_service_ic_rc_accident3 0x7f08013d
-int drawable module_service_ic_rc_accident3_white 0x7f08013e
-int drawable module_service_ic_rc_dark_frog 0x7f08013f
-int drawable module_service_ic_rc_dark_frog2 0x7f080140
-int drawable module_service_ic_rc_dark_frog2_white 0x7f080141
-int drawable module_service_ic_rc_freeze 0x7f080142
-int drawable module_service_ic_rc_freeze2 0x7f080143
-int drawable module_service_ic_rc_freeze2_white 0x7f080144
-int drawable module_service_ic_rc_illegal_park 0x7f080145
-int drawable module_service_ic_rc_illegal_park_white 0x7f080146
-int drawable module_service_ic_rc_parking 0x7f080147
-int drawable module_service_ic_rc_parking2 0x7f080148
-int drawable module_service_ic_rc_road_slippery 0x7f080149
-int drawable module_service_ic_rc_road_slippery_light 0x7f08014a
-int drawable module_service_ic_seek_helping 0x7f08014b
-int drawable module_services_marker_bkg 0x7f08014c
-int drawable navi_tmcbar_bg 0x7f08014d
-int drawable not_join_checkbox_bg 0x7f08014e
-int drawable notification_action_background 0x7f08014f
-int drawable notification_bg 0x7f080150
-int drawable notification_bg_low 0x7f080151
-int drawable notification_bg_low_normal 0x7f080152
-int drawable notification_bg_low_pressed 0x7f080153
-int drawable notification_bg_normal 0x7f080154
-int drawable notification_bg_normal_pressed 0x7f080155
-int drawable notification_icon_background 0x7f080156
-int drawable notification_template_icon_bg 0x7f080157
-int drawable notification_template_icon_low_bg 0x7f080158
-int drawable notification_tile_bg 0x7f080159
-int drawable notify_panel_notification_icon_bg 0x7f08015a
-int drawable panel_channellist_detail 0x7f08015b
-int drawable panel_menu_selector 0x7f08015c
-int drawable panel_route_selecter 0x7f08015d
-int drawable panel_route_selecter_p 0x7f08015e
-int drawable panel_search_btn_selector 0x7f08015f
-int drawable panel_search_indicator_selector 0x7f080160
-int drawable panel_search_voice_selector 0x7f080161
-int drawable panel_sharetrf_bg_pressed 0x7f080162
-int drawable progress_bg 0x7f080163
-int drawable public_arrow_back_iv 0x7f080164
-int drawable rect_dark 0x7f080165
-int drawable rect_light 0x7f080166
-int drawable result_color 0x7f080167
-int drawable seagreen 0x7f080168
-int drawable search_information_normal 0x7f080169
-int drawable search_information_press 0x7f08016a
-int drawable selector_nav_btn 0x7f08016b
-int drawable shadow_left 0x7f08016c
-int drawable shadow_line 0x7f08016d
-int drawable shadow_line2 0x7f08016e
-int drawable shadow_progress 0x7f08016f
-int drawable shadow_right 0x7f080170
-int drawable shape_blue_trans 0x7f080171
-int drawable stat_sys_download 0x7f080172
-int drawable tc_10 0x7f080173
-int drawable tc_11 0x7f080174
-int drawable tc_12 0x7f080175
-int drawable tc_13 0x7f080176
-int drawable tc_14 0x7f080177
-int drawable tc_15 0x7f080178
-int drawable tc_16 0x7f080179
-int drawable tc_17 0x7f08017a
-int drawable tc_20 0x7f08017b
-int drawable tc_21 0x7f08017c
-int drawable tc_22 0x7f08017d
-int drawable tc_23 0x7f08017e
-int drawable tc_24 0x7f08017f
-int drawable tc_25 0x7f080180
-int drawable tc_26 0x7f080181
-int drawable tc_27 0x7f080182
-int drawable tc_28 0x7f080183
-int drawable tc_30 0x7f080184
-int drawable tc_31 0x7f080185
-int drawable tc_32 0x7f080186
-int drawable tc_33 0x7f080187
-int drawable tc_34 0x7f080188
-int drawable tc_35 0x7f080189
-int drawable tc_36 0x7f08018a
-int drawable tc_37 0x7f08018b
-int drawable tc_38 0x7f08018c
-int drawable tc_39 0x7f08018d
-int drawable tc_40 0x7f08018e
-int drawable tc_41 0x7f08018f
-int drawable tc_42 0x7f080190
-int drawable tc_43 0x7f080191
-int drawable tc_44 0x7f080192
-int drawable tc_68 0x7f080193
-int drawable tc_84 0x7f080194
-int drawable tc_85 0x7f080195
-int drawable text_bg 0x7f080196
-int drawable textblue 0x7f080197
-int drawable tooltip_frame_dark 0x7f080198
-int drawable tooltip_frame_light 0x7f080199
-int drawable transparent_background 0x7f08019a
-int drawable transparent_drawable 0x7f08019b
-int drawable video_loading_img 0x7f08019c
-int drawable white 0x7f08019d
-int drawable white1 0x7f08019e
-int drawable white2 0x7f08019f
+int drawable icon_heart_second_other 0x7f0800e1
+int drawable icon_heart_unchoose 0x7f0800e2
+int drawable icon_heart_unchoose_other 0x7f0800e3
+int drawable icon_map_marker_4s 0x7f0800e4
+int drawable icon_map_marker_book 0x7f0800e5
+int drawable icon_map_marker_car_gray 0x7f0800e6
+int drawable icon_map_marker_car_gray_selected 0x7f0800e7
+int drawable icon_map_marker_car_type2 0x7f0800e8
+int drawable icon_map_marker_car_type_110 0x7f0800e9
+int drawable icon_map_marker_car_type_119 0x7f0800ea
+int drawable icon_map_marker_car_type_120 0x7f0800eb
+int drawable icon_map_marker_car_type_bus 0x7f0800ec
+int drawable icon_map_marker_car_type_taxi 0x7f0800ed
+int drawable icon_map_marker_living 0x7f0800ee
+int drawable icon_map_marker_living_white 0x7f0800ef
+int drawable icon_map_marker_location_yellow 0x7f0800f0
+int drawable icon_map_marker_location_yellow_vr 0x7f0800f1
+int drawable icon_map_marker_misic 0x7f0800f2
+int drawable icon_map_marker_news 0x7f0800f3
+int drawable icon_map_marker_pondingl 0x7f0800f4
+int drawable icon_map_marker_pondingl2 0x7f0800f5
+int drawable icon_map_marker_pondingl2_white 0x7f0800f6
+int drawable icon_map_marker_refuel 0x7f0800f7
+int drawable icon_map_marker_road_block_off 0x7f0800f8
+int drawable icon_map_marker_road_block_off2 0x7f0800f9
+int drawable icon_map_marker_road_block_off2_white 0x7f0800fa
+int drawable icon_map_marker_road_block_up 0x7f0800fb
+int drawable icon_map_marker_road_block_up2 0x7f0800fc
+int drawable icon_map_marker_road_block_up2_white 0x7f0800fd
+int drawable icon_map_marker_road_check 0x7f0800fe
+int drawable icon_map_marker_road_check2 0x7f0800ff
+int drawable icon_map_marker_road_check2_white 0x7f080100
+int drawable icon_map_marker_road_work 0x7f080101
+int drawable icon_map_marker_road_work2 0x7f080102
+int drawable icon_map_marker_road_work2_white 0x7f080103
+int drawable icon_map_marker_shear_news 0x7f080104
+int drawable icon_map_marker_shop 0x7f080105
+int drawable icon_map_marker_shop_discount 0x7f080106
+int drawable join_checkbox_bg 0x7f080107
+int drawable keyboard_background_holo 0x7f080108
+int drawable line_v 0x7f080109
+int drawable list_line 0x7f08010a
+int drawable listview_bg_dark 0x7f08010b
+int drawable live_exit 0x7f08010c
+int drawable location_city_image 0x7f08010d
+int drawable main_solid_left_page_up_normal 0x7f08010e
+int drawable main_solid_left_page_up_press 0x7f08010f
+int drawable main_solid_right_page_up_normal 0x7f080110
+int drawable main_solid_right_page_up_press 0x7f080111
+int drawable mainpage_location_img 0x7f080112
+int drawable map_api_ic_current_location2 0x7f080113
+int drawable map_custom_ic_current_location2 0x7f080114
+int drawable map_location_normal 0x7f080115
+int drawable map_location_press 0x7f080116
+int drawable mapcolor 0x7f080117
+int drawable mapscale 0x7f080118
+int drawable marker_blue 0x7f080119
+int drawable menu_left_btn_p 0x7f08011a
+int drawable module_common_close_selector 0x7f08011b
+int drawable module_common_default_user_head 0x7f08011c
+int drawable module_common_ic_rc_accident3 0x7f08011d
+int drawable module_common_ic_rc_accident3_white 0x7f08011e
+int drawable module_common_ic_rc_dark_frog2 0x7f08011f
+int drawable module_common_ic_rc_dark_frog2_white 0x7f080120
+int drawable module_common_ic_rc_freeze2 0x7f080121
+int drawable module_common_ic_rc_freeze2_white 0x7f080122
+int drawable module_common_ic_rc_illegal_park 0x7f080123
+int drawable module_common_ic_rc_illegal_park_white 0x7f080124
+int drawable module_common_ic_rc_parking2 0x7f080125
+int drawable module_common_icon_close 0x7f080126
+int drawable module_common_icon_close_press 0x7f080127
+int drawable module_common_icon_map_marker_4s 0x7f080128
+int drawable module_common_icon_map_marker_living 0x7f080129
+int drawable module_common_icon_map_marker_living_white 0x7f08012a
+int drawable module_common_icon_map_marker_pondingl2 0x7f08012b
+int drawable module_common_icon_map_marker_pondingl2_white 0x7f08012c
+int drawable module_common_icon_map_marker_refuel 0x7f08012d
+int drawable module_common_icon_map_marker_road_block_off2 0x7f08012e
+int drawable module_common_icon_map_marker_road_block_off2_white 0x7f08012f
+int drawable module_common_icon_map_marker_road_block_up2 0x7f080130
+int drawable module_common_icon_map_marker_road_block_up2_white 0x7f080131
+int drawable module_common_icon_map_marker_road_check2 0x7f080132
+int drawable module_common_icon_map_marker_road_check2_white 0x7f080133
+int drawable module_common_icon_map_marker_road_work2 0x7f080134
+int drawable module_common_icon_map_marker_road_work2_white 0x7f080135
+int drawable module_common_icon_map_marker_shear_news 0x7f080136
+int drawable module_common_icon_map_marker_shop 0x7f080137
+int drawable module_common_icon_map_marker_shop_discount 0x7f080138
+int drawable module_common_icon_seek_help 0x7f080139
+int drawable module_common_my_location_bg 0x7f08013a
+int drawable module_common_online_car_vr_left 0x7f08013b
+int drawable module_common_online_car_vr_machine_middle 0x7f08013c
+int drawable module_common_online_car_vr_middle 0x7f08013d
+int drawable module_common_online_car_vr_reverse 0x7f08013e
+int drawable module_common_online_car_vr_right 0x7f08013f
+int drawable module_common_selector_call 0x7f080140
+int drawable module_commons_dialog_bg 0x7f080141
+int drawable module_commons_dialog_left_bg 0x7f080142
+int drawable module_commons_dialog_right_bg 0x7f080143
+int drawable module_commons_heart_ratingbar_drawable 0x7f080144
+int drawable module_commons_machine_car_other_left_normal 0x7f080145
+int drawable module_commons_machine_car_other_left_reverse_normal 0x7f080146
+int drawable module_commons_machine_car_other_normal 0x7f080147
+int drawable module_commons_machine_car_other_reverse_normal 0x7f080148
+int drawable module_commons_machine_car_other_right_normal 0x7f080149
+int drawable module_commons_machine_car_other_right_reverse_normal 0x7f08014a
+int drawable module_commons_shape_dlg_round_bkg 0x7f08014b
+int drawable module_commons_shape_left_btn_bkg 0x7f08014c
+int drawable module_commons_shape_right_btn_bkg 0x7f08014d
+int drawable module_commons_toast_bkg 0x7f08014e
+int drawable module_commons_user_car_other_dangerous 0x7f08014f
+int drawable module_commons_user_car_other_left_normal 0x7f080150
+int drawable module_commons_user_car_other_left_normal_dangerous 0x7f080151
+int drawable module_commons_user_car_other_left_reverse_dangerous 0x7f080152
+int drawable module_commons_user_car_other_left_reverse_normal 0x7f080153
+int drawable module_commons_user_car_other_normal 0x7f080154
+int drawable module_commons_user_car_other_reverse_dangerous 0x7f080155
+int drawable module_commons_user_car_other_reverse_normal 0x7f080156
+int drawable module_commons_user_car_other_right_dangerous 0x7f080157
+int drawable module_commons_user_car_other_right_normal 0x7f080158
+int drawable module_commons_user_car_other_right_reverse_dangerous 0x7f080159
+int drawable module_commons_user_car_other_right_reverse_normal 0x7f08015a
+int drawable module_commons_user_car_self 0x7f08015b
+int drawable module_commons_user_car_self_left 0x7f08015c
+int drawable module_commons_user_car_self_right 0x7f08015d
+int drawable module_dw_common_corner_bkg_light 0x7f08015e
+int drawable module_ext_drawable_shadow_bg 0x7f08015f
+int drawable module_ext_shadow_bkg 0x7f080160
+int drawable module_ext_shadow_bkg_pressed 0x7f080161
+int drawable module_map_amap_my_location_icon 0x7f080162
+int drawable module_service_ic_call 0x7f080163
+int drawable module_service_ic_rc_accident 0x7f080164
+int drawable module_service_ic_rc_accident2 0x7f080165
+int drawable module_service_ic_rc_accident3 0x7f080166
+int drawable module_service_ic_rc_accident3_white 0x7f080167
+int drawable module_service_ic_rc_dark_frog 0x7f080168
+int drawable module_service_ic_rc_dark_frog2 0x7f080169
+int drawable module_service_ic_rc_dark_frog2_white 0x7f08016a
+int drawable module_service_ic_rc_freeze 0x7f08016b
+int drawable module_service_ic_rc_freeze2 0x7f08016c
+int drawable module_service_ic_rc_freeze2_white 0x7f08016d
+int drawable module_service_ic_rc_illegal_park 0x7f08016e
+int drawable module_service_ic_rc_illegal_park_white 0x7f08016f
+int drawable module_service_ic_rc_parking 0x7f080170
+int drawable module_service_ic_rc_parking2 0x7f080171
+int drawable module_service_ic_rc_road_slippery 0x7f080172
+int drawable module_service_ic_rc_road_slippery_light 0x7f080173
+int drawable module_service_ic_seek_helping 0x7f080174
+int drawable module_services_marker_bkg 0x7f080175
+int drawable navi_tmcbar_bg 0x7f080176
+int drawable not_join_checkbox_bg 0x7f080177
+int drawable notification_action_background 0x7f080178
+int drawable notification_bg 0x7f080179
+int drawable notification_bg_low 0x7f08017a
+int drawable notification_bg_low_normal 0x7f08017b
+int drawable notification_bg_low_pressed 0x7f08017c
+int drawable notification_bg_normal 0x7f08017d
+int drawable notification_bg_normal_pressed 0x7f08017e
+int drawable notification_icon_background 0x7f08017f
+int drawable notification_template_icon_bg 0x7f080180
+int drawable notification_template_icon_low_bg 0x7f080181
+int drawable notification_tile_bg 0x7f080182
+int drawable notify_panel_notification_icon_bg 0x7f080183
+int drawable panel_channellist_detail 0x7f080184
+int drawable panel_menu_selector 0x7f080185
+int drawable panel_route_selecter 0x7f080186
+int drawable panel_route_selecter_p 0x7f080187
+int drawable panel_search_btn_selector 0x7f080188
+int drawable panel_search_indicator_selector 0x7f080189
+int drawable panel_search_voice_selector 0x7f08018a
+int drawable panel_sharetrf_bg_pressed 0x7f08018b
+int drawable progress_bg 0x7f08018c
+int drawable public_arrow_back_iv 0x7f08018d
+int drawable rect_dark 0x7f08018e
+int drawable rect_light 0x7f08018f
+int drawable result_color 0x7f080190
+int drawable seagreen 0x7f080191
+int drawable search_information_normal 0x7f080192
+int drawable search_information_press 0x7f080193
+int drawable selector_call_btn_normal 0x7f080194
+int drawable selector_call_btn_pressed 0x7f080195
+int drawable selector_nav_btn 0x7f080196
+int drawable shadow_left 0x7f080197
+int drawable shadow_line 0x7f080198
+int drawable shadow_line2 0x7f080199
+int drawable shadow_progress 0x7f08019a
+int drawable shadow_right 0x7f08019b
+int drawable shape_blue_trans 0x7f08019c
+int drawable stat_sys_download 0x7f08019d
+int drawable tc_10 0x7f08019e
+int drawable tc_11 0x7f08019f
+int drawable tc_12 0x7f0801a0
+int drawable tc_13 0x7f0801a1
+int drawable tc_14 0x7f0801a2
+int drawable tc_15 0x7f0801a3
+int drawable tc_16 0x7f0801a4
+int drawable tc_17 0x7f0801a5
+int drawable tc_20 0x7f0801a6
+int drawable tc_21 0x7f0801a7
+int drawable tc_22 0x7f0801a8
+int drawable tc_23 0x7f0801a9
+int drawable tc_24 0x7f0801aa
+int drawable tc_25 0x7f0801ab
+int drawable tc_26 0x7f0801ac
+int drawable tc_27 0x7f0801ad
+int drawable tc_28 0x7f0801ae
+int drawable tc_30 0x7f0801af
+int drawable tc_31 0x7f0801b0
+int drawable tc_32 0x7f0801b1
+int drawable tc_33 0x7f0801b2
+int drawable tc_34 0x7f0801b3
+int drawable tc_35 0x7f0801b4
+int drawable tc_36 0x7f0801b5
+int drawable tc_37 0x7f0801b6
+int drawable tc_38 0x7f0801b7
+int drawable tc_39 0x7f0801b8
+int drawable tc_40 0x7f0801b9
+int drawable tc_41 0x7f0801ba
+int drawable tc_42 0x7f0801bb
+int drawable tc_43 0x7f0801bc
+int drawable tc_44 0x7f0801bd
+int drawable tc_68 0x7f0801be
+int drawable tc_84 0x7f0801bf
+int drawable tc_85 0x7f0801c0
+int drawable text_bg 0x7f0801c1
+int drawable textblue 0x7f0801c2
+int drawable tooltip_frame_dark 0x7f0801c3
+int drawable tooltip_frame_light 0x7f0801c4
+int drawable transparent_background 0x7f0801c5
+int drawable transparent_drawable 0x7f0801c6
+int drawable video_loading_img 0x7f0801c7
+int drawable white 0x7f0801c8
+int drawable white1 0x7f0801c9
+int drawable white2 0x7f0801ca
int id BaseQuickAdapter_databinding_support 0x7f0b0001
int id BaseQuickAdapter_dragging_support 0x7f0b0002
int id BaseQuickAdapter_swiping_support 0x7f0b0003
@@ -2503,141 +2552,143 @@ int id module_commons_toast_msg 0x7f0b00d1
int id module_commons_wm_dialog_button_cancel 0x7f0b00d2
int id module_commons_wm_dialog_button_ok 0x7f0b00d3
int id module_commons_wm_dialog_content 0x7f0b00d4
-int id movePathView 0x7f0b00d5
-int id multiply 0x7f0b00d6
-int id navi_sdk_tmc_bar_container 0x7f0b00d7
-int id next_icon 0x7f0b00d8
-int id none 0x7f0b00d9
-int id normal 0x7f0b00da
-int id notification_background 0x7f0b00db
-int id notification_main_column 0x7f0b00dc
-int id notification_main_column_container 0x7f0b00dd
-int id off 0x7f0b00de
-int id on 0x7f0b00df
-int id onAttachStateChangeListener 0x7f0b00e0
-int id onDateChanged 0x7f0b00e1
-int id orientation 0x7f0b00e2
-int id packed 0x7f0b00e3
-int id panel_btn_gps 0x7f0b00e4
-int id panel_guidance_right 0x7f0b00e5
-int id panel_text_gps 0x7f0b00e6
-int id parent 0x7f0b00e7
-int id parentPanel 0x7f0b00e8
-int id percent 0x7f0b00e9
-int id poi_browse_btn_back 0x7f0b00ea
-int id poi_browse_btn_exit 0x7f0b00eb
-int id poi_browse_btn_next 0x7f0b00ec
-int id poi_browse_btn_pre 0x7f0b00ed
-int id poi_browse_btns 0x7f0b00ee
-int id progress 0x7f0b00ef
-int id progress_circular 0x7f0b00f0
-int id progress_horizontal 0x7f0b00f1
-int id query 0x7f0b00f2
-int id radio 0x7f0b00f3
-int id refresh_button 0x7f0b00f4
-int id rg_routing_set 0x7f0b00f5
-int id right 0x7f0b00f6
-int id right_icon 0x7f0b00f7
-int id right_side 0x7f0b00f8
-int id round 0x7f0b00f9
-int id route_select_ok 0x7f0b00fa
-int id route_select_setting 0x7f0b00fb
-int id route_select_sim_navi 0x7f0b00fc
-int id route_select_start 0x7f0b00fd
-int id route_select_start_navi 0x7f0b00fe
-int id route_select_time 0x7f0b00ff
-int id route_set_end 0x7f0b0100
-int id route_set_layout 0x7f0b0101
-int id route_set_ok 0x7f0b0102
-int id route_set_start 0x7f0b0103
-int id route_set_waypoi 0x7f0b0104
-int id routebook_child_item_info_ll 0x7f0b0105
-int id routing_set_avoidhwy 0x7f0b0106
-int id routing_set_avoidtoll 0x7f0b0107
-int id routing_set_default 0x7f0b0108
-int id routing_set_fast 0x7f0b0109
-int id routing_set_short 0x7f0b010a
-int id screen 0x7f0b010b
-int id scrollIndicatorDown 0x7f0b010c
-int id scrollIndicatorUp 0x7f0b010d
-int id scrollView 0x7f0b010e
-int id search_badge 0x7f0b010f
-int id search_bar 0x7f0b0110
-int id search_button 0x7f0b0111
-int id search_close_btn 0x7f0b0112
-int id search_edit_frame 0x7f0b0113
-int id search_go_btn 0x7f0b0114
-int id search_mag_icon 0x7f0b0115
-int id search_plate 0x7f0b0116
-int id search_src_text 0x7f0b0117
-int id search_voice_btn 0x7f0b0118
-int id select_dialog_listview 0x7f0b0119
-int id shape_id 0x7f0b011a
-int id shortcut 0x7f0b011b
-int id sim_navi_control 0x7f0b011c
-int id sim_navi_next 0x7f0b011d
-int id sim_navi_pre 0x7f0b011e
-int id sim_navi_start 0x7f0b011f
-int id sim_navi_text 0x7f0b0120
-int id spacer 0x7f0b0121
-int id split_action_bar 0x7f0b0122
-int id spread 0x7f0b0123
-int id spread_inside 0x7f0b0124
-int id src_atop 0x7f0b0125
-int id src_in 0x7f0b0126
-int id src_over 0x7f0b0127
-int id start 0x7f0b0128
-int id status_bar_latest_event_content 0x7f0b0129
-int id submenuarrow 0x7f0b012a
-int id submit_area 0x7f0b012b
-int id tabMode 0x7f0b012c
-int id tag_accessibility_actions 0x7f0b012d
-int id tag_accessibility_clickable_spans 0x7f0b012e
-int id tag_accessibility_heading 0x7f0b012f
-int id tag_accessibility_pane_title 0x7f0b0130
-int id tag_screen_reader_focusable 0x7f0b0131
-int id tag_transition_group 0x7f0b0132
-int id tag_unhandled_key_event_manager 0x7f0b0133
-int id tag_unhandled_key_listeners 0x7f0b0134
-int id text 0x7f0b0135
-int id text2 0x7f0b0136
-int id textSpacerNoButtons 0x7f0b0137
-int id textSpacerNoTitle 0x7f0b0138
-int id textWatcher 0x7f0b0139
-int id time 0x7f0b013a
-int id title 0x7f0b013b
-int id titleDividerNoCustom 0x7f0b013c
-int id title_template 0x7f0b013d
-int id tmcBarCar 0x7f0b013e
-int id tmcBarTxt 0x7f0b013f
-int id tmcBarView 0x7f0b0140
-int id top 0x7f0b0141
-int id topPanel 0x7f0b0142
-int id tvMarkerContent 0x7f0b0143
-int id tv_dis 0x7f0b0144
-int id tv_guidance_cur_road 0x7f0b0145
-int id tv_guidance_enter_dis 0x7f0b0146
-int id tv_guidance_exit_dis 0x7f0b0147
-int id tv_guidance_next_export 0x7f0b0148
-int id tv_guidance_next_road 0x7f0b0149
-int id tv_guidance_next_road_two_name 0x7f0b014a
-int id tv_guidance_over_mileage 0x7f0b014b
-int id tv_guidance_over_time 0x7f0b014c
-int id tv_guidance_server_dis 0x7f0b014d
-int id tv_next_road 0x7f0b014e
-int id tv_over_view 0x7f0b014f
-int id tv_prompt 0x7f0b0150
-int id tv_scale 0x7f0b0151
-int id tv_scale_bg 0x7f0b0152
-int id tv_snippet 0x7f0b0153
-int id tv_title 0x7f0b0154
-int id txt_info 0x7f0b0155
-int id unchecked 0x7f0b0156
-int id uniform 0x7f0b0157
-int id up 0x7f0b0158
-int id vertical 0x7f0b0159
-int id wrap 0x7f0b015a
-int id wrap_content 0x7f0b015b
+int id module_map_amap_my_location_bg_iv 0x7f0b00d5
+int id module_map_amap_my_location_iv 0x7f0b00d6
+int id movePathView 0x7f0b00d7
+int id multiply 0x7f0b00d8
+int id navi_sdk_tmc_bar_container 0x7f0b00d9
+int id next_icon 0x7f0b00da
+int id none 0x7f0b00db
+int id normal 0x7f0b00dc
+int id notification_background 0x7f0b00dd
+int id notification_main_column 0x7f0b00de
+int id notification_main_column_container 0x7f0b00df
+int id off 0x7f0b00e0
+int id on 0x7f0b00e1
+int id onAttachStateChangeListener 0x7f0b00e2
+int id onDateChanged 0x7f0b00e3
+int id orientation 0x7f0b00e4
+int id packed 0x7f0b00e5
+int id panel_btn_gps 0x7f0b00e6
+int id panel_guidance_right 0x7f0b00e7
+int id panel_text_gps 0x7f0b00e8
+int id parent 0x7f0b00e9
+int id parentPanel 0x7f0b00ea
+int id percent 0x7f0b00eb
+int id poi_browse_btn_back 0x7f0b00ec
+int id poi_browse_btn_exit 0x7f0b00ed
+int id poi_browse_btn_next 0x7f0b00ee
+int id poi_browse_btn_pre 0x7f0b00ef
+int id poi_browse_btns 0x7f0b00f0
+int id progress 0x7f0b00f1
+int id progress_circular 0x7f0b00f2
+int id progress_horizontal 0x7f0b00f3
+int id query 0x7f0b00f4
+int id radio 0x7f0b00f5
+int id refresh_button 0x7f0b00f6
+int id rg_routing_set 0x7f0b00f7
+int id right 0x7f0b00f8
+int id right_icon 0x7f0b00f9
+int id right_side 0x7f0b00fa
+int id round 0x7f0b00fb
+int id route_select_ok 0x7f0b00fc
+int id route_select_setting 0x7f0b00fd
+int id route_select_sim_navi 0x7f0b00fe
+int id route_select_start 0x7f0b00ff
+int id route_select_start_navi 0x7f0b0100
+int id route_select_time 0x7f0b0101
+int id route_set_end 0x7f0b0102
+int id route_set_layout 0x7f0b0103
+int id route_set_ok 0x7f0b0104
+int id route_set_start 0x7f0b0105
+int id route_set_waypoi 0x7f0b0106
+int id routebook_child_item_info_ll 0x7f0b0107
+int id routing_set_avoidhwy 0x7f0b0108
+int id routing_set_avoidtoll 0x7f0b0109
+int id routing_set_default 0x7f0b010a
+int id routing_set_fast 0x7f0b010b
+int id routing_set_short 0x7f0b010c
+int id screen 0x7f0b010d
+int id scrollIndicatorDown 0x7f0b010e
+int id scrollIndicatorUp 0x7f0b010f
+int id scrollView 0x7f0b0110
+int id search_badge 0x7f0b0111
+int id search_bar 0x7f0b0112
+int id search_button 0x7f0b0113
+int id search_close_btn 0x7f0b0114
+int id search_edit_frame 0x7f0b0115
+int id search_go_btn 0x7f0b0116
+int id search_mag_icon 0x7f0b0117
+int id search_plate 0x7f0b0118
+int id search_src_text 0x7f0b0119
+int id search_voice_btn 0x7f0b011a
+int id select_dialog_listview 0x7f0b011b
+int id shape_id 0x7f0b011c
+int id shortcut 0x7f0b011d
+int id sim_navi_control 0x7f0b011e
+int id sim_navi_next 0x7f0b011f
+int id sim_navi_pre 0x7f0b0120
+int id sim_navi_start 0x7f0b0121
+int id sim_navi_text 0x7f0b0122
+int id spacer 0x7f0b0123
+int id split_action_bar 0x7f0b0124
+int id spread 0x7f0b0125
+int id spread_inside 0x7f0b0126
+int id src_atop 0x7f0b0127
+int id src_in 0x7f0b0128
+int id src_over 0x7f0b0129
+int id start 0x7f0b012a
+int id status_bar_latest_event_content 0x7f0b012b
+int id submenuarrow 0x7f0b012c
+int id submit_area 0x7f0b012d
+int id tabMode 0x7f0b012e
+int id tag_accessibility_actions 0x7f0b012f
+int id tag_accessibility_clickable_spans 0x7f0b0130
+int id tag_accessibility_heading 0x7f0b0131
+int id tag_accessibility_pane_title 0x7f0b0132
+int id tag_screen_reader_focusable 0x7f0b0133
+int id tag_transition_group 0x7f0b0134
+int id tag_unhandled_key_event_manager 0x7f0b0135
+int id tag_unhandled_key_listeners 0x7f0b0136
+int id text 0x7f0b0137
+int id text2 0x7f0b0138
+int id textSpacerNoButtons 0x7f0b0139
+int id textSpacerNoTitle 0x7f0b013a
+int id textWatcher 0x7f0b013b
+int id time 0x7f0b013c
+int id title 0x7f0b013d
+int id titleDividerNoCustom 0x7f0b013e
+int id title_template 0x7f0b013f
+int id tmcBarCar 0x7f0b0140
+int id tmcBarTxt 0x7f0b0141
+int id tmcBarView 0x7f0b0142
+int id top 0x7f0b0143
+int id topPanel 0x7f0b0144
+int id tvMarkerContent 0x7f0b0145
+int id tv_dis 0x7f0b0146
+int id tv_guidance_cur_road 0x7f0b0147
+int id tv_guidance_enter_dis 0x7f0b0148
+int id tv_guidance_exit_dis 0x7f0b0149
+int id tv_guidance_next_export 0x7f0b014a
+int id tv_guidance_next_road 0x7f0b014b
+int id tv_guidance_next_road_two_name 0x7f0b014c
+int id tv_guidance_over_mileage 0x7f0b014d
+int id tv_guidance_over_time 0x7f0b014e
+int id tv_guidance_server_dis 0x7f0b014f
+int id tv_next_road 0x7f0b0150
+int id tv_over_view 0x7f0b0151
+int id tv_prompt 0x7f0b0152
+int id tv_scale 0x7f0b0153
+int id tv_scale_bg 0x7f0b0154
+int id tv_snippet 0x7f0b0155
+int id tv_title 0x7f0b0156
+int id txt_info 0x7f0b0157
+int id unchecked 0x7f0b0158
+int id uniform 0x7f0b0159
+int id up 0x7f0b015a
+int id vertical 0x7f0b015b
+int id wrap 0x7f0b015c
+int id wrap_content 0x7f0b015d
int integer abc_config_activityDefaultDur 0x7f0c0001
int integer abc_config_activityShortDur 0x7f0c0002
int integer cancel_button_image_alpha 0x7f0c0003
@@ -2739,48 +2790,50 @@ int layout layout_panel_guidance 0x7f0e0027
int layout modeules_commons_layout_custom_ratingbar 0x7f0e0028
int layout modudle_services_marker_layout 0x7f0e0029
int layout modudle_services_marker_layout_info 0x7f0e002a
-int layout module_commons_layout_car 0x7f0e002b
-int layout module_commons_layout_toast 0x7f0e002c
-int layout module_commons_layout_toast_with_left_drawable 0x7f0e002d
-int layout module_commons_layout_wm_dialog 0x7f0e002e
-int layout navi_control_btn 0x7f0e002f
-int layout network_loading_item 0x7f0e0030
-int layout notification_action 0x7f0e0031
-int layout notification_action_tombstone 0x7f0e0032
-int layout notification_media_action 0x7f0e0033
-int layout notification_media_cancel_action 0x7f0e0034
-int layout notification_template_big_media 0x7f0e0035
-int layout notification_template_big_media_custom 0x7f0e0036
-int layout notification_template_big_media_narrow 0x7f0e0037
-int layout notification_template_big_media_narrow_custom 0x7f0e0038
-int layout notification_template_custom_big 0x7f0e0039
-int layout notification_template_icon_group 0x7f0e003a
-int layout notification_template_lines_media 0x7f0e003b
-int layout notification_template_media 0x7f0e003c
-int layout notification_template_media_custom 0x7f0e003d
-int layout notification_template_part_chronometer 0x7f0e003e
-int layout notification_template_part_time 0x7f0e003f
-int layout panel_btn_car 0x7f0e0040
-int layout panel_btn_cars 0x7f0e0041
-int layout panel_btn_left 0x7f0e0042
-int layout panel_btn_location 0x7f0e0043
-int layout panel_btn_logo 0x7f0e0044
-int layout panel_btn_scale 0x7f0e0045
-int layout panel_btn_zoom 0x7f0e0046
-int layout panel_btn_zoom_ctrl 0x7f0e0047
-int layout panel_guidance 0x7f0e0048
-int layout panel_polygon 0x7f0e0049
-int layout panel_route_select 0x7f0e004a
-int layout panel_route_set 0x7f0e004b
-int layout routebook_child_item 0x7f0e004c
-int layout select_dialog_item_material 0x7f0e004d
-int layout select_dialog_multichoice_material 0x7f0e004e
-int layout select_dialog_singlechoice_material 0x7f0e004f
-int layout support_simple_spinner_dropdown_item 0x7f0e0050
-int layout view_over_view 0x7f0e0051
-int layout view_traffic_button 0x7f0e0052
-int layout view_trafficbar 0x7f0e0053
-int layout view_zoom 0x7f0e0054
+int layout module_common_my_location 0x7f0e002b
+int layout module_commons_layout_car 0x7f0e002c
+int layout module_commons_layout_toast 0x7f0e002d
+int layout module_commons_layout_toast_with_left_drawable 0x7f0e002e
+int layout module_commons_layout_wm_dialog 0x7f0e002f
+int layout module_map_amap_my_location 0x7f0e0030
+int layout navi_control_btn 0x7f0e0031
+int layout network_loading_item 0x7f0e0032
+int layout notification_action 0x7f0e0033
+int layout notification_action_tombstone 0x7f0e0034
+int layout notification_media_action 0x7f0e0035
+int layout notification_media_cancel_action 0x7f0e0036
+int layout notification_template_big_media 0x7f0e0037
+int layout notification_template_big_media_custom 0x7f0e0038
+int layout notification_template_big_media_narrow 0x7f0e0039
+int layout notification_template_big_media_narrow_custom 0x7f0e003a
+int layout notification_template_custom_big 0x7f0e003b
+int layout notification_template_icon_group 0x7f0e003c
+int layout notification_template_lines_media 0x7f0e003d
+int layout notification_template_media 0x7f0e003e
+int layout notification_template_media_custom 0x7f0e003f
+int layout notification_template_part_chronometer 0x7f0e0040
+int layout notification_template_part_time 0x7f0e0041
+int layout panel_btn_car 0x7f0e0042
+int layout panel_btn_cars 0x7f0e0043
+int layout panel_btn_left 0x7f0e0044
+int layout panel_btn_location 0x7f0e0045
+int layout panel_btn_logo 0x7f0e0046
+int layout panel_btn_scale 0x7f0e0047
+int layout panel_btn_zoom 0x7f0e0048
+int layout panel_btn_zoom_ctrl 0x7f0e0049
+int layout panel_guidance 0x7f0e004a
+int layout panel_polygon 0x7f0e004b
+int layout panel_route_select 0x7f0e004c
+int layout panel_route_set 0x7f0e004d
+int layout routebook_child_item 0x7f0e004e
+int layout select_dialog_item_material 0x7f0e004f
+int layout select_dialog_multichoice_material 0x7f0e0050
+int layout select_dialog_singlechoice_material 0x7f0e0051
+int layout support_simple_spinner_dropdown_item 0x7f0e0052
+int layout view_over_view 0x7f0e0053
+int layout view_traffic_button 0x7f0e0054
+int layout view_trafficbar 0x7f0e0055
+int layout view_zoom 0x7f0e0056
int mipmap arrow 0x7f100001
int mipmap bg_main 0x7f100002
int mipmap car_two 0x7f100003
@@ -3505,7 +3558,7 @@ int style lightMode 0x7f15016e
int style rb_map_nav 0x7f15016f
int style register_Dialog_Fullscreen 0x7f150170
int style title 0x7f150171
-int[] styleable ActionBar { 0x7f040034, 0x7f040036, 0x7f040037, 0x7f04006e, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f04008c, 0x7f040091, 0x7f040092, 0x7f0400ae, 0x7f0400c7, 0x7f0400c8, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400d0, 0x7f0400d3, 0x7f040120, 0x7f040135, 0x7f040143, 0x7f04014a, 0x7f04014b, 0x7f04017b, 0x7f04017e, 0x7f04019a, 0x7f0401a3 }
+int[] styleable ActionBar { 0x7f040035, 0x7f040037, 0x7f040038, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f040074, 0x7f04008d, 0x7f040092, 0x7f040093, 0x7f0400af, 0x7f0400c8, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400cc, 0x7f0400d1, 0x7f0400d4, 0x7f040121, 0x7f040136, 0x7f040144, 0x7f04014b, 0x7f04014c, 0x7f04017c, 0x7f04017f, 0x7f04019b, 0x7f0401a4 }
int styleable ActionBar_background 0
int styleable ActionBar_backgroundSplit 1
int styleable ActionBar_backgroundStacked 2
@@ -3540,17 +3593,17 @@ int styleable ActionBarLayout_android_layout_gravity 0
int[] styleable ActionMenuItemView { 0x101013f }
int styleable ActionMenuItemView_android_minWidth 0
int[] styleable ActionMenuView { }
-int[] styleable ActionMode { 0x7f040034, 0x7f040036, 0x7f04005b, 0x7f0400c7, 0x7f04017e, 0x7f0401a3 }
+int[] styleable ActionMode { 0x7f040035, 0x7f040037, 0x7f04005c, 0x7f0400c8, 0x7f04017f, 0x7f0401a4 }
int styleable ActionMode_background 0
int styleable ActionMode_backgroundSplit 1
int styleable ActionMode_closeItemLayout 2
int styleable ActionMode_height 3
int styleable ActionMode_subtitleTextStyle 4
int styleable ActionMode_titleTextStyle 5
-int[] styleable ActivityChooserView { 0x7f0400b0, 0x7f0400d1 }
+int[] styleable ActivityChooserView { 0x7f0400b1, 0x7f0400d2 }
int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0
int styleable ActivityChooserView_initialActivityCount 1
-int[] styleable AlertDialog { 0x10100f2, 0x7f040045, 0x7f040046, 0x7f040115, 0x7f040116, 0x7f040132, 0x7f04016d, 0x7f04016e }
+int[] styleable AlertDialog { 0x10100f2, 0x7f040046, 0x7f040047, 0x7f040116, 0x7f040117, 0x7f040133, 0x7f04016e, 0x7f04016f }
int styleable AlertDialog_android_layout 0
int styleable AlertDialog_buttonIconDimen 1
int styleable AlertDialog_buttonPanelSideLayout 2
@@ -3574,12 +3627,12 @@ int styleable AnimatedStateListDrawableTransition_android_drawable 0
int styleable AnimatedStateListDrawableTransition_android_fromId 1
int styleable AnimatedStateListDrawableTransition_android_reversible 2
int styleable AnimatedStateListDrawableTransition_android_toId 3
-int[] styleable AppCompatImageView { 0x1010119, 0x7f040174, 0x7f040198, 0x7f040199 }
+int[] styleable AppCompatImageView { 0x1010119, 0x7f040175, 0x7f040199, 0x7f04019a }
int styleable AppCompatImageView_android_src 0
int styleable AppCompatImageView_srcCompat 1
int styleable AppCompatImageView_tint 2
int styleable AppCompatImageView_tintMode 3
-int[] styleable AppCompatSeekBar { 0x1010142, 0x7f040195, 0x7f040196, 0x7f040197 }
+int[] styleable AppCompatSeekBar { 0x1010142, 0x7f040196, 0x7f040197, 0x7f040198 }
int styleable AppCompatSeekBar_android_thumb 0
int styleable AppCompatSeekBar_tickMark 1
int styleable AppCompatSeekBar_tickMarkTint 2
@@ -3592,7 +3645,7 @@ int styleable AppCompatTextHelper_android_drawableRight 3
int styleable AppCompatTextHelper_android_drawableStart 4
int styleable AppCompatTextHelper_android_drawableTop 5
int styleable AppCompatTextHelper_android_textAppearance 6
-int[] styleable AppCompatTextView { 0x1010034, 0x7f04002f, 0x7f040030, 0x7f040031, 0x7f040032, 0x7f040033, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099, 0x7f04009b, 0x7f04009c, 0x7f04009d, 0x7f04009e, 0x7f0400b9, 0x7f0400bb, 0x7f0400c3, 0x7f0400d5, 0x7f040110, 0x7f040184, 0x7f04018f }
+int[] styleable AppCompatTextView { 0x1010034, 0x7f040030, 0x7f040031, 0x7f040032, 0x7f040033, 0x7f040034, 0x7f040097, 0x7f040098, 0x7f040099, 0x7f04009a, 0x7f04009c, 0x7f04009d, 0x7f04009e, 0x7f04009f, 0x7f0400ba, 0x7f0400bc, 0x7f0400c4, 0x7f0400d6, 0x7f040111, 0x7f040185, 0x7f040190 }
int styleable AppCompatTextView_android_textAppearance 0
int styleable AppCompatTextView_autoSizeMaxTextSize 1
int styleable AppCompatTextView_autoSizeMinTextSize 2
@@ -3614,7 +3667,7 @@ int styleable AppCompatTextView_lastBaselineToBottomHeight 17
int styleable AppCompatTextView_lineHeight 18
int styleable AppCompatTextView_textAllCaps 19
int styleable AppCompatTextView_textLocale 20
-int[] styleable AppCompatTheme { 0x7f040001, 0x7f040002, 0x7f040003, 0x7f040004, 0x7f040005, 0x7f040006, 0x7f040007, 0x7f040008, 0x7f040009, 0x7f04000a, 0x7f04000b, 0x7f04000c, 0x7f04000d, 0x7f04000f, 0x7f040010, 0x7f040011, 0x7f040012, 0x7f040013, 0x7f040014, 0x7f040015, 0x7f040016, 0x7f040017, 0x7f040018, 0x7f040019, 0x7f04001a, 0x7f04001b, 0x7f04001c, 0x7f04001d, 0x7f04001e, 0x7f04001f, 0x7f040022, 0x7f040025, 0x7f040026, 0x7f040027, 0x7f040028, 0x10100ae, 0x1010057, 0x7f04002e, 0x7f04003d, 0x7f04003e, 0x7f04003f, 0x7f040040, 0x7f040041, 0x7f040042, 0x7f040047, 0x7f040048, 0x7f040053, 0x7f040054, 0x7f04005f, 0x7f040060, 0x7f040061, 0x7f040062, 0x7f040063, 0x7f040064, 0x7f040065, 0x7f040066, 0x7f040067, 0x7f040068, 0x7f040079, 0x7f04008e, 0x7f04008f, 0x7f040090, 0x7f040093, 0x7f040095, 0x7f0400a0, 0x7f0400a1, 0x7f0400a3, 0x7f0400a4, 0x7f0400a5, 0x7f0400c9, 0x7f0400cf, 0x7f040111, 0x7f040112, 0x7f040113, 0x7f040114, 0x7f040117, 0x7f040118, 0x7f040119, 0x7f04011a, 0x7f04011b, 0x7f04011c, 0x7f04011d, 0x7f04011e, 0x7f04011f, 0x7f04013d, 0x7f04013e, 0x7f04013f, 0x7f040142, 0x7f040144, 0x7f04014f, 0x7f040150, 0x7f040151, 0x7f040152, 0x7f040166, 0x7f040167, 0x7f040168, 0x7f040169, 0x7f040171, 0x7f040172, 0x7f040182, 0x7f040185, 0x7f040186, 0x7f040187, 0x7f040188, 0x7f040189, 0x7f04018a, 0x7f04018b, 0x7f04018c, 0x7f04018d, 0x7f04018e, 0x7f0401a4, 0x7f0401a5, 0x7f0401a6, 0x7f0401a7, 0x7f0401ae, 0x7f0401b0, 0x7f0401b1, 0x7f0401b2, 0x7f0401b3, 0x7f0401b4, 0x7f0401b5, 0x7f0401b6, 0x7f0401b7, 0x7f0401b8, 0x7f0401b9 }
+int[] styleable AppCompatTheme { 0x7f040002, 0x7f040003, 0x7f040004, 0x7f040005, 0x7f040006, 0x7f040007, 0x7f040008, 0x7f040009, 0x7f04000a, 0x7f04000b, 0x7f04000c, 0x7f04000d, 0x7f04000e, 0x7f040010, 0x7f040011, 0x7f040012, 0x7f040013, 0x7f040014, 0x7f040015, 0x7f040016, 0x7f040017, 0x7f040018, 0x7f040019, 0x7f04001a, 0x7f04001b, 0x7f04001c, 0x7f04001d, 0x7f04001e, 0x7f04001f, 0x7f040020, 0x7f040023, 0x7f040026, 0x7f040027, 0x7f040028, 0x7f040029, 0x10100ae, 0x1010057, 0x7f04002f, 0x7f04003e, 0x7f04003f, 0x7f040040, 0x7f040041, 0x7f040042, 0x7f040043, 0x7f040048, 0x7f040049, 0x7f040054, 0x7f040055, 0x7f040060, 0x7f040061, 0x7f040062, 0x7f040063, 0x7f040064, 0x7f040065, 0x7f040066, 0x7f040067, 0x7f040068, 0x7f040069, 0x7f04007a, 0x7f04008f, 0x7f040090, 0x7f040091, 0x7f040094, 0x7f040096, 0x7f0400a1, 0x7f0400a2, 0x7f0400a4, 0x7f0400a5, 0x7f0400a6, 0x7f0400ca, 0x7f0400d0, 0x7f040112, 0x7f040113, 0x7f040114, 0x7f040115, 0x7f040118, 0x7f040119, 0x7f04011a, 0x7f04011b, 0x7f04011c, 0x7f04011d, 0x7f04011e, 0x7f04011f, 0x7f040120, 0x7f04013e, 0x7f04013f, 0x7f040140, 0x7f040143, 0x7f040145, 0x7f040150, 0x7f040151, 0x7f040152, 0x7f040153, 0x7f040167, 0x7f040168, 0x7f040169, 0x7f04016a, 0x7f040172, 0x7f040173, 0x7f040183, 0x7f040186, 0x7f040187, 0x7f040188, 0x7f040189, 0x7f04018a, 0x7f04018b, 0x7f04018c, 0x7f04018d, 0x7f04018e, 0x7f04018f, 0x7f0401a5, 0x7f0401a6, 0x7f0401a7, 0x7f0401a8, 0x7f0401af, 0x7f0401b1, 0x7f0401b2, 0x7f0401b3, 0x7f0401b4, 0x7f0401b5, 0x7f0401b6, 0x7f0401b7, 0x7f0401b8, 0x7f0401b9, 0x7f0401ba }
int styleable AppCompatTheme_actionBarDivider 0
int styleable AppCompatTheme_actionBarItemBackground 1
int styleable AppCompatTheme_actionBarPopupTheme 2
@@ -3740,12 +3793,12 @@ int styleable AppCompatTheme_windowFixedWidthMinor 121
int styleable AppCompatTheme_windowMinWidthMajor 122
int styleable AppCompatTheme_windowMinWidthMinor 123
int styleable AppCompatTheme_windowNoTitle 124
-int[] styleable ButtonBarContainerTheme { 0x7f04003e, 0x7f040042 }
+int[] styleable ButtonBarContainerTheme { 0x7f04003f, 0x7f040043 }
int styleable ButtonBarContainerTheme_buttonBarButtonStyle 0
int styleable ButtonBarContainerTheme_buttonBarStyle 1
-int[] styleable ButtonBarLayout { 0x7f040029 }
+int[] styleable ButtonBarLayout { 0x7f04002a }
int styleable ButtonBarLayout_allowStacking 0
-int[] styleable CardView { 0x1010140, 0x101013f, 0x7f04004b, 0x7f04004c, 0x7f04004d, 0x7f04004e, 0x7f04004f, 0x7f040050, 0x7f040074, 0x7f040075, 0x7f040076, 0x7f040077, 0x7f040078 }
+int[] styleable CardView { 0x1010140, 0x101013f, 0x7f04004c, 0x7f04004d, 0x7f04004e, 0x7f04004f, 0x7f040050, 0x7f040051, 0x7f040075, 0x7f040076, 0x7f040077, 0x7f040078, 0x7f040079 }
int styleable CardView_android_minHeight 0
int styleable CardView_android_minWidth 1
int styleable CardView_cardBackgroundColor 2
@@ -3759,7 +3812,7 @@ int styleable CardView_contentPaddingBottom 9
int styleable CardView_contentPaddingLeft 10
int styleable CardView_contentPaddingRight 11
int styleable CardView_contentPaddingTop 12
-int[] styleable CircularProgressDrawable { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080, 0x7f040081, 0x7f040082, 0x7f040083, 0x7f040084, 0x7f040085, 0x7f040086, 0x7f040087, 0x7f040088, 0x7f040089, 0x7f04008a, 0x7f04008b, 0x7f04014c }
+int[] styleable CircularProgressDrawable { 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080, 0x7f040081, 0x7f040082, 0x7f040083, 0x7f040084, 0x7f040085, 0x7f040086, 0x7f040087, 0x7f040088, 0x7f040089, 0x7f04008a, 0x7f04008b, 0x7f04008c, 0x7f04014d }
int styleable CircularProgressDrawable_cpd_inAnimDuration 0
int styleable CircularProgressDrawable_cpd_inStepColors 1
int styleable CircularProgressDrawable_cpd_inStepPercent 2
@@ -3778,16 +3831,16 @@ int styleable CircularProgressDrawable_cpd_strokeSize 14
int styleable CircularProgressDrawable_cpd_transformDuration 15
int styleable CircularProgressDrawable_cpd_transformInterpolator 16
int styleable CircularProgressDrawable_pv_progressMode 17
-int[] styleable ColorStateListItem { 0x7f04002a, 0x101031f, 0x10101a5 }
+int[] styleable ColorStateListItem { 0x7f04002b, 0x101031f, 0x10101a5 }
int styleable ColorStateListItem_alpha 0
int styleable ColorStateListItem_android_alpha 1
int styleable ColorStateListItem_android_color 2
-int[] styleable CompoundButton { 0x1010107, 0x7f040043, 0x7f040049, 0x7f04004a }
+int[] styleable CompoundButton { 0x1010107, 0x7f040044, 0x7f04004a, 0x7f04004b }
int styleable CompoundButton_android_button 0
int styleable CompoundButton_buttonCompat 1
int styleable CompoundButton_buttonTint 2
int styleable CompoundButton_buttonTintMode 3
-int[] styleable ConstraintLayout_Layout { 0x1010120, 0x101011f, 0x1010140, 0x101013f, 0x10100c4, 0x7f04003b, 0x7f04003c, 0x7f040052, 0x7f04006a, 0x7f04006b, 0x7f0400db, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400e8, 0x7f0400e9, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f0400f0, 0x7f0400f1, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040101, 0x7f040102, 0x7f040103, 0x7f040105, 0x7f040106, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c, 0x7f04010f }
+int[] styleable ConstraintLayout_Layout { 0x1010120, 0x101011f, 0x1010140, 0x101013f, 0x10100c4, 0x7f04003c, 0x7f04003d, 0x7f040053, 0x7f04006b, 0x7f04006c, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400e8, 0x7f0400e9, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f0400f0, 0x7f0400f1, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040101, 0x7f040102, 0x7f040103, 0x7f040104, 0x7f040106, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c, 0x7f04010d, 0x7f040110 }
int styleable ConstraintLayout_Layout_android_maxHeight 0
int styleable ConstraintLayout_Layout_android_maxWidth 1
int styleable ConstraintLayout_Layout_android_minHeight 2
@@ -3848,10 +3901,10 @@ int styleable ConstraintLayout_Layout_layout_goneMarginRight 56
int styleable ConstraintLayout_Layout_layout_goneMarginStart 57
int styleable ConstraintLayout_Layout_layout_goneMarginTop 58
int styleable ConstraintLayout_Layout_layout_optimizationLevel 59
-int[] styleable ConstraintLayout_placeholder { 0x7f04006c, 0x7f0400af }
+int[] styleable ConstraintLayout_placeholder { 0x7f04006d, 0x7f0400b0 }
int styleable ConstraintLayout_placeholder_content 0
int styleable ConstraintLayout_placeholder_emptyVisibility 1
-int[] styleable ConstraintSet { 0x101031f, 0x1010440, 0x10100d0, 0x10100f5, 0x10100fa, 0x10103b6, 0x10100f7, 0x10100f9, 0x10103b5, 0x10100f8, 0x10100f4, 0x1010120, 0x101011f, 0x1010140, 0x101013f, 0x10100c4, 0x1010326, 0x1010327, 0x1010328, 0x1010324, 0x1010325, 0x1010320, 0x1010321, 0x1010322, 0x1010323, 0x10103fa, 0x10100dc, 0x7f04003b, 0x7f04003c, 0x7f040052, 0x7f04006b, 0x7f0400db, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400e8, 0x7f0400e9, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f0400f0, 0x7f0400f1, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040101, 0x7f040102, 0x7f040103, 0x7f040105, 0x7f040106, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c }
+int[] styleable ConstraintSet { 0x101031f, 0x1010440, 0x10100d0, 0x10100f5, 0x10100fa, 0x10103b6, 0x10100f7, 0x10100f9, 0x10103b5, 0x10100f8, 0x10100f4, 0x1010120, 0x101011f, 0x1010140, 0x101013f, 0x10100c4, 0x1010326, 0x1010327, 0x1010328, 0x1010324, 0x1010325, 0x1010320, 0x1010321, 0x1010322, 0x1010323, 0x10103fa, 0x10100dc, 0x7f04003c, 0x7f04003d, 0x7f040053, 0x7f04006c, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400e8, 0x7f0400e9, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f0400f0, 0x7f0400f1, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040101, 0x7f040102, 0x7f040103, 0x7f040104, 0x7f040106, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c, 0x7f04010d }
int styleable ConstraintSet_android_alpha 0
int styleable ConstraintSet_android_elevation 1
int styleable ConstraintSet_android_id 2
@@ -3932,10 +3985,10 @@ int styleable ConstraintSet_layout_goneMarginLeft 76
int styleable ConstraintSet_layout_goneMarginRight 77
int styleable ConstraintSet_layout_goneMarginStart 78
int styleable ConstraintSet_layout_goneMarginTop 79
-int[] styleable CoordinatorLayout { 0x7f0400d4, 0x7f040177 }
+int[] styleable CoordinatorLayout { 0x7f0400d5, 0x7f040178 }
int styleable CoordinatorLayout_keylines 0
int styleable CoordinatorLayout_statusBarBackground 1
-int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x7f0400d8, 0x7f0400d9, 0x7f0400da, 0x7f040104, 0x7f04010d, 0x7f04010e }
+int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x7f0400d9, 0x7f0400da, 0x7f0400db, 0x7f040105, 0x7f04010e, 0x7f04010f }
int styleable CoordinatorLayout_Layout_android_layout_gravity 0
int styleable CoordinatorLayout_Layout_layout_anchor 1
int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
@@ -3943,25 +3996,26 @@ int styleable CoordinatorLayout_Layout_layout_behavior 3
int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
int styleable CoordinatorLayout_Layout_layout_insetEdge 5
int styleable CoordinatorLayout_Layout_layout_keyline 6
-int[] styleable CustomCircleImageView { 0x7f040055, 0x7f040056, 0x7f040057, 0x7f040058 }
+int[] styleable CustomCircleImageView { 0x7f040056, 0x7f040057, 0x7f040058, 0x7f040059 }
int styleable CustomCircleImageView_civ_border_color 0
int styleable CustomCircleImageView_civ_border_overlay 1
int styleable CustomCircleImageView_civ_border_width 2
int styleable CustomCircleImageView_civ_fill_color 3
-int[] styleable CustomRatingBar { 0x7f040059, 0x7f0400a6, 0x7f0400a7, 0x7f0400a8, 0x7f0400a9, 0x7f0400aa, 0x7f0400ab, 0x7f0400ac, 0x7f0400ad, 0x7f040178 }
-int styleable CustomRatingBar_clickable 0
-int styleable CustomRatingBar_elenmentCount 1
-int styleable CustomRatingBar_elenmentEmpty 2
-int styleable CustomRatingBar_elenmentFill 3
-int styleable CustomRatingBar_elenmentHarf 4
-int styleable CustomRatingBar_elenmentHeight 5
-int styleable CustomRatingBar_elenmentPadding 6
-int styleable CustomRatingBar_elenmentStep 7
-int styleable CustomRatingBar_elenmentWidth 8
-int styleable CustomRatingBar_stepSize 9
-int[] styleable DiscreteScrollView { 0x7f0400a2 }
+int[] styleable CustomRatingBar { 0x7f040001, 0x7f04005a, 0x7f0400a7, 0x7f0400a8, 0x7f0400a9, 0x7f0400aa, 0x7f0400ab, 0x7f0400ac, 0x7f0400ad, 0x7f0400ae, 0x7f040179 }
+int styleable CustomRatingBar_OtherHeartImg 0
+int styleable CustomRatingBar_clickable 1
+int styleable CustomRatingBar_elenmentCount 2
+int styleable CustomRatingBar_elenmentEmpty 3
+int styleable CustomRatingBar_elenmentFill 4
+int styleable CustomRatingBar_elenmentHarf 5
+int styleable CustomRatingBar_elenmentHeight 6
+int styleable CustomRatingBar_elenmentPadding 7
+int styleable CustomRatingBar_elenmentStep 8
+int styleable CustomRatingBar_elenmentWidth 9
+int styleable CustomRatingBar_stepSize 10
+int[] styleable DiscreteScrollView { 0x7f0400a3 }
int styleable DiscreteScrollView_dsv_orientation 0
-int[] styleable DrawerArrowToggle { 0x7f04002c, 0x7f04002d, 0x7f04003a, 0x7f04005e, 0x7f04009a, 0x7f0400c5, 0x7f040170, 0x7f040191 }
+int[] styleable DrawerArrowToggle { 0x7f04002d, 0x7f04002e, 0x7f04003b, 0x7f04005f, 0x7f04009b, 0x7f0400c6, 0x7f040171, 0x7f040192 }
int styleable DrawerArrowToggle_arrowHeadLength 0
int styleable DrawerArrowToggle_arrowShaftLength 1
int styleable DrawerArrowToggle_barLength 2
@@ -3970,14 +4024,14 @@ int styleable DrawerArrowToggle_drawableSize 4
int styleable DrawerArrowToggle_gapBetweenBars 5
int styleable DrawerArrowToggle_spinBars 6
int styleable DrawerArrowToggle_thickness 7
-int[] styleable FontFamily { 0x7f0400bc, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c1 }
+int[] styleable FontFamily { 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c1, 0x7f0400c2 }
int styleable FontFamily_fontProviderAuthority 0
int styleable FontFamily_fontProviderCerts 1
int styleable FontFamily_fontProviderFetchStrategy 2
int styleable FontFamily_fontProviderFetchTimeout 3
int styleable FontFamily_fontProviderPackage 4
int styleable FontFamily_fontProviderQuery 5
-int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x7f0400ba, 0x7f0400c2, 0x7f0400c3, 0x7f0400c4, 0x7f0401ac }
+int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x7f0400bb, 0x7f0400c3, 0x7f0400c4, 0x7f0400c5, 0x7f0401ad }
int styleable FontFamilyFont_android_font 0
int styleable FontFamilyFont_android_fontStyle 1
int styleable FontFamilyFont_android_fontVariationSettings 2
@@ -3988,7 +4042,7 @@ int styleable FontFamilyFont_fontStyle 6
int styleable FontFamilyFont_fontVariationSettings 7
int styleable FontFamilyFont_fontWeight 8
int styleable FontFamilyFont_ttcIndex 9
-int[] styleable GenericDraweeHierarchy { 0x7f040023, 0x7f040035, 0x7f0400b1, 0x7f0400b2, 0x7f0400b3, 0x7f040138, 0x7f040140, 0x7f040141, 0x7f040146, 0x7f040147, 0x7f040148, 0x7f040149, 0x7f040157, 0x7f040158, 0x7f04015a, 0x7f04015b, 0x7f04015c, 0x7f04015d, 0x7f04015e, 0x7f04015f, 0x7f040160, 0x7f040161, 0x7f040162, 0x7f040163, 0x7f0401ad }
+int[] styleable GenericDraweeHierarchy { 0x7f040024, 0x7f040036, 0x7f0400b2, 0x7f0400b3, 0x7f0400b4, 0x7f040139, 0x7f040141, 0x7f040142, 0x7f040147, 0x7f040148, 0x7f040149, 0x7f04014a, 0x7f040158, 0x7f040159, 0x7f04015b, 0x7f04015c, 0x7f04015d, 0x7f04015e, 0x7f04015f, 0x7f040160, 0x7f040161, 0x7f040162, 0x7f040163, 0x7f040164, 0x7f0401ae }
int styleable GenericDraweeHierarchy_actualImageScaleType 0
int styleable GenericDraweeHierarchy_backgroundImage 1
int styleable GenericDraweeHierarchy_fadeDuration 2
@@ -4032,7 +4086,7 @@ int styleable GradientColorItem_android_color 0
int styleable GradientColorItem_android_offset 1
int[] styleable LinearConstraintLayout { 0x10100c4 }
int styleable LinearConstraintLayout_android_orientation 0
-int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x7f040092, 0x7f040094, 0x7f040123, 0x7f04016b }
+int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x7f040093, 0x7f040095, 0x7f040124, 0x7f04016c }
int styleable LinearLayoutCompat_android_baselineAligned 0
int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1
int styleable LinearLayoutCompat_android_gravity 2
@@ -4057,7 +4111,7 @@ int styleable MenuGroup_android_id 2
int styleable MenuGroup_android_menuCategory 3
int styleable MenuGroup_android_orderInCategory 4
int styleable MenuGroup_android_visible 5
-int[] styleable MenuItem { 0x7f04000e, 0x7f040020, 0x7f040021, 0x7f04002b, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x7f04006d, 0x7f0400cc, 0x7f0400cd, 0x7f040136, 0x7f04016a, 0x7f0401a8 }
+int[] styleable MenuItem { 0x7f04000f, 0x7f040021, 0x7f040022, 0x7f04002c, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x7f04006e, 0x7f0400cd, 0x7f0400ce, 0x7f040137, 0x7f04016b, 0x7f0401a9 }
int styleable MenuItem_actionLayout 0
int styleable MenuItem_actionProviderClass 1
int styleable MenuItem_actionViewClass 2
@@ -4081,7 +4135,7 @@ int styleable MenuItem_iconTintMode 19
int styleable MenuItem_numericModifiers 20
int styleable MenuItem_showAsAction 21
int styleable MenuItem_tooltipText 22
-int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x7f040145, 0x7f040179 }
+int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x7f040146, 0x7f04017a }
int styleable MenuView_android_headerBackground 0
int styleable MenuView_android_horizontalDivider 1
int styleable MenuView_android_itemBackground 2
@@ -4091,7 +4145,7 @@ int styleable MenuView_android_verticalDivider 5
int styleable MenuView_android_windowAnimationStyle 6
int styleable MenuView_preserveIconSpacing 7
int styleable MenuView_subMenuArrow 8
-int[] styleable MogoImageView { 0x7f040125, 0x7f040126, 0x7f040127, 0x7f040128, 0x7f040129, 0x7f04012a, 0x7f04012b, 0x7f04012c, 0x7f04012d, 0x7f04012e, 0x7f04012f, 0x7f040130, 0x7f040131 }
+int[] styleable MogoImageView { 0x7f040126, 0x7f040127, 0x7f040128, 0x7f040129, 0x7f04012a, 0x7f04012b, 0x7f04012c, 0x7f04012d, 0x7f04012e, 0x7f04012f, 0x7f040130, 0x7f040131, 0x7f040132 }
int styleable MogoImageView_miv_blurRadius 0
int styleable MogoImageView_miv_borderColor 1
int styleable MogoImageView_miv_bottomLeftRadius 2
@@ -4107,7 +4161,7 @@ int styleable MogoImageView_miv_topLeftRadius 11
int styleable MogoImageView_miv_topRightRadius 12
int[] styleable MogoSkinBackgroundHelper { 0x10100d4 }
int styleable MogoSkinBackgroundHelper_android_background 0
-int[] styleable MogoSkinCompatImageView { 0x1010119, 0x1010121, 0x7f040174, 0x7f040198 }
+int[] styleable MogoSkinCompatImageView { 0x1010119, 0x1010121, 0x7f040175, 0x7f040199 }
int styleable MogoSkinCompatImageView_android_src 0
int styleable MogoSkinCompatImageView_android_tint 1
int styleable MogoSkinCompatImageView_srcCompat 2
@@ -4120,7 +4174,7 @@ int styleable MogoSkinCompatTextHelper_android_drawableRight 3
int styleable MogoSkinCompatTextHelper_android_drawableStart 4
int styleable MogoSkinCompatTextHelper_android_drawableTop 5
int styleable MogoSkinCompatTextHelper_android_textAppearance 6
-int[] styleable MogoSkinTextAppearance { 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x1010095, 0x1010097, 0x1010096, 0x7f040184 }
+int[] styleable MogoSkinTextAppearance { 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x1010095, 0x1010097, 0x1010096, 0x7f040185 }
int styleable MogoSkinTextAppearance_android_shadowColor 0
int styleable MogoSkinTextAppearance_android_shadowDx 1
int styleable MogoSkinTextAppearance_android_shadowDy 2
@@ -4131,22 +4185,22 @@ int styleable MogoSkinTextAppearance_android_textSize 6
int styleable MogoSkinTextAppearance_android_textStyle 7
int styleable MogoSkinTextAppearance_android_typeface 8
int styleable MogoSkinTextAppearance_textAllCaps 9
-int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x7f040137 }
+int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x7f040138 }
int styleable PopupWindow_android_popupAnimationStyle 0
int styleable PopupWindow_android_popupBackground 1
int styleable PopupWindow_overlapAnchor 2
-int[] styleable PopupWindowBackgroundState { 0x7f040176 }
+int[] styleable PopupWindowBackgroundState { 0x7f040177 }
int styleable PopupWindowBackgroundState_state_above_anchor 0
-int[] styleable RealtimeBlurView { 0x7f040153, 0x7f040154, 0x7f040155, 0x7f0401ba, 0x7f0401bb }
+int[] styleable RealtimeBlurView { 0x7f040154, 0x7f040155, 0x7f040156, 0x7f0401bb, 0x7f0401bc }
int styleable RealtimeBlurView_realtimeBlurRadius 0
int styleable RealtimeBlurView_realtimeDownsampleFactor 1
int styleable RealtimeBlurView_realtimeOverlayColor 2
int styleable RealtimeBlurView_xRadius 3
int styleable RealtimeBlurView_yRadius 4
-int[] styleable RecycleListView { 0x7f040139, 0x7f04013c }
+int[] styleable RecycleListView { 0x7f04013a, 0x7f04013d }
int styleable RecycleListView_paddingBottomNoButtons 0
int styleable RecycleListView_paddingTopNoTitle 1
-int[] styleable RecyclerView { 0x10100eb, 0x10100f1, 0x10100c4, 0x7f0400b4, 0x7f0400b5, 0x7f0400b6, 0x7f0400b7, 0x7f0400b8, 0x7f0400d7, 0x7f040159, 0x7f04016f, 0x7f040175 }
+int[] styleable RecyclerView { 0x10100eb, 0x10100f1, 0x10100c4, 0x7f0400b5, 0x7f0400b6, 0x7f0400b7, 0x7f0400b8, 0x7f0400b9, 0x7f0400d8, 0x7f04015a, 0x7f040170, 0x7f040176 }
int styleable RecyclerView_android_clipToPadding 0
int styleable RecyclerView_android_descendantFocusability 1
int styleable RecyclerView_android_orientation 2
@@ -4159,7 +4213,7 @@ int styleable RecyclerView_layoutManager 8
int styleable RecyclerView_reverseLayout 9
int styleable RecyclerView_spanCount 10
int styleable RecyclerView_stackFromEnd 11
-int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x7f04005a, 0x7f040069, 0x7f04008d, 0x7f0400c6, 0x7f0400ce, 0x7f0400d6, 0x7f04014d, 0x7f04014e, 0x7f040164, 0x7f040165, 0x7f04017a, 0x7f04017f, 0x7f0401af }
+int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x7f04005b, 0x7f04006a, 0x7f04008e, 0x7f0400c7, 0x7f0400cf, 0x7f0400d7, 0x7f04014e, 0x7f04014f, 0x7f040165, 0x7f040166, 0x7f04017b, 0x7f040180, 0x7f0401b0 }
int styleable SearchView_android_focusable 0
int styleable SearchView_android_imeOptions 1
int styleable SearchView_android_inputType 2
@@ -4177,12 +4231,12 @@ int styleable SearchView_searchIcon 13
int styleable SearchView_submitBackground 14
int styleable SearchView_suggestionRowLayout 15
int styleable SearchView_voiceIcon 16
-int[] styleable SimpleDraweeView { 0x7f040024 }
+int[] styleable SimpleDraweeView { 0x7f040025 }
int styleable SimpleDraweeView_actualImageUri 0
int[] styleable SkinCompatProgressBar { 0x101013b, 0x101013c }
int styleable SkinCompatProgressBar_android_indeterminateDrawable 0
int styleable SkinCompatProgressBar_android_progressDrawable 1
-int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x7f040143 }
+int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x7f040144 }
int styleable Spinner_android_dropDownWidth 0
int styleable Spinner_android_entries 1
int styleable Spinner_android_popupBackground 2
@@ -4197,7 +4251,7 @@ int styleable StateListDrawable_android_variablePadding 4
int styleable StateListDrawable_android_visible 5
int[] styleable StateListDrawableItem { 0x1010199 }
int styleable StateListDrawableItem_android_drawable 0
-int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x7f04016c, 0x7f040173, 0x7f040180, 0x7f040181, 0x7f040183, 0x7f040192, 0x7f040193, 0x7f040194, 0x7f0401a9, 0x7f0401aa, 0x7f0401ab }
+int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x7f04016d, 0x7f040174, 0x7f040181, 0x7f040182, 0x7f040184, 0x7f040193, 0x7f040194, 0x7f040195, 0x7f0401aa, 0x7f0401ab, 0x7f0401ac }
int styleable SwitchCompat_android_textOff 0
int styleable SwitchCompat_android_textOn 1
int styleable SwitchCompat_android_thumb 2
@@ -4212,7 +4266,7 @@ int styleable SwitchCompat_thumbTintMode 10
int styleable SwitchCompat_track 11
int styleable SwitchCompat_trackTint 12
int styleable SwitchCompat_trackTintMode 13
-int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010585, 0x1010095, 0x1010097, 0x1010096, 0x7f0400bb, 0x7f0400c3, 0x7f040184, 0x7f04018f }
+int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010585, 0x1010095, 0x1010097, 0x1010096, 0x7f0400bc, 0x7f0400c4, 0x7f040185, 0x7f040190 }
int styleable TextAppearance_android_fontFamily 0
int styleable TextAppearance_android_shadowColor 1
int styleable TextAppearance_android_shadowDx 2
@@ -4229,7 +4283,7 @@ int styleable TextAppearance_fontFamily 12
int styleable TextAppearance_fontVariationSettings 13
int styleable TextAppearance_textAllCaps 14
int styleable TextAppearance_textLocale 15
-int[] styleable Toolbar { 0x10100af, 0x1010140, 0x7f040044, 0x7f04005c, 0x7f04005d, 0x7f04006e, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f040120, 0x7f040121, 0x7f040122, 0x7f040124, 0x7f040133, 0x7f040134, 0x7f040143, 0x7f04017b, 0x7f04017c, 0x7f04017d, 0x7f04019a, 0x7f04019b, 0x7f04019c, 0x7f04019d, 0x7f04019e, 0x7f04019f, 0x7f0401a0, 0x7f0401a1, 0x7f0401a2 }
+int[] styleable Toolbar { 0x10100af, 0x1010140, 0x7f040045, 0x7f04005d, 0x7f04005e, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f040074, 0x7f040121, 0x7f040122, 0x7f040123, 0x7f040125, 0x7f040134, 0x7f040135, 0x7f040144, 0x7f04017c, 0x7f04017d, 0x7f04017e, 0x7f04019b, 0x7f04019c, 0x7f04019d, 0x7f04019e, 0x7f04019f, 0x7f0401a0, 0x7f0401a1, 0x7f0401a2, 0x7f0401a3 }
int styleable Toolbar_android_gravity 0
int styleable Toolbar_android_minHeight 1
int styleable Toolbar_buttonGravity 2
@@ -4260,13 +4314,13 @@ int styleable Toolbar_titleMarginTop 26
int styleable Toolbar_titleMargins 27
int styleable Toolbar_titleTextAppearance 28
int styleable Toolbar_titleTextColor 29
-int[] styleable View { 0x10100da, 0x1010000, 0x7f04013a, 0x7f04013b, 0x7f040190 }
+int[] styleable View { 0x10100da, 0x1010000, 0x7f04013b, 0x7f04013c, 0x7f040191 }
int styleable View_android_focusable 0
int styleable View_android_theme 1
int styleable View_paddingEnd 2
int styleable View_paddingStart 3
int styleable View_theme 4
-int[] styleable ViewBackgroundHelper { 0x10100d4, 0x7f040038, 0x7f040039 }
+int[] styleable ViewBackgroundHelper { 0x10100d4, 0x7f040039, 0x7f04003a }
int styleable ViewBackgroundHelper_android_background 0
int styleable ViewBackgroundHelper_backgroundTint 1
int styleable ViewBackgroundHelper_backgroundTintMode 2
diff --git a/foudations/mogo-base-websocket-sdk/build/outputs/logs/manifest-merger-debug-report.txt b/foudations/mogo-base-websocket-sdk/build/outputs/logs/manifest-merger-debug-report.txt
index 32cbe77d18..0c8aabc9a1 100644
--- a/foudations/mogo-base-websocket-sdk/build/outputs/logs/manifest-merger-debug-report.txt
+++ b/foudations/mogo-base-websocket-sdk/build/outputs/logs/manifest-merger-debug-report.txt
@@ -1,37 +1,37 @@
-- Merging decision tree log ---
manifest
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
package
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:2:5-38
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:2:5-38
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
android:versionName
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
android:versionCode
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:1-5:12
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
xmlns:android
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:11-69
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml:1:11-69
uses-sdk
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml reason: use-sdk injection requested
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml reason: use-sdk injection requested
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
android:targetSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
android:minSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
diff --git a/foudations/mogo-base-websocket-sdk/consumer-rules.pro b/foudations/mogo-base-websocket-sdk/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/foudations/mogo-base-websocket-sdk/gradle.properties b/foudations/mogo-base-websocket-sdk/gradle.properties
new file mode 100644
index 0000000000..8c04f6273a
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.base
+POM_ARTIFACT_ID=websocket-sdk
+VERSION_CODE=1
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/proguard-rules.pro b/foudations/mogo-base-websocket-sdk/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/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/foudations/mogo-base-websocket-sdk/src/androidTest/java/com/mogo/mogo_base_websocket_sdk/ExampleInstrumentedTest.java b/foudations/mogo-base-websocket-sdk/src/androidTest/java/com/mogo/mogo_base_websocket_sdk/ExampleInstrumentedTest.java
new file mode 100644
index 0000000000..ab623f49dd
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/androidTest/java/com/mogo/mogo_base_websocket_sdk/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.mogo.mogo_base_websocket_sdk;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.mogo.mogo_base_websocket_sdk.test", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml b/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..164c03d1ce
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+ /
+
\ No newline at end of file
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/IMogoWebSocketInitCallBack.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/IMogoWebSocketInitCallBack.java
new file mode 100644
index 0000000000..6ed99a8d0f
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/IMogoWebSocketInitCallBack.java
@@ -0,0 +1,6 @@
+package com.mogo.base.websocket;
+
+public interface IMogoWebSocketInitCallBack {
+
+ void init();
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketConstant.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketConstant.java
new file mode 100644
index 0000000000..a34166a694
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketConstant.java
@@ -0,0 +1,53 @@
+package com.mogo.base.websocket;
+
+
+import com.mogo.commons.debug.DebugConfig;
+
+public class WebSocketConstant {
+
+ private static final String HOST_DEV = "ws://62.234.196.121";
+ private static final String HOST_QA = "ws://62.234.196.121";
+ private static final String HOST_DEMO = "ws://62.234.196.121";
+ private static final String HOST_RELEASE = "ws://62.234.196.121";
+// private static final String PORT = ":14001/ws";
+ public static final String PORT = ":4003/ws";
+ public static final String PROTOCOL = "ws://";
+
+ private static final String DOMAIN_DEV = "dzt-city.zhidaozhixing.com";
+ private static final String DOMAIN_QA = "dzt-city.zhidaozhixing.com";
+ private static final String DOMAIN_DEMO = "dzt-city.zhidaozhixing.com";
+ private static final String DOMAIN_RELEASE = "dzt-city.zhidaozhixing.com";
+
+ public static String getSocketServer() {
+ switch (DebugConfig.getNetMode()) {
+ case DebugConfig.NET_MODE_DEV:
+ return HOST_DEV;
+ case DebugConfig.NET_MODE_QA:
+ return HOST_QA;
+ case DebugConfig.NET_MODE_DEMO:
+ return HOST_DEMO;
+ case DebugConfig.NET_MODE_RELEASE:
+ default:
+ return HOST_RELEASE;
+ }
+ }
+
+ public static String getDomain(){
+ switch (DebugConfig.getNetMode()) {
+ case DebugConfig.NET_MODE_DEV:
+ return DOMAIN_DEV;
+ case DebugConfig.NET_MODE_QA:
+ return DOMAIN_QA;
+ case DebugConfig.NET_MODE_DEMO:
+ return DOMAIN_DEMO;
+ case DebugConfig.NET_MODE_RELEASE:
+ default:
+ return DOMAIN_RELEASE;
+ }
+ }
+
+// public static String getSocketPort() {
+// return PORT;
+// }
+
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketData.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketData.java
new file mode 100644
index 0000000000..1b6ba190f9
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketData.java
@@ -0,0 +1,66 @@
+package com.mogo.base.websocket;
+
+import java.io.Serializable;
+
+public class WebSocketData implements Serializable {
+
+ private long seq;
+
+ private int msgType;
+
+ private String sn;
+
+ private String data;
+
+ private long utcTime;
+
+ private long upUtcTime;
+
+ public long getSeq() {
+ return seq;
+ }
+
+ public void setSeq(long seq) {
+ this.seq = seq;
+ }
+
+ public int getMsgType() {
+ return msgType;
+ }
+
+ public void setMsgType(int msgType) {
+ this.msgType = msgType;
+ }
+
+ public String getSn() {
+ return sn;
+ }
+
+ public void setSn(String sn) {
+ this.sn = sn;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public long getUtcTime() {
+ return utcTime;
+ }
+
+ public void setUtcTime(long utcTime) {
+ this.utcTime = utcTime;
+ }
+
+ public long getUpUtcTime() {
+ return upUtcTime;
+ }
+
+ public void setUpUtcTime(long upUtcTime) {
+ this.upUtcTime = upUtcTime;
+ }
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketDnsManager.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketDnsManager.java
new file mode 100644
index 0000000000..52b33f2d5c
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketDnsManager.java
@@ -0,0 +1,56 @@
+package com.mogo.base.websocket;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.mogo.httpdns.IMogoHttpDns;
+import com.mogo.utils.ThreadPoolService;
+import com.mogo.utils.logger.Logger;
+
+public class WebSocketDnsManager {
+
+ private static final String TAG = "WebSocketDnsManager";
+
+ private WebSocketDnsManager() {
+
+ }
+
+ private static final class Holder {
+ private static WebSocketDnsManager dnsManager = new WebSocketDnsManager();
+ }
+
+ public static WebSocketDnsManager getInstance() {
+ return Holder.dnsManager;
+ }
+
+ private WebSocketDns webSocketDns;
+ private String cacheIp;
+
+ public void getHttpDnsIp(WebSocketDns webSocketDns) {
+ this.webSocketDns = webSocketDns;
+ IMogoHttpDns mogoHttpDns = ARouter.getInstance().navigation(IMogoHttpDns.class);
+ ThreadPoolService.execute(() -> mogoHttpDns.getHttpDnsIp(WebSocketConstant.getDomain(), false, ip -> {
+ Logger.d(TAG, "getHttpDnsIp ip : " + ip + " , 得到Dns IP,准备回调 初始化webSocket");
+ this.cacheIp = ip;
+ this.webSocketDns.getDnsIp((cacheIp != null ?
+ WebSocketConstant.PROTOCOL + ip + WebSocketConstant.PORT :
+ WebSocketConstant.getSocketServer() + WebSocketConstant.PORT));
+ }));
+ mogoHttpDns.addHttpDnsTtlCallback(WebSocketConstant.getDomain(), () -> {
+ Logger.d(TAG, "ttl callBack ,ready to getCache Dns IP");
+ String dnsCacheIp = mogoHttpDns.getCachedHttpDnsIps(WebSocketConstant.getDomain());
+ if (dnsCacheIp == null) {
+ return;
+ }
+ Logger.d(TAG, "获取缓存Dns IP : " + dnsCacheIp + " , 原缓存 IP : " + cacheIp);
+ if (cacheIp != null && !cacheIp.equals(dnsCacheIp)) {
+ this.webSocketDns.ttlIp(dnsCacheIp + WebSocketConstant.PORT);
+ }
+ });
+ }
+
+ public interface WebSocketDns {
+
+ void getDnsIp(String url);
+
+ void ttlIp(String url);
+ }
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketHandlerThread.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketHandlerThread.java
new file mode 100644
index 0000000000..4343842f8c
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketHandlerThread.java
@@ -0,0 +1,46 @@
+package com.mogo.base.websocket;
+
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+
+import com.mogo.utils.logger.Logger;
+import com.mogo.websocket.SocketClient;
+
+public class WebSocketHandlerThread extends HandlerThread {
+
+ private Handler mHandler;
+ private String tag;
+
+ private static final int MSG_SEND = 1;
+
+ public WebSocketHandlerThread(String name) {
+ super(name);
+ tag = name;
+ }
+
+
+ public void initHandler(){
+ mHandler = new Handler(this.getLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ if (msg.what == MSG_SEND) {
+ Logger.d(tag, "WebSocketHandlerThread handleMessage = " + msg.obj.toString());
+ SocketClient.getInstance().getClientProxy().sendMessage(msg.obj.toString());
+ }
+ }
+ };
+ }
+
+
+ public void sendMsg(String msg) {
+ if(mHandler!=null) {
+ Message message = new Message();
+ message.what = MSG_SEND;
+ message.obj = msg;
+ mHandler.sendMessage(message);
+ }
+ }
+
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java
new file mode 100644
index 0000000000..81cacb5570
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketManager.java
@@ -0,0 +1,243 @@
+package com.mogo.base.websocket;
+
+import android.content.Context;
+import android.os.SystemClock;
+
+import androidx.annotation.Keep;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.mogo.commons.network.Utils;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.service.connection.IMogoMsgAckListener;
+import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
+import com.mogo.service.connection.IMogoWebSocketManager;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
+import com.mogo.websocket.ISocketMsgCallBack;
+import com.mogo.websocket.ISocketMsgSetting;
+import com.mogo.websocket.SocketClient;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static com.mogo.service.connection.WebSocketMsgType.MSG_TYPE_ACK;
+import static com.mogo.service.connection.WebSocketMsgType.MSG_TYPE_DOWNLINK_CAR_DATA;
+
+@Keep
+public class WebSocketManager implements IMogoWebSocketManager, ISocketMsgSetting,
+ ISocketMsgCallBack {
+
+ private static final String TAG = "WebSocketManager-sdk";
+
+ private static volatile WebSocketManager sInstance;
+ private WebSocketHandlerThread handlerThread;
+
+ public WebSocketManager(Context context) {
+ handlerThread = new WebSocketHandlerThread(TAG);
+ handlerThread.start();
+ handlerThread.initHandler();
+ }
+
+ @Keep
+ public static WebSocketManager getInstance(Context context) {
+ if (sInstance == null) {
+ synchronized (WebSocketManager.class) {
+ if (sInstance == null) {
+ sInstance = new WebSocketManager(context);
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ /**
+ * 管理消息分发
+ *
+ * key - msgType
+ */
+ private Map> mListeners =
+ new ConcurrentHashMap<>();
+
+ /**
+ * 管理消息回执
+ *
+ * key - msgId
+ */
+ private Map mAckListeners = new ConcurrentHashMap<>();
+
+ @Override
+ public void init(Context context, String appId) {
+ WebSocketDnsManager.getInstance().getHttpDnsIp(new WebSocketDnsManager.WebSocketDns() {
+ @Override
+ public void getDnsIp(String url) {
+ Logger.d(TAG,"getDnsIp url : " + url);
+ initWebSocket(url);
+ }
+
+ @Override
+ public void ttlIp(String url) {
+ Logger.d(TAG,"ttlIp url : " + url);
+ SocketClient.getInstance().getClientProxy().stop();
+ SocketClient.getInstance().getClientProxy().disConnect();
+ Logger.d(TAG,"ready to re initWebSocket : " + url);
+ initWebSocket(url);
+ }
+ });
+ }
+
+ private void initWebSocket(String ip){
+ SocketClient.getInstance().getClientProxy().initSocketServer(ip);
+ SocketClient.getInstance().getClientProxy().getMessageSettings(this);
+ SocketClient.getInstance().getClientProxy().addISocketMsgCallBack(this);
+ SocketClient.getInstance().getClientProxy().startConnect();
+ }
+
+ @Override
+ public void registerOnWebSocketMessageListener(IMogoOnWebSocketMessageListener listener) {
+ if (listener.getDownLinkType() == null) {
+ Logger.w(TAG, "websocket registerListener msgType is not exist");
+ return;
+ }
+ int msgType = listener.getDownLinkType().getMsgType();
+
+ if (!mListeners.containsKey(msgType)) {
+ mListeners.put(msgType, new ArrayList<>());
+ }
+ mListeners.get(msgType).add(listener);
+ Logger.d(TAG, "websocket add listener success");
+ }
+
+ @Override
+ public void unregisterOnWebSocketMessageListener(IMogoOnWebSocketMessageListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (listener.getDownLinkType() == null) {
+ Logger.w(TAG, "websocket unregisterListener msgType is not exist");
+ return;
+ }
+ int msgType = listener.getDownLinkType().getMsgType();
+ if (!mListeners.containsKey(msgType)) {
+ return;
+ }
+ List listeners = mListeners.get(msgType);
+ if (listeners != null && listeners.contains(listener)) {
+ listeners.remove(listener);
+ Logger.d(TAG, "websocket remove listener success");
+ }
+ }
+
+ @Override
+ public void sendMsg(Object body, IMogoOnWebSocketMessageListener listener) {
+ Logger.d(TAG, "websocket sendMsg body = " + body);
+ if (handlerThread != null) {
+ WebSocketData webSocketData = new WebSocketData();
+ webSocketData.setSeq(computeSendMsgTime());
+ webSocketData.setMsgType(listener.getUpLinkType().getMsgType());
+ webSocketData.setSn(Utils.getSn());
+ webSocketData.setData(GsonUtil.jsonFromObject(body));
+ String msg = GsonUtil.jsonFromObject(webSocketData);
+ Logger.d(TAG,"sendMsg : " + msg);
+ handlerThread.sendMsg(msg);
+ }
+ }
+
+ @Override
+ public void init(Context context) {
+
+ }
+
+ @Override
+ public void onConnectOpen() {
+ Logger.d(TAG, "websocket onConnectOpen");
+ }
+
+ private long serverTime = 0;
+ private long receiveMsgTime = 0;
+
+ /**
+ * 服务端会在ack数据中增加服务端的时间戳{@link #serverTime}, 收到消息时,记录收到消息的时间{@link #receiveMsgTime},收消息的时间用{@link SystemClock#elapsedRealtime()}可以避免系统时间改变造成的影响
+ * 在发送数据时,使用serverTime+(elapseRealtime()-receiveMsgTime)计算发送数据时的时间戳,这个时间戳是基本相对服务端的时间戳为基准的时间,忽略了ack下发时的时间延迟
+ *
+ * 如果{@link #serverTime}或{@link #receiveMsgTime}数据有异常,则使用{@link System#currentTimeMillis()}当做当前时间,作为容错
+ *
+ * @return 基本相对服务端的时间戳为基准的时间
+ */
+ private long computeSendMsgTime(){
+ long sendMsgTime = 0;
+ if (serverTime > 0 && receiveMsgTime > 0) {
+ sendMsgTime = serverTime + (SystemClock.elapsedRealtime() - receiveMsgTime);
+ }else{
+ sendMsgTime = System.currentTimeMillis();
+ }
+ return sendMsgTime;
+ }
+
+ @Override
+ public void handleMessage(String message) {
+ Logger.d(TAG, "websocket received msg = " + message);
+ WebSocketData webSocketData = GsonUtil.objectFromJson(message, WebSocketData.class);
+ int msgType = webSocketData.getMsgType();
+ Logger.d(TAG, "websocket received msg type = " + msgType);
+
+ //服务端下发数据返回,上传数据回执默认不返回
+ if (msgType == MSG_TYPE_DOWNLINK_CAR_DATA.getMsgType()) {
+ List listeners = mListeners.get(msgType);
+ if (listeners != null && !listeners.isEmpty()) {
+ Iterator iterator = listeners.iterator();
+ while (iterator.hasNext()) {
+ IMogoOnWebSocketMessageListener listener = iterator.next();
+ if (listener != null) {
+ Logger.d(TAG, "received msgId = " + webSocketData.getSeq() + ", content = " + webSocketData.getData());
+ Object receiveObj = GsonUtil.objectFromJson(webSocketData.getData(),listener.target());
+ listener.onMsgReceived(receiveObj);
+ }
+ }
+ }
+ } else if (msgType == MSG_TYPE_ACK.getMsgType()) {
+ if (webSocketData.getUtcTime() > 0) {
+ serverTime = webSocketData.getUtcTime();
+ receiveMsgTime = SystemClock.elapsedRealtime();
+ Logger.d(TAG, "设置serverTime");
+ if (webSocketData.getUpUtcTime() > 0) {
+ long nextDelay = webSocketData.getUpUtcTime() - serverTime;
+ MogoApisHandler.getInstance().getApis().getRefreshStrategyControllerApi().resetLocationUpDelay(nextDelay);
+ Logger.d(TAG, "重置下次上报时机: " + nextDelay);
+ }
+ }
+
+
+ }
+ }
+
+ @Override
+ public void onConnectClose() {
+ Logger.d(TAG, "websocket ready to reconnect");
+ SocketClient.getInstance().getClientProxy().stop();
+ SocketClient.getInstance().getClientProxy().reConnect();
+ }
+
+ @Override
+ public void handleError(Exception e) {
+ Logger.e(TAG, "websocket handleError : " + e.getMessage());
+ }
+
+ @Override
+ public String getHandShakeMsg() {
+ WebSocketShakeHandsData webSocketShakeHandData = new WebSocketShakeHandsData(
+ System.currentTimeMillis(),
+ Utils.getSn(),
+ true
+ );
+ return GsonUtil.jsonFromObject(webSocketShakeHandData);
+ }
+
+ @Override
+ public String getHeartBeatMsg() {
+ return null;
+ }
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketShakeHandsData.java b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketShakeHandsData.java
new file mode 100644
index 0000000000..9ac94d62ae
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/main/java/com/mogo/base/websocket/WebSocketShakeHandsData.java
@@ -0,0 +1,55 @@
+package com.mogo.base.websocket;
+
+import java.io.Serializable;
+
+public class WebSocketShakeHandsData implements Serializable {
+
+ public WebSocketShakeHandsData(){
+
+ }
+
+ public WebSocketShakeHandsData(long seq, String sn, boolean bind) {
+ this.seq = seq;
+ this.sn = sn;
+ this.bind = bind;
+ }
+
+ /**
+ * 请求序列号
+ */
+ private long seq;
+
+ /**
+ * 车机sn
+ */
+ private String sn;
+
+ /**
+ * 是否申请通道绑定
+ */
+ private boolean bind;
+
+ public long getSeq() {
+ return seq;
+ }
+
+ public void setSeq(long seq) {
+ this.seq = seq;
+ }
+
+ public String getSn() {
+ return sn;
+ }
+
+ public void setSn(String sn) {
+ this.sn = sn;
+ }
+
+ public boolean isBind() {
+ return bind;
+ }
+
+ public void setBind(boolean bind) {
+ this.bind = bind;
+ }
+}
diff --git a/foudations/mogo-base-websocket-sdk/src/test/java/com/mogo/mogo_base_websocket_sdk/ExampleUnitTest.java b/foudations/mogo-base-websocket-sdk/src/test/java/com/mogo/mogo_base_websocket_sdk/ExampleUnitTest.java
new file mode 100644
index 0000000000..36ec8a5bae
--- /dev/null
+++ b/foudations/mogo-base-websocket-sdk/src/test/java/com/mogo/mogo_base_websocket_sdk/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.mogo.mogo_base_websocket_sdk;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/foudations/mogo-commons/build.gradle b/foudations/mogo-commons/build.gradle
index 35c862662d..790d2b2598 100644
--- a/foudations/mogo-commons/build.gradle
+++ b/foudations/mogo-commons/build.gradle
@@ -46,10 +46,12 @@ dependencies {
implementation rootProject.ext.dependencies.mogoutils
api rootProject.ext.dependencies.ttsbase
implementation rootProject.ext.dependencies.skinsupport
+ implementation rootProject.ext.dependencies.httpdnsbase
} else {
implementation project(":foudations:mogo-utils")
api project(":tts:tts-base")
implementation project(":skin:mogo-skin-support")
+ implementation project(":foudations:httpdns-base")
}
api 'org.greenrobot:eventbus:3.1.1'
}
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 3ef4ea6d4a..d9623194c2 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
@@ -21,9 +21,12 @@ import com.mogo.commons.network.Constants;
import com.mogo.commons.network.ParamsUtil;
import com.mogo.commons.network.X509TrustManagerImpl;
import com.mogo.commons.storage.SpStorage;
+import com.mogo.httpdns.IMogoHttpDns;
+import com.mogo.httpdns.MogoHttpDnsHandler;
import com.mogo.utils.ThreadPoolService;
import com.mogo.utils.TipToast;
import com.mogo.utils.network.NetConfig;
+import com.mogo.utils.storage.SharedPrefsMgr;
import java.security.SecureRandom;
import java.util.Map;
@@ -39,7 +42,7 @@ import okhttp3.Request;
*
* 描述
*/
-public class AbsMogoApplication extends Application {
+public abstract class AbsMogoApplication extends Application {
private static final String TAG = "AbsMogoApplication";
@@ -53,12 +56,22 @@ public class AbsMogoApplication extends Application {
public void onCreate() {
super.onCreate();
sApp = this;
+ initARouter();
if ( shouldInit() ) {
init();
}
}
- protected boolean shouldInit(){
+ private void initARouter() {
+ ARouter.init( sApp );
+ // 初始化 arouter
+ if ( DebugConfig.isDebug() ) {
+ ARouter.openDebug();
+ ARouter.openLog();
+ }
+ }
+
+ protected boolean shouldInit() {
return true;
}
@@ -68,34 +81,29 @@ public class AbsMogoApplication extends Application {
}
private void syncInit() {
- // 初始化 arouter
- if ( DebugConfig.isDebug() ) {
- ARouter.openDebug();
- ARouter.openLog();
- }
- ARouter.init( sApp );
TipToast.init( this, ( ( context, message, tipDrawable ) -> {
if ( TextUtils.isEmpty( message ) ) {
return null;
}
View contentView;
- if(tipDrawable==null) {
- contentView = LayoutInflater.from(context).inflate(R.layout.module_commons_layout_toast, null);
- TextView txt = contentView.findViewById(R.id.module_commons_toast_msg);
- txt.setText(message);
- }else{
+ if ( tipDrawable == null ) {
+ contentView = LayoutInflater.from( context ).inflate( R.layout.module_commons_layout_toast, null );
+ TextView txt = contentView.findViewById( R.id.module_commons_toast_msg );
+ txt.setText( message );
+ } else {
// 有图片,使用带图片的布局,当前只实现了左侧图片
- contentView = LayoutInflater.from(context).inflate(R.layout.module_commons_layout_toast_with_left_drawable, null);
- TextView txt = contentView.findViewById(R.id.module_commons_toast_msg);
- ImageView img = contentView.findViewById(R.id.module_commons_toast_left_drawable);
- img.setImageDrawable(tipDrawable.getDrawable());
+ contentView = LayoutInflater.from( context ).inflate( R.layout.module_commons_layout_toast_with_left_drawable, null );
+ TextView txt = contentView.findViewById( R.id.module_commons_toast_msg );
+ ImageView img = contentView.findViewById( R.id.module_commons_toast_left_drawable );
+ img.setImageDrawable( tipDrawable.getDrawable() );
ViewGroup.LayoutParams params = img.getLayoutParams();
params.width = tipDrawable.getWidth();
params.height = tipDrawable.getHeight();
- txt.setText(message);
+ txt.setText( message );
}
return contentView;
} ) );
+ DebugConfig.setUseCustomMap( SharedPrefsMgr.getInstance( this ).getBoolean( "useCustomMap", false ) );
}
/**
@@ -122,7 +130,7 @@ public class AbsMogoApplication extends Application {
} );
}
- protected void asyncInitImpl(){
+ protected void asyncInitImpl() {
}
@@ -134,6 +142,8 @@ public class AbsMogoApplication extends Application {
} catch ( Exception e ) {
}
+ IMogoHttpDns dns = MogoHttpDnsHandler.getHttpDnsApi();
+
NetConfig.instance().setSignaturePrefix( Constants.SIGN_PREFIX )
.setPublicParams( ParamsUtil.getStaticParams() )
.setHostnameVerifier( new AllAllowedHostnameVerifier() )
@@ -145,6 +155,7 @@ public class AbsMogoApplication extends Application {
.build();
return chain.proceed( request );
} )
+ .setHttpDns( dns.dns() )
.setLoggable( DebugConfig.isDebug() );
}
}
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java
index aa08c2fec0..338b878ce7 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/debug/DebugConfig.java
@@ -81,6 +81,15 @@ public class DebugConfig {
private static int sCarMachineType = CAR_MACHINE_TYPE_SELF_INNOVATE;
+ /**
+ * 西迪obu
+ */
+ public static final int OBU_TYPE_CIDI = 1;
+ /**
+ * 华砺智行obu
+ */
+ public static final int OBU_TYPE_HUALI = 2;
+
/**
* 获取网络环境类型
*
@@ -100,7 +109,7 @@ public class DebugConfig {
* {@link #NET_MODE_DEMO}
* {@link #NET_MODE_RELEASE}
*/
- public static void setNetMode( int netMode ) {
+ public static void setNetMode(int netMode) {
DebugConfig.sNetMode = netMode;
}
@@ -113,7 +122,7 @@ public class DebugConfig {
return sLaunchLocationService;
}
- public static void setLaunchLocationService( boolean launchLocationService ) {
+ public static void setLaunchLocationService(boolean launchLocationService) {
DebugConfig.sLaunchLocationService = launchLocationService;
}
@@ -126,7 +135,7 @@ public class DebugConfig {
return sUseCustomNavi;
}
- public static void setUseCustomNavi( boolean sUseCustomNavi ) {
+ public static void setUseCustomNavi(boolean sUseCustomNavi) {
DebugConfig.sUseCustomNavi = sUseCustomNavi;
}
@@ -135,7 +144,7 @@ public class DebugConfig {
*
* @param type {@link #CAR_MACHINE_TYPE_SELF_INNOVATE} {@link #CAR_MACHINE_TYPE_BYD}
*/
- public static void setCarMachineType( int type ) {
+ public static void setCarMachineType(int type) {
sCarMachineType = type;
}
@@ -157,7 +166,7 @@ public class DebugConfig {
return sIsLauncher;
}
- public static void setLauncher( boolean isLauncher ) {
+ public static void setLauncher(boolean isLauncher) {
DebugConfig.sIsLauncher = isLauncher;
}
@@ -167,10 +176,19 @@ public class DebugConfig {
return sRequestOnlineCarData;
}
- public static void setRequestOnlineCarData( boolean sRequestOnlineCarData ) {
+ public static void setRequestOnlineCarData(boolean sRequestOnlineCarData) {
DebugConfig.sRequestOnlineCarData = sRequestOnlineCarData;
}
+ public static boolean sUseCustomMap = true;
+
+ public static boolean isUseCustomMap() {
+ return sUseCustomMap;
+ }
+
+ public static void setUseCustomMap( boolean sUseCustomMap ) {
+ DebugConfig.sUseCustomMap = sUseCustomMap;
+ }
/**
* 是否支持临时激活小智
*/
@@ -232,6 +250,23 @@ public class DebugConfig {
DebugConfig.sRoadEventAnimated = sRoadEventAnimated;
}
+
+ private static boolean sLoadGuideModule = false;
+
+ public static void setLoadGuideModule(boolean sLoadGuideModule) {
+ DebugConfig.sLoadGuideModule = sLoadGuideModule;
+ }
+
+ public static boolean isLoadGuideModule() {
+ return sLoadGuideModule;
+ }
+
+ private static String SP_GUIDE = "SP_GUIDE_2020_09_09";
+
+ public static String getSpGuide() {
+ return SP_GUIDE;
+ }
+
private static boolean isSkinSupported = false;
public static void setSkinSupported( boolean isSkinSupported ) {
@@ -281,6 +316,16 @@ public class DebugConfig {
return isSupportLauncherCardRefreshStrategy;
}
+ private static int obuType = OBU_TYPE_HUALI;
+
+ public static int getObuType() {
+ return obuType;
+ }
+
+ public static void setObuType(int type) {
+ obuType = type;
+ }
+
/**
* 是否需要刷新个人信息
*/
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java
index b7f21772f4..2c417a6a58 100644
--- a/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/mvp/MvpFragment.java
@@ -33,12 +33,12 @@ public abstract class MvpFragment> exten
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- if ( mRootView == null ) {
- mRootView = inflater.inflate( getLayoutId(), container, false );
+ if (mRootView == null) {
+ mRootView = inflater.inflate(getLayoutId(), container, false);
} else {
- ViewGroup viewGroup = ( ViewGroup ) mRootView.getParent();
- if ( viewGroup != null ) {
- viewGroup.removeView( mRootView );
+ ViewGroup viewGroup = (ViewGroup) mRootView.getParent();
+ if (viewGroup != null) {
+ viewGroup.removeView(mRootView);
}
}
return mRootView;
diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/utils/MortonCode.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/utils/MortonCode.java
new file mode 100644
index 0000000000..14e771b73a
--- /dev/null
+++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/utils/MortonCode.java
@@ -0,0 +1,149 @@
+package com.mogo.commons.utils;
+
+import java.text.DecimalFormat;
+
+/**
+ * 莫顿编码
+ *
+ * @author linyang
+ * @since 2020.07.09
+ */
+public class MortonCode {
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final long NDS_180_DEGREES = 0x7fffffff;
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final long NDS_360_DEGREES = 4294967295L;
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final long NDS_90_DEGREES = 0x3fffffff;
+
+ /**
+ * 经纬度转 morton 时的中间常量
+ */
+ private static final double RULE_MORTON = Math.pow( 2, 32 ) / 360;
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final double RULE_MORTON_TO_LONLAT = 360.0 / Math.pow( 2, 32 );
+
+ /**
+ * @param lon
+ * @param lat
+ * @return
+ */
+ public static long wrapEncodeMorton( Double lon, Double lat ) {
+ DecimalFormat decimalFormat = new DecimalFormat( "#.######" );
+ return encodeMorton( Double.valueOf( decimalFormat.format( lon ) ),
+ Double.valueOf( decimalFormat.format( lat ) ) );
+ }
+
+ /**
+ * 编码 morton code
+ *
+ * @param lon
+ * @param lat
+ * @return
+ */
+ public static long encodeMorton( Double lon, Double lat ) {
+
+ Long bit = 1L;
+ long mortonCode = 0L;
+ long x = ( long ) ( lon * RULE_MORTON );
+ long y = ( long ) ( lat * RULE_MORTON );
+
+ if ( y < 0 ) {
+ y += 0x7FFFFFFF;
+ }
+ y = y << 1;
+ for ( int i = 0; i < 32; i++ ) {
+ // x-part
+ mortonCode = mortonCode | ( x & bit );
+ x = x << 1;
+ bit = bit << 1;
+ // y-part
+ mortonCode = mortonCode | ( y & bit );
+ y = y << 1;
+ bit = bit << 1;
+ }
+
+ return mortonCode;
+ }
+
+ /**
+ * 将莫顿码解码为坐标
+ *
+ * @param mortonCode
+ * @return
+ */
+ public static double[] decodeMorton( long mortonCode ) {
+ long[] midPoint = mortonCodeToCoord( mortonCode );
+ normalizeCoord( midPoint );
+ double[] point = new double[2];
+
+ // 将经纬度长整数转化为 浮点类型
+ point[0] = midPoint[0] * RULE_MORTON_TO_LONLAT;
+ point[1] = midPoint[1] * RULE_MORTON_TO_LONLAT;
+ return point;
+ }
+
+ /**
+ * 莫顿码分别拆解为 编码后的经纬度长整数
+ *
+ * @param mortonCode
+ * @return
+ */
+ private static long[] mortonCodeToCoord( long mortonCode ) {
+ long bit = 1L;
+ long[] longPoint = new long[2];
+
+ for ( int i = 0; i < 32; i++ ) {
+ longPoint[0] |= mortonCode & bit;
+ mortonCode >>= 1;
+ longPoint[1] |= mortonCode & bit;
+ bit <<= 1;
+ }
+ return longPoint;
+ }
+
+ /**
+ * 对编码后的经纬度长整数进行解码
+ *
+ * @param midPoint
+ */
+ private static void normalizeCoord( long[] midPoint ) {
+ // if x > 180 degrees, then subtract 360 degrees
+ if ( midPoint[0] > NDS_180_DEGREES ) {
+ midPoint[0] -=
+ NDS_360_DEGREES + 1; // add 1 because 0 must be counted as well
+ } else if ( midPoint[0] < -NDS_180_DEGREES ) // if x < 180 , x += 360
+ {
+ midPoint[0] +=
+ NDS_360_DEGREES + 1; // add 1 because 0 must be counted as well
+ }
+
+ // if y > 90 degrees, then subtract 180 degrees
+ if ( midPoint[1] > NDS_90_DEGREES ) {
+ midPoint[1] -=
+ NDS_180_DEGREES + 1; // add 1 because 0 must be counted as well
+ } else if ( midPoint[1] < -NDS_90_DEGREES ) // if y < 90, y += 180
+ {
+ midPoint[1] +=
+ NDS_180_DEGREES + 1; // add 1 because 0 must be counted as well
+ }
+ return;
+ }
+
+
+ public static void main( String[] args ) {
+ System.out.println( encodeMorton( 116.39584, 39.98152 ) );
+ }
+}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/AppUtils.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/AppUtils.java
index acc7454a10..ef027bcaac 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/AppUtils.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/AppUtils.java
@@ -110,6 +110,9 @@ public class AppUtils {
* @return true 表示正在运行,false 表示没有运行
*/
public static boolean isProcessRunning( Context context, int uid ) {
+ if ( context == null ) {
+ return false;
+ }
ActivityManager am = ( ActivityManager ) context.getSystemService( Context.ACTIVITY_SERVICE );
List< ActivityManager.RunningServiceInfo > runningServiceInfos = am.getRunningServices( 200 );
if ( runningServiceInfos.size() > 0 ) {
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java
index 6411267066..64d967c261 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/WorkThreadHandler.java
@@ -16,14 +16,23 @@ public class WorkThreadHandler {
private Handler mHandler;
private HandlerThread mThread;
- private WorkThreadHandler() {
+ public static WorkThreadHandler newInstance( String name ) {
+ return new WorkThreadHandler( name );
+ }
+
+ private WorkThreadHandler( String name ) {
// private constructor
- mThread = new HandlerThread( "work-thread-handler" );
+ mThread = new HandlerThread( name );
mThread.start();
mThreadLooper = mThread.getLooper();
mHandler = new Handler( mThreadLooper );
}
+ private WorkThreadHandler() {
+ // private constructor
+ this( "work-thread-handler" );
+ }
+
private static final class InstanceHolder {
private static final WorkThreadHandler INSTANCE = new WorkThreadHandler();
}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/HttpDns.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/HttpDns.java
new file mode 100644
index 0000000000..bdb83166ff
--- /dev/null
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/HttpDns.java
@@ -0,0 +1,17 @@
+package com.mogo.utils.network;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/11/18
+ *
+ * 将HOST转换为HttpDNS的ip
+ */
+interface HttpDns {
+
+ List< InetAddress > lookup( String hostname ) throws UnknownHostException;
+}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/NetConfig.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/NetConfig.java
index a0fe0af85f..f7f2afea91 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/NetConfig.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/NetConfig.java
@@ -46,6 +46,8 @@ public final class NetConfig {
private SSLContext sslContext;
+ private HttpDns httpDns;
+
private NetConfig() {
}
@@ -157,4 +159,13 @@ public final class NetConfig {
public synchronized void setSslContext( SSLContext sslContext ) {
this.sslContext = sslContext;
}
+
+ public HttpDns getHttpDns() {
+ return httpDns;
+ }
+
+ public NetConfig setHttpDns( HttpDns httpDns ) {
+ this.httpDns = httpDns;
+ return this;
+ }
}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/OkHttpFactory.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/OkHttpFactory.java
index 02e05d5592..b9e7162248 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/OkHttpFactory.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/OkHttpFactory.java
@@ -1,8 +1,12 @@
package com.mogo.utils.network;
+import java.net.InetAddress;
+import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import okhttp3.ConnectionPool;
+import okhttp3.Dns;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
@@ -45,6 +49,17 @@ public final class OkHttpFactory {
builder.addNetworkInterceptor(networkInterceptor);
}
+ HttpDns httpDns = NetConfig.instance().getHttpDns();
+ if ( httpDns != null ) {
+ builder.dns( hostname -> {
+ List< InetAddress > addresses = httpDns.lookup( hostname );
+ if ( addresses != null && !addresses.isEmpty() ) {
+ return addresses;
+ }
+ return Dns.SYSTEM.lookup( hostname );
+ } );
+ }
+
sInstance = builder.build();
}
}
diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java
index d5d050cd7c..161d8f38e6 100644
--- a/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java
+++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/network/RequestOptions.java
@@ -65,7 +65,7 @@ public class RequestOptions {
/**
* Mutator for indicating whether loading message should be displayed while request is ongoing
*/
- private RequestOptions loading( boolean loading ) {
+ public RequestOptions loading( boolean loading ) {
this.loading = loading;
return this;
}
diff --git a/gradle.properties b/gradle.properties
index d7a48f50cd..1038e7642b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -81,6 +81,7 @@ MOGO_MODULE_MAIN_LAUNCHER_VERSION=2.0.7
MOGO_MODULE_MAIN_INDEPENDENT_VERSION=2.0.7
MOGO_MODULE_V2X_VERSION=2.0.7
# 基础服务实现:passport、socket、location
+MOGO_BASE_WEBSOCKET_SDK_VERSION = 1.0.0
MOGO_BASE_SERVICES_APK_VERSION=2.0.7
MOGO_BASE_SERVICES_SDK_VERSION=2.0.7
## 工程外部模块
@@ -126,6 +127,13 @@ TTS_BASE_VERSION=2.0.7
TTS_DI_VERSION=2.0.7
TTS_ZHI_VERSION=2.0.7
TTS_NOOP_VERSION=2.0.7
+# 自研地图
+MAP_CUSTOM_VERSION=1.2.1.9
+MOGO_MODULES_MVISION_VERSION=1.0.0
+# httpdns
+HTTPDNS_TENCENT_VERSION = 1.0.0
+HTTPDNS_BASE_VERSION = 1.0.0
+HTTPDNS_NOOP_VERSION = 1.0.0
######## 外部依赖引用
# 车聊聊
diff --git a/libraries/map-amap/build.gradle b/libraries/map-amap/build.gradle
index 780c7af6f6..eb791c34e2 100644
--- a/libraries/map-amap/build.gradle
+++ b/libraries/map-amap/build.gradle
@@ -39,13 +39,10 @@ dependencies {
implementation rootProject.ext.dependencies.mogoutils
implementation rootProject.ext.dependencies.mogomapapi
implementation rootProject.ext.dependencies.mogocommons
- implementation rootProject.ext.dependencies.mogomapapi
} else {
implementation project(':foudations:mogo-utils')
implementation project(':libraries:mogo-map-api')
implementation project(':foudations:mogo-commons')
- implementation project(':services:mogo-service-api')
-
}
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java
index 86c4b3e973..acbf86f00d 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapBaseMapView.java
@@ -1,13 +1,10 @@
package com.mogo.map.impl.amap;
import android.content.Context;
-import android.util.AttributeSet;
import android.view.ViewGroup;
-import androidx.annotation.Nullable;
-
import com.mogo.map.IMogoMapView;
-import com.mogo.map.MogoBaseMapView;
+import com.mogo.map.IMogoMapViewCreator;
/**
* @author congtaowang
@@ -15,27 +12,15 @@ import com.mogo.map.MogoBaseMapView;
*
* 描述
*/
-public class AMapBaseMapView extends MogoBaseMapView {
+public class AMapBaseMapView implements IMogoMapViewCreator {
private static final String TAG = "AMapBaseMapView";
- public AMapBaseMapView( Context context ) {
- super( context );
- }
-
- public AMapBaseMapView( Context context, @Nullable AttributeSet attrs ) {
- super( context, attrs );
- }
-
- public AMapBaseMapView( Context context, @Nullable AttributeSet attrs, int defStyleAttr ) {
- super( context, attrs, defStyleAttr );
- }
-
@Override
- protected IMogoMapView createMapView( Context context ) {
+ public IMogoMapView create( Context context ) {
IMogoMapView mapView = AMapViewHandler.getMapView();
if ( mapView != null
- && mapView.getMapView()!= null
+ && mapView.getMapView() != null
&& mapView.getMapView().getParent() != null ) {
ViewGroup group = ( ViewGroup ) mapView.getMapView().getParent();
group.removeView( mapView.getMapView() );
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
index 2b7c5a6774..15d1b0b9a5 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapNaviViewWrapper.java
@@ -281,8 +281,8 @@ public class AMapNaviViewWrapper implements IMogoMapView,
public void onTouch( MotionEvent motionEvent ) {
MogoMapListenerHandler.getInstance().onTouch( motionEvent );
if ( motionEvent.getAction() == MotionEvent.ACTION_DOWN ) {
- changeMyLocationType2UnFollow();
- }
+ changeMyLocationType2UnFollow();
+ }
if ( motionEvent.getAction() != MotionEvent.ACTION_UP ) {
try {
bnHooker.clearAllMessages();
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java
index 8023a7a6d1..7e24d7e619 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/AMapViewHandler.java
@@ -23,12 +23,7 @@ class AMapViewHandler {
private static IMogoMapView sMapView;
public static void createMapView( Context context ) {
- if ( DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_SELF_INNOVATE ) {
- sMapView = new AMapNaviViewWrapper( new AMapNaviView( context ) );
- } else {
- sMapView = new AMapNaviViewWrapper( new AMapNaviView( context ) );
- }
- Logger.d( TAG, "初始化地图实例" );
+ sMapView = new AMapNaviViewWrapper( new AMapNaviView( context ) );
}
public static IMogoMapView getMapView() {
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java
index daa049b376..2a907e54d5 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/location/ALocationClient.java
@@ -11,6 +11,7 @@ import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.location.MogoLocation;
+import com.mogo.map.location.MogoLocationListenerRegister;
import com.mogo.utils.logger.Logger;
import java.util.HashSet;
@@ -28,7 +29,6 @@ public class ALocationClient implements IMogoLocationClient {
private static final String TAG = "LocationClient";
private final Context mContext;
- private Set< IMogoLocationListener > sListeners = new HashSet<>( 10 );
private MogoLocation mLastLocation;
private AMapLocationListener mListener = new InternalLocationListener();
@@ -76,28 +76,12 @@ public class ALocationClient implements IMogoLocationClient {
@Override
public void addLocationListener( IMogoLocationListener listener ) {
- if ( mIsDestroyed ) {
- destroyWarming();
- return;
- }
- if ( listener != null ) {
- synchronized ( sListeners ) {
- sListeners.add( listener );
- }
- }
+ // do not impl.
}
@Override
public void removeLocationListener( IMogoLocationListener listener ) {
- if ( mIsDestroyed ) {
- destroyWarming();
- return;
- }
- if ( listener != null ) {
- synchronized ( sListeners ) {
- sListeners.remove( listener );
- }
- }
+ // do not impl.
}
@Override
@@ -115,10 +99,6 @@ public class ALocationClient implements IMogoLocationClient {
@Override
public synchronized void destroy() {
mIsDestroyed = true;
- if ( sListeners != null ) {
- sListeners.clear();
- }
- sListeners = null;
if ( mClient != null ) {
mClient.unRegisterLocationListener( mListener );
mClient.stopLocation();
@@ -142,8 +122,9 @@ public class ALocationClient implements IMogoLocationClient {
}
Trace.beginSection( "timer.onLocationChanged" );
mLastLocation = ObjectUtils.fromAMap( aMapLocation );
- synchronized ( sListeners ) {
- Iterator< IMogoLocationListener > listenerIterator = sListeners.iterator();
+ Set listeners = MogoLocationListenerRegister.getInstance().getListeners();
+ synchronized ( listeners ) {
+ Iterator< IMogoLocationListener > listenerIterator = listeners.iterator();
while ( listenerIterator.hasNext() ) {
listenerIterator.next().onLocationChanged( mLastLocation );
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java
index 80d0bef084..6b8ce91a61 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/marker/AMapMarkerWrapper.java
@@ -16,6 +16,7 @@ import com.amap.api.maps.model.animation.AnimationSet;
import com.amap.api.maps.model.animation.ScaleAnimation;
import com.amap.api.maps.model.animation.TranslateAnimation;
import com.amap.api.maps.utils.overlay.MovingPointOverlay;
+import com.autonavi.amap.mapcore.IPoint;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.MogoLatLng;
import com.mogo.map.impl.amap.AMapWrapper;
@@ -531,4 +532,11 @@ public class AMapMarkerWrapper implements IMogoMarker, Observer {
}
return mMarker.isInfoWindowShown();
}
+
+ @Override
+ public void setGps( boolean isGps ) {
+ MarkerOptions options = mMarker.getOptions();
+ options.setGps( isGps );
+ mMarker.setMarkerOptions( options );
+ }
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
index 5e5c66109a..5f49def021 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviClient.java
@@ -20,6 +20,7 @@ import com.mogo.map.impl.amap.utils.ObjectUtils;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.MogoCalculatePath;
+import com.mogo.map.navi.MogoCarLocationChangedListenerRegister;
import com.mogo.map.navi.MogoNaviConfig;
import com.mogo.map.navi.MogoNaviListenerHandler;
import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
@@ -62,7 +63,6 @@ public class NaviClient implements IMogoNavi {
private boolean mIsRealNavi;
private Location mCarLocation;
- private IMogoCarLocationChangedListener2 mCarLocationChangedListener;
private LocationSource.OnLocationChangedListener mOnLocationChangedListener;
/**
* 巡航模式配置状态
@@ -248,9 +248,7 @@ public class NaviClient implements IMogoNavi {
@Override
public void setLineClickInteraction( OnCalculatePathItemClickInteraction lineClickInteraction ) {
- if ( mAMapNaviListener != null ) {
- mAMapNaviListener.setLineClickInteraction( lineClickInteraction );
- }
+ // do not impl
}
@Override
@@ -302,15 +300,16 @@ public class NaviClient implements IMogoNavi {
@Override
public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
- mCarLocationChangedListener = listener;
+ // do not impl.
}
// -- end
public void syncCarLocation( Location location ) {
mCarLocation = location;
- if ( mCarLocationChangedListener != null ) {
- mCarLocationChangedListener.onCarLocationChanged2( mCarLocation );
+ mCarLocation = location;
+ if ( MogoCarLocationChangedListenerRegister.getInstance().getListener() != null ) {
+ MogoCarLocationChangedListenerRegister.getInstance().getListener().onCarLocationChanged2( location );
}
}
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java
index 9aa69c5daa..d7efa99215 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviListenerAdapter.java
@@ -267,12 +267,6 @@ public class NaviListenerAdapter extends AMapNaviListenerAdapter {
return null;
}
- public void setLineClickInteraction( OnCalculatePathItemClickInteraction lineClickInteraction ) {
- if ( mNaviOverlayHelper != null ) {
- mNaviOverlayHelper.setLineClickInteraction( lineClickInteraction );
- }
- }
-
public void clearCalculatePaths() {
if ( mNaviOverlayHelper != null ) {
mNaviOverlayHelper.clearCalculatedOverlay();
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java
index 4da21b2f24..1e4b63ed3e 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/navi/NaviOverlayHelper.java
@@ -24,6 +24,7 @@ import com.mogo.map.impl.amap.R;
import com.mogo.map.impl.amap.overlay.RouteOverLayWrapper;
import com.mogo.map.marker.MogoMarkersHandler;
import com.mogo.map.navi.MogoCalculatePath;
+import com.mogo.map.navi.MogoOperationListenerRegister;
import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
import com.mogo.utils.WindowUtils;
import com.mogo.utils.logger.Logger;
@@ -64,7 +65,6 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
private int mSelectedPathId;
private CalculatePathItem mSelectedCalculatePathItem;
- private OnCalculatePathItemClickInteraction mLineClickInteraction;
/**
* 起点终点marker
@@ -299,8 +299,8 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
if ( mPaths != null && !mPaths.isEmpty() ) {
for ( MogoCalculatePath path : mPaths ) {
if ( TextUtils.equals( path.getTagId(), polyline.getId() ) ) {
- if ( mLineClickInteraction != null ) {
- mLineClickInteraction.onItemClicked( path.getTagId() );
+ if ( MogoOperationListenerRegister.getInstance().getItemClickInteraction() != null ) {
+ MogoOperationListenerRegister.getInstance().getItemClickInteraction().onItemClicked( path.getTagId() );
break;
}
}
@@ -440,10 +440,6 @@ public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
return this;
}
- public void setLineClickInteraction( OnCalculatePathItemClickInteraction lineClickInteraction ) {
- mLineClickInteraction = lineClickInteraction;
- }
-
public void setCalculatePathDisplayBounds( Rect bounds ) {
if ( bounds != null ) {
mBoundRect = bounds;
diff --git a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java
index c5a6857603..6d645e1b53 100644
--- a/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java
+++ b/libraries/map-amap/src/main/java/com/mogo/map/impl/amap/overlay/RouteOverLayWrapper.java
@@ -39,7 +39,7 @@ public class RouteOverLayWrapper {
private boolean mIsTrafficLightsVisible = true;
private int mStartBitmapResId = 0;
private int mEndBitmapResId = 0;
- private int mZIndex = 0;
+ private int mZIndex = 1;
private static RouteOverlayOptions sOptions;
diff --git a/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviClient.java b/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviClient.java
index 39bd15bb19..07e70239ae 100644
--- a/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviClient.java
+++ b/libraries/map-autonavi/src/main/java/com/mogo/map/impl/automap/navi/AutoNaviClient.java
@@ -10,6 +10,7 @@ import com.mogo.map.impl.amap.navi.NaviClient;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.MogoCalculatePath;
+import com.mogo.map.navi.MogoCarLocationChangedListenerRegister;
import com.mogo.map.navi.MogoNaviConfig;
import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
import com.mogo.utils.logger.Logger;
@@ -195,7 +196,7 @@ public class AutoNaviClient implements IMogoNavi {
@Override
public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
- NaviClient.getInstance( mContext ).registerCarLocationChangedListener( listener );
+ //do not impl
}
@Override
diff --git a/libraries/map-custom/.gitignore b/libraries/map-custom/.gitignore
new file mode 100644
index 0000000000..796b96d1c4
--- /dev/null
+++ b/libraries/map-custom/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/libraries/map-custom/build.gradle b/libraries/map-custom/build.gradle
new file mode 100644
index 0000000000..ee7e68bcb6
--- /dev/null
+++ b/libraries/map-custom/build.gradle
@@ -0,0 +1,61 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+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'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility 1.8
+ targetCompatibility 1.8
+ }
+
+ packagingOptions {
+ exclude 'META-INF/proguard/coroutines.pro'
+ exclude 'META-INF/*'
+ }
+
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ implementation rootProject.ext.dependencies.androidxappcompat
+
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+
+// api rootProject.ext.dependencies.amapnavi3dmap
+// api rootProject.ext.dependencies.amapsearch
+// api rootProject.ext.dependencies.amaplocation
+
+ if (Boolean.valueOf(RELEASE)) {
+ implementation rootProject.ext.dependencies.mogoutils
+ implementation rootProject.ext.dependencies.mogomapapi
+ implementation rootProject.ext.dependencies.mogocommons
+ } else {
+ implementation project(':foudations:mogo-utils')
+ implementation project(':libraries:mogo-map-api')
+ implementation project(':foudations:mogo-commons')
+ }
+
+ implementation 'com.zhidaoauto.machine:map:1.0.0-online-30'
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/libraries/map-custom/build/intermediates/compile_library_classes/debug/classes.jar b/libraries/map-custom/build/intermediates/compile_library_classes/debug/classes.jar
index c4ae3e7d40..c9fa82b9c0 100644
Binary files a/libraries/map-custom/build/intermediates/compile_library_classes/debug/classes.jar and b/libraries/map-custom/build/intermediates/compile_library_classes/debug/classes.jar differ
diff --git a/libraries/map-custom/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar b/libraries/map-custom/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar
index b4882d6fd7..bca4ef2529 100644
Binary files a/libraries/map-custom/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar and b/libraries/map-custom/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar differ
diff --git a/libraries/map-custom/build/intermediates/incremental/debug-mergeNativeLibs/merge-state b/libraries/map-custom/build/intermediates/incremental/debug-mergeNativeLibs/merge-state
deleted file mode 100644
index 656a179625..0000000000
Binary files a/libraries/map-custom/build/intermediates/incremental/debug-mergeNativeLibs/merge-state and /dev/null differ
diff --git a/libraries/map-custom/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/libraries/map-custom/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
index 9a382f9387..cc8d9bcbdf 100644
--- a/libraries/map-custom/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
+++ b/libraries/map-custom/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/libraries/map-custom/build/intermediates/incremental/mergeDebugShaders/merger.xml b/libraries/map-custom/build/intermediates/incremental/mergeDebugShaders/merger.xml
index 07d461f9ef..a63d5cf987 100644
--- a/libraries/map-custom/build/intermediates/incremental/mergeDebugShaders/merger.xml
+++ b/libraries/map-custom/build/intermediates/incremental/mergeDebugShaders/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/libraries/map-custom/build/intermediates/incremental/packageDebugAssets/merger.xml b/libraries/map-custom/build/intermediates/incremental/packageDebugAssets/merger.xml
index 90f31408c8..c1a0c44ab5 100644
--- a/libraries/map-custom/build/intermediates/incremental/packageDebugAssets/merger.xml
+++ b/libraries/map-custom/build/intermediates/incremental/packageDebugAssets/merger.xml
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/libraries/map-custom/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/libraries/map-custom/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
index 757227c915..5aa11958e7 100644
--- a/libraries/map-custom/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
+++ b/libraries/map-custom/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
@@ -1,228 +1,228 @@
-#Mon Dec 07 12:00:01 CST 2020
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_16.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_16.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_13.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_13.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_67.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_67.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_30.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_30.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_64.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_64.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_40.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_40.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir16.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir16.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_56.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_56.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_53.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_53.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_37.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_37.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_26.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_26.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_5.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_5.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_36.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_36.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_15.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_15.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/marker_blue.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/marker_blue.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_25.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_25.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/live_exit.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/live_exit.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_23.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_23.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_20.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_20.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_6.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_6.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/map_api_ic_current_location2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/map_api_ic_current_location2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_14.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_14.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_12.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_12.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir7.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir7.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/location_city_image.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/location_city_image.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_27.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_27.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_63.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_63.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_60.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_60.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_44.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_44.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir_station.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir_station.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/not_join_checkbox_bg.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/not_join_checkbox_bg.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/map_custom_ic_current_location2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/map_custom_ic_current_location2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_19.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_19.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_16.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_16.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir12.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir12.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_52.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_52.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_67.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_67.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_33.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_33.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_84.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_84.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_43.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_43.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_59.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_59.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_56.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_56.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_22.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_22.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_endpoint.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_endpoint.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_1.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_1.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_32.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_32.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_11.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_11.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_8.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_8.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_21.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_21.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_39.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_39.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_10.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_10.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_28.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_28.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir3.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir3.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_26.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_26.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_23.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_23.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_0_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_0_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_9.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_9.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_1_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_1_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_40.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_40.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_17.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_17.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_15.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_15.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_12.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_12.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_68.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_68.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_66.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_66.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_63.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_63.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/public_arrow_back_iv.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/public_arrow_back_iv.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_19.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_19.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir15.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir15.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_55.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_55.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_52.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_52.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_36.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_36.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_press.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_right_page_up_press.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_25.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_25.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_59.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_59.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_4.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_4.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_2_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_2_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_35.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_35.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_endpoint.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_endpoint.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_14.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_14.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_24.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_24.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_22.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_22.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_5.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_5.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_13.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_13.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_11.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_11.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir6.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir6.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_26.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_26.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/default_image.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/default_image.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_62.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_62.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_43.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_43.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_18.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_18.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_15.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_15.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir11.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir11.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_51.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_51.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_69.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_69.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_3_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_3_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_66.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_66.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_32.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_32.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_42.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_42.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_58.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_58.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_55.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_55.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_21.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_21.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_normal.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_left_page_up_normal.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_39.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_39.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_31.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_31.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_10.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_10.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_28.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_28.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_7.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_7.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_20.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_20.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_38.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_38.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_1.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_1.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_17.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_17.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/map_location_normal.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/map_location_normal.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/ic_snapshot_ph.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/ic_snapshot_ph.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_68.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_68.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_27.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_27.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_4_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_4_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_25.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_25.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_22.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_22.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_8.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_8.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/join_checkbox_bg.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/join_checkbox_bg.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_16.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_16.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_14.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_14.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_bus.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_bus.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir9.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir9.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_11.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_11.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_65.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_65.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_62.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_62.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/app_icon.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/app_icon.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_18.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_18.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir14.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir14.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_54.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_54.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_51.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_51.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_35.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_35.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_69.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_69.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_man.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_man.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/map_location_press.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/map_location_press.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir_start.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir_start.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_24.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_24.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_58.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_58.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_5_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_5_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_3.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_3.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_34.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_34.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_13.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_13.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_85.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_85.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/search_information_normal.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/search_information_normal.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_23.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_23.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_21.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_21.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_4.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_4.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_12.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_12.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_car.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_car.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_10.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_10.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir5.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir5.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_28.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_28.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_25.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_25.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_61.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_61.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_42.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_42.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_17.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_17.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_14.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_14.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_6_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_6_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir10.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir10.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_50.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_50.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_7_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_7_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_68.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_68.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_31.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_31.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_65.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_65.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_41.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_41.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/map_api_ic_current_location2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_57.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_57.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_20.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_20.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_54.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_54.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_38.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_38.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_through.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_through.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_30.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_30.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_27.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_27.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_press.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_left_page_up_press.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir_end.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir_end.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_6.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_6.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_37.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_37.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_16.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_16.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/video_loading_img.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/video_loading_img.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_start.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_start.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_26.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_26.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_8_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_8_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir1.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir1.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_24.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_24.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_21.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_21.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_7.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_7.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_15.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_15.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_13.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_13.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir8.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir8.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_10.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_10.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_28.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_28.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_64.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_64.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_61.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_61.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_17.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_17.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/mainpage_location_img.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/mainpage_location_img.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir13.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir13.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_53.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_53.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_50.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_50.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_68.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_68.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_34.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_34.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_85.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_85.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/ic_refresh.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/ic_refresh.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_44.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_44.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_57.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_57.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_23.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_23.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-mdpi/map_api_ic_current_location2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-mdpi-v4/map_api_ic_current_location2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_9_arrow.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_9_arrow.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_2.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_2.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_33.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_33.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_12.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_12.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_84.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_84.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_end.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_end.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_9.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_9.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_22.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_22.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_20.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_20.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_11.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_11.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_ride.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_ride.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/search_information_press.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/search_information_press.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_27.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_27.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir4.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir4.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_24.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_24.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_60.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_60.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_41.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_41.png
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_normal.png=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_right_page_up_normal.png
+#Tue Dec 08 11:34:42 CST 2020
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_22.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_22.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_bus.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_bus.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_24.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_24.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_20.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_20.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_22.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_22.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_1.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_1.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_3_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_3_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_11.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_11.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir4.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir4.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_13.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_13.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_27.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_27.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_11.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_11.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_8.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_8.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_60.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_60.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_man.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_man.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_62.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_62.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_16.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_16.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_18.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_18.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_67.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_67.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_51.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_51.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_69.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_69.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_6.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_6.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_40.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_40.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_42.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_42.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_56.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_56.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_58.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_58.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_through.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_through.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir11.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir11.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_31.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_31.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_4_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_4_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/app_icon.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/app_icon.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/map_location_normal.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/map_location_normal.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/search_information_press.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/search_information_press.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_car.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_car.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_20.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_20.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_36.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_36.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_38.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_38.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_25.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_25.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_27.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_27.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_23.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_23.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_25.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_25.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_4.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_4.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/mainpage_location_img.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/mainpage_location_img.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_14.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_14.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir7.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir7.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_16.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_16.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_12.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_12.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_14.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_14.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_63.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_63.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_65.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_65.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_endpoint.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_endpoint.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_5_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_5_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/not_join_checkbox_bg.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/not_join_checkbox_bg.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_19.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_19.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_52.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_52.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_54.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_54.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-mdpi/map_api_ic_current_location2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-mdpi-v4/map_api_ic_current_location2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/default_image.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/default_image.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_9.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_9.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_43.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_43.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_59.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_59.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir14.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir14.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_32.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_32.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_34.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_34.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_85.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_85.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir_end.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir_end.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_21.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_21.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_23.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_23.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_39.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_39.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_21.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_21.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_6_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_6_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_10.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_10.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir3.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir3.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_12.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_12.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_28.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_28.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_26.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_26.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_10.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_10.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_28.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_28.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_7.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_7.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_61.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_61.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_17.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_17.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_15.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_15.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_17.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_17.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_68.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_68.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_66.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_66.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_50.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_50.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_68.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_68.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/public_arrow_back_iv.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/public_arrow_back_iv.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_5.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_5.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_41.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_41.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_55.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_55.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_57.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_57.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_end.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_end.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir10.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir10.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_7_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_7_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_30.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_30.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/join_checkbox_bg.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/join_checkbox_bg.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_8_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_8_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_35.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_35.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_37.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_37.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/map_api_ic_current_location2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/map_api_ic_current_location2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_24.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_24.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_26.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_26.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_22.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_22.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/map_location_press.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/map_location_press.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_24.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_24.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_3.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_3.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_press.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_right_page_up_press.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_13.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_13.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir6.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir6.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/video_loading_img.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/video_loading_img.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_15.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_15.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_11.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_11.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_13.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_13.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_62.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_62.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_64.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_64.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_9_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_9_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_1.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_1.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_18.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_18.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_51.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_51.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_53.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_53.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_69.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_69.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir_start.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir_start.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_normal.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_left_page_up_normal.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_8.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_8.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_42.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_42.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_44.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_44.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_58.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_58.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir13.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir13.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_31.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_31.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_33.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_33.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_84.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_84.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_20.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_20.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_22.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_22.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_38.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_38.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_20.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_20.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_11.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_11.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_27.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_27.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_25.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_25.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_27.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_27.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_6.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_6.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_60.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_60.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir9.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir9.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_16.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_16.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_14.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_14.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_16.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_16.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_65.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_65.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_start.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_start.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_67.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_67.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_4.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_4.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_40.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_40.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_54.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_54.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_56.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_56.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir16.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir16.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_34.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_34.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_36.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_36.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_85.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_85.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/ic_refresh.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/ic_refresh.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/marker_blue.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/marker_blue.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_23.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_23.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/location_city_image.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/location_city_image.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_25.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_25.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_21.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_21.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_23.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_23.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_12.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_12.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir5.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir5.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_14.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_14.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_10.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_10.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_28.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_28.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_12.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_12.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_normal.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_right_page_up_normal.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_9.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_9.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_61.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_61.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_63.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_63.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir_station.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir_station.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_17.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_17.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_19.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_19.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_50.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_50.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_52.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_52.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_68.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_68.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_7.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_7.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_41.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_41.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_43.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_43.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_57.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_57.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_59.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_59.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir12.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir12.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_30.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_30.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_32.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_32.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_0_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_0_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_endpoint.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_endpoint.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_21.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_21.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_37.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_37.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_39.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_39.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/search_information_normal.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/search_information_normal.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_press.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/main_solid_left_page_up_press.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir1.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir1.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_10.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_10.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_26.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_26.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_28.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_28.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_24.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_24.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/ic_snapshot_ph.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/ic_snapshot_ph.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_26.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_26.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_5.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_5.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir8.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir8.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_15.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_15.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_17.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_17.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_13.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_13.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_15.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_15.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/map_api_ic_current_location2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_68.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_68.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_64.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_64.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_66.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_66.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_1_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_1_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_2_arrow.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_route_color_texture_2_arrow.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/ic_53.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/ic_53.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/amap_ride.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/amap_ride.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/ic_55.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_55.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/map_custom_ic_current_location2.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/map_custom_ic_current_location2.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_44.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_44.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/dir15.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/dir15.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_33.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_33.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-xhdpi/tc_35.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/tc_35.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable/live_exit.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable/live_exit.png
+/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/res/drawable-ldpi/tc_84.png=/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/build/intermediates/packaged_res/debug/drawable-ldpi-v4/tc_84.png
diff --git a/libraries/map-custom/build/intermediates/incremental/packageDebugResources/merger.xml b/libraries/map-custom/build/intermediates/incremental/packageDebugResources/merger.xml
index e9c7f6564d..122f5a7a9a 100644
--- a/libraries/map-custom/build/intermediates/incremental/packageDebugResources/merger.xml
+++ b/libraries/map-custom/build/intermediates/incremental/packageDebugResources/merger.xml
@@ -1,2 +1,2 @@
-60px map-amap 40px
\ No newline at end of file
+60px map-amap 40px
\ No newline at end of file
diff --git a/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/AMapViewWrapper.class b/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/AMapViewWrapper.class
index fddb4d94ea..58c29bcc8c 100644
Binary files a/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/AMapViewWrapper.class and b/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/AMapViewWrapper.class differ
diff --git a/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.class b/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.class
index 816a9b635c..1feffa665b 100644
Binary files a/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.class and b/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.class differ
diff --git a/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/uicontroller/AMapUIController.class b/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/uicontroller/AMapUIController.class
index e13f613b17..033b12f87b 100644
Binary files a/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/uicontroller/AMapUIController.class and b/libraries/map-custom/build/intermediates/javac/debug/classes/com/mogo/map/impl/custom/uicontroller/AMapUIController.class differ
diff --git a/libraries/map-custom/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/libraries/map-custom/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
index 1d64578f61..9f101025f4 100644
--- a/libraries/map-custom/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
+++ b/libraries/map-custom/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
@@ -6,12 +6,12 @@
6
7 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+8-->/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
9 android:targetSdkVersion="22" />
-9-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+9-->/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
10
11
-11-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:4:5-6:19
+11-->/Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:4:5-6:19
12
13
14
diff --git a/libraries/map-custom/build/intermediates/runtime_library_classes/debug/classes.jar b/libraries/map-custom/build/intermediates/runtime_library_classes/debug/classes.jar
index c4ae3e7d40..c9fa82b9c0 100644
Binary files a/libraries/map-custom/build/intermediates/runtime_library_classes/debug/classes.jar and b/libraries/map-custom/build/intermediates/runtime_library_classes/debug/classes.jar differ
diff --git a/libraries/map-custom/build/outputs/logs/manifest-merger-debug-report.txt b/libraries/map-custom/build/outputs/logs/manifest-merger-debug-report.txt
index 26ac45be57..4c76e213a4 100644
--- a/libraries/map-custom/build/outputs/logs/manifest-merger-debug-report.txt
+++ b/libraries/map-custom/build/outputs/logs/manifest-merger-debug-report.txt
@@ -1,39 +1,39 @@
-- Merging decision tree log ---
manifest
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
package
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:2:5-39
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:2:5-39
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
android:versionName
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
android:versionCode
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:1-7:12
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
xmlns:android
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:11-69
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:1:11-69
application
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:4:5-6:19
+ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml:4:5-6:19
uses-sdk
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml reason: use-sdk injection requested
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml reason: use-sdk injection requested
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
android:targetSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
android:minSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ ADDED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
+ INJECTED from /Users/congtaowang/Documents/miui/MogoLauncher/libraries/map-custom/src/main/AndroidManifest.xml
diff --git a/libraries/map-custom/consumer-rules.pro b/libraries/map-custom/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/map-custom/gradle.properties b/libraries/map-custom/gradle.properties
new file mode 100644
index 0000000000..fa2222059a
--- /dev/null
+++ b/libraries/map-custom/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.map
+POM_ARTIFACT_ID=map-custom
+VERSION_CODE=1
\ No newline at end of file
diff --git a/libraries/map-custom/proguard-rules.pro b/libraries/map-custom/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/libraries/map-custom/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
diff --git a/libraries/map-custom/src/main/AndroidManifest.xml b/libraries/map-custom/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..c8d6f82fc1
--- /dev/null
+++ b/libraries/map-custom/src/main/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapMarkerClickHandler.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapMarkerClickHandler.java
new file mode 100644
index 0000000000..0b89685535
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapMarkerClickHandler.java
@@ -0,0 +1,38 @@
+package com.mogo.map.impl.custom;
+
+import android.util.Log;
+
+import com.mogo.map.impl.custom.marker.MarkerWrapperClickHelper;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.IMogoMarkerClickListener;
+import com.mogo.map.marker.MogoMarkersHandler;
+import com.mogo.utils.logger.Logger;
+import com.zhidaoauto.map.sdk.open.marker.Marker;
+
+import java.util.Map;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-24
+ *
+ * marker 点击事件处理
+ */
+public class AMapMarkerClickHandler {
+
+ public boolean handleMarkerClicked( Marker marker ) {
+ if ( marker == null ) {
+ return false;
+ }
+ Map mogoMarkerMap = MarkerWrapperClickHelper.getInstance().getMogoMarkerMap();
+ if ( mogoMarkerMap.containsKey(marker.getId())) {
+ IMogoMarker mogoMarker = mogoMarkerMap.get(marker.getId());
+ final IMogoMarkerClickListener listener = mogoMarker.getOnMarkerClickListener();
+ Logger.d( "AMapMarkerWrapper", "marker 点击回调:%s -> %s", mogoMarker, marker );
+ if ( listener != null ) {
+ listener.onMarkerClicked( mogoMarker );
+ }
+ return MogoMarkersHandler.getInstance().onMarkerClicked( mogoMarker );
+ }
+ return false;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapUiSettingsWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapUiSettingsWrapper.java
new file mode 100644
index 0000000000..56a3a8d3b2
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapUiSettingsWrapper.java
@@ -0,0 +1,113 @@
+package com.mogo.map.impl.custom;
+
+import com.mogo.map.IMogoUiSettings;
+import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-18
+ *
+ * 代理自研地图UiSettings
+ */
+public class AMapUiSettingsWrapper implements IMogoUiSettings {
+
+ private MapAutoViewHelper mUiSettings;
+
+ public AMapUiSettingsWrapper( MapAutoViewHelper mUiSettings ) {
+ this.mUiSettings = mUiSettings;
+ }
+
+ @Override
+ public void setScaleControlsEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+
+ }
+ }
+
+ @Override
+ public void setZoomControlsEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ mUiSettings.setZoomGesturesEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setCompassEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ if(enabled){
+ mUiSettings.showDirection();
+ }else{
+ mUiSettings.hiddenDirection();
+ }
+ }
+ }
+
+ @Override
+ public void setMyLocationButtonEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ if(enabled){
+ mUiSettings.showLocation();
+ }else{
+ mUiSettings.hiddenLocation();
+ }
+ }
+ }
+
+ @Override
+ public void setScrollGesturesEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ mUiSettings.setScrollGesturesEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setZoomGesturesEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ mUiSettings.setZoomGesturesEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setTiltGesturesEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ mUiSettings.setTiltGesturesEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setRotateGesturesEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ mUiSettings.setRotateGesturesEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setAllGesturesEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ mUiSettings.setAllGesturesEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setIndoorSwitchEnabled( boolean enabled ) {
+ if ( mUiSettings != null ) {
+
+// mUiSettings.setIndoorSwitchEnabled( enabled );
+ }
+ }
+
+ @Override
+ public void setLogoEnable( boolean enabled ) {
+ if ( mUiSettings != null ) {
+ try {
+ Method method = mUiSettings.getClass().getMethod( "setLogoEnable", boolean.class );
+ method.setAccessible( true );
+ method.invoke( mUiSettings, enabled );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
new file mode 100644
index 0000000000..90b4325aa7
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapViewWrapper.java
@@ -0,0 +1,744 @@
+package com.mogo.map.impl.custom;
+
+import android.content.Context;
+import android.graphics.BitmapFactory;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.location.Location;
+import android.os.Bundle;
+import android.os.Trace;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.animation.Interpolator;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.IMogoMap;
+import com.mogo.map.IMogoMapView;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.impl.custom.navi.NaviClient;
+import com.mogo.map.impl.custom.utils.MogoMapUtils;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.listener.MogoMapListenerHandler;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.uicontroller.CarCursorOption;
+import com.mogo.map.uicontroller.EnumMapUI;
+import com.mogo.map.uicontroller.IMogoMapUIController;
+import com.mogo.map.uicontroller.MapCameraPosition;
+import com.mogo.map.uicontroller.MapControlResult;
+import com.mogo.utils.logger.Logger;
+
+import com.zhidaoauto.map.sdk.open.MapAutoApi;
+import com.zhidaoauto.map.sdk.open.abs.MapStatusListener;
+import com.zhidaoauto.map.sdk.open.abs.OnCameraChangeListener;
+import com.zhidaoauto.map.sdk.open.abs.OnMapClickListener;
+import com.zhidaoauto.map.sdk.open.abs.OnMapLoadedListener;
+import com.zhidaoauto.map.sdk.open.abs.OnMapTouchListener;
+import com.zhidaoauto.map.sdk.open.camera.CameraPosition;
+import com.zhidaoauto.map.sdk.open.camera.CameraUpdateFactory;
+import com.zhidaoauto.map.sdk.open.camera.LatLngBounds;
+import com.zhidaoauto.map.sdk.open.location.LocationListener;
+import com.zhidaoauto.map.sdk.open.location.MyLocationStyle;
+import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory;
+import com.zhidaoauto.map.sdk.open.marker.Marker;
+import com.zhidaoauto.map.sdk.open.marker.OnMarkClickListener;
+import com.zhidaoauto.map.sdk.open.query.LonLatPoint;
+import com.zhidaoauto.map.sdk.open.tools.MapTools;
+import com.zhidaoauto.map.sdk.open.view.MapAutoView;
+import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+public class AMapViewWrapper implements IMogoMapView, IMogoMapUIController, LocationListener, OnMapLoadedListener, MapStatusListener, OnCameraChangeListener,
+ OnMapClickListener, OnMapTouchListener, OnMarkClickListener {
+
+ private static final String TAG = "AMapViewWrapper";
+ private final MapAutoView mMapView;
+ private IMogoMap mIMap;
+
+ private AMapMarkerClickHandler mMarkerClickHandler;
+ private EnumMapUI mCurrentUIMode;
+
+ private boolean mIsCarLocked = false;
+ private int mLockZoom = 16;
+ private long startTime;
+
+ private float mDefaultZoomLevel = 16.0f;
+ private final CarCursorOption DEFAULT_OPTION = new CarCursorOption.Builder()
+ .carCursorRes( R.drawable.map_custom_ic_current_location2 )
+ .naviCursorRes( R.drawable.ic_amap_navi_cursor )
+ .build();
+ private CarCursorOption mCarCursorOption = DEFAULT_OPTION;
+
+ public AMapViewWrapper( MapAutoView mMapView ) {
+ startTime = System.currentTimeMillis();
+ Logger.i( TAG, "autoop--AMapViewWrapper: init" );
+ this.mMapView = mMapView;
+ initListeners();
+ this.mIMap = new AMapWrapper( this.mMapView.getMapAutoViewHelper(), this.mMapView, this );
+ }
+
+ private void initMapView() {
+ if ( mMapView == null ) {
+ return;
+ }
+ MapAutoViewHelper options = mMapView.getMapAutoViewHelper();
+ if ( options != null ) {
+ // 设置是否开启自动黑夜模式切换,默认为false,不自动切换
+// options.setAutoSwitchStyle(false);
+ // 设置6秒后是否自动锁车
+// options.setAutoLockCar( false );
+ // 设置路线上的摄像头气泡是否显示
+// options.setCameraBubbleShow( true );
+ // 设置路线相关的配置属性,如:路线的路况颜色,路线上是否显示摄像头气泡等。
+ // options.setRouteOverlayOptions( MapStyleUtils.getRouteOverlayOptions() );
+ // 设置自车的图片对象
+ options.setMyLocationStyle( options.getMyLocationStyle().myLocationIcon( DEFAULT_OPTION.getCarCursorRes() ) );
+ // 设置指南针图标否在导航界面显示,默认显示。true,显示;false,隐藏。
+// options.hiddenDirection();
+ // 黑夜模式
+// options.setMapStyle(MapAutoApi.MAP_STYLE_NIGHT);
+ //设置路况光柱条是否显示(只适用于驾车导航,需要联网)。
+// options.setTrafficBarEnabled( false );
+ // 设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。
+// options.setTrafficLayerEnabled( false );
+ // 设置导航界面是否显示路线全览按钮。
+// options.setRouteListButtonShow( false );
+ // 设置导航状态下屏幕是否一直开启。
+// options.setScreenAlwaysBright( true );
+ // 设置交通播报是否打开(只适用于驾车导航,需要联网)。
+// options.setTrafficInfoUpdateEnabled( true );
+ // 设置摄像头播报是否打开(只适用于驾车导航)。
+// options.setCameraInfoUpdateEnabled( true );
+ // 设置菜单按钮是否在导航界面显示。
+// options.setSettingMenuEnabled( false );
+ // 设置是否绘制显示交通路况的线路(彩虹线),拥堵-红色,畅通-绿色,缓慢-黄色,未知-蓝色。默认不绘制彩虹线。
+// options.setTrafficLine( true );
+ // 设置是否绘制牵引线(当前位置到目的地的指引线)。默认不绘制牵引线。
+// 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( true );
+// options.setZoom(((int) mDefaultZoomLevel));
+// options.setPointToCenter( 0.5D, 0.5D );
+ // 2D模式
+// options.setMapViewPerspective(MapAutoApi.MAP_PERSPECTIVE_2D);
+// mMapView.setViewOptions( options );
+ }
+// mMapView.setRouteOverlayVisible( false );
+// mMapView.setCarOverlayVisible( false );
+// setUIMode(EnumMapUI.CarUp_2D);
+ }
+
+ private void initListeners() {
+
+ mMapView.setOnMarkClickListener( this );
+ mMarkerClickHandler = new AMapMarkerClickHandler();
+ mMapView.setOnMapLoadedListener( this );
+ mMapView.setOnMapTouchListener( this );
+ mMapView.setOnMapClickListener( this );
+ mMapView.getLocationClient().registerListener( this );
+ mMapView.registerListener( this, MapAutoApi.LISTENER_TYPE_ZOOM );
+ mMapView.registerListener( this, MapAutoApi.LISTENER_TYPE_ROTATE );
+ mMapView.registerListener( this, MapAutoApi.LISTENER_TYPE_3D );
+ mMapView.setMOnCameraChangeListener( this );
+
+// mMapView.setOnPolylineClickListener( this );
+// mMapView.setAMapNaviViewListener( this );
+// mMapView.setOnCameraChangeListener( this );
+//
+// final AMap aMap = mMapView.getMap();
+// if ( aMap != null ) {
+// aMap.setOnPOIClickListener( this );
+// aMap.setOnMapClickListener( this );
+// aMap.setOnCameraChangeListener( this );
+// aMap.setOnMyLocationChangeListener( this );
+// }
+// AMapMessageManager.getInstance().registerAMapMessageListener( this );
+ }
+
+ private Context getContext() {
+ return mMapView.getContext();
+ }
+
+ @Override
+ public View getMapView() {
+ return mMapView;
+ }
+
+ @Override
+ public IMogoMap getMap() {
+ return mIMap;
+ }
+
+ @Override
+ public void onCreate( Bundle bundle ) {
+ if ( mMapView != null ) {
+ mMapView.onCreate( bundle );
+ Logger.d( TAG, "map onCreate" );
+ initMapView();
+
+// initMyLocation();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ if ( mMapView != null ) {
+ mMapView.onResume();
+ Logger.d( TAG, "map onResume" );
+ }
+ }
+
+ @Override
+ public void onPause() {
+ if ( mMapView != null ) {
+ mMapView.onPause();
+ Logger.d( TAG, "map onPause" );
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ if ( mMapView != null ) {
+ mMapView.onDestroy();
+ Logger.d( TAG, "map onDestroy" );
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState( Bundle outState ) {
+ if ( mMapView != null ) {
+ mMapView.onSaveInstanceState( outState );
+ Logger.d( TAG, "map onSaveInstanceState" );
+ }
+ }
+
+ @Override
+ public void onLowMemory() {
+
+ }
+
+ @Override
+ public void setTrafficEnabled( boolean visible ) {
+ if ( checkAMapView() ) {
+// mMapView.getMapAutoViewHelper().setTraffic(visible);
+ }
+ }
+
+ @Override
+ public MapControlResult changeZoom( boolean zoom ) {
+ if ( checkAMapView() ) {
+ mDefaultZoomLevel = ( getMap().getZoomLevel() + 0.5f );
+
+ if ( zoom ) {
+ if ( mDefaultZoomLevel >= 20f ) {
+ return MapControlResult.TARGET;
+ }
+ } else {
+ if ( mDefaultZoomLevel <= 7f ) {
+ return MapControlResult.TARGET;
+ }
+ }
+
+ if ( zoom ) {
+ mDefaultZoomLevel += 1f;
+ if ( mDefaultZoomLevel > 19f ) {
+ mDefaultZoomLevel = 19f;
+ }
+ } else {
+ mDefaultZoomLevel -= 1f;
+ if ( mDefaultZoomLevel < 8f ) {
+ mDefaultZoomLevel = 8f;
+ }
+ }
+ changeZoom( mDefaultZoomLevel );
+ }
+ return MapControlResult.SUCCESS;
+ }
+
+ @Override
+ public MapControlResult changeZoom( float zoom ) {
+ Logger.d( TAG, "changeZoom %s", zoom );
+ if ( DebugConfig.isDebug() ) {
+ Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
+ }
+
+ getMap().changeZoom( zoom );
+ return MapControlResult.SUCCESS;
+ }
+
+ @Override
+ public void changeMapMode( EnumMapUI ui ) {
+ if ( ui == null ) {
+ return;
+ }
+ if ( checkAMapView() ) {
+// switch (ui) {
+// case CarUp_2D:
+// case CarUp_3D:
+// case NorthUP_2D:
+// break;
+// case Type_VR:
+// mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_VR);
+// //setUIMode( ui, options );
+// return;
+// case Type_Light:
+// mMapView.getMapAutoViewHelper().setAutoSwitchStyle(false);
+// mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_DAY);
+// break;
+// case Type_Night:
+// mMapView.getMapAutoViewHelper().setAutoSwitchStyle(false);
+// mMapView.getMapAutoViewHelper().setMapStyle(MapAutoApi.MAP_STYLE_NIGHT);
+// break;
+// case Type_AUTO_LIGHT_Night:
+// mMapView.getMapAutoViewHelper().setAutoSwitchStyle(true);
+// break;
+ }
+
+ }
+
+ @Override
+ public void moveToCenter( MogoLatLng latLng ) {
+
+ }
+
+ private void setUIMode( EnumMapUI ui ) {
+ this.mCurrentUIMode = ui;
+ if ( mMapView.getMapAutoViewHelper() != null ) {
+ switch ( ui ) {
+ case CarUp_2D:
+ mMapView.getMapAutoViewHelper().setMapViewPerspective( MapAutoApi.MAP_PERSPECTIVE_2D );
+ break;
+ case CarUp_3D:
+ mMapView.getMapAutoViewHelper().setMapViewPerspective( MapAutoApi.MAP_PERSPECTIVE_3D );
+ break;
+ case NorthUP_2D:
+ mMapView.getMapAutoViewHelper().setRotateGesturesEnabled( false );
+ break;
+ }
+ }
+ }
+
+ private boolean checkAMapView() {
+ if ( mMapView == null || mMapView.getMapAutoViewHelper() == null ) {
+ Logger.e( TAG, "自研mapView实例为空,请检查" );
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void moveToCenter( MogoLatLng latLng, boolean animate ) {
+ Logger.d( TAG, "move to center %s", latLng );
+ if ( latLng == null || latLng.lat == 0.0d || latLng.lng == 0.0d ) {
+ Logger.e( TAG, "latlng = null or is illegal" );
+ return;
+ }
+ if ( DebugConfig.isDebug() ) {
+ Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
+ }
+ loseLockMode();
+ mMapView.getMapAutoViewHelper().animateCamera( new LonLatPoint( latLng.lon, latLng.lat ) );
+ }
+
+ @Override
+ public void showMyLocation( boolean visible ) {
+ Logger.d( TAG, "showMyLocation1 %s", visible );
+ if ( visible && NaviClient.getInstance( getContext() ).isNaviing() ) {
+ return;
+ }
+// if (DebugConfig.isDebug()) {
+// Logger.d(TAG, Log.getStackTraceString(new Throwable()));
+// }
+ if ( checkAMapView() ) {
+ MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle();
+ if ( visible ) {
+ // 强制刷新一遍车标
+ style.myLocationIcon( mCarCursorOption.getCarCursorRes() );
+ }
+ mMapView.getMapAutoViewHelper().setMyLocationStyle( style );
+ }
+ }
+
+ @Override
+ public void showMyLocation( View view ) {
+ Logger.d( TAG, "showMyLocation %s", "view" );
+ if ( NaviClient.getInstance( getContext() ).isNaviing() ) {
+ return;
+ }
+ if ( DebugConfig.isDebug() ) {
+ Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
+ }
+ if ( checkAMapView() ) {
+ MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle();
+ style.myLocationIcon( BitmapDescriptorFactory.INSTANCE.convertViewToBitmap( view ) );
+ mMapView.getMapAutoViewHelper().setMyLocationStyle( style );
+ }
+ }
+
+ public void initMyLocation() {
+ if ( checkAMapView() ) {
+ mMapView.getMapAutoViewHelper().setMyLocationEnabled( true );
+ MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle();
+ style.setLocationType( MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER );
+ style.interval( 1000 );
+// style.anchor( 0.5F, 0.5F );
+// style.strokeColor( Color.TRANSPARENT );
+// style.strokeWidth( 0 );
+// style.radiusFillColor( Color.TRANSPARENT );
+ mMapView.getMapAutoViewHelper().setMyLocationStyle( style );
+ }
+ }
+
+ @Override
+ public void recoverLockMode() {
+ if ( checkAMapView() ) {
+// if ( DebugConfig.isDebug() ) {
+// Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
+// }
+ Logger.d( TAG, "锁车" );
+// mMapView.getMapAutoViewHelper().setZoom(mLockZoom);
+ mMapView.getMapAutoViewHelper().setLockMode( true );
+ mIsCarLocked = true;
+ }
+ }
+
+ @Override
+ public void loseLockMode() {
+ if ( DebugConfig.isDebug() ) {
+ Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
+ }
+ Logger.d( TAG, "解锁锁车" );
+ mMapView.getMapAutoViewHelper().setLockMode( false );
+ mIsCarLocked = false;
+ }
+
+ @Override
+ public void setLockZoom( int var1 ) {
+ mLockZoom = var1;
+ }
+
+ @Override
+ public void displayOverview( Rect bounds ) {
+
+ }
+
+
+ @Override
+ public float getScalePerPixel() {
+ return getMap().getScalePerPixel();
+ }
+
+ @Override
+ public float getZoomLevel() {
+ return getMap().getZoomLevel();
+ }
+
+ @Override
+ public MogoLatLng getCameraNorthEastPosition() {
+ return ObjectUtils.fromAMap( MapTools.INSTANCE.getVisibleRegion().getRightTopPoint() );
+ }
+
+
+ @Override
+ public MogoLatLng getCameraSouthWestPosition() {
+ try {
+ return ObjectUtils.fromAMap( MapTools.INSTANCE.getVisibleRegion().getLeftBottomPoint() );
+ } catch ( Exception e ) {
+
+ }
+ return null;
+ }
+
+ @Override
+ public MogoLatLng getWindowCenterLocation() {
+ try {
+ return ObjectUtils.fromAMap( mMapView.getMapAutoViewHelper().getCenter() );
+ } catch ( Exception e ) {
+
+ }
+ return null;
+ }
+
+ @Override
+ public void setPointToCenter( double mapCenterX, double mapCenterY ) {
+ if ( checkAMapView() ) {
+// if (DebugConfig.isDebug()) {
+// Logger.d(TAG, Log.getStackTraceString(new Throwable()));
+// }
+// Logger.d( TAG, "setPointToCenter(%s, %s)", mapCenterX, mapCenterY );
+// mMapView.getMapAutoViewHelper().setPointToCenter( ( float ) mapCenterX, ( float ) mapCenterY );
+ }
+ }
+
+ @Override
+ public Point getLocationPointInScreen( MogoLatLng latLng ) {
+ if ( checkAMapView() ) {
+ try {
+ return MapTools.INSTANCE.toScreenLocation( ObjectUtils.fromMogo( latLng ) );
+ } catch ( Exception e ) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public MogoLatLng getLocationMogoLatLngInScreen( Point point ) {
+ if ( checkAMapView() ) {
+ try {
+ return ObjectUtils.fromAMap(
+ MapTools.INSTANCE.fromScreenLocation( point ) );
+ } catch ( Exception e ) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void startJumpAnimation( IMogoMarker marker, float high, Interpolator interpolator,
+ long duration ) {
+ if ( marker == null || high <= 0.0f || interpolator == null || duration < 0 ) {
+ return;
+ }
+ try {
+// final LatLng latLng = ObjectUtils.fromMogo2( marker.getPosition() );
+// Point point = mMapView.getMap().getProjection().toScreenLocation( latLng );
+// point.y -= WindowUtils.dip2px( getContext(), high );
+// LatLng target = mMapView.getMap().getProjection().fromScreenLocation( point );
+// //使用TranslateAnimation,填写一个需要移动的目标点
+// Animation animation = new TranslateAnimation( target );
+// animation.setInterpolator( interpolator );
+// //整个移动所需要的时间
+// animation.setDuration( duration );
+// //设置动画
+// if ( marker instanceof AMapMarkerWrapper ) {
+// ( ( AMapMarkerWrapper ) marker ).getMarker().setAnimation( animation );
+// ( ( AMapMarkerWrapper ) marker ).getMarker().startAnimation();
+// }
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "error." );
+ }
+ }
+
+ @Override
+ public void setRenderFps( int fps ) {
+ if ( checkAMapView() ) {
+ if ( mMapView.getMapAutoViewHelper() != null ) {
+ mMapView.getMapAutoViewHelper().setRenderFps( fps );
+ Logger.d( TAG, "设置刷新帧率 fps = %s", fps );
+ }
+ }
+ }
+
+ @Override
+ public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
+ if ( !checkAMapView() ) {
+ return;
+ }
+ Logger.i( TAG, "showBounds:%s -%s-%s- %b ", tag, carPosition.toString(), bound.toShortString(), lockCarPosition );
+ try {
+ if ( DebugConfig.isDebug() ) {
+ Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
+ }
+ LatLngBounds latLngBounds = MogoMapUtils.getLatLngBounds( carPosition, lonLats, lockCarPosition );
+ if ( !lockCarPosition ) {
+ loseLockMode();
+ }
+ mMapView.getMapAutoViewHelper().setCenter( ObjectUtils.fromMogo( carPosition ) );
+ mMapView.getMapAutoViewHelper().moveCamera( CameraUpdateFactory.INSTANCE.newLatLngBounds( latLngBounds, bound.left, bound.right, bound.top, bound.bottom ) );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "%s error.", tag );
+ }
+ }
+
+ @Override
+ public void forceRender() {
+ if ( checkAMapView() ) {
+ mMapView.getMapAutoViewHelper().runOnDrawFrame();
+ }
+ }
+
+ @Override
+ public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
+ if ( p1 == null || p2 == null ) {
+ throw new Exception( "计算距离的点不能为 null" );
+ }
+ return MogoMapUtils.calculateLineDistance( ObjectUtils.fromMogo( p1 ), ObjectUtils.fromMogo( p2 ) );
+ }
+
+
+ @Override
+ public EnumMapUI getCurrentUiMode() {
+ return mCurrentUIMode;
+ }
+
+ @Override
+ public void changeMyLocation( Location location ) {
+ }
+
+ @Override
+ public synchronized boolean isCarLocked() {
+ return mMapView.getMapAutoViewHelper().getLockMode();
+ }
+
+ @Override
+ public void setCarCursorOption( CarCursorOption option ) {
+ if ( mCarCursorOption != null && mCarCursorOption != DEFAULT_OPTION ) {
+ mCarCursorOption.destroy();
+ }
+ if ( option != null ) {
+ try {
+ mCarCursorOption = option.clone();
+ } catch ( Exception e ) {
+ mCarCursorOption = DEFAULT_OPTION;
+ }
+ } else {
+ mCarCursorOption = DEFAULT_OPTION;
+ }
+ if ( !checkAMapView() ) {
+ return;
+ }
+
+ if ( mMapView.getMapAutoViewHelper() == null ) {
+ return;
+ }
+ MyLocationStyle style = mMapView.getMapAutoViewHelper().getMyLocationStyle();
+ if ( mCarCursorOption.getCarCursorBmp() != null && !mCarCursorOption.getCarCursorBmp().isRecycled() ) {
+ style.myLocationIcon( mCarCursorOption.getCarCursorBmp() );
+ } else {
+ if ( mCarCursorOption.getCarCursorRes() != 0 ) {
+ style.myLocationIcon( mCarCursorOption.getCarCursorRes() );
+ } else {
+ style.myLocationIcon( mCarCursorOption.getCarCursorRes() );
+ }
+ }
+ mMapView.getMapAutoViewHelper().setMyLocationStyle( style );
+ }
+
+ @Override
+ public MapCameraPosition getMapCameraPosition() {
+ if ( checkAMapView() ) {
+ CameraPosition cameraPosition = mMapView.getMapAutoViewHelper().getCameraPosition();
+ return ObjectUtils.fromAMap( cameraPosition );
+ }
+ return null;
+ }
+
+ @Override
+ public void changeBearing( float bearing ) {
+ if ( checkAMapView() ) {
+ mMapView.getMapAutoViewHelper().setMapViewRotation( bearing );
+ }
+ }
+
+ @Override
+ public void onLocationChanged( @NotNull com.zhidaoauto.map.sdk.open.location.MogoLocation location ) {
+ Location sysLocation = new Location( location.getProvider() );
+ sysLocation.setAltitude( location.getAltitude() );
+ sysLocation.setLatitude( location.getLat() );
+ sysLocation.setLongitude( location.getLon() );
+ sysLocation.setSpeed( location.getSpeed() );
+ NaviClient.getInstance( getContext() ).syncCarLocation( sysLocation );
+ }
+
+ @Override
+ public void onMapClick( @Nullable LonLatPoint lonLatPoint ) {
+ if ( InterceptorHandler.getInstance().ignoreMapClicked( getContext() ) ) {
+ return;
+ }
+ MogoMapListenerHandler.getInstance().onMapClick( ObjectUtils.fromAMap( lonLatPoint ) );
+ }
+
+ @Override
+ public void onMapLoaded() {
+ Logger.i( TAG, "autoop--onMapLoaded: " );
+ MogoMapListenerHandler.getInstance().onMapLoaded();
+ CameraPosition cameraPosition = mMapView.getMapAutoViewHelper().getCameraPosition();
+ if ( cameraPosition != null ) {
+ Trace.beginSection( "timer.onCameraChangeFinish" );
+ MogoMapListenerHandler.getInstance().onMapChanged( ObjectUtils.fromAMap( cameraPosition.getTarget() ),
+ cameraPosition.getZoom(),
+ cameraPosition.getTilt(),
+ cameraPosition.getBearing() );
+ Trace.endSection();
+ }
+
+ getMap().getUIController().setAnchorRate( 0.01f );
+ getMap().getUIController().setAnchorScale( 1.2f, 2.7f );
+ }
+
+ @Override
+ public boolean onTouch( @Nullable MotionEvent motionEvent ) {
+ MogoMapListenerHandler.getInstance().onTouch( motionEvent );
+ return false;
+ }
+
+ @Override
+ public void onMarkClick( @NotNull Marker markerInfo ) {
+ mMarkerClickHandler.handleMarkerClicked( markerInfo );
+ }
+
+ @Override
+ public void onRoadLoaded( @Nullable String s ) {
+
+ }
+
+ @Override
+ public void onMapStatusChanged( int type, int value ) {
+ Logger.i( TAG, "mapop--onMapStatusChanged-: " + type + "," + value );
+ }
+
+ @Override
+ public void onCameraChange( int type, int value ) {
+ Logger.i( TAG, "mapop--onCameraChange-: " + type + "," + value );
+ }
+
+ @Override
+ public void onCameraChangeFinish( @Nullable CameraPosition cameraPosition ) {
+ Logger.i( TAG, "mapop--onCameraChangeFinish-: " + cameraPosition + "cost:" + ( System.currentTimeMillis() - startTime ) );
+ if ( cameraPosition != null ) {
+ Trace.beginSection( "timer.onCameraChangeFinish" );
+ MogoMapListenerHandler.getInstance().onMapChanged( ObjectUtils.fromAMap( cameraPosition.getTarget() ),
+ cameraPosition.getZoom(),
+ cameraPosition.getTilt(),
+ cameraPosition.getBearing() );
+ Trace.endSection();
+ }
+ }
+
+ @Override
+ public void setAnchorScale( float x, float y ) {
+ mMapView.getMapAutoViewHelper().setAnchorScale( x, y );
+ }
+
+ @Override
+ public void setAnchorRate( float rate ) {
+ mMapView.getMapAutoViewHelper().setAnchorRate( rate );
+ }
+
+ @Override
+ public void emphasizeMyLocation() {
+
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapWrapper.java
new file mode 100644
index 0000000000..406a24e1f6
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/AMapWrapper.java
@@ -0,0 +1,274 @@
+package com.mogo.map.impl.custom;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.util.Log;
+
+import com.mogo.map.IMogoMap;
+import com.mogo.map.IMogoUiSettings;
+import com.mogo.map.impl.custom.marker.AMapInfoWindowAdapter;
+import com.mogo.map.impl.custom.marker.AMapMarkerWrapper;
+import com.mogo.map.impl.custom.overlay.AMapPolylineWrapper;
+import com.mogo.map.impl.custom.uicontroller.AMapUIController;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.map.marker.MogoMarkersHandler;
+import com.mogo.map.overlay.IMogoPolyline;
+import com.mogo.map.overlay.MogoPolylineOptions;
+import com.mogo.map.uicontroller.IMogoMapUIController;
+import com.mogo.utils.logger.Logger;
+import com.zhidaoauto.map.sdk.open.MapAutoApi;
+import com.zhidaoauto.map.sdk.open.data.MapDataApi;
+import com.zhidaoauto.map.sdk.open.marker.Marker;
+import com.zhidaoauto.map.sdk.open.marker.MarkerOptions;
+import com.zhidaoauto.map.sdk.open.marker.MultiPointOverlayOptions;
+import com.zhidaoauto.map.sdk.open.poyline.Polyline;
+import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions;
+import com.zhidaoauto.map.sdk.open.query.LonLatPoint;
+import com.zhidaoauto.map.sdk.open.tools.MapTools;
+import com.zhidaoauto.map.sdk.open.view.MapAutoView;
+import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-18
+ *
+ * 代理自研AMap
+ */
+public class AMapWrapper implements IMogoMap {
+
+ private static final String TAG = "AMapWrapper";
+
+ private static MapAutoViewHelper sAMap;
+ private IMogoMapUIController mUIcontroller;
+ private MapAutoViewHelper mAMap;
+ private MapAutoView mMapView;
+ private IMogoUiSettings mUiSettings;
+
+ public AMapWrapper(MapAutoViewHelper map, MapAutoView mapView, IMogoMapUIController controller) {
+ Logger.i(TAG, "autoop--AMapWrapper: init"+this);
+ this.mAMap = map;
+ sAMap = map;
+ this.mMapView = mapView;
+ mUIcontroller = controller;
+ // 设置实现自定义 info window
+ MapAutoApi.INSTANCE.setInfoWindowAdapter( new AMapInfoWindowAdapter() );
+ AMapUIController.getInstance().initClient(mUIcontroller);
+ }
+
+ public static MapAutoViewHelper getAMap() {
+ return sAMap;
+ }
+
+ @Override
+ public IMogoUiSettings getUiSettings() {
+ if (!checkAMap()) {
+ return null;
+ }
+ if (mUiSettings == null) {
+ mUiSettings = new AMapUiSettingsWrapper(mAMap);
+ }
+ return mUiSettings;
+ }
+
+ @Override
+ public IMogoMapUIController getUIController() {
+ return mUIcontroller;
+ }
+
+ @Override
+ public IMogoMarker addMarker(String tag, MogoMarkerOptions options) {
+ Logger.i(TAG, "autoop-addMarker: " + tag + ",MogoMarkerOptions:" + options + ",AMap:" + (mAMap != null)+",this:"+this);
+ if (!checkAMap()) {
+ return null;
+ }
+ MarkerOptions markerOptions = ObjectUtils.fromMogo(options);
+ if (markerOptions == null) {
+ Logger.e(TAG, "marker参数为空");
+ return null;
+ }
+ final IMogoMarker mogoMarker = new AMapMarkerWrapper(mAMap.addMarker(markerOptions), options);
+ if (options.isAutoManager()) {
+ MogoMarkersHandler.getInstance().add(tag, mogoMarker);
+ }
+ return mogoMarker;
+ }
+
+ @Override
+ public ArrayList addMarkers(String tag, ArrayList options, boolean moveToCenter) {
+ if (!checkAMap()) {
+ return null;
+ }
+
+ if (options == null || options.isEmpty()) {
+ return null;
+ }
+
+ // 地图导航时,忽略参数
+ if (InterceptorHandler.getInstance().ignoreAddMarkersMoveToCenterParameters(getContext())) {
+ moveToCenter = false;
+ }
+
+ ArrayList markers = new ArrayList<>();
+ ArrayList markerOptions = new ArrayList<>();
+ ArrayList mogoMarkers = new ArrayList<>();
+ for (MogoMarkerOptions option : options) {
+ if (option == null) {
+ continue;
+ }
+ MarkerOptions mo = ObjectUtils.fromMogo(option);
+ if (mo == null) {
+ continue;
+ }
+ markerOptions.add(mo);
+ }
+ if (markerOptions.isEmpty()) {
+ return null;
+ }
+ MultiPointOverlayOptions multiPointOverlayOptions = new MultiPointOverlayOptions();
+ multiPointOverlayOptions.setData(markerOptions);
+ multiPointOverlayOptions.setMarkerIcon(R.drawable.marker_blue);
+ List data = mAMap.addMarkers(multiPointOverlayOptions).getOptions().getData();
+ for (int i = 0 ;i< data.size();i++){
+ markers.add(new Marker(data.get(i)));
+ }
+ if (markers == null || markers.isEmpty()) {
+ return null;
+ }
+ for (int i = 0; i < markers.size(); i++) {
+ Marker marker = markers.get(i);
+ if (marker == null) {
+ continue;
+ }
+ mogoMarkers.add(new AMapMarkerWrapper(marker, options.get(i)));
+ }
+ MogoMarkersHandler.getInstance().add(tag, mogoMarkers);
+ return mogoMarkers;
+ }
+
+ @Override
+ public void clear() {
+ if (checkAMap()) {
+ mAMap.clearPanel();
+ }
+ }
+
+ @Override
+ public void clear(boolean isKeepMyLocationOverlay) {
+ if (checkAMap()) {
+ mAMap.clearPanel();
+ }
+ }
+
+ @Override
+ public void setPointToCenter(int x, int y) {
+ if (checkAMap()) {
+ LonLatPoint lonLatPoint = MapTools.INSTANCE.fromScreenLocation(new Point(x,y));
+ mAMap.setCenter(lonLatPoint);
+ }
+ }
+
+ @Override
+ public void setTouchPoiEnable(boolean touchPoiEnable) {
+ if (checkAMap()) {
+ mAMap.setTouchPoiEnable( touchPoiEnable );
+ }
+ }
+
+ @Override
+ public void setTrafficEnable(boolean enable) {
+ if (checkAMap()) {
+ mAMap.setTraffic( enable );
+ }
+ }
+
+ @Override
+ public void showBuildings(boolean enabled) {
+ if (checkAMap()) {
+ mAMap.showBuildings( enabled );
+ }
+ }
+
+ @Override
+ public void showIndoorMap(boolean enable) {
+ if (checkAMap()) {
+ // TODO: 2020/5/27 显示室内地图
+// mAMap.showIndoorMap( enable );
+ }
+ }
+
+ @Override
+ public void showMapText(boolean enable) {
+ if (checkAMap()) {
+ mAMap.showMapText( enable );
+ }
+ }
+
+ @Override
+ public void stopAnimation() {
+ if (checkAMap()) {
+ // TODO: 2020/5/27 停止当前执行的改变地图状态的动画。
+// mAMap.stopAnimation();
+ }
+ }
+
+ @Override
+ public float getScalePerPixel() {
+ if ( checkAMap() ) {
+ return mAMap.getScalePerPixel();
+ }
+ return 0;
+ }
+
+ @Override
+ public void changeZoom(float zoom) {
+ Logger.d(TAG, "changeZoom %s", zoom);
+ if (checkAMap()) {
+ mAMap.setZoom((int) zoom);
+ }
+ }
+
+ @Override
+ public float getZoomLevel() {
+ if (checkAMap()) {
+ try {
+ return mAMap.getZoom();
+ } catch (Exception e) {
+
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public IMogoPolyline addPolyline(MogoPolylineOptions options) {
+ if ( checkAMap() ) {
+ PolylineOptions polylineOptions = ObjectUtils.fromMogo( options );
+ Logger.d(TAG, "addPolyline %s", polylineOptions.toString());
+ if ( polylineOptions == null ) {
+ return null;
+ }
+ Polyline polyline = mAMap.drawLine( polylineOptions );
+ return new AMapPolylineWrapper( polyline, options );
+ }
+ return null;
+ }
+
+ private boolean checkAMap() {
+ mAMap = mMapView.getMapAutoViewHelper();
+ sAMap = mAMap;
+ if (mAMap == null) {
+ Logger.e(TAG, "自研map实例为空,请检查");
+ return false;
+ }
+ return true;
+ }
+
+ private Context getContext() {
+ return mMapView.getContext();
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java
new file mode 100644
index 0000000000..efb1b653eb
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/CustomMapView.java
@@ -0,0 +1,38 @@
+package com.mogo.map.impl.custom;
+
+import android.content.Context;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.IMogoMapView;
+import com.mogo.map.IMogoMapViewCreator;
+import com.zhidaoauto.map.sdk.open.MapAutoApi;
+import com.zhidaoauto.map.sdk.open.MapParams;
+import com.zhidaoauto.map.sdk.open.view.MapAutoView;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-25
+ *
+ * 描述
+ */
+public class CustomMapView implements IMogoMapViewCreator {
+
+ private static final String TAG = "AMapBaseMapView";
+
+ private static IMogoMapView mapView;
+
+ @Override
+ public IMogoMapView create( Context context ) {
+ if ( mapView == null ) {
+ MapAutoApi.INSTANCE.init( context, MapParams.Companion.init().setDebugMode( false )
+ .setCoordinateType( MapParams.COORDINATETYPE_GCJ02 )
+ .setPerspectiveMode( MapParams.MAP_PERSPECTIVE_2D )
+ .setZoom( 16 )
+ .setPointToCenter( 0.5f, 0.8f )
+ .setStyleMode( MapParams.MAP_STYLE_VR ) );
+ }
+ MapAutoView mapAutoView = new MapAutoView( context );
+ mapView = new AMapViewWrapper( mapAutoView );
+ return mapView;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/IInterceptor.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/IInterceptor.java
new file mode 100644
index 0000000000..23bfd89255
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/IInterceptor.java
@@ -0,0 +1,45 @@
+package com.mogo.map.impl.custom;
+
+import android.content.Context;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-27
+ *
+ * 操作拦截器
+ */
+public interface IInterceptor {
+
+ /**
+ * 是否忽略添加多个marker时聚拢参数
+ *
+ * 导航时:不需要聚拢
+ *
+ * @return true - 忽略 false - 不忽略
+ */
+ boolean ignoreAddMarkersMoveToCenterParameters( Context context );
+
+ /**
+ * 导航时,是否响应 poi 点击
+ *
+ * @param context
+ * @return
+ */
+ boolean ignorePoiClicked( Context context );
+
+ /**
+ * 导航时,是否响应地图点击
+ *
+ * @param context
+ * @return
+ */
+ boolean ignoreMapClicked( Context context );
+
+ /**
+ * 请求绘制路线
+ *
+ * @param context
+ * @return
+ */
+ boolean ignoreDrawRouteOverlay( Context context );
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/InterceptorHandler.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/InterceptorHandler.java
new file mode 100644
index 0000000000..91f18a2c69
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/InterceptorHandler.java
@@ -0,0 +1,59 @@
+package com.mogo.map.impl.custom;
+
+import android.content.Context;
+
+
+/**
+ * @author congtaowang
+ * @since 2019-12-27
+ *
+ * 操作拦截器
+ */
+public class InterceptorHandler implements IInterceptor {
+
+ private static volatile InterceptorHandler sInstance;
+
+ private Context mContext;
+
+ private InterceptorHandler() {
+ }
+
+ public static InterceptorHandler getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( InterceptorHandler.class ) {
+ if ( sInstance == null ) {
+ sInstance = new InterceptorHandler();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ public void init( Context context ) {
+ mContext = context;
+ }
+
+ @Override
+ public boolean ignoreAddMarkersMoveToCenterParameters( Context context ) {
+ return false;//NaviClient.getInstance( context ).isNaviing();
+ }
+
+ @Override
+ public boolean ignorePoiClicked( Context context ) {
+ return false;//NaviClient.getInstance( context ).isNaviing();
+ }
+
+ @Override
+ public boolean ignoreMapClicked( Context context ) {
+ return false;//NaviClient.getInstance( context ).isNaviing();
+ }
+
+ @Override
+ public boolean ignoreDrawRouteOverlay( Context context ) {
+ return false;//NaviClient.getInstance( context ).isNaviing();
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/hook/BnHooker.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/hook/BnHooker.java
new file mode 100644
index 0000000000..ef1c5f49af
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/hook/BnHooker.java
@@ -0,0 +1,60 @@
+package com.mogo.map.impl.custom.hook;
+
+import android.content.Context;
+
+import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+/**
+ * @author congtaowang
+ * @since 2020-03-12
+ *
+ * 描述
+ */
+public class BnHooker implements InvocationHandler {
+
+ private static final String TAG = "BnHooker";
+ private final Context mContext;
+
+ private Object host;
+
+ public BnHooker(MapAutoViewHelper map, Context context ) throws Exception {
+
+ mContext = context;
+
+ if ( map == null ) {
+ return;
+ }
+// Field field = AMap.class.getDeclaredField( "a" );
+// field.setAccessible( true );
+// host = field.get( map );
+// Object object = Proxy.newProxyInstance(
+// BnHooker.class.getClassLoader(),
+// new Class[]{
+// com.amap.api.col.n3.ft.a.class,
+// IAMapDelegate.class,
+// IAMapListener.class,
+// IAMap.class
+// },
+// this
+// );
+// field.set( map, object );
+ }
+
+ @Override
+ public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable {
+// if ( method.getName().equals( "setRenderFps" ) ) {
+// Logger.d( TAG, "setRenderFps" );
+// if ( !NaviClient.getInstance( mContext ).isNaviing() ) {
+// }
+// return method.invoke( host, 10 );
+// }
+// if ( method.getName().equals( "drawFrame" ) ) {
+// Logger.d( TAG, "drawFrame" );
+// }
+// return method.invoke( host, args );
+ return null;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java
new file mode 100644
index 0000000000..0ddfa645ad
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/location/ALocationClient.java
@@ -0,0 +1,139 @@
+package com.mogo.map.impl.custom.location;
+
+import android.content.Context;
+import android.os.Trace;
+
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.location.IMogoLocationClient;
+import com.mogo.map.location.IMogoLocationListener;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.map.location.MogoLocationListenerRegister;
+import com.mogo.utils.logger.Logger;
+import com.zhidaoauto.map.sdk.open.location.LocationClient;
+import com.zhidaoauto.map.sdk.open.location.LocationListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-19
+ *
+ * 自研定位
+ */
+public class ALocationClient implements IMogoLocationClient {
+
+ private static final String TAG = "LocationClient";
+
+ private MogoLocation mLastLocation;
+ private LocationListener mListener = new InternalLocationListener();
+
+ private boolean mIsDestroyed = false;
+
+ public ALocationClient( Context context ) {
+ mClient = new LocationClient( context );
+ mClient.registerListener( mListener );
+ mLastLocation = ObjectUtils.fromLocation( mClient.getLastKnownMogoLocation() );
+ if ( mLastLocation == null ) {
+ mLastLocation = new MogoLocation();
+ }
+ }
+
+ private LocationClient mClient;
+
+ @Override
+ public void start() {
+ start( 2_000L );
+ }
+
+ @Override
+ public void start( long interval ) {
+ if ( mIsDestroyed ) {
+ destroyWarming();
+ return;
+ }
+ if ( mClient != null ) {
+// AMapLocationClientOption option = new AMapLocationClientOption();
+// option.setLocationMode( AMapLocationClientOption.AMapLocationMode.Hight_Accuracy );
+// option.setNeedAddress( true );
+// option.setGpsFirst( true );
+// option.setInterval( interval );
+// mClient.setLocationOption( option );
+ mClient.start();
+ }
+ }
+
+ @Override
+ public void stop() {
+ if ( mIsDestroyed ) {
+ destroyWarming();
+ return;
+ }
+ if ( mClient != null && mClient.isStarted() ) {
+ mClient.stop();
+ }
+ }
+
+ @Override
+ public void addLocationListener( IMogoLocationListener listener ) {
+ // do not impl.
+ }
+
+ @Override
+ public void removeLocationListener( IMogoLocationListener listener ) {
+ // do not impl.
+ }
+
+ @Override
+ public MogoLocation getLastKnowLocation() {
+ if ( mIsDestroyed ) {
+ destroyWarming();
+ return null;
+ }
+ return mLastLocation;
+ }
+
+ @Override
+ public synchronized void destroy() {
+ mIsDestroyed = true;
+ if ( mClient != null ) {
+ mClient.unRegisterListener( mListener );
+ mClient.destory();
+ }
+ mClient = null;
+ mLastLocation = null;
+ }
+
+ private class InternalLocationListener implements LocationListener {
+
+ @Override
+ public void onLocationChanged( @NotNull com.zhidaoauto.map.sdk.open.location.MogoLocation location ) {
+ if ( mIsDestroyed ) {
+ destroyWarming();
+ return;
+ }
+ if ( location == null ||
+ location.getLat() == 0.0D ||
+ location.getLon() == 0.0D ) {
+ return;
+ }
+ Trace.beginSection( "timer.onLocationChanged" );
+ mLastLocation = ObjectUtils.fromLocation( location );
+ Set< IMogoLocationListener > listeners = MogoLocationListenerRegister.getInstance().getListeners();
+ synchronized ( listeners ) {
+ Iterator< IMogoLocationListener > listenerIterator = listeners.iterator();
+ while ( listenerIterator.hasNext() ) {
+ listenerIterator.next().onLocationChanged( mLastLocation.clone() );
+ }
+ }
+ Trace.endSection();
+ }
+ }
+
+ private void destroyWarming() {
+ Logger.w( TAG, "location client has destroyed." );
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapInfoWindowAdapter.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapInfoWindowAdapter.java
new file mode 100644
index 0000000000..1e06b9ddbb
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapInfoWindowAdapter.java
@@ -0,0 +1,36 @@
+package com.mogo.map.impl.custom.marker;
+
+import android.view.View;
+
+import com.mogo.map.marker.IMogoInfoWindowAdapter;
+import com.mogo.map.marker.IMogoMarker;
+import com.zhidaoauto.map.sdk.open.abs.marker.InfoWindowAdapter;
+import com.zhidaoauto.map.sdk.open.marker.Marker;
+
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-24
+ *
+ * 自定义infowindow
+ */
+public final class AMapInfoWindowAdapter implements InfoWindowAdapter {
+
+ public View getInfoWindow( Marker marker ) {
+ if ( marker.getMObject() instanceof IMogoMarker ) {
+ IMogoMarker mogoMarker = ( ( IMogoMarker ) marker.getMObject() );
+ IMogoInfoWindowAdapter delegate = mogoMarker.getInfoWindowAdapter();
+ if ( delegate != null ) {
+ return delegate.getInfoWindow( mogoMarker );
+ }
+ }
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public View getInfoContents(@Nullable Marker marker) {
+ return null;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java
new file mode 100644
index 0000000000..4a6b17c1d0
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/AMapMarkerWrapper.java
@@ -0,0 +1,495 @@
+package com.mogo.map.impl.custom.marker;
+
+import android.graphics.Bitmap;
+import android.graphics.Point;
+import android.util.Log;
+import android.view.View;
+import android.view.animation.Interpolator;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.marker.IMogoInfoWindowAdapter;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.IMogoMarkerClickListener;
+import com.mogo.map.marker.IMogoMarkerIconViewCreator;
+import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.map.marker.anim.OnMarkerAnimationListener;
+import com.mogo.utils.logger.Logger;
+import com.zhidaoauto.map.sdk.open.abs.marker.MarkerAnimationListener;
+import com.zhidaoauto.map.sdk.open.marker.Animation;
+import com.zhidaoauto.map.sdk.open.marker.Marker;
+import com.zhidaoauto.map.sdk.open.marker.MarkerOptions;
+import com.zhidaoauto.map.sdk.open.marker.MarkerScaleAnimation;
+import com.zhidaoauto.map.sdk.open.marker.MarkerTranslateAnimation;
+import com.zhidaoauto.map.sdk.open.marker.OnMarkClickListener;
+import com.zhidaoauto.map.sdk.open.query.LonLatPoint;
+import com.zhidaoauto.map.sdk.open.tools.MapTools;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Observable;
+import java.util.Observer;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-18
+ *
+ * 自研marker
+ */
+public class AMapMarkerWrapper implements IMogoMarker, Observer {
+
+ private final String TAG = AMapMarkerWrapper.class.getName();
+
+ private Marker mMarker;
+ private Object mObject;
+ private IMogoMarkerClickListener mMogoMarkerClickListener;
+ private IMogoInfoWindowAdapter mMogoInfoWindowAdapter;
+
+ private boolean mIsDestroy = false;
+
+ private MogoMarkerOptions mMogoMarkerOptions;
+ private String mOwner;
+
+ public AMapMarkerWrapper(Marker marker, MogoMarkerOptions mogoMarkerOptions) {
+ this.mMarker = marker;
+ if (marker != null) {
+ // 设置自研 marker 的object对象为 IMogoMarker 实例。!!!!
+ marker.setMObject(this);
+ MarkerWrapperClickHelper.getInstance().setMogoMarkerMap(marker.getId(),this);
+ }
+ setObject(mogoMarkerOptions.getObject());
+ this.mMogoMarkerOptions = mogoMarkerOptions;
+ mMogoMarkerOptions.addObserver(this);
+ }
+
+ @Override
+ public void update(Observable o, Object arg) {
+ if (isDestroyed()) {
+ return;
+ }
+ setMarkerOptions(mMogoMarkerOptions);
+ }
+
+ @Override
+ public void destroy() {
+ if (mMogoMarkerOptions != null) {
+ mMogoMarkerOptions.deleteObservers();
+ mMogoMarkerOptions = null;
+ }
+ if (mMarker != null) {
+ mMarker.remove();
+ mMarker.setMObject(null);
+ mMarker = null;
+ }
+ mMogoInfoWindowAdapter = null;
+ mMogoMarkerClickListener = null;
+ mObject = null;
+ mIsDestroy = true;
+ }
+
+ @Override
+ public void remove() {
+ destroy();
+ }
+
+ @Override
+ public void hideInfoWindow() {
+ if (mMarker != null) {
+ mMarker.hideInfoWindow();
+ }
+ }
+
+ @Override
+ public void setAlpha(float alpha) {
+ if (mMarker != null) {
+ mMarker.setAlpha(alpha);
+ }
+ }
+
+ @Override
+ public void setAnchor(float anchorU, float anchorV) {
+ if (mMarker != null) {
+ mMarker.setAnchor(anchorU, anchorV);
+ }
+ }
+
+ @Override
+ public void setDraggable(boolean paramBoolean) {
+ if ( mMarker != null ) {
+ mMarker.setDraggable( paramBoolean );
+ }
+ }
+
+ @Override
+ public void setIcon(Bitmap icon) {
+ if (icon == null || icon.isRecycled()) {
+ return;
+ }
+ if (mMarker != null) {
+ mMarker.setIcon(icon);
+ }
+ }
+
+ @Override
+ public void setIcons(ArrayList icons) {
+ if (icons == null || icons.isEmpty()) {
+ return;
+ }
+// ArrayList descriptors = new ArrayList<>();
+// for ( Bitmap icon : icons ) {
+// if ( icon == null || icon.isRecycled() ) {
+// continue;
+// }
+// descriptors.add( BitmapDescriptorFactory.fromBitmap( icon ) );
+// }
+// if ( descriptors.isEmpty() ) {
+// return;
+// }
+// if ( mMarker != null ) {
+// mMarker.setIcons( descriptors );
+// }
+ }
+
+ @Override
+ public void setInfoWindowEnable(boolean enabled) {
+ if (mMarker != null) {
+ if (enabled) {
+ mMarker.showInfoWindow();
+ } else {
+ mMarker.hideInfoWindow();
+ }
+ }
+ }
+
+ @Override
+ public void setMarkerOptions(MogoMarkerOptions opt) {
+
+ final MarkerOptions options = ObjectUtils.fromMogo(opt);
+ if (options == null) {
+ return;
+ }
+ if (mMarker != null) {
+ mMarker.setMarkerOptions(options);
+ setObject(opt.getObject());
+ }
+ }
+
+ @Override
+ public void setObject(Object object) {
+ mObject = object;
+ }
+
+ @Override
+ public Object getObject() {
+ return mObject;
+ }
+
+ @Override
+ public void setPeriod(int period) {
+ if (mMarker != null) {
+ mMarker.setPeriod(period);
+ }
+ }
+
+ @Override
+ public void setPosition(double lat, double lng) {
+ if (mMarker != null) {
+ mMarker.setPosition(new LonLatPoint(lng,lat));
+ }
+ }
+
+ @Override
+ public MogoLatLng getPosition() {
+ if (mMarker != null) {
+ final LonLatPoint latLng = mMarker.getPosition();
+ return ObjectUtils.fromAMap(latLng);
+ }
+ return null;
+ }
+
+ @Override
+ public void setRotateAngle(float rotate) {
+ if (mMarker != null) {
+ mMarker.setRotateAngle(rotate);
+ }
+ }
+
+ @Override
+ public void setSnippet(String snippet) {
+ if (mMarker != null) {
+ mMarker.setSnippet(snippet);
+ }
+ }
+
+ @Override
+ public void setTitle(String title) {
+ if (mMarker != null) {
+ mMarker.setTitle(title);
+ }
+ }
+
+ @Override
+ public void setToTop() {
+ if (mMarker != null) {
+ mMarker.setToTop();
+ }
+ }
+
+ @Override
+ public void setVisible(boolean visible) {
+ if (mMarker != null) {
+ mMarker.setVisible(visible);
+ }
+ }
+
+ @Override
+ public void setZIndex(int zIndex) {
+ if (mMarker != null) {
+ mMarker.setZIndex(zIndex);
+ }
+ }
+
+ @Override
+ public void showInfoWindow() {
+ if (mMarker != null) {
+ mMarker.showInfoWindow();
+ }
+ }
+
+ @Override
+ public void setOnMarkerClickListener(IMogoMarkerClickListener listener) {
+ mMogoMarkerClickListener = listener;
+ if(mMarker != null){
+ mMarker.setOnMarkClickListener(new OnMarkClickListener() {
+ @Override
+ public void onMarkClick(@NotNull Marker marker) {
+ if(mMogoMarkerClickListener!= null){
+ mMogoMarkerClickListener.onMarkerClicked(AMapMarkerWrapper.this);
+ }
+ }
+ });
+ }
+ }
+
+ @Override
+ public IMogoMarkerClickListener getOnMarkerClickListener() {
+ return mMogoMarkerClickListener;
+ }
+
+ @Override
+ public void setInfoWindowAdapter(IMogoInfoWindowAdapter adapter) {
+ mMogoInfoWindowAdapter = adapter;
+ }
+
+ @Override
+ public IMogoInfoWindowAdapter getInfoWindowAdapter() {
+ return mMogoInfoWindowAdapter;
+ }
+
+ @Override
+ public void setMarkerIconView(IMogoMarkerIconViewCreator creator) {
+ if (creator != null) {
+ View iconView = creator.createView(this);
+ if (iconView != null) {
+ mMarker.setIcon(iconView);
+ }
+ }
+ }
+
+ @Override
+ public boolean isDestroyed() {
+ return mIsDestroy;
+ }
+
+ @Override
+ public void setOwner(String mOwner) {
+ this.mOwner = mOwner;
+ }
+
+ @Override
+ public String getOwner() {
+ if (mOwner != null) {
+ return mOwner;
+ }
+ if (mMogoMarkerOptions != null) {
+ return mMogoMarkerOptions.getOwner();
+ }
+ return null;
+ }
+
+ @Override
+ public void setPositionByPixels(Point position) {
+ if (mMarker != null) {
+ mMarker.setPosition(MapTools.INSTANCE.fromScreenLocation(position));
+ }
+ }
+
+ public Marker getMarker() {
+ return mMarker;
+ }
+
+ @Override
+ public MogoMarkerOptions getMogoMarkerOptions() {
+ return mMogoMarkerOptions;
+ }
+
+ @Override
+ public void startScaleAnimation(float fromX, float toX, float fromY, float toY, int duration, Interpolator interpolator) {
+ if (isDestroyed()) {
+ return;
+ }
+ startScaleAnimation(fromX, toX, fromY, toY, duration, interpolator,null);
+// ScaleAnimation animationScale = new ScaleAnimation(fromX, toX, fromY, toY);
+// animationScale.setDuration(duration);
+// animationScale.setFillMode(Animation.FILL_MODE_FORWARDS);
+// animationScale.setInterpolator(interpolator);
+//
+// mMarker.setAnimation(animationScale);
+// mMarker.startAnimation();
+ }
+
+ @Override
+ public void startScaleAnimation(float fromX, float toX, float fromY, float toY, int duration, Interpolator interpolator, OnMarkerAnimationListener listener) {
+ if (isDestroyed()) {
+ return;
+ }
+
+ MarkerScaleAnimation animationScale = new MarkerScaleAnimation(fromX, toX);
+ animationScale.setDuration(duration*1000);
+// animationScale.setFillMode(Animation.FILL_MODE_FORWARDS);
+// animationScale.setInterpolator(interpolator);
+ animationScale.setAnimationListener(new MarkerAnimationListener() {
+ @Override
+ public void onAnimationEnd(@NotNull Animation animation) {
+ if (isDestroyed()) {
+ return;
+ }
+ if (listener != null) {
+ listener.onAnimEnd();
+ }
+ }
+
+ @Override
+ public void onAnimationRepeat(@NotNull Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationStart(@NotNull Animation animation) {
+ if (isDestroyed()) {
+ return;
+ }
+ if (listener != null) {
+ listener.onAnimStart();
+ }
+ }
+ });
+
+ mMarker.setMarkerScaleAnimation(animationScale);
+ mMarker.startAnimation();
+ }
+
+ @Override
+ public void startJumpAnimation(float high, long duration, Interpolator interpolator, OnMarkerAnimationListener listener) {
+ if (isDestroyed() || high <= 0.0f || interpolator == null || duration < 0) {
+ return;
+ }
+ try {
+ final LonLatPoint latLng = ObjectUtils.fromMogo(getPosition());
+// Point point = AMapWrapper.getAMap().getProjection().toScreenLocation(latLng);
+// point.y -= WindowUtils.dip2px(AbsMogoApplication.getApp(), high);
+// LatLng target = AMapWrapper.getAMap().getProjection().fromScreenLocation(point);
+ //使用TranslateAnimation,填写一个需要移动的目标点
+ MarkerTranslateAnimation animation = new MarkerTranslateAnimation(latLng);
+// animation.setInterpolator(interpolator);
+ animation.setAnimationListener(new MarkerAnimationListener() {
+ @Override
+ public void onAnimationEnd(@NotNull Animation animation) {
+ if (isDestroyed()) {
+ return;
+ }
+ if (listener != null) {
+ listener.onAnimEnd();
+ }
+ }
+
+ @Override
+ public void onAnimationRepeat(@NotNull Animation animation) {
+
+ }
+
+ @Override
+ public void onAnimationStart(@NotNull Animation animation) {
+ if (isDestroyed()) {
+ return;
+ }
+ if (listener != null) {
+ listener.onAnimStart();
+ }
+ }
+ });
+ //整个移动所需要的时间
+ animation.setDuration(duration*1000);
+ //设置动画
+ mMarker.setTranslateAnimation(animation);
+ mMarker.startAnimation();
+ } catch (Exception e) {
+ Logger.e(TAG, e, "error.");
+ }
+ }
+
+ @Override
+ public void setClickable(boolean clickable) {
+ if (mMarker != null) {
+ mMarker.setClickable(clickable);
+ }
+ }
+
+ @Override
+ public void startSmooth(List points, int duration) {
+ if (isDestroyed()) {
+ return;
+ }
+
+ if (mMarker == null) {
+ return;
+ }
+
+ if (points == null || points.isEmpty()) {
+ return;
+ }
+
+ List newPoints = new ArrayList<>();
+ for (int i = 0; i < points.size(); i++) {
+ LonLatPoint point = ObjectUtils.fromMogo(points.get(i));
+ if (point == null) {
+ continue;
+ }
+ newPoints.add(point);
+ }
+ if (newPoints.isEmpty()) {
+ return;
+ }
+
+ mMarker.startSmooth(newPoints,duration*1000);
+ }
+
+ @Override
+ public void startScaleAnimationWithAlpha( float fromX, float toX, float fromY, float toY, float fromAlpha, float toAlpha, int duration, Interpolator interpolator, OnMarkerAnimationListener listener ) {
+
+ }
+
+ @Override
+ public boolean isInfoWindowShowing() {
+ return mMarker.isInfoWindowShown();
+ }
+
+ @Override
+ public void setGps( boolean isGps ) {
+ if ( mMarker != null ) {
+ mMarker.setGps( isGps );
+ }
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/MarkerWrapperClickHelper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/MarkerWrapperClickHelper.java
new file mode 100644
index 0000000000..4f45d44088
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/marker/MarkerWrapperClickHelper.java
@@ -0,0 +1,33 @@
+package com.mogo.map.impl.custom.marker;
+
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.IMogoMarkerClickListener;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MarkerWrapperClickHelper {
+
+ private volatile static MarkerWrapperClickHelper markerWrapperClickHelper;
+
+ private Map mogoMarkerMap = new HashMap<>();
+
+ public void setMogoMarkerMap(String id,IMogoMarker iMogoMarker){
+ this.mogoMarkerMap.put(id,iMogoMarker);
+ }
+
+ public Map getMogoMarkerMap() {
+ return mogoMarkerMap;
+ }
+
+ public static MarkerWrapperClickHelper getInstance(){
+ if (markerWrapperClickHelper == null) {
+ synchronized (MarkerWrapperClickHelper.class) {
+ if (markerWrapperClickHelper == null) {
+ markerWrapperClickHelper = new MarkerWrapperClickHelper();
+ }
+ }
+ }
+ return markerWrapperClickHelper;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageConsts.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageConsts.java
new file mode 100644
index 0000000000..e88ea1166a
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageConsts.java
@@ -0,0 +1,30 @@
+package com.mogo.map.impl.custom.message;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+import androidx.annotation.NonNull;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-28
+ *
+ * 描述
+ */
+public class AMapMessageConsts {
+
+ /**
+ * 导航开始
+ */
+ public static final int MSG_NAVI_START = 1000;
+ /**
+ * 取消导航
+ */
+ public static final int MSG_NAVI_STOP = 1001;
+ /**
+ * 规划路线成功
+ */
+ public static final int MSG_CALCULATE_SUCCESS = 1002;
+
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageListener.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageListener.java
new file mode 100644
index 0000000000..84b5b9138f
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageListener.java
@@ -0,0 +1,21 @@
+package com.mogo.map.impl.custom.message;
+
+
+import com.autonavi.nge.guidance.NaviInfo;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-28
+ *
+ * 消息回调
+ */
+public interface AMapMessageListener {
+
+ void onNaviStarted();
+
+ void onNaviStopped();
+
+ void onNaviInfoUpdat( NaviInfo naviInfo );
+
+ void onCalculateSuccess();
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageManager.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageManager.java
new file mode 100644
index 0000000000..ca953605f3
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/message/AMapMessageManager.java
@@ -0,0 +1,133 @@
+package com.mogo.map.impl.custom.message;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+import androidx.annotation.NonNull;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-28
+ *
+ * 描述
+ */
+public class AMapMessageManager {
+
+ private static volatile AMapMessageManager sInstance;
+
+ private List< AMapMessageListener > mListeners = new ArrayList<>();
+
+ private AMapMessageManager() {
+ }
+
+ public static AMapMessageManager getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( AMapMessageManager.class ) {
+ if ( sInstance == null ) {
+ sInstance = new AMapMessageManager();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ public synchronized void registerAMapMessageListener( AMapMessageListener listener ) {
+ if ( !mListeners.contains( listener ) ) {
+ mListeners.add( listener );
+ }
+ }
+
+ public synchronized void unregisterAMapMessageListener( AMapMessageListener listener ) {
+ mListeners.remove( listener );
+ }
+
+ private Handler mHandler = new Handler( Looper.getMainLooper() ) {
+ @Override
+ public void handleMessage( @NonNull Message msg ) {
+ super.handleMessage( msg );
+ AMapMessageManager.this.handleMessage( msg );
+ }
+ };
+
+ public void sendMessage( Message msg ) {
+ if ( msg != null ) {
+ mHandler.sendMessage( msg );
+ }
+ }
+
+ public void sendMessage( int what ) {
+ sendMessage( what, null );
+ }
+
+ public void sendMessage( int what, Object obj ) {
+ Message msg = Message.obtain();
+ msg.what = what;
+ msg.obj = obj;
+ sendMessage( msg );
+ }
+
+ public void postNaviStarted() {
+ sendMessage( AMapMessageConsts.MSG_NAVI_START );
+ }
+
+ public void postNaviStopped() {
+ sendMessage( AMapMessageConsts.MSG_NAVI_STOP );
+ }
+
+ public void postCalculateSuccess() {
+ sendMessage( AMapMessageConsts.MSG_CALCULATE_SUCCESS );
+ }
+
+ private synchronized void handleMessage( Message msg ) {
+ if ( msg == null ) {
+ return;
+ }
+ switch ( msg.what ) {
+ case AMapMessageConsts.MSG_NAVI_START:
+ handleNaviStartedMsg();
+ break;
+ case AMapMessageConsts.MSG_NAVI_STOP:
+ handleNaviStoppedMsg();
+ break;
+ case AMapMessageConsts.MSG_CALCULATE_SUCCESS:
+ handleCalculateSuccessMsg();
+ break;
+ }
+ }
+
+ private void handleNaviStartedMsg() {
+ if ( mListeners == null ) {
+ return;
+ }
+ for ( AMapMessageListener listener : mListeners ) {
+ listener.onNaviStarted();
+ }
+ }
+
+ private void handleNaviStoppedMsg() {
+ if ( mListeners == null ) {
+ return;
+ }
+ for ( AMapMessageListener listener : mListeners ) {
+ listener.onNaviStopped();
+ }
+ }
+
+ private void handleCalculateSuccessMsg() {
+ if ( mListeners == null ) {
+ return;
+ }
+ for ( AMapMessageListener listener : mListeners ) {
+ listener.onCalculateSuccess();
+ }
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/AMapNaviListenerAdapter.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/AMapNaviListenerAdapter.java
new file mode 100644
index 0000000000..3b458ddae4
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/AMapNaviListenerAdapter.java
@@ -0,0 +1,237 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import com.amap.api.navi.AMapNaviListener;
+//import com.amap.api.navi.model.AMapCalcRouteResult;
+//import com.amap.api.navi.model.AMapLaneInfo;
+//import com.amap.api.navi.model.AMapModelCross;
+//import com.amap.api.navi.model.AMapNaviCameraInfo;
+//import com.amap.api.navi.model.AMapNaviCross;
+//import com.amap.api.navi.model.AMapNaviInfo;
+//import com.amap.api.navi.model.AMapNaviLocation;
+//import com.amap.api.navi.model.AMapNaviRouteNotifyData;
+//import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
+//import com.amap.api.navi.model.AMapServiceAreaInfo;
+//import com.amap.api.navi.model.AimLessModeCongestionInfo;
+//import com.amap.api.navi.model.AimLessModeStat;
+//import com.amap.api.navi.model.NaviInfo;
+//import com.autonavi.tbt.TrafficFacilityInfo;
+//import com.mogo.utils.logger.Logger;
+//
+///**
+// * @author congtaowang
+// * @since 2019-12-25
+// *
+// * 自研导航事件:导航事件
+// */
+//public abstract class AMapNaviListenerAdapter implements AMapNaviListener {
+//
+// private static final String TAG = "AMapNaviListenerAdapter";
+// protected String mLastSpeakWord;
+//
+// @Override
+// public void onInitNaviFailure() {
+//
+// }
+//
+// @Override
+// public void onInitNaviSuccess() {
+//
+// }
+//
+// @Override
+// public void onStartNavi( int i ) {
+//
+// }
+//
+// @Override
+// public void onTrafficStatusUpdate() {
+//
+// }
+//
+// @Override
+// public void onLocationChange( AMapNaviLocation aMapNaviLocation ) {
+//
+// }
+//
+// @Override
+// public void onGetNavigationText( int i, String s ) {
+//
+// }
+//
+// @Override
+// public void onGetNavigationText( String s ) {
+// mLastSpeakWord = s;
+// Logger.d( TAG, s );
+// TTSSpeaker.getInstance().speakTTS( s );
+// }
+//
+// @Override
+// public void onEndEmulatorNavi() {
+//
+// }
+//
+// @Override
+// public void onArriveDestination() {
+//
+// }
+//
+// @Override
+// public void onCalculateRouteFailure( int i ) {
+//
+// }
+//
+// @Override
+// public void onReCalculateRouteForYaw() {
+//
+// }
+//
+// @Override
+// public void onReCalculateRouteForTrafficJam() {
+//
+// }
+//
+// @Override
+// public void onArrivedWayPoint( int i ) {
+//
+// }
+//
+// @Override
+// public void onGpsOpenStatus( boolean b ) {
+//
+// }
+//
+// @Override
+// public void onNaviInfoUpdate( NaviInfo naviInfo ) {
+//
+// }
+//
+// @Override
+// public void onNaviInfoUpdated( AMapNaviInfo aMapNaviInfo ) {
+//
+// }
+//
+// @Override
+// public void updateCameraInfo( AMapNaviCameraInfo[] aMapNaviCameraInfos ) {
+//
+// }
+//
+// @Override
+// public void updateIntervalCameraInfo( AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i ) {
+// if ( aMapNaviCameraInfo != null ) {
+// Logger.i( TAG, "current camera speed: %d, status = %d", aMapNaviCameraInfo.getCameraSpeed(), i );
+// }
+// if ( aMapNaviCameraInfo1 != null ) {
+// Logger.i( TAG, "current camera speed: %d, status = %d", aMapNaviCameraInfo1.getCameraSpeed(), i );
+// }
+// }
+//
+//
+// @Override
+// public void onServiceAreaUpdate( AMapServiceAreaInfo[] aMapServiceAreaInfos ) {
+//
+// }
+//
+// @Override
+// public void showCross( AMapNaviCross aMapNaviCross ) {
+//
+// }
+//
+// @Override
+// public void hideCross() {
+//
+// }
+//
+// @Override
+// public void showModeCross( AMapModelCross aMapModelCross ) {
+//
+// }
+//
+// @Override
+// public void hideModeCross() {
+//
+// }
+//
+// @Override
+// public void showLaneInfo( AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1 ) {
+//
+// }
+//
+// @Override
+// public void showLaneInfo( AMapLaneInfo aMapLaneInfo ) {
+//
+// }
+//
+// @Override
+// public void hideLaneInfo() {
+//
+// }
+//
+// @Override
+// public void onCalculateRouteSuccess( int[] ints ) {
+//
+// }
+//
+// @Override
+// public void notifyParallelRoad( int i ) {
+//
+// }
+//
+// @Override
+// public void OnUpdateTrafficFacility( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
+//
+// }
+//
+// @Override
+// public void OnUpdateTrafficFacility( AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo ) {
+//
+// }
+//
+// @Override
+// public void OnUpdateTrafficFacility( TrafficFacilityInfo trafficFacilityInfo ) {
+//
+// }
+//
+// /**
+// * 巡航回调
+// * 连续5个点速度大于15km/h后触发 updateAimlessModeStatistics 回调,通过 AimLessModeStat 对象可获取巡航的连续行驶距离和连续启用时间
+// *
+// * @param aimLessModeStat
+// */
+// @Override
+// public void updateAimlessModeStatistics( AimLessModeStat aimLessModeStat ) {
+//
+// }
+//
+// /**
+// * 巡航回调
+// * 出现拥堵长度大于500米且拥堵时间大于5分钟时,会进到 updateAimlessModeCongestionInfo 回调中,通过 AimLessModeCongestionInfo 对象,可获取到道路拥堵信息(如:导致拥堵的事件类型、拥堵的状态等)
+// *
+// * @param aimLessModeCongestionInfo
+// */
+// @Override
+// public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
+//
+// }
+//
+// @Override
+// public void onPlayRing( int i ) {
+//
+// }
+//
+// @Override
+// public void onCalculateRouteSuccess( AMapCalcRouteResult aMapCalcRouteResult ) {
+//
+// }
+//
+// @Override
+// public void onCalculateRouteFailure( AMapCalcRouteResult aMapCalcRouteResult ) {
+//
+// }
+//
+// @Override
+// public void onNaviRouteNotify( AMapNaviRouteNotifyData aMapNaviRouteNotifyData ) {
+//
+// }
+//
+//
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/AimlessModeListenerAdapter.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/AimlessModeListenerAdapter.java
new file mode 100644
index 0000000000..beecd19d46
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/AimlessModeListenerAdapter.java
@@ -0,0 +1,48 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import com.amap.api.navi.AimlessModeListener;
+//import com.amap.api.navi.model.AMapNaviTrafficFacilityInfo;
+//import com.amap.api.navi.model.AimLessModeCongestionInfo;
+//import com.amap.api.navi.model.AimLessModeStat;
+//import com.mogo.map.impl.custom.utils.ObjectUtils;
+//import com.mogo.map.navi.MogoCongestionInfo;
+//import com.mogo.map.navi.MogoNaviListenerHandler;
+//import com.mogo.map.navi.MogoTraffic;
+//
+///**
+// * @author congtaowang
+// * @since 2020-01-16
+// *
+// * 巡航监听
+// */
+//public class AimlessModeListenerAdapter implements AimlessModeListener {
+//
+// @Override
+// public void onUpdateTrafficFacility( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
+// MogoTraffic traffic = ObjectUtils.fromAMap( aMapNaviTrafficFacilityInfos );
+// if ( traffic != null ) {
+// MogoNaviListenerHandler.getInstance().onUpdateTraffic2( traffic );
+// }
+// }
+//
+// @Override
+// public void onUpdateAimlessModeElecCameraInfo( AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
+// MogoTraffic traffic = ObjectUtils.fromAMap( aMapNaviTrafficFacilityInfos );
+// if ( traffic != null ) {
+// MogoNaviListenerHandler.getInstance().onUpdateTraffic2( traffic );
+// }
+// }
+//
+// @Override
+// public void updateAimlessModeStatistics( AimLessModeStat aimLessModeStat ) {
+//
+// }
+//
+// @Override
+// public void updateAimlessModeCongestionInfo( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
+// MogoCongestionInfo congestionInfo = ObjectUtils.fromAMap( aimLessModeCongestionInfo );
+// if ( congestionInfo != null ) {
+// MogoNaviListenerHandler.getInstance().onUpdateCongestion( congestionInfo );
+// }
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/CalculatePathItem.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/CalculatePathItem.java
new file mode 100644
index 0000000000..40a62e5d48
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/CalculatePathItem.java
@@ -0,0 +1,181 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import android.content.Context;
+//import android.text.TextUtils;
+//
+//import com.amap.api.maps.AMap;
+//import com.amap.api.navi.model.AMapNaviPath;
+//import com.amap.api.navi.model.AMapNaviStep;
+//import com.amap.api.navi.model.NaviLatLng;
+//import com.mogo.map.MogoLatLng;
+//import com.mogo.map.impl.custom.overlay.RouteOverLayWrapper;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+///**
+// * @author congtaowang
+// * @since 2019-12-04
+// *
+// * 导航路径代理类
+// */
+//public class CalculatePathItem {
+//
+// private Context mContext;
+// private AMap mAMap;
+// private int mId;
+// private AMapNaviPath mPath;
+//
+// private RouteOverLayWrapper mOverLazWrapper;
+// private ArrayList< MogoLatLng > mPoints;
+//
+// public int getId() {
+// return mId;
+// }
+//
+// public AMapNaviPath getPath() {
+// return mPath;
+// }
+//
+// public RouteOverLayWrapper getOverLazWrapper( boolean createIfNull ) {
+// if ( mOverLazWrapper == null && createIfNull ) {
+// mOverLazWrapper = new RouteOverLayWrapper( mContext, mAMap, mPath );
+// }
+// return mOverLazWrapper;
+// }
+//
+// public CalculatePathItem(Context context, AMap amap, int id, AMapNaviPath path ) {
+// mContext = context;
+// mAMap = amap;
+// this.mId = id;
+// this.mPath = path;
+// }
+//
+// public String getStrategyName() {
+// return mPath.getLabels();
+// }
+//
+// public String getFormattedTime() {
+// if ( mTimeBuilder == null ) {
+// final int time = mPath.getAllTime();
+// mTimeBuilder = new StringBuilder();
+// fillFormatTime( time, mTimeBuilder );
+// }
+// return mTimeBuilder.toString();
+// }
+//
+// public int getTime(){
+// return mPath.getAllTime();
+// }
+//
+// public int getDistance(){
+// return mPath.getAllLength();
+// }
+//
+// private StringBuilder mTimeBuilder;
+//
+// private void fillFormatTime( int seconds, StringBuilder builder ) {
+// // int days = seconds / ( 24 * 60 * 60 );
+// // if ( days > 0 ) {
+// // builder.append( days ).append( "天" );
+// // }
+// // seconds -= days * 24 * 60 * 60;
+// int hours = seconds / ( 60 * 60 );
+// if ( hours > 0 ) {
+// builder.append( hours ).append( "小时" );
+// }
+// seconds -= hours * 60 * 60;
+// int min = seconds / 60;
+// builder.append( min > 1 ? min : 1 ).append( "分钟" );
+// }
+//
+// private String mDistanceCacheStr = "";
+//
+// public String getFormattedDistance() {
+// if ( TextUtils.isEmpty( mDistanceCacheStr ) ) {
+// int distance = mPath.getAllLength();
+// if ( distance == -1 ) {
+// mDistanceCacheStr = "路程总程未获取";
+// }
+// if ( distance >= 1000 ) {
+// mDistanceCacheStr = String.format( "%.1f公里", ( float ) distance / 1000 );
+// } else {
+// mDistanceCacheStr = distance + "米";
+// }
+// }
+// return mDistanceCacheStr;
+// }
+//
+// private StringBuilder mDescBuilder = null;
+//
+// public String getDesc() {
+// if ( mDescBuilder == null ) {
+// mDescBuilder = new StringBuilder();
+// int lightsSize = getTrafficNumber();
+// if ( lightsSize > 0 ) {
+// mDescBuilder.append( "红绿灯" ).append( lightsSize ).append( "个" );
+// }
+// mDescBuilder.append( " " );
+// mDescBuilder.append( "收费" ).append( mPath.getTollCost() ).append( "元" );
+// }
+//
+// return mDescBuilder.toString();
+// }
+//
+// public int getTrafficNumber() {
+// int trafficLightNumber = 0;
+// if ( mPath == null ) {
+// return trafficLightNumber;
+// }
+// List steps = mPath.getSteps();
+// for ( AMapNaviStep step : steps ) {
+// trafficLightNumber += step.getTrafficLightNumber();
+// }
+// return trafficLightNumber;
+// }
+//
+// public void release() {
+// mContext = null;
+// mAMap = null;
+// mPath = null;
+// if ( mOverLazWrapper != null ) {
+// mOverLazWrapper.destroy();
+// }
+// mOverLazWrapper = null;
+// if ( mPoints != null ) {
+// mPoints.clear();
+// }
+// mPoints = null;
+// }
+//
+// public List< MogoLatLng > getCoordList() {
+// if ( mPoints == null ) {
+// mPoints = new ArrayList<>();
+// for ( NaviLatLng latlng : mPath.getCoordList() ) {
+// MogoLatLng mogoLatLng = new MogoLatLng( latlng.getLatitude(), latlng.getLongitude() );
+// mPoints.add( mogoLatLng );
+// }
+// }
+// return mPoints;
+// }
+//
+// public MogoLatLng getDriveStartPoint() {
+// if ( mPath != null && mPath.getCoordList() != null && mPath.getCoordList().size() > 0 ) {
+// NaviLatLng startPoint = mPath.getCoordList().get( 0 );
+// if ( startPoint != null ) {
+// return new MogoLatLng( startPoint.getLatitude(), startPoint.getLongitude() );
+// }
+// }
+// return null;
+// }
+//
+// public MogoLatLng getDriveEndPoint() {
+// if ( mPath != null && mPath.getCoordList() != null && mPath.getCoordList().size() > 0 ) {
+// NaviLatLng endPoint = mPath.getCoordList().get( mPath.getCoordList().size() - 1 );
+// if ( endPoint != null ) {
+// return new MogoLatLng( endPoint.getLatitude(), endPoint.getLongitude() );
+// }
+// }
+// return null;
+// }
+//}
\ No newline at end of file
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviClient.java
new file mode 100644
index 0000000000..b5ca09f758
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviClient.java
@@ -0,0 +1,364 @@
+package com.mogo.map.impl.custom.navi;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.location.Location;
+
+//import com.amap.api.maps.LocationSource;
+//import com.amap.api.maps.model.Polyline;
+//import com.amap.api.navi.AMapNavi;
+//import com.amap.api.navi.enums.AimLessMode;
+//import com.amap.api.navi.enums.NaviType;
+//import com.amap.api.navi.model.NaviLatLng;
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.impl.custom.AMapWrapper;
+import com.mogo.map.impl.custom.message.AMapMessageManager;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.navi.IMogoCarLocationChangedListener2;
+import com.mogo.map.navi.IMogoNavi;
+import com.mogo.map.navi.MogoCalculatePath;
+import com.mogo.map.navi.MogoCarLocationChangedListenerRegister;
+import com.mogo.map.navi.MogoNaviConfig;
+import com.mogo.map.navi.MogoNaviListenerHandler;
+import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.storage.SharedPrefsMgr;
+import com.zhidaoauto.map.sdk.open.poyline.Polyline;
+import com.zhidaoauto.map.sdk.open.view.MapAutoViewHelper;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-25
+ *
+ * 自研导航
+ */
+public class NaviClient implements IMogoNavi {
+
+ /**
+ * 巡航状态控制
+ */
+ public static final String KEY_AIMLESS_STATUS = "KEY_AIMLESS_STATUS";
+
+ private static final String TAG = "NaviClient";
+ private final Context mContext;
+
+ private MapAutoViewHelper mAMapNavi;
+// private final NaviListenerAdapter mAMapNaviListener;
+
+
+// private final AimlessModeListenerAdapter mAimlessModeListener;
+
+ /**
+ * 导航策略配置
+ */
+
+ private MogoNaviConfig mMogoNaviConfig = new MogoNaviConfig();
+
+ private static volatile NaviClient sInstance;
+ private boolean mIsRealNavi;
+
+ private Location mCarLocation = new Location("GPS");
+ /**
+ * 巡航模式配置状态
+ */
+ private boolean mAimlessModeStatus;
+
+ /**
+ * 巡航状态
+ */
+ private boolean mAimlessStatus;
+
+ private NaviClient( Context context ) {
+ mCarLocation.setLongitude(116.97000);
+ mCarLocation.setLatitude(39.97000);
+ mContext = context;
+ mAMapNavi = AMapWrapper.getAMap();
+// mAMapNavi.setEmulatorNaviSpeed( 120 );
+// mAMapNavi.setUseInnerVoice( false, true );
+// mAMapNaviListener = new NaviListenerAdapter( context, mAMapNavi, this );
+// mAimlessModeListener = new AimlessModeListenerAdapter() {
+// };
+// mAMapNavi.addAMapNaviListener( mAMapNaviListener );
+// mAMapNavi.addAimlessModeListener( mAimlessModeListener );
+// mAimlessModeStatus = SharedPrefsMgr.getInstance( mContext ).getBoolean( KEY_AIMLESS_STATUS, false );
+ }
+
+ public static NaviClient getInstance( Context context ) {
+ if ( sInstance == null ) {
+ synchronized ( NaviClient.class ) {
+ if ( sInstance == null ) {
+ sInstance = new NaviClient( context );
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ @Override
+ public void naviTo( MogoLatLng endPoint ) {
+ naviTo( endPoint, mMogoNaviConfig );
+ }
+
+ @Override
+ public void naviTo( MogoLatLng endPoint, MogoNaviConfig config ) {
+ naviTo( endPoint, null, config );
+ }
+
+ @Override
+ public void naviTo( MogoLatLng endPoint, List< MogoLatLng > wayPoints ) {
+ naviTo( endPoint, wayPoints, mMogoNaviConfig );
+ }
+
+ @Override
+ public void naviTo( MogoLatLng endPoint, List< MogoLatLng > wayPoints, MogoNaviConfig config ) {
+ if ( !checkAMapNavi() ) {
+ return;
+ }
+ Logger.i( TAG, "开始规划路径" );
+ mMogoNaviConfig = config;
+ if ( mMogoNaviConfig == null ) {
+ mMogoNaviConfig = new MogoNaviConfig();
+ }
+// int strategy = mAMapNavi.strategyConvert( mMogoNaviConfig.isCongestion(), mMogoNaviConfig.isAvoidSpeed(), mMogoNaviConfig.isCost(), mMogoNaviConfig.isHighSpeed(), config.isMultipleRoute() );
+// List< NaviLatLng > naviWayPoints = null;
+// if ( wayPoints != null && !wayPoints.isEmpty() ) {
+// naviWayPoints = new ArrayList<>( wayPoints.size() );
+// for ( MogoLatLng wayPoint : wayPoints ) {
+// naviWayPoints.add( ObjectUtils.fromMogoAsNavi( wayPoint ) );
+// }
+// } else {
+// naviWayPoints = new ArrayList<>();
+// }
+// mAMapNavi.calculateDriveRoute(
+// new ArrayList( Arrays.asList( ObjectUtils.fromMogoAsNavi( endPoint ) ) ),
+// naviWayPoints,
+// strategy
+// );
+ }
+
+ @Override
+ public void reCalculateRoute( MogoNaviConfig config ) {
+ if ( !checkAMapNavi() ) {
+ return;
+ }
+ mMogoNaviConfig = config;
+ if ( mMogoNaviConfig == null ) {
+ mMogoNaviConfig = new MogoNaviConfig();
+ }
+// int strategy = mAMapNavi.strategyConvert( mMogoNaviConfig.isCongestion(), mMogoNaviConfig.isAvoidSpeed(), mMogoNaviConfig.isCost(), mMogoNaviConfig.isHighSpeed(), config.isMultipleRoute() );
+// mAMapNavi.reCalculateRoute( strategy );
+ }
+
+ @Override
+ public void stopNavi() {
+// if ( mAMapNaviListener != null ) {
+// mAMapNaviListener.stopNavi();
+// }
+ }
+
+
+ @Override
+ public void startNavi( boolean isRealNavi ) {
+// if ( mAMapNaviListener.isStopped() ) {
+// return;
+// }
+// mIsRealNavi = isRealNavi;
+// stopAimlessMode();
+// boolean isNaving = isNaviing();
+// boolean result = mAMapNavi.startNavi( isRealNavi ? NaviType.GPS : NaviType.EMULATOR );
+// if ( isNaving && !result ) {
+// // 如果正在导航,又重新规划路线,startNavi 不会成功,不会重新回调 #onStartNavi
+// MogoNaviListenerHandler.getInstance().onStartNavi();
+// AMapMessageManager.getInstance().postNaviStarted();
+// }
+// Logger.d( TAG, "start navi status: %s", result );
+ }
+
+ @Override
+ public boolean isNaviing() {
+// if ( mAMapNaviListener != null ) {
+// return mAMapNaviListener.isNaviing();
+// }
+ return false;
+ }
+
+ @Override
+ public List< MogoCalculatePath > getCalculatedStrategies() {
+// if ( mAMapNaviListener != null ) {
+// return mAMapNaviListener.getCalculateStrategies();
+// }
+ return null;
+ }
+
+ @Override
+ public List< MogoLatLng > getCalculatedPathPos() {
+// if ( mAMapNaviListener != null ) {
+// return mAMapNaviListener.getCalculatedPathPos();
+// }
+ return null;
+ }
+
+ @Override
+ public OnCalculatePathItemClickInteraction getItemClickInteraction() {
+// if ( mAMapNaviListener != null ) {
+// return mAMapNaviListener.getItemClickInteraction();
+// }
+ return null;
+ }
+
+ @Override
+ public void setLineClickInteraction( OnCalculatePathItemClickInteraction lineClickInteraction ) {
+ // do not impl.
+ }
+
+ @Override
+ public void clearCalculatePaths() {
+// if ( mAMapNaviListener != null ) {
+// mAMapNaviListener.clearCalculatePaths();
+// }
+ }
+
+ @Override
+ public void setCalculatePathDisplayBounds( Rect bounds ) {
+// if ( mAMapNaviListener != null ) {
+// mAMapNaviListener.setCalculatePathDisplayBounds( bounds );
+// }
+ }
+
+ @Override
+ public MogoNaviConfig getNaviConfig() {
+ return mMogoNaviConfig;
+ }
+
+ @Override
+ public boolean setBroadcastMode( int mode ) {
+ return false;//mAMapNavi.setBroadcastMode( mode );
+ }
+
+ @Override
+ public List< MogoLatLng > getNaviPathCoordinates() {
+ return null;
+ }
+
+ @Override
+ public MogoLatLng getCarLocation() {
+ if ( mCarLocation != null ) {
+ synchronized ( mCarLocation ) {
+ return new MogoLatLng( mCarLocation.getLatitude(), mCarLocation.getLongitude() );
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Location getCarLocation2() {
+ return mCarLocation;
+ }
+
+ @Override
+ public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
+ // do not impl.
+ }
+
+ // -- end
+
+ public void syncCarLocation( Location location ) {
+ mCarLocation = location;
+ if ( MogoCarLocationChangedListenerRegister.getInstance().getListener() != null ) {
+ MogoCarLocationChangedListenerRegister.getInstance().getListener().onCarLocationChanged2( location );
+ }
+ }
+
+ private boolean checkAMapNavi() {
+ mAMapNavi = AMapWrapper.getAMap();
+ if ( mAMapNavi == null ) {
+ Logger.e( TAG, "自研导航实例为空!!!" );
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isRealNavi() {
+ return mIsRealNavi;
+ }
+
+ public void handleClickedPolyline( Polyline polyline ) {
+// if ( mAMapNaviListener != null ) {
+// mAMapNaviListener.handleClickedPolyline( polyline );
+// }
+ }
+
+ @Override
+ public void startAimlessMode() {
+// if ( mAimlessModeStatus && !isNaviing() ) {
+// mAMapNavi.startAimlessMode( AimLessMode.CAMERA_AND_SPECIALROAD_DETECTED );
+// mAimlessStatus = true;
+// Logger.d( TAG, "开启巡航成功" );
+// } else {
+// mAimlessStatus = false;
+// Logger.d( TAG, "开启巡航失败" );
+// }
+ }
+
+ @Override
+ public void stopAimlessMode() {
+// mAMapNavi.stopAimlessMode();
+// mAimlessStatus = false;
+// Logger.d( TAG, "关闭巡航成功" );
+ }
+
+ @Override
+ public void setAimlessModeStatus( boolean open ) {
+ this.mAimlessModeStatus = open;
+ SharedPrefsMgr.getInstance( mContext ).putBoolean( KEY_AIMLESS_STATUS, open );
+ if ( open ) {
+ if ( !mAimlessStatus ) {
+ startAimlessMode();
+ }
+ } else {
+ if ( mAimlessStatus ) {
+ stopAimlessMode();
+ }
+ }
+ }
+
+ @Override
+ public void displayOverview( Rect bounds ) {
+// if ( mAMapNaviListener != null ) {
+// mAMapNaviListener.displayOverview( bounds );
+// }
+ }
+
+ @Override
+ public void setUseExtraGPSData( boolean use ) {
+ Logger.d( TAG, "设置外部gps源状态 %s", use );
+ mAMapNavi.setIsUseExtraGPSData( use );
+ AMapWrapper.getAMap().setMyLocationEnabled( true );
+ }
+
+ @Override
+ public void setExtraGPSData( double lon, double lat, float speed, float accuracy, float bearing, long timestamp ) {
+ if ( !mAMapNavi.getIsUseExtraGPSData() ) {
+ Logger.d( TAG, "拒绝外部GPS数据" );
+ return;
+ }
+ Location location = new Location( "外部GPS源" );
+ location.setLongitude( lon );
+ location.setLatitude( lat );
+ location.setSpeed( speed );
+ location.setAccuracy( accuracy );
+ location.setBearing( bearing );
+ location.setTime( timestamp );
+ //type字段传1时代表WGS84坐标
+ mAMapNavi.setExtraGPSData( 2, location );
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviListenerAdapter.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviListenerAdapter.java
new file mode 100644
index 0000000000..fee1514b3a
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviListenerAdapter.java
@@ -0,0 +1,296 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import android.content.Context;
+//import android.graphics.Rect;
+//import android.os.Trace;
+//import android.text.TextUtils;
+//
+//import com.amap.api.maps.model.Polyline;
+//import com.amap.api.navi.AMapNavi;
+//import com.amap.api.navi.enums.CameraType;
+//import com.amap.api.navi.enums.NaviType;
+//import com.amap.api.navi.model.AMapCalcRouteResult;
+//import com.amap.api.navi.model.AMapNaviCameraInfo;
+//import com.amap.api.navi.model.AMapNaviLocation;
+//import com.amap.api.navi.model.NaviInfo;
+//import com.mogo.commons.voice.AIAssist;
+//import com.mogo.map.MogoLatLng;
+//import com.mogo.map.impl.custom.message.AMapMessageManager;
+//import com.mogo.map.impl.custom.utils.ObjectUtils;
+//import com.mogo.map.navi.MogoCalculatePath;
+//import com.mogo.map.navi.MogoNaviListenerHandler;
+//import com.mogo.map.navi.MogoTraffic;
+//import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
+//import com.mogo.utils.UiThreadHandler;
+//import com.mogo.utils.logger.Logger;
+//
+//import java.util.List;
+//
+///**
+// * @author congtaowang
+// * @since 2019-12-25
+// *
+// * 自研导航回调
+// */
+//public class NaviListenerAdapter extends AMapNaviListenerAdapter {
+//
+// private static final String TAG = "NaviListenerAdapter";
+//
+// private Context mContext;
+// private AMapNavi mAMapNavi;
+// private NaviClient mClient;
+// /**
+// * 导航状态:true - 导航 onStartNavi(int) 被调用, false - 到达目的地、手动挺固执
+// */
+// private boolean mIsNaviing = false;
+//
+// /**
+// * 导航是否被停止:true - 手动停止或到达目的地、false - 规划路径成功、开启导航
+// */
+// private boolean mIsStopped = true;
+//
+// /**
+// * 路线规划
+// */
+// private NaviOverlayHelper mNaviOverlayHelper;
+//
+// public NaviListenerAdapter( Context mContext, AMapNavi mAMapNavi, NaviClient client ) {
+// this.mContext = mContext;
+// this.mAMapNavi = mAMapNavi;
+// this.mClient = client;
+//// mNaviOverlayHelper = new NaviOverlayHelper( mAMapNavi, AMapWrapper.getAMap(), mContext );
+// }
+//
+// public void setNaviing( boolean mIsNaviing ) {
+// this.mIsNaviing = mIsNaviing;
+// }
+//
+// public boolean isNaviing() {
+// return mIsNaviing;
+// }
+//
+// public void setStopped( boolean isStopped ) {
+// this.mIsStopped = isStopped;
+// }
+//
+// public boolean isStopped() {
+// return mIsStopped;
+// }
+//
+// public Context getContext() {
+// return mContext;
+// }
+//
+// @Override
+// public void onInitNaviFailure() {
+// MogoNaviListenerHandler.getInstance().onInitNaviFailure();
+// }
+//
+// @Override
+// public void onInitNaviSuccess() {
+// MogoNaviListenerHandler.getInstance().onInitNaviSuccess();
+// NaviClient.getInstance( mContext ).startAimlessMode();
+// }
+//
+// @Override
+// public void updateCameraInfo( AMapNaviCameraInfo[] aMapNaviCameraInfos ) {
+// super.updateCameraInfo( aMapNaviCameraInfos );
+// if ( aMapNaviCameraInfos == null || aMapNaviCameraInfos.length == 0 ) {
+// return;
+// }
+// int limitSpeed = 0;
+// for ( AMapNaviCameraInfo aMapNaviCameraInfo : aMapNaviCameraInfos ) {
+// if ( aMapNaviCameraInfo == null ) {
+// continue;
+// }
+// limitSpeed = aMapNaviCameraInfo.getCameraSpeed();
+// if ( limitSpeed > 0 && aMapNaviCameraInfo.getCameraType() == CameraType.SPEED ) {
+// MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
+// traffic.setDistance( aMapNaviCameraInfo.getCameraDistance() );
+// traffic.setSpeedLimit( aMapNaviCameraInfo.getCameraSpeed() );
+// MogoNaviListenerHandler.getInstance().onUpdateTraffic2( traffic );
+// }
+//
+//// switch ( aMapNaviCameraInfo.getCameraType() ) {
+//// case CameraType.SPEED:
+////
+//// break;
+//// case CameraType.SURVEILLANCE:
+//// traffic.setDesc( "监控摄像" );
+//// break;
+//// case CameraType.TRAFFICLIGHT:
+//// traffic.setDesc( "闯红灯拍照" );
+//// break;
+//// case CameraType.BREAKRULE:
+//// traffic.setDesc( "违章拍照" );
+//// break;
+//// case CameraType.BUSWAY:
+//// traffic.setDesc( "公交专用道摄像头" );
+//// break;
+//// case CameraType.EMERGENCY:
+//// traffic.setDesc( "应急车道拍照" );
+//// break;
+//// case CameraType.BICYCLE:
+//// traffic.setDesc( "非机动车道" );
+//// break;
+//// case CameraType.INTERVALVELOCITYSTART:
+//// traffic.setDesc( "区间测速起始" );
+//// break;
+//// case CameraType.INTERVALVELOCITYEND:
+//// traffic.setDesc( "区间测速解除" );
+//// break;
+//// }
+// }
+// if ( limitSpeed <= 0 ) {
+// MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_NAVI );
+// traffic.setDistance( 0 );
+// traffic.setSpeedLimit( 0 );
+// MogoNaviListenerHandler.getInstance().onUpdateTraffic2( traffic );
+// }
+// }
+//
+// @Override
+// public void onStartNavi( int type ) {
+//
+// Logger.d( TAG, "onStartNavi type = %s", type );
+// // 巡航
+// if ( type != NaviType.CRUISE ) {
+// setStopped( false );
+// setNaviing( true );
+// MogoNaviListenerHandler.getInstance().onStartNavi();
+// AMapMessageManager.getInstance().postNaviStarted();
+// }
+// }
+//
+// @Override
+// public void onEndEmulatorNavi() {
+// stopNaviDelay( () -> {
+// MogoNaviListenerHandler.getInstance().onEndEmulatorNavi();
+// } );
+// }
+//
+// @Override
+// public void onArriveDestination() {
+// stopNaviDelay( () -> {
+// MogoNaviListenerHandler.getInstance().onArriveDestination();
+// } );
+// }
+//
+// /**
+// * 避免导航结束语音播报被立刻打断的情况
+// *
+// * @param after 停止后的行为
+// */
+// private void stopNaviDelay( Runnable after ) {
+// UiThreadHandler.postDelayed( () -> {
+// if ( TextUtils.isEmpty( mLastSpeakWord ) || !mLastSpeakWord.contains( "结束" ) ) {
+// AIAssist.getInstance( mContext ).speakTTSVoice( "到达目的地附近,本次导航结束" );
+// }
+// mLastSpeakWord = "";
+// stopNavi();
+// if ( after != null ) {
+// after.run();
+// }
+// }, 5_000L );
+// }
+//
+// @Override
+// public void onNaviInfoUpdate( NaviInfo naviInfo ) {
+// Trace.beginSection( "NaviListenerAdapter.onNaviInfoUpdate" );
+// MogoNaviListenerHandler.getInstance().onNaviInfoUpdate( ObjectUtils.fromAMap( mContext, naviInfo ) );
+// mNaviOverlayHelper.handleNaviInfoUpdate( naviInfo );
+// Trace.endSection();
+// }
+//
+// @Override
+// public void onCalculateRouteFailure( AMapCalcRouteResult aMapCalcRouteResult ) {
+// if ( aMapCalcRouteResult != null ) {
+// Logger.i( TAG, PathPlanningErrorCodeConstants.getErrorMsg( aMapCalcRouteResult.getErrorCode() ) );
+// }
+// MogoNaviListenerHandler.getInstance().onoCalculateFailed();
+// }
+//
+// @Override
+// public void onCalculateRouteSuccess( AMapCalcRouteResult aMapCalcRouteResult ) {
+// super.onCalculateRouteSuccess( aMapCalcRouteResult );
+// Logger.i( TAG, "导航规划成功" );
+// setStopped( false );
+// mNaviOverlayHelper.showCalculatedPaths( () -> {
+// AMapMessageManager.getInstance().postCalculateSuccess();
+// MogoNaviListenerHandler.getInstance().onCalculateSuccess();
+// } );
+// }
+//
+// @Override
+// public void onLocationChange( AMapNaviLocation aMapNaviLocation ) {
+// Trace.beginSection( "NaviListenerAdapter.onLocationChange" );
+// super.onLocationChange( aMapNaviLocation );
+//// mNaviOverlayHelper.handlePassedLocation( aMapNaviLocation );
+// Trace.endSection();
+// }
+//
+// public void stopNavi() {
+// TTSSpeaker.getInstance().shutUp();
+// mNaviOverlayHelper.clearCalculatedOverlay();
+// setStopped( true );
+// setNaviing( false );
+// mAMapNavi.stopNavi();
+// MogoNaviListenerHandler.getInstance().onStopNavi();
+// AMapMessageManager.getInstance().postNaviStopped();
+// }
+//
+// public void handleClickedPolyline( Polyline polyline ) {
+// if ( mNaviOverlayHelper != null ) {
+//
+// mNaviOverlayHelper.handleClickedPolyline( polyline, isNaviing() );
+// mAMapNavi.selectRouteId( mNaviOverlayHelper.getSelectedPathId() );
+// mNaviOverlayHelper.showBoundsWithSettingBounds();
+// }
+// }
+//
+// public List< MogoCalculatePath > getCalculateStrategies() {
+// if ( mNaviOverlayHelper != null ) {
+// return mNaviOverlayHelper.getCalculateStrategies();
+// }
+// return null;
+// }
+//
+// public List< MogoLatLng > getCalculatedPathPos() {
+// if ( mNaviOverlayHelper != null ) {
+// return mNaviOverlayHelper.getCalculatedPathPos();
+// }
+// return null;
+// }
+//
+//
+// public OnCalculatePathItemClickInteraction getItemClickInteraction() {
+// if ( mNaviOverlayHelper != null ) {
+// return mNaviOverlayHelper.getItemClickInteraction();
+// }
+// return null;
+// }
+//
+// public void setLineClickInteraction( OnCalculatePathItemClickInteraction lineClickInteraction ) {
+// if ( mNaviOverlayHelper != null ) {
+// mNaviOverlayHelper.setLineClickInteraction( lineClickInteraction );
+// }
+// }
+//
+// public void clearCalculatePaths() {
+// if ( mNaviOverlayHelper != null ) {
+// mNaviOverlayHelper.clearCalculatedOverlay();
+// }
+// }
+//
+// public void setCalculatePathDisplayBounds( Rect bounds ) {
+// if ( mNaviOverlayHelper != null ) {
+// mNaviOverlayHelper.setCalculatePathDisplayBounds( bounds );
+// }
+// }
+//
+// public void displayOverview( Rect bounds ) {
+// if ( mNaviOverlayHelper != null ) {
+// mNaviOverlayHelper.displayOverview( bounds );
+// }
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviOverlayHelper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviOverlayHelper.java
new file mode 100644
index 0000000000..4dbebe02b1
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/NaviOverlayHelper.java
@@ -0,0 +1,461 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import android.content.Context;
+//import android.graphics.Bitmap;
+//import android.graphics.BitmapFactory;
+//import android.graphics.Rect;
+//import android.text.TextUtils;
+//
+//import com.amap.api.maps.AMap;
+//import com.amap.api.maps.CameraUpdateFactory;
+//import com.amap.api.maps.model.BitmapDescriptorFactory;
+//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.navi.AMapNavi;
+//import com.amap.api.navi.model.AMapNaviLocation;
+//import com.amap.api.navi.model.AMapNaviPath;
+//import com.amap.api.navi.model.NaviInfo;
+//import com.amap.api.navi.model.NaviLatLng;
+//import com.mogo.map.MogoLatLng;
+//import com.mogo.map.impl.custom.R;
+//import com.mogo.map.impl.custom.overlay.RouteOverLayWrapper;
+//import com.mogo.map.marker.MogoMarkersHandler;
+//import com.mogo.map.navi.MogoCalculatePath;
+//import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
+//import com.mogo.utils.WindowUtils;
+//import com.mogo.utils.logger.Logger;
+//
+//import java.util.ArrayList;
+//import java.util.Comparator;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.TreeMap;
+//
+///**
+// * @author congtaowang
+// * @since 2019-12-27
+// *
+// * 导航路径管理
+// */
+//public class NaviOverlayHelper implements OnCalculatePathItemClickInteraction {
+//
+// private static final String TAG = "NaviOverlayHelper";
+//
+// /**
+// * 选中的路径透明度
+// */
+// public static final float AMAP_ROUTE_OVERLAY_TRANSPARENCY_SELECTED = 1f;
+//
+// /**
+// * 未选中的路径透明度
+// */
+// public static final float AMAP_ROUTE_OVERLAY_TRANSPARENCY_UNSELECTED = 0.3f;
+//
+// private AMapNavi mAMapNavi;
+// private AMap mAMap;
+// private Context mContext;
+// // 规划的路线显示边距
+// private Rect mBoundRect = null;
+//
+// private List< CalculatePathItem > mCalculatePathItems;
+// private List< MogoCalculatePath > mPaths = new ArrayList<>();
+//
+// private int mSelectedPathId;
+// private CalculatePathItem mSelectedCalculatePathItem;
+// private OnCalculatePathItemClickInteraction mLineClickInteraction;
+//
+// /**
+// * 起点终点marker
+// */
+// private List< Marker > mMarkers = new ArrayList<>();
+//
+// public NaviOverlayHelper( AMapNavi mAMapNavi, AMap mAMap, Context mContext ) {
+// this.mAMapNavi = mAMapNavi;
+// this.mAMap = mAMap;
+// this.mContext = mContext;
+// calculateBoundArea();
+// }
+//
+// /**
+// * 显示规划的路径
+// */
+// public void showCalculatedPaths( Runnable after ) {
+// clearCalculatedOverlay();
+// mCalculatePathItems = getSortedPaths();
+// if ( mCalculatePathItems == null || mCalculatePathItems.isEmpty() ) {
+// return;
+// }
+// showPathsBound( getBounds(), () -> {
+// addEndPoints();
+// renderPathOverlay( mCalculatePathItems );
+// if ( after != null ) {
+// after.run();
+// }
+// }, mBoundRect );
+// }
+//
+// private LatLngBounds getBounds() {
+// if ( mCalculatePathItems == null ) {
+// return null;
+// }
+// LatLngBounds.Builder builder = new LatLngBounds.Builder();
+// for ( CalculatePathItem calculatePathItem : mCalculatePathItems ) {
+// if ( calculatePathItem == null ) {
+// continue;
+// }
+// try {
+// LatLngBounds bounds = calculatePathItem.getPath().getBoundsForPath();
+// builder.include( bounds.northeast );
+// builder.include( bounds.southwest );
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// }
+// return builder.build();
+// }
+//
+// /**
+// * 按pathId升序排序
+// *
+// * @return 排序好的路径规划列表
+// */
+// private List< CalculatePathItem > getSortedPaths() {
+// checkAMapInstance();
+// final Map< Integer, AMapNaviPath > pathMap = mAMapNavi.getNaviPaths();
+// if ( pathMap == null || pathMap.isEmpty() ) {
+// return null;
+// }
+// TreeMap< Integer, AMapNaviPath > sortedMap =
+// new TreeMap< Integer, AMapNaviPath >( new Comparator< Integer >() {
+// @Override
+// public int compare( Integer obj1, Integer obj2 ) {
+// if ( obj1 != null ) {
+// return obj1.compareTo( obj2 );
+// }
+// if ( obj2 != null ) {
+// return obj2.compareTo( obj1 );
+// }
+// return 0;
+// }
+// } );
+// sortedMap.putAll( pathMap );
+//
+// final List< CalculatePathItem > items = new ArrayList<>();
+// for ( Map.Entry< Integer, AMapNaviPath > entry : sortedMap.entrySet() ) {
+// if ( entry == null || entry.getKey() == null || entry.getValue() == null ) {
+// continue;
+// }
+// items.add( new CalculatePathItem( mContext, mAMap, entry.getKey(), entry.getValue() ) );
+// }
+// return items;
+// }
+//
+// private void calculateBoundArea() {
+// if ( mBoundRect == null ) {
+// mBoundRect = new Rect();
+// final int padding = WindowUtils.dip2px( mContext, 80 );
+// mBoundRect.left = padding;
+// mBoundRect.right = padding;
+// mBoundRect.top = padding;
+// mBoundRect.bottom = padding;
+// }
+// }
+//
+// public void showBoundsWithSettingBounds() {
+// showBounds( mBoundRect );
+// }
+//
+// public void showBounds( Rect bounds ) {
+// Logger.d( TAG, "showBounds" );
+// showPathsBound( getBounds(), null, bounds );
+// }
+//
+// /**
+// * 将规划好的路径显示在视野内
+// */
+// private void showPathsBound( LatLngBounds bounds, Runnable after, Rect rect ) {
+// if ( bounds == null ) {
+// return;
+// }
+// if ( rect == null ) {
+// rect = new Rect();
+// }
+// checkAMapInstance();
+// mAMap.moveCamera( CameraUpdateFactory.newLatLngBoundsRect(
+// bounds,
+// rect.left,
+// rect.right,
+// rect.top,
+// rect.bottom ) );
+// if ( after != null ) {
+// after.run();
+// }
+// }
+//
+// private void checkAMapInstance() {
+// if ( mAMap == null ) {
+//// mAMap = AMapWrapper.getAMap();
+// }
+// }
+//
+// public void renderPathOverlay( List< CalculatePathItem > paths ) {
+// if ( paths == null || paths.size() == 0 ) {
+// return;
+// }
+// for ( int i = 0; i < paths.size(); i++ ) {
+// final CalculatePathItem item = paths.get( i );
+// if ( item == null || item.getPath() == null ) {
+// continue;
+// }
+// RouteOverLayWrapper wrapper = item.getOverLazWrapper( true );
+// wrapper.setTrafficLightsVisible( false );
+// // 默认选中第一个
+// if ( i == 0 ) {
+// mSelectedPathId = item.getId();
+// mSelectedCalculatePathItem = item;
+// //wrapper.setStartBitmap( R.drawable.ic_navi_start )
+// // .setEndBitmap( R.drawable.ic_navi_target );
+// mAMapNavi.selectRouteId( item.getId() );
+// Logger.d( TAG, "renderPathOverlay set default path" );
+// }
+// wrapper.addToMap();
+// wrapper.setTransparency( i == 0 ? AMAP_ROUTE_OVERLAY_TRANSPARENCY_SELECTED : AMAP_ROUTE_OVERLAY_TRANSPARENCY_UNSELECTED );
+// }
+// }
+//
+// public void addEndPoints() {
+// if ( mCalculatePathItems == null || mCalculatePathItems.isEmpty() ) {
+// return;
+// }
+//
+// Bitmap bitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.ic_endpoint );
+// Bitmap startBitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.ic_navi_start );
+// Bitmap endBitmap = BitmapFactory.decodeResource( mContext.getResources(), R.drawable.ic_navi_target );
+// MarkerOptions options = new MarkerOptions().icon( BitmapDescriptorFactory.fromBitmap( bitmap ) ).zIndex( 0 ).anchor( 0.5f, 0.5f );
+// MarkerOptions startOptions = new MarkerOptions().icon( BitmapDescriptorFactory.fromBitmap( startBitmap ) ).zIndex( 0 ).anchor( 0.5f, 1 );
+// MarkerOptions endOptions = new MarkerOptions().icon( BitmapDescriptorFactory.fromBitmap( endBitmap ) ).zIndex( 0 ).anchor( 0.5f, 1 );
+// for ( CalculatePathItem path : mCalculatePathItems ) {
+// List< MogoLatLng > points = path.getCoordList();
+// if ( points == null || points.isEmpty() ) {
+// continue;
+// }
+// MogoLatLng startPoint = path.getDriveStartPoint();
+// MogoLatLng endPoint = path.getDriveEndPoint();
+// if ( startPoint == null || endPoint == null ) {
+// continue;
+// }
+// mMarkers.add( mAMap.addMarker( options.position( new LatLng( startPoint.lat, startPoint.lng ) ) ) );
+// mMarkers.add( mAMap.addMarker( options.position( new LatLng( endPoint.lat, endPoint.lng ) ) ) );
+// mMarkers.add( mAMap.addMarker( startOptions.position( new LatLng( startPoint.lat, startPoint.lng ) ) ) );
+// mMarkers.add( mAMap.addMarker( endOptions.position( new LatLng( endPoint.lat, endPoint.lng ) ) ) );
+//
+// break;
+// }
+// }
+//
+// public void clearCalculatedOverlay() {
+// if ( mCalculatePathItems != null && !mCalculatePathItems.isEmpty() ) {
+// for ( CalculatePathItem calculatePathItem : mCalculatePathItems ) {
+// if ( calculatePathItem == null ) {
+// continue;
+// }
+// RouteOverLayWrapper wrapper = calculatePathItem.getOverLazWrapper( false );
+// if ( wrapper != null ) {
+// wrapper.destroy();
+// }
+// calculatePathItem.release();
+// }
+// mCalculatePathItems.clear();
+// }
+// if ( mPaths != null ) {
+// mPaths.clear();
+// }
+// if ( !mMarkers.isEmpty() ) {
+// for ( Marker mMarker : mMarkers ) {
+// if ( mMarker == null ) {
+// continue;
+// }
+// try {
+// mMarker.remove();
+// mMarker.destroy();
+// } catch ( Exception e ) {
+//
+// }
+// }
+// }
+// MogoMarkersHandler.getInstance().remove( TAG );
+// }
+//
+// /**
+// * 是否切换成功
+// *
+// * @param polyline 选中的线
+// */
+// public boolean handleClickedPolyline( Polyline polyline, boolean isNaviing ) {
+// if ( polyline == null ) {
+// return false;
+// }
+// if ( mPaths != null && !mPaths.isEmpty() ) {
+// for ( MogoCalculatePath path : mPaths ) {
+// if ( TextUtils.equals( path.getTagId(), polyline.getId() ) ) {
+// if ( mLineClickInteraction != null ) {
+// mLineClickInteraction.onItemClicked( path.getTagId() );
+// break;
+// }
+// }
+// }
+// }
+// return handleClickedPolyline( polyline.getId() );
+// }
+//
+// private boolean handleClickedPolyline( String id ) {
+// if ( id == null ) {
+// return false;
+// }
+// Logger.i( TAG, "polyline id = " + id );
+// mSelectedCalculatePathItem = isCalculatePolyline( id );
+// if ( mSelectedCalculatePathItem == null ) {
+// return false;
+// }
+// mSelectedPathId = mSelectedCalculatePathItem.getId();
+// if ( mCalculatePathItems != null ) {
+// for ( CalculatePathItem item : mCalculatePathItems ) {
+// final RouteOverLayWrapper wrapper = item.getOverLazWrapper( false );
+// if ( wrapper == null ) {
+// continue;
+// }
+// wrapper.setTransparency(
+// item == mSelectedCalculatePathItem
+// ? AMAP_ROUTE_OVERLAY_TRANSPARENCY_SELECTED
+// : AMAP_ROUTE_OVERLAY_TRANSPARENCY_UNSELECTED
+// );
+// }
+// }
+// return true;
+// }
+//
+// private CalculatePathItem isCalculatePolyline( String id ) {
+// CalculatePathItem result = null;
+// if ( mCalculatePathItems == null || mCalculatePathItems.isEmpty() ) {
+// return result;
+// }
+// for ( CalculatePathItem calculatePathItem : mCalculatePathItems ) {
+// if ( calculatePathItem == null ) {
+// continue;
+// }
+// final RouteOverLayWrapper wrapper = calculatePathItem.getOverLazWrapper( false );
+// if ( wrapper == null ) {
+// continue;
+// }
+// if ( wrapper.getTrafficColorfulPolyline() == null ) {
+// continue;
+// }
+// if ( TextUtils.equals( wrapper.getTrafficColorfulPolyline().getId(), id ) ) {
+// result = calculatePathItem;
+// }
+// }
+// return result;
+// }
+//
+// public int getSelectedPathId() {
+// return mSelectedPathId;
+// }
+//
+// /**
+// * 车辆拐弯时绘制转向箭头
+// */
+// public void handleNaviInfoUpdate( NaviInfo naviInfo ) {
+// if ( mSelectedCalculatePathItem != null ) {
+// RouteOverLayWrapper wrapper = mSelectedCalculatePathItem.getOverLazWrapper( false );
+// if ( wrapper != null ) {
+// wrapper.drawArrow( naviInfo );
+// }
+// }
+// }
+//
+// public void handlePassedLocation( AMapNaviLocation location ) {
+// if ( mSelectedCalculatePathItem != null ) {
+// RouteOverLayWrapper wrapper = mSelectedCalculatePathItem.getOverLazWrapper( false );
+// if ( wrapper != null ) {
+// wrapper.updatePolyline( location );
+// }
+// }
+// }
+//
+// public List< MogoCalculatePath > getCalculateStrategies() {
+// if ( mCalculatePathItems != null && !mCalculatePathItems.isEmpty() ) {
+// for ( CalculatePathItem calculatePathItem : mCalculatePathItems ) {
+// MogoCalculatePath path = new MogoCalculatePath();
+// path.setFormattedDistance( calculatePathItem.getFormattedDistance() );
+// path.setPathId( calculatePathItem.getId() );
+// path.setStrategyName( calculatePathItem.getStrategyName() );
+// path.setFormattedTime( calculatePathItem.getFormattedTime() );
+// path.setTime( calculatePathItem.getTime() );
+// path.setDistance( calculatePathItem.getDistance() );
+// List< NaviLatLng > coordList = calculatePathItem.getPath().getCoordList();
+// ArrayList< MogoLatLng > mogoLatLngs = new ArrayList<>();
+// for ( NaviLatLng latlng : coordList
+// ) {
+// MogoLatLng mogoLatLng =
+// new MogoLatLng( latlng.getLatitude(), latlng.getLongitude() );
+// mogoLatLngs.add( mogoLatLng );
+// }
+// path.setCoordList( mogoLatLngs );
+// path.setTrafficLights( calculatePathItem.getTrafficNumber() );
+// mPaths.add( path );
+// final RouteOverLayWrapper wrapper = calculatePathItem.getOverLazWrapper( true );
+// if ( wrapper == null ) {
+// continue;
+// }
+// if ( wrapper.getTrafficColorfulPolyline() == null ) {
+// continue;
+// }
+// path.setTagId( wrapper.getTrafficColorfulPolyline().getId() );
+// }
+// }
+//
+// return mPaths;
+// }
+//
+// public List< MogoLatLng > getCalculatedPathPos() {
+//
+// if ( mSelectedCalculatePathItem != null ) {
+// return mSelectedCalculatePathItem.getCoordList();
+// }
+// //if (mPaths != null && !mPaths.isEmpty()) {
+// // return mPaths.get(0).getCoordList();
+// //}
+// return null;
+// }
+//
+// @Override
+// public void onItemClicked( String tagId ) {
+// handleClickedPolyline( tagId );
+// mAMapNavi.selectRouteId( getSelectedPathId() );
+// showBounds( mBoundRect );
+// }
+//
+// public OnCalculatePathItemClickInteraction getItemClickInteraction() {
+// return this;
+// }
+//
+// public void setLineClickInteraction( OnCalculatePathItemClickInteraction lineClickInteraction ) {
+// mLineClickInteraction = lineClickInteraction;
+// }
+//
+// public void setCalculatePathDisplayBounds( Rect bounds ) {
+// if ( bounds != null ) {
+// mBoundRect = bounds;
+// }
+// }
+//
+// /**
+// * 展示全程
+// */
+// public void displayOverview( Rect bounds ) {
+// showBounds( bounds );
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/PathPlanningErrorCodeConstants.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/PathPlanningErrorCodeConstants.java
new file mode 100644
index 0000000000..12298a2737
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/PathPlanningErrorCodeConstants.java
@@ -0,0 +1,92 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import com.amap.api.navi.enums.PathPlanningErrCode;
+//
+///**
+// * @author congtaowang
+// * @since 2019-10-18
+// *
+// * 描述
+// */
+//public enum PathPlanningErrorCodeConstants {
+//
+// NONE( -1, "路线规划错误,请重试" ),
+//
+// ACCESS_TOO_FREQUENT( PathPlanningErrCode.ACCESS_TOO_FREQUENT, "访问过于频繁,请稍后再试" ),
+//
+// DISABLE_RESTRICT( PathPlanningErrCode.DISABLE_RESTRICT, "无法躲避限行区域,请重新规划" ),
+//
+// ERROR_BUF( PathPlanningErrCode.ERROR_BUF, "Buf数据格式错误" ),
+//
+// ERROR_CONNECTION( PathPlanningErrCode.ERROR_CONNECTION, "网络超时或网络失败。" ),
+//
+// ERROR_DISTANCE( PathPlanningErrCode.ERROR_DISTANCE, "起点/终点/途经点的距离太长(步行距离>100km,骑行距离>1200km)" ),
+//
+// ERROR_ENCODER( PathPlanningErrCode.ERROR_ENCODER, "算路服务端编码失败" ),
+//
+// ERROR_ENDPOINT( PathPlanningErrCode.ERROR_ENDPOINT, "终点错误" ),
+//
+// ERROR_NAVI_PARAMS( PathPlanningErrCode.ERROR_NAVI_PARAMS, "调用直接导航 没有算路 参数错误,缺失有效的导航路径,无法开始导航" ),
+//
+// ERROR_NOROADFORENDPOINT( PathPlanningErrCode.ERROR_NOROADFORENDPOINT, "终点没有找到道路" ),
+//
+// ERROR_NOROADFORSTARTPOINT( PathPlanningErrCode.ERROR_NOROADFORSTARTPOINT, "起点没有找到道路。" ),
+//
+// ERROR_NOROADFORWAYPOINT( PathPlanningErrCode.ERROR_NOROADFORWAYPOINT, "途径点没有找到道路" ),
+//
+// ERROR_PREVIEW( PathPlanningErrCode.ERROR_PREVIEW, "路径数据缺乏预览数据" ),
+//
+// ERROR_PROTOCOL( PathPlanningErrCode.ERROR_PROTOCOL, "请求协议非法。" ),
+//
+// ERROR_STARTPOINT( PathPlanningErrCode.ERROR_STARTPOINT, "起点错误" ),
+//
+// ERROR_WAYPOINT( PathPlanningErrCode.ERROR_WAYPOINT, "途经点错误" ),
+//
+// INSUFFICIENT_PRIVILEGES( PathPlanningErrCode.INSUFFICIENT_PRIVILEGES, "无权限访问此服务。" ),
+//
+// INVALID_PARAMS( PathPlanningErrCode.INVALID_PARAMS, "请求参数非法。" ),
+//
+// INVALID_USER_KEY( PathPlanningErrCode.INVALID_USER_KEY, "用户key非法或过期(请检查key是否正确)" ),
+//
+// INVALID_USER_SCODE( PathPlanningErrCode.INVALID_USER_SCODE, "MD5安全码未通过验证,需要开发者判定key绑定的SHA1,package是否与sdk包里的一致." ),
+//
+// OUT_OF_SERVICE( PathPlanningErrCode.OUT_OF_SERVICE, "使用路径规划服务接口时可能出现该问题,规划点(包括起点、终点、途经点)不在中国陆地范围内" ),
+//
+// OVER_DIRECTION_RANGE( PathPlanningErrCode.OVER_DIRECTION_RANGE, "使用路径规划服务接口时可能出现该问题,路线计算失败,通常是由于道路起点和终点距离过长导致" ),
+//
+// OVER_QUOTA( PathPlanningErrCode.OVER_QUOTA, "请求超出配额。" ),
+//
+// SERVICE_NOT_EXIST( PathPlanningErrCode.SERVICE_NOT_EXIST, "请求服务不存在。" ),
+//
+// SERVICE_RESPONSE_ERROR( PathPlanningErrCode.SERVICE_RESPONSE_ERROR, "请求服务响应错误。" ),
+//
+// UNKNOWN_ERROR( PathPlanningErrCode.UNKNOWN_ERROR, "未知错误(可能是由于连接的网络无法访问外网)" ),
+//
+// USERKEY_PLAT_NOMATCH( PathPlanningErrCode.USERKEY_PLAT_NOMATCH, "请求中使用的key与绑定平台不符,例如:开发者申请的是js api的key,却用来调web服务接口" );
+//
+// private int code;
+// private String errorMsg;
+//
+// PathPlanningErrorCodeConstants( int code, String errorMsg ) {
+// this.code = code;
+// this.errorMsg = errorMsg;
+// }
+//
+// public int getCode() {
+// return code;
+// }
+//
+// public String getErrorMsg() {
+// return errorMsg;
+// }
+//
+// public static String getErrorMsg( int code ) {
+// for ( PathPlanningErrorCodeConstants value : PathPlanningErrorCodeConstants.values() ) {
+// if ( value.getCode() == code ) {
+// return value.getErrorMsg();
+// }
+// }
+// return NONE.getErrorMsg();
+// }
+//
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/TTSSpeaker.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/TTSSpeaker.java
new file mode 100644
index 0000000000..301b2d17f0
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/navi/TTSSpeaker.java
@@ -0,0 +1,120 @@
+//package com.mogo.map.impl.custom.navi;
+//
+//import android.text.TextUtils;
+//
+//import com.mogo.commons.AbsMogoApplication;
+//import com.mogo.commons.voice.AIAssist;
+//import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
+//
+//import java.util.LinkedList;
+//
+///**
+// * @author congtaowang
+// * @since 2020-04-21
+// *
+// * 播报导航TTS
+// *
+// * 策略:队列缓存预播报的 tts,然后上一句播完后
+// */
+//public class TTSSpeaker implements IMogoVoiceCmdCallBack {
+//
+// private static volatile TTSSpeaker sInstance;
+//
+// private TTSSpeaker() {
+// }
+//
+// public static TTSSpeaker getInstance() {
+// if ( sInstance == null ) {
+// synchronized ( TTSSpeaker.class ) {
+// if ( sInstance == null ) {
+// sInstance = new TTSSpeaker();
+// }
+// }
+// }
+// return sInstance;
+// }
+//
+// public synchronized void release() {
+// sInstance = null;
+// }
+//
+// private LinkedList< String > mWaiting = new LinkedList<>();
+//
+// private String mLastTts = null;
+// private String mLastTtsId = null;
+//
+// public synchronized void speakTTS( String tts ) {
+// if ( TextUtils.isEmpty( tts ) ) {
+// return;
+// }
+// mWaiting.add( tts );
+// peekAndSpeak();
+// }
+//
+// public synchronized void shutUp() {
+// if ( mLastTtsId != null ) {
+// AIAssist.getInstance( AbsMogoApplication.getApp() ).shutUp( mLastTtsId, mLastTts );
+// mWaiting.clear();
+// mLastTtsId = null;
+// mLastTts = null;
+// }
+// }
+//
+// @Override
+// public void onCmdSelected( String cmd ) {
+//
+// }
+//
+// @Override
+// public void onCmdAction( String speakText ) {
+//
+// }
+//
+// @Override
+// public void onCmdCancel( String speakText ) {
+//
+// }
+//
+// @Override
+// public void onSpeakEnd( String speakText ) {
+//
+// }
+//
+// @Override
+// public void onSpeakSelectTimeOut( String speakText ) {
+//
+// }
+//
+// @Override
+// public void onTTSStart( String ttsId, String tts ) {
+// if ( TextUtils.equals( mLastTts, tts ) ) {
+// mLastTtsId = ttsId;
+// }
+// }
+//
+// @Override
+// public void onTTSEnd( String ttsId, String tts ) {
+// mLastTtsId = null;
+// peekAndSpeak();
+// }
+//
+// @Override
+// public void onTTSError( String ttsId, String tts ) {
+// mLastTtsId = null;
+// peekAndSpeak();
+// }
+//
+// private synchronized void peekAndSpeak() {
+// if ( mWaiting.isEmpty() ) {
+// mLastTts = null;
+// mLastTtsId = null;
+// return;
+// }
+// if ( mLastTtsId != null ) {
+// // 上一句还没有播完
+// return;
+// }
+// mLastTts = mWaiting.pop();
+// AIAssist.getInstance( AbsMogoApplication.getApp() ).speakTTSAndDuck( mLastTts, this );
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/AMapPolylineWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/AMapPolylineWrapper.java
new file mode 100644
index 0000000000..a4c8e2e538
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/AMapPolylineWrapper.java
@@ -0,0 +1,197 @@
+package com.mogo.map.impl.custom.overlay;
+
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.overlay.IMogoPolyline;
+import com.mogo.map.overlay.MogoPolylineOptions;
+import com.zhidaoauto.map.sdk.open.poyline.Polyline;
+import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions;
+import com.zhidaoauto.map.sdk.open.query.LonLatPoint;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2020-03-10
+ *
+ * 描述
+ */
+public class AMapPolylineWrapper implements IMogoPolyline {
+
+ private Polyline mPolyline;
+ private MogoPolylineOptions mOptions;
+ private boolean mIsDestroyed = false;
+
+ public AMapPolylineWrapper( Polyline mPolyline,
+ MogoPolylineOptions mOptions ) {
+ this.mPolyline = mPolyline;
+ this.mOptions = mOptions;
+ }
+
+ @Override
+ public void destroy() {
+ remove();
+ }
+
+ @Override
+ public void remove() {
+ if ( mPolyline != null ) {
+ mPolyline.remove();
+ }
+ mIsDestroyed = true;
+ }
+
+ @Override
+ public String getId() {
+ if ( mPolyline != null ) {
+ return mPolyline.getId();
+ }
+ return null;
+ }
+
+ @Override
+ public void setPoints( List< MogoLatLng > lonLats ) {
+ if ( lonLats == null || lonLats.isEmpty() ) {
+ mPolyline.setPoints( new ArrayList() );
+ return;
+ }
+ ArrayList< LonLatPoint > points = new ArrayList<>();
+ for ( MogoLatLng lonLat : lonLats ) {
+ LonLatPoint latLng = ObjectUtils.fromMogo( lonLat );
+ if ( latLng == null ) {
+ continue;
+ }
+ points.add( latLng );
+ }
+ mPolyline.setPoints( points );
+ }
+
+ @Override
+ public List< MogoLatLng > getPoints() {
+ if ( mPolyline == null ) {
+ return null;
+ }
+ ArrayList< MogoLatLng > lonLats = new ArrayList<>();
+ List< LonLatPoint > points = mPolyline.getPoints();
+ if ( points != null ) {
+ for ( LonLatPoint latLng : points ) {
+ MogoLatLng lonLat = ObjectUtils.fromAMap( latLng );
+ if ( lonLat == null ) {
+ continue;
+ }
+ lonLats.add( lonLat );
+ }
+ }
+ return lonLats;
+ }
+
+ @Override
+ public void setGeodesic( boolean draw ) {
+ if ( mPolyline != null ) {
+ mPolyline.setGeodesic( draw );
+ }
+ }
+
+ @Override
+ public boolean isGeodesic() {
+ return mPolyline == null ? false : mPolyline.isGeodesic();
+ }
+
+ @Override
+ public void setDottedLine( boolean dottedLine ) {
+ if ( mPolyline != null ) {
+ mPolyline.setDottedLine( dottedLine );
+ }
+ }
+
+ @Override
+ public boolean isDottedLine() {
+ return mPolyline == null ? false : mPolyline.isDottedLine();
+ }
+
+ @Override
+ public void setWidth( float width ) {
+ if ( mPolyline != null ) {
+ mPolyline.setWidth( width );
+ }
+ }
+
+ @Override
+ public float getWidth() {
+ if ( mPolyline != null ) {
+ return mPolyline.getWidth();
+ }
+ return 0;
+ }
+
+ @Override
+ public void setColor( int color ) {
+ if ( mPolyline != null ) {
+ mPolyline.setColor( color );
+ }
+ }
+
+ @Override
+ public int getColor() {
+ if ( mPolyline != null ) {
+ return mPolyline.getColor();
+ }
+ return 0;
+ }
+
+ @Override
+ public void setZIndex( float zIndex ) {
+ if ( mPolyline != null ) {
+ mPolyline.setZIndex( zIndex );
+ }
+ }
+
+ @Override
+ public float getZIndex() {
+ if ( mPolyline != null ) {
+ return mPolyline.getZIndex();
+ }
+ return 0;
+ }
+
+ @Override
+ public void setVisible( boolean visible ) {
+ if ( mPolyline != null ) {
+ mPolyline.setVisible( visible );
+ }
+ }
+
+ @Override
+ public boolean isVisible() {
+ if ( mPolyline != null ) {
+ return mPolyline.isVisible();
+ }
+ return false;
+ }
+
+ @Override
+ public void setTransparency( float transparency ) {
+ if ( mPolyline != null ) {
+ mPolyline.setTransparency( transparency );
+ }
+ }
+
+ @Override
+ public void setOption( MogoPolylineOptions option ) {
+ PolylineOptions target = ObjectUtils.fromMogo( option );
+ if ( target == null ) {
+ return;
+ }
+ mOptions = option;
+ if ( mPolyline != null ) {
+ mPolyline.setOption( target );
+ }
+ }
+
+ @Override
+ public boolean isDestroyed() {
+ return false;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/AMapUtil.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/AMapUtil.java
new file mode 100644
index 0000000000..fc9358b589
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/AMapUtil.java
@@ -0,0 +1,261 @@
+package com.mogo.map.impl.custom.overlay;
+
+import android.text.Html;
+import android.text.Spanned;
+import android.widget.EditText;
+
+
+import com.mogo.map.impl.custom.R;
+
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class AMapUtil {
+ /**
+ * 判断edittext是否null
+ */
+ public static String checkEditText(EditText editText) {
+ if (editText != null && editText.getText() != null
+ && !(editText.getText().toString().trim().equals(""))) {
+ return editText.getText().toString().trim();
+ } else {
+ return "";
+ }
+ }
+
+ public static Spanned stringToSpan(String src) {
+ return src == null ? null : Html.fromHtml(src.replace("\n", " "));
+ }
+
+ public static String colorFont(String src, String color) {
+ StringBuffer strBuf = new StringBuffer();
+
+ strBuf.append("").append(src)
+ .append(" ");
+ return strBuf.toString();
+ }
+
+ public static String makeHtmlNewLine() {
+ return " ";
+ }
+
+ public static String makeHtmlSpace(int number) {
+ final String space = " ";
+ StringBuilder result = new StringBuilder();
+ for (int i = 0; i < number; i++) {
+ result.append(space);
+ }
+ return result.toString();
+ }
+
+ public static String getFriendlyLength(int lenMeter) {
+ if (lenMeter > 10000) // 10 km
+ {
+ int dis = lenMeter / 1000;
+ return dis + ChString.Kilometer;
+ }
+
+ if (lenMeter > 1000) {
+ float dis = (float) lenMeter / 1000;
+ DecimalFormat fnum = new DecimalFormat("##0.0");
+ String dstr = fnum.format(dis);
+ return dstr + ChString.Kilometer;
+ }
+
+ if (lenMeter > 100) {
+ int dis = lenMeter / 50 * 50;
+ return dis + ChString.Meter;
+ }
+
+ int dis = lenMeter / 10 * 10;
+ if (dis == 0) {
+ dis = 10;
+ }
+
+ return dis + ChString.Meter;
+ }
+
+ public static boolean IsEmptyOrNullString(String s) {
+ return (s == null) || (s.trim().length() == 0);
+ }
+
+ /**
+ * 把LatLng对象转化为LatLonPoint对象
+ */
+// public static LonLatPoint convertToLatLonPoint(LatLng latlon) {
+// return new LonLatPoint(latlon.latitude, latlon.longitude);
+// }
+
+ /**
+ * 把LatLonPoint对象转化为LatLon对象
+ */
+// public static LatLng convertToLatLng(LatLonPoint latLonPoint) {
+// return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
+// }
+
+ /**
+ * 把集合体的LatLonPoint转化为集合体的LatLng
+ */
+// public static ArrayList convertArrList(List shapes) {
+// ArrayList lineShapes = new ArrayList();
+// for (LatLonPoint point : shapes) {
+// LatLng latLngTemp = AMapUtil.convertToLatLng(point);
+// lineShapes.add(latLngTemp);
+// }
+// return lineShapes;
+// }
+
+ /**
+ * long类型时间格式化
+ */
+ public static String convertToTime(long time) {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Date date = new Date(time);
+ return df.format(date);
+ }
+
+ public static final String HtmlBlack = "#000000";
+ public static final String HtmlGray = "#808080";
+
+ public static String getFriendlyTime(int second) {
+ if (second > 3600) {
+ int hour = second / 3600;
+ int miniate = (second % 3600) / 60;
+ return hour + "小时" + miniate + "分钟";
+ }
+ if (second >= 60) {
+ int miniate = second / 60;
+ return miniate + "分钟";
+ }
+ return second + "秒";
+ }
+
+ //路径规划方向指示和图片对应
+ public static int getDriveActionID(String actionName) {
+ if (actionName == null || actionName.equals("")) {
+ return R.drawable.dir3;
+ }
+ if ("左转".equals(actionName)) {
+ return R.drawable.dir2;
+ }
+ if ("右转".equals(actionName)) {
+ return R.drawable.dir1;
+ }
+ if ("向左前方行驶".equals(actionName) || "靠左".equals(actionName)) {
+ return R.drawable.dir6;
+ }
+ if ("向右前方行驶".equals(actionName) || "靠右".equals(actionName)) {
+ return R.drawable.dir5;
+ }
+ if ("向左后方行驶".equals(actionName) || "左转调头".equals(actionName)) {
+ return R.drawable.dir7;
+ }
+ if ("向右后方行驶".equals(actionName)) {
+ return R.drawable.dir8;
+ }
+ if ("直行".equals(actionName)) {
+ return R.drawable.dir3;
+ }
+ if ("减速行驶".equals(actionName)) {
+ return R.drawable.dir4;
+ }
+ return R.drawable.dir3;
+ }
+
+ public static int getWalkActionID(String actionName) {
+ if (actionName == null || actionName.equals("")) {
+ return R.drawable.dir13;
+ }
+ if ("左转".equals(actionName)) {
+ return R.drawable.dir2;
+ }
+ if ("右转".equals(actionName)) {
+ return R.drawable.dir1;
+ }
+ if ("向左前方".equals(actionName) || "靠左".equals(actionName) || actionName.contains("向左前方")) {
+ return R.drawable.dir6;
+ }
+ if ("向右前方".equals(actionName) || "靠右".equals(actionName) || actionName.contains("向右前方")) {
+ return R.drawable.dir5;
+ }
+ if ("向左后方".equals(actionName) || actionName.contains("向左后方")) {
+ return R.drawable.dir7;
+ }
+ if ("向右后方".equals(actionName) || actionName.contains("向右后方")) {
+ return R.drawable.dir8;
+ }
+ if ("直行".equals(actionName)) {
+ return R.drawable.dir3;
+ }
+ if ("通过人行横道".equals(actionName)) {
+ return R.drawable.dir9;
+ }
+ if ("通过过街天桥".equals(actionName)) {
+ return R.drawable.dir11;
+ }
+ if ("通过地下通道".equals(actionName)) {
+ return R.drawable.dir10;
+ }
+
+ return R.drawable.dir13;
+ }
+
+// public static String getBusPathTitle(BusPath busPath) {
+// if (busPath == null) {
+// return String.valueOf("");
+// }
+// List busSetps = busPath.getSteps();
+// if (busSetps == null) {
+// return String.valueOf("");
+// }
+// StringBuffer sb = new StringBuffer();
+// for (BusStep busStep : busSetps) {
+// StringBuffer title = new StringBuffer();
+// if (busStep.getBusLines().size() > 0) {
+// for (RouteBusLineItem busline : busStep.getBusLines()) {
+// if (busline == null) {
+// continue;
+// }
+//
+// String buslineName = getSimpleBusLineName(busline.getBusLineName());
+// title.append(buslineName);
+// title.append(" / ");
+// }
+//// RouteBusLineItem busline = busStep.getBusLines().get(0);
+//
+// sb.append(title.substring(0, title.length() - 3));
+// sb.append(" > ");
+// }
+// if (busStep.getRailway() != null) {
+// RouteRailwayItem railway = busStep.getRailway();
+// sb.append(railway.getTrip() + "(" + railway.getDeparturestop().getName()
+// + " - " + railway.getArrivalstop().getName() + ")");
+// sb.append(" > ");
+// }
+// }
+// return sb.substring(0, sb.length() - 3);
+// }
+
+// public static String getBusPathDes(BusPath busPath) {
+// if (busPath == null) {
+// return String.valueOf("");
+// }
+// long second = busPath.getDuration();
+// String time = getFriendlyTime((int) second);
+// float subDistance = busPath.getDistance();
+// String subDis = getFriendlyLength((int) subDistance);
+// float walkDistance = busPath.getWalkDistance();
+// String walkDis = getFriendlyLength((int) walkDistance);
+// return String.valueOf(time + " | " + subDis + " | 步行" + walkDis);
+// }
+
+ public static String getSimpleBusLineName(String busLineName) {
+ if (busLineName == null) {
+ return String.valueOf("");
+ }
+ return busLineName.replaceAll("\\(.*?\\)", "");
+ }
+
+
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/ChString.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/ChString.java
new file mode 100644
index 0000000000..34a9c3cd6d
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/ChString.java
@@ -0,0 +1,26 @@
+package com.mogo.map.impl.custom.overlay;
+
+public class ChString {
+ public static final String Kilometer = "\u516c\u91cc";// "公里";
+ public static final String Meter = "\u7c73";// "米";
+ public static final String ByFoot = "\u6b65\u884c";// "步行";
+ public static final String To = "\u53bb\u5f80";// "去往";
+ public static final String Station = "\u8f66\u7ad9";// "车站";
+ public static final String TargetPlace = "\u76ee\u7684\u5730";// "目的地";
+ public static final String StartPlace = "\u51fa\u53d1\u5730";// "出发地";
+ public static final String About = "\u5927\u7ea6";// "大约";
+ public static final String Direction = "\u65b9\u5411";// "方向";
+
+ public static final String GetOn = "\u4e0a\u8f66";// "上车";
+ public static final String GetOff = "\u4e0b\u8f66";// "下车";
+ public static final String Zhan = "\u7ad9";// "站";
+
+ public static final String cross = "\u4ea4\u53c9\u8def\u53e3"; // 交叉路口
+ public static final String type = "\u7c7b\u522b"; // 类别
+ public static final String address = "\u5730\u5740"; // 地址
+ public static final String PrevStep = "\u4e0a\u4e00\u6b65";
+ public static final String NextStep = "\u4e0b\u4e00\u6b65";
+ public static final String Gong = "\u516c\u4ea4";
+ public static final String ByBus = "\u4e58\u8f66";
+ public static final String Arrive = "\u5230\u8FBE";// 到达
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/DrivingRouteOverlay.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/DrivingRouteOverlay.java
new file mode 100644
index 0000000000..9d331eb635
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/DrivingRouteOverlay.java
@@ -0,0 +1,376 @@
+//package com.mogo.map.impl.custom.overlay;
+//
+//import android.content.Context;
+//import android.graphics.Color;
+//
+//import com.mogo.map.impl.custom.R;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//
+///**
+// * 导航路线图层类
+// */
+//public class DrivingRouteOverlay extends RouteOverlay {
+// private DrivePath drivePath;
+// private List throughPointList;
+// private List throughPointMarkerList = new ArrayList();
+// private boolean throughPointMarkerVisible = true;
+// private List tmcs;
+// private PolylineOptions mPolylineOptions;
+// private PolylineOptions mPolylineOptionscolor;
+// private Context mContext;
+// private boolean isColorfulline = true;
+// private float mWidth = 4;
+// private List mLatLngsOfPath;
+//
+// public void setIsColorfulline(boolean iscolorfulline) {
+// this.isColorfulline = iscolorfulline;
+// }
+//
+// /**
+// * 根据给定的参数,构造一个导航路线图层类对象。
+// *
+// * @param amap 地图对象。
+// * @param path 导航路线规划方案。
+// * @param context 当前的activity对象。
+// */
+// public DrivingRouteOverlay(Context context,
+// AMap amap,
+// DrivePath path,
+// LatLonPoint start,
+// LatLonPoint end,
+// List throughPointList) {
+// super(context);
+// mContext = context;
+// mAMap = amap;
+// this.drivePath = path;
+// startPoint = AMapUtil.convertToLatLng(start);
+// endPoint = AMapUtil.convertToLatLng(end);
+// this.throughPointList = throughPointList;
+//
+// initBitmapDescriptor();
+// }
+//
+// public float getRouteWidth() {
+// return mWidth;
+// }
+//
+// /**
+// * 设置路线宽度
+// *
+// * @param mWidth 路线宽度,取值范围:大于0
+// */
+// public void setRouteWidth(float mWidth) {
+// this.mWidth = mWidth;
+// }
+//
+// /**
+// * 添加驾车路线添加到地图上显示。
+// */
+// public void addToMap() {
+// initPolylineOptions();
+// try {
+// if (mAMap == null) {
+// return;
+// }
+//
+// if (mWidth == 0 || drivePath == null) {
+// return;
+// }
+// mLatLngsOfPath = new ArrayList();
+// tmcs = new ArrayList();
+// List drivePaths = drivePath.getSteps();
+// mPolylineOptions.add(startPoint);
+// for (int i = 0; i < drivePaths.size(); i++) {
+// DriveStep step = drivePaths.get(i);
+// List latlonPoints = step.getPolyline();
+// List tmclist = step.getTMCs();
+// tmcs.addAll(tmclist);
+// addDrivingStationMarkers(step, convertToLatLng(latlonPoints.get(0)));
+// for (LatLonPoint latlonpoint : latlonPoints) {
+// mPolylineOptions.add(convertToLatLng(latlonpoint));
+// mLatLngsOfPath.add(convertToLatLng(latlonpoint));
+// }
+// }
+// mPolylineOptions.add(endPoint);
+// if (startMarker != null) {
+// startMarker.remove();
+// startMarker = null;
+// }
+//
+// if (endMarker != null) {
+// endMarker.remove();
+// endMarker = null;
+// }
+//// addStartAndEndMarker();
+//// addThroughPointMarker();
+// if (isColorfulline && tmcs.size() > 0) {
+// colorWayUpdate(tmcs);
+// showcolorPolyline();
+// } else {
+// showPolyline();
+// }
+//
+// } catch (Throwable e) {
+// e.printStackTrace();
+// }
+// }
+//
+// /**
+// * 初始化线段属性
+// */
+// private void initPolylineOptions() {
+// mPolylineOptions = null;
+// mPolylineOptions = new PolylineOptions();
+// mPolylineOptions.color(getDriveColor()).width(getRouteWidth());
+// }
+//
+// private void showPolyline() {
+// addPolyLine(mPolylineOptions);
+// }
+//
+// private void showcolorPolyline() {
+// addPolyLine(mPolylineOptionscolor);
+// }
+//
+// /**
+// * 根据不同的路段拥堵情况展示不同的颜色
+// *
+// * @param tmcSection
+// */
+// private void colorWayUpdate(List tmcSection) {
+// if (mAMap == null) {
+// return;
+// }
+// if (tmcSection == null || tmcSection.size() <= 0) {
+// return;
+// }
+// TMC segmentTrafficStatus;
+// mPolylineOptionscolor = null;
+// mPolylineOptionscolor = new PolylineOptions();
+// mPolylineOptionscolor.width(getRouteWidth());
+// List colorList = new ArrayList();
+// List bitmapDescriptors = new ArrayList();
+// List points = new ArrayList<>();
+// List texIndexList = new ArrayList();
+//// mPolylineOptionscolor.add(startPoint);
+//// mPolylineOptionscolor.add(AMapUtil.convertToLatLng(tmcSection.get(0).getPolyline().get(0)));
+//
+// points.add(startPoint);
+// points.add(AMapUtil.convertToLatLng(tmcSection.get(0).getPolyline().get(0)));
+// colorList.add(getDriveColor());
+// bitmapDescriptors.add(defaultRoute);
+//
+// BitmapDescriptor bitmapDescriptor = null;
+// int textIndex = 0;
+// texIndexList.add(textIndex);
+// texIndexList.add(++textIndex);
+// for (int i = 0; i < tmcSection.size(); i++) {
+// segmentTrafficStatus = tmcSection.get(i);
+// int color = getcolor(segmentTrafficStatus.getStatus());
+// bitmapDescriptor = getTrafficBitmapDescriptor(segmentTrafficStatus.getStatus());
+// List mployline = segmentTrafficStatus.getPolyline();
+// for (int j = 0; j < mployline.size(); j++) {
+//// mPolylineOptionscolor.add(AMapUtil.convertToLatLng(mployline.get(j)));
+// points.add(AMapUtil.convertToLatLng(mployline.get(j)));
+// colorList.add(color);
+//
+// texIndexList.add(++textIndex);
+// bitmapDescriptors.add(bitmapDescriptor);
+// }
+// }
+//
+// points.add(endPoint);
+// colorList.add(getDriveColor());
+// bitmapDescriptors.add(defaultRoute);
+// texIndexList.add(++textIndex);
+// mPolylineOptionscolor.addAll(points);
+// mPolylineOptionscolor.colorValues(colorList);
+//
+//// mPolylineOptionscolor.setCustomTextureIndex(texIndexList);
+//// mPolylineOptionscolor.setCustomTextureList(bitmapDescriptors);
+// }
+//
+// private BitmapDescriptor defaultRoute = null;
+// private BitmapDescriptor unknownTraffic = null;
+// private BitmapDescriptor smoothTraffic = null;
+// private BitmapDescriptor slowTraffic = null;
+// private BitmapDescriptor jamTraffic = null;
+// private BitmapDescriptor veryJamTraffic = null;
+//
+// private void initBitmapDescriptor() {
+// defaultRoute = BitmapDescriptorFactory.fromResource( R.drawable.amap_route_color_texture_6_arrow);
+// smoothTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_4_arrow);
+// unknownTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_0_arrow);
+// slowTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_3_arrow);
+// jamTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_2_arrow);
+// veryJamTraffic = BitmapDescriptorFactory.fromResource(R.drawable.amap_route_color_texture_9_arrow);
+// }
+//
+// private BitmapDescriptor getTrafficBitmapDescriptor(String status) {
+// if (status.equals("畅通")) {
+// return smoothTraffic;
+// } else if (status.equals("缓行")) {
+// return slowTraffic;
+// } else if (status.equals("拥堵")) {
+// return jamTraffic;
+// } else if (status.equals("严重拥堵")) {
+// return veryJamTraffic;
+// } else {
+// return defaultRoute;
+// }
+// }
+//
+//
+// private int getcolor(String status) {
+// if (status.equals("畅通")) {
+// return Color.GREEN;
+// } else if (status.equals("缓行")) {
+// return Color.YELLOW;
+// } else if (status.equals("拥堵")) {
+// return Color.RED;
+// } else if (status.equals("严重拥堵")) {
+// return Color.parseColor("#990033");
+// } else {
+// return Color.GREEN;
+// }
+// }
+//
+// public LatLng convertToLatLng(LatLonPoint point) {
+// return new LatLng(point.getLatitude(), point.getLongitude());
+// }
+//
+// /**
+// * @param driveStep
+// * @param latLng
+// */
+// private void addDrivingStationMarkers(DriveStep driveStep, LatLng latLng) {
+// addStationMarker(new MarkerOptions()
+// .position(latLng)
+// .title("\u65B9\u5411:" + driveStep.getAction()
+// + "\n\u9053\u8DEF:" + driveStep.getRoad())
+// .snippet(driveStep.getInstruction()).visible(nodeIconVisible)
+// .anchor(0.5f, 0.5f).icon(getDriveBitmapDescriptor()));
+// }
+//
+// @Override
+// protected LatLngBounds getLatLngBounds() {
+// LatLngBounds.Builder b = LatLngBounds.builder();
+// b.include(new LatLng(startPoint.latitude, startPoint.longitude));
+// b.include(new LatLng(endPoint.latitude, endPoint.longitude));
+// if (this.throughPointList != null && this.throughPointList.size() > 0) {
+// for (int i = 0; i < this.throughPointList.size(); i++) {
+// b.include(new LatLng(
+// this.throughPointList.get(i).getLatitude(),
+// this.throughPointList.get(i).getLongitude()));
+// }
+// }
+// return b.build();
+// }
+//
+// public void setThroughPointIconVisibility(boolean visible) {
+// try {
+// throughPointMarkerVisible = visible;
+// if (this.throughPointMarkerList != null
+// && this.throughPointMarkerList.size() > 0) {
+// for (int i = 0; i < this.throughPointMarkerList.size(); i++) {
+// this.throughPointMarkerList.get(i).setVisible(visible);
+// }
+// }
+// } catch (Throwable e) {
+// e.printStackTrace();
+// }
+// }
+//
+// private void addThroughPointMarker() {
+// if (this.throughPointList != null && this.throughPointList.size() > 0) {
+// LatLonPoint latLonPoint = null;
+// for (int i = 0; i < this.throughPointList.size(); i++) {
+// latLonPoint = this.throughPointList.get(i);
+// if (latLonPoint != null) {
+// throughPointMarkerList.add(mAMap
+// .addMarker((new MarkerOptions())
+// .position(
+// new LatLng(latLonPoint
+// .getLatitude(), latLonPoint
+// .getLongitude()))
+// .visible(throughPointMarkerVisible)
+// .icon(getThroughPointBitDes())
+// .title("\u9014\u7ECF\u70B9")));
+// }
+// }
+// }
+// }
+//
+// private BitmapDescriptor getThroughPointBitDes() {
+// return BitmapDescriptorFactory.fromResource(R.drawable.amap_through);
+//
+// }
+//
+// /**
+// * 获取两点间距离
+// *
+// * @param start
+// * @param end
+// * @return
+// */
+// public static int calculateDistance(LatLng start, LatLng end) {
+// double x1 = start.longitude;
+// double y1 = start.latitude;
+// double x2 = end.longitude;
+// double y2 = end.latitude;
+// return calculateDistance(x1, y1, x2, y2);
+// }
+//
+// public static int calculateDistance(double x1, double y1, double x2, double y2) {
+// final double NF_pi = 0.01745329251994329; // 弧度 PI/180
+// x1 *= NF_pi;
+// y1 *= NF_pi;
+// x2 *= NF_pi;
+// y2 *= NF_pi;
+// double sinx1 = Math.sin(x1);
+// double siny1 = Math.sin(y1);
+// double cosx1 = Math.cos(x1);
+// double cosy1 = Math.cos(y1);
+// double sinx2 = Math.sin(x2);
+// double siny2 = Math.sin(y2);
+// double cosx2 = Math.cos(x2);
+// double cosy2 = Math.cos(y2);
+// double[] v1 = new double[3];
+// v1[0] = cosy1 * cosx1 - cosy2 * cosx2;
+// v1[1] = cosy1 * sinx1 - cosy2 * sinx2;
+// v1[2] = siny1 - siny2;
+// double dist = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]);
+//
+// return (int) (Math.asin(dist / 2) * 12742001.5798544);
+// }
+//
+//
+// //获取指定两点之间固定距离点
+// public static LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) {
+// double lSegLength = calculateDistance(sPt, ePt);
+// double preResult = dis / lSegLength;
+// return new LatLng((ePt.latitude - sPt.latitude) * preResult + sPt.latitude, (ePt.longitude - sPt.longitude) * preResult + sPt.longitude);
+// }
+//
+// /**
+// * 去掉DriveLineOverlay上的线段和标记。
+// */
+// @Override
+// public void removeFromMap() {
+// try {
+// super.removeFromMap();
+// if (this.throughPointMarkerList != null
+// && this.throughPointMarkerList.size() > 0) {
+// for (int i = 0; i < this.throughPointMarkerList.size(); i++) {
+// this.throughPointMarkerList.get(i).remove();
+// }
+// this.throughPointMarkerList.clear();
+// }
+// } catch (Throwable e) {
+// e.printStackTrace();
+// }
+// }
+//}
\ No newline at end of file
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/OnRouteSearchListenerAdapter.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/OnRouteSearchListenerAdapter.java
new file mode 100644
index 0000000000..f4ead82dc0
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/OnRouteSearchListenerAdapter.java
@@ -0,0 +1,36 @@
+//package com.mogo.map.impl.custom.overlay;
+//
+//import com.amap.api.services.route.BusRouteResult;
+//import com.amap.api.services.route.DriveRouteResult;
+//import com.amap.api.services.route.RideRouteResult;
+//import com.amap.api.services.route.RouteSearch;
+//import com.amap.api.services.route.WalkRouteResult;
+//
+///**
+// * @author congtaowang
+// * @since 2020-01-08
+// *
+// * 描述
+// */
+//public abstract class OnRouteSearchListenerAdapter implements RouteSearch.OnRouteSearchListener {
+//
+// @Override
+// public void onBusRouteSearched( BusRouteResult busRouteResult, int i ) {
+//
+// }
+//
+// @Override
+// public void onDriveRouteSearched( DriveRouteResult driveRouteResult, int i ) {
+//
+// }
+//
+// @Override
+// public void onWalkRouteSearched( WalkRouteResult walkRouteResult, int i ) {
+//
+// }
+//
+// @Override
+// public void onRideRouteSearched( RideRouteResult rideRouteResult, int i ) {
+//
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverLayWrapper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverLayWrapper.java
new file mode 100644
index 0000000000..02cca9c629
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverLayWrapper.java
@@ -0,0 +1,210 @@
+//package com.mogo.map.impl.custom.overlay;
+//
+//import android.content.Context;
+//import android.graphics.BitmapFactory;
+//import android.util.Log;
+//
+//import com.amap.api.maps.AMap;
+//import com.amap.api.maps.model.NavigateArrowOptions;
+//import com.amap.api.maps.model.Polyline;
+//import com.amap.api.navi.model.AMapNaviLocation;
+//import com.amap.api.navi.model.AMapNaviPath;
+//import com.amap.api.navi.model.NaviInfo;
+//import com.amap.api.navi.model.RouteOverlayOptions;
+//import com.amap.api.navi.view.RouteOverLay;
+//import com.mogo.map.impl.custom.utils.MapStyleUtils;
+//import com.mogo.utils.logger.Logger;
+//
+//import java.lang.ref.WeakReference;
+//import java.lang.reflect.Field;
+//
+///**
+// * @author congtaowang
+// * @since 2019-10-04
+// *
+// * 路径覆盖物
+// */
+//public class RouteOverLayWrapper {
+//
+// private static final String TAG = "RouteOverLayWrapper";
+//
+// private final WeakReference< Context > mContextRef;
+// private final AMap mAMap;
+// private final AMapNaviPath mPath;
+//
+// private RouteOverLay mRouteOverLay;
+// private boolean mIsRemoved = true;
+//
+// private boolean mIsTrafficLightsVisible = true;
+// private int mStartBitmapResId = 0;
+// private int mEndBitmapResId = 0;
+// private int mZIndex = 0;
+//
+// private static RouteOverlayOptions sOptions;
+//
+// public RouteOverLayWrapper( Context context,
+// AMap mAMap,
+// AMapNaviPath mPath ) {
+// this.mContextRef = new WeakReference<>( context );
+// this.mAMap = mAMap;
+// this.mPath = mPath;
+// }
+//
+// public void addToMap() {
+// if ( mContextRef == null || mContextRef.get() == null ) {
+// return;
+// }
+// mRouteOverLay = new RouteOverLay( mAMap, mPath, mContextRef.get() );
+// if ( sOptions == null ) {
+// sOptions = MapStyleUtils.getRouteOverlayOptions();
+// }
+// mRouteOverLay.setRouteOverlayOptions( sOptions );
+// mRouteOverLay.setTrafficLine( true );
+// mRouteOverLay.setRouteOverlayVisible( true );
+// mRouteOverLay.setTrafficLightsVisible( true );
+// mRouteOverLay.setArrowOnRoute( true );
+// mRouteOverLay.setZindex( mZIndex );
+// mRouteOverLay.setNaviArrowVisible( true );
+// mRouteOverLay.setLightsVisible( true );
+// mRouteOverLay.setTrafficLightsVisible( mIsTrafficLightsVisible );
+// hookRouteArrow();
+//
+// if ( mStartBitmapResId != 0 ) {
+// try {
+// mRouteOverLay.setStartPointBitmap( BitmapFactory.decodeResource( mContextRef.get().getResources(), mStartBitmapResId ) );
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// } else {
+// mRouteOverLay.setStartPointBitmap( null );
+// }
+//
+// if ( mEndBitmapResId != 0 ) {
+// try {
+// mRouteOverLay.setEndPointBitmap( BitmapFactory.decodeResource( mContextRef.get().getResources(), mEndBitmapResId ) );
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// } else {
+// mRouteOverLay.setEndPointBitmap( null );
+// }
+//
+// mRouteOverLay.addToMap();
+// mIsRemoved = false;
+// }
+//
+// public void remove() {
+// Log.d( TAG, "remove" );
+// if ( mRouteOverLay != null ) {
+// try {
+// mRouteOverLay.removeFromMap();
+// mIsRemoved = true;
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// }
+// }
+//
+// /**
+// * 设置透明度
+// *
+// * @param alpha
+// */
+// public void setTransparency( float alpha ) {
+// if ( mRouteOverLay != null ) {
+// mRouteOverLay.setTransparency( alpha );
+// }
+// }
+//
+// public RouteOverLayWrapper setTrafficLightsVisible( boolean visible ) {
+// mIsTrafficLightsVisible = visible;
+// return this;
+// }
+//
+// public RouteOverLayWrapper setStartBitmap( int startBitmapResId ) {
+// mStartBitmapResId = startBitmapResId;
+// return this;
+// }
+//
+// public RouteOverLayWrapper setEndBitmap( int endBitmapResId ) {
+// mEndBitmapResId = endBitmapResId;
+// return this;
+// }
+//
+// public RouteOverLayWrapper setZIndex( int zIndex ) {
+// mZIndex = zIndex;
+// return this;
+// }
+//
+// public int getZIndex() {
+// return mZIndex;
+// }
+//
+// @Override
+// protected void finalize() throws Throwable {
+// super.finalize();
+// mIsRemoved = true;
+// }
+//
+// public synchronized boolean isRemoved() {
+// return mIsRemoved;
+// }
+//
+// public void updatePolyline( AMapNaviLocation aMapNaviLocation ) {
+// if ( mIsRemoved ) {
+// return;
+// }
+// if ( mRouteOverLay != null ) {
+// mRouteOverLay.updatePolyline( aMapNaviLocation );
+// }
+// }
+//
+// public void drawArrow( NaviInfo naviInfo ) {
+// Log.d( TAG, "drawArrow" );
+// if ( mIsRemoved ) {
+// return;
+// }
+// if ( naviInfo == null ) {
+// return;
+// }
+// if ( mRouteOverLay != null ) {
+// try {
+// mRouteOverLay.drawArrow( mRouteOverLay.getArrowPoints( naviInfo.getCurStep() ) );
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// }
+// }
+//
+// private void hookRouteArrow() {
+// if ( mRouteOverLay != null && sOptions != null ) {
+// try {
+// Field field = mRouteOverLay.getClass().getDeclaredField( "naviArrow" );
+// field.setAccessible( true );
+// field.set( mRouteOverLay, mAMap.addNavigateArrow( new NavigateArrowOptions().topColor( sOptions.getArrowColor() ).width( sOptions.getLineWidth() ).sideColor( sOptions.getArrowSideColor() ) ) );
+// Logger.d( TAG, "hook 成功。" );
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// }
+// }
+//
+// public Polyline getTrafficColorfulPolyline() {
+// if ( mRouteOverLay != null ) {
+// return mRouteOverLay.mTrafficColorfulPolyline;
+// }
+// return null;
+// }
+//
+// public void destroy() {
+// Log.d( TAG, "destroy" );
+// if ( mRouteOverLay != null ) {
+// try {
+// mRouteOverLay.destroy();
+// mIsRemoved = true;
+// } catch ( Exception e ) {
+// e.printStackTrace();
+// }
+// }
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverlay.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverlay.java
new file mode 100644
index 0000000000..880a5b7c6b
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverlay.java
@@ -0,0 +1,236 @@
+//package com.mogo.map.impl.custom.overlay;
+//
+//import android.content.Context;
+//import android.graphics.Bitmap;
+//import android.graphics.Color;
+//
+//import com.amap.api.maps.AMap;
+//import com.amap.api.maps.CameraUpdateFactory;
+//import com.amap.api.maps.model.BitmapDescriptor;
+//import com.amap.api.maps.model.BitmapDescriptorFactory;
+//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.map.impl.custom.R;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//
+//public class RouteOverlay {
+// protected List stationMarkers = new ArrayList();
+// protected List allPolyLines = new ArrayList();
+// protected Marker startMarker;
+// protected Marker endMarker;
+// protected LatLng startPoint;
+// protected LatLng endPoint;
+// protected AMap mAMap;
+// private Context mContext;
+// private Bitmap startBit, endBit, busBit, walkBit, driveBit;
+// protected boolean nodeIconVisible = true;
+//
+// public RouteOverlay(Context context) {
+// mContext = context;
+// }
+//
+// /**
+// * 去掉BusRouteOverlay上所有的Marker。
+// *
+// * @since V2.1.0
+// */
+// public void removeFromMap() {
+// if (startMarker != null) {
+// startMarker.remove();
+//
+// }
+// if (endMarker != null) {
+// endMarker.remove();
+// }
+// for (Marker marker : stationMarkers) {
+// marker.remove();
+// }
+// for (Polyline line : allPolyLines) {
+// line.remove();
+// }
+// destroyBit();
+// }
+//
+// private void destroyBit() {
+// if (startBit != null) {
+// startBit.recycle();
+// startBit = null;
+// }
+// if (endBit != null) {
+// endBit.recycle();
+// endBit = null;
+// }
+// if (busBit != null) {
+// busBit.recycle();
+// busBit = null;
+// }
+// if (walkBit != null) {
+// walkBit.recycle();
+// walkBit = null;
+// }
+// if (driveBit != null) {
+// driveBit.recycle();
+// driveBit = null;
+// }
+// }
+//
+// /**
+// * 给起点Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。
+// *
+// * @return 更换的Marker图片。
+// * @since V2.1.0
+// */
+// protected BitmapDescriptor getStartBitmapDescriptor() {
+// return BitmapDescriptorFactory.fromResource( R.drawable.amap_start);
+// }
+//
+// /**
+// * 给终点Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。
+// *
+// * @return 更换的Marker图片。
+// * @since V2.1.0
+// */
+// protected BitmapDescriptor getEndBitmapDescriptor() {
+// return BitmapDescriptorFactory.fromResource(R.drawable.amap_end);
+// }
+//
+// /**
+// * 给公交Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。
+// *
+// * @return 更换的Marker图片。
+// * @since V2.1.0
+// */
+// protected BitmapDescriptor getBusBitmapDescriptor() {
+// return BitmapDescriptorFactory.fromResource(R.drawable.amap_bus);
+// }
+//
+// /**
+// * 给步行Marker设置图标,并返回更换图标的图片。如不用默认图片,需要重写此方法。
+// *
+// * @return 更换的Marker图片。
+// * @since V2.1.0
+// */
+// protected BitmapDescriptor getWalkBitmapDescriptor() {
+// return BitmapDescriptorFactory.fromResource(R.drawable.amap_man);
+// }
+//
+// protected BitmapDescriptor getDriveBitmapDescriptor() {
+// return BitmapDescriptorFactory.fromResource(R.drawable.amap_car);
+// }
+//
+// protected void addStartAndEndMarker() {
+// startMarker = mAMap.addMarker((new MarkerOptions())
+// .position(startPoint).icon(getStartBitmapDescriptor())
+// .title("\u8D77\u70B9"));
+// // startMarker.showInfoWindow();
+//
+// endMarker = mAMap.addMarker((new MarkerOptions()).position(endPoint)
+// .icon(getEndBitmapDescriptor()).title("\u7EC8\u70B9"));
+// // mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(startPoint,
+// // getShowRouteZoom()));
+// }
+//
+// /**
+// * 移动镜头到当前的视角。
+// *
+// * @since V2.1.0
+// */
+// public void zoomToSpan() {
+// if (startPoint != null) {
+// if (mAMap == null)
+// return;
+// try {
+// LatLngBounds bounds = getLatLngBounds();
+// mAMap.animateCamera(CameraUpdateFactory
+// .newLatLngBounds(bounds, 50));
+// } catch (Throwable e) {
+// e.printStackTrace();
+// }
+// }
+// }
+//
+// protected LatLngBounds getLatLngBounds() {
+// LatLngBounds.Builder b = LatLngBounds.builder();
+// b.include(new LatLng(startPoint.latitude, startPoint.longitude));
+// b.include(new LatLng(endPoint.latitude, endPoint.longitude));
+// for (Polyline polyline : allPolyLines) {
+// for (LatLng point : polyline.getPoints()) {
+// b.include(point);
+// }
+// }
+// return b.build();
+// }
+//
+// /**
+// * 路段节点图标控制显示接口。
+// *
+// * @param visible true为显示节点图标,false为不显示。
+// * @since V2.3.1
+// */
+// public void setNodeIconVisibility(boolean visible) {
+// try {
+// nodeIconVisible = visible;
+// if (this.stationMarkers != null && this.stationMarkers.size() > 0) {
+// for (int i = 0; i < this.stationMarkers.size(); i++) {
+// this.stationMarkers.get(i).setVisible(visible);
+// }
+// }
+// } catch (Throwable e) {
+// e.printStackTrace();
+// }
+// }
+//
+// protected void addStationMarker(MarkerOptions options) {
+// if (options == null) {
+// return;
+// }
+// Marker marker = mAMap.addMarker(options);
+// if (marker != null) {
+// stationMarkers.add(marker);
+// }
+//
+// }
+//
+// protected void addPolyLine(PolylineOptions options) {
+// if (options == null) {
+// return;
+// }
+// Polyline polyline = mAMap.addPolyline(options);
+// if (polyline != null) {
+// allPolyLines.add(polyline);
+// }
+// }
+//
+// protected float getRouteWidth() {
+// return 18f;
+// }
+//
+// protected int getWalkColor() {
+// return Color.parseColor("#6db74d");
+// }
+//
+// /**
+// * 自定义路线颜色。
+// * return 自定义路线颜色。
+// *
+// * @since V2.2.1
+// */
+// protected int getBusColor() {
+// return Color.parseColor("#537edc");
+// }
+//
+// protected int getDriveColor() {
+// return Color.parseColor("#537edc");
+// }
+//
+// // protected int getShowRouteZoom() {
+// // return 15;
+// // }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverlayHelper.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverlayHelper.java
new file mode 100644
index 0000000000..4b0428c501
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/overlay/RouteOverlayHelper.java
@@ -0,0 +1,97 @@
+//package com.mogo.map.impl.custom.overlay;
+//
+//import android.content.Context;
+//
+//import com.amap.api.services.core.LatLonPoint;
+//import com.amap.api.services.route.DriveRouteResult;
+//import com.amap.api.services.route.RouteSearch;
+//import com.mogo.map.MogoLatLng;
+//import com.mogo.map.impl.custom.AMapWrapper;
+//import com.mogo.map.impl.custom.InterceptorHandler;
+//import com.mogo.utils.logger.Logger;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//
+///**
+// * @author congtaowang
+// * @since 2020-01-08
+// *
+// * 给定起点、途经点,规划路径
+// */
+//public class RouteOverlayHelper {
+//
+// private static final String TAG = "RouteOverlayHelper";
+//
+// private static volatile RouteOverlayHelper sInstance;
+//
+// private DrivingRouteOverlay mDrivingRouteOverlay;
+//
+// private RouteOverlayHelper() {
+// }
+//
+// public static RouteOverlayHelper getInstance() {
+// if ( sInstance == null ) {
+// synchronized ( RouteOverlayHelper.class ) {
+// if ( sInstance == null ) {
+// sInstance = new RouteOverlayHelper();
+// }
+// }
+// }
+// return sInstance;
+// }
+//
+// public synchronized void release() {
+// sInstance = null;
+// }
+//
+// public void addRouteWay( final Context context, MogoLatLng start, MogoLatLng end, List< MogoLatLng > wayPoints ) {
+// if ( wayPoints == null || wayPoints.isEmpty() ) {
+// return;
+// }
+// if ( InterceptorHandler.getInstance().ignoreDrawRouteOverlay( context ) ) {
+// Logger.w( TAG, "naviing." );
+// return;
+// }
+//
+// if ( mDrivingRouteOverlay != null ) {
+// mDrivingRouteOverlay.removeFromMap();
+// }
+//
+// RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo( new LatLonPoint( start.lat, start.lng ),
+// new LatLonPoint( end.lat, end.lng ) );
+// final List< LatLonPoint > ways = new ArrayList<>();
+// for ( MogoLatLng wayPoint : wayPoints ) {
+// ways.add( new LatLonPoint( wayPoint.lat, wayPoint.lng ) );
+// }
+// RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery( fromAndTo, 0, ways, null, "" );
+// RouteSearch routeSearch = new RouteSearch( context );
+// routeSearch.calculateDriveRouteAsyn( query );
+// routeSearch.setRouteSearchListener( new OnRouteSearchListenerAdapter() {
+// @Override
+// public void onDriveRouteSearched( DriveRouteResult driveRouteResult, int i ) {
+// super.onDriveRouteSearched( driveRouteResult, i );
+// if ( i != 1000 ) {
+// Logger.e( TAG, "算路失败. code = %d", i );
+// return;
+// }
+// mDrivingRouteOverlay = new DrivingRouteOverlay( context, AMapWrapper.getAMap(),
+// driveRouteResult.getPaths().get( 0 ),
+// driveRouteResult.getStartPos(),
+// driveRouteResult.getTargetPos(),
+// null );
+// mDrivingRouteOverlay.setNodeIconVisibility( false );
+// mDrivingRouteOverlay.setIsColorfulline( false );
+// mDrivingRouteOverlay.addToMap();
+// mDrivingRouteOverlay.zoomToSpan();
+// }
+// } );
+// }
+//
+// public void removeAll() {
+// if ( mDrivingRouteOverlay != null ) {
+// mDrivingRouteOverlay.removeFromMap();
+// }
+// mDrivingRouteOverlay = null;
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/GeocodeSearchClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/GeocodeSearchClient.java
new file mode 100644
index 0000000000..8cef6cd91b
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/GeocodeSearchClient.java
@@ -0,0 +1,110 @@
+package com.mogo.map.impl.custom.search;
+
+import android.content.Context;
+
+import com.mogo.map.exception.MogoMapException;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.search.geo.IMogoGeoSearch;
+import com.mogo.map.search.geo.IMogoGeoSearchListener;
+import com.mogo.map.search.geo.MogoGeocodeAddress;
+import com.mogo.map.search.geo.MogoRegeocodeAddress;
+import com.mogo.map.search.geo.query.MogoGeocodeQuery;
+import com.mogo.map.search.geo.query.MogoRegeocodeQuery;
+import com.zhidaoauto.map.sdk.open.exception.MapException;
+import com.zhidaoauto.map.sdk.open.query.GeocodeAddress;
+import com.zhidaoauto.map.sdk.open.query.GeocodeResult;
+import com.zhidaoauto.map.sdk.open.query.GeocodeSearch;
+import com.zhidaoauto.map.sdk.open.query.OnGeocodeSearchListener;
+import com.zhidaoauto.map.sdk.open.query.RegeocodeAddress;
+import com.zhidaoauto.map.sdk.open.query.RegeocodeResult;
+import com.zhidaoauto.map.sdk.open.query.RegeocodeQuery;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-19
+ *
+ * 地理编码/逆地理编码自研实现
+ */
+public class GeocodeSearchClient implements IMogoGeoSearch, OnGeocodeSearchListener {
+
+ private GeocodeSearch mClient;
+ private IMogoGeoSearchListener mListener;
+
+ public GeocodeSearchClient( Context context ) {
+ mClient = new GeocodeSearch( context );
+ mClient.setOnGeocodeSearchListener( this );
+ }
+
+ @Override
+ public void setGeoSearchListener( IMogoGeoSearchListener listener ) {
+ mListener = listener;
+ }
+
+ @Override
+ public MogoRegeocodeAddress getFromLocation( MogoRegeocodeQuery query ) throws MogoMapException {
+ try {
+ RegeocodeQuery regeocodeQuery = ObjectUtils.fromMogo(query);
+ RegeocodeAddress regeocodeAddress = mClient.getFromLocation(regeocodeQuery);
+ return ObjectUtils.fromAMap( regeocodeAddress );
+ } catch ( Exception e ) {
+ throw new MogoMapException( e );
+ }
+ }
+
+ @Override
+ public List< MogoGeocodeAddress > getFromLocationName( MogoGeocodeQuery query ) throws MogoMapException {
+ try {
+ List geocodeAddress = mClient.getFromLocationName( ObjectUtils.fromMogo( query ) );
+ if ( geocodeAddress != null ) {
+ List< MogoGeocodeAddress > mogoGeocodeAddresses = new ArrayList<>();
+ for ( GeocodeAddress address : geocodeAddress ) {
+ MogoGeocodeAddress mogoGeocodeAddress = ObjectUtils.fromAMap( address );
+ if ( mogoGeocodeAddress != null ) {
+ mogoGeocodeAddresses.add( mogoGeocodeAddress );
+ }
+ }
+ return mogoGeocodeAddresses;
+ }
+ return new ArrayList<>();
+ } catch ( Exception e ) {
+ throw new MogoMapException( e );
+ }
+ }
+
+ @Override
+ public void getFromLocationAsyn( MogoRegeocodeQuery query ) {
+ if ( mClient != null ) {
+ mClient.getFromLocationAsyn( ObjectUtils.fromMogo( query ) );
+ }
+ }
+
+ @Override
+ public void getFromLocationNameAsyn( MogoGeocodeQuery query ) {
+ if ( mClient != null ) {
+ mClient.getFromLocationNameAsyn( ObjectUtils.fromMogo( query ) );
+ }
+ }
+
+ @Override
+ public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i ) {
+ if ( mListener != null ) {
+ mListener.onRegeocodeSearched( ObjectUtils.fromAMap( regeocodeResult ) );
+ }
+ }
+
+ @Override
+ public void onGeocodeSearched(GeocodeResult geocodeResult, int i ) {
+ if ( mListener != null ) {
+ mListener.onGeocodeSearched( ObjectUtils.fromAMap( geocodeResult ) );
+ }
+ }
+
+ @Override
+ public void destroy() {
+ mClient = null;
+ mListener = null;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/InputtipsSearch.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/InputtipsSearch.java
new file mode 100644
index 0000000000..e6b8e50f1b
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/InputtipsSearch.java
@@ -0,0 +1,87 @@
+package com.mogo.map.impl.custom.search;
+
+import android.content.Context;
+
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.search.inputtips.IMogoInputtipsListener;
+import com.mogo.map.search.inputtips.IMogoInputtipsSearch;
+import com.mogo.map.search.inputtips.MogoTip;
+import com.mogo.map.search.inputtips.query.MogoInputtipsQuery;
+import com.mogo.utils.logger.Logger;
+import com.zhidaoauto.map.sdk.open.query.Inputtips;
+import com.zhidaoauto.map.sdk.open.query.InputtipsListener;
+import com.zhidaoauto.map.sdk.open.query.InputtipsQuery;
+import com.zhidaoauto.map.sdk.open.query.Tip;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-20
+ *
+ * 自研地图 inputtips搜索实现
+ */
+public class InputtipsSearch implements IMogoInputtipsSearch, InputtipsListener {
+
+ private static final String TAG = "InputtipsSearch";
+
+ private Inputtips mClient;
+ private InputtipsQuery mQuery;
+ private IMogoInputtipsListener mListener;
+
+ public InputtipsSearch(Context context, MogoInputtipsQuery query) {
+ mQuery = ObjectUtils.fromMogo(query);
+ mClient = new Inputtips(context, mQuery);
+ mClient.setInputtipsListener(this);
+ }
+
+ @Override
+ public void setQuery(MogoInputtipsQuery query) {
+ this.mQuery = ObjectUtils.fromMogo(query);
+ }
+
+ @Override
+ public void setInputtipsListener(IMogoInputtipsListener listener) {
+ this.mListener = listener;
+ }
+
+ @Override
+ public void requestInputtipsAsyn() {
+ if (mClient != null) {
+ mClient.requestInputtipsAsyn();
+ }
+ }
+
+ @Override
+ public void onGetInputtips(List list, int i) {
+ if (i == 0) {
+ if (mListener != null) {
+ mListener.onGetInputtips(getResult(list));
+ }
+ } else {
+ Logger.e(TAG, "errorcode = " + i);
+ }
+ }
+
+ private List getResult(List tips) {
+ List mogoTips = new ArrayList<>();
+ if (tips != null) {
+ //只添加有坐标的结果
+ for (Tip tip : tips) {
+ MogoTip mogoTip = ObjectUtils.fromAMap(tip);
+ if (mogoTip != null && mogoTip.getPoint() != null) {
+ mogoTips.add(mogoTip);
+ }
+ }
+ }
+ return mogoTips;
+ }
+
+ @Override
+ public void destroy() {
+ mClient = null;
+ mListener = null;
+ mQuery = null;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/PoiSearchClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/PoiSearchClient.java
new file mode 100644
index 0000000000..17728a6bba
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/PoiSearchClient.java
@@ -0,0 +1,139 @@
+package com.mogo.map.impl.custom.search;
+
+import android.content.Context;
+
+import com.mogo.map.exception.MogoMapException;
+import com.mogo.map.impl.custom.utils.ObjectUtils;
+import com.mogo.map.search.geo.MogoPoiItem;
+import com.mogo.map.search.poisearch.IMogoPoiSearch;
+import com.mogo.map.search.poisearch.IMogoPoiSearchListener;
+import com.mogo.map.search.poisearch.MogoPoiResult;
+import com.mogo.map.search.poisearch.MogoSearchBound;
+import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery;
+import com.mogo.utils.logger.Logger;
+import com.zhidaoauto.map.sdk.open.query.OnPoiSearchListener;
+import com.zhidaoauto.map.sdk.open.query.PoiItem;
+import com.zhidaoauto.map.sdk.open.query.PoiSearch;
+import com.zhidaoauto.map.sdk.open.query.PoiSearchResult;
+import com.zhidaoauto.map.sdk.open.query.PoiCategory;
+
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-24
+ *
+ * poi搜索自研实现
+ *
+ * 错误码对照表:https://lbs.amap.com/api/android-sdk/guide/map-tools/error-code
+ */
+public class PoiSearchClient implements IMogoPoiSearch, OnPoiSearchListener {
+
+ private static final String TAG = "PoiSearchClient";
+
+ private MogoPoiSearchQuery mQuery;
+ private PoiSearch mClient;
+ private IMogoPoiSearchListener mListener;
+ private MogoSearchBound mBound;
+
+ public PoiSearchClient( Context context, MogoPoiSearchQuery query ) {
+ mQuery = query;
+ mClient = new PoiSearch( context, ObjectUtils.fromMogo( mQuery ) );
+ mClient.setOnPoiSearchListener( this );
+ }
+
+ @Override
+ public void setPoiSearchListener( IMogoPoiSearchListener listener ) {
+ mListener = listener;
+ }
+
+ @Override
+ public void searchPOIAsyn() {
+ if ( mClient != null ) {
+ mClient.searchPOIAsyn();
+ }
+ }
+
+ @Override
+ public MogoPoiResult searchPOI() throws MogoMapException {
+ if ( mClient != null ) {
+ try {
+ PoiSearchResult search = mClient.searchPOI();
+ return ObjectUtils.fromAMap( search );
+ } catch ( Exception e ) {
+ throw new MogoMapException( e );
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void setQuery( MogoPoiSearchQuery query ) {
+ mQuery = query;
+ if ( mClient != null ) {
+ mClient.setQuery( ObjectUtils.fromMogo( mQuery ) );
+ }
+ }
+
+ @Override
+ public MogoPoiItem searchPOIId( String poiId ) throws MogoMapException {
+ if ( mClient != null ) {
+ try {
+ PoiItem poiItem = mClient.searchPOIId( poiId );
+ return ObjectUtils.fromAMap( poiItem );
+ } catch ( Exception e ) {
+ throw new MogoMapException( e );
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void searchPOIIdAsyn( String poiId ) {
+ if ( mClient != null ) {
+ mClient.searchPOIIdAsyn( poiId );
+ }
+ }
+
+ @Override
+ public void setBound( MogoSearchBound bound ) {
+ mBound = bound;
+ if ( mClient != null ) {
+ mClient.setBound( ObjectUtils.fromMogo( mBound ) );
+ }
+ }
+
+ @Override
+ public void onPoiSearched( PoiSearchResult poiResult, int errorCode ) {
+ if ( errorCode != 0 ) {
+ Logger.e( TAG, "errorcode is %d", errorCode );
+ }
+ if ( mListener != null ) {
+ mListener.onPoiSearched( ObjectUtils.fromAMap( poiResult ), errorCode );
+ }
+ }
+
+ @Override
+ public void onPoiItemSearched( PoiItem poiItem, int errorCode ) {
+ if ( errorCode != 0 ) {
+ Logger.e( TAG, "errorcode is %d", errorCode );
+ }
+ if ( mListener != null ) {
+ mListener.onPoiItemSearched( ObjectUtils.fromAMap( poiItem ), errorCode );
+ }
+ }
+
+ @Override
+ public void destroy() {
+ mQuery = null;
+ mClient = null;
+ mListener = null;
+ mBound = null;
+ }
+
+ @Override
+ public void onPoiCategorySearched(@Nullable List list, int errorCode) {
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/RoadSearchClient.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/RoadSearchClient.java
new file mode 100644
index 0000000000..9610ba22fb
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/search/RoadSearchClient.java
@@ -0,0 +1,45 @@
+package com.mogo.map.impl.custom.search;
+
+import android.content.Context;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.search.drive.IMogoRoadSearch;
+import com.mogo.map.search.drive.IMogoRoadSearchListener;
+import com.mogo.map.search.drive.MogoRoadSearchQuery;
+import com.mogo.utils.logger.Logger;
+
+/**
+ * @author congtaowang
+ * @since 2020/6/1
+ *
+ * 描述
+ */
+public class RoadSearchClient implements IMogoRoadSearch {
+
+ private static final String TAG = "DriveSearchClient";
+
+ private IMogoRoadSearchListener mListener;
+
+ @Override
+ public void searchRoadPath( Context context,
+ MogoRoadSearchQuery query ) {
+
+ }
+
+ private boolean checkPoint( MogoLatLng latLng, String msg ) {
+ if ( latLng == null ) {
+ Logger.e( TAG, msg + " is null" );
+ return false;
+ }
+ if ( latLng.lat <= 0d || latLng.lon <= 0d ) {
+ Logger.e( TAG, msg + " is not a valid " );
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void setRoadPathSearchListener( IMogoRoadSearchListener listener ) {
+ mListener = listener;
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java
new file mode 100644
index 0000000000..a9d388951a
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/uicontroller/AMapUIController.java
@@ -0,0 +1,294 @@
+package com.mogo.map.impl.custom.uicontroller;
+
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.location.Location;
+import android.view.View;
+import android.view.animation.Interpolator;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.MogoMap;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.uicontroller.CarCursorOption;
+import com.mogo.map.uicontroller.EnumMapUI;
+import com.mogo.map.uicontroller.IMogoMapUIController;
+import com.mogo.map.uicontroller.MapCameraPosition;
+import com.mogo.map.uicontroller.MapControlResult;
+import com.mogo.utils.logger.Logger;
+
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-26
+ *
+ * 描述
+ */
+public class AMapUIController implements IMogoMapUIController {
+
+ private static final String TAG = "AMapUIController";
+
+ private static volatile AMapUIController sInstance;
+
+ private IMogoMapUIController mClient;
+
+ private AMapUIController() {
+ }
+
+ public static AMapUIController getInstance() {
+ if (sInstance == null) {
+ synchronized (AMapUIController.class) {
+ if (sInstance == null) {
+ sInstance = new AMapUIController();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public void initClient(IMogoMapUIController client) {
+ this.mClient = client;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ @Override
+ public void setTrafficEnabled(boolean visible) {
+ if (mClient != null) {
+ mClient.setTrafficEnabled(visible);
+ }
+ }
+
+ @Override
+ public MapControlResult changeZoom( boolean zoom) {
+ if (mClient != null) {
+ return mClient.changeZoom(zoom);
+ }
+ return MapControlResult.ERROR;
+ }
+
+ @Override
+ public MapControlResult changeZoom(float zoom) {
+ if (mClient != null) {
+ return mClient.changeZoom(zoom);
+ }
+ return MapControlResult.ERROR;
+ }
+
+ @Override
+ public void changeMapMode(EnumMapUI mode) {
+ if (mClient != null) {
+ mClient.changeMapMode(mode);
+ }
+ }
+
+ @Override
+ public void moveToCenter(MogoLatLng latLng, boolean animate) {
+ if (mClient != null) {
+ mClient.moveToCenter(latLng, animate);
+ }
+ }
+
+ @Override
+ public void showMyLocation(boolean visible) {
+ if (mClient != null) {
+ mClient.showMyLocation(visible);
+ }
+ }
+
+ @Override
+ public void showMyLocation( View view ) {
+ if ( mClient != null ) {
+ mClient.showMyLocation( view );
+ }
+ }
+
+ @Override
+ public void recoverLockMode() {
+ if (mClient != null) {
+ mClient.recoverLockMode();
+ }
+ }
+
+ @Override
+ public void loseLockMode() {
+ if ( mClient != null ) {
+ mClient.loseLockMode();
+ }
+ }
+
+ @Override
+ public void setLockZoom(int var1) {
+ if (mClient != null) {
+ mClient.setLockZoom(var1);
+ }
+ }
+
+ @Override
+ public void displayOverview( Rect bounds ) {
+ if (mClient != null) {
+ mClient.displayOverview(bounds);
+ }
+ }
+
+ @Override
+ public float getScalePerPixel() {
+ if (mClient != null) {
+ return mClient.getScalePerPixel();
+ }
+ return 0;
+ }
+
+ @Override
+ public float getZoomLevel() {
+ if (mClient != null) {
+ return mClient.getZoomLevel();
+ }
+ return 0;
+ }
+
+ @Override
+ public MogoLatLng getCameraNorthEastPosition() {
+ if (mClient != null) {
+ return mClient.getCameraNorthEastPosition();
+ }
+ return null;
+ }
+
+ @Override
+ public MogoLatLng getCameraSouthWestPosition() {
+ if (mClient != null) {
+ return mClient.getCameraSouthWestPosition();
+ }
+ return null;
+ }
+
+ @Override public MogoLatLng getWindowCenterLocation() {
+ if (mClient != null) {
+ return mClient.getWindowCenterLocation();
+ }
+ return null;
+ }
+
+ @Override
+ public void setPointToCenter(double mapCenterX, double mapCenterY) {
+ if (mClient != null) {
+ mClient.setPointToCenter(mapCenterX, mapCenterY);
+ }
+ }
+
+ @Override
+ public Point getLocationPointInScreen(MogoLatLng latLng) {
+ if (mClient != null) {
+ return mClient.getLocationPointInScreen(latLng);
+ }
+ return null;
+ }
+
+ @Override
+ public MogoLatLng getLocationMogoLatLngInScreen(Point point) {
+ if (mClient != null) {
+ return mClient.getLocationMogoLatLngInScreen(point);
+ }
+ return null;
+ }
+
+ @Override
+ public void startJumpAnimation(IMogoMarker marker, float high, Interpolator interpolator,
+ long duration) {
+ if (mClient != null) {
+ mClient.startJumpAnimation(marker, high, interpolator, duration);
+ }
+ }
+
+ @Override
+ public void setRenderFps(int fps) {
+ if (mClient != null) {
+ mClient.setRenderFps(fps);
+ }
+ }
+
+ @Override
+ public void showBounds( String tag, MogoLatLng carPosition, List< MogoLatLng > lonLats, Rect bound, boolean lockCarPosition ) {
+ if ( mClient != null ) {
+ mClient.showBounds( tag, carPosition, lonLats, bound, lockCarPosition );
+ }
+ }
+
+ @Override
+ public void forceRender() {
+ if (mClient != null) {
+ mClient.forceRender();
+ }
+ }
+
+ @Override
+ public float calculateLineDistance( MogoLatLng p1, MogoLatLng p2 ) throws Exception {
+ if ( mClient != null ) {
+ return mClient.calculateLineDistance( p1, p2 );
+ }
+ return 0;
+ }
+
+ @Override
+ public EnumMapUI getCurrentUiMode() {
+ if ( mClient != null ) {
+ return mClient.getCurrentUiMode();
+ }
+ return null;
+ }
+
+ @Override
+ public void changeMyLocation( Location location ) {
+ if ( mClient != null ) {
+ mClient.changeMyLocation( location );
+ }
+ }
+
+ @Override
+ public boolean isCarLocked() {
+ if ( mClient != null ) {
+ return mClient.isCarLocked();
+ }
+ return false;
+ }
+
+ @Override
+ public void setCarCursorOption( CarCursorOption option ) {
+ if ( mClient != null ) {
+ mClient.setCarCursorOption( option );
+ }
+ }
+
+ @Override
+ public MapCameraPosition getMapCameraPosition() {
+ if ( mClient != null ) {
+ return mClient.getMapCameraPosition();
+ }
+ return null;
+ }
+
+ @Override
+ public void changeBearing( float bearing ) {
+ if ( mClient != null ) {
+ mClient.changeBearing( bearing );
+ }
+ }
+
+ @Override
+ public void setAnchorScale( float x, float y ) {
+
+ }
+
+ @Override
+ public void emphasizeMyLocation() {
+
+ }
+
+ @Override
+ public void setAnchorRate( float rate ) {
+
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/IconTypeUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/IconTypeUtils.java
new file mode 100644
index 0000000000..dc243f78e4
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/IconTypeUtils.java
@@ -0,0 +1,95 @@
+package com.mogo.map.impl.custom.utils;
+
+import android.content.Context;
+import android.util.SparseArray;
+
+
+/**
+ * @author congtaowang
+ * @since 2019-09-29
+ *
+ * 描述
+ */
+public class IconTypeUtils {
+
+ private static SparseArray< String > sIconName = new SparseArray<>();
+
+ static {
+// sIconName.put( IconType.ARRIVED_DESTINATION, "到达目的地" );
+// sIconName.put( IconType.ARRIVED_SERVICE_AREA, "到达服务区" );
+// sIconName.put( IconType.ARRIVED_TOLLGATE, "到达收费站" );
+// sIconName.put( IconType.ARRIVED_TUNNEL, "到达隧道" );
+// sIconName.put( IconType.ARRIVED_WAYPOINT, "到达途经点" );
+// sIconName.put( IconType.BRIDGE, "通过桥" );
+// sIconName.put( IconType.BY_ELEVATOR, "电梯换层" );
+// sIconName.put( IconType.BY_ESCALATOR, "扶梯换层" );
+// sIconName.put( IconType.BY_STAIR, "楼梯换层" );
+// sIconName.put( IconType.CABLEWAY, "通过索道" );
+// sIconName.put( IconType.CHANNEL, "通过通道" );
+// sIconName.put( IconType.CROSSWALK, "通过人行横道" );
+// sIconName.put( IconType.CRUISE_ROUTE, "通过游船路线" );
+// sIconName.put( IconType.DEFAULT, "自车" );
+// sIconName.put( IconType.ENTER_BUILDING, "进入建筑物" );
+// sIconName.put( IconType.ENTER_ROUNDABOUT, "进入环岛" );
+// sIconName.put( IconType.ENTRY_LEFT_RING, "进入环岛" );
+// sIconName.put( IconType.ENTRY_LEFT_RING_CONTINUE, "绕环岛直行" );
+// sIconName.put( IconType.ENTRY_LEFT_RING_LEFT, "绕环岛左转" );
+// sIconName.put( IconType.ENTRY_LEFT_RING_RIGHT, "绕环岛右转" );
+// sIconName.put( IconType.ENTRY_LEFTRINGU_TURN, "绕环岛调头" );
+// sIconName.put( IconType.ENTRY_RING_CONTINUE, "绕环岛直行" );
+// sIconName.put( IconType.ENTRY_RING_LEFT, "绕环岛左转" );
+// sIconName.put( IconType.ENTRY_RING_RIGHT, "绕环岛右转" );
+// sIconName.put( IconType.ENTRY_RING_UTURN, "绕环岛调头" );
+// sIconName.put( IconType.FERRY, "通过轮渡" );
+// sIconName.put( IconType.LADDER, "通过阶梯" );
+// sIconName.put( IconType.LEAVE_BUILDING, "离开建筑物" );
+// sIconName.put( IconType.LEAVE_LEFT_RING, "驶出环岛" );
+// sIconName.put( IconType.LEFT, "左转" );
+// sIconName.put( IconType.LEFT_BACK, "左后" );
+// sIconName.put( IconType.LEFT_FRONT, "左前方" );
+// sIconName.put( IconType.LEFT_TURN_AROUND, "左转掉头" );
+// sIconName.put( IconType.LIFT, "通过直梯" );
+// sIconName.put( IconType.LOW_CROSS, "通过普通路口" );
+// sIconName.put( IconType.LOW_TRAFFIC_CROSS, "红绿灯路口" );
+// sIconName.put( IconType.NONE, "无定义" );
+// sIconName.put( IconType.OUT_ROUNDABOUT, "驶出环岛" );
+// sIconName.put( IconType.OVERPASS, "通过过街天桥" );
+// sIconName.put( IconType.PARK, "通过公园" );
+// sIconName.put( IconType.RIGHT, "右转" );
+// sIconName.put( IconType.RIGHT_BACK, "右后方" );
+// sIconName.put( IconType.RIGHT_FRONT, "右前方" );
+// sIconName.put( IconType.SIGHTSEEING_BUSLINE, "通过观光车路线" );
+// sIconName.put( IconType.SKY_CHANNEL, "通过空中通道" );
+// sIconName.put( IconType.SLIDEWAY, "通过滑道" );
+// sIconName.put( IconType.SLOPE, "通过斜坡" );
+// sIconName.put( IconType.SPECIAL_CONTINUE, "顺行" );
+// sIconName.put( IconType.SQUARE, "通过广场" );
+// sIconName.put( IconType.STAIRCASE, "通过扶梯" );
+// sIconName.put( IconType.STRAIGHT, "直行" );
+// sIconName.put( IconType.SUBWAY, "通过地铁通道" );
+// sIconName.put( IconType.U_TURN_RIGHT, "右转掉头" );
+// sIconName.put( IconType.UNDERPASS, "通过地下通道" );
+// sIconName.put( IconType.WALK_ROAD, "通过行人道路" );
+ }
+
+ private static int lastIconType = 0;
+ private static int lastIconResId = 0;
+
+ public static String getNameByIconType( int iconType ) {
+ return sIconName.get( iconType );
+ }
+
+ public static int getResIdByIconType( Context context, int iconType ) {
+ try {
+ if ( iconType == lastIconType ) {
+ return lastIconResId;
+ }
+ int target = context.getResources().getIdentifier( "ic_" + iconType, "drawable", context.getPackageName() );
+ lastIconType = iconType;
+ lastIconResId = target;
+ return target;
+ } catch ( Exception e ) {
+ return -1;
+ }
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/MapStyleUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/MapStyleUtils.java
new file mode 100644
index 0000000000..db40a040da
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/MapStyleUtils.java
@@ -0,0 +1,71 @@
+//package com.mogo.map.impl.custom.utils;
+//
+//import android.graphics.Bitmap;
+//import android.graphics.Color;
+//
+//import com.amap.api.navi.model.RouteOverlayOptions;
+//import com.mogo.commons.AbsMogoApplication;
+//import com.mogo.map.impl.custom.R;
+//
+///**
+// * @author congtaowang
+// * @since 2019-10-04
+// *
+// * 描述
+// */
+//public class MapStyleUtils {
+//
+// enum ColorEnum {
+// route_overlay_line_normal( Color.parseColor( "#00C96D" ) ),
+// route_overlay_line_unknown( Color.parseColor( "#3CD26E" ) ),
+// route_overlay_line_slow( Color.parseColor( "#ECC71F" ) ),
+// route_overlay_line_very_traffic( Color.parseColor( "#E16262" ) ),
+// route_overlay_line_traffic( Color.parseColor( "#E88181" ) ),
+// transparent( Color.parseColor( "#00000000" ) ),
+// light_gray( Color.parseColor( "#334BD089" ) );
+//
+// private int color;
+//
+// ColorEnum( int color ) {
+// this.color = color;
+// }
+//
+// public int getColor() {
+// return color;
+// }
+// }
+//
+// public static RouteOverlayOptions getRouteOverlayOptions() {
+// RouteOverlayOptions options = new RouteOverlayOptions();
+// // 设置导航线路的宽度
+// options.setLineWidth( AbsMogoApplication.getApp().getResources().getDimension(R.dimen.path_width) );
+//// // 设置交通状况情况良好下的纹理位图
+//// options.setSmoothTraffic( colorToBitmap( ColorEnum.route_overlay_line_normal.getColor() ) );
+//// // 设置路线的图标
+//// options.setNormalRoute( colorToBitmap( ColorEnum.route_overlay_line_normal.getColor() ) );
+//// // 设置交通状况未知下的纹理位图
+//// options.setUnknownTraffic( colorToBitmap( ColorEnum.route_overlay_line_unknown.getColor() ) );
+//// // 设置交通状况迟缓下的纹理位图
+//// options.setSlowTraffic( colorToBitmap( ColorEnum.route_overlay_line_slow.getColor() ) );
+//// // 设置交通状况非常拥堵下的纹理位图
+//// options.setVeryJamTraffic( colorToBitmap( ColorEnum.route_overlay_line_very_traffic.getColor() ) );
+//// // 设置交通状况拥堵下的纹理位图
+//// options.setJamTraffic( colorToBitmap( ColorEnum.route_overlay_line_traffic.getColor() ) );
+//// // 设置浮于道路上的『小箭头』图标的纹理位图
+//// options.setArrowOnTrafficRoute( colorToBitmap( ColorEnum.transparent.getColor() ) );
+// // 自定义走过路线纹理,默认走过路线置灰功能为关,需要在AMapNaviViewOptions.setAfterRouteAutoGray(boolean)打开,该方法才生效
+// options.setPassRoute( colorToBitmap( ColorEnum.light_gray.getColor() ) );
+//// // 设置路线虚线纹理
+//// options.setFairWayRes( colorToBitmap( ColorEnum.route_overlay_line_normal.getColor() ) );
+// options.setArrowColor( Color.parseColor( "#92C9FF" ) ); // 自研地图内部配置颜色
+// options.setArrowSideColor( Color.parseColor( "#4F9BF2" ) ); // 自研地图内部配置颜色
+// return options;
+// }
+//
+// public static Bitmap colorToBitmap( int color ) {
+// Bitmap.Config config = Bitmap.Config.ARGB_8888;
+// Bitmap bitmap = Bitmap.createBitmap( 1, 1, config );
+// bitmap.eraseColor( color );
+// return bitmap;
+// }
+//}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/MogoMapUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/MogoMapUtils.java
new file mode 100644
index 0000000000..bd5865b560
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/MogoMapUtils.java
@@ -0,0 +1,137 @@
+package com.mogo.map.impl.custom.utils;
+
+import android.util.Log;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.exception.MogoMapException;
+import com.zhidaoauto.map.sdk.open.camera.LatLngBounds;
+import com.zhidaoauto.map.sdk.open.query.LonLatPoint;
+
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2020-03-04
+ *
+ * 地图工具类
+ */
+public class MogoMapUtils {
+
+ private static final String TAG = "MogoMapUtils";
+
+ public static LatLngBounds getLatLngBounds(MogoLatLng carPosition, List< MogoLatLng > lonLats, boolean lockCarPosition ) throws Exception {
+
+ if ( lonLats == null || lonLats.isEmpty() ) {
+ throw new MogoMapException( "经纬度不能为null或空集合" );
+ }
+ LatLngBounds.Builder builder = new LatLngBounds.Builder();
+ for ( MogoLatLng lonLat : lonLats ) {
+ builder.include( ObjectUtils.fromMogo( lonLat ) );
+ }
+ if ( carPosition != null && !lockCarPosition ) {
+ builder.include( ObjectUtils.fromMogo( carPosition ) );
+ }
+ LatLngBounds latLngBounds = builder.build();
+ if ( !lockCarPosition ) {
+ return latLngBounds;
+ }
+
+ if ( carPosition == null ) {
+ throw new MogoMapException( "自车位置经纬度信息不能为空" );
+ }
+
+ if ( latLngBounds.getNortheast() == null && latLngBounds.getSouthwest() == null ) {
+ return null;
+ }
+
+ double south = 0.0;
+ double west = 0.0;
+
+ double east = 0.0;
+ double north = 0.0;
+
+ double dLat = 0.0;
+ double dLon = 0.0;
+
+ if ( latLngBounds.getNortheast() == null ) {
+ dLat = Math.abs( carPosition.lat - latLngBounds.getSouthwest().getLatitude() );
+ dLon = Math.abs( carPosition.lng - latLngBounds.getSouthwest().getLongitude() );
+ } else if ( latLngBounds.getSouthwest() == null ) {
+ dLat = Math.abs( carPosition.lat - latLngBounds.getNortheast().getLatitude() );
+ dLon = Math.abs( carPosition.lng - latLngBounds.getNortheast().getLongitude() );
+ } else {
+ final double dLat1 = Math.abs( carPosition.lat - latLngBounds.getSouthwest().getLatitude() );
+ final double dLon1 = Math.abs( carPosition.lng - latLngBounds.getSouthwest().getLongitude() );
+ final double dLat2 = Math.abs( carPosition.lat - latLngBounds.getNortheast().getLatitude() );
+ final double dLon2 = Math.abs( carPosition.lng - latLngBounds.getNortheast().getLongitude() );
+ dLat = dLat1 > dLat2 ? dLat1 : dLat2;
+ dLon = dLon1 > dLon2 ? dLon1 : dLon2;
+ }
+
+ west = carPosition.lat - dLat;
+ south = carPosition.lng + dLon;
+
+ east = carPosition.lat + dLat;
+ north = carPosition.lng - dLon;
+
+ if ( south == 0.0 || west == 0.0 || east == 0.0 || north == 0.0 ) {
+ return null;
+ }
+
+ if ( east < west ) {
+ double tmp = east;
+ east = west;
+ west = tmp;
+ }
+
+ if( north < south ){
+ double tmp = north;
+ north = south;
+ south = tmp;
+ }
+
+ return new LatLngBounds.Builder().include( new LonLatPoint( east, north ) ).include( new LonLatPoint( west, south ) ).build();
+ }
+
+ public static float calculateLineDistance(LonLatPoint var0, LonLatPoint var1) {
+ if (var0 != null && var1 != null) {
+ try {
+ double var2 = var0.getLongitude();
+ double var4 = var0.getLatitude();
+ double var6 = var1.getLongitude();
+ double var8 = var1.getLatitude();
+ var2 *= 0.01745329251994329D;
+ var4 *= 0.01745329251994329D;
+ var6 *= 0.01745329251994329D;
+ var8 *= 0.01745329251994329D;
+ double var10 = Math.sin(var2);
+ double var12 = Math.sin(var4);
+ double var14 = Math.cos(var2);
+ double var16 = Math.cos(var4);
+ double var18 = Math.sin(var6);
+ double var20 = Math.sin(var8);
+ double var22 = Math.cos(var6);
+ double var24 = Math.cos(var8);
+ double[] var28 = new double[3];
+ double[] var29 = new double[3];
+ var28[0] = var16 * var14;
+ var28[1] = var16 * var10;
+ var28[2] = var12;
+ var29[0] = var24 * var22;
+ var29[1] = var24 * var18;
+ var29[2] = var20;
+ return (float)(Math.asin(Math.sqrt((var28[0] - var29[0]) * (var28[0] - var29[0]) + (var28[1] - var29[1]) * (var28[1] - var29[1]) + (var28[2] - var29[2]) * (var28[2] - var29[2])) / 2.0D) * 1.27420015798544E7D);
+ } catch (Throwable var26) {
+ var26.printStackTrace();
+ return 0.0F;
+ }
+ } else {
+ try {
+ throw new Exception("非法坐标值");
+ } catch (Exception var27) {
+ var27.printStackTrace();
+ return 0.0F;
+ }
+ }
+ }
+}
diff --git a/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java
new file mode 100644
index 0000000000..b8f9f9b1ac
--- /dev/null
+++ b/libraries/map-custom/src/main/java/com/mogo/map/impl/custom/utils/ObjectUtils.java
@@ -0,0 +1,754 @@
+package com.mogo.map.impl.custom.utils;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.autonavi.nge.guidance.NaviInfo;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.map.navi.MogoCongestionInfo;
+import com.mogo.map.navi.MogoCongestionLink;
+import com.mogo.map.navi.MogoNaviInfo;
+import com.mogo.map.navi.MogoTraffic;
+import com.mogo.map.overlay.MogoPolylineOptions;
+import com.mogo.map.search.geo.MogoGeocodeAddress;
+import com.mogo.map.search.geo.MogoGeocodeResult;
+import com.mogo.map.search.geo.MogoPoiItem;
+import com.mogo.map.search.geo.MogoRegeocodeAddress;
+import com.mogo.map.search.geo.MogoRegeocodeResult;
+import com.mogo.map.search.geo.query.MogoGeocodeQuery;
+import com.mogo.map.search.geo.query.MogoRegeocodeQuery;
+import com.mogo.map.search.inputtips.MogoTip;
+import com.mogo.map.search.inputtips.query.MogoInputtipsQuery;
+import com.mogo.map.search.poisearch.MogoPoiResult;
+import com.mogo.map.search.poisearch.MogoSearchBound;
+import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery;
+import com.mogo.map.uicontroller.MapCameraPosition;
+import com.zhidaoauto.map.sdk.open.camera.CameraPosition;
+import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptor;
+import com.zhidaoauto.map.sdk.open.marker.BitmapDescriptorFactory;
+import com.zhidaoauto.map.sdk.open.marker.MarkerOptions;
+import com.zhidaoauto.map.sdk.open.poyline.PolylineOptions;
+import com.zhidaoauto.map.sdk.open.query.GeocodeAddress;
+import com.zhidaoauto.map.sdk.open.query.GeocodeQuery;
+import com.zhidaoauto.map.sdk.open.query.GeocodeResult;
+import com.zhidaoauto.map.sdk.open.query.InputtipsQuery;
+import com.zhidaoauto.map.sdk.open.query.LonLatPoint;
+import com.zhidaoauto.map.sdk.open.query.PoiItem;
+import com.zhidaoauto.map.sdk.open.query.PoiSearchItem;
+import com.zhidaoauto.map.sdk.open.query.PoiSearchResult;
+import com.zhidaoauto.map.sdk.open.query.Query;
+import com.zhidaoauto.map.sdk.open.query.RegeocodeAddress;
+import com.zhidaoauto.map.sdk.open.query.RegeocodeQuery;
+import com.zhidaoauto.map.sdk.open.query.RegeocodeResult;
+import com.zhidaoauto.map.sdk.open.query.SearchBound;
+import com.zhidaoauto.map.sdk.open.query.Tip;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-18
+ *
+ * 业务对象和实际对象转换
+ */
+public class ObjectUtils {
+
+ public static MarkerOptions fromMogo(MogoMarkerOptions opt ) {
+
+ if ( opt == null ) {
+ return null;
+ }
+ ArrayList descriptors = new ArrayList<>();
+ final ArrayList< Bitmap > icons = opt.getIcons();
+ if ( icons != null && !icons.isEmpty() ) {
+ for ( Bitmap icon : icons ) {
+ if ( icon == null || icon.isRecycled() ) {
+ continue;
+ }
+
+ descriptors.add( new BitmapDescriptor(icon) );
+ }
+ }
+ BitmapDescriptor descriptor = getBitmapDescriptorFromMogo( opt );
+
+ MarkerOptions markerOptions = new MarkerOptions()
+ .position( new LonLatPoint(opt.getLongitude(), opt.getLatitude() ) )
+ .markerIcon(descriptor )
+ .anchor( opt.getU(), opt.getV() )
+// .icons( descriptors )
+// .period( opt.getPeriod() )
+ .rotateAngle( opt.getRotate() )
+ .setFlat( opt.isFlat() )
+ .visible( opt.isVisible() )
+ .infoWindowEnable( opt.isInifoWindowEnable() )
+ .alpha( opt.getAlpha() )
+ .setGps( opt.isGps() )
+// .draggable( opt.isDraggable() )
+ .setInfoWindowOffset( opt.getOffsetX(), opt.getOffsetY() )
+ .zIndex( opt.getzIndex() );
+ if(!TextUtils.isEmpty(opt.getTitle())){
+ markerOptions.title(opt.getTitle());
+ }
+ if(!TextUtils.isEmpty(opt.getSnippet())){
+ markerOptions.snippet(opt.getSnippet());
+ }
+ return markerOptions;
+ }
+
+ private static BitmapDescriptor getBitmapDescriptorFromMogo( MogoMarkerOptions options ) {
+ if ( options == null ) {
+ return null;
+ }
+ Bitmap icon = options.getIcon();
+ if ( icon != null ) {
+ return BitmapDescriptorFactory.INSTANCE.fromBitmap( icon );
+ }
+ View view = options.getIconView();
+ if ( view != null ) {
+ return BitmapDescriptorFactory.INSTANCE.fromView( view );
+ }
+ return null;
+ }
+
+
+ public static MogoLocation fromLocation( com.zhidaoauto.map.sdk.open.location.MogoLocation aLocation ) {
+ if ( aLocation == null ) {
+ return null;
+ }
+ MogoLocation location = new MogoLocation();
+// location.setLocType( aLocation.getLocationType() );
+ location.setSpeed( aLocation.getSpeed() );
+ location.setLatitude( aLocation.getLat() );
+ location.setLongitude( aLocation.getLon() );
+ location.setAltitude( aLocation.getAltitude() );
+// location.setTime( aLocation.getTime() );
+// location.setBearing( aLocation.getBearing() );
+// location.setAccuracy( aLocation.getAccuracy() );
+// location.setCityCode( aLocation.getCityCode() );
+// location.setCityName( aLocation.getCity() );
+ location.setProvider( aLocation.getProvider() );
+// location.setAddress( aLocation.getAddress() );
+// location.setDistrict( aLocation.getDistrict() );
+// location.setProvince( aLocation.getProvince() );
+// location.setAdCode( aLocation.getAdCode() );
+// location.setLocationDetail( aLocation.getLocationDetail() );
+// location.setPoiName( aLocation.getPoiName() );
+// location.setAoiName( aLocation.getAoiName() );
+// location.setErrCode( aLocation.getErrorCode() );
+// location.setErrInfo( aLocation.getErrorInfo() );
+// location.setStreetNum( aLocation.getStreetNum() );
+// location.setDescription( aLocation.getDescription() );
+// location.setBuildingId( aLocation.getBuildingId() );
+// location.setFloor( aLocation.getFloor() );
+// location.setGpsAccuracyStatus( aLocation.getGpsAccuracyStatus() );
+// location.setSatellite( aLocation.getSatellites() );
+ return location;
+ }
+
+ public static LonLatPoint fromMogo( MogoLatLng latLng ) {
+ if ( latLng == null ) {
+ return null;
+ }
+ return new LonLatPoint( latLng.lon,latLng.lat);
+ }
+
+// public static NaviLatLng fromMogoAsNavi( MogoLatLng latLng ) {
+// if ( latLng == null ) {
+// return null;
+// }
+// return new NaviLatLng( latLng.lat, latLng.lng );
+// }
+
+// public static LatLng fromMogo2( MogoLatLng latLng ) {
+// if ( latLng == null ) {
+// return null;
+// }
+// return new LatLng( latLng.lat, latLng.lng );
+// }
+
+ public static MogoLatLng fromAMap( LonLatPoint point ) {
+ if ( point == null ) {
+ return null;
+ }
+ return new MogoLatLng( point.getLatitude(), point.getLongitude() );
+ }
+
+// public static MogoLatLng CameraPositionfromAMap( LatLng point ) {
+// if ( point == null ) {
+// return null;
+// }
+// return new MogoLatLng( point.latitude, point.longitude );
+// }
+
+ public static GeocodeQuery fromMogo( MogoGeocodeQuery query ) {
+ if ( query == null ) {
+ return null;
+ }
+ GeocodeQuery q = new GeocodeQuery( query.getLocationName(), query.getCity() );
+ return q;
+ }
+
+ public static RegeocodeQuery fromMogo(MogoRegeocodeQuery query ) {
+ if ( query == null ) {
+ return null;
+ }
+ RegeocodeQuery q = new RegeocodeQuery( fromMogo( query.getPoint() ), 1000 );
+ return q;
+ }
+
+// public static MogoAoiItem fromAMap( AoiItem amapItem ) {
+// if ( amapItem == null ) {
+// return null;
+// }
+// MogoAoiItem mogoAoiItem = new MogoAoiItem();
+// mogoAoiItem.setAdCode( amapItem.getAdCode() );
+// mogoAoiItem.setAoiArea( amapItem.getAoiArea() );
+// mogoAoiItem.setAoiCenterPoint( fromAMap( amapItem.getAoiCenterPoint() ) );
+// mogoAoiItem.setAoiId( amapItem.getAoiId() );
+// mogoAoiItem.setAoiName( amapItem.getAoiName() );
+// return mogoAoiItem;
+// }
+//
+// public static MogoBusinessArea fromAMap( BusinessArea amapItem ) {
+// if ( amapItem == null ) {
+// return null;
+// }
+// MogoBusinessArea mogoBusinessArea = new MogoBusinessArea();
+// mogoBusinessArea.setCenterPoint( fromAMap( amapItem.getCenterPoint() ) );
+// mogoBusinessArea.setName( amapItem.getName() );
+// return mogoBusinessArea;
+// }
+//
+//
+// public static MogoCrossroad fromAMap( Crossroad amapItem ) {
+// if ( amapItem == null ) {
+// return null;
+// }
+// MogoCrossroad mogoCrossroad = new MogoCrossroad();
+// mogoCrossroad.setDirection( amapItem.getDirection() );
+// mogoCrossroad.setDistance( amapItem.getDistance() );
+// mogoCrossroad.setFirstRoadId( amapItem.getFirstRoadId() );
+// mogoCrossroad.setFirstRoadName( amapItem.getFirstRoadName() );
+// mogoCrossroad.setSecondRoadId( amapItem.getSecondRoadId() );
+// mogoCrossroad.setSecondRoadName( amapItem.getSecondRoadName() );
+// return mogoCrossroad;
+// }
+
+ public static MogoGeocodeAddress fromAMap( GeocodeAddress address ) {
+ if ( address == null ) {
+ return null;
+ }
+ MogoGeocodeAddress mogoGeocodeAddress = new MogoGeocodeAddress();
+ mogoGeocodeAddress.setAdcode( address.getAdcode() );
+ mogoGeocodeAddress.setBuilding( address.getBuilding() );
+ mogoGeocodeAddress.setCity( address.getCity() );
+ mogoGeocodeAddress.setDistrict( address.getDistrict() );
+ mogoGeocodeAddress.setFormatAddress( address.getFormatAddress() );
+ mogoGeocodeAddress.setLatlng( fromAMap( address.getLonlat() ) );
+ mogoGeocodeAddress.setLevel( address.getLevel() );
+ mogoGeocodeAddress.setNeighborhood( address.getNeighborhood() );
+ mogoGeocodeAddress.setProvince( address.getProvince() );
+ mogoGeocodeAddress.setTownship( address.getTownship() );
+ return mogoGeocodeAddress;
+ }
+
+ public static MogoGeocodeResult fromAMap( GeocodeResult result ) {
+ if ( result == null || result.getGeocodeAddressList() == null ) {
+ return null;
+ }
+ MogoGeocodeResult mogoGeocodeResult = new MogoGeocodeResult();
+ final List< MogoGeocodeAddress > addresses = new ArrayList<>();
+ List< GeocodeAddress > list = result.getGeocodeAddressList();
+ for ( GeocodeAddress geocodeAddress : list ) {
+ final MogoGeocodeAddress mogoGeocodeAddress = fromAMap( geocodeAddress );
+ if ( mogoGeocodeAddress != null ) {
+ addresses.add( mogoGeocodeAddress );
+ }
+ }
+
+ mogoGeocodeResult.setAddresses( addresses );
+ return mogoGeocodeResult;
+ }
+
+// public static MogoIndoorData fromAMap( IndoorData data ) {
+// if ( data == null ) {
+// return null;
+// }
+// MogoIndoorData mogoIndoorData = new MogoIndoorData();
+// mogoIndoorData.setFloor( data.getFloor() );
+// mogoIndoorData.setFloorName( data.getFloorName() );
+// mogoIndoorData.setPoiId( data.getPoiId() );
+// return mogoIndoorData;
+// }
+//
+// public static MogoPhoto fromAMap( Photo photo ) {
+// if ( photo == null ) {
+// return null;
+// }
+// MogoPhoto mogoPhoto = new MogoPhoto();
+// mogoPhoto.setTitle( photo.getTitle() );
+// mogoPhoto.setUrl( photo.getUrl() );
+// return mogoPhoto;
+// }
+//
+// public static MogoPoiItemExtension fromAMap( PoiItemExtension poiItemExtension ) {
+// if ( poiItemExtension == null ) {
+// return null;
+// }
+// MogoPoiItemExtension mogoPoiItemExtension = new MogoPoiItemExtension();
+// mogoPoiItemExtension.setOpentime( poiItemExtension.getOpentime() );
+// mogoPoiItemExtension.setRating( poiItemExtension.getmRating() );
+// return mogoPoiItemExtension;
+// }
+//
+// public static MogoRegeocodeRoad fromAMap( RegeocodeRoad regeocodeRoad ) {
+// if ( regeocodeRoad == null ) {
+// return null;
+// }
+// MogoRegeocodeRoad mogoRegeocodeRoad = new MogoRegeocodeRoad();
+// mogoRegeocodeRoad.setDirection( regeocodeRoad.getDirection() );
+// mogoRegeocodeRoad.setDistance( regeocodeRoad.getDistance() );
+// mogoRegeocodeRoad.setId( regeocodeRoad.getId() );
+// mogoRegeocodeRoad.setName( regeocodeRoad.getName() );
+// mogoRegeocodeRoad.setPoint( fromAMap( regeocodeRoad.getLatLngPoint() ) );
+// return mogoRegeocodeRoad;
+// }
+//
+// public static MogoStreetNumber fromAMap( StreetNumber streetNumber ) {
+// if ( streetNumber == null ) {
+// return null;
+// }
+// MogoStreetNumber mogoStreetNumber = new MogoStreetNumber();
+// mogoStreetNumber.setDirection( streetNumber.getDirection() );
+// mogoStreetNumber.setDistance( streetNumber.getDistance() );
+// mogoStreetNumber.setLatLonPoint( fromAMap( streetNumber.getLatLonPoint() ) );
+// mogoStreetNumber.setNumber( streetNumber.getNumber() );
+// mogoStreetNumber.setStreet( streetNumber.getStreet() );
+// return mogoStreetNumber;
+// }
+
+// public static MogoSubPoiItem fromAMap( SubPoiItem subPoiItem ) {
+// if ( subPoiItem == null ) {
+// return null;
+// }
+// MogoSubPoiItem mogoSubPoiItem = new MogoSubPoiItem();
+// mogoSubPoiItem.setDistance( subPoiItem.getDistance() );
+// mogoSubPoiItem.setPoiId( subPoiItem.getPoiId() );
+// mogoSubPoiItem.setPoint( fromAMap( subPoiItem.getLatLonPoint() ) );
+// mogoSubPoiItem.setSnippet( subPoiItem.getSnippet() );
+// mogoSubPoiItem.setSubName( mogoSubPoiItem.getSubName() );
+// mogoSubPoiItem.setSubTypeDes( mogoSubPoiItem.getSubTypeDes() );
+// mogoSubPoiItem.setTitle( mogoSubPoiItem.getTitle() );
+// return mogoSubPoiItem;
+// }
+
+ public static MogoPoiItem fromAMap( PoiItem poiItem) {
+ if ( poiItem == null ) {
+ return null;
+ }
+ MogoPoiItem mogoPoiItem = new MogoPoiItem();
+ mogoPoiItem.setAdCode( poiItem.getAdCode() );
+ mogoPoiItem.setAdName( poiItem.getAdName() );
+ mogoPoiItem.setBusinessArea( poiItem.getBusinessArea() );
+ mogoPoiItem.setCityCode( poiItem.getCityCode() );
+ mogoPoiItem.setCityName( poiItem.getCityName() );
+ mogoPoiItem.setDirection( poiItem.getDirection() );
+ mogoPoiItem.setDistance( poiItem.getDistance() );
+ mogoPoiItem.setEmail( poiItem.getEmail() );
+ mogoPoiItem.setEnter( fromAMap( poiItem.getEnter() ) );
+ mogoPoiItem.setExit( fromAMap( poiItem.getExit() ) );
+// mogoPoiItem.setIndoorData( fromAMap( poiItem.getIndoorData() ) );
+ mogoPoiItem.setParkingType( poiItem.getParkingType() );
+// mogoPoiItem.setIndoorMap( poiItem.isIndoorMap() );
+// if ( poiItem.getPhotos() != null ) {
+// List< MogoPhoto > mogoPhotos = new ArrayList<>();
+// for ( Photo photo : poiItem.getPhotos() ) {
+// MogoPhoto mogoPhoto = fromAMap( photo );
+// if ( mogoPhoto != null ) {
+// mogoPhotos.add( mogoPhoto );
+// }
+// }
+// mogoPoiItem.setPhotos( mogoPhotos );
+// }
+// mogoPoiItem.setPoiExtension( fromAMap( poiItem.getPoiExtension() ) );
+ mogoPoiItem.setPoiId( poiItem.getPoiId() );
+ mogoPoiItem.setPoint( fromAMap( poiItem.getLonLatPoint() ) );
+ mogoPoiItem.setPostcode( poiItem.getPostcode() );
+ mogoPoiItem.setProvinceCode( poiItem.getProvinceCode() );
+ mogoPoiItem.setProvinceName( poiItem.getProvinceName() );
+ mogoPoiItem.setShopID( poiItem.getShopID() );
+ mogoPoiItem.setSnippet( poiItem.getSnippet() );
+// if ( poiItem.getSubPois() != null ) {
+// List< MogoSubPoiItem > mogoSubPoiItems = new ArrayList<>();
+// for ( SubPoiItem subPois : poiItem.getSubPois() ) {
+// MogoSubPoiItem mogoSubPoiItem = fromAMap( subPois );
+// if ( mogoPoiItem != null ) {
+// mogoSubPoiItems.add( mogoSubPoiItem );
+// }
+// }
+// mogoPoiItem.setSubPois( mogoSubPoiItems );
+// }
+ mogoPoiItem.setTel( poiItem.getTel() );
+ mogoPoiItem.setTypeCode( poiItem.getTypeCode() );
+ mogoPoiItem.setTitle( poiItem.getTitle() );
+ mogoPoiItem.setTypeDes( poiItem.getTypeDes() );
+ mogoPoiItem.setWebsite( poiItem.getWebsite() );
+ return mogoPoiItem;
+ }
+
+ public static MogoRegeocodeAddress fromAMap( RegeocodeAddress regeocodeAddress ) {
+ if ( regeocodeAddress == null ) {
+ return null;
+ }
+ MogoRegeocodeAddress mogoRegeocodeAddress = new MogoRegeocodeAddress();
+ mogoRegeocodeAddress.setAdCode( regeocodeAddress.getAdCode() );
+// if ( regeocodeAddress.getAois() != null ) {
+// List< MogoAoiItem > items = new ArrayList<>();
+// for ( AoiItem aois : regeocodeAddress.getAois() ) {
+// final MogoAoiItem mogoAoiItem = fromAMap( aois );
+// if ( mogoAoiItem != null ) {
+// items.add( mogoAoiItem );
+// }
+// }
+// mogoRegeocodeAddress.setAois( items );
+// }
+
+ mogoRegeocodeAddress.setBuilding( regeocodeAddress.getBuilding() );
+// if ( regeocodeAddress.getBusinessAreas() != null ) {
+// List< MogoBusinessArea > mogoBusinessAreas = new ArrayList<>();
+// for ( BusinessArea businessArea : regeocodeAddress.getBusinessAreas() ) {
+// MogoBusinessArea mogoBusinessArea = fromAMap( businessArea );
+// if ( mogoBusinessArea != null ) {
+// mogoBusinessAreas.add( mogoBusinessArea );
+// }
+// }
+// mogoRegeocodeAddress.setBusinessAreas( mogoBusinessAreas );
+// }
+
+ mogoRegeocodeAddress.setCity( regeocodeAddress.getCity() );
+ mogoRegeocodeAddress.setCityCode( regeocodeAddress.getCityCode() );
+ mogoRegeocodeAddress.setCountry( regeocodeAddress.getCountry() );
+// if ( regeocodeAddress.getCrossroads() != null ) {
+// List< MogoCrossroad > mogoCrossroads = new ArrayList<>();
+// for ( Crossroad crossroad : regeocodeAddress.getCrossroads() ) {
+//
+// MogoCrossroad mogoCrossroad = fromAMap( crossroad );
+// if ( mogoCrossroad != null ) {
+// mogoCrossroads.add( mogoCrossroad );
+// }
+// }
+// mogoRegeocodeAddress.setCrossroads( mogoCrossroads );
+// }
+ mogoRegeocodeAddress.setDistrict( regeocodeAddress.getDistrict() );
+ mogoRegeocodeAddress.setFormatAddress( regeocodeAddress.getFormatAddress() );
+ mogoRegeocodeAddress.setNeighborhood( regeocodeAddress.getNeighborhood() );
+ if ( regeocodeAddress.getPoiList() != null ) {
+ List< MogoPoiItem > mogoPoiItems = new ArrayList<>();
+ List list = regeocodeAddress.getPoiList();
+ for ( PoiItem pois : list ) {
+ MogoPoiItem mogoPoiItem = fromAMap( pois );
+ mogoPoiItems.add( mogoPoiItem );
+ }
+ mogoRegeocodeAddress.setPois( mogoPoiItems );
+ }
+ mogoRegeocodeAddress.setProvince( regeocodeAddress.getProvince() );
+// if ( regeocodeAddress.getRoads() != null ) {
+// List< MogoRegeocodeRoad > mogoRegeocodeRoads = new ArrayList<>();
+// for ( RegeocodeRoad road : regeocodeAddress.getRoads() ) {
+// MogoRegeocodeRoad mogoRegeocodeRoad = fromAMap( road );
+// if ( mogoRegeocodeRoad != null ) {
+// mogoRegeocodeRoads.add( mogoRegeocodeRoad );
+// }
+// }
+// mogoRegeocodeAddress.setRoads( mogoRegeocodeRoads );
+// }
+// mogoRegeocodeAddress.setStreetNumber( fromAMap( regeocodeAddress.getStreetNumber() ) );
+ mogoRegeocodeAddress.setTowncode( regeocodeAddress.getTowncode() );
+ mogoRegeocodeAddress.setTownship( regeocodeAddress.getTownship() );
+ return mogoRegeocodeAddress;
+ }
+
+ public static MogoRegeocodeResult fromAMap( RegeocodeResult regeocodeResult ) {
+ if ( regeocodeResult == null ) {
+ return null;
+ }
+ MogoRegeocodeResult mogoRegeocodeResult = new MogoRegeocodeResult();
+ mogoRegeocodeResult.setRegeocodeAddress( fromAMap( regeocodeResult.getRegeocodeAddress() ) );
+ return mogoRegeocodeResult;
+ }
+
+ public static InputtipsQuery fromMogo(MogoInputtipsQuery query ) {
+ if ( query == null ) {
+ return null;
+ }
+ InputtipsQuery inputtipsQuery = new InputtipsQuery( query.getKeyword(), query.getCity() );
+ inputtipsQuery.setCityLimit( query.isCityLimit() );
+ inputtipsQuery.setLocation( fromMogo( query.getLocation() ) );
+ inputtipsQuery.setType( query.getType() );
+ return inputtipsQuery;
+ }
+
+ public static MogoTip fromAMap( Tip tip ) {
+ if ( tip == null ) {
+ return null;
+ }
+ MogoTip mogoTip = new MogoTip();
+ mogoTip.setAdCode( tip.getAdcode() );
+ mogoTip.setAddress( tip.getAddress() );
+ mogoTip.setDistrict( tip.getDistrict() );
+ mogoTip.setName( tip.getName() );
+ mogoTip.setPoiID( tip.getPoiID() );
+ mogoTip.setPoint( fromAMap( tip.getLatPoint() ) );
+ mogoTip.setTypeCode( tip.getTypeCode() );
+ return mogoTip;
+ }
+
+// public static MogoPoi fromAMap( Poi poi ) {
+// if ( poi == null ) {
+// return null;
+// }
+// MogoPoi mogoPoi = new MogoPoi();
+// mogoPoi.setCoordinate( fromAMap( poi.getCoordinate() ) );
+// mogoPoi.setName( poi.getName() );
+// mogoPoi.setPoiId( poi.getPoiId() );
+// return mogoPoi;
+// }
+
+ public static MogoPoiSearchQuery fromAMap( Query query ) {
+ if ( query == null ) {
+ return null;
+ }
+ MogoPoiSearchQuery mogoPoiSearchQuery = new MogoPoiSearchQuery( query.getKeyword(), query.getCategory(), query.getCity() );
+// mogoPoiSearchQuery.setBuilding( query.getBuilding() );
+ mogoPoiSearchQuery.setCityLimit( query.getCityLimit() );
+ mogoPoiSearchQuery.setDistanceSort( query.getDistanceSort() );
+ mogoPoiSearchQuery.setLocation( fromAMap( query.getLocation() ) );
+ mogoPoiSearchQuery.setPageNum( query.getPageNum() );
+ mogoPoiSearchQuery.setPageSize( query.getPageSize() );
+ return mogoPoiSearchQuery;
+ }
+
+ public static Query fromMogo(MogoPoiSearchQuery query ) {
+ if ( query == null || query.getQuery() == null) {
+ return null;
+ }
+ Query psq = new Query(query.getQuery(), "", "");
+ String category = getCategory(query.getQuery());
+ if(!category.equals(""))
+ psq = new Query( "", "", getCategory(query.getQuery()));
+// psq.setBuilding( query.getBuilding() );
+ psq.setCityLimit( query.isCityLimit() );
+ psq.setDistanceSort( query.isDistanceSort() );
+ psq.setLocation( fromMogo( query.getLocation() ) );
+ psq.setPageNum( query.getPageNum() );
+ psq.setPageSize( query.getPageSize() );
+ return psq;
+ }
+
+ public static MogoSearchBound fromAMap( SearchBound bound ) {
+ if ( bound == null ) {
+ return null;
+ }
+ if ( bound.getShape() == SearchBound.BOUND_SHAPE ) {
+ return new MogoSearchBound( fromAMap( bound.getCenter() ), bound.getRange(), bound.isDistanceSort() );
+ } else if ( bound.getShape() == SearchBound.POLYGON_SHAPE ) {
+ return new MogoSearchBound( fromAMap( bound.getPolyGonList() ) );
+ } else if ( bound.getShape() == SearchBound.RECTANGLE_SHAPE ) {
+ return new MogoSearchBound( fromAMap( bound.getLowerLeft() ), fromAMap( bound.getUpperRight() ) );
+ }
+ return null;
+ }
+
+ public static List< MogoLatLng > fromAMap( List< LonLatPoint > latLngs ) {
+ if ( latLngs == null ) {
+ return null;
+ }
+ List< MogoLatLng > result = new ArrayList<>( latLngs.size() );
+ for ( LonLatPoint latLng : latLngs ) {
+ result.add( fromAMap( latLng ) );
+ }
+ return result;
+ }
+
+ public static List< LonLatPoint > fromMogo( List< MogoLatLng > latLngs ) {
+ if ( latLngs == null ) {
+ return null;
+ }
+ List< LonLatPoint > result = new ArrayList<>( latLngs.size() );
+ for ( MogoLatLng latLng : latLngs ) {
+ result.add( fromMogo( latLng ) );
+ }
+ return result;
+ }
+
+
+ public static SearchBound fromMogo( MogoSearchBound bound ) {
+ if ( bound == null ) {
+ return null;
+ }
+ if ( bound.getShape() == MogoSearchBound.SHAPE_BOUND ) {
+ return new SearchBound( fromMogo( bound.getCenterPoint() ), bound.getRadiusInMeters(), bound.isDistanceSort() );
+ } else if ( bound.getShape() == MogoSearchBound.SHAPE_POLYGON ) {
+ return new SearchBound( fromMogo( bound.getPolyGonList() ) );
+ } else if ( bound.getShape() == MogoSearchBound.SHAPE_RECTANGLE ) {
+ return new SearchBound( fromMogo( bound.getLowerLeft() ), fromMogo( bound.getUpperRight() ) );
+ }
+ return null;
+ }
+
+ public static MogoPoiResult fromAMap( PoiSearchResult result ) {
+ if ( result == null ) {
+ return null;
+ }
+ MogoPoiResult mogoPoiResult = new MogoPoiResult();
+ if ( result.getItems() != null ) {
+ final List poiItems = result.getItems();
+ final ArrayList< MogoPoiItem > mogoPoiItems = new ArrayList<>( poiItems.size() );
+ for ( PoiSearchItem poiItem : poiItems ) {
+ mogoPoiItems.add( fromAMap( poiItem.getPoi() ) );
+ }
+ mogoPoiResult.setPois( mogoPoiItems );
+ }
+ return mogoPoiResult;
+ }
+
+// public static MogoNaviInfo fromAMap(Context context, NaviInfo naviInfo ) {
+// if ( naviInfo == null ) {
+// return null;
+// }
+// MogoNaviInfo mogoNaviInfo = new MogoNaviInfo();
+// mogoNaviInfo.setCurrentRoadName( naviInfo.getCurrentRoadName() );
+// mogoNaviInfo.setCurrentSpeed( naviInfo.getCurrentSpeed() );
+// mogoNaviInfo.setCurStepRetainDistance( naviInfo.getCurStepRetainDistance() );
+// mogoNaviInfo.setCurStepRetainTime( naviInfo.getCurStepRetainTime() );
+// mogoNaviInfo.setIconResId( IconTypeUtils.getResIdByIconType( context, naviInfo.getIconType() ) );
+// mogoNaviInfo.setNextRoadName( naviInfo.getNextRoadName() );
+// mogoNaviInfo.setPathRetainDistance( naviInfo.getPathRetainDistance() );
+// mogoNaviInfo.setPathRetainTime( naviInfo.getPathRetainTime() );
+// mogoNaviInfo.setCurrentSpeed( naviInfo.getLimitSpeed() );
+// return mogoNaviInfo;
+// }
+//
+// public static MogoCongestionInfo fromAMap( AimLessModeCongestionInfo aimLessModeCongestionInfo ) {
+// if ( aimLessModeCongestionInfo == null ) {
+// return null;
+// }
+// MogoCongestionInfo congestionInfo = new MogoCongestionInfo();
+// congestionInfo.setCongestionStatus( aimLessModeCongestionInfo.getCongestionStatus() );
+// congestionInfo.setEventLat( aimLessModeCongestionInfo.getEventLat() );
+// congestionInfo.setEventLon( aimLessModeCongestionInfo.getEventLon() );
+// congestionInfo.setEventType( aimLessModeCongestionInfo.getEventType() );
+// congestionInfo.setCongestionLinks( new ArrayList() );
+// congestionInfo.setLength( aimLessModeCongestionInfo.getLength() );
+// congestionInfo.setRoadName( aimLessModeCongestionInfo.getRoadName() );
+// congestionInfo.setTime( aimLessModeCongestionInfo.getTime() );
+// if ( aimLessModeCongestionInfo.getAmapCongestionLinks() != null
+// && aimLessModeCongestionInfo.getAmapCongestionLinks().length != 0 ) {
+// for ( AMapCongestionLink amapCongestionLink : aimLessModeCongestionInfo.getAmapCongestionLinks() ) {
+// if ( amapCongestionLink == null ) {
+// continue;
+// }
+// MogoCongestionLink link = new MogoCongestionLink();
+// link.setCongestionStatus( amapCongestionLink.getCongestionStatus() );
+// if ( amapCongestionLink.getCoords() != null ) {
+// link.setCoords( new ArrayList< MogoLatLng >() );
+// Iterator iterator = amapCongestionLink.getCoords().iterator();
+// while ( iterator.hasNext() ) {
+// NaviLatLng naviLatLng = iterator.next();
+// if ( naviLatLng == null ) {
+// continue;
+// }
+// link.getCoords().add( new MogoLatLng( naviLatLng.getLatitude(), naviLatLng.getLongitude() ) );
+// }
+// }
+// congestionInfo.getCongestionLinks().add( link );
+// }
+// }
+// return congestionInfo;
+// }
+//
+// public static MogoTraffic fromAMap(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos ) {
+// if ( aMapNaviTrafficFacilityInfos == null || aMapNaviTrafficFacilityInfos.length == 0 ) {
+// return null;
+// }
+// for ( AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo : aMapNaviTrafficFacilityInfos ) {
+// if ( aMapNaviTrafficFacilityInfo == null ) {
+// continue;
+// }
+// MogoTraffic traffic = new MogoTraffic( MogoTraffic.TYPE_AIM );
+// traffic.setDistance( aMapNaviTrafficFacilityInfo.getDistance() );
+// traffic.setSpeedLimit( aMapNaviTrafficFacilityInfo.getLimitSpeed() );
+// traffic.setTrafficType( aMapNaviTrafficFacilityInfo.getBroadcastType() );
+// traffic.setLat( aMapNaviTrafficFacilityInfo.latitude );
+// traffic.setLon( aMapNaviTrafficFacilityInfo.longitude );
+// return traffic;
+// }
+// return null;
+// }
+
+ public static PolylineOptions fromMogo(MogoPolylineOptions options ) {
+ if ( options == null ) {
+ return null;
+ }
+ PolylineOptions target = new PolylineOptions();
+ if ( options.getPoints() != null ) {
+ List< LonLatPoint > points = new ArrayList<>();
+ for ( MogoLatLng point : options.getPoints() ) {
+ points.add( fromMogo( point ) );
+ }
+ target.setLonLatPoints( points );
+ }
+ target.setLineWidth( options.getWidth() );
+ target.setColor( options.getColor() );
+// target.zIndex( options.getWidth() );
+// target.visible( options.isVisible() );
+//// target.geodesic( options.isGeodesic() );
+ target.setDottedLine( options.isDottedLine() );
+ target.useGradient( options.isGradient() );
+ if ( options.getColorValues() != null ) {
+ target.colorValues( options.getColorValues() );
+ }
+// target.transparency( options.getTransparency() );
+// target.aboveMaskLayer( options.isAboveMaskLayer() );
+// target.lineCapType( PolylineOptions.LineCapType.LineCapRound );
+// target.lineJoinType( PolylineOptions.LineJoinType.LineJoinRound );
+// target.setDottedLineType( PolylineOptions.DOTTEDLINE_TYPE_CIRCLE );
+ return target;
+ }
+
+// public static MogoLatLng fromAMap( LatLng latLng ) {
+// if ( latLng == null ) {
+// return null;
+// }
+// return new MogoLatLng( latLng.latitude, latLng.longitude );
+// }
+
+ public static MapCameraPosition fromAMap( CameraPosition position ) {
+ if ( position == null ) {
+ return null;
+ }
+ return new MapCameraPosition( fromAMap( position.getTarget() ), position.getBearing(), position.getTilt(), position.getZoom() );
+ }
+
+ private static String getCategory(String key){
+ String category = "";
+ if(key.equals("加油站")){
+ category= "6";
+ }else if(key.equals("停车场")){
+ category= "12";
+ }else if(key.equals("餐馆")){
+ category= "22";
+ }else if(key.equals("洗车")){
+ category= "8";
+ }else if(key.equals("厕所")){
+
+ }
+ return category;
+ }
+}
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_1.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_1.png
new file mode 100644
index 0000000000..0fa0edb0a4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_1.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_10.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_10.png
new file mode 100644
index 0000000000..797b106127
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_10.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_11.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_11.png
new file mode 100644
index 0000000000..e54bbd6292
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_11.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_12.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_12.png
new file mode 100644
index 0000000000..f93a673421
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_12.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_13.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_13.png
new file mode 100644
index 0000000000..bf8d9bc3db
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_13.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_14.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_14.png
new file mode 100644
index 0000000000..e7288ac5c2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_14.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_15.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_15.png
new file mode 100644
index 0000000000..9c0c2af8f4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_15.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_16.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_16.png
new file mode 100644
index 0000000000..30cffd20e5
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_16.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_17.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_17.png
new file mode 100644
index 0000000000..81ebaa35cd
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_17.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_18.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_18.png
new file mode 100644
index 0000000000..8370408b15
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_18.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_19.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_19.png
new file mode 100644
index 0000000000..da5648fb9c
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_19.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_2.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_2.png
new file mode 100644
index 0000000000..851d6d878e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_20.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_20.png
new file mode 100644
index 0000000000..79ffe11b10
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_20.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_21.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_21.png
new file mode 100644
index 0000000000..9f80ca5181
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_21.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_22.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_22.png
new file mode 100644
index 0000000000..403c5ea7e8
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_22.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_23.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_23.png
new file mode 100644
index 0000000000..6e1b9f33b8
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_23.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_24.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_24.png
new file mode 100644
index 0000000000..060b5e94f0
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_24.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_25.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_25.png
new file mode 100644
index 0000000000..7a027897ce
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_25.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_26.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_26.png
new file mode 100644
index 0000000000..6806d3457e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_26.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_27.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_27.png
new file mode 100644
index 0000000000..dd1717bd6b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_27.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_28.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_28.png
new file mode 100644
index 0000000000..239b379f3b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_28.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_4.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_4.png
new file mode 100644
index 0000000000..5cf551b141
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_4.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_5.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_5.png
new file mode 100644
index 0000000000..70ac563aa4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_5.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_50.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_50.png
new file mode 100644
index 0000000000..4780ef7427
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_50.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_51.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_51.png
new file mode 100644
index 0000000000..f6501640a1
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_51.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_52.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_52.png
new file mode 100644
index 0000000000..7c8a880609
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_52.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_53.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_53.png
new file mode 100644
index 0000000000..4cb5e21820
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_53.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_54.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_54.png
new file mode 100644
index 0000000000..37289bbaaf
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_54.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_55.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_55.png
new file mode 100644
index 0000000000..e8263cdc1b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_55.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_56.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_56.png
new file mode 100644
index 0000000000..48b91385ad
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_56.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_57.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_57.png
new file mode 100644
index 0000000000..080eaece28
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_57.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_58.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_58.png
new file mode 100644
index 0000000000..7f7034ff9f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_58.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_59.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_59.png
new file mode 100644
index 0000000000..735392d59d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_59.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_6.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_6.png
new file mode 100644
index 0000000000..ff9757c869
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_6.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_60.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_60.png
new file mode 100644
index 0000000000..98c94b3826
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_60.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_61.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_61.png
new file mode 100644
index 0000000000..a924085ef8
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_61.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_62.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_62.png
new file mode 100644
index 0000000000..c20542f34f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_62.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_63.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_63.png
new file mode 100644
index 0000000000..d408fe0153
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_63.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_64.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_64.png
new file mode 100644
index 0000000000..5a9af68c32
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_64.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_65.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_65.png
new file mode 100644
index 0000000000..57a7454b4f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_65.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_66.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_66.png
new file mode 100644
index 0000000000..c471bf466a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_66.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_67.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_67.png
new file mode 100644
index 0000000000..22e6178738
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_67.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_68.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_68.png
new file mode 100644
index 0000000000..a782cffbd9
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_68.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_69.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_69.png
new file mode 100644
index 0000000000..a1545ef55f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_69.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_7.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_7.png
new file mode 100644
index 0000000000..b4a6465ce0
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_7.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_8.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_8.png
new file mode 100644
index 0000000000..d19f036aa9
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_8.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_9.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_9.png
new file mode 100644
index 0000000000..a2b07ad3d7
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_9.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/ic_endpoint.png b/libraries/map-custom/src/main/res/drawable-ldpi/ic_endpoint.png
new file mode 100644
index 0000000000..a1716599df
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/ic_endpoint.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/map_api_ic_current_location2.png b/libraries/map-custom/src/main/res/drawable-ldpi/map_api_ic_current_location2.png
new file mode 100644
index 0000000000..5f91be07f3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/map_api_ic_current_location2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_10.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_10.png
new file mode 100644
index 0000000000..629e98359d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_10.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_11.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_11.png
new file mode 100644
index 0000000000..c0d6528e63
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_11.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_12.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_12.png
new file mode 100644
index 0000000000..c14ec9a985
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_12.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_13.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_13.png
new file mode 100644
index 0000000000..71bc66ca60
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_13.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_14.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_14.png
new file mode 100644
index 0000000000..15e798dcce
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_14.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_15.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_15.png
new file mode 100644
index 0000000000..a69e9437f3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_15.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_16.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_16.png
new file mode 100644
index 0000000000..ff948797b4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_16.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_17.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_17.png
new file mode 100644
index 0000000000..8fc3e5d0df
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_17.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_20.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_20.png
new file mode 100644
index 0000000000..b6cf203416
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_20.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_21.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_21.png
new file mode 100644
index 0000000000..0c55bebb7a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_21.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_22.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_22.png
new file mode 100644
index 0000000000..73f6c6c7ca
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_22.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_23.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_23.png
new file mode 100644
index 0000000000..fb4a106126
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_23.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_24.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_24.png
new file mode 100644
index 0000000000..a40251e6af
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_24.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_25.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_25.png
new file mode 100644
index 0000000000..dba53847bb
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_25.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_26.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_26.png
new file mode 100644
index 0000000000..c2ad298a10
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_26.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_27.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_27.png
new file mode 100644
index 0000000000..266e5a9a6b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_27.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_28.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_28.png
new file mode 100644
index 0000000000..15259c17eb
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_28.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_30.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_30.png
new file mode 100644
index 0000000000..bc76d71ab9
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_30.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_31.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_31.png
new file mode 100644
index 0000000000..5e8e8d31fb
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_31.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_32.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_32.png
new file mode 100644
index 0000000000..52e2e6a540
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_32.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_33.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_33.png
new file mode 100644
index 0000000000..357de360f4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_33.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_34.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_34.png
new file mode 100644
index 0000000000..ef5a9d75b2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_34.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_35.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_35.png
new file mode 100644
index 0000000000..9c0d6b2058
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_35.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_36.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_36.png
new file mode 100644
index 0000000000..f99d780e06
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_36.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_37.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_37.png
new file mode 100644
index 0000000000..17fff66f7b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_37.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_38.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_38.png
new file mode 100644
index 0000000000..d4464587af
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_38.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_39.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_39.png
new file mode 100644
index 0000000000..a7db692ecc
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_39.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_40.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_40.png
new file mode 100644
index 0000000000..5cd1176c4d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_40.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_41.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_41.png
new file mode 100644
index 0000000000..89c97b5dc8
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_41.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_42.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_42.png
new file mode 100644
index 0000000000..d76fa3a7c6
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_42.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_43.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_43.png
new file mode 100644
index 0000000000..15ca9088f1
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_43.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_44.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_44.png
new file mode 100644
index 0000000000..fe01e04472
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_44.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_68.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_68.png
new file mode 100644
index 0000000000..0d57b42290
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_68.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_84.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_84.png
new file mode 100644
index 0000000000..99bdea2e1e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_84.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-ldpi/tc_85.png b/libraries/map-custom/src/main/res/drawable-ldpi/tc_85.png
new file mode 100644
index 0000000000..e85921c9c3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-ldpi/tc_85.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-mdpi/map_api_ic_current_location2.png b/libraries/map-custom/src/main/res/drawable-mdpi/map_api_ic_current_location2.png
new file mode 100644
index 0000000000..5f91be07f3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-mdpi/map_api_ic_current_location2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_1.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_1.png
new file mode 100644
index 0000000000..5a4c2cf96e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_1.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_10.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_10.png
new file mode 100644
index 0000000000..5a05ce6474
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_10.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_11.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_11.png
new file mode 100644
index 0000000000..8d8a894b58
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_11.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_12.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_12.png
new file mode 100644
index 0000000000..96ffe793f8
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_12.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_13.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_13.png
new file mode 100644
index 0000000000..4cfbae387d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_13.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_14.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_14.png
new file mode 100644
index 0000000000..77d51fe649
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_14.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_15.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_15.png
new file mode 100644
index 0000000000..b0f50cc894
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_15.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_16.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_16.png
new file mode 100644
index 0000000000..bb21c76be1
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_16.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_17.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_17.png
new file mode 100644
index 0000000000..eb9cfc2cdd
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_17.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_18.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_18.png
new file mode 100644
index 0000000000..061114de81
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_18.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_19.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_19.png
new file mode 100644
index 0000000000..bf4793327c
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_19.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_2.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_2.png
new file mode 100644
index 0000000000..eb59de2d41
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_20.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_20.png
new file mode 100644
index 0000000000..e8e6e92b49
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_20.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_21.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_21.png
new file mode 100644
index 0000000000..3f8192d710
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_21.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_22.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_22.png
new file mode 100644
index 0000000000..d479431b73
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_22.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_23.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_23.png
new file mode 100644
index 0000000000..981a89f1a3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_23.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_24.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_24.png
new file mode 100644
index 0000000000..6d05927994
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_24.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_25.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_25.png
new file mode 100644
index 0000000000..69df7c1534
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_25.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_26.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_26.png
new file mode 100644
index 0000000000..29c3d23eff
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_26.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_27.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_27.png
new file mode 100644
index 0000000000..611f3b41fb
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_27.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_28.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_28.png
new file mode 100644
index 0000000000..0bdebdd05d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_28.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_3.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_3.png
new file mode 100644
index 0000000000..e9d338aa96
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_3.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_4.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_4.png
new file mode 100644
index 0000000000..353e5049b8
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_4.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_5.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_5.png
new file mode 100644
index 0000000000..2b938c892e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_5.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_50.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_50.png
new file mode 100644
index 0000000000..2902206da5
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_50.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_51.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_51.png
new file mode 100644
index 0000000000..94db18a7f0
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_51.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_52.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_52.png
new file mode 100644
index 0000000000..74e434228a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_52.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_53.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_53.png
new file mode 100644
index 0000000000..cd1cfd42f7
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_53.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_54.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_54.png
new file mode 100644
index 0000000000..adc0bbbbb3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_54.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_55.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_55.png
new file mode 100644
index 0000000000..3d63020dd2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_55.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_56.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_56.png
new file mode 100644
index 0000000000..a4dd04c61a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_56.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_57.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_57.png
new file mode 100644
index 0000000000..9bd9e6945a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_57.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_58.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_58.png
new file mode 100644
index 0000000000..89dd67242a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_58.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_59.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_59.png
new file mode 100644
index 0000000000..e1bf5acd56
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_59.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_6.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_6.png
new file mode 100644
index 0000000000..089222b492
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_6.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_60.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_60.png
new file mode 100644
index 0000000000..5c797cfbf2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_60.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_61.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_61.png
new file mode 100644
index 0000000000..eddba707ef
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_61.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_62.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_62.png
new file mode 100644
index 0000000000..db1ad2eeb7
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_62.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_63.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_63.png
new file mode 100644
index 0000000000..957d08b307
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_63.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_64.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_64.png
new file mode 100644
index 0000000000..3bcc77650a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_64.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_65.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_65.png
new file mode 100644
index 0000000000..47897888a0
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_65.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_66.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_66.png
new file mode 100644
index 0000000000..727505beb9
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_66.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_67.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_67.png
new file mode 100644
index 0000000000..b18126a2f0
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_67.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_68.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_68.png
new file mode 100644
index 0000000000..329995bd2f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_68.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_69.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_69.png
new file mode 100644
index 0000000000..63d1ccd728
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_69.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_7.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_7.png
new file mode 100644
index 0000000000..8257b5dfe3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_7.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_8.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_8.png
new file mode 100644
index 0000000000..7c29ae8f99
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_8.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_9.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_9.png
new file mode 100644
index 0000000000..a348269ccc
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_9.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/ic_endpoint.png b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_endpoint.png
new file mode 100644
index 0000000000..f178056730
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/ic_endpoint.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png b/libraries/map-custom/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png
new file mode 100644
index 0000000000..5f91be07f3
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/map_api_ic_current_location2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/map_custom_ic_current_location2.png b/libraries/map-custom/src/main/res/drawable-xhdpi/map_custom_ic_current_location2.png
new file mode 100644
index 0000000000..dc22ac57a1
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/map_custom_ic_current_location2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_10.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_10.png
new file mode 100644
index 0000000000..bbc15d056d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_10.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_11.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_11.png
new file mode 100644
index 0000000000..316f5e1b96
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_11.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_12.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_12.png
new file mode 100644
index 0000000000..8e18625e6d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_12.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_13.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_13.png
new file mode 100644
index 0000000000..903dff86ed
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_13.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_14.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_14.png
new file mode 100644
index 0000000000..cd95173633
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_14.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_15.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_15.png
new file mode 100644
index 0000000000..8bc4f5247d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_15.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_16.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_16.png
new file mode 100644
index 0000000000..7b9b08ebf2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_16.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_17.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_17.png
new file mode 100644
index 0000000000..5a1f932024
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_17.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_20.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_20.png
new file mode 100644
index 0000000000..2d4462266e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_20.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_21.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_21.png
new file mode 100644
index 0000000000..7a950926ce
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_21.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_22.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_22.png
new file mode 100644
index 0000000000..09b1272ce6
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_22.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_23.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_23.png
new file mode 100644
index 0000000000..4e52213d57
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_23.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_24.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_24.png
new file mode 100644
index 0000000000..d9afd535e5
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_24.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_25.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_25.png
new file mode 100644
index 0000000000..70a25f3c25
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_25.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_26.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_26.png
new file mode 100644
index 0000000000..d87fe0ba59
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_26.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_27.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_27.png
new file mode 100644
index 0000000000..28afebb493
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_27.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_28.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_28.png
new file mode 100644
index 0000000000..5c23e754e6
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_28.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_30.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_30.png
new file mode 100644
index 0000000000..6593326f29
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_30.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_31.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_31.png
new file mode 100644
index 0000000000..3bfa5983b6
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_31.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_32.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_32.png
new file mode 100644
index 0000000000..53fa3dc1b2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_32.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_33.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_33.png
new file mode 100644
index 0000000000..e9a51bb3f1
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_33.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_34.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_34.png
new file mode 100644
index 0000000000..c033de20cc
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_34.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_35.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_35.png
new file mode 100644
index 0000000000..78c0a884b5
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_35.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_36.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_36.png
new file mode 100644
index 0000000000..9d2d6889c9
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_36.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_37.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_37.png
new file mode 100644
index 0000000000..45b1420b8a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_37.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_38.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_38.png
new file mode 100644
index 0000000000..e716d63c69
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_38.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_39.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_39.png
new file mode 100644
index 0000000000..973a163dc9
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_39.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_40.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_40.png
new file mode 100644
index 0000000000..10a7dc6995
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_40.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_41.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_41.png
new file mode 100644
index 0000000000..89e9415071
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_41.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_42.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_42.png
new file mode 100644
index 0000000000..2716e1a458
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_42.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_43.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_43.png
new file mode 100644
index 0000000000..7ac8809a8b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_43.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_44.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_44.png
new file mode 100644
index 0000000000..0c4daba210
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_44.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_68.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_68.png
new file mode 100644
index 0000000000..9763518122
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_68.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_84.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_84.png
new file mode 100644
index 0000000000..24a6ef2e82
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_84.png differ
diff --git a/libraries/map-custom/src/main/res/drawable-xhdpi/tc_85.png b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_85.png
new file mode 100644
index 0000000000..91e3cb0e8f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable-xhdpi/tc_85.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_bus.png b/libraries/map-custom/src/main/res/drawable/amap_bus.png
new file mode 100644
index 0000000000..66f73f4454
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_bus.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_car.png b/libraries/map-custom/src/main/res/drawable/amap_car.png
new file mode 100644
index 0000000000..b12b10c83f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_car.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_end.png b/libraries/map-custom/src/main/res/drawable/amap_end.png
new file mode 100644
index 0000000000..5503dc5a28
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_end.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_man.png b/libraries/map-custom/src/main/res/drawable/amap_man.png
new file mode 100644
index 0000000000..16842d5d12
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_man.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_ride.png b/libraries/map-custom/src/main/res/drawable/amap_ride.png
new file mode 100644
index 0000000000..2fa5633c59
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_ride.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_0_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_0_arrow.png
new file mode 100644
index 0000000000..21793fea2b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_0_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_1_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_1_arrow.png
new file mode 100644
index 0000000000..d7d832857f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_1_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_2_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_2_arrow.png
new file mode 100644
index 0000000000..c1d019b4ae
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_2_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_3_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_3_arrow.png
new file mode 100644
index 0000000000..b3318ad436
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_3_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_4_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_4_arrow.png
new file mode 100644
index 0000000000..038e63f485
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_4_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_5_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_5_arrow.png
new file mode 100644
index 0000000000..e15ce84e87
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_5_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_6_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_6_arrow.png
new file mode 100644
index 0000000000..9f3540757a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_6_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_7_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_7_arrow.png
new file mode 100644
index 0000000000..cef675f06f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_7_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_8_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_8_arrow.png
new file mode 100644
index 0000000000..c4d67d38a4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_8_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_9_arrow.png b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_9_arrow.png
new file mode 100644
index 0000000000..3c92f82f0d
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_route_color_texture_9_arrow.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_start.png b/libraries/map-custom/src/main/res/drawable/amap_start.png
new file mode 100644
index 0000000000..cd716c8840
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_start.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/amap_through.png b/libraries/map-custom/src/main/res/drawable/amap_through.png
new file mode 100644
index 0000000000..e636b446c1
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/amap_through.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/app_icon.png b/libraries/map-custom/src/main/res/drawable/app_icon.png
new file mode 100644
index 0000000000..c97be4be12
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/app_icon.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/default_image.png b/libraries/map-custom/src/main/res/drawable/default_image.png
new file mode 100644
index 0000000000..fdc210cd25
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/default_image.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir1.png b/libraries/map-custom/src/main/res/drawable/dir1.png
new file mode 100644
index 0000000000..fec3f4ec69
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir1.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir10.png b/libraries/map-custom/src/main/res/drawable/dir10.png
new file mode 100644
index 0000000000..34c2228f6c
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir10.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir11.png b/libraries/map-custom/src/main/res/drawable/dir11.png
new file mode 100644
index 0000000000..df9e8dc67c
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir11.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir12.png b/libraries/map-custom/src/main/res/drawable/dir12.png
new file mode 100644
index 0000000000..a4ba8c22cb
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir12.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir13.png b/libraries/map-custom/src/main/res/drawable/dir13.png
new file mode 100644
index 0000000000..39ad870c5f
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir13.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir14.png b/libraries/map-custom/src/main/res/drawable/dir14.png
new file mode 100644
index 0000000000..a3c1632562
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir14.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir15.png b/libraries/map-custom/src/main/res/drawable/dir15.png
new file mode 100644
index 0000000000..c99fb65b94
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir15.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir16.png b/libraries/map-custom/src/main/res/drawable/dir16.png
new file mode 100644
index 0000000000..86898c2144
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir16.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir2.png b/libraries/map-custom/src/main/res/drawable/dir2.png
new file mode 100644
index 0000000000..750b6fbb7e
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir2.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir3.png b/libraries/map-custom/src/main/res/drawable/dir3.png
new file mode 100644
index 0000000000..8cbe886e81
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir3.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir4.png b/libraries/map-custom/src/main/res/drawable/dir4.png
new file mode 100644
index 0000000000..cfe7d6c0fb
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir4.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir5.png b/libraries/map-custom/src/main/res/drawable/dir5.png
new file mode 100644
index 0000000000..e465d5eec2
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir5.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir6.png b/libraries/map-custom/src/main/res/drawable/dir6.png
new file mode 100644
index 0000000000..0d2f3c0360
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir6.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir7.png b/libraries/map-custom/src/main/res/drawable/dir7.png
new file mode 100644
index 0000000000..e53c9ff451
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir7.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir8.png b/libraries/map-custom/src/main/res/drawable/dir8.png
new file mode 100644
index 0000000000..edfdbe1df0
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir8.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir9.png b/libraries/map-custom/src/main/res/drawable/dir9.png
new file mode 100644
index 0000000000..a762d0b74a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir9.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir_end.png b/libraries/map-custom/src/main/res/drawable/dir_end.png
new file mode 100644
index 0000000000..f3cb78aed4
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir_end.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir_start.png b/libraries/map-custom/src/main/res/drawable/dir_start.png
new file mode 100644
index 0000000000..4d2a797823
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir_start.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/dir_station.png b/libraries/map-custom/src/main/res/drawable/dir_station.png
new file mode 100644
index 0000000000..2ed622283b
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/dir_station.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/ic_refresh.png b/libraries/map-custom/src/main/res/drawable/ic_refresh.png
new file mode 100644
index 0000000000..d86c3f8024
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/ic_refresh.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/ic_snapshot_ph.png b/libraries/map-custom/src/main/res/drawable/ic_snapshot_ph.png
new file mode 100644
index 0000000000..281f1bb163
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/ic_snapshot_ph.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/join_checkbox_bg.png b/libraries/map-custom/src/main/res/drawable/join_checkbox_bg.png
new file mode 100644
index 0000000000..89d00803c5
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/join_checkbox_bg.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/live_exit.png b/libraries/map-custom/src/main/res/drawable/live_exit.png
new file mode 100644
index 0000000000..7d9b50f159
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/live_exit.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/location_city_image.png b/libraries/map-custom/src/main/res/drawable/location_city_image.png
new file mode 100644
index 0000000000..ce5515c529
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/location_city_image.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_normal.png b/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_normal.png
new file mode 100644
index 0000000000..9c1a2a4aea
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_normal.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_press.png b/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_press.png
new file mode 100644
index 0000000000..d927b18877
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/main_solid_left_page_up_press.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_normal.png b/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_normal.png
new file mode 100644
index 0000000000..dda526f475
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_normal.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_press.png b/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_press.png
new file mode 100644
index 0000000000..2289209d9a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/main_solid_right_page_up_press.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/mainpage_location_img.png b/libraries/map-custom/src/main/res/drawable/mainpage_location_img.png
new file mode 100644
index 0000000000..7a463ac3ab
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/mainpage_location_img.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/map_location_normal.png b/libraries/map-custom/src/main/res/drawable/map_location_normal.png
new file mode 100644
index 0000000000..53f5b5a14a
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/map_location_normal.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/map_location_press.png b/libraries/map-custom/src/main/res/drawable/map_location_press.png
new file mode 100644
index 0000000000..e3e430c8d6
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/map_location_press.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/marker_blue.png b/libraries/map-custom/src/main/res/drawable/marker_blue.png
new file mode 100644
index 0000000000..062dda4a33
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/marker_blue.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/not_join_checkbox_bg.png b/libraries/map-custom/src/main/res/drawable/not_join_checkbox_bg.png
new file mode 100644
index 0000000000..663addd255
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/not_join_checkbox_bg.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/public_arrow_back_iv.png b/libraries/map-custom/src/main/res/drawable/public_arrow_back_iv.png
new file mode 100644
index 0000000000..cd7159e219
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/public_arrow_back_iv.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/search_information_normal.png b/libraries/map-custom/src/main/res/drawable/search_information_normal.png
new file mode 100644
index 0000000000..69529ef0bd
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/search_information_normal.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/search_information_press.png b/libraries/map-custom/src/main/res/drawable/search_information_press.png
new file mode 100644
index 0000000000..8338cc95ae
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/search_information_press.png differ
diff --git a/libraries/map-custom/src/main/res/drawable/video_loading_img.png b/libraries/map-custom/src/main/res/drawable/video_loading_img.png
new file mode 100644
index 0000000000..48be2bdd18
Binary files /dev/null and b/libraries/map-custom/src/main/res/drawable/video_loading_img.png differ
diff --git a/libraries/map-custom/src/main/res/values-ldpi/dimens.xml b/libraries/map-custom/src/main/res/values-ldpi/dimens.xml
new file mode 100644
index 0000000000..242c78ec72
--- /dev/null
+++ b/libraries/map-custom/src/main/res/values-ldpi/dimens.xml
@@ -0,0 +1,4 @@
+
+
+ 40px
+
\ No newline at end of file
diff --git a/libraries/map-custom/src/main/res/values/dimens.xml b/libraries/map-custom/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000..e8bccfa287
--- /dev/null
+++ b/libraries/map-custom/src/main/res/values/dimens.xml
@@ -0,0 +1,4 @@
+
+
+ 60px
+
\ No newline at end of file
diff --git a/libraries/map-custom/src/main/res/values/strings.xml b/libraries/map-custom/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..63a33e31ae
--- /dev/null
+++ b/libraries/map-custom/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ map-amap
+
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewCreator.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewCreator.java
new file mode 100644
index 0000000000..58ee2cc06c
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMapViewCreator.java
@@ -0,0 +1,14 @@
+package com.mogo.map;
+
+import android.content.Context;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-18
+ *
+ * 地图抽象
+ */
+public interface IMogoMapViewCreator {
+
+ IMogoMapView create( Context context);
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java
index 9137677d96..f246b62a0e 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoBaseMapView.java
@@ -3,14 +3,10 @@ package com.mogo.map;
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.Nullable;
-import com.mogo.utils.logger.Logger;
-
/**
* @author congtaowang
@@ -22,7 +18,10 @@ public abstract class MogoBaseMapView extends FrameLayout implements ILifeCycle
private static final String TAG = "MogoBaseMapView";
- private IMogoMapView mMapView;
+ protected IMogoMapView mMapView;
+
+ protected IMogoMapView mAMapView;
+ protected IMogoMapView mCustomMapView;
public MogoBaseMapView( Context context ) {
this( context, null );
@@ -37,28 +36,15 @@ public abstract class MogoBaseMapView extends FrameLayout implements ILifeCycle
init( context );
}
- protected void init( Context context ) {
- mMapView = createMapView( context );
- if ( mMapView != null ) {
- final View mapView = mMapView.getMapView();
- if ( mapView != null ) {
- addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) );
- MogoMap.getInstance().init( context, getMap() );
- } else {
- Logger.e( TAG, "create MapView instance failed." );
- }
- } else {
- Logger.e( TAG, "create IMogoMapView instance failed." );
- }
+ private void init( Context context ) {
+ addDleMaps();
}
- /**
- * 创建地图实例
- *
- * @param context
- * @return
- */
- protected abstract IMogoMapView createMapView( Context context );
+ protected abstract void addDleMaps();
+
+ public abstract void display2DMap( boolean invokeCreateAuto, boolean invokeResumeAuto );
+
+ public abstract void displayVRMap( boolean invokeCreateAuto, boolean invokeResumeAuto );
@Override
public void onCreate( Bundle bundle ) {
@@ -109,8 +95,4 @@ public abstract class MogoBaseMapView extends FrameLayout implements ILifeCycle
}
return null;
}
-
- public IMogoMapView getMapView() {
- return mMapView;
- }
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoLatLng.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoLatLng.java
index aad7e314fb..74e837f5a7 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoLatLng.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/MogoLatLng.java
@@ -3,6 +3,8 @@ package com.mogo.map;
import android.os.Parcel;
import android.os.Parcelable;
+import java.util.Objects;
+
/**
* @author congtaowang
* @since 2019-12-18
@@ -40,6 +42,21 @@ public class MogoLatLng implements Parcelable {
return lon;
}
+
+ @Override
+ public boolean equals( Object o ) {
+ if ( this == o ) return true;
+ if ( o == null || getClass() != o.getClass() ) return false;
+ MogoLatLng latLng = ( MogoLatLng ) o;
+ return Double.compare( latLng.lat, lat ) == 0 &&
+ Double.compare( latLng.lon, lon ) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash( lat, lng, lon );
+ }
+
@Override
public String toString() {
return "MogoLatLng{" +
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java
index 0c724f645e..f1ed4f645e 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationClient.java
@@ -6,7 +6,7 @@ package com.mogo.map.location;
*
* 定位接口
*/
-public interface IMogoLocationClient {
+public interface IMogoLocationClient extends IMogoLocationListenerRegister {
/**
* 开始定位
@@ -25,20 +25,6 @@ public interface IMogoLocationClient {
*/
void stop();
- /**
- * 注册定位回调
- *
- * @param listener
- */
- void addLocationListener( IMogoLocationListener listener );
-
- /**
- * 注销定位回调
- *
- * @param listener
- */
- void removeLocationListener( IMogoLocationListener listener );
-
/**
* 返回上一次有效定位
*
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationListenerRegister.java
new file mode 100644
index 0000000000..3fd36903af
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/IMogoLocationListenerRegister.java
@@ -0,0 +1,24 @@
+package com.mogo.map.location;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-24
+ *
+ * 地图监听注册管理
+ */
+public interface IMogoLocationListenerRegister {
+
+ /**
+ * 注册定位回调
+ *
+ * @param listener
+ */
+ void addLocationListener( IMogoLocationListener listener );
+
+ /**
+ * 注销定位回调
+ *
+ * @param listener
+ */
+ void removeLocationListener( IMogoLocationListener listener );
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/location/MogoLocationListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/MogoLocationListenerRegister.java
new file mode 100644
index 0000000000..39dffb4d7e
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/location/MogoLocationListenerRegister.java
@@ -0,0 +1,75 @@
+package com.mogo.map.location;
+
+import java.sql.ClientInfoStatus;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author congtaowang
+ * @since 2019-12-24
+ *
+ * 地图监听注册管理
+ */
+public class MogoLocationListenerRegister implements IMogoLocationListenerRegister {
+
+ private static volatile MogoLocationListenerRegister sInstance;
+
+ private MogoLocationListenerRegister() {
+ }
+
+ public static MogoLocationListenerRegister getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( MogoLocationListenerRegister.class ) {
+ if ( sInstance == null ) {
+ sInstance = new MogoLocationListenerRegister();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ private Set< IMogoLocationListener > sListeners = new HashSet<>( 10 );
+
+ /**
+ * 注册定位回调
+ *
+ * @param listener
+ */
+ @Override
+ public void addLocationListener( IMogoLocationListener listener ) {
+ if ( listener == null ) {
+ return;
+ }
+ synchronized ( sListeners ) {
+ sListeners.add( listener );
+ }
+ }
+
+ /**
+ * 注销定位回调
+ *
+ * @param listener
+ */
+ @Override
+ public void removeLocationListener( IMogoLocationListener listener ) {
+ if ( listener == null ) {
+ return;
+ }
+ synchronized ( sListeners ) {
+ sListeners.remove( listener );
+ }
+ }
+
+ public Set< IMogoLocationListener > getListeners() {
+ return sListeners;
+ }
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java
index 841a240338..7fc854f3d1 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/IMogoMarker.java
@@ -324,4 +324,10 @@ public interface IMogoMarker {
* @return
*/
boolean isInfoWindowShowing();
+
+ /**
+ * 设置是否是gps
+ * @param isGps
+ */
+ void setGps(boolean isGps);
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java
index f817138f3c..73c06971ca 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/marker/MogoMarkerOptions.java
@@ -308,4 +308,29 @@ public class MogoMarkerOptions extends Observable {
this.mAutoManager = autoManager;
return this;
}
+
+ @Override
+ public String toString() {
+ return "MogoMarkerOptions{" +
+ "latitude=" + latitude +
+ ", longitude=" + longitude +
+ ", title='" + title + '\'' +
+ ", snippet='" + snippet + '\'' +
+ ", icon=" + icon +
+ ", icons=" + icons +
+ ", period=" + period +
+ ", rotate=" + rotate +
+ ", flat=" + flat +
+ ", visible=" + visible +
+ ", inifoWindowEnable=" + inifoWindowEnable +
+ ", alpha=" + alpha +
+ ", isGps=" + isGps +
+ ", u=" + u +
+ ", v=" + v +
+ ", draggable=" + draggable +
+ ", offsetX=" + offsetX +
+ ", offsetY=" + offsetY +
+ ", zIndex=" + zIndex +
+ '}';
+ }
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListenerRegister.java
new file mode 100644
index 0000000000..58dc1cbada
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoCarLocationChangedListenerRegister.java
@@ -0,0 +1,18 @@
+package com.mogo.map.navi;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/23
+ *
+ * 描述
+ */
+interface IMogoCarLocationChangedListenerRegister {
+
+ /**
+ * 注册车辆位置变化监听,非业务使用
+ *
+ * @param listener
+ */
+ void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener );
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java
index de314483b5..c53bdbb124 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoNavi.java
@@ -14,7 +14,7 @@ import java.util.List;
*
* 导航操作
*/
-public interface IMogoNavi {
+public interface IMogoNavi extends IMogoCarLocationChangedListenerRegister, IMogoOperationListenerRegister{
/**
* 开启路径规划并导航
@@ -97,12 +97,6 @@ public interface IMogoNavi {
*/
OnCalculatePathItemClickInteraction getItemClickInteraction();
-
- /**
- * 设置线条点击回调
- */
- void setLineClickInteraction( OnCalculatePathItemClickInteraction itemClickInteraction );
-
/**
* 清除规划的路线
*/
@@ -151,13 +145,6 @@ public interface IMogoNavi {
*/
Location getCarLocation2();
- /**
- * 注册车辆位置变化监听,非业务使用
- *
- * @param listener
- */
- void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener );
-
/**
* 打开巡航模式
*/
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoOperationListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoOperationListenerRegister.java
new file mode 100644
index 0000000000..4d9b47eae7
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/IMogoOperationListenerRegister.java
@@ -0,0 +1,17 @@
+package com.mogo.map.navi;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/23
+ *
+ * 描述
+ */
+interface IMogoOperationListenerRegister {
+
+ /**
+ * 设置线条点击回调
+ */
+ void setLineClickInteraction( OnCalculatePathItemClickInteraction itemClickInteraction );
+
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCarLocationChangedListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCarLocationChangedListenerRegister.java
new file mode 100644
index 0000000000..baa3b2f579
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoCarLocationChangedListenerRegister.java
@@ -0,0 +1,50 @@
+package com.mogo.map.navi;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/23
+ *
+ * 描述
+ */
+class MogoCarLocationChangedListenerRegister implements IMogoCarLocationChangedListenerRegister {
+
+ private static volatile MogoCarLocationChangedListenerRegister sInstance;
+ private IMogoCarLocationChangedListener2 listener;
+
+ private MogoCarLocationChangedListenerRegister(){}
+
+ public static MogoCarLocationChangedListenerRegister getInstance(){
+ if( sInstance == null ){
+ synchronized( MogoCarLocationChangedListenerRegister.class ) {
+ if( sInstance == null ){
+ sInstance = new MogoCarLocationChangedListenerRegister();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release(){
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ /**
+ * 注册车辆位置变化监听,非业务使用
+ *
+ * @param listener
+ */
+ @Override
+ public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
+ this.listener = listener;
+ }
+
+ public IMogoCarLocationChangedListener2 getListener() {
+ return listener;
+ }
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoOperationListenerRegister.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoOperationListenerRegister.java
new file mode 100644
index 0000000000..ec4cf7a1b8
--- /dev/null
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/navi/MogoOperationListenerRegister.java
@@ -0,0 +1,47 @@
+package com.mogo.map.navi;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/23
+ *
+ * 描述
+ */
+class MogoOperationListenerRegister implements IMogoOperationListenerRegister {
+
+ private static volatile MogoOperationListenerRegister sInstance;
+ private OnCalculatePathItemClickInteraction itemClickInteraction;
+
+ private MogoOperationListenerRegister(){}
+
+ public static MogoOperationListenerRegister getInstance(){
+ if( sInstance == null ){
+ synchronized( MogoOperationListenerRegister.class ) {
+ if( sInstance == null ){
+ sInstance = new MogoOperationListenerRegister();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release(){
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ /**
+ * 设置线条点击回调
+ */
+ public void setLineClickInteraction( OnCalculatePathItemClickInteraction itemClickInteraction ) {
+ this.itemClickInteraction = itemClickInteraction;
+ }
+
+ public OnCalculatePathItemClickInteraction getItemClickInteraction() {
+ return itemClickInteraction;
+ }
+}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java
index b3b539fca3..76f8ed09d6 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/search/poisearch/query/MogoPoiSearchQuery.java
@@ -13,7 +13,7 @@ import com.mogo.map.MogoLatLng;
*/
public class MogoPoiSearchQuery implements Parcelable {
- private String query;
+ private String query = "";
private String category;
private String city;
private String building;
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/EnumMapUI.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/EnumMapUI.java
index bae12fe5a7..14bbb7bc52 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/EnumMapUI.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/EnumMapUI.java
@@ -35,7 +35,12 @@ public enum EnumMapUI {
/**
* 夜晚模式
*/
- Type_AUTO_LIGHT_Night( 5, 3 );
+ Type_AUTO_LIGHT_Night( 5, 3 ),
+
+ /**
+ * 自研地图的VR模式
+ */
+ Type_VR( 0, 0 );
private int next;
private int code;
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
index 6cfa109ab9..89fd8446db 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
@@ -50,8 +50,8 @@ public interface IMogoMapUIController {
/**
* 将地图移动至当前位置
*/
- default void moveToCenter( MogoLatLng latLng ){
- moveToCenter(latLng, false);
+ default void moveToCenter( MogoLatLng latLng ) {
+ moveToCenter( latLng, false );
}
/**
@@ -225,7 +225,16 @@ public interface IMogoMapUIController {
/**
* 切换地图视图视角
+ *
* @param bearing
*/
- void changeBearing(float bearing);
+ void changeBearing( float bearing );
+
+ default void setAnchorScale( float x, float y ) {
+
+ }
+
+ default void setAnchorRate( float rate ) {
+
+ }
}
diff --git a/libraries/mogo-map/build.gradle b/libraries/mogo-map/build.gradle
index 6cfbecae4f..bb41e9c25d 100644
--- a/libraries/mogo-map/build.gradle
+++ b/libraries/mogo-map/build.gradle
@@ -29,12 +29,14 @@ dependencies {
implementation rootProject.ext.dependencies.mogoutils
implementation rootProject.ext.dependencies.mogomapapi
api rootProject.ext.dependencies.mapamap
+ api rootProject.ext.dependencies.mapcustom
api rootProject.ext.dependencies.mapautomap
implementation rootProject.ext.dependencies.mogocommons
} else {
implementation project(':foudations:mogo-utils')
implementation project(':libraries:mogo-map-api')
api project(':libraries:map-amap')
+ api project(':libraries:map-custom')
api project(':libraries:map-autonavi')
implementation project(':foudations:mogo-commons')
}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoGeoSearch.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoGeoSearch.java
index b67c1c4086..5c63cf11cd 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoGeoSearch.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoGeoSearch.java
@@ -24,7 +24,7 @@ public class MogoGeoSearch implements IMogoGeoSearch {
private IMogoGeoSearch mDelegate;
public MogoGeoSearch( Context context ) {
- mDelegate = new GeocodeSearchClient( context );
+ mDelegate = MogoMapDelegateFactory.getGeoSearchDelegate( context );
}
@Override
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoInputtipsSearch.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoInputtipsSearch.java
index 5c16622307..2db7f2df93 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoInputtipsSearch.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoInputtipsSearch.java
@@ -18,7 +18,7 @@ public class MogoInputtipsSearch implements IMogoInputtipsSearch {
private IMogoInputtipsSearch mDelegate;
public MogoInputtipsSearch( Context context, MogoInputtipsQuery query ) {
- mDelegate = new InputtipsSearch( context, query );
+ mDelegate = MogoMapDelegateFactory.getInputtipsSearchDelegate( context, query );
}
@Override
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java
index 1ea53c59c2..93ea5ea25a 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoLocationClient.java
@@ -3,9 +3,11 @@ package com.mogo.map;
import android.content.Context;
import com.mogo.map.impl.amap.location.ALocationClient;
+import com.mogo.map.listener.MogoHosListenerRegister;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.location.MogoLocation;
+import com.mogo.map.location.MogoLocationListenerRegister;
/**
* @author congtaowang
@@ -17,7 +19,7 @@ public class MogoLocationClient implements IMogoLocationClient {
private static volatile MogoLocationClient sInstance;
public MogoLocationClient( Context context ) {
- mDelegate = new ALocationClient( context );
+ mDelegate = MogoMapDelegateFactory.getLocationClientDelegate( context );
}
public static MogoLocationClient getInstance( Context context ) {
@@ -56,16 +58,12 @@ public class MogoLocationClient implements IMogoLocationClient {
@Override
public void addLocationListener( IMogoLocationListener listener ) {
- if ( mDelegate != null ) {
- mDelegate.addLocationListener( listener );
- }
+ MogoLocationListenerRegister.getInstance().addLocationListener( listener );
}
@Override
public void removeLocationListener( IMogoLocationListener listener ) {
- if ( mDelegate != null ) {
- mDelegate.removeLocationListener( listener );
- }
+ MogoLocationListenerRegister.getInstance().removeLocationListener( listener );
}
@Override
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapDelegateFactory.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapDelegateFactory.java
new file mode 100644
index 0000000000..da5bbc7121
--- /dev/null
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapDelegateFactory.java
@@ -0,0 +1,105 @@
+package com.mogo.map;
+
+import android.content.Context;
+import android.opengl.Visibility;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.impl.amap.location.ALocationClient;
+import com.mogo.map.impl.amap.navi.NaviClient;
+import com.mogo.map.impl.amap.search.GeocodeSearchClient;
+import com.mogo.map.impl.amap.search.InputtipsSearch;
+import com.mogo.map.impl.amap.search.PoiSearchClient;
+import com.mogo.map.impl.amap.search.RoadSearchClient;
+import com.mogo.map.impl.amap.uicontroller.AMapUIController;
+import com.mogo.map.impl.automap.navi.AutoNaviClient;
+import com.mogo.map.location.IMogoLocationClient;
+import com.mogo.map.navi.IMogoNavi;
+import com.mogo.map.search.drive.IMogoRoadSearch;
+import com.mogo.map.search.geo.IMogoGeoSearch;
+import com.mogo.map.search.inputtips.IMogoInputtipsSearch;
+import com.mogo.map.search.inputtips.query.MogoInputtipsQuery;
+import com.mogo.map.search.poisearch.IMogoPoiSearch;
+import com.mogo.map.search.poisearch.query.MogoPoiSearchQuery;
+import com.mogo.map.uicontroller.IMogoMapUIController;
+import com.mogo.utils.AppUtils;
+import com.mogo.utils.logger.Logger;
+
+/**
+ * @author congtaowang
+ * @since 2020/6/17
+ *
+ * 描述
+ */
+class MogoMapDelegateFactory {
+
+ private static final String TAG = "MogoMapDelegateFactory";
+
+ private static boolean useCustom = false;
+
+ public static boolean isUseCustom() {
+ return useCustom;
+ }
+
+ public static IMogoGeoSearch getGeoSearchDelegate( Context context ) {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoGeoSearch" );
+ return new com.mogo.map.impl.custom.search.GeocodeSearchClient( context );
+ }
+ return new GeocodeSearchClient( context );
+ }
+
+ public static IMogoInputtipsSearch getInputtipsSearchDelegate( Context context, MogoInputtipsQuery query ) {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoInputtipsSearch" );
+ return new com.mogo.map.impl.custom.search.InputtipsSearch( context, query );
+ }
+ return new InputtipsSearch( context, query );
+ }
+
+ public static IMogoLocationClient getLocationClientDelegate( Context context ) {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoLocationClient" );
+ return new com.mogo.map.impl.custom.location.ALocationClient( context );
+ }
+ return new ALocationClient( context );
+ }
+
+ public static IMogoMapUIController getMapUIControllerDelegate() {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoMapUIController" );
+ return com.mogo.map.impl.custom.uicontroller.AMapUIController.getInstance();
+ }
+ return AMapUIController.getInstance();
+ }
+
+ public static IMogoNavi getNaviDelegate( Context context ) {
+
+ if ( DebugConfig.isUseCustomNavi() ) {
+ return NaviClient.getInstance( context );
+ } else if ( AppUtils.isAppInstalled( context, "com.autonavi.amapauto" ) ) {
+ return AutoNaviClient.getInstance( context );
+ } else {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoNavi" );
+ return com.mogo.map.impl.custom.navi.NaviClient.getInstance( context );
+ }
+ }
+ return NaviClient.getInstance( context );
+ }
+
+ public static IMogoPoiSearch getPoiSearchClientDelegate( Context context, MogoPoiSearchQuery query ) {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoPoiSearch" );
+ return new com.mogo.map.impl.custom.search.PoiSearchClient( context, query );
+ }
+ return new PoiSearchClient( context, query );
+ }
+
+ public static IMogoRoadSearch getRoadSearchDelegate() {
+ if ( useCustom ) {
+ Logger.d( TAG, "use custom IMogoRoadSearch" );
+ return new com.mogo.map.impl.custom.search.RoadSearchClient();
+ }
+ return new RoadSearchClient();
+ }
+}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
index 8ba96d4333..c54202d4ab 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
@@ -13,6 +13,7 @@ import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.map.uicontroller.MapCameraPosition;
import com.mogo.map.uicontroller.MapControlResult;
+import com.mogo.utils.logger.Logger;
import java.util.List;
@@ -23,13 +24,15 @@ import java.util.List;
* 描述
*/
public class MogoMapUIController implements IMogoMapUIController {
+
+ private static final String TAG = "MogoMapUIController";
private IMogoMapUIController mDelegate;
private static volatile MogoMapUIController sInstance;
private MogoMapUIController() {
- mDelegate = AMapUIController.getInstance();
+ mDelegate = MogoMapDelegateFactory.getMapUIControllerDelegate();
}
public static MogoMapUIController getInstance() {
@@ -43,6 +46,10 @@ public class MogoMapUIController implements IMogoMapUIController {
return sInstance;
}
+ public void setDelegate( IMogoMapUIController mDelegate ) {
+ this.mDelegate = mDelegate;
+ }
+
public synchronized void release() {
sInstance = null;
}
@@ -73,6 +80,7 @@ public class MogoMapUIController implements IMogoMapUIController {
@Override
public void changeMapMode(EnumMapUI mode) {
if (mDelegate != null) {
+ Logger.d( TAG, "set type: %s", mode.name() );
mDelegate.changeMapMode(mode);
}
}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java
index a848c57f7a..594cdd4b3d 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapView.java
@@ -5,11 +5,13 @@ import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.FrameLayout;
import androidx.annotation.Nullable;
-import com.amap.api.col.n3.lg;
import com.mogo.map.impl.amap.AMapBaseMapView;
+import com.mogo.map.impl.amap.uicontroller.AMapUIController;
+import com.mogo.map.impl.custom.CustomMapView;
import com.mogo.utils.logger.Logger;
/**
@@ -18,9 +20,10 @@ import com.mogo.utils.logger.Logger;
*
* 地图实例
*/
-public class MogoMapView extends AMapBaseMapView implements ILifeCycle {
+public class MogoMapView extends MogoBaseMapView implements ILifeCycle {
private static final String TAG = "MogoMapView";
+
public MogoMapView( Context context ) {
super( context );
}
@@ -33,41 +36,121 @@ public class MogoMapView extends AMapBaseMapView implements ILifeCycle {
super( context, attrs, defStyleAttr );
}
+ private boolean mIsVrMode = false;
+
@Override
- protected void init( Context context ) {
- super.init( context );
+ protected void addDleMaps() {
+
+ display2DMap( true, true );
+ }
+
+ private void addAMapView(){
+ mAMapView = new AMapBaseMapView().create( getContext() );
+ if ( mAMapView != null ) {
+ final View mapView = mAMapView.getMapView();
+ if ( mapView != null ) {
+ addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) );
+ } else {
+ Logger.e( TAG, "create MapView instance failed." );
+ }
+ } else {
+ Logger.e( TAG, "create IMogoMapView instance failed." );
+ }
+ }
+
+ private void addVrMapView(){
+ mCustomMapView = new CustomMapView().create( getContext() );
+ if ( mCustomMapView != null ) {
+ final View mapView = mCustomMapView.getMapView();
+ if ( mapView != null ) {
+ addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) );
+ } else {
+ Logger.e( TAG, "create MapView instance failed." );
+ }
+ } else {
+ Logger.e( TAG, "create IMogoMapView instance failed." );
+ }
+ mCustomMapView.onCreate( null );
+ }
+
+ private void removeVrMapView(){
+ try {
+ mCustomMapView.onDestroy();
+ removeView( mCustomMapView.getMapView() );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+
+ private void removeAMapView(){
+ try {
+ mAMapView.onPause();
+ removeView( mAMapView.getMapView() );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
}
@Override
- public IMogoMap getMap() {
- return super.getMap();
+ public void display2DMap( boolean invokeCreateAuto, boolean invokeResumeAuto ) {
+ mIsVrMode = false;
+ MogoMarkerManager.getInstance( getContext() ).removeMarkers();
+ removeVrMapView();
+ addAMapView();
+ mMapView = mAMapView;
+ MogoMap.getInstance().init( getContext(), mMapView.getMap() );
+ MogoMapUIController.getInstance().setDelegate( AMapUIController.getInstance() );
+ mAMapView.onResume();
+ }
+
+ @Override
+ public void displayVRMap( boolean invokeCreateAuto, boolean invokeResumeAuto ) {
+ mIsVrMode = true;
+ MogoMarkerManager.getInstance( getContext() ).removeMarkers();
+ removeAMapView();
+ addVrMapView();
+ mMapView = mCustomMapView;
+ MogoMap.getInstance().init( getContext(), mMapView.getMap() );
+ MogoMapUIController.getInstance().setDelegate( com.mogo.map.impl.custom.uicontroller.AMapUIController.getInstance() );
+ mCustomMapView.onResume();
+ post( new Runnable() {
+ @Override
+ public void run() {
+ try {
+ getMap().getUIController().showMyLocation( true );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ } );
+ }
+
+ public boolean isVrMode() {
+ return mIsVrMode;
}
@Override
public void onCreate( Bundle bundle ) {
super.onCreate( bundle );
- Logger.d(TAG,"onCreate");
+ Logger.d( TAG, "onCreate" );
}
@Override
public void onResume() {
super.onResume();
- Logger.d(TAG,"onResume");
-
+ Logger.d( TAG, "onResume" );
}
@Override
public void onPause() {
super.onPause();
- Logger.d(TAG,"onPause");
-
+ Logger.d( TAG, "onPause" );
}
@Override
public void onDestroy() {
super.onDestroy();
- Logger.d(TAG,"onDestroy");
-
+ Logger.d( TAG, "onDestroy" );
}
@Override
@@ -79,9 +162,4 @@ public class MogoMapView extends AMapBaseMapView implements ILifeCycle {
public void onLowMemory() {
super.onLowMemory();
}
-
- @Override
- public IMogoMapView getMapView() {
- return super.getMapView();
- }
}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java
index 402feac710..72a7f1c596 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoNavi.java
@@ -10,7 +10,9 @@ import com.mogo.map.impl.automap.navi.AutoNaviClient;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNavi;
import com.mogo.map.navi.MogoCalculatePath;
+import com.mogo.map.navi.MogoCarLocationChangedListenerRegister;
import com.mogo.map.navi.MogoNaviConfig;
+import com.mogo.map.navi.MogoOperationListenerRegister;
import com.mogo.map.navi.OnCalculatePathItemClickInteraction;
import com.mogo.utils.AppUtils;
@@ -29,13 +31,7 @@ public class MogoNavi implements IMogoNavi {
private static volatile MogoNavi sInstance;
private MogoNavi( Context context ) {
- if ( DebugConfig.isUseCustomNavi() ) {
- mDelegate = NaviClient.getInstance( context );
- } else if ( AppUtils.isAppInstalled( context, "com.autonavi.amapauto" ) ) {
- mDelegate = AutoNaviClient.getInstance( context );
- } else {
- mDelegate = NaviClient.getInstance( context );
- }
+ mDelegate = MogoMapDelegateFactory.getNaviDelegate( context );
}
public static MogoNavi getInstance( Context context ) {
@@ -136,9 +132,7 @@ public class MogoNavi implements IMogoNavi {
@Override
public void setLineClickInteraction( OnCalculatePathItemClickInteraction itemClickInteraction ) {
- if ( mDelegate != null ) {
- mDelegate.setLineClickInteraction( itemClickInteraction );
- }
+ MogoOperationListenerRegister.getInstance().setLineClickInteraction( itemClickInteraction );
}
@Override
@@ -197,9 +191,7 @@ public class MogoNavi implements IMogoNavi {
@Override
public void registerCarLocationChangedListener( IMogoCarLocationChangedListener2 listener ) {
- if ( mDelegate != null ) {
- mDelegate.registerCarLocationChangedListener( listener );
- }
+ MogoCarLocationChangedListenerRegister.getInstance().registerCarLocationChangedListener( listener );
}
@Override
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoPoiSearch.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoPoiSearch.java
index c40e73de9f..3e1a782a05 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoPoiSearch.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoPoiSearch.java
@@ -22,7 +22,7 @@ public class MogoPoiSearch implements IMogoPoiSearch {
private IMogoPoiSearch mDelegate;
public MogoPoiSearch( Context context, MogoPoiSearchQuery query ) {
- mDelegate = new PoiSearchClient( context, query );
+ mDelegate = MogoMapDelegateFactory.getPoiSearchClientDelegate( context, query );
}
@Override
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java
index cbd86301c0..5853df9389 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoRoadSearch.java
@@ -2,7 +2,6 @@ package com.mogo.map;
import android.content.Context;
-import com.mogo.map.impl.amap.search.RoadSearchClient;
import com.mogo.map.search.drive.IMogoRoadSearch;
import com.mogo.map.search.drive.IMogoRoadSearchListener;
import com.mogo.map.search.drive.MogoRoadSearchQuery;
@@ -15,10 +14,10 @@ import com.mogo.map.search.drive.MogoRoadSearchQuery;
*/
public class MogoRoadSearch implements IMogoRoadSearch {
- private RoadSearchClient mDelegate;
+ private IMogoRoadSearch mDelegate;
public MogoRoadSearch() {
- mDelegate = new RoadSearchClient();
+ mDelegate = MogoMapDelegateFactory.getRoadSearchDelegate();
}
@Override
diff --git a/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml b/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml
index 965be80a22..d119091bd3 100644
--- a/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml
+++ b/main-extensions/mogo-module-main-independent/src/main/AndroidManifest.xml
@@ -12,6 +12,7 @@
android:screenOrientation="landscape"
android:stateNotNeeded="true"
android:taskAffinity=""
+ android:hardwareAccelerated="true"
android:theme="@style/Main"
android:windowSoftInputMode="adjustPan|stateHidden">
diff --git a/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java b/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java
index ab7fcb6522..d28a93c7d9 100644
--- a/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java
+++ b/main-extensions/mogo-module-main-independent/src/main/java/com/zhidao/mogo/module/main/independent/MainIndependentActivity.java
@@ -38,7 +38,7 @@ public class MainIndependentActivity extends MainActivity {
// 事件面板
FrameLayout.LayoutParams eventPanelParams = ( ( FrameLayout.LayoutParams ) mEventPanel.getLayoutParams() );
eventPanelParams.leftMargin = getResources().getDimensionPixelSize( R.dimen.module_main_entrance_fragment_container_marginLeft );
- mEntrance.setLayoutParams( eventPanelParams );
+ mEventPanel.setLayoutParams( eventPanelParams );
// 事件面板
FrameLayout.LayoutParams historyMessagePanelParams = ( ( FrameLayout.LayoutParams ) mEventPanel.getLayoutParams() );
diff --git a/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java b/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java
index 5241b250a2..1cc07beaa2 100644
--- a/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java
+++ b/main-extensions/mogo-module-main-launcher/src/main/java/com/zhidao/mogo/module/main/launcher/MainLauncherActivity.java
@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.os.Process;
import android.text.TextUtils;
import android.view.View;
+import android.widget.FrameLayout;
import androidx.annotation.Nullable;
@@ -13,6 +14,8 @@ import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.main.MainActivity;
import com.mogo.module.main.cards.MogoModulesManager;
import com.mogo.service.intent.IMogoIntentListener;
+import com.mogo.service.statusmanager.IMogoStatusChangedListener;
+import com.mogo.service.statusmanager.StatusDescriptor;
import com.mogo.utils.logger.Logger;
/**
@@ -20,13 +23,15 @@ import com.mogo.utils.logger.Logger;
*
* @author tongchenfei
*/
-public class MainLauncherActivity extends MainActivity implements IMogoIntentListener {
-
+public class MainLauncherActivity extends MainActivity implements IMogoIntentListener, IMogoStatusChangedListener {
+ private static final String TAG = "MainLauncherActivity";
protected boolean mIsHomeKeyDown = false;
@Override
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
DebugConfig.setNeedRequestUserInfo( true );
+ mServiceApis.getStatusManagerApi().registerStatusChangedListener(TAG,
+ StatusDescriptor.VR_MODE, this);
}
@Override
@@ -89,6 +94,8 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
@Override
protected void onDestroy() {
super.onDestroy();
+ mServiceApis.getStatusManagerApi().unregisterStatusChangedListener(TAG,
+ StatusDescriptor.VR_MODE, this);
try {
// acc off 之后会出现进程还在,但是页面被杀的情况,这个直接杀掉进程,然后让整个进程重启
Process.killProcess( Process.myPid() );
@@ -110,4 +117,17 @@ public class MainLauncherActivity extends MainActivity implements IMogoIntentLis
sendBroadcast( intent );
Logger.d( TAG, "send msg to AI Voice" );
}
+
+ @Override
+ public void onStatusChanged(StatusDescriptor descriptor, boolean isTrue) {
+ if (isTrue) {
+ FrameLayout.LayoutParams entranceParams = ( ( FrameLayout.LayoutParams ) mEntrance.getLayoutParams() );
+ entranceParams.leftMargin = getResources().getDimensionPixelSize( R.dimen.module_main_entrance_fragment_container_marginLeft_in_vr_mode );
+ mEntrance.setLayoutParams( entranceParams );
+ }else{
+ FrameLayout.LayoutParams entranceParams = ( ( FrameLayout.LayoutParams ) mEntrance.getLayoutParams() );
+ entranceParams.leftMargin = getResources().getDimensionPixelSize( R.dimen.module_main_entrance_fragment_container_marginLeft_out_vr_mode );
+ mEntrance.setLayoutParams( entranceParams );
+ }
+ }
}
diff --git a/main-extensions/mogo-module-main-launcher/src/main/res/values/dimens.xml b/main-extensions/mogo-module-main-launcher/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000..79e190ca2d
--- /dev/null
+++ b/main-extensions/mogo-module-main-launcher/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 204px
+ 800px
+
\ No newline at end of file
diff --git a/modules.txt b/modules.txt
new file mode 100644
index 0000000000..59dbcdef06
--- /dev/null
+++ b/modules.txt
@@ -0,0 +1,60 @@
+:foudations:mogo-utils
+:skin:mogo-skin-support
+:tts:tts-base
+:tts:tts-zhi
+:tts:tts-di
+:tts:tts-noop
+:foudations:mogo-commons
+:foudations:httpdns-base
+:foudations:httpdns-noop
+:foudations:httpdns-tencent
+:libraries:mogo-map-api
+:skin:skin-support
+:skin:skin-support-appcompat
+:skin:skin-support-cardview
+:skin:skin-support-constraint-layout
+:skin:skin-support-design
+:services:mogo-service-api
+:libraries:map-amap
+:libraries:map-autonavi
+:libraries:mogo-map
+:modules:mogo-module-common
+:skin:mogo-skin-support-impl
+:skin:mogo-skin-support-noop
+:test:crashreport
+:test:crashreport-bugly
+:test:crashreport-noop
+:skin:mogo-skin-light
+:services:mogo-service
+:modules:mogo-module-obu
+:modules:mogo-module-map
+:modules:mogo-module-apps
+:modules:mogo-module-gps-simulator
+:modules:mogo-module-gps-simulator-debug
+:modules:mogo-module-gps-simulator-noop
+:modules:mogo-module-service
+:modules:mogo-module-authorize
+:modules:mogo-module-share
+:modules:mogo-module-extensions
+:modules:mogo-module-search
+:modules:mogo-module-media
+:modules:mogo-module-v2x
+:modules:mogo-module-back
+:modules:mogo-module-main
+:modules:mogo-module-guide
+:main-extensions:mogo-module-main-independent
+:main-extensions:mogo-module-main-launcher
+:modules:mogo-module-left-panel
+:modules:mogo-module-left-panel-noop
+:foudations:mogo-base-services-apk
+:foudations:mogo-base-services-sdk
+:modules:mogo-module-push-base
+:modules:mogo-module-push-noop
+:modules:mogo-module-push
+:libraries:tanlulib
+:libraries:mogo-tanlu-api
+:modules:mogo-module-monitor
+:modules:mogo-module-splash
+:modules:mogo-module-splash-noop
+:modules:mogo-module-tanlu
+:modules:mogo-module-widgets
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/aidl/com/mogo/module/common/entity/MogoSnapshotSetData.aidl b/modules/mogo-module-common/src/main/aidl/com/mogo/module/common/entity/MogoSnapshotSetData.aidl
new file mode 100644
index 0000000000..52a9105824
--- /dev/null
+++ b/modules/mogo-module-common/src/main/aidl/com/mogo/module/common/entity/MogoSnapshotSetData.aidl
@@ -0,0 +1,3 @@
+// ShapshotSetData.aidl
+package com.mogo.module.common.entity;
+parcelable MogoSnapshotSetData;
diff --git a/modules/mogo-module-common/src/main/aidl/com/mogo/module/common/machinevision/IMachineVisionInterface.aidl b/modules/mogo-module-common/src/main/aidl/com/mogo/module/common/machinevision/IMachineVisionInterface.aidl
new file mode 100644
index 0000000000..c456abaca1
--- /dev/null
+++ b/modules/mogo-module-common/src/main/aidl/com/mogo/module/common/machinevision/IMachineVisionInterface.aidl
@@ -0,0 +1,14 @@
+// IMachineVisionInterface.aidl
+package com.mogo.module.common.machinevision;
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+
+// Declare any non-default types here with import statements
+
+interface IMachineVisionInterface {
+
+ oneway void postData(in MogoSnapshotSetData data);
+
+ oneway void hideViewIfExist();
+
+ oneway void showViewIfExist();
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/AdasRecognizedType.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/AdasRecognizedType.java
new file mode 100644
index 0000000000..4e1cf1166a
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/AdasRecognizedType.java
@@ -0,0 +1,55 @@
+package com.mogo.module.common.constants;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+enum AdasRecognizedType {
+ //背景
+ classIdBackground( "background", 0 ),
+ //人
+ classIdPerson( "person", 1 ),
+ //自行车
+ classIdBicycle( "bicycle", 2 ),
+ //小轿车
+ classIdCar( "car", 3 ),
+ //摩托车
+ classIdMoto( "moto", 4 ),
+ //红绿灯
+ classIdTrafficSign( "traffic_sign", 5 ),
+ //bus
+ classIdTrafficBus( "traffic_bus", 6 ),
+ //track
+ classIdTrafficTruck( "traffic_truck", 8 );
+
+ AdasRecognizedType( int code ) {
+ this.code = code;
+ }
+
+ private String res = "";
+ private int code = -1;
+
+ AdasRecognizedType( String res, int code ) {
+ this.res = res;
+ this.code = code;
+ }
+
+ public String getRes() {
+ return res;
+ }
+
+ public static AdasRecognizedType valueFrom( int code ) {
+ if ( code == 0 ) {
+ return classIdCar;
+ }
+ for ( AdasRecognizedType value : AdasRecognizedType.values() ) {
+ if ( value.code == code ) {
+ return value;
+ }
+ }
+ return null;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/CarModelType.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/CarModelType.java
new file mode 100644
index 0000000000..875e875ffd
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/CarModelType.java
@@ -0,0 +1,33 @@
+package com.mogo.module.common.constants;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/29
+ *
+ * 车模型类型
+ */
+enum CarModelType {
+
+ Other( "other" ),
+ OtherLeft( "other_left" ),
+ OtherRight( "other_right" ),
+
+ OtherLeftReverse( "other_left_reverse" ),
+ OtherRightReverse( "other_right_reverse" ),
+ OtherReverse( "other_reverse" ),
+
+ Self( "self" ),
+ SelfLeft( "self_left" ),
+ SelfRight( "self_right" );
+
+ private String res;
+
+ CarModelType( String res ) {
+ this.res = res;
+ }
+
+ public String getRes() {
+ return res;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java
new file mode 100644
index 0000000000..bce9c3fdc7
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/DataTypes.java
@@ -0,0 +1,25 @@
+package com.mogo.module.common.constants;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/28
+ *
+ * 描述
+ */
+class DataTypes {
+ /**
+ * adas识别数据
+ */
+ public static final String TYPE_MARKER_ADAS = "TYPE_MARKER_ADAS";
+
+ /**
+ * 云端下发数据
+ */
+ public static final String TYPE_MARKER_CLOUD_DATA = "TYPE_MARKER_CLOUD_DATA";
+
+ /**
+ * Push 事件场景 VR
+ */
+ public static final String TYPE_MARKER_PUSH_DATA = "TYPE_MARKER_PUSH_DATA";
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/SafeType.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/SafeType.java
new file mode 100644
index 0000000000..38a0625a2f
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/SafeType.java
@@ -0,0 +1,32 @@
+package com.mogo.module.common.constants;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/29
+ *
+ * 描述
+ */
+enum SafeType {
+ Normal( "normal", "安全" ),
+ SpeedWarm( "warm", "注意/超速" ),
+ DistanceWarm( "warm", "注意/保持车距" ),
+ SpeedDangerous( "dangerous", "危险/严重超速" ),
+ DistanceDangerous( "dangerous", "危险/距离过近" );
+
+ private String msg;
+ private String res;
+
+ SafeType( String res, String msg ) {
+ this.msg = msg;
+ this.res = res;
+ }
+
+ public String getRes() {
+ return res;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/VisionMode.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/VisionMode.java
new file mode 100644
index 0000000000..bb15f594cd
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/constants/VisionMode.java
@@ -0,0 +1,24 @@
+package com.mogo.module.common.constants;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/29
+ *
+ * 描述
+ */
+enum VisionMode {
+
+ Machine( "machine" ),
+ User( "user" );
+
+ private String res;
+
+ VisionMode( String res ) {
+ this.res = res;
+ }
+
+ public String getRes() {
+ return res;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java
new file mode 100644
index 0000000000..345502ad6f
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/AdasRecognizedResultDrawer.java
@@ -0,0 +1,202 @@
+package com.mogo.module.common.drawer;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.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.R;
+import com.mogo.module.common.constants.AdasRecognizedType;
+import com.mogo.module.common.constants.DataTypes;
+import com.mogo.module.common.constants.SafeType;
+import com.mogo.module.common.constants.VisionMode;
+import com.mogo.module.common.drawer.marker.MarkerResourceManager;
+import com.mogo.module.common.utils.CoordinateUtils;
+import com.mogo.service.adas.entity.ADASRecognizedListResult;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/28
+ *
+ * 绘制adas近景识别到的车辆
+ */
+class AdasRecognizedResultDrawer extends BaseDrawer {
+
+ private static volatile AdasRecognizedResultDrawer sInstance;
+
+ private Context mContext;
+
+ private AdasRecognizedResultDrawer() {
+ mContext = AbsMogoApplication.getApp();
+ }
+
+ public static AdasRecognizedResultDrawer getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( AdasRecognizedResultDrawer.class ) {
+ if ( sInstance == null ) {
+ sInstance = new AdasRecognizedResultDrawer();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ // adas marker 缓存
+ private Map< String, IMogoMarker > mAdasRecognizedMarkersCaches = new ConcurrentHashMap<>();
+
+ public void renderAdasRecognizedResult( List< ADASRecognizedListResult > resultList, boolean machineVision, double curSpeed ) {
+ if ( resultList == null || resultList.isEmpty() ) {
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers( DataTypes.TYPE_MARKER_ADAS );
+ return;
+ }
+ purgeAdasRecognizedData( resultList );
+ for ( ADASRecognizedListResult recognizedListResult : resultList ) {
+ if ( recognizedListResult == null ) {
+ continue;
+ }
+ IMogoMarker marker = null;
+ String uniqueKey = recognizedListResult.uuid;
+ if ( TextUtils.isEmpty( uniqueKey ) ) {
+ continue;
+ }
+ if ( mAdasRecognizedMarkersCaches.containsKey( uniqueKey ) ) {
+ marker = mAdasRecognizedMarkersCaches.get( uniqueKey );
+ }
+ if ( marker == null || marker.isDestroyed() ) {
+ marker = drawAdasRecognizedDataMarker( recognizedListResult, machineVision, curSpeed );
+ if ( marker == null ) {
+ continue;
+ }
+ mAdasRecognizedMarkersCaches.put( uniqueKey, marker );
+ }
+ if ( marker.getObject() instanceof MogoLatLng ) {
+ marker.setPosition( ( ( MogoLatLng ) marker.getObject() ).lat, ( ( MogoLatLng ) marker.getObject() ).lon );
+ }
+
+ List< MogoLatLng > points = new ArrayList<>();
+ MogoLatLng endLatLon = null;
+ if ( recognizedListResult.latLonList != null
+ && recognizedListResult.latLonList.size() > 1 ) {
+ for ( int j = 0; j < recognizedListResult.latLonList.size(); j++ ) {
+ ADASRecognizedListResult.LatLon latLon = recognizedListResult.latLonList.get( j );
+ if ( latLon == null ) {
+ continue;
+ }
+ double targetPos[] = CoordinateUtils.transformFromWGSToGCJ( latLon.lat, latLon.lon );
+ points.add( endLatLon = new MogoLatLng( targetPos[POS_LAT], targetPos[POS_LON] ) );
+ }
+
+ } else if ( recognizedListResult.latLonList != null
+ && recognizedListResult.latLonList.size() == 1 ) {
+ // 原来的点和新的点做一个数组进行平滑移动
+ MogoLatLng latLng = marker.getPosition();
+ ADASRecognizedListResult.LatLon latLon = recognizedListResult.latLonList.get( 0 );
+ if ( latLon == null ) {
+ continue;
+ }
+ points.add( latLng );
+ points.add( endLatLon = new MogoLatLng( latLng.lat, latLon.lon ) );
+ }
+ if ( endLatLon != null ) {
+ marker.setObject( endLatLon );
+ }
+ if ( points.size() >= 1 ) {
+ marker.startSmooth( points, 1 );
+ }
+ }
+ }
+
+ /**
+ * 过滤adas数据中,不存在的 marker
+ *
+ * @param resultList
+ */
+ private void purgeAdasRecognizedData( List< ADASRecognizedListResult > resultList ) {
+ if ( resultList == null || resultList.isEmpty() ) {
+ return;
+ }
+ if ( mAdasRecognizedMarkersCaches.isEmpty() ) {
+ return;
+ }
+ Map< String, IMogoMarker > existMarker = new HashMap<>();
+ for ( ADASRecognizedListResult recognizedListResult : resultList ) {
+ if ( recognizedListResult == null ) {
+ continue;
+ }
+ String uniqueKey = recognizedListResult.uuid;
+ if ( mAdasRecognizedMarkersCaches.containsKey( uniqueKey ) ) {
+ existMarker.put( uniqueKey, mAdasRecognizedMarkersCaches.get( uniqueKey ) );
+ }
+ }
+ if ( !existMarker.isEmpty() ) {
+ for ( String key : mAdasRecognizedMarkersCaches.keySet() ) {
+ if ( !existMarker.containsKey( key ) ) {
+ try {
+ IMogoMarker marker = mAdasRecognizedMarkersCaches.remove( key );
+ marker.destroy();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ private IMogoMarker drawAdasRecognizedDataMarker( ADASRecognizedListResult recognizedListResult,
+ boolean machineVision,
+ double curSpeed ) {
+ if ( recognizedListResult == null ) {
+ return null;
+ }
+
+ MogoMarkerOptions options = new MogoMarkerOptions()
+ .owner( DataTypes.TYPE_MARKER_ADAS )
+ .icon( inflateView( recognizedListResult, machineVision, curSpeed ) )
+ .gps( true )
+ .anchor( 0.5f, 0.5f )
+ .rotate( ( float ) recognizedListResult.heading )
+ .position( new MogoLatLng( recognizedListResult.latLonList.get( 0 ).lat, recognizedListResult.latLonList.get( 0 ).lon ) );
+ return MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_ADAS, options );
+ }
+
+ private View inflateView( ADASRecognizedListResult data, boolean machineVision, double curSpeed ) {
+ View rootView = LayoutInflater.from( AbsMogoApplication.getApp() ).inflate( R.layout.module_commons_layout_car, null );
+// SafeType safeType = getSafeType( data.distanceX, data.distanceY, data.speed, curSpeed );
+// TextView tv = rootView.findViewById( R.id.module_commons_marker_car_speed );
+// tv.setText( safeType.getMsg() );
+ ImageView iv = rootView.findViewById( R.id.module_commons_marker_car_model );
+// iv.setImageResource( MarkerResourceManager.getMarkerDrawableResId(
+// machineVision ? VisionMode.Machine : VisionMode.User,
+// AdasRecognizedType.valueFrom( data.type ),
+// getCarModelType(),
+// safeType
+// ) );
+
+ iv.setImageResource( R.drawable.icon_map_marker_car_gray );
+ return rootView;
+ }
+
+}
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
new file mode 100644
index 0000000000..950134d646
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/BaseDrawer.java
@@ -0,0 +1,75 @@
+package com.mogo.module.common.drawer;
+
+import com.mogo.module.common.constants.CarModelType;
+import com.mogo.module.common.constants.SafeType;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/30
+ *
+ * 描述
+ */
+class BaseDrawer {
+
+ public static final int POS_LON = 1;
+ public static final int POS_LAT = 0;
+
+ public static final double BOUND_DISTANCE_DANGEROUS = 0.5;
+ public static final double BOUND_SPEED_DANGEROUS = 1.5;
+
+ public static final double BOUND_DISTANCE_WARM = 1;
+ public static final double BOUND_SPEED_WARM = 1.1;
+
+ /**
+ * 安全类型
+ *
+ * @param distance
+ * @param speed
+ * @param curSpeed
+ * @return
+ */
+ protected SafeType getSafeType( double distance, double speed, double curSpeed ) {
+ if ( distance < BOUND_DISTANCE_DANGEROUS ) {
+ return SafeType.DistanceDangerous;
+ }
+ if ( speed > curSpeed * BOUND_SPEED_DANGEROUS ) {
+ return SafeType.SpeedDangerous;
+ }
+ if ( distance < BOUND_DISTANCE_WARM ) {
+ return SafeType.DistanceDangerous;
+ }
+ if ( speed > curSpeed * BOUND_SPEED_WARM ) {
+ return SafeType.DistanceWarm;
+ }
+ return SafeType.Normal;
+ }
+
+
+ protected SafeType getSafeType( double distanceX, double distanceY, double speed, double curSpeed ) {
+ if ( distanceX < BOUND_DISTANCE_DANGEROUS || distanceY < BOUND_DISTANCE_DANGEROUS ) {
+ return SafeType.DistanceDangerous;
+ }
+ if ( speed > curSpeed * BOUND_SPEED_DANGEROUS ) {
+ return SafeType.SpeedDangerous;
+ }
+ if ( distanceX < BOUND_DISTANCE_WARM || distanceY < BOUND_DISTANCE_WARM ) {
+ return SafeType.DistanceWarm;
+ }
+ if ( speed > curSpeed * BOUND_SPEED_WARM ) {
+ return SafeType.SpeedWarm;
+ }
+ return SafeType.Normal;
+ }
+
+
+ /**
+ * 车模
+ *
+ * @return
+ */
+ protected CarModelType getCarModelType() {
+ // 根据车道、行驶方向等计算出选用哪个车模图片
+ return CarModelType.Other;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java
new file mode 100644
index 0000000000..8fea64910c
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/MarkerDrawer.java
@@ -0,0 +1,265 @@
+package com.mogo.module.common.drawer;
+
+import android.text.TextUtils;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.IMogoMarkerClickListener;
+import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.drawer.marker.IMarkerView;
+import com.mogo.module.common.drawer.marker.MapMarkerAdapter;
+import com.mogo.module.common.drawer.marker.OnlineCarMarkerView;
+import com.mogo.module.common.entity.MarkerExploreWay;
+import com.mogo.module.common.entity.MarkerNoveltyInfo;
+import com.mogo.module.common.entity.MarkerOnlineCar;
+import com.mogo.module.common.entity.MarkerShareMusic;
+import com.mogo.module.common.entity.MarkerShowEntity;
+import com.mogo.utils.logger.Logger;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/28
+ *
+ * 描述
+ */
+class MarkerDrawer {
+
+ public static final int MARKER_Z_INDEX_HIGH = 100;
+ public static final int MARKER_Z_INDEX_LOW = 2;
+
+ private static volatile MarkerDrawer sInstance;
+
+ private MarkerDrawer() {
+ }
+
+ public static MarkerDrawer getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( MarkerDrawer.class ) {
+ if ( sInstance == null ) {
+ sInstance = new MarkerDrawer();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ public IMogoMarker drawMapMarkerImpl( MarkerShowEntity markerShowEntity, int zIndex, IMogoMarkerClickListener listener ) {
+ if ( markerShowEntity == null || markerShowEntity.getMarkerLocation() == null ) {
+ return null;
+ }
+ MogoMarkerOptions options = new MogoMarkerOptions().owner( markerShowEntity.getMarkerType() ).zIndex( zIndex ).object( markerShowEntity ).latitude( markerShowEntity.getMarkerLocation().getLat() ).longitude( markerShowEntity.getMarkerLocation().getLon() );
+ IMarkerView markerView = MapMarkerAdapter.getMarkerView( AbsMogoApplication.getApp(), markerShowEntity, options );
+ if ( markerView instanceof OnlineCarMarkerView ) {
+ try {
+ options.icon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) );
+ } catch ( Exception e ) {
+ options.icon( markerView.getBitmap( 0 ) );
+ }
+ options.anchor( 0.5f, 0.5f );
+ } else {
+ options.icon( markerView.getView() );
+ }
+
+ IMogoMarker marker = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).addMarker( markerShowEntity.getMarkerType(), options );
+ if ( marker != null ) {
+ marker.setOwner( markerShowEntity.getMarkerType() );
+ markerView.setMarker( marker );
+ marker.setOnMarkerClickListener( listener );
+ markerShowEntity.setMarker( marker );
+ }
+ return marker;
+ }
+
+ /**
+ * S = (A ∩ B) ∪ B
+ * (A ∩ B)作为旧列表需要保留的部分
+ *
+ * @param newList
+ * @return
+ */
+ public Map< String, IMogoMarker > purgeMarkerData( List newList, String markerType ) {
+
+ final long start = System.currentTimeMillis();
+ Map< String, IMogoMarker > existMap = new HashMap<>();
+ List< IMogoMarker > allCarsList = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).getMarkers( markerType );
+ if ( allCarsList == null || allCarsList.isEmpty() ) {
+ return existMap;
+ }
+ if ( newList == null || newList.isEmpty() ) {
+ return existMap;
+ }
+
+ Map< String, IMogoMarker > allMap = new HashMap<>();
+ for ( IMogoMarker marker : allCarsList ) {
+ String sn = getPrimaryKeyFromMarker( marker );
+ allMap.put( sn, marker );
+ }
+ for ( Object entity : newList ) {
+ String sn = getPrimaryKeyFromEntity( entity );
+ if ( allMap.containsKey( sn ) ) {
+ if ( !isNewVehicleType( entity, allMap.get( sn ) ) ) {
+ existMap.put( sn, allMap.get( sn ) );
+ }
+ }
+ }
+ for ( String sn : allMap.keySet() ) {
+ if ( !existMap.containsKey( sn ) ) {
+ IMogoMarker dirtyMarker = allMap.get( sn );
+ allCarsList.remove( dirtyMarker );
+ if ( dirtyMarker != null ) {
+ dirtyMarker.destroy();
+ }
+ }
+ }
+ allMap.clear();
+ Logger.i( "timer", "purge data cost " + ( System.currentTimeMillis() - start ) + "ms" );
+ return existMap;
+ }
+
+
+ /**
+ * @param maxAmount 展示的最大数量
+ * @param list
+ * @return
+ */
+ public int getAppropriateSize( int maxAmount, List list ) {
+ if ( list == null ) {
+ return 0;
+ }
+ return Math.min( maxAmount, list.size() );
+ }
+
+
+ private boolean isNewVehicleType( Object object, IMogoMarker marker ) {
+ if ( object instanceof MarkerOnlineCar
+ && marker != null
+ && marker.getObject() instanceof MarkerShowEntity
+ && ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() instanceof MarkerOnlineCar ) {
+ try {
+ return ( ( MarkerOnlineCar ) object ).getCarInfo().getVehicleType()
+ != ( ( MarkerOnlineCar ) ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() ).getCarInfo().getVehicleType();
+ } catch ( Exception e ) {
+
+ }
+ }
+ return false;
+ }
+
+ public String getPrimaryKeyFromEntity( Object entity ) {
+ if ( entity instanceof MarkerExploreWay ) {
+ String id = ( ( MarkerExploreWay ) entity ).getInfoId();
+ if ( !TextUtils.isEmpty( id ) ) {
+ return id;
+ }
+ }
+ return getCarSnFromEntity( entity );
+ }
+
+ private String getPrimaryKeyFromMarker( IMogoMarker marker ) {
+ if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) {
+ return null;
+ }
+ if ( !( marker.getObject() instanceof MarkerShowEntity ) ) {
+ return null;
+ }
+ return getPrimaryKeyFromEntity( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() );
+ }
+
+ private String getCarSnFromEntity( Object entity ) {
+ try {
+ if ( entity instanceof MarkerOnlineCar ) {
+ return ( ( MarkerOnlineCar ) entity ).getUserInfo().getSn();
+ } else if ( entity instanceof MarkerShareMusic ) {
+ return ( ( MarkerShareMusic ) entity ).getUserInfo().getSn();
+ } else if ( entity instanceof MarkerNoveltyInfo ) {
+ return ( ( MarkerNoveltyInfo ) entity ).getSn();
+ } else if ( entity instanceof MarkerExploreWay ) {
+ return ( ( MarkerExploreWay ) entity ).getUserInfo().getSn();
+ }
+ } catch ( Exception e ) {
+
+ }
+ return "";
+ }
+
+ public String getCarSnFromMarker( IMogoMarker marker ) {
+ if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) {
+ return null;
+ }
+ if ( !( marker.getObject() instanceof MarkerShowEntity ) ) {
+ return null;
+ }
+ return getCarSnFromEntity( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() );
+ }
+
+ /**
+ * 距离半径计算方式
+ *
+ * @param point1 点一坐标
+ * @param point2 点二坐标
+ * @return 两坐标的距离 单位:米(M)
+ */
+ public static float calculateLineDistance( MogoLatLng point1, MogoLatLng point2 ) {
+ if ( point1 != null && point2 != null ) {
+ return calculateLineDistance( point1.lon, point1.lat, point2.lon, point2.lat );
+ } else {
+ return 0.0F;
+ }
+ }
+
+ /**
+ * @param lon1
+ * @param lat1
+ * @param lon2
+ * @param lat2
+ * @return 两坐标的距离 单位:米(M)
+ */
+ public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) {
+ try {
+ double var2 = lon1;
+ double var4 = lat1;
+ double var6 = lon2;
+ double var8 = lat2;
+ var2 *= 0.01745329251994329D;
+ var4 *= 0.01745329251994329D;
+ var6 *= 0.01745329251994329D;
+ var8 *= 0.01745329251994329D;
+ double var10 = Math.sin( var2 );
+ double var12 = Math.sin( var4 );
+ double var14 = Math.cos( var2 );
+ double var16 = Math.cos( var4 );
+ double var18 = Math.sin( var6 );
+ double var20 = Math.sin( var8 );
+ double var22 = Math.cos( var6 );
+ double var24 = Math.cos( var8 );
+ double[] var28 = new double[3];
+ double[] var29 = new double[3];
+ var28[0] = var16 * var14;
+ var28[1] = var16 * var10;
+ var28[2] = var12;
+ var29[0] = var24 * var22;
+ var29[1] = var24 * var18;
+ var29[2] = var20;
+ return ( float ) ( Math.asin( Math.sqrt( ( var28[0] - var29[0] ) * ( var28[0] - var29[0] ) + ( var28[1] - var29[1] ) * ( var28[1] - var29[1] ) + ( var28[2] - var29[2] ) * ( var28[2] - var29[2] ) ) / 2.0D ) * 1.27420015798544E7D );
+ } catch ( Throwable var26 ) {
+ var26.printStackTrace();
+ return 0.0F;
+ }
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java
new file mode 100644
index 0000000000..5829eee710
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/OnlineCarDrawer.java
@@ -0,0 +1,193 @@
+package com.mogo.module.common.drawer;
+
+import android.graphics.Rect;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.IMogoMarkerClickListener;
+import com.mogo.module.common.ModuleNames;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.entity.MarkerCarPois;
+import com.mogo.module.common.entity.MarkerLocation;
+import com.mogo.module.common.entity.MarkerOnlineCar;
+import com.mogo.module.common.entity.MarkerShowEntity;
+import com.mogo.utils.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/28
+ *
+ * 描述
+ */
+class OnlineCarDrawer {
+
+ private static final String TAG = "OnlineCarDrawer";
+
+ // 平滑移动事件间隔(单位:秒)
+ private static final int SMOOTH_DURATION = 15;
+
+ private static volatile OnlineCarDrawer sInstance;
+
+ private OnlineCarDrawer() {
+ }
+
+ public static OnlineCarDrawer getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( OnlineCarDrawer.class ) {
+ if ( sInstance == null ) {
+ sInstance = new OnlineCarDrawer();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ /**
+ * 绘制在线车辆marker
+ *
+ * @param onlineCarList
+ */
+ public void drawOnlineCarMarkers( List< MarkerOnlineCar > onlineCarList,
+ int maxAmount,
+ boolean clearOld,
+ boolean showBounds,
+ Rect bound,
+ MogoLatLng centerPoint,
+ IMogoMarkerClickListener listener ) {
+ // 将数据同步给在线车辆,避免每次 perform 的时候去拉取,造成消耗
+ if ( onlineCarList == null || onlineCarList.isEmpty() ) {
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
+ return;
+ }
+
+ if ( clearOld ) {
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
+ }
+
+ int size = MarkerDrawer.getInstance().getAppropriateSize( maxAmount, onlineCarList );
+
+ Map< String, IMogoMarker > existCarMap = MarkerDrawer.getInstance().purgeMarkerData( onlineCarList, ModuleNames.CARD_TYPE_USER_DATA );
+
+ List< MogoLatLng > carPoints = new ArrayList<>();
+ for ( int i = 0; i < size; i++ ) {
+ MarkerOnlineCar markerOnlineCar = onlineCarList.get( i );
+ MarkerLocation markerLocation = markerOnlineCar.getLocation();
+ MarkerShowEntity markerShowEntity = new MarkerShowEntity();
+ markerShowEntity.setBindObj( markerOnlineCar );
+ markerShowEntity.setMarkerLocation( markerLocation );
+ markerShowEntity.setMarkerType( markerOnlineCar.getType() );
+
+ if ( markerOnlineCar.getCarInfo() != null ) {
+ markerShowEntity.setTextContent( markerOnlineCar.getUserInfo().getUserName() );
+ markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() );
+ }
+
+ if ( i <= 5 ) {
+ carPoints.add( new MogoLatLng( markerLocation.getLat(), markerLocation.getLon() ) );
+ }
+
+ String sn = MarkerDrawer.getInstance().getPrimaryKeyFromEntity( markerOnlineCar );
+ IMogoMarker mogoMarker = existCarMap.get( sn );
+ if ( mogoMarker == null || mogoMarker.isDestroyed() ) {
+ mogoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl( markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_LOW, listener );
+ }
+ if ( mogoMarker != null ) {
+ mogoMarker.setVisible( true );
+ }
+ startSmooth( mogoMarker, markerOnlineCar, markerLocation );
+ }
+
+ if ( showBounds && bound != null ) {
+ // 将前6个点显示在固定范围内
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().showBounds( TAG, centerPoint, carPoints, bound, false );
+ }
+ }
+
+
+ // 平滑移动
+ private void startSmooth( IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar,
+ MarkerLocation markerLocation ) {
+ if ( iMogoMarker == null ) {
+ return;
+ }
+ List< MarkerCarPois > poiList = markerOnlineCar.getPois();
+ if ( filterErrorPoint( poiList ) ) {
+ return;
+ }
+ if ( poiList == null || poiList.size() < 2 ) {
+ return;
+ }
+
+ List< MogoLatLng > points = new ArrayList<>();
+
+ double lastLat = 0.0d;
+ double lastLon = 0.0d;
+
+ for ( int j = 0; j < poiList.size(); j++ ) {
+ MarkerCarPois poi = poiList.get( j );
+ if ( poi == null || poi.getCoordinates() == null && poi.getCoordinates().size() != 2 ) {
+ continue;
+ }
+ try {
+ double lat = Double.valueOf( poi.getCoordinates().get( 1 ) + "" );
+ double lng = Double.valueOf( poi.getCoordinates().get( 0 ) + "" );
+
+ float distance = MarkerDrawer.calculateLineDistance( lastLon, lastLat, lng, lat );
+ lastLon = lng;
+ lastLat = lat;
+ if ( distance < 0.2f ) {// 距离过短,认为静止不动
+ continue;
+ }
+
+ points.add( new MogoLatLng( lat, lng ) );
+ } catch ( Exception e ) {
+ }
+ }
+ if ( points.size() >= 1 ) {
+ iMogoMarker.startSmooth( points, SMOOTH_DURATION );
+ } else {
+ Logger.d( TAG, "静止小车,但是有相同的连续坐标" );
+ }
+ }
+
+ /**
+ * 有可能出现终点到起点跳跃的情况,需要用"500M"约束起点和终点
+ *
+ * @param poiList
+ */
+ private boolean filterErrorPoint( List< MarkerCarPois > poiList ) {
+ if ( poiList == null || poiList.size() < 2 ) {
+ return false;
+ }
+ MarkerCarPois start = poiList.get( 0 );
+ MarkerCarPois end = poiList.get( poiList.size() - 1 );
+
+ try {
+ double lat1 = Double.valueOf( start.getCoordinates().get( 1 ) + "" );
+ double lng1 = Double.valueOf( start.getCoordinates().get( 0 ) + "" );
+ double lat2 = Double.valueOf( end.getCoordinates().get( 1 ) + "" );
+ double lng2 = Double.valueOf( end.getCoordinates().get( 0 ) + "" );
+ if ( MarkerDrawer.calculateLineDistance( new MogoLatLng( lat1, lng1 ), new MogoLatLng( lat2, lng2 ) ) >= 500 ) {
+ Logger.d( TAG, "filter point" );
+ return true;
+ }
+ } catch ( Exception e ) {
+ }
+ return false;
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/PushRoadConditionDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/PushRoadConditionDrawer.java
new file mode 100644
index 0000000000..a281288538
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/PushRoadConditionDrawer.java
@@ -0,0 +1,102 @@
+package com.mogo.module.common.drawer;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.map.overlay.IMogoPolyline;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.constants.DataTypes;
+import com.mogo.module.common.drawer.marker.MapVrMarkerView;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author donghongyu
+ * @since 2020/10/30
+ * TODO 推送路况信息绘制,用于演示
+ */
+public class PushRoadConditionDrawer {
+
+ private static final String TAG = "OnlineCarDrawer";
+ private static volatile PushRoadConditionDrawer sInstance;
+
+ private static IMogoPolyline mMogoPolyline;
+ private static IMogoMarker mMogoMarker;
+
+ private PushRoadConditionDrawer() {
+ }
+
+ public static PushRoadConditionDrawer getInstance() {
+ if (sInstance == null) {
+ synchronized (PushRoadConditionDrawer.class) {
+ if (sInstance == null) {
+ sInstance = new PushRoadConditionDrawer();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ clearMarker();
+ clearPolyline();
+ mMogoPolyline = null;
+ mMogoMarker = null;
+ sInstance = null;
+ }
+
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+
+ /**
+ * 绘制路况事件Marker移动轨迹
+ */
+ public void drawRoadConditionMarker(V2XPushMessageEntity entity) {
+ // 道路事件
+ MogoMarkerOptions options = new MogoMarkerOptions()
+ .object(entity)
+ .latitude(entity.getLat())
+ .longitude(entity.getLon());
+ options.anchor(0.5f, 0.5f);
+
+ options.icon(MapVrMarkerView.getInstance().getBitmap(entity.getSceneId()));
+
+ mMogoMarker =
+ MogoApisHandler
+ .getInstance()
+ .getApis()
+ .getMapServiceApi()
+ .getMarkerManager(AbsMogoApplication.getApp())
+ .addMarker(DataTypes.TYPE_MARKER_PUSH_DATA, options);
+
+ List points = new ArrayList<>();
+
+ for (double[] doubles : entity.getMoveTrack()) {
+ points.add(new MogoLatLng(doubles[1], doubles[0]));
+ }
+
+ mMogoMarker.startSmooth(points, 10);
+ }
+
+
+ public void clearMarker() {
+ if (mMogoMarker != null) {
+ mMogoMarker.remove();
+ }
+ }
+
+ public void clearPolyline() {
+ if (mMogoPolyline != null) {
+ mMogoPolyline.remove();
+ mMogoPolyline = null;
+ }
+ }
+
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java
new file mode 100644
index 0000000000..8fa79aaf08
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/RoadConditionDrawer.java
@@ -0,0 +1,128 @@
+package com.mogo.module.common.drawer;
+
+import android.view.animation.LinearInterpolator;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.IMogoMarkerClickListener;
+import com.mogo.map.marker.anim.OnMarkerAnimationListener;
+import com.mogo.module.common.ModuleNames;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.entity.MarkerExploreWay;
+import com.mogo.module.common.entity.MarkerLocation;
+import com.mogo.module.common.entity.MarkerShowEntity;
+import com.mogo.utils.WorkThreadHandler;
+import com.mogo.utils.logger.Logger;
+
+import java.util.List;
+import java.util.Map;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/28
+ *
+ * 描述
+ */
+class RoadConditionDrawer {
+
+ private static final String TAG = "RoadConditionDrawer";
+
+ private static volatile RoadConditionDrawer sInstance;
+
+ private RoadConditionDrawer() {
+ }
+
+ public static RoadConditionDrawer getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( RoadConditionDrawer.class ) {
+ if ( sInstance == null ) {
+ sInstance = new RoadConditionDrawer();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ /**
+ * 探路数据
+ *
+ * @param exploreWayList
+ */
+ public void drawRoadConditionMarker( List< MarkerExploreWay > exploreWayList, int maxAmount, IMogoMarkerClickListener listener ) {
+ // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗
+ if ( exploreWayList == null || exploreWayList.isEmpty() ) {
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( ModuleNames.CARD_TYPE_ROAD_CONDITION );
+ return;
+ }
+ int size = MarkerDrawer.getInstance().getAppropriateSize( maxAmount, exploreWayList );
+ Map< String, IMogoMarker > existCarMap = MarkerDrawer.getInstance().purgeMarkerData( exploreWayList, ModuleNames.CARD_TYPE_ROAD_CONDITION );
+ Logger.i( TAG, "existCarMap: size = %d", existCarMap.size() );
+ for ( int i = 0; i < size; i++ ) {
+ MarkerExploreWay markerExploreWay = exploreWayList.get( i );
+ if ( !markerExploreWay.getCanLive() ) {
+ MarkerLocation markerLocation = markerExploreWay.getLocation();
+
+ MarkerShowEntity markerShowEntity = new MarkerShowEntity();
+ markerShowEntity.setBindObj( markerExploreWay );
+ markerShowEntity.setMarkerLocation( markerLocation );
+ markerShowEntity.setMarkerType( markerExploreWay.getType() );
+ markerShowEntity.setTextContent( markerExploreWay.getAddr() );
+
+ String sn = MarkerDrawer.getInstance().getPrimaryKeyFromEntity( markerExploreWay );
+ IMogoMarker mogoMarker = existCarMap.get( sn );
+ if ( mogoMarker == null || mogoMarker.isDestroyed() ) {
+ Logger.d( TAG, "draw road condition, sn = %s", sn );
+ try {
+ if ( DebugConfig.isRoadEventAnimated() ) {
+ post2AddAndStartAnimation( markerShowEntity, i * 100L, listener );
+ } else {
+ mogoMarker = MarkerDrawer.getInstance().drawMapMarkerImpl( markerShowEntity, MarkerDrawer.MARKER_Z_INDEX_HIGH, listener );
+ }
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ private void post2AddAndStartAnimation( MarkerShowEntity entity, long delay, IMogoMarkerClickListener listener ) {
+ if ( entity == null ) {
+ return;
+ }
+ WorkThreadHandler.getInstance().postDelayed( () -> {
+ if ( entity == null ) {
+ return;
+ }
+ IMogoMarker marker = MarkerDrawer.getInstance().drawMapMarkerImpl( entity, MarkerDrawer.MARKER_Z_INDEX_HIGH, listener );
+ if ( marker == null ) {
+ return;
+ }
+ marker.startScaleAnimationWithAlpha( 0, 1.2f, 0, 1.2f, 0f, 1f, 300, new LinearInterpolator(), new OnMarkerAnimationListener() {
+ @Override
+ public void onAnimStart() {
+ Logger.d( TAG, " onAnimStart ---1----> " );
+ }
+
+ @Override
+ public void onAnimEnd() {
+ if ( marker == null || marker.isDestroyed() ) {
+ return;
+ }
+ marker.startScaleAnimation( 1.2f, 1, 1.2f, 1, 100, new LinearInterpolator(), null );
+ }
+ } );
+ }, delay );
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
new file mode 100644
index 0000000000..bbbdf38fa6
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/SnapshotSetDataDrawer.java
@@ -0,0 +1,251 @@
+package com.mogo.module.common.drawer;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.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.R;
+import com.mogo.module.common.constants.AdasRecognizedType;
+import com.mogo.module.common.constants.CarModelType;
+import com.mogo.module.common.constants.DataTypes;
+import com.mogo.module.common.constants.SafeType;
+import com.mogo.module.common.constants.VisionMode;
+import com.mogo.module.common.drawer.marker.MarkerResourceManager;
+import com.mogo.module.common.entity.CloudLocationInfo;
+import com.mogo.module.common.entity.CloudRoadData;
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+import com.mogo.module.common.utils.CoordinateUtils;
+import com.mogo.utils.UiThreadHandler;
+import com.mogo.utils.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/28
+ *
+ * 云端数据绘制
+ */
+class SnapshotSetDataDrawer extends BaseDrawer {
+
+ private static final String TAG = "SnapshotSetDataDrawer";
+
+ private static volatile SnapshotSetDataDrawer sInstance;
+
+ private Context mContext;
+
+ private SnapshotSetDataDrawer() {
+ mContext = AbsMogoApplication.getApp();
+ }
+
+ public static SnapshotSetDataDrawer getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( SnapshotSetDataDrawer.class ) {
+ if ( sInstance == null ) {
+ sInstance = new SnapshotSetDataDrawer();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ // 云端 marker 缓存
+ private Map< String, IMogoMarker > mCloudSnapshotMarkersCaches = new ConcurrentHashMap<>();
+
+ private int mPurseCounter = 0;
+
+ private Map< String, MogoLatLng > mLastPositions = new ConcurrentHashMap<>();
+
+ /**
+ * 其他车辆、rsu 车辆数据
+ *
+ * @param data
+ */
+ public void renderSnapshotData( MogoSnapshotSetData data,
+ boolean machineVision ) {
+ if ( data == null || (
+ ( data.getAllList() == null || data.getAllList().isEmpty() ) &&
+ ( data.getNearList() == null || data.getNearList().isEmpty() )
+ ) ) {
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( AbsMogoApplication.getApp() ).removeMarkers( DataTypes.TYPE_MARKER_CLOUD_DATA );
+ return;
+ }
+ List< CloudRoadData > allDatumsList = new ArrayList<>();
+ allDatumsList.addAll( data.getAllList() );
+// allDatumsList.addAll( data.getNearList() );
+// if ( machineVision ) {
+// allDatumsList.addAll( data.getAllList() );
+// allDatumsList.addAll( data.getNearList() );
+// } else {
+// allDatumsList.addAll( data.getAllList() );
+// }
+ mPurseCounter++;
+ if ( mPurseCounter >= 100 ) {
+ mPurseCounter = 0;
+ }
+ purgeCloudSnapshotData( allDatumsList );
+ for ( CloudRoadData cloudRoadData : allDatumsList ) {
+ if ( cloudRoadData == null ) {
+ continue;
+ }
+ IMogoMarker marker = null;
+ String uniqueKey = cloudRoadData.getUniqueKey();
+ if ( TextUtils.isEmpty( uniqueKey ) ) {
+ continue;
+ }
+ if ( mCloudSnapshotMarkersCaches.containsKey( uniqueKey ) ) {
+ marker = mCloudSnapshotMarkersCaches.get( uniqueKey );
+ }
+ MogoLatLng target = new MogoLatLng( cloudRoadData.getLat(), cloudRoadData.getLon() );
+ if ( marker == null || marker.isDestroyed() ) {
+ marker = drawSnapshotDataMarker( cloudRoadData, machineVision, data.curSpeed );
+ if ( marker == null ) {
+ continue;
+ }
+ mCloudSnapshotMarkersCaches.put( uniqueKey, marker );
+ } else {
+ marker.setGps( false );
+ MogoLatLng lastPosition = mLastPositions.get( uniqueKey );
+ double targetPos[] = CoordinateUtils.transformFromWGSToGCJ( target.lat, target.lon );
+ if ( lastPosition != null ) {
+ if ( lastPosition.equals( target ) ) {
+ marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() );
+ marker.setPosition( targetPos[POS_LAT], targetPos[POS_LON] );
+ } else {
+ List< MogoLatLng > points = new ArrayList<>();
+ double lastPos[] = CoordinateUtils.transformFromWGSToGCJ( lastPosition.lat, lastPosition.lon );
+ points.add( new MogoLatLng( lastPos[POS_LAT], lastPos[POS_LON] ) );
+ points.add( new MogoLatLng( targetPos[POS_LAT], targetPos[POS_LON] ) );
+ marker.startSmooth( points, 1 );
+ }
+ } else {
+ marker.setRotateAngle( 360 - ( float ) cloudRoadData.getHeading() );
+ marker.setPosition( targetPos[POS_LAT], targetPos[POS_LON] );
+ }
+ }
+ mLastPositions.put( uniqueKey, target );
+ }
+ }
+
+ /**
+ * 过滤本次数据中,不存在的 marker
+ *
+ * @param data
+ */
+ private void purgeCloudSnapshotData( List< CloudRoadData > data ) {
+ if ( data == null || data.isEmpty() ) {
+ return;
+ }
+ if ( mCloudSnapshotMarkersCaches.isEmpty() ) {
+ return;
+ }
+ Map< String, IMogoMarker > existMarker = new HashMap<>();
+ for ( CloudRoadData cloudRoadData : data ) {
+ if ( cloudRoadData == null ) {
+ continue;
+ }
+ String uniqueKey = cloudRoadData.getUniqueKey();
+ if ( TextUtils.isEmpty( uniqueKey ) ) {
+ continue;
+ }
+ if ( mCloudSnapshotMarkersCaches.containsKey( uniqueKey ) ) {
+ existMarker.put( uniqueKey, mCloudSnapshotMarkersCaches.get( uniqueKey ) );
+ }
+ }
+
+ if ( !existMarker.isEmpty() ) {
+ for ( String key : mCloudSnapshotMarkersCaches.keySet() ) {
+ if ( !existMarker.containsKey( key ) ) {
+ mLastPositions.remove( key );
+ try {
+ IMogoMarker marker = mCloudSnapshotMarkersCaches.remove( key );
+ marker.destroy();
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ private IMogoMarker drawSnapshotDataMarker( CloudRoadData data, boolean machineVision, double curSpeed ) {
+ if ( data == null ) {
+ return null;
+ }
+
+ Logger.d( TAG, "draw marker uniqueKey = %s", data.getUniqueKey() );
+ MogoMarkerOptions options = new MogoMarkerOptions()
+ .owner( DataTypes.TYPE_MARKER_CLOUD_DATA )
+ .icon( inflateView( data, machineVision, curSpeed ) )
+ .gps( true )
+ .anchor( 0.5f, 0.5f )
+ .rotate( ( float ) data.getHeading() )
+ .position( new MogoLatLng( data.getLat(), data.getLon() ) );
+ return MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager( mContext ).addMarker( DataTypes.TYPE_MARKER_CLOUD_DATA, options );
+ }
+
+ private View inflateView( CloudRoadData data, boolean machineVision, double curSpeed ) {
+ View rootView = LayoutInflater.from( AbsMogoApplication.getApp() ).inflate( R.layout.module_commons_layout_car, null );
+// SafeType safeType = getSafeType( data.getDistance(), data.getSpeed(), curSpeed );
+// TextView tv = rootView.findViewById( R.id.module_commons_marker_car_speed );
+// // 机器视觉展示速度,用户视觉展示安全类型
+// tv.setText( machineVision ? String.valueOf( data.getSpeed() ) : safeType.getMsg() );
+ ImageView iv = rootView.findViewById( R.id.module_commons_marker_car_model );
+// iv.setImageResource( MarkerResourceManager.getMarkerDrawableResId(
+// machineVision ? VisionMode.Machine : VisionMode.User,
+// AdasRecognizedType.valueFrom( data.getType() ),
+// getCarModelType(),
+// safeType
+// ) );
+ iv.setImageResource( R.drawable.icon_map_marker_car_gray );
+ return rootView;
+ }
+
+ private Bitmap fromView( View view ) {
+ view.setDrawingCacheEnabled( true );
+ processChildView( view );
+ view.destroyDrawingCache();
+ view.measure( View.MeasureSpec.makeMeasureSpec( 0, View.MeasureSpec.UNSPECIFIED ), View.MeasureSpec.makeMeasureSpec( 0, View.MeasureSpec.UNSPECIFIED ) );
+ view.layout( 0, 0, view.getMeasuredWidth(), view.getMeasuredHeight() );
+ Bitmap bitmap = null;
+ return ( bitmap = view.getDrawingCache() ) != null ? bitmap.copy( Bitmap.Config.ARGB_8888, false ) : null;
+ }
+
+ private void processChildView( View view ) {
+ if ( !( view instanceof ViewGroup ) ) {
+ if ( view instanceof TextView ) {
+ ( ( TextView ) view ).setHorizontallyScrolling( false );
+ }
+
+ } else {
+ for ( int var1 = 0; var1 < ( ( ViewGroup ) view ).getChildCount(); ++var1 ) {
+ processChildView( ( ( ViewGroup ) view ).getChildAt( var1 ) );
+ }
+
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/IMarkerView.java
similarity index 77%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java
rename to modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/IMarkerView.java
index 44388f2e8f..e4b0892d4e 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/IMarkerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/IMarkerView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.service.marker;
+package com.mogo.module.common.drawer.marker;
import android.graphics.Bitmap;
import android.view.View;
@@ -15,7 +15,7 @@ public interface IMarkerView {
View getView();
- default Bitmap getBitmap(int type){
+ default Bitmap getBitmap( int type ){
return null;
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerAdapter.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerAdapter.java
similarity index 81%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerAdapter.java
rename to modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerAdapter.java
index a577317e48..94d682ca4a 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerAdapter.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerAdapter.java
@@ -1,17 +1,11 @@
-package com.mogo.module.service.marker;
+package com.mogo.module.common.drawer.marker;
import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.text.TextUtils;
-import android.view.View;
-import com.mogo.commons.AbsMogoApplication;
-import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.module.common.ModuleNames;
import com.mogo.module.common.entity.MarkerShowEntity;
-import com.mogo.module.service.R;
/**
* author : donghongyu
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerBaseView.java
similarity index 91%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java
rename to modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerBaseView.java
index 222bd61acf..94f394ed4f 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerBaseView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerBaseView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.service.marker;
+package com.mogo.module.common.drawer.marker;
import android.content.Context;
import android.graphics.Bitmap;
@@ -15,9 +15,9 @@ import androidx.annotation.Nullable;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.R;
import com.mogo.module.common.entity.MarkerShowEntity;
-import com.mogo.module.service.MarkerServiceHandler;
-import com.mogo.module.service.R;
import com.mogo.service.imageloader.IMogoImageLoaderListener;
import com.mogo.service.imageloader.MogoImageView;
import com.mogo.utils.UiThreadHandler;
@@ -93,7 +93,7 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV
if (!url.isEmpty()) {
ivIcon.setPlaceHolder(res);
ivIcon.setFailureHolder(res);
- MarkerServiceHandler.getImageloader().displayImage(url,
+ MogoApisHandler.getInstance().getApis().getImageLoaderApi().displayImage(url,
ivIcon, WindowUtils.dip2px(mContext, 50), WindowUtils.dip2px(mContext, 50),
new IMogoImageLoaderListener() {
@Override
@@ -118,7 +118,7 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV
private void runOnUiThread(final MarkerShowEntity markerShowEntity){
if (!TextUtils.isEmpty(markerShowEntity.getIconUrl())) {
- MarkerServiceHandler.getImageloader().displayImage(markerShowEntity.getIconUrl(),
+ MogoApisHandler.getInstance().getApis().getImageLoaderApi().displayImage(markerShowEntity.getIconUrl(),
ivUserHead,
WindowUtils.dip2px(mContext, 50), WindowUtils.dip2px(mContext, 50),
new IMogoImageLoaderListener() {
@@ -143,7 +143,7 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV
});
} else {
- ivUserHead.setBackgroundResource(R.drawable.icon_default_user_head);
+ ivUserHead.setBackgroundResource( R.drawable.icon_default_user_head);
}
}
@@ -151,7 +151,7 @@ public abstract class MapMarkerBaseView extends LinearLayout implements IMarkerV
view.setDrawingCacheEnabled( true );
processChildView( view );
view.destroyDrawingCache();
- view.measure( View.MeasureSpec.makeMeasureSpec( 0, View.MeasureSpec.UNSPECIFIED ), View.MeasureSpec.makeMeasureSpec( 0, View.MeasureSpec.UNSPECIFIED ) );
+ view.measure( MeasureSpec.makeMeasureSpec( 0, MeasureSpec.UNSPECIFIED ), MeasureSpec.makeMeasureSpec( 0, MeasureSpec.UNSPECIFIED ) );
view.layout( 0, 0, view.getMeasuredWidth(), view.getMeasuredHeight() );
Bitmap bitmap = null;
return ( bitmap = view.getDrawingCache() ) != null ? bitmap.copy( Bitmap.Config.ARGB_8888, false ) : null;
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerInfoView.java
similarity index 93%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java
rename to modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerInfoView.java
index 94491158d3..404ded1d88 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerInfoView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerInfoView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.service.marker;
+package com.mogo.module.common.drawer.marker;
import android.content.Context;
import android.text.TextUtils;
@@ -12,13 +12,13 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.module.common.ModuleNames;
import com.mogo.module.common.entity.MarkerExploreWay;
import com.mogo.module.common.entity.MarkerShareMusic;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.common.marker.PoiWrapper;
import com.mogo.module.common.utils.CloudPoiManager;
-import com.mogo.module.service.R;
-import com.mogo.module.service.ServiceConst;
+import com.mogo.module.common.R;
import com.mogo.utils.logger.Logger;
/**
@@ -75,8 +75,8 @@ public class MapMarkerInfoView extends MapMarkerBaseView {
clMarkerContent.setBackgroundResource( R.drawable.bg_map_marker_yellow_info );
ivReverseTriangle.setImageResource( R.drawable.bg_shape_reverse_yellow );
switch ( markerShowEntity.getMarkerType() ) {
- case ServiceConst.CARD_TYPE_CARS_CHATTING:
- case ServiceConst.CARD_TYPE_USER_DATA:
+ case ModuleNames.CARD_TYPE_CARS_CHATTING:
+ case ModuleNames.CARD_TYPE_USER_DATA:
ivUserHead.setVisibility( View.VISIBLE );
ivIcon.setVisibility( View.INVISIBLE );
loadImageWithMarker( markerShowEntity );
@@ -84,8 +84,8 @@ public class MapMarkerInfoView extends MapMarkerBaseView {
//ivCar.setRotation(new Random().nextInt(360));
ivCar.setRotation( ( float ) markerShowEntity.getMarkerLocation().getAngle() );
break;
- case ServiceConst.CARD_TYPE_ROAD_CONDITION:
- case ServiceConst.CARD_TYPE_NOVELTY:
+ case ModuleNames.CARD_TYPE_ROAD_CONDITION:
+ case ModuleNames.CARD_TYPE_NOVELTY:
ivUserHead.setVisibility( View.INVISIBLE );
ivIcon.setVisibility( View.VISIBLE );
@@ -102,7 +102,7 @@ public class MapMarkerInfoView extends MapMarkerBaseView {
}
}
break;
- case ServiceConst.CARD_TYPE_SHARE_MUSIC:
+ case ModuleNames.CARD_TYPE_SHARE_MUSIC:
ivUserHead.setVisibility( View.INVISIBLE );
ivIcon.setVisibility( View.VISIBLE );
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerView.java
similarity index 81%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java
rename to modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerView.java
index 81cea57f96..6d5eb4ceb9 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapMarkerView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.service.marker;
+package com.mogo.module.common.drawer.marker;
import android.content.Context;
import android.util.AttributeSet;
@@ -7,12 +7,13 @@ import android.view.LayoutInflater;
import androidx.annotation.Nullable;
import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.module.common.ModuleNames;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.R;
import com.mogo.module.common.entity.MarkerExploreWay;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.common.marker.PoiWrapper;
import com.mogo.module.common.utils.CloudPoiManager;
-import com.mogo.module.service.R;
-import com.mogo.module.service.ServiceConst;
import com.mogo.utils.logger.Logger;
/**
@@ -54,9 +55,14 @@ public class MapMarkerView extends MapMarkerBaseView {
public void updateView( MarkerShowEntity markerShowEntity ) {
try {
Object bindObj = markerShowEntity.getBindObj();
+ if ( MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) {
+ ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow_vr );
+ } else {
+ ivCar.setImageResource( R.drawable.icon_map_marker_location_yellow );
+ }
switch ( markerShowEntity.getMarkerType() ) {
- case ServiceConst.CARD_TYPE_ROAD_CONDITION:
- case ServiceConst.CARD_TYPE_NOVELTY:
+ case ModuleNames.CARD_TYPE_ROAD_CONDITION:
+ case ModuleNames.CARD_TYPE_NOVELTY:
if ( bindObj instanceof MarkerExploreWay && ( ( MarkerExploreWay ) bindObj ).getPoiType() != null ) {
// 根据poiType获取对应的图片
String poiType = ((MarkerExploreWay) bindObj).getPoiType();
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapVrMarkerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapVrMarkerView.java
new file mode 100644
index 0000000000..82a7c80d2a
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MapVrMarkerView.java
@@ -0,0 +1,88 @@
+package com.mogo.module.common.drawer.marker;
+
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.view.View;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.module.common.R;
+
+import java.lang.ref.SoftReference;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * VR 模式的Marker绘制
+ */
+public class MapVrMarkerView implements IMarkerView {
+ private String TAG = "MapVrMarkerView";
+
+
+ private static Map> sRef = new HashMap<>();
+ private static Map> sTypedRef = new HashMap<>();
+
+ private static final class InstanceHolder {
+ private static final MapVrMarkerView INSTANCE = new MapVrMarkerView();
+ }
+
+ public static MapVrMarkerView getInstance() {
+ return MapVrMarkerView.InstanceHolder.INSTANCE;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return MapVrMarkerView.InstanceHolder.INSTANCE;
+ }
+
+ @Override
+ public View getView() {
+ return null;
+ }
+
+ @Override
+ public void setMarker(IMogoMarker marker) {
+
+ }
+
+ @Override
+ public Bitmap getBitmap(int vehicleType) {
+ return null;
+ }
+
+
+ /**
+ * TODO 都是模拟数据
+ * 获取VR道路事件
+ */
+ public Bitmap getBitmap(String sceneId) {
+ sRef.put(sceneId, new SoftReference<>(BitmapFactory.decodeResource(AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type_taxi)));
+ switch (sceneId) {
+ case "200001"://后方VIP车辆提示
+// bitmap = ImageUtil.createBitmap(V2XUtils.getApp(),
+// R.drawable.v2x_duixiang_laiche_che);
+ break;
+ case "200002"://前车急刹
+ break;
+ case "200003"://后方危险车辆预警
+ break;
+ case "200004"://逆向车辆路线预判
+// bitmap = ImageUtil.createBitmap(V2XUtils.getApp(),
+// R.drawable.v2x_duixiang_laiche_che);
+ break;
+ case "200005"://VIP变灯通行
+ break;
+ case "200006"://障碍物绕行
+ break;
+ case "200007"://行人预警,行人路线预测
+ break;
+ case "200008"://拥堵路线推荐
+ break;
+ case "200009"://双闪车辆,自动绕行
+ break;
+ }
+
+ return sRef.get(sceneId).get();
+ }
+
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MarkerResourceManager.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MarkerResourceManager.java
new file mode 100644
index 0000000000..6c7aa6cf2b
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/MarkerResourceManager.java
@@ -0,0 +1,69 @@
+package com.mogo.module.common.drawer.marker;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.module.common.R;
+import com.mogo.module.common.constants.AdasRecognizedType;
+import com.mogo.module.common.constants.CarModelType;
+import com.mogo.module.common.constants.SafeType;
+import com.mogo.module.common.constants.VisionMode;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/29
+ *
+ * 描述 按照命名规则,用字符串拼接成资源名称的方式拿到图片的id,避免枚举
+ */
+class MarkerResourceManager {
+
+ private static final String TAG = "MarkerResourceManager";
+
+ /**
+ * @param mode
+ * @param adasRecognizedType
+ * @param type
+ * @return
+ */
+ public static int getMarkerDrawableResId( VisionMode mode,
+ AdasRecognizedType adasRecognizedType,
+ CarModelType type,
+ SafeType safeType ) {
+ if ( mode == null ) {
+ mode = VisionMode.User;
+ }
+ if ( adasRecognizedType == null ) {
+ adasRecognizedType = AdasRecognizedType.classIdCar;
+ }
+ if ( type == null ) {
+ type = CarModelType.Other;
+ }
+
+ if ( safeType == null ) {
+ safeType = SafeType.Normal;
+ }
+
+ StringBuilder builder = new StringBuilder();
+ builder.append( "module_commons" )
+ .append( "_" ).append( mode.getRes() )
+ .append( "_" ).append( adasRecognizedType.getRes() )
+ .append( "_" ).append( type.getRes() )
+ .append( "_" ).append( safeType.getRes() );
+
+ Logger.d( TAG, "res name = %s", builder.toString() );
+
+ int id = AbsMogoApplication.getApp().getResources().getIdentifier(
+ builder.toString(),
+ "drawable",
+ AbsMogoApplication.getApp().getPackageName() );
+
+ if ( id == 0 ) {
+ if ( mode == VisionMode.User ) {
+ return R.drawable.module_commons_user_car_other_normal;
+ } else {
+ return R.drawable.module_commons_machine_car_other_normal;
+ }
+ }
+ return id;
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/OnlineCarMarkerView.java
similarity index 71%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java
rename to modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/OnlineCarMarkerView.java
index 3e68df452d..81459e5a74 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/OnlineCarMarkerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/drawer/marker/OnlineCarMarkerView.java
@@ -1,4 +1,4 @@
-package com.mogo.module.service.marker;
+package com.mogo.module.common.drawer.marker;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -6,8 +6,7 @@ import android.view.View;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.marker.IMogoMarker;
-import com.mogo.module.common.ModuleNames;
-import com.mogo.module.service.R;
+import com.mogo.module.common.R;
import java.lang.ref.SoftReference;
import java.util.HashMap;
@@ -51,8 +50,20 @@ public class OnlineCarMarkerView implements IMarkerView {
if ( sRef.get( vehicleType ) == null || sRef.get( vehicleType ).get() == null
|| sRef.get( vehicleType ).get().isRecycled() ) {
switch ( vehicleType ) {
+ case 5:
+ sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type_taxi ) ) );
+ break;
+ case 6:
+ sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type_bus ) ) );
+ break;
+ case 1:
+ sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type_110 ) ) );
+ break;
case 2:
- sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type2 ) ) );
+ sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type_120 ) ) );
+ break;
+ case 7:
+ sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_type_119 ) ) );
break;
default:
sRef.put( vehicleType, new SoftReference<>( BitmapFactory.decodeResource( AbsMogoApplication.getApp().getResources(), R.drawable.icon_map_marker_car_gray ) ) );
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
new file mode 100644
index 0000000000..02f0b43109
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudLocationInfo.java
@@ -0,0 +1,164 @@
+package com.mogo.module.common.entity;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * 云端定位信息和自车定位信息
+ *
+ * @author tongchenfei
+ */
+public class CloudLocationInfo implements Parcelable {
+ private double lat;
+ private double lon;
+ private double heading;
+ private long systemTime;
+ private long satelliteTime;
+ private double alt;
+ private double speed;
+
+ public CloudLocationInfo() {
+ }
+
+ public CloudLocationInfo(CloudLocationInfo info) {
+ this.lat = info.getLat();
+ this.lon = info.getLon();
+ this.heading = info.getHeading();
+ this.systemTime = System.currentTimeMillis();
+ this.satelliteTime = System.currentTimeMillis();
+ this.alt = info.alt;
+ this.speed = info.speed;
+ }
+
+ protected CloudLocationInfo(Parcel in) {
+ lat = in.readDouble();
+ lon = in.readDouble();
+ heading = in.readDouble();
+ systemTime = in.readLong();
+ satelliteTime = in.readLong();
+ alt = in.readDouble();
+ speed = in.readDouble();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeDouble(lat);
+ dest.writeDouble(lon);
+ dest.writeDouble(heading);
+ dest.writeLong(systemTime);
+ dest.writeLong(satelliteTime);
+ dest.writeDouble(alt);
+ dest.writeDouble(speed);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator CREATOR = new Creator() {
+ @Override
+ public CloudLocationInfo createFromParcel(Parcel in) {
+ return new CloudLocationInfo(in);
+ }
+
+ @Override
+ public CloudLocationInfo[] newArray(int size) {
+ return new CloudLocationInfo[size];
+ }
+ };
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getHeading() {
+ return heading;
+ }
+
+ public void setHeading(double heading) {
+ this.heading = heading;
+ }
+
+ public long getSystemTime() {
+ return systemTime;
+ }
+
+ public void setSystemTime(long systemTime) {
+ this.systemTime = systemTime;
+ }
+
+ public long getSatelliteTime() {
+ return satelliteTime;
+ }
+
+ public void setSatelliteTime(long satelliteTime) {
+ this.satelliteTime = satelliteTime;
+ }
+
+ public double getAlt() {
+ return alt;
+ }
+
+ public void setAlt(double alt) {
+ this.alt = alt;
+ }
+
+ public double getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(double speed) {
+ this.speed = speed;
+ }
+
+ @Override
+ public String toString() {
+ return "CloudLocationInfo{" +
+ "lat=" + lat +
+ ", lon=" + lon +
+ ", heading=" + heading +
+ ", systemTime=" + systemTime +
+ ", satelliteTime=" + satelliteTime +
+ ", alt=" + alt +
+ ", speed=" + speed +
+ '}';
+ }
+
+ public String print() {
+ return "CloudLocation{ lon: " + lon + " lat: " + lat + " heading: " + heading + " speed: "
+ + speed+"}";
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ CloudLocationInfo that = (CloudLocationInfo) o;
+ return Double.compare(that.lat, lat) == 0 &&
+ Double.compare(that.lon, lon) == 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(lat, lon);
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java
new file mode 100644
index 0000000000..3968a35a51
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/CloudRoadData.java
@@ -0,0 +1,195 @@
+package com.mogo.module.common.entity;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import java.util.List;
+
+/**
+ * 云端道路数据
+ * @author tongchenfei
+ */
+public class CloudRoadData implements Parcelable {
+ /**物体类型*/
+ private int type = -1;
+
+ private double lat;
+ private double lon;
+
+ private String uuid;
+ private String sn;
+
+ private double speed;
+ private double heading;
+
+ private long systemTime;
+
+ /**红绿灯状态 1红 2绿 3黄*/
+ private int lightStatus;//
+ /**红绿灯剩余时间 读秒*/
+ private int lightLeftTime;
+ /**视频流直播地址*/
+ private String rtmpUrl;//
+
+ private double distance ;//距离
+
+ private List coordinates;
+
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(double speed) {
+ this.speed = speed;
+ }
+
+ public long getSystemTime() {
+ return systemTime;
+ }
+
+ public void setSystemTime(long systemTime) {
+ this.systemTime = systemTime;
+ }
+
+ public int getLightStatus() {
+ return lightStatus;
+ }
+
+ public void setLightStatus(int lightStatus) {
+ this.lightStatus = lightStatus;
+ }
+
+ public int getLightLeftTime() {
+ return lightLeftTime;
+ }
+
+ public void setLightLeftTime(int lightLeftTime) {
+ this.lightLeftTime = lightLeftTime;
+ }
+
+ public String getRtmpUrl() {
+ return rtmpUrl;
+ }
+
+ public void setRtmpUrl(String rtmpUrl) {
+ this.rtmpUrl = rtmpUrl;
+ }
+
+ public double getDistance() {
+ return distance * 1000;
+ }
+
+ public void setDistance(double distance) {
+ this.distance = distance;
+ }
+
+ public List getCoordinates() {
+ return coordinates;
+ }
+
+ public void setCoordinates(List coordinates) {
+ this.coordinates = coordinates;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public String getSn() {
+ return sn;
+ }
+
+ public double getHeading() {
+ return heading;
+ }
+
+ public void setHeading( double heading ) {
+ this.heading = heading;
+ }
+
+ public String getUniqueKey(){
+ if (! TextUtils.isEmpty( uuid ) ) {
+ return uuid;
+ }
+ return sn;
+ }
+
+ public CloudRoadData() {
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel( Parcel dest, int flags ) {
+ dest.writeInt( this.type );
+ dest.writeDouble( this.lat );
+ dest.writeDouble( this.lon );
+ dest.writeString( this.uuid );
+ dest.writeString( this.sn );
+ dest.writeDouble( this.speed );
+ dest.writeDouble( this.heading );
+ dest.writeLong( this.systemTime );
+ dest.writeInt( this.lightStatus );
+ dest.writeInt( this.lightLeftTime );
+ dest.writeString( this.rtmpUrl );
+ dest.writeDouble( this.distance );
+ dest.writeTypedList( this.coordinates );
+ }
+
+ protected CloudRoadData( Parcel in ) {
+ this.type = in.readInt();
+ this.lat = in.readDouble();
+ this.lon = in.readDouble();
+ this.uuid = in.readString();
+ this.sn = in.readString();
+ this.speed = in.readDouble();
+ this.heading = in.readDouble();
+ this.systemTime = in.readLong();
+ this.lightStatus = in.readInt();
+ this.lightLeftTime = in.readInt();
+ this.rtmpUrl = in.readString();
+ this.distance = in.readDouble();
+ this.coordinates = in.createTypedArrayList( CloudLocationInfo.CREATOR );
+ }
+
+ public static final Creator< CloudRoadData > CREATOR = new Creator< CloudRoadData >() {
+ @Override
+ public CloudRoadData createFromParcel( Parcel source ) {
+ return new CloudRoadData( source );
+ }
+
+ @Override
+ public CloudRoadData[] newArray( int size ) {
+ return new CloudRoadData[size];
+ }
+ };
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java
index a0afae8e89..435dd0f2fd 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MarkerPoiTypeEnum.java
@@ -40,4 +40,6 @@ public interface MarkerPoiTypeEnum {
String FOURS_LIVING = "10015";
//违章停车
String ILLEGAL_PARK_LIVING = "10016";
+ //路面湿滑
+ String ROAD_SLIPPERY = "10021";
}
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java
new file mode 100644
index 0000000000..225b38d90c
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/MogoSnapshotSetData.java
@@ -0,0 +1,135 @@
+package com.mogo.module.common.entity;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/26
+ *
+ * 描述
+ */
+class MogoSnapshotSetData implements Parcelable {
+
+ private String msgId;
+
+ private long time;
+
+ //过期时间
+ private long expire;
+
+ //总数据集合
+ private List allList;
+
+ // 近景adas数据
+ private List nearList;
+
+ //红绿灯
+ private CloudRoadData trafficLight;
+
+ // 自车速度 本地添加
+ public double curSpeed = 0.0;
+
+ @Override
+ public String toString() {
+ return "MogoSnapshotSetData{" +
+ "msgId='" + msgId + '\'' +
+ ", time=" + time +
+ ", expire=" + expire +
+ ", allList=" + allList +
+ ", trafficLight=" + trafficLight +
+ '}';
+ }
+
+ public String getMsgId() {
+ return msgId;
+ }
+
+ public void setMsgId(String msgId) {
+ this.msgId = msgId;
+ }
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public long getExpire() {
+ return expire;
+ }
+
+ public void setExpire(long expire) {
+ this.expire = expire;
+ }
+
+ public List getAllList() {
+ return allList;
+ }
+
+ public void setAllList(List allList) {
+ this.allList = allList;
+ }
+
+ public CloudRoadData getTrafficLight() {
+ return trafficLight;
+ }
+
+ public void setTrafficLight(CloudRoadData trafficLight) {
+ this.trafficLight = trafficLight;
+ }
+
+ public List< CloudRoadData > getNearList() {
+ return nearList;
+ }
+
+ public void setNearList( List< CloudRoadData > nearList ) {
+ this.nearList = nearList;
+ }
+
+ public MogoSnapshotSetData() {
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel( Parcel dest, int flags ) {
+ dest.writeString( this.msgId );
+ dest.writeLong( this.time );
+ dest.writeLong( this.expire );
+ dest.writeTypedList( this.allList );
+ dest.writeTypedList( this.nearList );
+ dest.writeParcelable( this.trafficLight, flags );
+ dest.writeDouble( this.curSpeed );
+ }
+
+ protected MogoSnapshotSetData( Parcel in ) {
+ this.msgId = in.readString();
+ this.time = in.readLong();
+ this.expire = in.readLong();
+ this.allList = in.createTypedArrayList( CloudRoadData.CREATOR );
+ this.nearList = in.createTypedArrayList( CloudRoadData.CREATOR );
+ this.trafficLight = in.readParcelable( CloudRoadData.class.getClassLoader() );
+ this.curSpeed = in.readDouble();
+ }
+
+ public static final Creator< MogoSnapshotSetData > CREATOR = new Creator< MogoSnapshotSetData >() {
+ @Override
+ public MogoSnapshotSetData createFromParcel( Parcel source ) {
+ return new MogoSnapshotSetData( source );
+ }
+
+ @Override
+ public MogoSnapshotSetData[] newArray( int size ) {
+ return new MogoSnapshotSetData[size];
+ }
+ };
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java
index 04563ff2b9..71854823f5 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XMessageEntity.java
@@ -139,8 +139,14 @@ public class V2XMessageEntity implements Serializable {
int ALERT_ILLEGAL_PARK_WARNING = 1_008;
// 用户UGC反馈事件准确性弹窗
int ALERT_EVENT_UGC_WARNING = 1_009;
+ // 呼叫、请求直播事件
+ int ALERT_VOICE_CALL_FOR_LIVECAR_SHOW = 1_010;
+ // 推送VR消息展示
+ int ALERT_PUSH_VR_SHOW = 2_000;
// 自车求助
int ALERT_CAR_FOR_HELP = 8_000;
+ // obu事件
+ int ALERT_OBU_EVENT = 9_000;
}
@IntDef(value = {
@@ -155,6 +161,9 @@ public class V2XMessageEntity implements Serializable {
V2XTypeEnum.ALERT_ILLEGAL_PARK_WARNING,
V2XTypeEnum.ALERT_EVENT_UGC_WARNING,
V2XTypeEnum.ALERT_CAR_FOR_HELP,
+ V2XTypeEnum.ALERT_VOICE_CALL_FOR_LIVECAR_SHOW,
+ V2XTypeEnum.ALERT_PUSH_VR_SHOW,
+ V2XTypeEnum.ALERT_OBU_EVENT,
})
@Target({
ElementType.PARAMETER,
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XObuEventEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XObuEventEntity.java
new file mode 100644
index 0000000000..802e035a42
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XObuEventEntity.java
@@ -0,0 +1,35 @@
+package com.mogo.module.common.entity;
+
+/**
+ * obu事件封装
+ *
+ * @author tongchenfei
+ */
+public class V2XObuEventEntity {
+ private int type;
+ private String desc;
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+
+ @Override
+ public String toString() {
+ return "V2XObuEventEntity{" +
+ "type=" + type +
+ ", desc='" + desc + '\'' +
+ '}';
+ }
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java
index 78e6e6e47d..223e86a268 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/entity/V2XPushMessageEntity.java
@@ -3,6 +3,7 @@ package com.mogo.module.common.entity;
import android.text.TextUtils;
import java.io.Serializable;
+import java.util.List;
import java.util.Objects;
/**
@@ -29,8 +30,7 @@ public class V2XPushMessageEntity implements Serializable {
private String videoChannel;
private int expireTime;
private long createTime;
- private double lat;
- private double lon;
+
private String sn;
private String headImgUrl;
private String msgImgUrl;
@@ -43,6 +43,15 @@ public class V2XPushMessageEntity implements Serializable {
private int sex;
private long userId;
+ private double lat;
+ private double lon;
+
+ private List polyline;
+
+ private List moveTrack;
+
+ private List recommendPolyline;
+
public int getViewType() {
return viewType;
}
@@ -266,6 +275,30 @@ public class V2XPushMessageEntity implements Serializable {
this.userId = userId;
}
+ public List getPolyline() {
+ return polyline;
+ }
+
+ public void setPolyline(List polyline) {
+ this.polyline = polyline;
+ }
+
+ public List getMoveTrack() {
+ return moveTrack;
+ }
+
+ public void setMoveTrack(List moveTrack) {
+ this.moveTrack = moveTrack;
+ }
+
+ public List getRecommendPolyline() {
+ return recommendPolyline;
+ }
+
+ public void setRecommendPolyline(List recommendPolyline) {
+ this.recommendPolyline = recommendPolyline;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java
index cebd8f8905..22acefa818 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/map/MapCenterPointStrategy.java
@@ -2,6 +2,7 @@ package com.mogo.module.common.map;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.map.uicontroller.IMogoMapUIController;
+import com.mogo.module.common.MogoApisHandler;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.logger.Logger;
@@ -18,7 +19,8 @@ public class MapCenterPointStrategy {
private static final String TAG = "MapCenterPointStrategy";
- private static Map< Integer, Map< String, MapCenterPoint > > sStrategies = new HashMap<>();
+ private static Map< Integer, Map< String, MapCenterPoint > > sCommonStrategies = new HashMap<>();
+ private static Map< Integer, Map< String, MapCenterPoint > > sVrStrategies = new HashMap<>();
public static final MapCenterPoint DEFAULT = new MapCenterPoint( 0.677734D, 0.5733333D );
@@ -34,13 +36,12 @@ public class MapCenterPointStrategy {
choosePoint.put( "e8xx", point );
choosePoint.put( "f80x", point );
choosePoint.put( "f8xx", point );
- sStrategies.put( Scene.CHOOSE_POINT, choosePoint );
+ sCommonStrategies.put( Scene.CHOOSE_POINT, choosePoint );
}
{
// 导航场景,定位视图右下角偏下
Map< String, MapCenterPoint > navi = new HashMap<>();
- navi.put( "d80x", new MapCenterPoint( 0.669444444444444, 0.573333333333D ) );
final MapCenterPoint em4 = new MapCenterPoint( 0.734375D, 0.573333333333D );
navi.put( "em4", em4 );
navi.put( "em3", em4 );
@@ -48,13 +49,12 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.705208333D, 0.575D );
navi.put( "f80x", f80x );
navi.put( "f8xx", f80x );
- sStrategies.put( Scene.NAVI, navi );
+ sCommonStrategies.put( Scene.NAVI, navi );
}
{
// 导航场景 vs 道路事件展示场景,定位视图右下角偏下
Map< String, MapCenterPoint > naviWithRoadEvent = new HashMap<>();
- naviWithRoadEvent.put( "d80x", new MapCenterPoint( 0.669444444444444, 0.73936170212766D ) );
final MapCenterPoint em4 = new MapCenterPoint( 0.734375D, 0.73936170212766D );
naviWithRoadEvent.put( "em4", em4 );
naviWithRoadEvent.put( "em3", em4 );
@@ -62,13 +62,12 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.705208333D, 0.683333333333D );
naviWithRoadEvent.put( "f80x", f80x );
naviWithRoadEvent.put( "f8xx", f80x );
- sStrategies.put( Scene.NAVI_WITH_ROAD_EVENT, naviWithRoadEvent );
+ sCommonStrategies.put( Scene.NAVI_WITH_ROAD_EVENT, naviWithRoadEvent );
}
{
// 巡航场景
Map< String, MapCenterPoint > aimless = new HashMap<>();
- aimless.put( "d80x", new MapCenterPoint( 0.669444444444444, 0.5D ) );
final MapCenterPoint em4 = new MapCenterPoint( 0.734375D, 0.5D );
aimless.put( "em4", em4 );
aimless.put( "em3", em4 );
@@ -76,13 +75,12 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.705208333D, 0.5D );
aimless.put( "f80x", f80x );
aimless.put( "f8xx", f80x );
- sStrategies.put( Scene.AIMLESS, aimless );
+ sCommonStrategies.put( Scene.AIMLESS, aimless );
}
{
// 巡航场景 vs 道路事件展示场景
Map< String, MapCenterPoint > aimlessWithRoadEvent = new HashMap<>();
- aimlessWithRoadEvent.put( "d80x", new MapCenterPoint( 0.669444444444444, 0.68617 ) );
final MapCenterPoint em4 = new MapCenterPoint( 0.734375D, 0.68617 );
aimlessWithRoadEvent.put( "em4", em4 );
aimlessWithRoadEvent.put( "em3", em4 );
@@ -90,7 +88,7 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.705208333D, 0.599074074D );
aimlessWithRoadEvent.put( "f80x", f80x );
aimlessWithRoadEvent.put( "f8xx", f80x );
- sStrategies.put( Scene.AIMLESS_WITH_ROAD_EVENT, aimlessWithRoadEvent );
+ sCommonStrategies.put( Scene.AIMLESS_WITH_ROAD_EVENT, aimlessWithRoadEvent );
}
{
@@ -104,7 +102,7 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.703125D, 0.6083333D );
calculatePath.put( "f80x", f80x );
calculatePath.put( "f8xx", f80x );
- sStrategies.put( Scene.CALCULATE_PATH, calculatePath );
+ sCommonStrategies.put( Scene.CALCULATE_PATH, calculatePath );
}
{
@@ -118,7 +116,7 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.733594D, 0.5D );
categorySearch.put( "f80x", f80x );
categorySearch.put( "f8xx", f80x );
- sStrategies.put( Scene.CATEGORY_SEARCH, categorySearch );
+ sCommonStrategies.put( Scene.CATEGORY_SEARCH, categorySearch );
}
{
@@ -132,19 +130,102 @@ public class MapCenterPointStrategy {
final MapCenterPoint f80x = new MapCenterPoint( 0.6963541D, 0.65D );
categoryV2XEvent.put( "f80x", f80x );
categoryV2XEvent.put( "f8xx", f80x );
- sStrategies.put( Scene.CATEGORY_V2X_EVENT, categoryV2XEvent );
+ sCommonStrategies.put( Scene.CATEGORY_V2X_EVENT, categoryV2XEvent );
+ }
+
+ // --vr mode
+
+ {
+ // 选点场景,定位中心点
+ Map< String, MapCenterPoint > choosePoint = new HashMap<>();
+ choosePoint.put( "d80x", new MapCenterPoint( 0.5D, 0.5D ) );
+ choosePoint.put( "em4", new MapCenterPoint( 0.5D, 0.5D ) );
+ choosePoint.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) );
+ choosePoint.put( "f80x", new MapCenterPoint( 0.5D, 0.5D ) );
+ choosePoint.put( "f8xx", new MapCenterPoint( 0.5D, 0.5D ) );
+ sVrStrategies.put( Scene.CHOOSE_POINT, choosePoint );
+ }
+
+ {
+ // 导航场景,定位视图右下角偏下
+ Map< String, MapCenterPoint > navi = new HashMap<>();
+ navi.put( "d80x", new MapCenterPoint( 0.5D, 0.573333333333D ) );
+ navi.put( "em4", new MapCenterPoint( 0.5D, 0.573333333333D ) );
+ navi.put( "e8xx", new MapCenterPoint( 0.5D, 0.573333333333D ) );
+ navi.put( "f80x", new MapCenterPoint( 0.5D, 0.575D ) );
+ navi.put( "f8xx", new MapCenterPoint( 0.5D, 0.575D ) );
+ sVrStrategies.put( Scene.NAVI, navi );
+ }
+
+ {
+ // 导航场景 vs 道路事件展示场景,定位视图右下角偏下
+ Map< String, MapCenterPoint > naviWithRoadEvent = new HashMap<>();
+ naviWithRoadEvent.put( "d80x", new MapCenterPoint( 0.5D, 0.73936170212766D ) );
+ naviWithRoadEvent.put( "em4", new MapCenterPoint( 0.5D, 0.73936170212766D ) );
+ naviWithRoadEvent.put( "e8xx", new MapCenterPoint( 0.5D, 0.73936170212766D ) );
+ naviWithRoadEvent.put( "f80x", new MapCenterPoint( 0.5D, 0.683333333333D ) );
+ naviWithRoadEvent.put( "f8xx", new MapCenterPoint( 0.5D, 0.683333333333D ) );
+ sVrStrategies.put( Scene.NAVI_WITH_ROAD_EVENT, naviWithRoadEvent );
+ }
+
+ {
+ // 巡航场景
+ Map< String, MapCenterPoint > aimless = new HashMap<>();
+ aimless.put( "d80x", new MapCenterPoint( 0.5D, 0.5D ) );
+ aimless.put( "em4", new MapCenterPoint( 0.5D, 0.5D ) );
+ aimless.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) );
+ aimless.put( "f80x", new MapCenterPoint( 0.5D, 0.8D ) );
+ aimless.put( "f8xx", new MapCenterPoint( 0.5D, 0.8D ) );
+ sVrStrategies.put( Scene.AIMLESS, aimless );
+ }
+
+ {
+ // 巡航场景 vs 道路事件展示场景
+ Map< String, MapCenterPoint > aimlessWithRoadEvent = new HashMap<>();
+ aimlessWithRoadEvent.put( "d80x", new MapCenterPoint( 0.5D, 0.68617 ) );
+ aimlessWithRoadEvent.put( "em4", new MapCenterPoint( 0.5D, 0.68617 ) );
+ aimlessWithRoadEvent.put( "e8xx", new MapCenterPoint( 0.5D, 0.68617 ) );
+ aimlessWithRoadEvent.put( "f80x", new MapCenterPoint( 0.5D, 0.599074074D ) );
+ aimlessWithRoadEvent.put( "f8xx", new MapCenterPoint( 0.5D, 0.599074074D ) );
+ sVrStrategies.put( Scene.AIMLESS_WITH_ROAD_EVENT, aimlessWithRoadEvent );
+ }
+
+ {
+ // 规划路线,定位视图右边
+ Map< String, MapCenterPoint > calculatePath = new HashMap<>();
+ calculatePath.put( "d80x", new MapCenterPoint( 0.5D, 0.610833D ) );
+ calculatePath.put( "em4", new MapCenterPoint( 0.5D, 0.610833D ) );
+ calculatePath.put( "e8xx", new MapCenterPoint( 0.5D, 0.610833D ) );
+ calculatePath.put( "f80x", new MapCenterPoint( 0.5D, 0.6083333D ) );
+ calculatePath.put( "f8xx", new MapCenterPoint( 0.5D, 0.6083333D ) );
+ sVrStrategies.put( Scene.CALCULATE_PATH, calculatePath );
+ }
+
+ {
+ // 分类搜索,定位视图右边
+ Map< String, MapCenterPoint > categorySearch = new HashMap<>();
+ categorySearch.put( "d80x", new MapCenterPoint( 0.5D, 0.5D ) );
+ categorySearch.put( "em4", new MapCenterPoint( 0.5D, 0.5D ) );
+ categorySearch.put( "e8xx", new MapCenterPoint( 0.5D, 0.5D ) );
+ categorySearch.put( "f80x", new MapCenterPoint( 0.5D, 0.5D ) );
+ categorySearch.put( "f8xx", new MapCenterPoint( 0.5D, 0.5D ) );
+ sVrStrategies.put( Scene.CATEGORY_SEARCH, categorySearch );
+ }
+
+ {
+ // V2X,场景视图右边
+ Map< String, MapCenterPoint > categoryV2XEvent = new HashMap<>();
+ categoryV2XEvent.put( "d80x", new MapCenterPoint( 0.5, 0.7D ) );
+ categoryV2XEvent.put( "em4", new MapCenterPoint( 0.5, 0.7D ) );
+ categoryV2XEvent.put( "e8xx", new MapCenterPoint( 0.5, 0.7D ) );
+ categoryV2XEvent.put( "f80x", new MapCenterPoint( 0.5, 0.65D ) );
+ categoryV2XEvent.put( "f8xx", new MapCenterPoint( 0.5, 0.65D ) );
+ sVrStrategies.put( Scene.CATEGORY_V2X_EVENT, categoryV2XEvent );
}
}
- public static void addScene( int scene, Map< String, MapCenterPoint > config ) {
- if ( sStrategies.containsKey( scene ) ) {
- Logger.w( TAG, "scene has already defined, append config..." );
- }
- if ( sStrategies.get( scene ) != null ) {
- sStrategies.get( scene ).putAll( config );
- } else {
- sStrategies.put( scene, config );
- }
+ public static void resetByChangeMode(){
+ setMapCenterPointByScene( MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController(), Scene.AIMLESS);
}
/**
@@ -157,12 +238,16 @@ public class MapCenterPointStrategy {
if ( controller == null ) {
return;
}
- if ( !sStrategies.containsKey( scene ) ) {
+ Map> strategies = sCommonStrategies;
+ if ( MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) {
+ strategies = sVrStrategies;
+ }
+ if ( !strategies.containsKey( scene ) ) {
Logger.w( TAG, "no strategy for scene: %s, use DEFAULT", scene );
controller.setPointToCenter( DEFAULT.x, DEFAULT.y );
return;
}
- Map< String, MapCenterPoint > points = sStrategies.get( scene );
+ Map< String, MapCenterPoint > points = strategies.get( scene );
String car = DebugConfig.getProductFlavor();
if ( !points.containsKey( car ) ) {
Logger.w( TAG, "no strategy for series: %s, use DEFAULT", scene );
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CoordinateSystemTransformationUtil.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CoordinateSystemTransformationUtil.java
new file mode 100644
index 0000000000..ce46444fbe
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CoordinateSystemTransformationUtil.java
@@ -0,0 +1,88 @@
+package com.mogo.module.common.utils;
+
+import java.math.BigDecimal;
+
+/**
+ * 坐标系转化
+ *
+ * @author linyang
+ * @since 2020.10.21
+ */
+public class CoordinateSystemTransformationUtil {
+
+ private static final double x_PI = 52.35987755982988D;
+ private static final double PI = 3.141592653589793D;
+ private static final double a = 6378245.0D;
+ private static final double ee = 0.006693421622965943D;
+
+ public static final boolean outOfChina( double lat, double lng ) {
+ return lng <= 73.66D || lng >= 135.05D || lat <= 3.86D || lat >= 53.55D;
+ }
+
+ private static final double transformLat( double lng, double lat ) {
+ double ret = -100.0D + 2.0D * lng + 3.0D * lat + 0.2D * lat * lat + 0.1D * lng * lat + 0.2D * Math.sqrt( Math.abs( lng ) );
+ ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 20.0D * Math.sin( lat * 3.141592653589793D ) + 40.0D * Math.sin( lat / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 160.0D * Math.sin( lat / 12.0D * 3.141592653589793D ) + ( double ) 320 * Math.sin( lat * 3.141592653589793D / 30.0D ) ) * 2.0D / 3.0D;
+ return ret;
+ }
+
+ private static final double transformLon( double lng, double lat ) {
+ double ret = 300.0D + lng + 2.0D * lat + 0.1D * lng * lng + 0.1D * lng * lat + 0.1D * Math.sqrt( Math.abs( lng ) );
+ ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 20.0D * Math.sin( lng * 3.141592653589793D ) + 40.0D * Math.sin( lng / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ ret += ( 150.0D * Math.sin( lng / 12.0D * 3.141592653589793D ) + 300.0D * Math.sin( lng / 30.0D * 3.141592653589793D ) ) * 2.0D / 3.0D;
+ return ret;
+ }
+
+ public static final double[] transformWgsToGcj( double wgLat, double wgLon ) {
+ double[] point = new double[2];
+ if ( outOfChina( wgLat, wgLon ) ) {
+ point[0] = wgLon;
+ point[1] = wgLat;
+ return point;
+ } else {
+ double dLat = transformLat( wgLon - 105.0D, wgLat - 35.0D );
+ double dLon = transformLon( wgLon - 105.0D, wgLat - 35.0D );
+ double radLat = wgLat / 180.0D * 3.141592653589793D;
+ double magic = Math.sin( radLat );
+ magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
+ double sqrtMagic = Math.sqrt( magic );
+ dLat = dLat * 180.0D / ( 6335552.717000426D / ( magic * sqrtMagic ) * 3.141592653589793D );
+ dLon = dLon * 180.0D / ( 6378245.0D / sqrtMagic * Math.cos( radLat ) * 3.141592653589793D );
+ double mgLat = wgLat + dLat;
+ double mgLon = wgLon + dLon;
+ point[0] = dealRound( mgLon );
+ point[1] = dealRound( mgLat );
+ return point;
+ }
+ }
+
+ public static final double[] transformGcj02toWgs84( double lat, double lng ) {
+ double[] var10000;
+ if ( outOfChina( lat, lng ) ) {
+ var10000 = new double[]{lng, lat};
+ } else {
+ double dlat = transformLat( lng - 105.0D, lat - 35.0D );
+ double dlng = transformLon( lng - 105.0D, lat - 35.0D );
+ double radlat = lat / 180.0D * 3.141592653589793D;
+ double magic = Math.sin( radlat );
+ magic = ( double ) 1 - 0.006693421622965943D * magic * magic;
+ double sqrtmagic = Math.sqrt( magic );
+ dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * 3.141592653589793D );
+ dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * 3.141592653589793D );
+ double mglat = lat + dlat;
+ double mglng = lng + dlng;
+ var10000 = new double[]{dealRound( lng * ( double ) 2 - mglng ), dealRound( lat * ( double ) 2 - mglat )};
+ }
+
+ return var10000;
+ }
+
+ private static final double dealRound( double value ) {
+ BigDecimal bg = new BigDecimal( value );
+ double result = bg.setScale( 6, 4 ).doubleValue();
+ return result;
+ }
+
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CoordinateUtils.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CoordinateUtils.java
new file mode 100644
index 0000000000..a12b86d42e
--- /dev/null
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/utils/CoordinateUtils.java
@@ -0,0 +1,97 @@
+package com.mogo.module.common.utils;
+
+import com.amap.api.maps.model.LatLng;
+
+/**
+ * @author donghongyu
+ */
+public class CoordinateUtils {
+
+ private static double a = 6378245.0;
+ private static double ee = 0.00669342162296594323;
+
+ /**
+ * 手机GPS坐标转火星坐标
+ *
+ * @param wgLoc
+ * @return
+ */
+ public static double[] transformFromWGSToGCJ( double lat, double lon ) {
+
+ //如果在国外,则默认不进行转换
+ if ( outOfChina( lat, lon ) ) {
+ return new double[]{lat, lon};
+ }
+ double dLat = transformLat( lon - 105.0,
+ lat - 35.0 );
+ double dLon = transformLon( lon - 105.0,
+ lat - 35.0 );
+ double radLat = lat / 180.0 * Math.PI;
+ double magic = Math.sin( radLat );
+ magic = 1 - ee * magic * magic;
+ double sqrtMagic = Math.sqrt( magic );
+ dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI );
+ dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI );
+
+ return new double[]{lat + dLat, lon + dLon};
+ }
+
+ /**
+ * 手机GPS坐标转火星坐标
+ *
+ * @param wgLoc
+ * @return
+ */
+ public static LatLng transformFromWGSToGCJ( LatLng wgLoc ) {
+
+ //如果在国外,则默认不进行转换
+ if ( outOfChina( wgLoc.latitude, wgLoc.longitude ) ) {
+ return new LatLng( wgLoc.latitude, wgLoc.longitude );
+ }
+ double dLat = transformLat( wgLoc.longitude - 105.0,
+ wgLoc.latitude - 35.0 );
+ double dLon = transformLon( wgLoc.longitude - 105.0,
+ wgLoc.latitude - 35.0 );
+ double radLat = wgLoc.latitude / 180.0 * Math.PI;
+ double magic = Math.sin( radLat );
+ magic = 1 - ee * magic * magic;
+ double sqrtMagic = Math.sqrt( magic );
+ dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI );
+ dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI );
+
+ return new LatLng( wgLoc.latitude + dLat, wgLoc.longitude + dLon );
+ }
+
+ public static double transformLat( double x, double y ) {
+ double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y
+ + 0.2 * Math.sqrt( x > 0 ? x : -x );
+ ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x
+ * Math.PI ) ) * 2.0 / 3.0;
+ ret += ( 20.0 * Math.sin( y * Math.PI ) + 40.0 * Math.sin( y / 3.0
+ * Math.PI ) ) * 2.0 / 3.0;
+ ret += ( 160.0 * Math.sin( y / 12.0 * Math.PI ) + 320 * Math.sin( y
+ * Math.PI / 30.0 ) ) * 2.0 / 3.0;
+ return ret;
+ }
+
+ public static double transformLon( double x, double y ) {
+ double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1
+ * Math.sqrt( x > 0 ? x : -x );
+ ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x
+ * Math.PI ) ) * 2.0 / 3.0;
+ ret += ( 20.0 * Math.sin( x * Math.PI ) + 40.0 * Math.sin( x / 3.0
+ * Math.PI ) ) * 2.0 / 3.0;
+ ret += ( 150.0 * Math.sin( x / 12.0 * Math.PI ) + 300.0 * Math.sin( x
+ / 30.0 * Math.PI ) ) * 2.0 / 3.0;
+ return ret;
+ }
+
+ public static boolean outOfChina( double lat, double lon ) {
+ if ( lon < 72.004 || lon > 137.8347 )
+ return true;
+ if ( lat < 0.8293 || lat > 55.8271 )
+ return true;
+ return false;
+ }
+
+}
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java
index a7bcb305c1..8e93bfca6c 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/DialogImpl.java
@@ -39,6 +39,10 @@ class DialogImpl implements IWindowManagerView {
dialog.show();
}
+ @Override
+ public void update(WindowManagerView.WMViewParams params) {
+ }
+
@Override
public void hide() {
/*
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java
index cab1b77605..9f30fab32b 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/IWindowManagerView.java
@@ -27,6 +27,12 @@ interface IWindowManagerView {
*/
void show();
+ /**
+ * 更新界面位置或大小
+ * @param params 具体参数
+ */
+ void update(WindowManagerView.WMViewParams params);
+
/**
* 隐藏
*/
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java
index d810e6033f..1e491f0669 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerImpl.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Build;
import android.view.MotionEvent;
+import android.view.View;
import android.view.WindowManager;
/**
@@ -16,6 +17,8 @@ class WindowManagerImpl implements IWindowManagerView {
private WindowManagerView.WMViewParams mParams;
private boolean isShowing;
+ private View rootView;
+
private float mLastX, mLastY;
private int mOldOffsetX, mOldOffsetY;
@@ -23,6 +26,10 @@ class WindowManagerImpl implements IWindowManagerView {
public void init( WindowManagerView.WMViewParams params ) {
mParams = params;
mWindowManager = ( WindowManager ) mParams.mContext.getApplicationContext().getSystemService( Context.WINDOW_SERVICE );
+ generateLayoutParams();
+ }
+
+ private void generateLayoutParams(){
mLayoutParams = new WindowManager.LayoutParams();
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
mLayoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -80,10 +87,20 @@ class WindowManagerImpl implements IWindowManagerView {
public void show() {
if ( !isShowing ) {
isShowing = true;
+ rootView = mParams.mContentView;
mWindowManager.addView( mParams.mContentView, mLayoutParams );
}
}
+ @Override
+ public void update(WindowManagerView.WMViewParams params) {
+ if (isShowing) {
+ mParams = params;
+ generateLayoutParams();
+ mWindowManager.updateViewLayout(rootView,mLayoutParams);
+ }
+ }
+
@Override
public void hide() {
if ( isShowing && mParams != null ) {
diff --git a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java
index db2b244273..4d85ed9a2c 100644
--- a/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java
+++ b/modules/mogo-module-common/src/main/java/com/mogo/module/common/wm/WindowManagerView.java
@@ -116,4 +116,15 @@ public class WindowManagerView {
public int mY;
public int mGravity;
}
+
+ public void exchangeSizeAndPosition(int width, int height, int x, int y) {
+ if (isShowing()) {
+ mParams.mX = x;
+ mParams.mY = y;
+ mParams.mWidth = width;
+ mParams.mHeight = height;
+ mManagerView.update(mParams);
+ }
+ }
+
}
diff --git a/modules/mogo-module-common/src/main/res/drawable-ldpi/module_services_marker_bkg.png b/modules/mogo-module-common/src/main/res/drawable-ldpi/module_services_marker_bkg.png
new file mode 100755
index 0000000000..2dff68497d
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-ldpi/module_services_marker_bkg.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-mdpi/module_services_marker_bkg.png b/modules/mogo-module-common/src/main/res/drawable-mdpi/module_services_marker_bkg.png
new file mode 100755
index 0000000000..2dff68497d
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-mdpi/module_services_marker_bkg.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_4s.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_4s.png
new file mode 100644
index 0000000000..11c5c6ea7b
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_4s.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_book.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_book.png
new file mode 100644
index 0000000000..f846dcefc3
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_book.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_gray.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_gray.png
new file mode 100644
index 0000000000..d4266a6bc5
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_gray.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_gray_selected.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_gray_selected.png
new file mode 100644
index 0000000000..725a560b4f
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_gray_selected.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type2.png
new file mode 100644
index 0000000000..10221fcb01
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_110.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_110.png
new file mode 100644
index 0000000000..74f12e781d
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_110.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_119.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_119.png
new file mode 100644
index 0000000000..db23ff7144
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_119.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_120.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_120.png
new file mode 100644
index 0000000000..1c929ca8a0
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_120.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_bus.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_bus.png
new file mode 100644
index 0000000000..afe1372cb9
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_bus.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_taxi.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_taxi.png
new file mode 100644
index 0000000000..0b363c6d61
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_car_type_taxi.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_living.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_living.png
new file mode 100644
index 0000000000..d6f1dea192
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_living.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_living_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_living_white.png
new file mode 100644
index 0000000000..1b87f0ce86
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_living_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow.png
new file mode 100644
index 0000000000..f05356795e
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow_vr.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow_vr.png
new file mode 100644
index 0000000000..eca4f04cef
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow_vr.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_misic.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_misic.png
new file mode 100644
index 0000000000..b0dc73d75a
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_misic.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_news.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_news.png
new file mode 100644
index 0000000000..26edaa7f7a
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_news.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl.png
new file mode 100644
index 0000000000..fc3ff86372
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl2.png
new file mode 100755
index 0000000000..478232ac79
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl2_white.png
new file mode 100755
index 0000000000..700226f150
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_pondingl2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_refuel.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_refuel.png
new file mode 100644
index 0000000000..bac7ee2e40
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_refuel.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off.png
new file mode 100644
index 0000000000..8c6b30842b
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off2.png
new file mode 100755
index 0000000000..2fb4ef553e
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off2_white.png
new file mode 100755
index 0000000000..9b424494ee
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_off2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up.png
new file mode 100644
index 0000000000..29fd407dca
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up2.png
new file mode 100755
index 0000000000..e62fd5ec03
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up2_white.png
new file mode 100755
index 0000000000..0ac89f4dec
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_block_up2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check.png
new file mode 100644
index 0000000000..7f8f80be69
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check2.png
new file mode 100755
index 0000000000..001974ba87
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check2_white.png
new file mode 100755
index 0000000000..5baea2a41b
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_check2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work.png
new file mode 100644
index 0000000000..0b0d4bbab5
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work2.png
new file mode 100755
index 0000000000..c11e911f15
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work2_white.png
new file mode 100755
index 0000000000..7875086c3e
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_road_work2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shear_news.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shear_news.png
new file mode 100644
index 0000000000..f446cba155
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shear_news.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shop.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shop.png
new file mode 100644
index 0000000000..d8be56fd47
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shop.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shop_discount.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shop_discount.png
new file mode 100644
index 0000000000..97e8a4967b
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/icon_map_marker_shop_discount.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_left.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_left.png
new file mode 100644
index 0000000000..702a793d5a
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_left.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_machine_middle.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_machine_middle.png
new file mode 100755
index 0000000000..2387d22689
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_machine_middle.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_middle.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_middle.png
new file mode 100644
index 0000000000..3bfa172f98
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_middle.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_reverse.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_reverse.png
new file mode 100644
index 0000000000..e034294816
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_reverse.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_right.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_right.png
new file mode 100644
index 0000000000..43a86c955d
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_common_online_car_vr_right.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_left_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_left_normal.png
new file mode 100755
index 0000000000..b92447c45e
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_left_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_left_reverse_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_left_reverse_normal.png
new file mode 100755
index 0000000000..b92447c45e
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_left_reverse_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_normal.png
new file mode 100755
index 0000000000..8278fb5fe6
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_reverse_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_reverse_normal.png
new file mode 100755
index 0000000000..8278fb5fe6
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_reverse_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_right_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_right_normal.png
new file mode 100755
index 0000000000..56081c308c
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_right_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_right_reverse_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_right_reverse_normal.png
new file mode 100755
index 0000000000..56081c308c
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_machine_car_other_right_reverse_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_dangerous.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_dangerous.png
new file mode 100644
index 0000000000..07e90599a9
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_dangerous.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_normal.png
new file mode 100644
index 0000000000..702a793d5a
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_normal_dangerous.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_normal_dangerous.png
new file mode 100644
index 0000000000..862d30edd7
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_normal_dangerous.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_reverse_dangerous.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_reverse_dangerous.png
new file mode 100644
index 0000000000..7a770fac99
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_reverse_dangerous.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_reverse_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_reverse_normal.png
new file mode 100644
index 0000000000..cb3cff9072
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_left_reverse_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_normal.png
new file mode 100644
index 0000000000..177c63460b
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_reverse_dangerous.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_reverse_dangerous.png
new file mode 100644
index 0000000000..ecd5fdef07
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_reverse_dangerous.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_reverse_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_reverse_normal.png
new file mode 100644
index 0000000000..0a07332644
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_reverse_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_dangerous.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_dangerous.png
new file mode 100644
index 0000000000..f6486f2e3f
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_dangerous.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_normal.png
new file mode 100644
index 0000000000..43a86c955d
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_reverse_dangerous.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_reverse_dangerous.png
new file mode 100644
index 0000000000..a6db05eea4
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_reverse_dangerous.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_reverse_normal.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_reverse_normal.png
new file mode 100644
index 0000000000..0ed7caad5b
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_other_right_reverse_normal.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self.png
new file mode 100644
index 0000000000..dc22ac57a1
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self_left.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self_left.png
new file mode 100644
index 0000000000..0e1c9b511a
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self_left.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self_right.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self_right.png
new file mode 100644
index 0000000000..aa50ae2ce5
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_commons_user_car_self_right.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_call.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_call.png
new file mode 100644
index 0000000000..9a9321b3a6
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_call.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident.png
new file mode 100644
index 0000000000..8dd43b20a7
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident2.png
new file mode 100644
index 0000000000..1e61298d35
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident3.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident3.png
new file mode 100755
index 0000000000..fe68bc7cba
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident3.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident3_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident3_white.png
new file mode 100755
index 0000000000..911bee2df4
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_accident3_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog.png
new file mode 100644
index 0000000000..61296d59d2
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2.png
new file mode 100755
index 0000000000..787101fbb1
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2_white.png
new file mode 100755
index 0000000000..b6164bcfdd
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_dark_frog2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze.png
new file mode 100644
index 0000000000..ea07251424
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2.png
new file mode 100755
index 0000000000..d34779845e
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2_white.png
new file mode 100755
index 0000000000..353cfefec6
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_freeze2_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_illegal_park.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_illegal_park.png
new file mode 100644
index 0000000000..5923d114f6
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_illegal_park.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_illegal_park_white.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_illegal_park_white.png
new file mode 100644
index 0000000000..dbc420e8e6
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_illegal_park_white.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_parking.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_parking.png
new file mode 100644
index 0000000000..33cb8fd3ce
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_parking.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_parking2.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_parking2.png
new file mode 100644
index 0000000000..8026654bdf
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_parking2.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery.png
new file mode 100644
index 0000000000..f11b4a4178
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery_light.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery_light.png
new file mode 100644
index 0000000000..e78307acd8
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery_light.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_seek_helping.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_seek_helping.png
new file mode 100755
index 0000000000..aa6eb75043
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_service_ic_seek_helping.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_services_marker_bkg.png b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_services_marker_bkg.png
new file mode 100644
index 0000000000..acdb4d7063
Binary files /dev/null and b/modules/mogo-module-common/src/main/res/drawable-xhdpi/module_services_marker_bkg.png differ
diff --git a/modules/mogo-module-common/src/main/res/drawable/bg_map_marker_yellow_info.xml b/modules/mogo-module-common/src/main/res/drawable/bg_map_marker_yellow_info.xml
new file mode 100644
index 0000000000..b2be8e312e
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/drawable/bg_map_marker_yellow_info.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/res/drawable/bg_shape_reverse_yellow.xml b/modules/mogo-module-common/src/main/res/drawable/bg_shape_reverse_yellow.xml
new file mode 100644
index 0000000000..6bc80c96dc
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/drawable/bg_shape_reverse_yellow.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/mogo-module-common/src/main/res/layout/modudle_services_marker_layout.xml b/modules/mogo-module-common/src/main/res/layout/modudle_services_marker_layout.xml
new file mode 100644
index 0000000000..c8b06a6245
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/layout/modudle_services_marker_layout.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/res/layout/modudle_services_marker_layout_info.xml b/modules/mogo-module-common/src/main/res/layout/modudle_services_marker_layout_info.xml
new file mode 100644
index 0000000000..444e398c97
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/layout/modudle_services_marker_layout_info.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/res/layout/module_commons_layout_car.xml b/modules/mogo-module-common/src/main/res/layout/module_commons_layout_car.xml
new file mode 100644
index 0000000000..81eef40fb4
--- /dev/null
+++ b/modules/mogo-module-common/src/main/res/layout/module_commons_layout_car.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/res/values-mdpi/dimens.xml b/modules/mogo-module-common/src/main/res/values-mdpi/dimens.xml
index 7f0779b626..a3ca5a2f67 100644
--- a/modules/mogo-module-common/src/main/res/values-mdpi/dimens.xml
+++ b/modules/mogo-module-common/src/main/res/values-mdpi/dimens.xml
@@ -7,4 +7,58 @@
48px
17.5000px
+
+ 16dp
+ 2dp
+ 56px
+ 65px
+ 35px
+ 35px
+ 4px
+
+ 550px
+ 208px
+ 100px
+ 100px
+ 100px
+ 10px
+ 54px
+ 44px
+ 44px
+ 14px
+ 12px
+ 64px
+ 6.5px
+ 10px
+
+ 2px
+ 2px
+ 6px
+ 28px
+ 16px
+
+ 20px
+ 28px
+ 20px
+ 84px
+ 18px
+ 58px
+ 14px
+ 16px
+ 18px
+ 5px
+ 20px
+ 13px
+ 42px
+ 8.89px
+ 13px
+ 16px
+ 25px
+ 13px
+ 26px
+ 40px
+ 18px
+ 28px
+ 108px
+ 12.5px
\ No newline at end of file
diff --git a/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml
index 7db7abf2a5..96ca04697b 100644
--- a/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-common/src/main/res/values-xhdpi/dimens.xml
@@ -1062,4 +1062,58 @@
32px
26px
+ 20dp
+ 4dp
+ 100px
+ 117px
+ 60px
+ 60px
+ 8px
+
+
+ 1000px
+ 390px
+ 200px
+ 200px
+ 10px
+ 10px
+ 100px
+ 80px
+ 80px
+ 24px
+ 20px
+ 120px
+ 20px
+
+ 20px
+ 20px
+ 20px
+ 50px
+ 28px
+
+ 36px
+ 50px
+ 36px
+ 151px
+ 33px
+ 102px
+ 26px
+ 30px
+ 34px
+ 9px
+ 40px
+ 20px
+ 70px
+ 16px
+ 21px
+ 28px
+ 45px
+ 22px
+ 42px
+ 20px
+ 34px
+ 28px
+ 60px
+ 22.5px
+
diff --git a/modules/mogo-module-common/src/main/res/values/dimens.xml b/modules/mogo-module-common/src/main/res/values/dimens.xml
index c11c6d59ae..0950acfa9d 100644
--- a/modules/mogo-module-common/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-common/src/main/res/values/dimens.xml
@@ -1054,4 +1054,57 @@
15.3125px
6px
+ 16dp
+ 2dp
+ 56px
+ 65px
+ 35px
+ 35px
+ 4px
+
+ 550px
+ 208px
+ 100px
+ 100px
+ 100px
+ 10px
+ 54px
+ 44px
+ 44px
+ 14px
+ 12px
+ 64px
+ 6.5px
+ 10px
+
+ 2px
+ 2px
+ 0px
+ 28px
+ 16px
+
+ 20px
+ 28px
+ 20px
+ 84px
+ 18px
+ 58px
+ 14px
+ 16px
+ 18px
+ 5px
+ 20px
+ 13px
+ 42px
+ 8.89px
+ 13px
+ 16px
+ 25px
+ 13px
+ 26px
+ 20px
+ 18px
+ 17px
+ 60px
+ 12.5px
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 cf50976e2c..d9b038ca59 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
@@ -11,6 +11,7 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
+import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
@@ -49,6 +50,7 @@ import com.mogo.module.extensions.ExtensionsModuleConst;
import com.mogo.module.extensions.R;
import com.mogo.module.extensions.navi.NaviInfoView;
import com.mogo.module.extensions.userinfo.UserInfo;
+import com.mogo.module.extensions.utils.AdasNoticeHelper;
import com.mogo.module.extensions.utils.EntranceViewHolder;
import com.mogo.module.extensions.utils.NoMapTopViewShaderHelper;
import com.mogo.module.extensions.utils.TopViewAnimHelper;
@@ -75,13 +77,16 @@ import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.glide.GlideApp;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.storage.SharedPrefsMgr;
+import com.zhidao.manager.ts.TsThreshold;
import java.util.HashMap;
+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.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;
@@ -146,6 +151,11 @@ public class EntranceFragment extends MvpFragment {
mApis.getSearchManagerApi().goSettings();
@@ -279,8 +296,19 @@ public class EntranceFragment extends MvpFragment{
+ if (groupFix.getVisibility() == View.VISIBLE) {
+ groupFix.setVisibility(View.GONE);
+ }else{
+ groupFix.setVisibility(View.VISIBLE);
+ }
+ return true;
+ });
}
+ groupFix = findViewById(R.id.groupFix);
+
ConstraintLayout rootView = findViewById(R.id.module_entrance_id_top_motion_layout);
if (rootView != null) {
TopViewAnimHelper.getInstance().init(rootView);
@@ -359,7 +387,6 @@ public class EntranceFragment extends MvpFragment{
+ // 进入vr模式
+ enterVrMode();
+ mApis.getMapFrameControllerApi().changeToVRMode();
+ });
+
+ tvExitVrMode = findViewById(R.id.module_ext_exit_vr_mode);
+ tvExitVrMode.setOnClickListener((v)->{
+ // 退出vr模式
+ exitVrMode();
+ mApis.getMapFrameControllerApi().changeTo2dMode();
});
dealWeatherContainer();
@@ -415,6 +455,120 @@ public class EntranceFragment extends MvpFragment{
+ try {
+ String times = etTimes.getText().toString().trim();
+ int fixTime = Integer.parseInt(times);
+ Logger.d(TAG, "修改上报时间间隔: " + times + " fixTime: " + fixTime);
+ if(fixTime > 0) {
+ Intent intent = new Intent("com.mogo.launcher.action.FIX_UPLOAT_DELAY");
+ intent.putExtra("fixTime", fixTime);
+ getContext().sendBroadcast(intent);
+ TipToast.tip("已经发送修改广播");
+ }else{
+ TipToast.tip("fixTime为0,不发送广播");
+ }
+ } catch (Exception e) {
+ TipToast.tip("fixTime异常");
+ e.printStackTrace();
+ }
+ });
+ }
+
+ private EditText etTimes;
+ private Group groupFix;
+
+ private void enterVrMode(){
+ tvEnterVrMode.setVisibility(View.GONE);
+ mMove2CurrentLocation.setVisibility(View.GONE);
+ mUploadRoadCondition.setVisibility(View.GONE);
+ mWeatherContainer.setVisibility(View.GONE);
+ mMsgContainer.setVisibility(View.GONE);
+
+ tvExitVrMode.setVisibility(View.VISIBLE);
+
+ adasNoticeHelper.enterVrMode();
+ }
+
+ private void exitVrMode(){
+ EntranceViewHolder.getInstance().forceHideNoticeView();
+ tvEnterVrMode.setVisibility(View.VISIBLE);
+ mMove2CurrentLocation.setVisibility(View.VISIBLE);
+ mUploadRoadCondition.setVisibility(View.VISIBLE);
+// mWeatherContainer.setVisibility(View.VISIBLE);
+// mMsgContainer.setVisibility(View.VISIBLE);
+
+ tvExitVrMode.setVisibility(View.GONE);
+
+ adasNoticeHelper.exitVrMode();
+
+ }
+
+ private void debugCrashWarn(){
+ thresholdSetContainer = findViewById(R.id.thresholdSetContainer);
+ topEditC = findViewById(R.id.etTopC);
+ frontLeftEditC = findViewById(R.id.etFrontLeftC);
+ backLeftEditC = findViewById(R.id.etBackLeftC);
+ frontRightEditC = findViewById(R.id.etFrontRightC);
+ backRightEditC = findViewById(R.id.etBackRightC);
+ bottomEditC = findViewById(R.id.etBottomC);
+
+ topEditS = findViewById(R.id.etTopS);
+ frontLeftEditS = findViewById(R.id.etFrontLeftS);
+ backLeftEditS = findViewById(R.id.etBackLeftS);
+ frontRightEditS = findViewById(R.id.etFrontRightS);
+ backRightEditS = findViewById(R.id.etBackRightS);
+ bottomEditS = findViewById(R.id.etBottomS);
+
+ findViewById(R.id.btnClose).setOnClickListener(view -> {
+ thresholdSetContainer.setVisibility(View.GONE);
+ mApis.getAdasControllerApi().showADAS();
+ });
+ mUploadRoadCondition.setOnLongClickListener(v -> {
+ mApis.getAdasControllerApi().closeADAS();
+ thresholdSetContainer.setVisibility(View.VISIBLE);
+ TsThreshold threshold = mApis.getCrashWarnProvider().getCurrentCrashThreshold();
+ topEditC.setText(String.format(Locale.CHINA, "%d", threshold.getC5()));
+ topEditS.setText(String.format(Locale.CHINA, "%d", threshold.getS5()));
+ bottomEditC.setText(String.format(Locale.CHINA, "%d", threshold.getC6()));
+ bottomEditS.setText(String.format(Locale.CHINA, "%d", threshold.getS6()));
+ frontLeftEditC.setText(String.format(Locale.CHINA, "%d", threshold.getC4()));
+ frontLeftEditS.setText(String.format(Locale.CHINA, "%d", threshold.getS4()));
+ backLeftEditC.setText(String.format(Locale.CHINA, "%d", threshold.getC3()));
+ backLeftEditS.setText(String.format(Locale.CHINA, "%d", threshold.getS3()));
+ frontRightEditC.setText(String.format(Locale.CHINA, "%d", threshold.getC1()));
+ frontRightEditS.setText(String.format(Locale.CHINA, "%d", threshold.getS1()));
+ backRightEditC.setText(String.format(Locale.CHINA, "%d", threshold.getC2()));
+ backRightEditS.setText(String.format(Locale.CHINA, "%d", threshold.getS2()));
+ return true;
+ });
+ findViewById(R.id.btnSet).setOnClickListener(view -> {
+ // 设置阈值
+ TsThreshold threshold = new TsThreshold(
+ Integer.parseInt(frontRightEditC.getText().toString()),
+ Integer.parseInt(frontRightEditS.getText().toString()),
+ Integer.parseInt(backRightEditC.getText().toString()),
+ Integer.parseInt(backRightEditS.getText().toString()),
+ Integer.parseInt(backLeftEditC.getText().toString()),
+ Integer.parseInt(backLeftEditS.getText().toString()),
+ Integer.parseInt(frontLeftEditC.getText().toString()),
+ Integer.parseInt(frontLeftEditS.getText().toString()),
+ Integer.parseInt(topEditC.getText().toString()),
+ Integer.parseInt(topEditS.getText().toString()),
+ Integer.parseInt(bottomEditC.getText().toString()),
+ Integer.parseInt(bottomEditS.getText().toString())
+ );
+ mApis.getCrashWarnProvider().setCrashThreshold(threshold);
+ thresholdSetContainer.setVisibility(View.GONE);
+ mApis.getAdasControllerApi().showADAS();
+ });
if (!DebugConfig.isMapBased()) {
// 不基于地图的版本需要隐藏一些按钮
@@ -622,14 +776,15 @@ public class EntranceFragment extends MvpFragment seekHelpGroup.setVisibility(View.GONE));
}
+ } else if (descriptor == StatusDescriptor.VR_MODE) {
+ if (isTrue) {
+ enterVrMode();
+ }else{
+ exitVrMode();
+ }
}
}
@@ -816,6 +977,9 @@ public class EntranceFragment extends MvpFragment MAX_DISPLAY_MSG_AMOUNT ?
getString(R.string.module_ext_str_dots) : String.valueOf(amount));
@@ -1025,8 +1192,8 @@ public class EntranceFragment extends MvpFragment {
+ private static final String TAG = "AdasNoticeHelper";
+
+ private static final int MSG_HIDE_TRAFFIC_LIGHT_BY_OBU = 1001;
+ private static final int MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD = 1002;
+ private static final int MSG_HIDE_LIMIT_SPEED = 1003;
+ private static final int MSG_REFRESH_CAR_STRATEGY = 1004;
+
+ private static final long HIDE_TRAFFIC_LIGHT_DELAY = 2_000L;
+ private static final long HIDE_LIMIT_SPEED_DELAY = 10_000L;
+ private static final long STRATEGY_DELAY = 1000L;
+
+ private Context context;
+ private AdasNoticeReceiver adasReceiver = new AdasNoticeReceiver();
+
+ private volatile boolean isVrMode = false;
+
+ private TextView tvSelfSpeed, tvTrafficLight, tvLimitSpeed;
+
+ private int limitSpeed = -1;
+ private int currentSpeed = 0;
+ private String lightStatus = "G";
+ private String surplusTime;
+
+ private Handler handler = new Handler(this);
+
+ private boolean isObuLightData = false;
+
+ private View selfCar;
+
+ private boolean lightCenter = true;
+
+ public void init(Context context) {
+ this.context = context;
+ if(!lightCenter) {
+ selfCar = LayoutInflater.from(context).inflate(R.layout.module_ext_item_self_car, null);
+ tvSelfSpeed = selfCar.findViewById(R.id.tvSelfSpeed);
+ tvTrafficLight = selfCar.findViewById(R.id.tvTrafficLight);
+ tvLimitSpeed = selfCar.findViewById(R.id.tvLimitSpeed);
+ }
+ Logger.d(TAG, "init====");
+ }
+
+ public void initView(View root) {
+ if(lightCenter) {
+ tvSelfSpeed = root.findViewById(R.id.tvSelfSpeed);
+ tvTrafficLight = root.findViewById(R.id.tvTrafficLight);
+ tvLimitSpeed = root.findViewById(R.id.tvLimitSpeed);
+ }
+ }
+
+ public void enterVrMode() {
+ Logger.d(TAG, "enterVrMode===" + isVrMode);
+ if (!isVrMode) {
+ isVrMode = true;
+ IntentFilter filter = new IntentFilter("com.mogo.launcher.adas.app.biz");
+ filter.addAction("com.mogo.launcher.adas");
+ context.registerReceiver(adasReceiver, filter);
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().addAdasWarnMessageCallback(this);
+ MogoApisHandler.getInstance().getApis().getRegisterCenterApi().registerMogoLocationListener(TAG, this);
+ MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(context).registerOnWebSocketMessageListener(this);
+ if(!lightCenter) {
+ handler.sendEmptyMessageDelayed(MSG_REFRESH_CAR_STRATEGY, STRATEGY_DELAY);
+ }
+ }
+ }
+
+ public void exitVrMode() {
+ Logger.d(TAG, "退出vr模式===" + isVrMode);
+ if (isVrMode) {
+ isVrMode = false;
+ handler.removeMessages(MSG_REFRESH_CAR_STRATEGY);
+ tvSelfSpeed.setVisibility(View.GONE);
+ tvTrafficLight.setVisibility(View.GONE);
+ tvLimitSpeed.setVisibility(View.GONE);
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().removeAdasWarnMessageCallback(this);
+ MogoApisHandler.getInstance().getApis().getRegisterCenterApi().unregisterMogoLocationListener(TAG);
+ MogoApisHandler.getInstance().getApis().getWebSocketManagerApi(context).unregisterOnWebSocketMessageListener(this);
+
+ context.unregisterReceiver(adasReceiver);
+ }
+ }
+
+ @Override
+ public void onReceiveData(ADASWarnMessage msg) {
+ Logger.d(TAG, "收到adas warn message, isVrMode: " + isVrMode + " msg: " + msg);
+ if (!isVrMode) {
+ return;
+ }
+
+ if (msg.type == MogoADASWarnType.ADAS_WARNING_LIMIT_SPEED) {
+ // 收到限速信息,更新界面
+ limitSpeed = Integer.parseInt(msg.value);
+ drawLimitSpeed();
+ }
+ }
+
+ private void drawLimitSpeed(){
+ if (tvLimitSpeed != null) {
+ tvLimitSpeed.post(() -> {
+ handler.removeMessages(MSG_HIDE_LIMIT_SPEED);
+
+ if (tvLimitSpeed.getVisibility() == View.GONE) {
+ tvLimitSpeed.setVisibility(View.VISIBLE);
+ }
+ tvLimitSpeed.setText(limitSpeed+"");
+ handler.sendEmptyMessageDelayed(MSG_HIDE_LIMIT_SPEED, HIDE_LIMIT_SPEED_DELAY);
+ });
+ }
+ }
+
+ @Override
+ public void onLocationChanged(MogoLocation location) {
+ if (!isVrMode) {
+ return;
+ }
+ currentSpeed = (int) (location.getSpeed() * 3.6F);
+ if(lightCenter) {
+ if (tvSelfSpeed != null) {
+ tvSelfSpeed.post(() -> {
+ if (tvSelfSpeed.getVisibility() == View.GONE) {
+ tvSelfSpeed.setVisibility(View.VISIBLE);
+ }
+ if (limitSpeed != -1 && currentSpeed > limitSpeed) {
+ // 显示红色
+ tvSelfSpeed.setTextColor(context.getResources().getColor(R.color.module_ext_vr_mode_left_traffic_light_red));
+ tvSelfSpeed.setBackgroundResource(R.drawable.module_ext_vr_mode_speed_red_bg);
+ }else{
+ // 显示白
+ tvSelfSpeed.setTextColor(context.getResources().getColor(R.color.module_ext_vr_mode_left_traffic_light_white));
+ tvSelfSpeed.setBackgroundResource(R.drawable.module_ext_vr_mode_speed_white_bg);
+ }
+ tvSelfSpeed.setText("" + currentSpeed);
+ Logger.d(TAG, "onLocationChange: " + currentSpeed);
+ });
+ }
+ }
+ }
+
+ @Override
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_REFRESH_CAR_STRATEGY:
+ // todo 暂时不采用此种渲染方式
+ // 自车速度
+ tvSelfSpeed.setText("" + currentSpeed);
+ // 红绿灯
+ if (tvTrafficLight.getVisibility() == View.GONE) {
+ tvTrafficLight.setVisibility(View.VISIBLE);
+ }
+ // todo 设置字体颜色、背景颜色、leftDrawable
+ switch (lightStatus) {
+ case "Y":
+ // 黄灯
+ break;
+ case "R":
+ // 红灯
+ break;
+ default:
+ // 默认绿灯
+ break;
+ }
+ tvTrafficLight.setText(surplusTime + "S");
+
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().showMyLocation(inflateRoadInfo());
+ if (isVrMode) {
+ handler.sendEmptyMessageDelayed(MSG_REFRESH_CAR_STRATEGY, STRATEGY_DELAY);
+ }
+ return true;
+ case MSG_HIDE_LIMIT_SPEED:
+ limitSpeed = -1;
+ tvLimitSpeed.setVisibility(View.GONE);
+ return true;
+ case MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD:
+ if (!isObuLightData && !handler.hasMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU)) {
+ tvTrafficLight.setVisibility(View.GONE);
+ }
+ return true;
+ case MSG_HIDE_TRAFFIC_LIGHT_BY_OBU:
+ isObuLightData = false;
+ if (!handler.hasMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD)) {
+ tvTrafficLight.setVisibility(View.GONE);
+ }
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * 接收智慧驾驶发给adas的展示信息,代替adas做界面展示
+ *
+ * @author tongchenfei
+ */
+ private class AdasNoticeReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (!isVrMode) {
+ return;
+ }
+ String action = intent.getAction();
+ if("com.mogo.launcher.adas".equals(action)){
+ // 收到限速信息
+ int limit = intent.getIntExtra("adas_speed_limit", -1);
+ if(limit>0) {
+ limitSpeed = limit;
+ drawLimitSpeed();
+ }
+ }else {
+ int type = intent.getIntExtra("type", -1);
+ if (type == 2) {
+ String obuLightAction = intent.getStringExtra("action");
+ if("1".equals(obuLightAction)){
+ // 隐藏红绿灯
+ handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU);
+ handler.sendEmptyMessage(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU);
+ }else {
+ // 红绿灯处理
+ String data = intent.getStringExtra("data");
+ if (data != null && !data.isEmpty()) {
+ try {
+ JSONObject jsonObject = new JSONObject(data);
+ String lightStatus = jsonObject.optString("lightStatus");
+ String surplusTime = jsonObject.optString("surplusTime");
+ if (!lightStatus.isEmpty() && !surplusTime.isEmpty()) {
+ handleObuTrafficLightInfo(lightStatus, surplusTime);
+ } else {
+ Logger.d(TAG, "红绿灯必要信息都为空,不做展示");
+ }
+ } catch (Exception e) {
+ Logger.e(TAG, e, "解析adas数据异常");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private void handleObuTrafficLightInfo(String lightStatus, String surplusTime) {
+ isObuLightData = true;
+ if (tvTrafficLight != null) {
+ handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU);
+ handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD);
+ drawTrafficLight(lightStatus, surplusTime);
+ handler.sendEmptyMessageDelayed(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU,
+ HIDE_TRAFFIC_LIGHT_DELAY);
+ }
+ }
+
+ private void handleCloudTrafficLight(CloudRoadData roadData) {
+ if (isObuLightData) {
+ handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD);
+ return;
+ }
+ if (tvTrafficLight != null && !handler.hasMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_OBU)) {
+ handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD);
+ // todo drawTrafficLight
+ String lightStatus = null;
+ switch (roadData.getLightStatus()) {
+ case 1:
+ // 红灯
+ lightStatus = "R";
+ break;
+ case 2:
+ // 绿灯
+ lightStatus = "G";
+ break;
+ case 3:
+ // 黄灯
+ lightStatus = "Y";
+ break;
+ default:
+ break;
+ }
+ if(lightStatus == null){
+ handler.sendEmptyMessage(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD);
+ }else {
+ int diff = (int) ((System.currentTimeMillis() - roadData.getSystemTime()) / 1000);
+ int leftTime = roadData.getLightLeftTime() - diff;
+ if (leftTime < 0) {
+ leftTime = 0;
+ }
+ Logger.d("CloudTrafficLight",
+ "lightStatus: " + lightStatus + " current: " + System.currentTimeMillis() + " cloudType: " + roadData.getSystemTime() + " diff: " + diff + " cloudLeftTime: " + roadData.getLightLeftTime() + " leftTime: " + leftTime);
+ drawTrafficLight(lightStatus, "" + leftTime);
+ handler.sendEmptyMessageDelayed(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD,
+ HIDE_TRAFFIC_LIGHT_DELAY);
+ }
+ }
+ }
+
+ private void drawTrafficLight(String lightStatus, String surplusTime) {
+ this.lightStatus = lightStatus;
+ this.surplusTime = surplusTime;
+ if(lightCenter) {
+ tvTrafficLight.post(() -> {
+ if (tvTrafficLight.getVisibility() == View.GONE) {
+ tvTrafficLight.setVisibility(View.VISIBLE);
+ }
+ // todo 设置字体颜色、背景颜色、leftDrawable
+ switch (lightStatus) {
+ case "Y":
+ // 黄灯
+ tvTrafficLight.setTextColor(context.getResources().getColor(R.color.module_ext_vr_mode_left_traffic_light_yellow));
+ tvTrafficLight.setBackgroundResource(R.drawable.module_ext_vr_mode_traffic_light_yellow_bg);
+ tvTrafficLight.setCompoundDrawablesWithIntrinsicBounds(R.drawable.module_ext_traffic_light_yellow, 0, 0, 0);
+ break;
+ case "R":
+ // 红灯
+ tvTrafficLight.setTextColor(context.getResources().getColor(R.color.module_ext_vr_mode_left_traffic_light_red));
+ tvTrafficLight.setBackgroundResource(R.drawable.module_ext_vr_mode_traffic_light_red_bg);
+ tvTrafficLight.setCompoundDrawablesWithIntrinsicBounds(R.drawable.module_ext_traffic_light_red, 0, 0, 0);
+ break;
+ default:
+ // 默认绿灯
+ tvTrafficLight.setTextColor(context.getResources().getColor(R.color.module_ext_vr_mode_left_traffic_light_green));
+ tvTrafficLight.setBackgroundResource(R.drawable.module_ext_vr_mode_traffic_light_green_bg);
+ tvTrafficLight.setCompoundDrawablesWithIntrinsicBounds(R.drawable.module_ext_traffic_light_green, 0, 0, 0);
+ break;
+ }
+ tvTrafficLight.setText(surplusTime + "S");
+ Logger.d(TAG, "展示红绿灯信息: " + lightStatus + " time: " + surplusTime);
+ });
+ }
+ }
+
+ @Override
+ public WebSocketMsgType getDownLinkType() {
+ return WebSocketMsgType.MSG_TYPE_DOWNLINK_CAR_DATA;
+ }
+
+ @Override
+ public Class target() {
+ return MogoSnapshotSetData.class;
+ }
+
+ @Override
+ public void onMsgReceived(MogoSnapshotSetData obj) {
+ Logger.d(TAG, "收到大而全数据: " + obj);
+ CloudRoadData roadData = obj.getTrafficLight();
+ if (roadData != null) {
+ Logger.d(TAG, "收到红绿灯数据");
+ handleCloudTrafficLight(roadData);
+ } else {
+ handler.sendEmptyMessage(MSG_HIDE_TRAFFIC_LIGHT_BY_CLOUD);
+ }
+ }
+
+ private View inflateRoadInfo(){
+ View view = View.inflate(context, R.layout.module_ext_item_self_car, null);
+ TextView _speed = view.findViewById(R.id.tvSelfSpeed);
+ _speed.setText("" + currentSpeed);
+ Logger.d(TAG, "showCurrentSpeed: " + currentSpeed);
+ return view;
+ }
+
+}
diff --git a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java
index e555039fe0..d756160652 100644
--- a/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java
+++ b/modules/mogo-module-extensions/src/main/java/com/mogo/module/extensions/utils/EntranceViewHolder.java
@@ -1,18 +1,25 @@
package com.mogo.module.extensions.utils;
import android.graphics.Color;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.extensions.R;
import com.mogo.module.extensions.bean.BottomLayerViewWrapper;
+import com.mogo.service.windowview.IMogoEntranceViewListener;
import com.mogo.utils.logger.Logger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import static com.mogo.service.entrance.IMogoEntranceButtonController.NOTICE_TYPE_SEEK_HELP;
+
/**
* 入口页view管理
* @author tongchenfei
@@ -21,6 +28,7 @@ public class EntranceViewHolder {
private static final String TAG = "EntranceViewHolder";
private List preAddView = new ArrayList<>();
private List leftFeaturePreAddView = new ArrayList<>();
+ private View preAddLeftNoticeView = null;
private EntranceViewHolder(){}
private volatile static EntranceViewHolder instance = null;
public static EntranceViewHolder getInstance(){
@@ -35,11 +43,15 @@ public class EntranceViewHolder {
}
private ViewGroup rootViewGroup = null;
private ViewGroup featureViewGroup = null;
+ private ViewGroup leftNoticeContainer = null;
+
public void initRootViewGroup(View rootView) {
Logger.i(TAG, "initRootViewGroup==");
if(rootView instanceof ViewGroup) {
Logger.d(TAG, "initRootViewGroup 赋值");
rootViewGroup = (ViewGroup) rootView.getParent();
+ leftNoticeContainer =
+ rootView.findViewById(R.id.module_ext_vr_mode_left_notice_container);
featureViewGroup = rootView.findViewById(R.id.module_entrance_id_buttons_container);
if (!preAddView.isEmpty()) {
Logger.d(TAG, "initRootViewGroup 增加底层view: " + preAddView.size());
@@ -56,6 +68,9 @@ public class EntranceViewHolder {
featureViewGroup.addView(view);
}
}
+ if (preAddLeftNoticeView != null) {
+ realShowLeftNoticeView(preAddLeftNoticeView);
+ }
}
}
@@ -156,7 +171,107 @@ public class EntranceViewHolder {
}
- public void release(){
+ public void showLeftNoticeView(View view) {
+ if(MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ if (leftNoticeContainer != null) {
+ realShowLeftNoticeView(view);
+ } else {
+ preAddLeftNoticeView = view;
+ }
+ }
+ }
+
+ public void hideLeftNoticeView(View view) {
+ if(MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ if (preAddLeftNoticeView != null && preAddLeftNoticeView == view) {
+ preAddLeftNoticeView = null;
+ }
+ if (leftNoticeContainer != null) {
+ realHideLeftNoticeView(view);
+ }
+ }
+ }
+
+ public void forceHideNoticeView(){
+ for (IMogoEntranceViewListener listener : listeners) {
+ listener.onViewRemoved(currentShowNoticeType);
+ }
+ preAddLeftNoticeView = null;
+ currentShowNoticeType = 0;
+ if (leftNoticeContainer != null) {
+ leftNoticeContainer.removeAllViews();
+ }
+ }
+
+ private int currentShowNoticeType = 0;
+ public void showLeftNoticeByType(int noticeType, int iconRes, String content){
+ if(MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ if (currentShowNoticeType != noticeType && currentShowNoticeType != 0) {
+ for (IMogoEntranceViewListener listener : listeners) {
+ listener.onViewRemoved(currentShowNoticeType);
+ }
+ }
+ currentShowNoticeType = noticeType;
+ if (leftNoticeContainer != null) {
+ realShowLeftNoticeView(generateNoticeViewByType(noticeType, iconRes, content));
+ } else {
+ preAddLeftNoticeView = generateNoticeViewByType(noticeType, iconRes, content);
+ }
+ }
+
+ }
+
+ public void hideLeftNoticeByType(int noticeType) {
+ if(MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ if (currentShowNoticeType == noticeType) {
+ forceHideNoticeView();
+ }
+ }
+ }
+
+ private View generateNoticeViewByType(int noticeType,int iconRes, String content) {
+ View view =
+ LayoutInflater.from(leftNoticeContainer.getContext()).inflate(R.layout.item_vr_left_notice, leftNoticeContainer, false);
+ ImageView icon = view.findViewById(R.id.module_ext_iv_left_notice_icon);
+ if (noticeType == NOTICE_TYPE_SEEK_HELP) {
+ // 自车求助,是橘色的背景
+ icon.setBackgroundResource(R.drawable.module_ext_left_notice_icon_orange_bg);
+ }else{
+ // 其他是红色背景
+ icon.setBackgroundResource(R.drawable.module_ext_left_notice_icon_red_bg);
+ }
+ icon.setImageResource(iconRes);
+ TextView tvContent = view.findViewById(R.id.module_ext_tv_left_notice_content);
+ tvContent.setText(content);
+ return view;
+ }
+
+ private void realShowLeftNoticeView(View view){
+ leftNoticeContainer.setVisibility(View.VISIBLE);
+ leftNoticeContainer.removeAllViews();
+ leftNoticeContainer.addView(view);
+ preAddLeftNoticeView = null;
+ for (IMogoEntranceViewListener listener : listeners) {
+ listener.onViewAdded(currentShowNoticeType);
+ }
+ }
+
+ private void realHideLeftNoticeView(View view) {
+ leftNoticeContainer.removeView(view);
+ leftNoticeContainer.setVisibility(View.GONE);
+ }
+
+ private List listeners = new ArrayList<>();
+
+ public void addEntranceViewListener(IMogoEntranceViewListener listener) {
+ listeners.add(listener);
+ }
+
+ public void removeEntranceViewListener(IMogoEntranceViewListener listener) {
+ listeners.remove(listener);
+ }
+
+ public void release(){
rootViewGroup = null;
}
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_accident_warn.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_accident_warn.png
new file mode 100644
index 0000000000..f28134a5ff
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_accident_warn.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_illegal_overtake.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_illegal_overtake.png
new file mode 100644
index 0000000000..05d5853b91
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_illegal_overtake.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_people_warn.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_people_warn.png
new file mode 100644
index 0000000000..147e16a28b
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_people_warn.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_self_car.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_self_car.png
new file mode 100644
index 0000000000..01f991d7f7
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_self_car.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_green.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_green.png
new file mode 100644
index 0000000000..7d7ddedd8a
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_green.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_red.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_red.png
new file mode 100644
index 0000000000..694cfd0725
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_red.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_yellow.png b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_yellow.png
new file mode 100644
index 0000000000..8598d800f0
Binary files /dev/null and b/modules/mogo-module-extensions/src/main/res/drawable-xhdpi/module_ext_traffic_light_yellow.png differ
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_content_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_content_bg.xml
new file mode 100644
index 0000000000..2ac3e00cf5
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_content_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_icon_orange_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_icon_orange_bg.xml
new file mode 100644
index 0000000000..bfa3cc96a1
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_icon_orange_bg.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_icon_red_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_icon_red_bg.xml
new file mode 100644
index 0000000000..3d7b109e99
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_left_notice_icon_red_bg.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_green_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_green_bg.xml
new file mode 100644
index 0000000000..d13f3fc8a1
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_green_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_red_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_red_bg.xml
new file mode 100644
index 0000000000..6293d9a7fb
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_red_bg.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_white_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_white_bg.xml
new file mode 100644
index 0000000000..95184c01ec
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_speed_white_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_green_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_green_bg.xml
new file mode 100644
index 0000000000..0f824c43c0
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_green_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_red_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_red_bg.xml
new file mode 100644
index 0000000000..10a256f8cc
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_red_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_yellow_bg.xml b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_yellow_bg.xml
new file mode 100644
index 0000000000..2edd68c52b
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/drawable/module_ext_vr_mode_traffic_light_yellow_bg.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/layout/item_vr_left_notice.xml b/modules/mogo-module-extensions/src/main/res/layout/item_vr_left_notice.xml
new file mode 100644
index 0000000000..7dcdca8dfb
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/layout/item_vr_left_notice.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_item_self_car.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_item_self_car.xml
new file mode 100644
index 0000000000..53c4d45924
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_item_self_car.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_crash_threshold_set.xml b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_crash_threshold_set.xml
new file mode 100644
index 0000000000..1ce622b331
--- /dev/null
+++ b/modules/mogo-module-extensions/src/main/res/layout/module_ext_layout_crash_threshold_set.xml
@@ -0,0 +1,261 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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 bf599d23fb..22197c8d27 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
@@ -151,6 +151,7 @@
android:id="@+id/module_ext_id_destination_online_car"
android:layout_width="wrap_content"
android:layout_height="@dimen/module_ext_button_height"
+ android:layout_marginLeft="@dimen/module_common_shadow_width_pos"
android:layout_marginTop="@dimen/module_ext_camera_button_marginTop"
android:background="@drawable/module_ext_dw_navi_info_panel_bkg"
android:drawableLeft="@drawable/module_ext_destination_online_car_dw"
@@ -221,6 +222,186 @@
android:textStyle="bold" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
index 13e7cae46c..e70fc69b2a 100644
--- a/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values-xhdpi/dimens.xml
@@ -79,7 +79,8 @@
103px
- 1058px
+ 1058px
+ 1038px
210px
144px
159px
diff --git a/modules/mogo-module-extensions/src/main/res/values/colors.xml b/modules/mogo-module-extensions/src/main/res/values/colors.xml
index 615814606a..943bde9777 100644
--- a/modules/mogo-module-extensions/src/main/res/values/colors.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/colors.xml
@@ -3,4 +3,12 @@
#FFFFFF
#BF30334C
#fff
+ #f1f1f1
+
+ #7DE261
+ #FF2B2B
+ #E3BC59
+ #FFF
+
+
\ 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 8e519dfe37..1b4fa35128 100644
--- a/modules/mogo-module-extensions/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-extensions/src/main/res/values/dimens.xml
@@ -87,6 +87,7 @@
56px
+ 1058px
544px
117px
80px
@@ -188,4 +189,24 @@
0px
0px
+ 44px
+ 30px
+ 120px
+ 170px
+
+ 460px
+ 120px
+ 120px
+
+ 40px
+ 32px
+ 40px
+ 50px
+
+ 32px
+ 15px
+ 30px
+ 689px
+ 86px
+
\ No newline at end of file
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/EventDispatchCenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/EventDispatchCenter.java
index fd51a216fa..a8b4db6f96 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/EventDispatchCenter.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/EventDispatchCenter.java
@@ -21,14 +21,10 @@ import com.mogo.map.navi.MogoTraffic;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.main.registercenter.MogoRegisterCenterHandler;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
-import com.mogo.service.obu.IMogoObuDataChangedListener;
import com.mogo.utils.logger.Logger;
import com.zhidao.adasconfig.common.config.EnumCarChatIncognitoMode;
import com.zhidao.adasconfig.listener.IAdasSettingUIListener;
import com.zhidao.adasconfig.listener.IAdasSkinStyleListener;
-import com.zhidao.smartv2x.model.obu.CarEventInfo;
-import com.zhidao.smartv2x.model.obu.CarLocationInfo;
-import com.zhidao.smartv2x.model.obu.TrafficLightInfo;
import java.util.Iterator;
@@ -46,7 +42,6 @@ public class EventDispatchCenter implements
IMogoMapListener,
IMogoNaviListener2,
IMogoLocationListener,
- IMogoObuDataChangedListener,
IAdasSettingUIListener,
IAdasSkinStyleListener {
@@ -162,8 +157,14 @@ public class EventDispatchCenter implements
this.mMapLoadedCallback = callback;
}
+ private boolean mIsMapLoaded = false;
+
@Override
public void onMapLoaded() {
+ if ( mIsMapLoaded ) {
+ return;
+ }
+ mIsMapLoaded = true;
if ( mMapLoadedCallback != null ) {
mMapLoadedCallback.run();
mMapLoadedCallback = null;
@@ -484,50 +485,6 @@ public class EventDispatchCenter implements
}
}
- @Override
- public void showCarLocationInfo( CarLocationInfo info ) {
- Iterator< IMogoObuDataChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getObuDataChangedListeners();
- if ( iterator == null ) {
- return;
- }
- while ( iterator.hasNext() ) {
- iterator.next().showCarLocationInfo( info );
- }
- }
-
- @Override
- public void showOtherInfo( String info ) {
- Iterator< IMogoObuDataChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getObuDataChangedListeners();
- if ( iterator == null ) {
- return;
- }
- while ( iterator.hasNext() ) {
- iterator.next().showOtherInfo( info );
- }
- }
-
- @Override
- public void showTrafficLightInfo( TrafficLightInfo info ) {
- Iterator< IMogoObuDataChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getObuDataChangedListeners();
- if ( iterator == null ) {
- return;
- }
- while ( iterator.hasNext() ) {
- iterator.next().showTrafficLightInfo( info );
- }
- }
-
- @Override
- public void showCarEventInfo( CarEventInfo info ) {
- Iterator< IMogoObuDataChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getObuDataChangedListeners();
- if ( iterator == null ) {
- return;
- }
- while ( iterator.hasNext() ) {
- iterator.next().showCarEventInfo( info );
- }
- }
-
@Override
public void northModel() {
Iterator< IMogoADASControlStatusChangedListener > iterator = MogoRegisterCenterHandler.getInstance().getAdasControlStatusChangedListeners();
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 86457f96fc..664c95a6ef 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
@@ -7,6 +7,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
+import com.alibaba.android.arouter.launcher.ARouter;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.view.LayoutInflaterCompat;
@@ -41,6 +42,9 @@ import com.zhidao.autopilot.support.api.AutopilotServiceManage;
import java.util.List;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
/**
* @author congtaowang
* @since 2019-12-23
@@ -134,7 +138,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
@Override
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
- ContextHolderUtil.holdContext( this );
+ ContextHolderUtil.holdContext(this);
mPresenter.postLoadModuleMsg();
}
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java
index ec029d7bac..447b3005cc 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenter.java
@@ -13,7 +13,6 @@ import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoRegisterCenter;
-import com.mogo.service.obu.IMogoObuDataChangedListener;
import java.util.Iterator;
@@ -101,16 +100,6 @@ public class MogoRegisterCenter implements IMogoRegisterCenter {
MogoRegisterCenterHandler.getInstance().unregisterCarLocationChangedListener( tag, listener );
}
- @Override
- public void registerObuDataListener( String tag, IMogoObuDataChangedListener listener ) {
- MogoRegisterCenterHandler.getInstance().registerObuDataListener( tag, listener );
- }
-
- @Override
- public void unregisterObuDataListener( String tag ) {
- MogoRegisterCenterHandler.getInstance().unregisterObuDataListener( tag );
- }
-
@Override
public void registerADASControlStatusChangedListener( String tag, IMogoADASControlStatusChangedListener listener ) {
MogoRegisterCenterHandler.getInstance().registerADASControlStatusChangedListener( tag, listener );
diff --git a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java
index 79b4971e9a..56c9e0eb01 100644
--- a/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java
+++ b/modules/mogo-module-main/src/main/java/com/mogo/module/main/registercenter/MogoRegisterCenterHandler.java
@@ -11,7 +11,6 @@ import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
import com.mogo.service.module.IMogoModuleLifecycle;
import com.mogo.service.module.IMogoRegisterCenter;
-import com.mogo.service.obu.IMogoObuDataChangedListener;
import java.util.HashMap;
import java.util.Iterator;
@@ -35,7 +34,6 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
private Map< String, IMogoMarkerClickListener > mMarker = new HashMap<>();
private Map< String, IMogoAimlessModeListener > mAimless = new HashMap<>();
private Map< String, IMogoCarLocationChangedListener > mCarLocations = new HashMap<>();
- private Map< String, IMogoObuDataChangedListener > mObus = new HashMap<>();
private Map< String, IMogoADASControlStatusChangedListener > mADAS = new HashMap<>();
private MogoRegisterCenterHandler() {
@@ -127,16 +125,6 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
mCarLocations.remove( tag );
}
- @Override
- public void registerObuDataListener( String tag, IMogoObuDataChangedListener listener ) {
- mObus.put( tag, listener );
- }
-
- @Override
- public void unregisterObuDataListener( String tag ) {
- mObus.remove( tag );
- }
-
@Override
public void registerADASControlStatusChangedListener( String tag, IMogoADASControlStatusChangedListener listener ) {
mADAS.put( tag, listener );
@@ -183,10 +171,6 @@ public class MogoRegisterCenterHandler implements IMogoRegisterCenter {
return mNavi.values().iterator();
}
- public Iterator< IMogoObuDataChangedListener > getObuDataChangedListeners() {
- return mObus.values().iterator();
- }
-
@Override
public Iterator< IMogoLocationListener > getLocationListeners() {
return mLocation.values().iterator();
diff --git a/modules/mogo-module-main/src/main/res/values/dimens.xml b/modules/mogo-module-main/src/main/res/values/dimens.xml
index 7662141351..545cbff34a 100644
--- a/modules/mogo-module-main/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-main/src/main/res/values/dimens.xml
@@ -26,7 +26,6 @@
16px
658px
8px
- 8px
2px
1920px
0px
@@ -35,4 +34,6 @@
2px
2px
4px
+ 8px
+
\ No newline at end of file
diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java
index 9d0bf3daae..262c4b5fbb 100644
--- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java
+++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapControlCommandHandler.java
@@ -4,6 +4,7 @@ import android.content.Intent;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.map.uicontroller.EnumMapUI;
+import com.mogo.module.common.MogoApisHandler;
import com.mogo.utils.logger.Logger;
public
@@ -92,6 +93,12 @@ class MapControlCommandHandler {
break;
case VoiceConstants.CMD_MAP_SPEAK_REMAIN:
break;
+ case VoiceConstants.CMD_MAP_OPEN_VR_UN_WAKEUP:
+ MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeToVRMode();
+ break;
+ case VoiceConstants.CMD_MAP_CLOSE_VR_UN_WAKEUP:
+ MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeTo2dMode();
+ break;
default:
break;
diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java
index fd18931447..6c18a1574b 100644
--- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java
+++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFragment.java
@@ -1,5 +1,6 @@
package com.mogo.module.map;
+import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
@@ -14,7 +15,10 @@ import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.map.MyLocationUtil;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.service.MogoServicePaths;
+import com.mogo.service.map.IMogoMapFrameController;
import com.mogo.service.statusmanager.IMogoStatusChangedListener;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.service.statusmanager.StatusDescriptor;
@@ -27,7 +31,7 @@ import com.mogo.utils.storage.SharedPrefsMgr;
*
* 地图图层,地图操作都在这个图层完成
*/
-public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MapView {
+public class MapFragment extends MvpFragment< MapView, MapPresenter > implements MapView, IMogoMapFrameController {
private static final String TAG = "MapFragment";
@@ -36,6 +40,8 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
private boolean mIsControllerByOthersStatus = false;
+ private boolean mIsFirstLoadCustomMap = true;
+
@Override
protected int getLayoutId() {
return R.layout.module_map_fragment_map;
@@ -43,6 +49,60 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
@Override
protected void initViews() {
+ MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().initDelegate( this );
+ }
+
+ @Override
+ public void initDelegate( IMogoMapFrameController controller ) {
+ // do not implement
+ }
+
+ @Override
+ public void changeTo2dMode() {
+ if ( !isVrMode() ) {
+ return;
+ }
+ mMogoMapView.display2DMap( false, true );
+ afterMapModeChanged();
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().showADAS();
+ MogoApisHandler.getInstance().getApis().getStatusManagerApi().setVrMode( TAG, false );
+ }
+
+ @Override
+ public void changeToVRMode() {
+ if ( isVrMode() ) {
+ return;
+ }
+ mMogoMapView.displayVRMap( mIsFirstLoadCustomMap, true );
+ if ( mIsFirstLoadCustomMap ) {
+// initMapView();
+// mMogoMap = mMogoMapView.getMap();
+// if ( mMogoMap.getUIController() != null ) {
+// mMogoMap.getUIController().showMyLocation( true );
+// mMogoMap.getUIController().recoverLockMode();// 启动锁车
+// }
+// mIsFirstLoadCustomMap = false;
+ }
+ afterMapModeChanged();
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().closeADAS();
+ MogoApisHandler.getInstance().getApis().getStatusManagerApi().setVrMode( TAG, true );
+ }
+
+ private void afterMapModeChanged() {
+ MapCenterPointStrategy.resetByChangeMode();
+ final EnumMapUI mapUI = MogoApisHandler.getInstance().getApis().getAdasControllerApi().getCurrentSkinMode();
+ MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().changeMapMode( mapUI );
+ MogoApisHandler.getInstance().getApis().getRefreshStrategyControllerApi().restartAutoRefreshAtTime( 0 );
+ }
+
+ @Override
+ public boolean isVrMode() {
+ return mMogoMapView.isVrMode();
+ }
+
+ @Override
+ public void init( Context context ) {
+ // do not implement
}
@Override
@@ -111,32 +171,34 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
}
private void initMapView() {
- if ( mMogoMap != null ) {
- IMogoUiSettings uiSettings = mMogoMap.getUiSettings();
- if ( uiSettings != null ) {
- //设置所有手势是否可用
- uiSettings.setAllGesturesEnabled( true );
- //设置指南针是否可见。
- uiSettings.setCompassEnabled( false );
- //设置室内地图楼层切换控件是否可见。
- uiSettings.setIndoorSwitchEnabled( true );
- //设置定位按钮是否可见。
- uiSettings.setMyLocationButtonEnabled( false );
- //设置旋转手势是否可用。
- uiSettings.setRotateGesturesEnabled( false );
- //设置比例尺控件是否可见
- uiSettings.setScaleControlsEnabled( true );
- //设置拖拽手势是否可用。
- uiSettings.setScrollGesturesEnabled( true );
- //设置倾斜手势是否可用。
- uiSettings.setTiltGesturesEnabled( true );
- //设置缩放按钮是否可见。
- uiSettings.setZoomControlsEnabled( false );
- //设置双指缩放手势是否可用。
- uiSettings.setZoomGesturesEnabled( true );
- if ( mMogoMap.getUIController() != null ) {
- mMogoMap.getUIController().changeMapMode( EnumMapUI.CarUp_2D );
- }
+ mMogoMap = mMogoMapView.getMap();
+ if ( mMogoMap == null ) {
+ return;
+ }
+ IMogoUiSettings uiSettings = mMogoMap.getUiSettings();
+ if ( uiSettings != null ) {
+ //设置所有手势是否可用
+ uiSettings.setAllGesturesEnabled( true );
+ //设置指南针是否可见。
+ uiSettings.setCompassEnabled( false );
+ //设置室内地图楼层切换控件是否可见。
+ uiSettings.setIndoorSwitchEnabled( true );
+ //设置定位按钮是否可见。
+ uiSettings.setMyLocationButtonEnabled( false );
+ //设置旋转手势是否可用。
+ uiSettings.setRotateGesturesEnabled( false );
+ //设置比例尺控件是否可见
+ uiSettings.setScaleControlsEnabled( true );
+ //设置拖拽手势是否可用。
+ uiSettings.setScrollGesturesEnabled( true );
+ //设置倾斜手势是否可用。
+ uiSettings.setTiltGesturesEnabled( true );
+ //设置缩放按钮是否可见。
+ uiSettings.setZoomControlsEnabled( false );
+ //设置双指缩放手势是否可用。
+ uiSettings.setZoomGesturesEnabled( true );
+ if ( mMogoMap.getUIController() != null ) {
+ mMogoMap.getUIController().changeMapMode( EnumMapUI.CarUp_2D );
}
@@ -150,6 +212,11 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
return mMogoMap.getUIController();
}
+ @Override
+ public void destroy() {
+ MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().destroy();
+ }
+
@Override
public void onDestroyView() {
super.onDestroyView();
@@ -157,5 +224,6 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
mMogoMapView.onDestroy();
}
MapBroadCastHelper.getInstance( getContext() ).release();
+ destroy();
}
}
diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java
new file mode 100644
index 0000000000..beceedd146
--- /dev/null
+++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/MapFrameController.java
@@ -0,0 +1,59 @@
+package com.mogo.module.map;
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.google.gson.internal.$Gson$Preconditions;
+import com.mogo.service.MogoServicePaths;
+import com.mogo.service.map.IMogoMapFrameController;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/23
+ *
+ * 描述
+ */
+
+@Route( path = MogoServicePaths.PATH_MAP_FRAME_CONTROLLER )
+class MapFrameController implements IMogoMapFrameController {
+
+ private IMogoMapFrameController mController;
+
+ @Override
+ public void initDelegate( IMogoMapFrameController controller ) {
+ mController = controller;
+ }
+
+ @Override
+ public void changeTo2dMode() {
+ if ( mController != null ) {
+ mController.changeTo2dMode();
+ }
+ }
+
+ @Override
+ public void changeToVRMode() {
+ if ( mController != null ) {
+ mController.changeToVRMode();
+ }
+ }
+
+ @Override
+ public void init( Context context ) {
+
+ }
+
+ @Override
+ public boolean isVrMode() {
+ if ( mController != null ) {
+ return mController.isVrMode();
+ }
+ return false;
+ }
+
+ @Override
+ public void destroy() {
+ mController = null;
+ }
+}
diff --git a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java
index 1cf7743744..3009a94f71 100644
--- a/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java
+++ b/modules/mogo-module-map/src/main/java/com/mogo/module/map/VoiceConstants.java
@@ -57,6 +57,20 @@ public class VoiceConstants {
public static final String CMD_MAP_2D_UN_WAKEUP = "CMD_MAP_2D_UN_WAKEUP";
public static final String[] CMD_MAP_2D_TRIGGER_WORDS = {"二地模式"};
+ /**
+ * 打开vr
+ */
+ public static final String CMD_MAP_OPEN_VR = "com.ileja.navi.mode.vr.open";
+ public static final String CMD_MAP_OPEN_VR_UN_WAKEUP = "CMD_MAP_OPEN_VR_UN_WAKEUP";
+ public static final String[] CMD_MAP_OPEN_VR_TRIGGER_WORDS = {"打开VR模式", "VR模式", "切换到VR模式"};
+
+ /**
+ * 关闭vr
+ */
+ public static final String CMD_MAP_CLOSE_VR = "com.ileja.navi.mode.vr.close";
+ public static final String CMD_MAP_CLOSE_VR_UN_WAKEUP = "CMD_MAP_CLOSE_VR_UN_WAKEUP";
+ public static final String[] CMD_MAP_CLOSE_VR_TRIGGER_WORDS = {"关闭VR模式", "切换到地图模式"};
+
/**
* 3D模式
*/
@@ -191,6 +205,8 @@ public class VoiceConstants {
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_DAY_TIME_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_DAY_TIME_MODE_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_NIGHT_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_NIGHT_MODE_TRIGGER_WORDS );
sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_UN_WAKEUP, VoiceConstants.CMD_MAP_AUTO_LIGHT_NIGHT_MODE_TRIGGER_WORDS );
+ sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_OPEN_VR_UN_WAKEUP, VoiceConstants.CMD_MAP_OPEN_VR_TRIGGER_WORDS );
+ sUnRegisterVoiceCmds.put( VoiceConstants.CMD_MAP_CLOSE_VR_UN_WAKEUP, VoiceConstants.CMD_MAP_CLOSE_VR_TRIGGER_WORDS );
// 唤醒
sCmds.add( VoiceConstants.CMD_MAP_ZOOM_IN );
diff --git a/modules/mogo-module-obu/build.gradle b/modules/mogo-module-obu/build.gradle
index 45c37a3971..a1be0b0c2e 100644
--- a/modules/mogo-module-obu/build.gradle
+++ b/modules/mogo-module-obu/build.gradle
@@ -34,15 +34,14 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation rootProject.ext.dependencies.kotlinstdlibjdk7
- implementation rootProject.ext.dependencies.androidxappcompat
- implementation rootProject.ext.dependencies.androidxrecyclerview
implementation rootProject.ext.dependencies.androidxccorektx
- implementation rootProject.ext.dependencies.androidxconstraintlayout
implementation rootProject.ext.dependencies.arouter
kapt rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.rxjava
implementation rootProject.ext.dependencies.rxandroid
+ implementation rootProject.ext.dependencies.obusdk
+ implementation 'com.mogo.module:module-crash-warning:1.1.0'
if (Boolean.valueOf(RELEASE)) {
implementation rootProject.ext.dependencies.modulecommon
} else {
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt
index 92158e2f0f..68e61eb3c7 100644
--- a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/MockUtil.kt
@@ -1,56 +1,271 @@
package com.zhidao.mogo.module.obu
-import com.mogo.service.obu.IMogoObuDataChangedListener
+import android.content.Context
+import android.content.Intent
+import android.os.Handler
+import android.os.Message
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.Button
+import com.alibaba.android.arouter.launcher.ARouter
+import com.mogo.service.IMogoServiceApis
+import com.mogo.service.MogoServicePaths
import com.mogo.utils.logger.Logger
-import com.zhidao.smartv2x.listener.OnMessageReceiveListener
-import com.zhidao.smartv2x.model.obu.CarEventInfo
-import com.zhidao.smartv2x.model.obu.CarLocationInfo
-import com.zhidao.smartv2x.model.obu.TrafficLightInfo
+import com.zhidao.mogo.module.obu.obu.BaseObu
+import com.zhidao.mogo.module.obu.obu.IObuCallback
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuTrafficLightInfo
import io.reactivex.Observable
-import io.reactivex.Scheduler
-import io.reactivex.Single
import io.reactivex.disposables.Disposable
-import io.reactivex.internal.operators.single.SingleSubscribeOn
-import io.reactivex.schedulers.Schedulers
+import io.reactivex.schedulers.Schedulers.io
import java.util.concurrent.TimeUnit
+import kotlin.random.Random
/**
* 模拟相关操作及数据的单例类
*
* @author tongchenfei
*/
-object MockUtil {
- const val TAG = "MockUtil"
- private lateinit var dataCallback : OnMessageReceiveListener
-
- private lateinit var intervalObs:Disposable
-
- fun init(callback: OnMessageReceiveListener){
- Logger.d(TAG, "使用模拟obu数据===")
- dataCallback = callback
- intervalMockData()
+class MockUtil:Handler.Callback {
+ companion object {
+ const val TAG = "MockUtil"
}
- private fun intervalMockData(){
- intervalObs = Observable.interval(1000,TimeUnit.MILLISECONDS).map {
+ private var dataCallback: IObuCallback? = null
+
+ private lateinit var intervalObs: Disposable
+ private lateinit var intervalObs2: Disposable
+
+ private lateinit var context: Context
+ private lateinit var view:View
+
+ private val handler = Handler(this)
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 1001) {
+ Logger.d(TAG,"准备添加调试view")
+ val api = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context) as IMogoServiceApis
+ api.windowManagerApi.addView(view, 1000, 600, false)
+ }
+ return false
+ }
+
+ private var cLightStatus: String = "G"
+ private var cSurplusTime: String = "10"
+
+ fun init(context: Context,obu:BaseObu){
+ Logger.d(TAG, "使用模拟obu数据===")
+ this.context = context
+ dataCallback = obu.callback
+ view = LayoutInflater.from(context).inflate(R.layout.mock_obu, null)
+// view.findViewById(R.id.btnVip).setOnClickListener {
+// val carEventInfo = MogoObuEventInfo()
+// carEventInfo.type = "vip变灯提醒"
+// carEventInfo.typeCode = "vip变灯提醒"
+// val r = Random.nextInt(0, 2)
+// carEventInfo.describe = when (r) {
+// 0 -> "已更改前方红绿灯状态,可优先通行"
+// else -> "已增加前方绿灯时间,可优先通行"
+// }
+// dataCallback?.onEventInfoCallback(carEventInfo)
+// }
+
+// view.findViewById(R.id.btnPersonCrash).setOnClickListener {
+// obu.onMessageReceived("{\"pedestrain_information\": {\"pedestrian_crash_alarm\": 1}}".toByteArray())
+// }
+//
+// view.findViewById(R.id.btnCrossCrash).setOnClickListener {
+// obu.onMessageReceived("{\"intersection_crash\":{\"intersection_crash_alarm\":1}}".toByteArray())
+// }
+//
+// view.findViewById(R.id.btnOptimizeSpeed).setOnClickListener {
+// obu.onMessageReceived("{\"rush_redlight\": {\"glosa_info\": [{\"rush_redlight_alarm\": 1,\"advisory_speed\":40.0}]}}".toByteArray())
+// }
+//
+// view.findViewById(R.id.btnRushRedLight).setOnClickListener {
+// obu.onMessageReceived("{\"rush_redlight\": {\"glosa_info\": [{\"rush_redlight_alarm\": 0}]}}".toByteArray())
+// }
+
+// view.findViewById(R.id.btnStartTrafficLight).setOnClickListener {
+// intervalMockData()
+// }
+//
+// view.findViewById(R.id.btnStopTrafficLight).setOnClickListener {
+// if (intervalObs != null&&!intervalObs.isDisposed) {
+// intervalObs.dispose()
+// }
+// }
+
+ view.findViewById(R.id.btnGreen).setOnClickListener {
+ Logger.d(TAG,"准备发送绿灯信号")
+ cLightStatus = "G"
+ sendTrafficEvent()
+ }
+ view.findViewById(R.id.btnRed).setOnClickListener {
+ Logger.d(TAG,"准备发送红灯信号")
+ cLightStatus = "R"
+ sendTrafficEvent()
+ }
+ view.findViewById(R.id.btnYello).setOnClickListener {
+ Logger.d(TAG,"准备发送黄灯信号")
+ cLightStatus = "Y"
+ sendTrafficEvent()
+ }
+ view.findViewById(R.id.btnChangeTime).setOnClickListener {
+ val random = Random.nextInt(100)
+ Logger.d(TAG,"准备修改时间信息: $random")
+ cSurplusTime = random.toString()
+ sendTrafficEvent()
+ }
+
+ view.findViewById(R.id.btnShowLimitSpeed).setOnClickListener{
+ val random = Random.nextInt(200)
+ // 发送当前限速到 adas
+ val intent = Intent("com.mogo.launcher.adas")
+ intent.putExtra("adas_speed_limit", random)
+ context.sendBroadcast(intent)
+ }
+ handler.sendEmptyMessageDelayed(1001, 10000)
+
+ }
+
+// fun init(context: Context, obuType: Int, callback: OnMessageReceiveListener? = null) {
+// Logger.d(TAG, "使用模拟obu数据===")
+// dataCallback = callback
+// val api = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS).navigation(context) as IMogoServiceApis
+// val view = LayoutInflater.from(context).inflate(R.layout.mock_obu, null)
+// view.findViewById(R.id.btnVip).setOnClickListener {
+// val carEventInfo = CarEventInfo()
+// carEventInfo.type = "vip变灯提醒"
+// carEventInfo.typeCode = "vip变灯提醒"
+// val r = Random.nextInt(0, 2)
+// carEventInfo.describe = when (r) {
+// 0 -> "已更改前方红绿灯状态,可优先通行"
+// else -> "已增加前方绿灯时间,可优先通行"
+// }
+// dataCallback?.showCarEventInfo(carEventInfo)
+// }
+//
+// view.findViewById(R.id.btnPersonCrash).setOnClickListener {
+// val carEventInfo = CarEventInfo()
+// carEventInfo.type = "行人碰撞预警"
+// carEventInfo.typeCode = "39"
+// carEventInfo.describe = "这个应该是随便写,反正也不用"
+// dataCallback?.showCarEventInfo(carEventInfo)
+// }
+// api.windowManagerApi.addView(view, 500, 300, false)
+// intervalMockData()
+// }
+
+ private fun intervalMockData() {
+ intervalObs = Observable.interval(5000, TimeUnit.MILLISECONDS).map {
it.toString()
- }.subscribe {
- val carLocationInfo = CarLocationInfo()
- carLocationInfo.carId = "carLocation$it"
- dataCallback.showCarLocationInfo(carLocationInfo)
- val other = "other$it"
- dataCallback.showOtherInfo(other)
- val eventInfo = CarEventInfo()
- eventInfo.describe = "event des $it"
- eventInfo.type = "event type $it"
- dataCallback.showCarEventInfo(eventInfo)
- val traffic = TrafficLightInfo()
- traffic.id = "traffic $it"
- dataCallback.showTrafficLightInfo(traffic)
+ }.subscribeOn(io()).observeOn(io()).subscribe {
+ debugTrafficLight()
+ }
+// intervalObs2 = Observable.interval(5000,TimeUnit.MILLISECONDS).map {
+// it.toString()
+// }.subscribeOn(io()).observeOn(AndroidSchedulers.mainThread()).subscribe {
+// debugCarEvent()
+// }
+ }
+
+ fun destroy() {
+ intervalObs.dispose()
+ intervalObs2.dispose()
+ }
+
+ private fun sendTrafficEvent() {
+ val trafficLightInfo = MogoObuTrafficLightInfo()
+ trafficLightInfo.id = "12"
+ trafficLightInfo.lightStatus = cLightStatus
+ trafficLightInfo.surplusTime = cSurplusTime
+ dataCallback?.onTrafficLightInfoCallback(trafficLightInfo)
+ Logger.d(TAG, "发送红绿灯数据: $trafficLightInfo")
+
+ }
+
+ private fun debugCarEvent() {
+ val random = Random.nextInt(0, 4)
+ Logger.d(TAG, "random====$random")
+ val carEventInfo = MogoObuEventInfo()
+ when (random) {
+ 0 -> {
+ // 绿波引导
+ carEventInfo.type = "绿波车速引导"
+ carEventInfo.typeCode = "13"
+ val r = Random.nextInt(0, 3)
+ carEventInfo.describe = when (r) {
+ 0 -> "保持当前车速行驶!"
+ 1 -> "建议50km/h车速行驶"
+ else -> "建议30km/h ~ 50km/h 车速行驶"
+ }
+ dataCallback?.onEventInfoCallback(carEventInfo)
+ }
+ 1 -> {
+ // 前方急刹预警
+ carEventInfo.type = "紧急制动预警"
+ carEventInfo.typeCode = "06"
+ carEventInfo.describe = "这个应该是随便写,反正也不用"
+ dataCallback?.onEventInfoCallback(carEventInfo)
+ }
+ 2 -> {
+ // 行人碰撞预警
+ carEventInfo.type = "行人碰撞预警"
+ carEventInfo.typeCode = "39"
+ carEventInfo.describe = "这个应该是随便写,反正也不用"
+ dataCallback?.onEventInfoCallback(carEventInfo)
+ }
+ 3 -> {
+ // vip变灯提醒
+ carEventInfo.type = "vip变灯提醒"
+ carEventInfo.typeCode = "vip变灯提醒"
+ val r = Random.nextInt(0, 2)
+ carEventInfo.describe = when (r) {
+ 0 -> "已更改前方红绿灯状态,可优先通行"
+ else -> "已增加前方绿灯时间,可优先通行"
+ }
+ dataCallback?.onEventInfoCallback(carEventInfo)
+ }
+ else -> {
+ // 其他,不处理
+ }
}
}
- fun destroy(){
- intervalObs.dispose()
+ private fun debugTrafficLight() {
+ Logger.d(TAG, "准备开始红绿灯模拟数据发送===")
+ Thread.sleep(20_000)
+ Logger.d(TAG, "开始红绿灯模拟数据发送===")
+ val trafficLightInfo = MogoObuTrafficLightInfo()
+ trafficLightInfo.id = "12"
+ // 先来6秒红灯
+ trafficLightInfo.lightStatus = "R"
+ for (i in 0..5) {
+ trafficLightInfo.surplusTime = (5 - i).toString()
+ dataCallback?.onTrafficLightInfoCallback(trafficLightInfo)
+ Thread.sleep(1000)
+ }
+ // 停5秒
+ Thread.sleep(4000)
+ // 再来5秒黄灯
+ trafficLightInfo.lightStatus = "Y"
+ for (i in 0..5) {
+ trafficLightInfo.surplusTime = (5 - i).toString()
+ dataCallback?.onTrafficLightInfoCallback(trafficLightInfo)
+ Thread.sleep(1000)
+ }
+ // 停5秒
+ Thread.sleep(4000)
+ // 再来5秒绿灯
+ trafficLightInfo.lightStatus = "G"
+ for (i in 0..5) {
+ trafficLightInfo.surplusTime = (5 - i).toString()
+ dataCallback?.onTrafficLightInfoCallback(trafficLightInfo)
+ Thread.sleep(1000)
+ }
+ Logger.d(TAG, "红绿灯模拟数据发送结束====")
}
+
+
}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuConstant.java b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuConstant.java
index 70c82e564f..d6b9513901 100644
--- a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuConstant.java
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuConstant.java
@@ -30,4 +30,14 @@ public class ObuConstant {
* 行人碰撞预警
*/
public static final int TYPE_ROAD_USER_COLLISION_WARNING = 115;
+
+ /**
+ * 为vip车辆变灯提醒
+ */
+ public static final int TYPE_CHANGE_LIGHT_FOR_VIP = 116;
+
+ /**
+ * 闯红灯预警
+ */
+ public static final int TYPE_RUSH_RED_LIGHT = 117;
}
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuManager.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuManager.kt
index 00b18e6948..b07105f7d9 100644
--- a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuManager.kt
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/ObuManager.kt
@@ -1,128 +1,45 @@
package com.zhidao.mogo.module.obu
import android.content.Context
-import android.os.Bundle
-import android.os.Handler
-import android.os.Looper
-import android.view.View
-import androidx.fragment.app.Fragment
-import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.commons.debug.DebugConfig
-import com.mogo.map.listener.IMogoMapListener
-import com.mogo.map.location.IMogoLocationListener
-import com.mogo.map.marker.IMogoMarkerClickListener
-import com.mogo.map.navi.IMogoNaviListener
-import com.mogo.service.MogoServicePaths
-import com.mogo.service.module.IMogoModuleLifecycle
-import com.mogo.service.obu.IMogoObuDataChangedListener
-import com.mogo.service.obu.IMogoObuManager
import com.mogo.utils.logger.Logger
-import com.zhidao.smartv2x.api.V2xController
-import com.zhidao.smartv2x.model.obu.CarEventInfo
-import com.zhidao.smartv2x.model.obu.CarLocationInfo
-import com.zhidao.smartv2x.model.obu.TrafficLightInfo
+import com.zhidao.mogo.module.obu.obu.*
+import com.zhidao.mogo.module.obu.socket.IUdpSocketCallback
/**
* obu provider
*
* @author tongchenfei
*/
-@Route(path = MogoServicePaths.PATH_OBU)
-class ObuManager: IMogoObuManager {
- companion object{
+class ObuManager {
+ companion object {
const val TAG = "ObuManger"
}
- private var dataChangedListener: IMogoObuDataChangedListener? = null
- private var handler = Handler(Looper.getMainLooper())
+// private var handler = Handler(Looper.getMainLooper(), this)
- override fun getNaviListener(): IMogoNaviListener? {
- return null
- }
-
- override fun getLocationListener(): IMogoLocationListener? {
- return null
- }
-
- override fun getType(): Int {
- return 0
- }
-
- override fun getMarkerClickListener(): IMogoMarkerClickListener? {
- return null
- }
-
- override fun init(context: Context) {
- Logger.d(TAG,"init=======")
- if (DebugConfig.isUseMockObuData()) {
- MockUtil.init(this)
+ private lateinit var obu: IObu
+ private lateinit var context: Context
+ fun init(context: Context) {
+ Logger.d(TAG, "init=======")
+ this.context = context
+ obu = if (DebugConfig.getObuType() == DebugConfig.OBU_TYPE_CIDI) {
+ CidiObu()
} else {
- // 初始化sdk,注册数据回调等信息
- V2xController.getInstance().setMessageReceiveListener(this@ObuManager)
+ HualiObu()
+ }
+ obu.init()
+ }
+
+ fun registerObuDataChangedListener(listener: IObuCallback?) {
+ if (listener != null) {
+ obu.registerObuCallback(listener)
+ if(DebugConfig.isUseMockObuData() ) {
+ val mockUtil = MockUtil()
+ mockUtil.init(context, obu as BaseObu)
+ }
}
}
- override fun getMapListener(): IMogoMapListener? {
- return null
- }
- override fun getAppPackage(): String {
- return ""
- }
-
- override fun createView(context: Context?): View? {
- return null
- }
-
- override fun createFragment(context: Context?, data: Bundle?): Fragment? {
- return null
- }
-
- override fun getModuleName(): String {
- return "moduleObu"
- }
-
- override fun getAppName(): String {
- return ""
- }
-
- override fun getCardLifecycle(): IMogoModuleLifecycle? {
- return null
- }
-
- override fun registerObuDataChangedListener(listener: IMogoObuDataChangedListener?) {
- this.dataChangedListener = listener
- }
-
- /**
- * 车辆位置信息回调接口
- */
- override fun showCarLocationInfo(info: CarLocationInfo?) {
- Logger.d(TAG, "thread: ${Thread.currentThread()} showCarLocationInfo: ${info?.carId}")
- dataChangedListener?.showCarLocationInfo(info)
- }
-
- /**
- * UDP 收发消息回调接口
- */
- override fun showOtherInfo(info: String?) {
- Logger.d(TAG, "thread: ${Thread.currentThread()} showOtherInfo: $info")
- dataChangedListener?.showOtherInfo(info)
- }
-
- /**
- * 交通信号灯信息回调接口
- */
- override fun showTrafficLightInfo(info: TrafficLightInfo?) {
- Logger.d(TAG, "thread: ${Thread.currentThread()} showTrafficLightInfo: ${info?.id}")
- dataChangedListener?.showTrafficLightInfo(info)
- }
-
- /**
- * 场景触发事件信息回调接口
- */
- override fun showCarEventInfo(info: CarEventInfo?) {
- Logger.d(TAG, "thread: ${Thread.currentThread()} showCarEventInfo: ${info?.type}")
- dataChangedListener?.showCarEventInfo(info)
- }
}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/crashwarn/CrashWarningProvider.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/crashwarn/CrashWarningProvider.kt
new file mode 100644
index 0000000000..1e8e831acb
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/crashwarn/CrashWarningProvider.kt
@@ -0,0 +1,96 @@
+package com.zhidao.mogo.module.obu.crashwarn
+
+import android.content.Context
+import android.content.Intent
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.mogo.service.MogoServicePaths
+import com.mogo.service.obu.IMogoCrashWarnProvider
+import com.mogo.utils.logger.Logger
+import com.zhidao.manager.constent.Common
+import com.zhidao.manager.power.ZDPowerManager
+import com.zhidao.manager.ts.TsSensorChannel
+import com.zhidao.manager.ts.TsThreshold
+
+/**
+ * 碰撞报警provider
+ *
+ * @author tongchenfei
+ */
+@Route(path = MogoServicePaths.PATH_CRASH_WARNING)
+class CrashWarningProvider:IMogoCrashWarnProvider {
+ companion object{
+ const val TAG = "CrashWarningProvider"
+ }
+
+ val crashThreshold = TsThreshold(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
+
+ override fun setCrashThreshold(threshold: TsThreshold?) {
+ ZDPowerManager.getInstance().setTsThreshold(threshold)
+ }
+
+ override fun getCurrentCrashThreshold(): TsThreshold = crashThreshold
+
+ override fun init(context: Context) {
+ Logger.d(TAG, "init---->")
+ ZDPowerManager.getInstance().setTsBoxStatusListener(object : ZDPowerManager.TsBoxStatusListener{
+ override fun onBoxSelfCheckChanged(p0: TsSensorChannel?) {
+ }
+
+ override fun onTsCleanFlashChanged(p0: Int) {
+ }
+
+ override fun onTsUpdateChanged(p0: Int) {
+ }
+
+ override fun onBoxThresholdChanged(threshold: TsThreshold?) {
+ threshold?.let {
+ Logger.d(TAG, "获取到当前阈值==: $threshold")
+ crashThreshold.copy(threshold)
+ }
+ }
+
+ override fun onTsReadFlashCountChanged(p0: Int) {
+ }
+
+ override fun onTimeChanged(p0: Int, p1: Int, p2: Int, p3: Int, p4: Int, p5: Int) {
+ }
+
+ override fun onTsRestoreBackupDataChanged(p0: Int) {
+ }
+
+ override fun onVersionChanged(p0: String?) {
+ }
+
+ override fun onBoxSwitchChanged(p0: Int, p1: Int, p2: Int, p3: Int) {
+ }
+ /**
+ * 碰撞报警事件
+ * @param position 碰撞位置 1:右前车门,2:右后车门,3:左后车门,4:左前车门,5:前保险杠,6:后保险杠
+ * @param levelH 高力度级数(1--5)
+ * @param levelL 低力度级数 (1--5)
+ */
+ override fun onAlarmChanged(position: Int, levelH: Int, levelL: Int) {
+ // 发送广播通知adas
+ Logger.d(TAG, "碰撞事件报警------ position: $position, levelH: $levelH,levelL: $levelL")
+ val intent = Intent("com.mogo.launcher.action.CRASH_WARNING")
+ intent.putExtra("position", position)
+ intent.putExtra("levelH", levelH)
+ intent.putExtra("levelL", levelL)
+ context.sendBroadcast(intent)
+ }
+
+ override fun onSerialNumChanged(p0: String?) {
+ }
+
+ override fun onTsReadFlashDataChanged(p0: Int, p1: String?) {
+ }
+
+ })
+ val initResult = ZDPowerManager.getInstance().initTsDevice()
+ Logger.d(TAG, "initDevice: $initResult")
+ // 默认开启报警
+ ZDPowerManager.getInstance().setTsAlarmSwitch(1)
+ val getThresholdResult = ZDPowerManager.getInstance().tsBoxStatus
+ Logger.d(TAG, "获取当前碰撞阈值: $getThresholdResult")
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/BaseObu.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/BaseObu.kt
new file mode 100644
index 0000000000..2f8639b00c
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/BaseObu.kt
@@ -0,0 +1,11 @@
+package com.zhidao.mogo.module.obu.obu
+
+abstract class BaseObu : IObu {
+ var callback: IObuCallback? = null
+ override fun init() {
+ }
+
+ override fun registerObuCallback(callback: IObuCallback) {
+ this.callback = callback
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/CidiObu.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/CidiObu.kt
new file mode 100644
index 0000000000..4ad82e0df4
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/CidiObu.kt
@@ -0,0 +1,123 @@
+package com.zhidao.mogo.module.obu.obu
+
+import android.os.Handler
+import android.os.Message
+import com.mogo.commons.debug.DebugConfig
+import com.mogo.utils.logger.Logger
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuLocationInfo
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuTrafficLightInfo
+import com.zhidao.smartv2x.api.V2xController
+import com.zhidao.smartv2x.listener.OnMessageReceiveListener
+import com.zhidao.smartv2x.model.obu.CarEventInfo
+import com.zhidao.smartv2x.model.obu.CarLocationInfo
+import com.zhidao.smartv2x.model.obu.TrafficLightInfo
+
+/**
+ * 西迪obu
+ *
+ * @author tongchenfei
+ */
+class CidiObu : BaseObu(), Handler.Callback, OnMessageReceiveListener {
+ companion object {
+ const val TAG = "CidiObu"
+ const val MSG_MONITOR_OBU_STATUS = 1001
+ const val DEFAULT_MONITOR_TIME = 10_000L
+ }
+
+ private val handler = Handler(this)
+ override fun init() {
+ super.init()
+ // 初始化sdk,注册数据回调等信息
+ V2xController.getInstance().setMessageReceiveListener(this)
+ V2xController.getInstance().init()
+ handler.sendEmptyMessageDelayed(MSG_MONITOR_OBU_STATUS, DEFAULT_MONITOR_TIME)
+ }
+
+ /**
+ * 车辆位置信息回调接口
+ */
+ override fun showCarLocationInfo(info: CarLocationInfo?) {
+ Logger.v(TAG, "thread: ${Thread.currentThread()} showCarLocationInfo: ${info?.carId}")
+ if (!DebugConfig.isUseMockObuData()) {
+ // 不使用模拟数据时候不做此处理
+ // 由于obu会频繁回调此接口,故10秒收不到此数据,则认为obu连接不正常,就断开重连一下
+ handler.removeMessages(MSG_MONITOR_OBU_STATUS)
+ handler.sendEmptyMessageDelayed(MSG_MONITOR_OBU_STATUS, DEFAULT_MONITOR_TIME)
+ }
+
+ handler.post {
+ if (info == null) {
+ callback?.onLocationInfoCallback(null)
+ }else {
+ callback?.onLocationInfoCallback(MogoObuLocationInfo(info))
+ }
+ }
+ }
+
+ /**
+ * UDP 收发消息回调接口
+ */
+ override fun showOtherInfo(info: String?) {
+ Logger.d(TAG, "thread: ${Thread.currentThread()} showOtherInfo: $info")
+ }
+
+ /**
+ * 交通信号灯信息回调接口
+ * 17号路口红绿灯倒计时出现了,如果[TrafficLightInfo.lightStatus]为0,或者说,不为G/Y/R时,此条红绿灯数据无效
+ */
+ override fun showTrafficLightInfo(info: TrafficLightInfo?) {
+ Logger.d(TAG, "thread: ${Thread.currentThread()} showTrafficLightInfo: $info")
+ Logger.d(TAG, "isTrafficLightInfoValid: ${isTrafficLightInfoValid(info)}")
+ if (isTrafficLightInfoValid(info)) {
+ handler.post {
+ if (info == null) {
+ callback?.onTrafficLightInfoCallback(null)
+ }else{
+ callback?.onTrafficLightInfoCallback(MogoObuTrafficLightInfo(info))
+ }
+ }
+ }
+ }
+
+ /**
+ * 判断红绿灯信息是否有效
+ *
+ * @return true 有效
+ */
+ private fun isTrafficLightInfoValid(info: TrafficLightInfo?): Boolean {
+ return info == null || (info.lightStatus == "G" || info.lightStatus == "Y" || info.lightStatus == "R")
+ }
+
+ /**
+ * 场景触发事件信息回调接口
+ */
+ override fun showCarEventInfo(info: CarEventInfo?) {
+ Logger.d(TAG, "thread: ${Thread.currentThread()} showCarEventInfo: ${info?.type}")
+ handler.post {
+ if (info == null) {
+ callback?.onEventInfoCallback(null)
+ }else{
+ callback?.onEventInfoCallback(MogoObuEventInfo(info))
+ }
+ }
+ }
+
+ /**
+ * @param msg A [Message][android.os.Message] object
+ * @return True if no further handling is desired
+ */
+ override fun handleMessage(msg: Message?): Boolean {
+ if (msg?.what == MSG_MONITOR_OBU_STATUS) {
+ // obu未正常连接,需要重新连接
+ Logger.d(TAG, "obu未正常连接,需要重新连接")
+ V2xController.getInstance().release()
+ V2xController.getInstance().setMessageReceiveListener(this)
+ V2xController.getInstance().init()
+ handler.sendEmptyMessageDelayed(MSG_MONITOR_OBU_STATUS, DEFAULT_MONITOR_TIME)
+// V2xController.getInstance().release()
+ return true
+ }
+ return false
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/HualiObu.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/HualiObu.kt
new file mode 100644
index 0000000000..222ab6d9da
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/HualiObu.kt
@@ -0,0 +1,311 @@
+package com.zhidao.mogo.module.obu.obu
+
+import android.os.Handler
+import android.os.SystemClock
+import android.util.ArrayMap
+import com.google.gson.JsonObject
+import com.mogo.commons.debug.DebugConfig
+import com.mogo.utils.logger.Logger
+import com.zhidao.mogo.module.obu.ObuConstant
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo
+import com.zhidao.mogo.module.obu.socket.IUdpSocketCallback
+import com.zhidao.mogo.module.obu.socket.SimpleSocketManager
+import com.zhidao.mogo.module.obu.socket.UdpSocketManager
+import org.json.JSONException
+import org.json.JSONObject
+import java.lang.StringBuilder
+import kotlin.concurrent.thread
+import kotlin.experimental.and
+import kotlin.experimental.xor
+
+/**
+ * 华砺智行obu 苏州演示项目用到的
+ *
+ * @author tongchenfei
+ */
+class HualiObu : BaseObu(), IUdpSocketCallback {
+ // private val socketManager = UdpSocketManager(this)
+ private val socketManager = SimpleSocketManager(this)
+
+ private val eventCacheMap = ArrayMap()
+
+ companion object {
+ const val TAG = "HualiObu"
+ const val IP_ADDRESS = "192.168.8.99"
+
+ // const val IP_ADDRESS = "172.31.3.18"
+ const val PORT = 10005
+
+ /**
+ * 红绿灯信息 key
+ * 绿波车速和闯红灯都是根据这个key来解析json,同时,这个key也用于[eventCacheMap],用来表示闯红灯预警和绿波车速
+ */
+ const val KEY_RUSH_RED_LIGHT = "rush_redlight"
+
+ /**
+ * 交叉路口碰撞信息 key
+ */
+ const val KEY_INTERSECTION_CRASH = "intersection_crash"
+
+ /**
+ * 行人碰撞预警 key
+ */
+ const val KEY_PEDESTRAIN_INFORMATION = "pedestrain_information"
+
+ /**
+ * 事件上报事件间隔阈值
+ */
+ const val EVENT_WARN_TIME_THRESHOLD = 25_000
+
+
+ }
+
+ private val handler = Handler()
+
+ override fun init() {
+ super.init()
+ socketManager.connect(IP_ADDRESS, PORT)
+ Logger.d(TAG, "init")
+ }
+
+ override fun onMessageReceived(msg: ByteArray) {
+ // 接收到obu原始数据,处理数据
+// val m = String(msg)
+// Logger.d(TAG, "onMessageReceived: $m")
+// printByteArray(msg)
+ try {
+ parseObuProtocol(msg)
+ } catch (e: JSONException) {
+ e.printStackTrace()
+ Logger.e(TAG,e,"obu数据解析json异常")
+ }
+ }
+
+ /**
+ * 解析obu数据
+ *
+ * @param ori 原始数据
+ */
+ private fun parseObuProtocol(ori: ByteArray) {
+ val effectiveData = if (DebugConfig.isUseMockObuData()) {
+ ori
+ } else {
+ getEffectiveData(ori)
+ }
+ if (effectiveData != null) {
+ val msg = String(effectiveData)
+ Logger.d(TAG, "收到obu数据====${effectiveData.size}")
+ val json = JSONObject(msg)
+ val rushRedLight = json.optJSONObject(KEY_RUSH_RED_LIGHT)
+ rushRedLight?.let {
+ // 有闯红灯告警信息,绿波车速信息
+ Logger.d(TAG, "收到闯红灯告警信息: \n $it")
+ val currentLineDir = it.optInt("current_lane_man")
+ Logger.d(TAG, "当前车道方向: $currentLineDir")
+ val glosaInfo = it.optJSONArray("glosa_info")
+ glosaInfo?.let { info ->
+ Logger.d(TAG, "收到红绿灯信息: $info")
+ var lastInfo: JSONObject? = null
+ for (i in 0 until info.length()) {
+ val j = info.optJSONObject(i)
+ val lineDir = j.optInt("led_direction")
+ val enable = j.optInt("lane_en", 0)
+ if (lineDir == currentLineDir && enable == 1) {
+ // 使能,且车道方向一致
+ lastInfo = j
+ }
+ }
+ lastInfo?.let { lightInfo ->
+ if (isWarnEnable(KEY_RUSH_RED_LIGHT)) {
+ val alert = lightInfo.optInt("rush_redlight_alarm", -1)
+ val eventInfo = MogoObuEventInfo()
+ when (alert) {
+ 0 -> {
+ // 有闯红灯风险
+
+ Logger.d(TAG, "准备预警--闯红灯")
+ eventInfo.mogoEventId = ObuConstant.TYPE_RUSH_RED_LIGHT
+ eventInfo.describe = "当前车速经过路口会闯红灯,请减速!"
+ callback?.let {
+ handler.post {
+ it.onEventInfoCallback(eventInfo)
+ }
+ }
+
+ }
+ 1 -> {
+ // 没有风险,给出建议车速,绿波车速
+ Logger.d(TAG, "准备预警--绿波车速")
+ eventInfo.mogoEventId = ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY
+ val optSpeedInterval = lastInfo.optJSONArray("advisory_speed")
+ val optSpeed = lastInfo.optInt("advisory_speed")
+ if (optSpeedInterval == null) {
+ // 不是速度区间,是具体速度值
+ Logger.d(TAG, "建议速度值: $optSpeed")
+ eventInfo.describe = "前方路口,建议车速 $optSpeed km/h"
+ } else {
+ Logger.d(TAG, "建议速度区间: ${optSpeedInterval[0]} ~ ${optSpeedInterval[1]}")
+ val start = optSpeedInterval[0].toString().toInt()
+ val end = optSpeedInterval[1].toString().toInt()
+ val notice = if (start == end) {
+ "前方路口,建议车速 $start km/h"
+ } else {
+ "前方路口,建议车速 $start 到 $end km/h"
+ }
+ eventInfo.describe = notice
+ }
+ callback?.let {
+ handler.post {
+ it.onEventInfoCallback(eventInfo)
+ }
+ }
+ }
+ else -> {
+ Logger.e(TAG, "没有有效红绿灯预警信息")
+ }
+ }
+ } else {
+ Logger.d(TAG, "已经报过闯红灯预警了,待会再报")
+ }
+ }
+ }
+ }
+ val intersectionCrash = json.optJSONObject(KEY_INTERSECTION_CRASH)
+ intersectionCrash?.let {
+ // 有交叉路口碰撞预警信息
+ Logger.d(TAG, "收到交叉路口碰撞信息: \n $it")
+ if (isWarnEnable(KEY_INTERSECTION_CRASH)) {
+ val alert = it.optInt("intersection_crash_alarm", 0)
+ if (alert == 1) {
+ // 有碰撞预警
+ Logger.d(TAG, "准备预警--交叉口碰撞")
+ val eventInfo = MogoObuEventInfo()
+ eventInfo.mogoEventId = ObuConstant.TYPE_CROSS_COLLISION_WARNING
+ callback?.let {
+ handler.post {
+ it.onEventInfoCallback(eventInfo)
+ }
+ }
+ }
+ } else {
+ Logger.d(TAG, "已经提醒过交叉口碰撞了,等会儿再提醒")
+ }
+
+
+ }
+ val pedestrainInformation = json.optJSONObject(KEY_PEDESTRAIN_INFORMATION)
+ pedestrainInformation?.let {
+ // 有人车冲突信息
+ Logger.d(TAG, "收到人车冲突信息: \n $it")
+ if (isWarnEnable(KEY_PEDESTRAIN_INFORMATION)) {
+ val alert = it.optInt("pedestrian_stauts", 0)
+ if (alert == 1) {
+ // 有人车冲突
+ Logger.d(TAG, "准备预警--行人碰撞")
+ val eventInfo = MogoObuEventInfo()
+ eventInfo.mogoEventId = ObuConstant.TYPE_ROAD_USER_COLLISION_WARNING
+ callback?.let {
+ handler.post {
+ it.onEventInfoCallback(eventInfo)
+ }
+ }
+ }
+ } else {
+ Logger.d(TAG, "已经上报过人车冲突,过会儿再上报")
+ }
+
+ }
+ val position = json.optJSONObject("position_3d")
+ position?.let {
+ // 定位信息
+ Logger.d(TAG, "收到定位信息: \n $it")
+
+ }
+
+ val motion = json.optJSONObject("motion")
+ motion?.let {
+ // 行驶信息
+ Logger.d(TAG, "收到行驶信息: \n $it")
+
+ }
+ } else {
+ Logger.e(TAG, "有效数据为空,无法解析")
+ }
+ }
+
+ /**
+ * 是否可以进行事件提醒
+ * 目前是根据时间间隔阈值进行判断,[EVENT_WARN_TIME_THRESHOLD]内,同一事件只播报一次
+ *
+ * @return true 可上报 false 忽略此事件
+ */
+ private fun isWarnEnable(key: String): Boolean {
+ val time = eventCacheMap[key] ?: 0
+ val current = SystemClock.elapsedRealtime()
+ return if (time == 0L || current - time > EVENT_WARN_TIME_THRESHOLD) {
+ eventCacheMap[key] = current
+ true
+ } else {
+ false
+ }
+ }
+
+ /**
+ * 从原始数据中,根据数据长度字节,取出有效数据
+ *
+ * @param oriMsg 原始数据
+ * @return 有效数据
+ */
+ private fun getEffectiveData(oriMsg: ByteArray): ByteArray? {
+ val dataLengthInfo = ByteArray(4)
+ System.arraycopy(oriMsg, 16, dataLengthInfo, 0, 4)
+// printByteArray(dataLengthInfo)
+ val dataLength = convertTwoUnSignInt(dataLengthInfo)
+ Logger.d(TAG, "解析后的长度: $dataLength")
+ if (dataLength > oriMsg.size) {
+ Logger.e(TAG, "数据长度超限制")
+ return null
+ }
+ val parseData = ByteArray(dataLength + 21)
+ System.arraycopy(oriMsg, 0, parseData, 0, parseData.size)
+ return if (isAvailable(parseData)) {
+ val msg = ByteArray(dataLength)
+ System.arraycopy(parseData, 20, msg, 0, dataLength)
+ msg
+ } else {
+ null
+ }
+ }
+
+ /**
+ * 根据末位校验数据可用性
+ */
+ private fun isAvailable(msg: ByteArray): Boolean {
+ val checkSum = msg.last()
+ var check = msg[0].xor(0xff.toByte())
+ for (i in 1 until msg.size - 1) {
+ check = check.xor(msg[i])
+ }
+ return checkSum == check
+ }
+
+ private fun printByteArray(array: ByteArray) {
+ val arrayBuilder = StringBuilder()
+ array.forEach {
+ val res = it.toInt() and 0xff
+ arrayBuilder.append("0x")
+ if (res < 16) {
+ arrayBuilder.append("0")
+ }
+ arrayBuilder.append(Integer.toHexString(res)).append(", ")
+ }
+ Logger.d(TAG, arrayBuilder.toString())
+ }
+
+ /**
+ * byte数组转int
+ */
+ private fun convertTwoUnSignInt(byteArray: ByteArray): Int =
+ (byteArray[0].toInt() shl 24) or (byteArray[1].toInt() and 0xFF) or (byteArray[2].toInt() shl 8) or (byteArray[3].toInt() and 0xFF)
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/IObu.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/IObu.kt
new file mode 100644
index 0000000000..7e99c1c6c5
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/IObu.kt
@@ -0,0 +1,18 @@
+package com.zhidao.mogo.module.obu.obu
+
+/**
+ * Obu基本方法
+ * @author tongchenfei
+ */
+interface IObu {
+ /**
+ * 初始化
+ */
+ fun init()
+
+ /**
+ * 注册数据回调
+ */
+ fun registerObuCallback(callback: IObuCallback)
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/IObuCallback.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/IObuCallback.kt
new file mode 100644
index 0000000000..7d670e7714
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/IObuCallback.kt
@@ -0,0 +1,30 @@
+package com.zhidao.mogo.module.obu.obu
+
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuLocationInfo
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuTrafficLightInfo
+
+/**
+ * obu数据回调,目前是根据西迪的数据进行的封装
+ *
+ * @author tongchenfei
+ */
+interface IObuCallback {
+ /**
+ * obu事件回调
+ * @param eventInfo 事件信息
+ */
+ fun onEventInfoCallback(eventInfo:MogoObuEventInfo?)
+
+ /**
+ * obu定位信息回调
+ * @param locationInfo 定位信息
+ */
+ fun onLocationInfoCallback(locationInfo: MogoObuLocationInfo?)
+
+ /**
+ * obu红绿灯信息回调
+ * @param trafficLightInfo 红绿灯信息
+ */
+ fun onTrafficLightInfoCallback(trafficLightInfo: MogoObuTrafficLightInfo?)
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuEventInfo.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuEventInfo.kt
new file mode 100644
index 0000000000..549ea38278
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuEventInfo.kt
@@ -0,0 +1,44 @@
+package com.zhidao.mogo.module.obu.obu.bean
+
+import com.zhidao.mogo.module.obu.ObuConstant
+import com.zhidao.smartv2x.model.obu.CarEventInfo
+
+/**
+ * obu事件数据封装,根据西迪obu数据进行整理
+ *
+ * {"typeCode":"01","type":"前碰撞预警","describe":"等级:1"}
+ */
+class MogoObuEventInfo(){
+ var typeCode:String? = null
+ set(value){
+ mogoEventId = parseObuEvent(value)
+ field = value
+ }
+ var type:String? = null
+ var describe:String? = null
+ var mogoEventId:Int = 0
+ override fun toString(): String {
+ return "MogoObuEventInfo(typeCode=$typeCode, type=$type, describe=$describe)"
+ }
+
+ constructor(info:CarEventInfo):this(){
+ this.typeCode = info.typeCode
+ this.type = info.type
+ this.describe = info.describe
+ }
+
+ private fun parseObuEvent(type: String?): Int {
+ return when (type) {
+ "06" -> // 紧急制动预警
+ ObuConstant.TYPE_URGENCY_COLLISION_WARNING
+ "13" -> // 绿波车速引导
+ ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY
+ "39" -> // 行人碰撞预警
+ ObuConstant.TYPE_ROAD_USER_COLLISION_WARNING
+ "vip变灯提醒" -> ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP
+ null -> -1
+ else -> type.toInt()
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuLocationInfo.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuLocationInfo.kt
new file mode 100644
index 0000000000..878e139abb
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuLocationInfo.kt
@@ -0,0 +1,32 @@
+package com.zhidao.mogo.module.obu.obu.bean
+
+import com.zhidao.smartv2x.model.obu.CarLocationInfo
+
+/**
+ * obu定位信息,根据西迪obu进行封装
+ * {"carId":"1952999795","lat":28.089524299999997,"lng":112.9908293,"speed":"14"," direction":"10112","sateNum":"24","signal":"0"}
+ * @author tongchenfei
+ */
+class MogoObuLocationInfo() {
+ var carId: String? = null
+ var lat: Double? = 0.0
+ var lon: Double? = 0.0
+ var speed: String? = null
+ var direction: String? = null
+ var sateNum: String? = null
+ var signal: String? = null
+ override fun toString(): String {
+ return "MogoObuLocationInfo(lat=$lat)"
+ }
+
+ constructor(info:CarLocationInfo?) : this() {
+ this.carId = info?.carId
+ this.lat = info?.lat
+ this.lon = info?.lng
+ this.speed = info?.speed
+ this.direction = info?.direction
+ this.sateNum = info?.sateNum
+ this.signal = info?.signal
+ }
+
+}
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt
new file mode 100644
index 0000000000..33437fedd1
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/obu/bean/MogoObuTrafficLightInfo.kt
@@ -0,0 +1,29 @@
+package com.zhidao.mogo.module.obu.obu.bean
+
+import com.zhidao.smartv2x.model.obu.TrafficLightInfo
+
+/**
+ * obu信号灯数据,根据西迪obu进行封装
+ * lightStatus:信号灯的当前状态 G/R/Y 分别对应 绿/红/黄
+ * surplusTime:当前信号灯剩余时间 十进制 单位:秒
+ * lightPriority:保留字段,暂无说明
+ *
+ * @author tongchenfei
+ */
+class MogoObuTrafficLightInfo(){
+ var id:String? =null
+ var lightStatus:String? =null
+ var surplusTime:String? =null
+ var lightPriority:String? =null
+ override fun toString(): String {
+ return "MogoObuTrafficLightInfo(id=$id, lightStatus=$lightStatus, surplusTime=$surplusTime, lightPriority=$lightPriority)"
+ }
+
+ constructor(info:TrafficLightInfo):this(){
+ this.id = info.id
+ this.lightStatus = info.lightStatus
+ this.surplusTime = info.surplusTime
+ this.lightPriority = info.lightPriority
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/IUdpSocketCallback.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/IUdpSocketCallback.kt
new file mode 100644
index 0000000000..80a17f4890
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/IUdpSocketCallback.kt
@@ -0,0 +1,13 @@
+package com.zhidao.mogo.module.obu.socket
+
+/**
+ * udp 数据回调
+ */
+interface IUdpSocketCallback {
+ /**
+ * udp过来的字节码数据,目前已知数据类型就是ByteArray
+ *
+ * @param msg udp发过来的数据
+ */
+ fun onMessageReceived(msg: ByteArray)
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/SimpleAddress.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/SimpleAddress.kt
new file mode 100644
index 0000000000..73c91b03a2
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/SimpleAddress.kt
@@ -0,0 +1,20 @@
+package com.zhidao.mogo.module.obu.socket
+
+class SimpleAddress(val ip: String, val port: Int) {
+ override fun equals(other: Any?): Boolean {
+ return when (other) {
+ is SimpleAddress -> other.ip == ip && port == port
+ null -> false
+ else -> false
+ }
+ }
+
+ override fun hashCode(): Int {
+ return ip.hashCode() + port.hashCode()
+ }
+
+ override fun toString(): String {
+ return "SimpleAddress(ip='$ip', port=$port)"
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/SimpleSocketManager.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/SimpleSocketManager.kt
new file mode 100644
index 0000000000..2dc2236e6c
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/SimpleSocketManager.kt
@@ -0,0 +1,75 @@
+package com.zhidao.mogo.module.obu.socket
+
+import android.os.Handler
+import android.os.HandlerThread
+import com.mogo.utils.logger.Logger
+import java.io.*
+import java.lang.Exception
+import java.net.InetAddress
+import java.net.Socket
+import java.util.concurrent.Executors
+
+/**
+ * socket连接简单实现,仅支持连接一路socket,只接受数据
+ */
+class SimpleSocketManager(private val callback: IUdpSocketCallback? = null) {
+ companion object {
+ const val TAG = "SimpleSocketManager"
+ }
+
+ private val dataCacheThread = HandlerThread("obu-data-cache")
+ private val dataCacheHandler: Handler
+
+ init {
+ dataCacheThread.start()
+ dataCacheHandler = Handler(dataCacheThread.looper)
+ }
+
+ private var socket: Socket? = null
+ private val socketExecutor = Executors.newCachedThreadPool()
+ fun connect(ip: String, port: Int) {
+ socketExecutor.execute {
+ realConnect(ip, port)
+ }
+ }
+
+
+ private fun realConnect(ip: String, port: Int) {
+ try {
+ Logger.d(TAG, "socket connect===ip: $ip, port: $port ====++++")
+ val address = InetAddress.getByName(ip)
+ Logger.d(TAG, "address: $address")
+ socket = Socket(address, port)
+ socket?.let {
+ Logger.d(TAG, "socket连接基本成功,准备接受数据")
+ // 超时时间10秒
+// it.soTimeout = 10_000
+
+// Logger.d(TAG,"设置了超时时间")
+ val buffer = ByteArray(2048)
+ var result: Int
+ do {
+ result = it.getInputStream().read(buffer)
+ if (result != -1) {
+ Logger.d(TAG, "收到obu数据")
+ val msg = ByteArray(buffer.size)
+ System.arraycopy(buffer, 0, msg, 0, buffer.size)
+ dataCacheHandler.post {
+ callback?.onMessageReceived(msg)
+ }
+ }
+ } while (result != -1)
+
+ }
+ }catch (e:Exception){
+ e.printStackTrace()
+ Logger.e(TAG, e, "udp连接异常")
+ Thread.sleep(10_000)
+ connect(ip,port)
+ }
+ }
+
+ fun sendMessage(msg: String) {
+ Logger.d(TAG, "暂不支持发送消息")
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/UdpSocketManager.kt b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/UdpSocketManager.kt
new file mode 100644
index 0000000000..c9b2ff594b
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/java/com/zhidao/mogo/module/obu/socket/UdpSocketManager.kt
@@ -0,0 +1,94 @@
+package com.zhidao.mogo.module.obu.socket
+
+import android.os.Handler
+import android.os.HandlerThread
+import android.util.ArrayMap
+import com.mogo.utils.logger.Logger
+import java.net.DatagramPacket
+import java.net.DatagramSocket
+import java.net.InetAddress
+import java.util.concurrent.Executors
+
+/**
+ * udp socket 管理类,统一管理udp socket数据接收和发送
+ */
+class UdpSocketManager(private val callback: IUdpSocketCallback? = null) {
+ companion object {
+ const val TAG = "Mogo-UdpSocketManager"
+ }
+
+ private val socketMap = ArrayMap()
+ private val socketExecutor = Executors.newCachedThreadPool()
+
+ private val dataCacheThread = HandlerThread("obu-data-cache")
+ private val dataCacheHandler: Handler
+
+ init {
+ dataCacheThread.start()
+ dataCacheHandler = Handler(dataCacheThread.looper)
+ }
+
+ @Volatile
+ private var isConnected = false
+
+ fun sendMsgTo(msg: String, ip: String, port: Int) {
+ isConnected = true
+ val address = SimpleAddress(ip, port)
+ socketExecutor.execute(UdpSenderRunnable(address, msg))
+ }
+
+ fun receiveMsgFrom(ip: String, port: Int) {
+ isConnected = true
+ val address = SimpleAddress(ip, port)
+ socketExecutor.execute(UdpReceiverRunnable(address))
+ }
+
+ fun release() {
+ isConnected = false
+ socketMap.forEach {
+ it.value.close()
+ }
+ }
+
+ inner class UdpSenderRunnable(private val address: SimpleAddress, private val msg: String) : Runnable {
+ override fun run() {
+ Logger.d(TAG, "${address}准备发送消息: $msg")
+ var socket = socketMap[address]
+ val netAddress = InetAddress.getByName(address.ip)
+ if (socket == null) {
+ socket = DatagramSocket(address.port)
+ socketMap[address] = socket
+ }
+ socket.send(DatagramPacket(msg.toByteArray(), msg.toByteArray().size, netAddress, address.port))
+ }
+ }
+
+ inner class UdpReceiverRunnable(private val address: SimpleAddress) : Runnable {
+ override fun run() {
+ var socket = socketMap[address]
+ Logger.d(TAG, "init receiver: $address")
+
+ if (socket == null) {
+ socket = DatagramSocket(address.port)
+ socketMap[address] = socket
+ }
+ val buffer = ByteArray(2048)
+ val packet = DatagramPacket(buffer, buffer.size)
+ while (isConnected) {
+ if (socket.isClosed) {
+ break
+ }
+ Logger.d(TAG, "准备接受消息====$address")
+ socket.receive(packet)
+ val msg = ByteArray(buffer.size)
+ System.arraycopy(buffer, 0, msg, 0, buffer.size)
+ dataCacheHandler.post {
+ // 换一条线程处理
+ callback?.onMessageReceived(msg)
+ }
+ }
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/modules/mogo-module-obu/src/main/res/layout/mock_obu.xml b/modules/mogo-module-obu/src/main/res/layout/mock_obu.xml
new file mode 100644
index 0000000000..998ef3b44b
--- /dev/null
+++ b/modules/mogo-module-obu/src/main/res/layout/mock_obu.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-search/build.gradle b/modules/mogo-module-search/build.gradle
index 8470868a53..f67cde7b6e 100644
--- a/modules/mogo-module-search/build.gradle
+++ b/modules/mogo-module-search/build.gradle
@@ -37,7 +37,7 @@ android {
}
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
+// implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.androidxconstraintlayout
diff --git a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt
index 3b272bd6bc..6bf92c2923 100644
--- a/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt
+++ b/modules/mogo-module-search/src/main/java/com/mogo/module/navi/ui/setting/NaviSettingFragment.kt
@@ -9,6 +9,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.voice.AIAssist
import com.mogo.map.uicontroller.EnumMapUI
+import com.mogo.module.common.MogoApisHandler
import com.mogo.module.navi.R
import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.DataConstants
@@ -17,6 +18,8 @@ import com.mogo.module.navi.manager.AddressManager
import com.mogo.module.navi.manager.SettingManager
import com.mogo.module.navi.manager.VolumeManager
import com.mogo.module.navi.ui.base.BaseFragment
+import com.mogo.utils.TipToast
+import com.mogo.utils.storage.SharedPrefsMgr
import kotlinx.android.synthetic.main.fragment_navi_setting.*
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -227,6 +230,15 @@ class NaviSettingFragment : BaseFragment(), OnCheckedChangeListener {
// SearchApisHolder.getGpsSimulatorManager().close()
// }
}
+ tb_custom_map.isChecked = DebugConfig.isUseCustomMap()
+ tb_custom_map.setOnCheckedChangeListener{ _, isChecked ->
+ TipToast.shortTip("设置完成,下次启动生效")
+ if (isChecked) {
+ MogoApisHandler.getInstance().apis.mapFrameControllerApi.changeToVRMode()
+ } else {
+ MogoApisHandler.getInstance().apis.mapFrameControllerApi.changeTo2dMode()
+ }
+ }
tb_navi.isChecked = SettingManager.isMonitor()
tb_gps.isChecked = SettingManager.isGpsSimulator()
diff --git a/modules/mogo-module-search/src/main/res/layout/fragment_navi_setting.xml b/modules/mogo-module-search/src/main/res/layout/fragment_navi_setting.xml
index 9390eafe8c..c562218c33 100644
--- a/modules/mogo-module-search/src/main/res/layout/fragment_navi_setting.xml
+++ b/modules/mogo-module-search/src/main/res/layout/fragment_navi_setting.xml
@@ -449,6 +449,18 @@
android:textSize="@dimen/module_search_txt_setting_width"
app:layout_constraintLeft_toLeftOf="parent" />
+
+
diff --git a/modules/mogo-module-service/src/main/AndroidManifest.xml b/modules/mogo-module-service/src/main/AndroidManifest.xml
index 8eb5a9dd2c..5ff3cff7d9 100644
--- a/modules/mogo-module-service/src/main/AndroidManifest.xml
+++ b/modules/mogo-module-service/src/main/AndroidManifest.xml
@@ -1,6 +1,9 @@
+
+
+
{
MogoServices.getInstance().init( AbsMogoApplication.getApp() );
}, 5_000L );
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
index b2471ce6ec..5db643b50e 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServices.java
@@ -4,6 +4,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.graphics.BitmapFactory;
import android.location.Location;
import android.net.ConnectivityManager;
import android.os.Handler;
@@ -14,11 +15,13 @@ import android.view.MotionEvent;
import androidx.annotation.NonNull;
+import com.amap.api.maps.model.MarkerOptions;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.commons.network.ParamsProvider;
import com.mogo.commons.network.SubscribeImpl;
import com.mogo.commons.storage.SpStorage;
+import com.mogo.commons.utils.MortonCode;
import com.mogo.commons.voice.AIAssist;
import com.mogo.commons.voice.IMogoVoiceCmdCallBack;
import com.mogo.map.IDestroyable;
@@ -26,6 +29,8 @@ import com.mogo.map.MogoLatLng;
import com.mogo.map.listener.IMogoMapListener;
import com.mogo.map.location.IMogoLocationListener;
import com.mogo.map.location.MogoLocation;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
import com.mogo.map.navi.IMogoNavi;
@@ -36,12 +41,16 @@ import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.MogoModule;
import com.mogo.module.common.MogoModulePaths;
+import com.mogo.module.common.entity.CloudLocationInfo;
import com.mogo.module.common.entity.MarkerResponse;
import com.mogo.module.common.map.MapCenterPointStrategy;
import com.mogo.module.common.map.Scene;
+import com.mogo.module.common.utils.CoordinateSystemTransformationUtil;
+import com.mogo.module.common.utils.CoordinateUtils;
import com.mogo.module.service.autopilot.AutoPilotRemoteController;
import com.mogo.module.service.intent.IntentHandlerFactory;
import com.mogo.module.service.launchercard.LauncherCardRefresher;
+import com.mogo.module.service.location.MogoRTKLocation;
import com.mogo.module.service.marker.MapMarkerManager;
import com.mogo.module.service.network.RefreshCallback;
import com.mogo.module.service.network.RefreshModel;
@@ -53,8 +62,16 @@ import com.mogo.module.service.refresh.AutoRefreshStrategy;
import com.mogo.module.service.refresh.CustomRefreshStrategy;
import com.mogo.module.service.refresh.RefreshObject;
import com.mogo.module.service.strategy.CarIconDisplayStrategy;
+import com.mogo.module.service.utils.LocationParseUtil;
+import com.mogo.module.service.utils.SimpleLocationCorrectStrategy;
+import com.mogo.module.service.vrmode.VrModeController;
+import com.mogo.module.service.websocket.LocationResult;
+import com.mogo.module.service.websocket.OnePerSecondSendContent;
import com.mogo.module.service.ttsConfig.TtsConfigModleData;
import com.mogo.service.adas.IMogoADASController;
+import com.mogo.service.adas.entity.ADASRecognizedResult;
+import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
+import com.mogo.service.connection.WebSocketMsgType;
import com.mogo.service.fragmentmanager.FragmentStackTransactionListener;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.intent.IMogoIntentListener;
@@ -80,6 +97,7 @@ import com.zhidao.carchattingprovider.ICarsChattingProvider;
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -109,6 +127,7 @@ public class MogoServices implements IMogoMapListener,
private boolean mInternalUnWakeupRegisterStatus = false;
private ICarsChattingProvider carsChattingProvider;
+ private Location mLastCarLocation;
private MogoServices() {
// private constructor
@@ -183,35 +202,35 @@ public class MogoServices implements IMogoMapListener,
*/
private boolean mLoopRequest = false;
- private Handler mHandler = new Handler(Looper.getMainLooper()) {
+ private Handler mHandler = new Handler( Looper.getMainLooper() ) {
@Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
+ public void handleMessage( @NonNull Message msg ) {
+ super.handleMessage( msg );
+ switch ( msg.what ) {
case ServiceConst.MSG_TYPE_REFRESH_DECREASE:
- if (mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow()) {
+ if ( mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow() ) {
invokeAutoRefreshStrategy();
return;
}
mRefreshRemainingTime -= ServiceConst.DECREASE_INTERVAL;
- if (mRefreshRemainingTime <= 0) {
- Logger.d(TAG, "move to center and refresh data.");
+ if ( mRefreshRemainingTime <= 0 ) {
+ Logger.d( TAG, "move to center and refresh data." );
invokeAutoRefresh();
} else {
- mHandler.sendEmptyMessageDelayed(msg.what, ServiceConst.DECREASE_INTERVAL);
+ mHandler.sendEmptyMessageDelayed( msg.what, ServiceConst.DECREASE_INTERVAL );
}
break;
case ServiceConst.MSG_LOOP_REQUEST:
- if (mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow()) {
+ if ( mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow() ) {
return;
}
- if (mLoopRequest) {
- Logger.d(TAG, "补偿刷新触发");
+ if ( mLoopRequest ) {
+ Logger.d( TAG, "补偿刷新触发" );
invokeAutoRefresh();
}
break;
case ServiceConst.MSG_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH:
- handleCalculationNotHomeCompanyDistanceForPush(msg.arg1);
+ handleCalculationNotHomeCompanyDistanceForPush( msg.arg1 );
break;
}
}
@@ -222,8 +241,8 @@ public class MogoServices implements IMogoMapListener,
* 自动刷新:锁车、缩放比例:16、半径 2KM
*/
private void invokeAutoRefresh() {
- if (mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow()) {
- mStatusManager.setUserInteractionStatus(TAG, true, false);
+ if ( mStatusManager.isSearchUIShow() || mStatusManager.isV2XShow() ) {
+ mStatusManager.setUserInteractionStatus( TAG, true, false );
mUiController.recoverLockMode();
return;
}
@@ -232,7 +251,7 @@ public class MogoServices implements IMogoMapListener,
// mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
mStatusManager.setUserInteractionStatus(TAG, true, false);
mUiController.recoverLockMode();
- notifyRefreshData(mLastAutoRefreshLocation, ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS, mAutoRefreshCallback);
+ notifyRefreshData( mLastAutoRefreshLocation, ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS, mAutoRefreshCallback );
}
private Context mContext;
@@ -250,13 +269,13 @@ public class MogoServices implements IMogoMapListener,
/**
* 手动刷新回调
*/
- private RefreshCallback mCustomRefreshCallback = new RefreshCallback() {
+ private RefreshCallback mCustomRefreshCallback = new RefreshCallback< MarkerResponse >() {
@Override
- public void onSuccess(MarkerResponse o) {
- MapMarkerManager.getInstance().onSyncMarkerResponse(o);
+ public void onSuccess( MarkerResponse o ) {
+ MapMarkerManager.getInstance().onSyncMarkerResponse( o );
mLoopRequest = false;
// 用户手动操作地图刷新成功后,设置状态为 true,引发延时策略
- mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, true);
+ mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, true );
}
@Override
@@ -268,19 +287,19 @@ public class MogoServices implements IMogoMapListener,
/**
* 自动刷新回调
*/
- private RefreshCallback mAutoRefreshCallback = new RefreshCallback() {
+ private RefreshCallback mAutoRefreshCallback = new RefreshCallback< MarkerResponse >() {
@Override
- public void onSuccess(MarkerResponse o) {
- MapMarkerManager.getInstance().onSyncMarkerResponse(o);
+ public void onSuccess( MarkerResponse o ) {
+ MapMarkerManager.getInstance().onSyncMarkerResponse( o );
mLoopRequest = false;
invokeAutoRefreshStrategy();
}
@Override
public void onFail() {
- if (mLoopRequest) {
- Logger.d(TAG, "onFail and loop");
- mHandler.sendEmptyMessageDelayed(ServiceConst.MSG_LOOP_REQUEST, ServiceConst.LOOP_INTERVAL);
+ if ( mLoopRequest ) {
+ Logger.d( TAG, "onFail and loop" );
+ mHandler.sendEmptyMessageDelayed( ServiceConst.MSG_LOOP_REQUEST, ServiceConst.LOOP_INTERVAL );
} else {
invokeAutoRefreshStrategy();
}
@@ -288,7 +307,7 @@ public class MogoServices implements IMogoMapListener,
};
private void invokeAutoRefreshStrategy() {
- restartAutoRefreshAtTime(mAutoRefreshStrategy.getInterval());
+ restartAutoRefreshAtTime( mAutoRefreshStrategy.getInterval() );
}
private Handler mThreadHandler;
@@ -304,31 +323,31 @@ public class MogoServices implements IMogoMapListener,
private IMogoStatusChangedListener statusChangedListener = new StatusChangedAdapter() {
@Override
- public void onUserInteracted(boolean userInteracted) {
- if (userInteracted) {
- restartAutoRefreshAtTime(ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT);
+ public void onUserInteracted( boolean userInteracted ) {
+ if ( userInteracted ) {
+ restartAutoRefreshAtTime( ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT );
}
}
@Override
- public void onSearchUIShow(boolean visible) {
- if (visible) {
+ public void onSearchUIShow( boolean visible ) {
+ if ( visible ) {
// 搜索时,不在自动刷新打点策略
stopAutoRefreshStrategy();
} else {
// 搜索后,打开打点策略
- if (mAutoRefreshCallback != null) {
- mAutoRefreshCallback.onSuccess(null);
+ if ( mAutoRefreshCallback != null ) {
+ mAutoRefreshCallback.onSuccess( null );
}
}
}
@Override
- public void onMainPageResumeStatusChanged(boolean resume) {
- if (resume) {
+ public void onMainPageResumeStatusChanged( boolean resume ) {
+ if ( resume ) {
registerInternalUnWakeupWords();
- if (!mIsMainPageFirstResume) {
- restartAutoRefreshAtTime(2_000L);
+ if ( !mIsMainPageFirstResume ) {
+ restartAutoRefreshAtTime( 2_000L );
}
mIsMainPageFirstResume = false;
LauncherCardRefresher.getInstance(mContext).stop();
@@ -337,6 +356,7 @@ public class MogoServices implements IMogoMapListener,
unregisterInternalUnWakeupWords();
stopAutoRefreshStrategy();
}
+ VrModeController.getInstance().onMainPageResumeStatusChanged( resume );
}
@Override
@@ -347,28 +367,28 @@ public class MogoServices implements IMogoMapListener,
}
@Override
- public void onSeekHelpingStatusChanged(boolean isSeekingHelping) {
- CarIconDisplayStrategy.getInstance().changeCarIconStatus(isSeekingHelping);
- notifySeekHelpingStatusChanged(isSeekingHelping);
+ public void onSeekHelpingStatusChanged( boolean isSeekingHelping ) {
+ CarIconDisplayStrategy.getInstance().changeCarIconStatus( isSeekingHelping );
+ notifySeekHelpingStatusChanged( isSeekingHelping );
}
@Override
- public void onAccStatusChanged(boolean accOn) {
- if (accOn) {
- if (mIsFirstAccOn) {
+ public void onAccStatusChanged( boolean accOn ) {
+ if ( accOn ) {
+ if ( mIsFirstAccOn ) {
mIsFirstAccOn = false;
return;
}
- initLocationServiceProcess(mContext);
+ initLocationServiceProcess( mContext );
mADASController.showADAS();
- MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient(mContext).start();
- MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager(mContext).removeMarkers();
- UiThreadHandler.postDelayed(() -> {
+ MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient( mContext ).start();
+ MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers();
+ UiThreadHandler.postDelayed( () -> {
refreshStrategy();
- }, 3_000L);
+ }, 3_000L );
} else {
- MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient(mContext).stop();
- MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager(mContext).removeMarkers();
+ MarkerServiceHandler.getApis().getMapServiceApi().getSingletonLocationClient( mContext ).stop();
+ MarkerServiceHandler.getApis().getMapServiceApi().getMarkerManager( mContext ).removeMarkers();
}
}
@@ -383,6 +403,11 @@ public class MogoServices implements IMogoMapListener,
Logger.e(TAG, e, "onTopViewStatusChanged");
}
}
+
+ @Override
+ public void onVrModeChanged( boolean isVrMode ) {
+ VrModeController.getInstance().onVrModeChanged( isVrMode );
+ }
};
/**
@@ -419,69 +444,73 @@ public class MogoServices implements IMogoMapListener,
}
}
- public void init(Context context) {
+ public void preInit( Context context ) {
mContext = context;
- initWorkThread();
- mRefreshModel = new RefreshModel(context);
- mTtsModle = new TtsConfigModleData();
+ mRefreshModel = new RefreshModel( context );
mMogoMapService = MarkerServiceHandler.getMapService();
mUiController = mMogoMapService.getMapUIController();
- mNavi = mMogoMapService.getNavi(context);
- mStatusManager = MarkerServiceHandler.getMogoStatusManager();
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.USER_INTERACTED, statusChangedListener);
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.SEARCH_UI, statusChangedListener);
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.MAIN_PAGE_RESUME, statusChangedListener);
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.SEEK_HELPING, statusChangedListener);
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.ACC_STATUS, statusChangedListener);
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.TOP_VIEW, statusChangedListener);
- mStatusManager.registerStatusChangedListener(ServiceConst.TYPE, StatusDescriptor.MAIN_PAGE_IS_BACKGROUND, statusChangedListener);
- mStatusManager.setAIAssistReady(TAG, AIAssist.getInstance(mContext).hasFlush());
+ mNavi = mMogoMapService.getNavi( context );
- registerMogoReceiver(context);
+ mStatusManager = MarkerServiceHandler.getMogoStatusManager();
+ mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.USER_INTERACTED, statusChangedListener );
+ mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.SEARCH_UI, statusChangedListener );
+ mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.MAIN_PAGE_RESUME, statusChangedListener );
+ mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.SEEK_HELPING, statusChangedListener );
+ mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.ACC_STATUS, statusChangedListener );
+ mStatusManager.registerStatusChangedListener( ServiceConst.TYPE, StatusDescriptor.VR_MODE, statusChangedListener );
+ mStatusManager.setAIAssistReady( TAG, AIAssist.getInstance( mContext ).hasFlush() );
+ }
+
+ public void init( Context context ) {
+
+
+ initWorkThread();
+
+ registerMogoReceiver( context );
registerInternalUnWakeupWords();
mRegisterCenter = MarkerServiceHandler.getRegisterCenter();
- mRegisterCenter.registerMogoLocationListener(ServiceConst.TYPE, this);
- mRegisterCenter.registerMogoNaviListener(ServiceConst.TYPE, this);
- mRegisterCenter.registerMogoMapListener(ServiceConst.TYPE, this);
- mRegisterCenter.registerMogoAimlessModeListener(ServiceConst.TYPE, this);
- mRegisterCenter.registerCarLocationChangedListener(ServiceConst.TYPE, this);
+ mRegisterCenter.registerMogoLocationListener( ServiceConst.TYPE, this );
+ mRegisterCenter.registerMogoNaviListener( ServiceConst.TYPE, this );
+ mRegisterCenter.registerMogoMapListener( ServiceConst.TYPE, this );
+ mRegisterCenter.registerMogoAimlessModeListener( ServiceConst.TYPE, this );
+ mRegisterCenter.registerCarLocationChangedListener( ServiceConst.TYPE, this );
mActionManager = MarkerServiceHandler.getActionManager();
mIntentManager = MarkerServiceHandler.getIntentManager();
- mIntentManager.registerIntentListener(MogoReceiver.ACTIION_ADAS, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_VOICE_UI, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_NEXT, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_PREVIOUS, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_SWITCH_CARD, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_MY_LOCATION, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_ADAS_STATUS, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_OPERATION, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_VOICE_READY, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_MOCK, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_ZHIDAO_NEARBY_CAR_ONLINE, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_ZHIDAO_NEARBY_USER_ONLINE, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_BACK, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_AUTO_NAVI_RECEIVER, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_AUTO_NAVI_SEND, this);
- mIntentManager.registerIntentListener(MogoReceiver.ACTION_MOGO, this);
- mIntentManager.registerIntentListener(ServiceConst.COMMAND_ONLINE_CAR_PANEL, this);
- mIntentManager.registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, this);
+ mIntentManager.registerIntentListener( MogoReceiver.ACTIION_ADAS, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_VOICE_UI, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_NEXT, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_PREVIOUS, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_SWITCH_CARD, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_MY_LOCATION, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_ADAS_STATUS, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_OPERATION, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_VOICE_READY, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_MOCK, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_CAR_ONLINE, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_ONLINE, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_USER_ONLINE, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_ZHIDAO_NEARBY_FRIEND_BYLOCATION, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_BACK, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_AUTO_NAVI_RECEIVER, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_AUTO_NAVI_SEND, this );
+ mIntentManager.registerIntentListener( MogoReceiver.ACTION_MOGO, this );
+ mIntentManager.registerIntentListener( ServiceConst.COMMAND_ONLINE_CAR_PANEL, this );
+ mIntentManager.registerIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, this );
mADASController = MarkerServiceHandler.getADASController();
mFragmentManager = MarkerServiceHandler.getFragmentManager();
- mFragmentManager.addMainFragmentStackTransactionListener(this);
+ mFragmentManager.addMainFragmentStackTransactionListener( this );
- CarIconDisplayStrategy.getInstance().changeCarIconStatus(mStatusManager.isSeekHelping());
+ CarIconDisplayStrategy.getInstance().changeCarIconStatus( mStatusManager.isSeekHelping() );
- if (DebugConfig.isLaunchLocationService()) {
- initLocationServiceProcess(context);
+ if ( DebugConfig.isLaunchLocationService() ) {
+ initLocationServiceProcess( context );
}
AutoPilotRemoteController.getInstance().start();
@@ -489,88 +518,220 @@ public class MogoServices implements IMogoMapListener,
Intent intent = new Intent( "com.freedom.ser.ACTION" );
intent.addFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES );
mContext.sendBroadcast( intent );
+ MogoRTKLocation.getInstance().registerRTKLocationListener( cloudLocationInfos -> {
+ Logger.i( TAG, "cloudLocationInfos size : " + cloudLocationInfos.size() );
+ startSendCarLocationAndAdasRecognizedResult2Server( cloudLocationInfos );
+ } );
+
+// SimpleLocationCorrectStrategy.getInstance().setRecordLocationListener((history, correct,valid,err) -> {
+// // todo 打点
+// Logger.d("SimpleCorrect","correct: "+correct);
+// Logger.d("SimpleCorrect","valid: "+valid);
+// Logger.d("SimpleCorrect","err: "+err);
+// ArrayList optionList = new ArrayList<>();
+//// for (CloudLocationInfo h : history) {
+//// MogoMarkerOptions options = new MogoMarkerOptions();
+//// options.position(LocationParseUtil.cloudLocationToMogoLatLng(h));
+//// options.icon(BitmapFactory.decodeResource(context.getResources(),
+//// R.drawable.bg_map_marker_blue));
+//// optionList.add(options);
+//// }
+//
+// for (CloudLocationInfo v : valid) {
+// MogoMarkerOptions options = new MogoMarkerOptions();
+// options.position(LocationParseUtil.cloudLocationToMogoLatLng(v));
+// options.icon(BitmapFactory.decodeResource(context.getResources(),
+// R.drawable.bg_map_marker_oragne));
+// optionList.add(options);
+// }
+//
+// for (CloudLocationInfo c : correct) {
+// MogoMarkerOptions options = new MogoMarkerOptions();
+// options.position(LocationParseUtil.cloudLocationToMogoLatLng(c));
+// options.icon(BitmapFactory.decodeResource(context.getResources(),
+// R.drawable.bg_map_marker_green));
+// optionList.add(options);
+// }
+//
+// for (CloudLocationInfo e : err) {
+// MogoMarkerOptions options = new MogoMarkerOptions();
+// options.position(LocationParseUtil.cloudLocationToMogoLatLng(e));
+// options.icon(BitmapFactory.decodeResource(context.getResources(),
+// R.drawable.bg_map_marker_red));
+// optionList.add(options);
+// }
+// MogoApisHandler.getInstance().getApis().getMapServiceApi().getMarkerManager(context).addMarkers("MogoServices", optionList, false);
+// });
}
- private void initLocationServiceProcess(Context context) {
+ private void initLocationServiceProcess( Context context ) {
try {
Intent intent = new Intent();
- intent.setAction("com.zhidao.locationinfo.service.uploaddataservice");
- ComponentName cn = new ComponentName("com.zhidao.locationinfo", "com.zhidao.locationinfo.service.UploadDataService");
- intent.setComponent(cn);
- context.startService(intent);
- } catch (Exception e) {
- Logger.e(TAG, e, "start location service error.");
+ intent.setAction( "com.zhidao.locationinfo.service.uploaddataservice" );
+ ComponentName cn = new ComponentName( "com.zhidao.locationinfo", "com.zhidao.locationinfo.service.UploadDataService" );
+ intent.setComponent( cn );
+ context.startService( intent );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "start location service error." );
+ }
+ }
+
+
+ private List< List< Double > > coors = new ArrayList<>();
+ private CloudLocationInfo mLastInfo;
+ private void startSendCarLocationAndAdasRecognizedResult2Server( List< CloudLocationInfo > cloudLocationInfo ) {
+// Location lastCarLocation = mLastCarLocation;
+ CloudLocationInfo lastInfo = null;
+ // 如果数组内容不为空,就用数组最后一个值
+ if ( cloudLocationInfo != null && !cloudLocationInfo.isEmpty() ) {
+ lastInfo = cloudLocationInfo.get( cloudLocationInfo.size() - 1 );
+ mLastInfo = lastInfo;
+ }
+ if ( lastInfo == null ) {
+ lastInfo = mLastInfo;
+ }
+ LocationResult locationResult = null;
+ if ( lastInfo != null ) {
+ // 定位点预测纠偏
+ lastInfo = SimpleLocationCorrectStrategy.getInstance().correct( lastInfo );
+ locationResult = new LocationResult();
+ if ( lastInfo != null ) {
+// List coor = new ArrayList<>( );
+// double pos[] = CoordinateUtils.transformFromWGSToGCJ( lastInfo.getLat(), lastInfo.getLon() );
+// coor.add( pos[1]);
+// coor.add(pos[0] );
+// coors.add( coor );
+// if ( coors.size()>50 ) {
+// Logger.d( "Print-coor", GsonUtil.jsonFromObject( coors ) );
+// coors.clear();
+// }
+// moveMarker( lastInfo.getLat(), lastInfo.getLon() );
+ locationResult.lastCoordinate = lastInfo;
+ locationResult.mortonCode = MortonCode.wrapEncodeMorton( lastInfo.getLon(), lastInfo.getLat() );
+ }
+ locationResult.coordinates = new ArrayList<>();
+ locationResult.sn = com.mogo.commons.network.Utils.getSn();
+ if ( cloudLocationInfo == null ) {
+ locationResult.coordinates.addAll( new ArrayList<>() );
+ } else {
+ locationResult.coordinates.addAll( cloudLocationInfo );
+ }
+ }
+ List< ADASRecognizedResult > recognizedResults = MarkerServiceHandler.getADASController().getLastADASRecognizedResult();
+ OnePerSecondSendContent content = new OnePerSecondSendContent();
+ content.self = locationResult;
+ content.adas = recognizedResults;
+
+ Logger.d( TAG, GsonUtil.jsonFromObject( content ) );
+ MarkerServiceHandler.getApis().getWebSocketManagerApi( mContext ).sendMsg( content, new IMogoOnWebSocketMessageListener() {
+ @Override
+ public WebSocketMsgType getDownLinkType() {
+ return null;
+ }
+
+ @Override
+ public WebSocketMsgType getUpLinkType() {
+ return WebSocketMsgType.MSG_TYPE_UPLINK_CAR_DATA;
+ }
+ } );
+ }
+
+ private IMogoMarker marker = null;
+
+ private void moveMarker( double lat, double lon ) {
+ List< Double > coor = new ArrayList<>();
+ double pos[] = CoordinateSystemTransformationUtil.transformWgsToGcj( lat, lon );
+ coor.add( pos[1] );
+ coor.add( pos[0] );
+ coors.add( coor );
+ if ( coors.size() > 50 ) {
+ Logger.d( "Print-coor", GsonUtil.jsonFromObject( coors ) );
+ coors.clear();
+ }
+ if ( marker == null ) {
+ marker = MogoApisHandler.getInstance().getApis()
+ .getMapServiceApi().getMarkerManager( mContext )
+ .addMarker( TAG, new MogoMarkerOptions()
+ .latitude( lat )
+ .longitude( lon )
+ .gps( true )
+ .icon( BitmapFactory.decodeResource( mContext.getResources(), R.drawable.bg_map_marker_blue ) ) )
+ ;
+ }
+ if ( marker != null ) {
+ marker.setPosition( lat, lon );
}
}
private void initWorkThread() {
- mThreadHandler = new Handler(WorkThreadHandler.getInstance().getLooper()) {
+ mThreadHandler = new Handler( WorkThreadHandler.getInstance().getLooper() ) {
@Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- if (msg.what == ServiceConst.MSG_MAP_CHANGED) {
- if (msg.obj instanceof RefreshObject) {
- RefreshObject ro = ((RefreshObject) msg.obj);
- if (invokeRefreshWhenTranslationByUser(ro.mLonLat)) {
- notifyRefreshData(ro.mLonLat, ro.mRadius, ro.mCallback);
+ public void handleMessage( Message msg ) {
+ super.handleMessage( msg );
+ Logger.d( TAG, "current thread: %s, msg = %s", Thread.currentThread(), msg.what );
+ if ( msg.what == ServiceConst.MSG_MAP_CHANGED ) {
+ if ( msg.obj instanceof RefreshObject ) {
+ RefreshObject ro = ( ( RefreshObject ) msg.obj );
+ if ( invokeRefreshWhenTranslationByUser( ro.mLonLat ) ) {
+ notifyRefreshData( ro.mLonLat, ro.mRadius, ro.mCallback );
mLastCustomRefreshCenterLocation = ro.mLonLat;
}
}
- } else if (msg.what == ServiceConst.MSG_REQUEST_DATA) {
- if (msg.obj instanceof RefreshObject) {
- RefreshObject ro = ((RefreshObject) msg.obj);
- if (ro.mLonLat == null) {
+ } else if ( msg.what == ServiceConst.MSG_REQUEST_DATA ) {
+ if ( msg.obj instanceof RefreshObject ) {
+ RefreshObject ro = ( ( RefreshObject ) msg.obj );
+ if ( ro.mLonLat == null ) {
invokeAutoRefreshStrategy();
- Logger.w(TAG, "lonLat is null.");
+ Logger.w( TAG, "lonLat is null." );
return;
}
- mRefreshModel.refreshExplorerWayData(ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback);
- MapMarkerManager.getInstance().getOnlineCarDataByAutoRefreshStrategy(ro.mLonLat);
+ mRefreshModel.refreshExplorerWayData( ro.mLonLat, ro.mRadius, ro.mAmount, ro.mCallback );
+// MapMarkerManager.getInstance().getOnlineCarDataByAutoRefreshStrategy( ro.mLonLat );
Logger.i(TAG, "刷新半径 = %s, 点 = %s, zoomLevel = %s, amount = %s", ro.mRadius, ro.mLonLat, mLastZoomLevel, ro.mAmount);
}
- } else if (msg.what == ServiceConst.MSG_LOCK_CAR) {
- if (mStatusManager.isSearchUIShow()) {
+ } else if ( msg.what == ServiceConst.MSG_LOCK_CAR ) {
+ if ( mStatusManager.isSearchUIShow() ) {
return;
}
- mStatusManager.setUserInteractionStatus(TAG, true, false);
+ mStatusManager.setUserInteractionStatus( TAG, true, false );
mUiController.recoverLockMode();
}
}
};
}
- private void registerMogoReceiver(Context context) {
- if (context == null) {
+ private void registerMogoReceiver( Context context ) {
+ if ( context == null ) {
return;
}
- List modules = MogoModulePaths.getModules();
- if (modules.isEmpty() || modules == null) {
+ List< MogoModule > modules = MogoModulePaths.getModules();
+ if ( modules.isEmpty() || modules == null ) {
return;
}
- mAIAssistReceiver = new MogoReceiver(context);
+ mAIAssistReceiver = new MogoReceiver( context );
IntentFilter filter = new IntentFilter();
- if (modules != null && !modules.isEmpty()) {
- for (MogoModule module : modules) {
- if (TextUtils.isEmpty(module.getBroadcastAction())) {
+ if ( modules != null && !modules.isEmpty() ) {
+ for ( MogoModule module : modules ) {
+ if ( TextUtils.isEmpty( module.getBroadcastAction() ) ) {
continue;
}
- filter.addAction(module.getBroadcastAction());
+ filter.addAction( module.getBroadcastAction() );
}
}
- filter.addAction(MogoReceiver.VOICE_ACTION);
- filter.addAction(MogoReceiver.ACTIION_ADAS);
+ filter.addAction( MogoReceiver.VOICE_ACTION );
+ filter.addAction( MogoReceiver.ACTIION_ADAS );
// 小智语音
- filter.addAction(MogoReceiver.ACTION_VOICE_UI);
- filter.addAction(MogoReceiver.ACTION_ADAS_STATUS);
- filter.addAction(MogoReceiver.ACTION_VOICE_READY);
- filter.addAction(MogoReceiver.ACTION_MOCK);
- filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
- filter.addAction(MogoReceiver.ACTION_AUTO_NAVI_RECEIVER);
- filter.addAction(MogoReceiver.ACTION_AUTO_NAVI_SEND);
- filter.addAction(MogoReceiver.ACTION_MOGO);
- filter.addAction(MogoReceiver.ACTION_TXZ_BLOCK_SEARCH);
- filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ filter.addAction( MogoReceiver.ACTION_VOICE_UI );
+ filter.addAction( MogoReceiver.ACTION_ADAS_STATUS );
+ filter.addAction( MogoReceiver.ACTION_VOICE_READY );
+ filter.addAction( MogoReceiver.ACTION_MOCK );
+ filter.addAction( Intent.ACTION_CLOSE_SYSTEM_DIALOGS );
+ filter.addAction( MogoReceiver.ACTION_AUTO_NAVI_RECEIVER );
+ filter.addAction( MogoReceiver.ACTION_AUTO_NAVI_SEND );
+ filter.addAction( MogoReceiver.ACTION_MOGO );
+ filter.addAction( MogoReceiver.ACTION_TXZ_BLOCK_SEARCH );
+ filter.addAction( ConnectivityManager.CONNECTIVITY_ACTION );
try {
context.getApplicationContext().registerReceiver(mAIAssistReceiver, filter);
} catch (Exception e) {
@@ -584,7 +745,7 @@ public class MogoServices implements IMogoMapListener,
}
private void initMapStatus() {
- if (mIsMapStatusOk) {
+ if ( mIsMapStatusOk ) {
return;
}
try {
@@ -592,7 +753,7 @@ public class MogoServices implements IMogoMapListener,
float height = getMapCameraFactHeight();
mIsVertical = width < height;
mIsMapStatusOk = true;
- } catch (Exception e) {
+ } catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -602,8 +763,8 @@ public class MogoServices implements IMogoMapListener,
*/
private float getMapCameraFactWidth() {
try {
- return Utils.calculateLineDistance(mCameraNorthEastPosition, new MogoLatLng(mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng));
- } catch (Exception e) {
+ return Utils.calculateLineDistance( mCameraNorthEastPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) );
+ } catch ( Exception e ) {
return ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS;
}
}
@@ -613,30 +774,30 @@ public class MogoServices implements IMogoMapListener,
*/
private float getMapCameraFactHeight() {
try {
- return Utils.calculateLineDistance(mCameraSouthWestPosition, new MogoLatLng(mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng));
- } catch (Exception e) {
+ return Utils.calculateLineDistance( mCameraSouthWestPosition, new MogoLatLng( mCameraNorthEastPosition.lat, mCameraSouthWestPosition.lng ) );
+ } catch ( Exception e ) {
return ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS;
}
}
@Override
- public void onTouch(MotionEvent motionEvent) {
- switch (motionEvent.getActionMasked()) {
+ public void onTouch( MotionEvent motionEvent ) {
+ switch ( motionEvent.getActionMasked() ) {
case MotionEvent.ACTION_DOWN:
- if (mLastZoomLevel == 0) {
+ if ( mLastZoomLevel == 0 ) {
mLastZoomLevel = mUiController.getZoomLevel();
}
break;
case MotionEvent.ACTION_UP:
- restartAutoRefreshAtTime(ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT, false);
- mThreadHandler.removeMessages(ServiceConst.MSG_LOCK_CAR);
- mThreadHandler.sendEmptyMessageDelayed(ServiceConst.MSG_LOCK_CAR, ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT);
+ restartAutoRefreshAtTime( ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT, false );
+ mThreadHandler.removeMessages( ServiceConst.MSG_LOCK_CAR );
+ mThreadHandler.sendEmptyMessageDelayed( ServiceConst.MSG_LOCK_CAR, ServiceConst.DEFAULT_AUTO_REFRESH_WHEN_INTERRUPT );
break;
}
}
private void stopAutoRefreshStrategy() {
- stopAutoRefreshStrategy(true);
+ stopAutoRefreshStrategy( true );
}
private void stopAutoRefreshStrategy(boolean stopOnlineCarRefresh) {
@@ -655,11 +816,11 @@ public class MogoServices implements IMogoMapListener,
}
@Override
- public void onMapChanged(MogoLatLng latLng, float zoom, float tilt, float bearing) {
+ public void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ) {
- MapMarkerManager.getInstance().syncLocation(latLng.lon, latLng.lat);
+ MapMarkerManager.getInstance().syncLocation( latLng.lon, latLng.lat );
- if (mIsCameraInited) {
+ if ( mIsCameraInited ) {
mLastZoomLevel = zoom;
mLastCustomRefreshCenterLocation = latLng;
mIsCameraInited = false;
@@ -669,35 +830,35 @@ public class MogoServices implements IMogoMapListener,
// 部分非用户操作导致地图视图变化:绘线、圈点等不触发用户刷新
// 消费状态
- if (mStatusManager.isUserInteracted()) {
+ if ( mStatusManager.isUserInteracted() ) {
mLastCustomRefreshCenterLocation = latLng;
mLastZoomLevel = zoom;
return;
}
// v2x // adas 状态下不做任何操作
- if (mStatusManager.isV2XShow()) {
+ if ( mStatusManager.isV2XShow() ) {
mLastCustomRefreshCenterLocation = latLng;
mLastZoomLevel = zoom;
return;
}
// 搜索页面显示时不做任何策略
- if (mStatusManager.isSearchUIShow()) {
+ if ( mStatusManager.isSearchUIShow() ) {
mLastCustomRefreshCenterLocation = latLng;
mLastZoomLevel = zoom;
return;
}
// 手动刷新触发
- if (mLastZoomLevel - zoom > mCustomRefreshStrategy.getZoomOutLevel()) {
+ if ( mLastZoomLevel - zoom > mCustomRefreshStrategy.getZoomOutLevel() ) {
// 缩放级别缩小
- notifyRefreshData(latLng, getQueryRadius(), mCustomRefreshCallback);
+ notifyRefreshData( latLng, getQueryRadius(), mCustomRefreshCallback );
mLastCustomRefreshCenterLocation = latLng;
mLastZoomLevel = zoom;
- } else if (mLastZoomLevel - zoom < 0) {
+ } else if ( mLastZoomLevel - zoom < 0 ) {
mLastZoomLevel = zoom;
- } else if (mLastZoomLevel == zoom) {
+ } else if ( mLastZoomLevel == zoom ) {
// 手动平移
Message msg = Message.obtain();
msg.what = ServiceConst.MSG_MAP_CHANGED;
@@ -710,12 +871,12 @@ public class MogoServices implements IMogoMapListener,
mCameraSouthWestPosition = mUiController.getCameraSouthWestPosition();
mCameraNorthEastPosition = mUiController.getCameraNorthEastPosition();
int radius = 0;
- if (mIsVertical) {
- radius = ((int) (getMapCameraFactWidth() / 2));
+ if ( mIsVertical ) {
+ radius = ( ( int ) ( getMapCameraFactWidth() / 2 ) );
} else {
- radius = ((int) (getMapCameraFactHeight() / 2));
+ radius = ( ( int ) ( getMapCameraFactHeight() / 2 ) );
}
- if (radius < 1000) {
+ if ( radius < 1000 ) {
return 1_000;
}
return radius;
@@ -724,15 +885,15 @@ public class MogoServices implements IMogoMapListener,
/**
* 平移地图刷新策略
*/
- private boolean invokeRefreshWhenTranslationByUser(MogoLatLng latLng) {
+ private boolean invokeRefreshWhenTranslationByUser( MogoLatLng latLng ) {
try {
float factor = 0.0f;
- if (mIsVertical) {
+ if ( mIsVertical ) {
factor = getMapCameraFactWidth();
} else {
factor = getMapCameraFactHeight();
}
- if (factor == 0.0f) {
+ if ( factor == 0.0f ) {
return false;
}
float distance = Utils.calculateLineDistance(latLng, mLastCustomRefreshCenterLocation);
@@ -762,28 +923,28 @@ public class MogoServices implements IMogoMapListener,
return;
}
- if (mStatusManager.isSearchUIShow()) {
+ if ( mStatusManager.isSearchUIShow() ) {
return;
}
- if (location == null) {
+ if ( location == null ) {
return;
}
// 自动刷新触发
- final MogoLatLng point = new MogoLatLng(location.getLatitude(), location.getLongitude());
- if (mLastAutoRefreshLocation == null) {
- startFirstLocationRequest(point);
+ final MogoLatLng point = new MogoLatLng( location.getLatitude(), location.getLongitude() );
+ if ( mLastAutoRefreshLocation == null ) {
+ startFirstLocationRequest( point );
return;
}
- float distance = Utils.calculateLineDistance(mLastAutoRefreshLocation, point);
- if (distance > mAutoRefreshStrategy.getDistance()) {
- mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false);
+ float distance = Utils.calculateLineDistance( mLastAutoRefreshLocation, point );
+ if ( distance > mAutoRefreshStrategy.getDistance() ) {
+ mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false );
mUiController.recoverLockMode();
- mStatusManager.setUserInteractionStatus(TAG, true, false);
- mUiController.changeZoom(ServiceConst.DEFAULT_ZOOM_LEVEL);
+ mStatusManager.setUserInteractionStatus( TAG, true, false );
+ mUiController.changeZoom( ServiceConst.DEFAULT_ZOOM_LEVEL );
mLastAutoRefreshLocation = point;
- notifyRefreshData(mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback);
+ notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback );
}
}
@@ -792,26 +953,27 @@ public class MogoServices implements IMogoMapListener,
*
* @param point
*/
- private void startFirstLocationRequest(MogoLatLng point) {
+ private void startFirstLocationRequest( MogoLatLng point ) {
mLastAutoRefreshLocation = point;
mLoopRequest = true;
- notifyRefreshData(mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback);
+ notifyRefreshData( mLastAutoRefreshLocation, getQueryRadius(), mAutoRefreshCallback );
}
@Override
- public void onCarLocationChanged2(Location latLng) {
- if (latLng == null) {
+ public void onCarLocationChanged2( Location latLng ) {
+ if ( latLng == null ) {
return;
}
+ mLastCarLocation = latLng;
// poi 定位无法获取时,使用该定位
- if (mLastAutoRefreshLocation == null) {
- MogoLatLng point = new MogoLatLng(latLng.getLatitude(), latLng.getLongitude());
- startFirstLocationRequest(point);
+ if ( mLastAutoRefreshLocation == null ) {
+ MogoLatLng point = new MogoLatLng( latLng.getLatitude(), latLng.getLongitude() );
+ startFirstLocationRequest( point );
}
}
@Override
- public void onCarLocationChanged(MogoLatLng latLng) {
+ public void onCarLocationChanged( MogoLatLng latLng ) {
}
@@ -839,33 +1001,35 @@ public class MogoServices implements IMogoMapListener,
Message msg = Message.obtain();
msg.what = ServiceConst.MSG_REQUEST_DATA;
- msg.obj = new RefreshObject(callback, radius, latLng, amount);
- mThreadHandler.sendMessage(msg);
- }
-
- private void notifySeekHelpingStatusChanged(boolean seekHelpingStatus) {
- Intent intent = new Intent("com.mogo.launcher.adas.app");
- try {
- JSONObject data = new JSONObject();
- data.put("object", "辅助驾驶");
- data.put("action", seekHelpingStatus ? "2" : "1");
- data.put("des", "自身故障报警");
- data.put("v2x_warning_type", "20007");// 后台返回
- intent.putExtra("data", data.toString());
- mContext.sendBroadcast(intent);
- } catch (Exception e) {
- Logger.e(TAG, e, "error.");
+ msg.obj = new RefreshObject( callback, radius, latLng, amount );
+ if ( mThreadHandler != null ) {
+ mThreadHandler.sendMessage( msg );
}
}
- public void restartAutoRefreshAtTime(long time) {
- restartAutoRefreshAtTime(time, true);
+ private void notifySeekHelpingStatusChanged( boolean seekHelpingStatus ) {
+ Intent intent = new Intent( "com.mogo.launcher.adas.app" );
+ try {
+ JSONObject data = new JSONObject();
+ data.put( "object", "辅助驾驶" );
+ data.put( "action", seekHelpingStatus ? "2" : "1" );
+ data.put( "des", "自身故障报警" );
+ data.put( "v2x_warning_type", "20007" );// 后台返回
+ intent.putExtra( "data", data.toString() );
+ mContext.sendBroadcast( intent );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "error." );
+ }
+ }
+
+ public void restartAutoRefreshAtTime( long time ) {
+ restartAutoRefreshAtTime( time, true );
}
public void clearAllData() {
try {
- MarkerServiceHandler.getMapService().getMarkerManager(mContext).removeMarkers();
- } catch (Exception e) {
+ MarkerServiceHandler.getMapService().getMarkerManager( mContext ).removeMarkers();
+ } catch ( Exception e ) {
e.printStackTrace();
}
}
@@ -891,47 +1055,47 @@ public class MogoServices implements IMogoMapListener,
public void refreshStrategy() {
mStatusManager.setUserInteractionStatus(ServiceConst.TYPE, true, false);
mUiController.recoverLockMode();// 锁车代替移到中心点
- restartAutoRefreshAtTime(0);
+ restartAutoRefreshAtTime( 0 );
}
@Override
- public void onUpdateTraffic2(MogoTraffic traffic) {
+ public void onUpdateTraffic2( MogoTraffic traffic ) {
- if (traffic == null) {
+ if ( traffic == null ) {
return;
}
- if (mCurrentLimit == traffic.getSpeedLimit()) {
+ if ( mCurrentLimit == traffic.getSpeedLimit() ) {
return;
}
mCurrentLimit = traffic.getSpeedLimit();
- Logger.i(TAG, "speed = %d, desc = %s", traffic.getSpeedLimit(), traffic.getDesc());
+ Logger.i( TAG, "speed = %d, desc = %s", traffic.getSpeedLimit(), traffic.getDesc() );
// 发送当前限速到 adas
- Intent intent = new Intent("com.mogo.launcher.adas");
- intent.putExtra("adas_speed_limit", traffic.getSpeedLimit());
- mContext.sendBroadcast(intent);
+ Intent intent = new Intent( "com.mogo.launcher.adas" );
+ intent.putExtra( "adas_speed_limit", traffic.getSpeedLimit() );
+ mContext.sendBroadcast( intent );
}
@Override
- public void onUpdateCongestion(MogoCongestionInfo info) {
+ public void onUpdateCongestion( MogoCongestionInfo info ) {
}
@Override
- public void onIntentReceived(String command, Intent intent) {
+ public void onIntentReceived( String command, Intent intent ) {
- if (ServiceConst.COMMAND_NEXT.equals(command)) {
- onActionDone(MogoAction.Next);
- } else if (ServiceConst.COMMAND_PREVIOUS.equals(command)) {
- onActionDone(MogoAction.Prev);
+ if ( ServiceConst.COMMAND_NEXT.equals( command ) ) {
+ onActionDone( MogoAction.Next );
+ } else if ( ServiceConst.COMMAND_PREVIOUS.equals( command ) ) {
+ onActionDone( MogoAction.Prev );
} else {
- if (TextUtils.equals(command, ConnectivityManager.CONNECTIVITY_ACTION)
- && NetworkUtils.isConnected(mContext)) {
- mIntentManager.unregisterIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, this);
+ if ( TextUtils.equals( command, ConnectivityManager.CONNECTIVITY_ACTION )
+ && NetworkUtils.isConnected( mContext ) ) {
+ mIntentManager.unregisterIntentListener( ConnectivityManager.CONNECTIVITY_ACTION, this );
}
- IntentHandlerFactory.getInstance().handle(mContext, command, intent);
+ IntentHandlerFactory.getInstance().handle( mContext, command, intent );
}
}
@@ -939,102 +1103,102 @@ public class MogoServices implements IMogoMapListener,
* 注册桌面免唤醒指令
*/
private void registerInternalUnWakeupWords() {
- if (mInternalUnWakeupRegisterStatus) {
+ if ( mInternalUnWakeupRegisterStatus ) {
return;
}
mInternalUnWakeupRegisterStatus = true;
// AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_UN_WAKE_PREV,ServiceConst.CMD_UN_WAKE_PREV_UN_WAKE_WORDS, this );
// AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_UN_WAKE_NEXT,ServiceConst.CMD_UN_WAKE_NEXT_UN_WAKE_WORDS, this );
- AIAssist.getInstance(mContext).registerUnWakeupCommand(ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, ServiceConst.CMD_UN_WAKEUP_WORDS_MY_LOCATION, this);
+ AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, ServiceConst.CMD_UN_WAKEUP_WORDS_MY_LOCATION, this );
}
/**
* 注销桌面免唤醒指令
*/
private void unregisterInternalUnWakeupWords() {
- if (!mInternalUnWakeupRegisterStatus) {
+ if ( !mInternalUnWakeupRegisterStatus ) {
return;
}
mInternalUnWakeupRegisterStatus = false;
// AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_UN_WAKE_PREV, this );
// AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_UN_WAKE_NEXT, this );
- AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, this);
+ AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, this );
}
@Override
- public void onCmdSelected(String cmd) {
- if (TextUtils.equals(ServiceConst.CMD_UN_WAKE_PREV, cmd)) {
- onActionDone(MogoAction.Prev);
- } else if (TextUtils.equals(ServiceConst.CMD_UN_WAKE_NEXT, cmd)) {
- onActionDone(MogoAction.Next);
- } else if (TextUtils.equals(ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, cmd)) {
- if (mStatusManager.isMainPageOnResume()) {
+ public void onCmdSelected( String cmd ) {
+ if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_PREV, cmd ) ) {
+ onActionDone( MogoAction.Prev );
+ } else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKE_NEXT, cmd ) ) {
+ onActionDone( MogoAction.Next );
+ } else if ( TextUtils.equals( ServiceConst.CMD_UN_WAKEUP_MY_LOCATION, cmd ) ) {
+ if ( mStatusManager.isMainPageOnResume() ) {
mUiController.recoverLockMode();
}
- } else if (TextUtils.equals(ServiceConst.CMD_BACK, cmd)) {
+ } else if ( TextUtils.equals( ServiceConst.CMD_BACK, cmd ) ) {
mFragmentManager.clearAll();
}
}
- private void onActionDone(MogoAction action) {
- if (!mStatusManager.isMainPageOnResume()) {
+ private void onActionDone( MogoAction action ) {
+ if ( !mStatusManager.isMainPageOnResume() ) {
return;
}
- if (mStatusManager.isV2XShow()) {
+ if ( mStatusManager.isV2XShow() ) {
// 分发到V2X
- mActionManager.invoke("V2X_UI", action);
+ mActionManager.invoke( "V2X_UI", action );
} else {
String biz = MapMarkerManager.getInstance().getCurrentModuleName();
- mActionManager.invoke(biz, action);
+ mActionManager.invoke( biz, action );
}
}
@Override
- public void onTransaction(int size) {
- if (size == 0) {
- mUiController.showMyLocation(true);
- AIAssist.getInstance(mContext).unregisterUnWakeupCommand(ServiceConst.CMD_BACK);
- if (mStatusManager.isSearchUIShow()) {
- mStatusManager.setSearchUIShow(TAG, false);
+ public void onTransaction( int size ) {
+ if ( size == 0 ) {
+ mUiController.showMyLocation( true );
+ AIAssist.getInstance( mContext ).unregisterUnWakeupCommand( ServiceConst.CMD_BACK );
+ if ( mStatusManager.isSearchUIShow() ) {
+ mStatusManager.setSearchUIShow( TAG, false );
}
- if (mNavi.isNaviing()) {
- MapCenterPointStrategy.setMapCenterPointByScene(mUiController, Scene.NAVI);
+ if ( mNavi.isNaviing() ) {
+ MapCenterPointStrategy.setMapCenterPointByScene( mUiController, Scene.NAVI );
} else {
- MapCenterPointStrategy.setMapCenterPointByScene(mUiController, Scene.AIMLESS);
+ MapCenterPointStrategy.setMapCenterPointByScene( mUiController, Scene.AIMLESS );
}
mUiController.recoverLockMode();
mADASController.showADAS();
} else {
- mUiController.showMyLocation(false);
- AIAssist.getInstance(mContext).registerUnWakeupCommand(ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this);
+ mUiController.showMyLocation( false );
+ AIAssist.getInstance( mContext ).registerUnWakeupCommand( ServiceConst.CMD_BACK, ServiceConst.CMD_BACK_WORDS, this );
}
}
@Override
public void onStartNavi() {
- if (DebugConfig.isIsScheduleCalculateNotHomeCompanyDistanceForPush()) {
- Logger.d(TAG, "onStartNavi: scheduleCalculationNotHomeCompanyDistanceForPush");
- scheduleCalculationNotHomeCompanyDistanceForPush(1, ServiceConst.INTERVAL_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH);
+ if ( DebugConfig.isIsScheduleCalculateNotHomeCompanyDistanceForPush() ) {
+ Logger.d( TAG, "onStartNavi: scheduleCalculationNotHomeCompanyDistanceForPush" );
+ scheduleCalculationNotHomeCompanyDistanceForPush( 1, ServiceConst.INTERVAL_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH );
} else {
- Logger.d(TAG, "onStartNavi: scheduleCalculationNotHomeCompanyDistanceForPush un support");
+ Logger.d( TAG, "onStartNavi: scheduleCalculationNotHomeCompanyDistanceForPush un support" );
}
}
@Override
public void onStopNavi() {
- SpStorage.setNavigationTarget("");
- Logger.d(TAG, "onStopNavi: remove MSG_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH msg");
- mHandler.removeMessages(ServiceConst.MSG_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH);
+ SpStorage.setNavigationTarget( "" );
+ Logger.d( TAG, "onStopNavi: remove MSG_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH msg" );
+ mHandler.removeMessages( ServiceConst.MSG_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH );
}
/**
* 延时一分钟发起计算导航目的地推送策略
*/
- private void scheduleCalculationNotHomeCompanyDistanceForPush(int time, long delay) {
+ private void scheduleCalculationNotHomeCompanyDistanceForPush( int time, long delay ) {
Message msg = Message.obtain();
msg.what = ServiceConst.MSG_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH;
msg.arg1 = time;
- mHandler.sendMessageDelayed(msg, delay);
+ mHandler.sendMessageDelayed( msg, delay );
}
/**
@@ -1042,50 +1206,50 @@ public class MogoServices implements IMogoMapListener,
*
* @param time 第x次重试
*/
- private void handleCalculationNotHomeCompanyDistanceForPush(final int time) {
- if (time > 3) {
+ private void handleCalculationNotHomeCompanyDistanceForPush( final int time ) {
+ if ( time > 3 ) {
return;
}
String json = SpStorage.getNavigationTarget();
- if (!TextUtils.isEmpty(json)) {
+ if ( !TextUtils.isEmpty( json ) ) {
try {
- NavigationTargetInfo info = GsonUtil.objectFromJson(json, NavigationTargetInfo.class);
+ NavigationTargetInfo info = GsonUtil.objectFromJson( json, NavigationTargetInfo.class );
- Logger.d(TAG, "info = %s", info);
+ Logger.d( TAG, "info = %s", info );
HomeCompanyDistanceForPushData data = new HomeCompanyDistanceForPushData();
- data.lat = Double.valueOf(info.getToPoiLatitude());
- data.lon = Double.valueOf(info.getToPoiLongitude());
+ data.lat = Double.valueOf( info.getToPoiLatitude() );
+ data.lon = Double.valueOf( info.getToPoiLongitude() );
- final Map query = new ParamsProvider.Builder(mContext).build();
- query.put("data", GsonUtil.jsonFromObject(data));
- mRefreshModel.getRefreshApiService().calculationNotHomeCompanyDistanceForPush(query)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new SubscribeImpl(RequestOptions.create(mContext)) {
+ final Map< String, Object > query = new ParamsProvider.Builder( mContext ).build();
+ query.put( "data", GsonUtil.jsonFromObject( data ) );
+ mRefreshModel.getRefreshApiService().calculationNotHomeCompanyDistanceForPush( query )
+ .subscribeOn( Schedulers.io() )
+ .observeOn( AndroidSchedulers.mainThread() )
+ .subscribe( new SubscribeImpl< HomeCompanyDistanceForPushResponse >( RequestOptions.create( mContext ) ) {
@Override
- public void onSuccess(HomeCompanyDistanceForPushResponse o) {
- super.onSuccess(o);
- if (o != null && o.result != null) {
- Logger.d(TAG, "calculationNotHomeCompanyDistanceForPush result %s", o.result.pushFlag);
+ public void onSuccess( HomeCompanyDistanceForPushResponse o ) {
+ super.onSuccess( o );
+ if ( o != null && o.result != null ) {
+ Logger.d( TAG, "calculationNotHomeCompanyDistanceForPush result %s", o.result.pushFlag );
}
}
@Override
- public void onError(Throwable e) {
- super.onError(e);
- Logger.d(TAG, "re scheduleCalculationNotHomeCompanyDistanceForPush after 30s");
+ public void onError( Throwable e ) {
+ super.onError( e );
+ Logger.d( TAG, "re scheduleCalculationNotHomeCompanyDistanceForPush after 30s" );
// 延时30s重试
- scheduleCalculationNotHomeCompanyDistanceForPush(time + 1, 30_000L);
+ scheduleCalculationNotHomeCompanyDistanceForPush( time + 1, 30_000L );
}
@Override
- public void onError(String message, int code) {
- super.onError(message, code);
+ public void onError( String message, int code ) {
+ super.onError( message, code );
}
- });
- } catch (Exception e) {
- Logger.e(TAG, e, "handleCalculationNotHomeCompanyDistanceForPush");
+ } );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "handleCalculationNotHomeCompanyDistanceForPush" );
}
}
@@ -1093,6 +1257,10 @@ public class MogoServices implements IMogoMapListener,
@Override
public void destroy() {
- Logger.d(TAG, "MogoServices do nothings.");
+ Logger.d( TAG, "MogoServices do nothings." );
+ }
+
+ public Location getLastCarLocation() {
+ return mLastCarLocation;
}
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java
index 1a0020979f..2a9a653b21 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/ServiceConst.java
@@ -117,10 +117,6 @@ public class ServiceConst {
*/
public static final int MSG_LOCK_CAR = 0x202;
- public static final int MARKER_Z_INDEX_HIGH = 100;
- public static final int MARKER_Z_INDEX_LOW = 2;
-
-
/**
* 切换卡片内容-上一个
*/
@@ -223,4 +219,24 @@ public class ServiceConst {
*/
public static final long INTERVAL_SCHEDULE_CALCULATE_NOT_HOME_COMPANY_DISTANCE_FOR_PUSH = 60 * 1_000L;
+ /**
+ * 发送自车位置和adas识别结果给服务端
+ */
+ public static final int MSG_SEND_CAR_LOCATION_AND_ADAS_RECOGNIZED_RESULT_2_SERVER = 0x401;
+
+ /**
+ * 间隔 1s 发送一次
+ */
+ public static final long INTERVAL_SEND_CAR_LOCATION_AND_ADAS_RECOGNIZED_RESULT_2_SERVER = 1 * 1_000L;
+
+ /**
+ * adas识别数据
+ */
+ public static final String TYPE_MARKER_ADAS = "TYPE_MARKER_ADAS";
+
+ /**
+ * 云端下发数据
+ */
+ public static final String TYPE_MARKER_CLOUD_DATA = "TYPE_MARKER_CLOUD_DATA";
+
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java
index 8b86e558bf..34dbd925e4 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/StatusChangedAdapter.java
@@ -13,7 +13,7 @@ public
abstract class StatusChangedAdapter implements IMogoStatusChangedListener {
@Override
- public void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
+ public final void onStatusChanged( StatusDescriptor descriptor, boolean isTrue ) {
switch ( descriptor ) {
case USER_INTERACTED:
onUserInteracted( isTrue );
@@ -33,6 +33,9 @@ abstract class StatusChangedAdapter implements IMogoStatusChangedListener {
case ACC_STATUS:
onAccStatusChanged( isTrue );
break;
+ case VR_MODE:
+ onVrModeChanged( isTrue );
+ break;
case TOP_VIEW:
onTopViewStatusChanged( isTrue );
break;
@@ -51,5 +54,7 @@ abstract class StatusChangedAdapter implements IMogoStatusChangedListener {
public abstract void onAccStatusChanged( boolean accOn );
+ public abstract void onVrModeChanged( boolean isVrMode );
+
public abstract void onTopViewStatusChanged( boolean visible );
}
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 c0ce944161..c07f329b04 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,6 +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.service.connection.IMogoOnMessageListener;
import com.mogo.service.connection.IMogoSocketManager;
import com.mogo.utils.logger.Logger;
@@ -22,21 +23,21 @@ class AutoPilotRemoteController {
private IMogoSocketManager mMogoSocketManager;
- private IMogoOnMessageListener< AutoPilotParameters > mParametersListener = new IMogoOnMessageListener< AutoPilotParameters >() {
+ private IMogoOnMessageListener< RemoteControlAutoPilotParameters > mParametersListener = new IMogoOnMessageListener< RemoteControlAutoPilotParameters >() {
@Override
- public Class< AutoPilotParameters > target() {
- return AutoPilotParameters.class;
+ public Class< RemoteControlAutoPilotParameters > target() {
+ return RemoteControlAutoPilotParameters.class;
}
@Override
- public void onMsgReceived( AutoPilotParameters obj ) {
+ public void onMsgReceived( RemoteControlAutoPilotParameters obj ) {
if ( obj == null ) {
Logger.e( TAG, "远端控制参数为null", new NullPointerException() );
return;
}
String json = GsonUtil.jsonFromObject( obj );
Logger.d( TAG, json );
- MogoApisHandler.getInstance().getApis().getAdasControllerApi().notifyAdas( json );
+ MogoApisHandler.getInstance().getApis().getAdasControllerApi().aiCloudToAdasData( obj );
}
};
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java
index b97dcb12fc..7b6ad75bf7 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/AppOperationIntentHandler.java
@@ -4,6 +4,9 @@ import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.service.MarkerServiceHandler;
+import com.mogo.module.service.ServiceConst;
import com.mogo.utils.LaunchUtils;
import com.mogo.utils.TipToast;
@@ -24,6 +27,7 @@ public class AppOperationIntentHandler implements IntentHandler {
public AppOperationIntentHandler() {
// sAppPackages.put( "车聊聊", "com.zhidao.imdemo" );
+// sAppPackages.put( "VR模式", "" );
}
@Override
@@ -33,6 +37,12 @@ public class AppOperationIntentHandler implements IntentHandler {
String app = object.optString( "object" );
String operation = object.optString( "operation" );
if ( TextUtils.equals( "打开", operation ) ) {
+ if ( TextUtils.equals( "VR模式", app ) ) {
+ if ( MarkerServiceHandler.getApis().getStatusManagerApi().isMainPageOnResume() ) {
+ MarkerServiceHandler.getApis().getMapFrameControllerApi().changeToVRMode();
+ }
+ return;
+ }
if ( TextUtils.isEmpty( sAppPackages.get( app ) ) ) {
return;
}
@@ -41,6 +51,13 @@ public class AppOperationIntentHandler implements IntentHandler {
} catch ( Exception e ) {
TipToast.shortTip( "应用程序未安装" );
}
+ } else if ( TextUtils.equals( "关闭", operation ) ) {
+ if ( TextUtils.equals( "VR模式", app ) ) {
+ if ( MarkerServiceHandler.getApis().getStatusManagerApi().isMainPageOnResume() ) {
+ MarkerServiceHandler.getApis().getMapFrameControllerApi().changeTo2dMode();
+ }
+ return;
+ }
}
} catch ( Exception e ) {
e.printStackTrace();
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
index 1bbd2b895a..1fed0baacf 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/intent/MockIntentHandler.java
@@ -23,6 +23,7 @@ import com.mogo.map.search.geo.IMogoGeoSearchListener;
import com.mogo.map.search.geo.MogoGeocodeResult;
import com.mogo.map.search.geo.MogoRegeocodeResult;
import com.mogo.map.search.geo.query.MogoRegeocodeQuery;
+import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.dialog.WMDialog;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.R;
@@ -31,6 +32,7 @@ import com.mogo.utils.TipToast;
import com.mogo.utils.WorkThreadHandler;
import com.mogo.utils.logger.Logger;
import com.mogo.utils.network.utils.GsonUtil;
+import com.mogo.utils.storage.SharedPrefsMgr;
import java.util.ArrayList;
import java.util.List;
@@ -334,6 +336,10 @@ public class MockIntentHandler implements IntentHandler {
case 17:
DebugConfig.setRequestOnlineCarData( intent.getBooleanExtra( "status", true ) );
break;
+ case 18:
+ TipToast.shortTip( "设置完成,下次启动生效" );
+ SharedPrefsMgr.getInstance( context ).putBoolean( "useCustomMap", intent.getBooleanExtra( "useCustomMap", false ) );
+ break;
case 30:
MarkerServiceHandler.getMapService().getMapUIController().forceRender();
break;
@@ -350,6 +356,14 @@ public class MockIntentHandler implements IntentHandler {
case 33:
AIAssist.getInstance( context ).speakTTSVoice( "庞帆说这个是一个 hard coding." );
break;
+ case 34:
+ int type = intent.getIntExtra( "type", 0 );
+ if ( type != 0 ) {
+ MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeToVRMode();
+ } else {
+ MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().changeTo2dMode();
+ }
+ break;
}
}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java
new file mode 100644
index 0000000000..7b06835deb
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/location/MogoRTKLocation.java
@@ -0,0 +1,170 @@
+package com.mogo.module.service.location;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.location.Criteria;
+import android.location.Location;
+import android.location.LocationListener;
+import android.location.LocationManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.module.common.entity.CloudLocationInfo;
+import com.mogo.utils.WorkThreadHandler;
+import com.mogo.utils.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MogoRTKLocation {
+
+ private static final String TAG = "MogoRTKLocation";
+ private static final int MSG_DATA_CHANGED = 0x100;
+ private static final long MSG_DATA_INTERNAL = 500L;
+
+ private Handler mHandler;
+ private LocationManager locationManager;
+ private RTKLocationListener rtkLocationListener;
+ private List cacheList = new ArrayList<>();
+
+ public static MogoRTKLocation getInstance() {
+ return RTKHolder.rtkLoc;
+ }
+
+ private static class RTKHolder {
+ private static final MogoRTKLocation rtkLoc = new MogoRTKLocation();
+ }
+
+ private MogoRTKLocation() {
+ mHandler = new Handler(WorkThreadHandler.newInstance( TAG ).getLooper() ) {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ if (msg.what == MSG_DATA_CHANGED) {
+ mHandler.sendEmptyMessageDelayed(MSG_DATA_CHANGED, uploadDelay);
+ sendLocationData();
+ }
+ }
+ };
+ mHandler.sendEmptyMessage(MSG_DATA_CHANGED);
+ }
+
+ public interface RTKLocationListener {
+ void onLocationChanged(List cloudLocationInfos);
+ }
+
+ private void sendLocationData() {
+ if (rtkLocationListener != null) {
+ List list = new ArrayList<>(cacheList);
+ rtkLocationListener.onLocationChanged(list);
+ }
+ if (cacheList != null && cacheList.size() > 0) {
+ cacheList.clear();
+ }
+ }
+
+ public void registerRTKLocationListener(RTKLocationListener locationListener) {
+ rtkLocationListener = locationListener;
+ }
+
+ public void init() {
+ locationManager = (LocationManager) AbsMogoApplication.getApp().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
+ String provider = locationManager.getBestProvider(getCriteria(), true);
+ Logger.d(TAG, "init provider : " + provider);
+ if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
+ try {
+ locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
+ Location location = locationManager.getLastKnownLocation(provider);
+ if (location != null) {
+ Logger.i(TAG, "location : " + location.toString());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ Logger.d(TAG, "RTK LocationManager requestLocationUpdates has Exception : " + e.getMessage());
+ }
+ } else {
+ Logger.d(TAG, "RTK LocationManager Provider GPS_PROVIDER unable");
+ }
+
+ // 注册修改上报间隔的广播, 临时使用,后面可直接干掉,发送广播的地方在EntranceFragment
+ IntentFilter filter = new IntentFilter("com.mogo.launcher.action.FIX_UPLOAT_DELAY");
+ AbsMogoApplication.getApp().registerReceiver(fixUploadDelayReceiver, filter);
+ }
+
+ private Criteria getCriteria() {
+ Criteria criteria = new Criteria();
+ criteria.setAccuracy(Criteria.ACCURACY_FINE); //高精
+ criteria.setAltitudeRequired(false);
+ criteria.setBearingRequired(true);
+ criteria.setSpeedRequired(true);
+ criteria.setPowerRequirement(Criteria.POWER_LOW);
+ return criteria;
+ }
+
+ private LocationListener locationListener = new LocationListener() {
+ @Override
+ public void onLocationChanged(Location location) {
+ if (location != null) {
+ CloudLocationInfo cloudLocationInfo = new CloudLocationInfo();
+ cloudLocationInfo.setAlt(location.getAltitude());
+ cloudLocationInfo.setHeading(location.getBearing());
+ cloudLocationInfo.setLat(location.getLatitude());
+ cloudLocationInfo.setLon(location.getLongitude());
+ cloudLocationInfo.setSpeed(location.getSpeed());
+ cloudLocationInfo.setSatelliteTime(location.getTime());
+ cloudLocationInfo.setSystemTime(System.currentTimeMillis());
+ cacheList.add(cloudLocationInfo);
+ }
+ }
+
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ Logger.d(TAG, "onStatusChanged status: " + status);
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+ Logger.d(TAG, "onProviderEnabled");
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+ Logger.d(TAG, "onProviderEnabled");
+ }
+ };
+
+ public void stop() {
+ Logger.d(TAG, "stop RTK Location");
+ if (locationManager != null && locationListener != null) {
+ locationManager.removeUpdates(locationListener);
+ } else {
+ Logger.d(TAG, "stop failed , reason : loc" + locationManager + " , or loc listener: " + locationListener + " is null");
+ }
+ }
+
+ private long uploadDelay = MSG_DATA_INTERNAL;
+
+ private FixUploadDelayReceiver fixUploadDelayReceiver = new FixUploadDelayReceiver();
+
+ private class FixUploadDelayReceiver extends BroadcastReceiver{
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ uploadDelay = intent.getIntExtra("fixTime", 0);
+ }
+ }
+
+ /**
+ * 默认保持{@link #uploadDelay}间隔进行位置上报,如遇服务端控制,进行上报间隔修改
+ * @param delay 上报间隔
+ */
+ public void resetUploadDelay(long delay) {
+ if (mHandler != null && mHandler.hasMessages(MSG_DATA_CHANGED)) {
+ mHandler.removeMessages(MSG_DATA_CHANGED);
+ mHandler.sendEmptyMessageDelayed(MSG_DATA_CHANGED, delay);
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/AdasRecognizedType.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/AdasRecognizedType.java
new file mode 100644
index 0000000000..228a134ea9
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/AdasRecognizedType.java
@@ -0,0 +1,27 @@
+package com.mogo.module.service.marker;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+class AdasRecognizedType {
+ //背景
+ public static final int classIdBackground = 0;
+ //人
+ public static final int classIdPerson = 1;
+ //自行车
+ public static final int classIdBicycle = 2;
+ //小轿车
+ public static final int classIdCar = 3;
+ //摩托车
+ public static final int classIdMoto = 4;
+ //红绿灯
+ public static final int classIdTrafficSign = 5;
+ //bus
+ public static final int classIdTrafficBus = 6;
+ //track
+ public static final int classIdTrafficTruck = 8;
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java
index d6788b73e7..726980727f 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java
@@ -3,7 +3,6 @@ package com.mogo.module.service.marker;
import android.content.Context;
import android.graphics.Rect;
import android.text.TextUtils;
-import android.view.animation.LinearInterpolator;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.debug.DebugConfig;
@@ -11,36 +10,44 @@ import com.mogo.map.MogoLatLng;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.IMogoMarkerClickListener;
import com.mogo.map.marker.IMogoMarkerManager;
-import com.mogo.map.marker.MogoMarkerOptions;
-import com.mogo.map.marker.anim.OnMarkerAnimationListener;
import com.mogo.map.uicontroller.EnumMapUI;
import com.mogo.module.common.ModuleNames;
+import com.mogo.module.common.MogoApisHandler;
import com.mogo.module.common.api.CallChatApi;
-import com.mogo.module.common.entity.MarkerCarPois;
+import com.mogo.module.common.drawer.AdasRecognizedResultDrawer;
+import com.mogo.module.common.drawer.MarkerDrawer;
+import com.mogo.module.common.drawer.OnlineCarDrawer;
+import com.mogo.module.common.drawer.RoadConditionDrawer;
+import com.mogo.module.common.drawer.SnapshotSetDataDrawer;
+import com.mogo.module.common.drawer.marker.IMarkerView;
+import com.mogo.module.common.drawer.marker.MapMarkerAdapter;
+import com.mogo.module.common.drawer.marker.OnlineCarMarkerView;
import com.mogo.module.common.entity.MarkerCardResult;
import com.mogo.module.common.entity.MarkerExploreWay;
-import com.mogo.module.common.entity.MarkerLocation;
-import com.mogo.module.common.entity.MarkerNoveltyInfo;
import com.mogo.module.common.entity.MarkerOnlineCar;
import com.mogo.module.common.entity.MarkerResponse;
-import com.mogo.module.common.entity.MarkerShareMusic;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.common.utils.CloudPoiManager;
+import com.mogo.module.common.entity.MogoSnapshotSetData;
import com.mogo.module.service.MarkerServiceHandler;
+import com.mogo.module.service.MogoServices;
import com.mogo.module.service.R;
import com.mogo.module.service.ServiceConst;
-import com.mogo.module.service.Utils;
import com.mogo.module.service.network.RefreshCallback;
import com.mogo.module.service.network.RefreshModel;
import com.mogo.module.service.utils.ViewUtils;
+import com.mogo.module.service.vrmode.VrModeController;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
import com.mogo.service.connection.IMogoOnMessageListener;
+import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
+import com.mogo.service.connection.WebSocketMsgType;
import com.mogo.service.module.IMogoBizActionDoneListener;
import com.mogo.utils.ResourcesHelper;
import com.mogo.utils.ThreadPoolService;
import com.mogo.utils.UiThreadHandler;
import com.mogo.utils.WorkThreadHandler;
import com.zhidao.carchattingprovider.ICallChatResponse;
+import com.mogo.utils.logger.Logger;
import org.json.JSONArray;
import org.json.JSONException;
@@ -105,7 +112,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
mContext = context.getApplicationContext();
mRefreshModel = new RefreshModel( mContext );
- CloudPoiManager.getInstance().updateFromConfig(context);
+ CloudPoiManager.getInstance().updateFromConfig( context );
MarkerServiceHandler.getActionManager().registerBizActionDoneListener( this );
MarkerServiceHandler.getApis().getRegisterCenterApi().registerADASControlStatusChangedListener( TAG, this );
@@ -128,6 +135,59 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
}
} );
+
+ // 每隔一秒下发的数据
+ MarkerServiceHandler.getApis().getWebSocketManagerApi( mContext )
+ .registerOnWebSocketMessageListener( new IMogoOnWebSocketMessageListener< MogoSnapshotSetData >() {
+
+ @Override
+ public WebSocketMsgType getUpLinkType() {
+ return null;
+ }
+
+ @Override
+ public WebSocketMsgType getDownLinkType() {
+ return WebSocketMsgType.MSG_TYPE_DOWNLINK_CAR_DATA;
+ }
+
+ @Override
+ public Class< MogoSnapshotSetData > target() {
+ return MogoSnapshotSetData.class;
+ }
+
+ @Override
+ public void onMsgReceived( MogoSnapshotSetData data ) {
+ if ( data == null ) {
+ return;
+ }
+ if ( !MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) {
+// return;
+ }
+
+ if ( MogoServices.getInstance().getLastCarLocation() != null ) {
+ data.curSpeed = MogoServices.getInstance().getLastCarLocation().getSpeed();
+ }
+ SnapshotSetDataDrawer.getInstance().renderSnapshotData( data, false );
+// VrModeController.getInstance().renderMogoSnapshotSetData( data );
+ }
+
+ @Override
+ public void onError( String errorMsg ) {
+
+ }
+ } );
+ // adas 每隔一秒传递的数据
+ MarkerServiceHandler.getApis().getAdasControllerApi().addAdasRecognizedDataCallback( resultList -> {
+ if ( resultList == null || resultList.isEmpty() ) {
+ return;
+ }
+ double speed = 0.0;
+ if ( MogoServices.getInstance().getLastCarLocation() != null ) {
+ speed = MogoServices.getInstance().getLastCarLocation().getSpeed();
+ }
+ // 绘制近景识别到的车辆,每秒绘制一次
+ AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult( resultList, false, speed );
+ } );
}
}
@@ -146,7 +206,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
Map< String, Object > properties = new HashMap<>();
if ( marker.getObject() instanceof MarkerShowEntity ) {
- final String sn = getCarSnFromMarker( marker );
+ final String sn = MarkerDrawer.getInstance().getCarSnFromMarker( marker );
if ( TextUtils.isEmpty( sn ) ) {
return false;
}
@@ -198,7 +258,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
updateCarUserInfoWindow( mogoMarker );
} else {
Object object = mogoMarker.getObject();
- if ( object != null ) {
+ if ( object instanceof MarkerShowEntity ) {
MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) object;
markerShowEntity.setChecked( true );
IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, mogoMarker.getMogoMarkerOptions() );
@@ -215,8 +275,10 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
mogoMarker.setToTop();
}
}
- MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false );
- MarkerServiceHandler.getMapUIController().moveToCenter( mogoMarker.getPosition(), DebugConfig.isRoadEventAnimated() );
+ if ( !MarkerServiceHandler.getApis().getMapFrameControllerApi().isVrMode() ) {
+ MarkerServiceHandler.getMogoStatusManager().setUserInteractionStatus( TAG, true, false );
+ MarkerServiceHandler.getMapUIController().moveToCenter( mogoMarker.getPosition(), DebugConfig.isRoadEventAnimated() );
+ }
}
private void updateCarUserInfoWindow( IMogoMarker marker ) {
@@ -323,237 +385,9 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
*/
private void drawAllMarker( MarkerCardResult markerCardResult ) {
List< MarkerExploreWay > exploreWayList = markerCardResult.getExploreWay();
- drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_ALL );
+ RoadConditionDrawer.getInstance().drawRoadConditionMarker( exploreWayList, ServiceConst.MAX_AMOUNT_ALL, this );
}
- /**
- * 绘制在线车辆marker
- *
- * @param onlineCarList
- */
- private void drawOnlineCarMarkers( List< MarkerOnlineCar > onlineCarList,
- int maxAmount,
- boolean clearOld,
- boolean showBounds,
- Rect bound,
- MogoLatLng centerPoint ) {
- // 将数据同步给在线车辆,避免每次 perform 的时候去拉取,造成消耗
- if ( onlineCarList == null || onlineCarList.isEmpty() ) {
- MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
- return;
- }
-
- if ( clearOld ) {
- MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
- }
-
- int size = getAppropriateSize( maxAmount, onlineCarList );
-
- Map< String, IMogoMarker > existCarMap = purgeMarkerData( onlineCarList, ModuleNames.CARD_TYPE_USER_DATA );
-
- List< MogoLatLng > carPoints = new ArrayList<>();
- for ( int i = 0; i < size; i++ ) {
- MarkerOnlineCar markerOnlineCar = onlineCarList.get( i );
- MarkerLocation markerLocation = markerOnlineCar.getLocation();
- MarkerShowEntity markerShowEntity = new MarkerShowEntity();
- markerShowEntity.setBindObj( markerOnlineCar );
- markerShowEntity.setMarkerLocation( markerLocation );
- markerShowEntity.setMarkerType( markerOnlineCar.getType() );
-
- if ( markerOnlineCar.getCarInfo() != null ) {
- markerShowEntity.setTextContent( markerOnlineCar.getUserInfo().getUserName() );
- markerShowEntity.setIconUrl( markerOnlineCar.getUserInfo().getUserHead() );
- }
-
- if ( i <= 5 ) {
- carPoints.add( new MogoLatLng( markerLocation.getLat(), markerLocation.getLon() ) );
- }
-
- String sn = getPrimaryKeyFromEntity( markerOnlineCar );
- IMogoMarker mogoMarker = existCarMap.get( sn );
- if ( mogoMarker == null || mogoMarker.isDestroyed() ) {
- mogoMarker = drawMapMarker( markerShowEntity, ServiceConst.MARKER_Z_INDEX_LOW );
- }
- if ( mogoMarker != null ) {
- mogoMarker.setVisible( true );
- }
- startSmooth( mogoMarker, markerOnlineCar, markerLocation );
- }
-
- if ( showBounds && bound != null ) {
- // 将前6个点显示在固定范围内
- MarkerServiceHandler.getMapUIController().showBounds( TAG, centerPoint, carPoints, bound, false );
- }
- }
-
- /**
- * 探路数据
- *
- * @param exploreWayList
- */
- private void drawRoadConditionMarker( List< MarkerExploreWay > exploreWayList, int maxAmount ) {
- // 将数据同步给探路,避免探路每次 perform 的时候去拉取,造成消耗
- if ( exploreWayList == null || exploreWayList.isEmpty() ) {
- MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_ROAD_CONDITION );
- return;
- }
- int size = getAppropriateSize( maxAmount, exploreWayList );
- Map< String, IMogoMarker > existCarMap = purgeMarkerData( exploreWayList, ModuleNames.CARD_TYPE_ROAD_CONDITION );
- for ( int i = 0; i < size; i++ ) {
- MarkerExploreWay markerExploreWay = exploreWayList.get( i );
- if ( !markerExploreWay.getCanLive() ) {
- MarkerLocation markerLocation = markerExploreWay.getLocation();
-
- MarkerShowEntity markerShowEntity = new MarkerShowEntity();
- markerShowEntity.setBindObj( markerExploreWay );
- markerShowEntity.setMarkerLocation( markerLocation );
- markerShowEntity.setMarkerType( markerExploreWay.getType() );
- markerShowEntity.setTextContent( markerExploreWay.getAddr() );
-
- String sn = getPrimaryKeyFromEntity( markerExploreWay );
- IMogoMarker mogoMarker = existCarMap.get( sn );
- if ( mogoMarker == null || mogoMarker.isDestroyed() ) {
- try {
- if ( DebugConfig.isRoadEventAnimated() ) {
- post2AddAndStartAnimation( markerShowEntity, i * 100L );
- } else {
- mogoMarker = drawMapMarker( markerShowEntity, ServiceConst.MARKER_Z_INDEX_HIGH );
- }
- } catch ( Exception e ) {
- }
- }
- }
- }
- }
-
- private void post2AddAndStartAnimation( MarkerShowEntity entity, long delay ) {
- if ( entity == null ) {
- return;
- }
- WorkThreadHandler.getInstance().postDelayed( () -> {
- if ( entity == null ) {
- return;
- }
- IMogoMarker marker = drawMapMarker( entity, ServiceConst.MARKER_Z_INDEX_HIGH );
- if ( marker == null ) {
- return;
- }
- marker.startScaleAnimationWithAlpha( 0, 1.2f, 0, 1.2f, 0f, 1f, 300, new LinearInterpolator(), new OnMarkerAnimationListener() {
- @Override
- public void onAnimStart() {
- }
-
- @Override
- public void onAnimEnd() {
- if ( marker == null || marker.isDestroyed() ) {
- return;
- }
- marker.startScaleAnimation( 1.2f, 1, 1.2f, 1, 100, new LinearInterpolator(), null );
- }
- } );
- }, delay );
- }
-
- /**
- * S = (A ∩ B) ∪ B
- * (A ∩ B)作为旧列表需要保留的部分
- *
- * @param newList
- * @return
- */
- private Map< String, IMogoMarker > purgeMarkerData( List newList, String markerType ) {
-
- Map< String, IMogoMarker > existMap = new HashMap<>();
- List< IMogoMarker > allCarsList = MarkerServiceHandler.getMarkerManager().getMarkers( markerType );
- if ( allCarsList == null || allCarsList.isEmpty() ) {
- return existMap;
- }
- if ( newList == null || newList.isEmpty() ) {
- return existMap;
- }
-
- Map< String, IMogoMarker > allMap = new HashMap<>();
- for ( IMogoMarker marker : allCarsList ) {
- String sn = getPrimaryKeyFromMarker( marker );
- allMap.put( sn, marker );
- }
- for ( Object entity : newList ) {
- String sn = getPrimaryKeyFromEntity( entity );
- if ( allMap.containsKey( sn ) ) {
- existMap.put( sn, allMap.get( sn ) );
- }
- }
- for ( String sn : allMap.keySet() ) {
- if ( !existMap.containsKey( sn ) ) {
- IMogoMarker dirtyMarker = allMap.get( sn );
- allCarsList.remove( dirtyMarker );
- dirtyMarker.destroy();
- }
- }
- allMap.clear();
- return existMap;
- }
-
- private String getPrimaryKeyFromEntity( Object entity ) {
- if ( entity instanceof MarkerExploreWay ) {
- String id = ( ( MarkerExploreWay ) entity ).getInfoId();
- if ( !TextUtils.isEmpty( id ) ) {
- return id;
- }
- }
- return getCarSnFromEntity( entity );
- }
-
- private String getPrimaryKeyFromMarker( IMogoMarker marker ) {
- if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) {
- return null;
- }
- if ( !( marker.getObject() instanceof MarkerShowEntity ) ) {
- return null;
- }
- return getPrimaryKeyFromEntity( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() );
- }
-
- private String getCarSnFromEntity( Object entity ) {
- try {
- if ( entity instanceof MarkerOnlineCar ) {
- return ( ( MarkerOnlineCar ) entity ).getUserInfo().getSn();
- } else if ( entity instanceof MarkerShareMusic ) {
- return ( ( MarkerShareMusic ) entity ).getUserInfo().getSn();
- } else if ( entity instanceof MarkerNoveltyInfo ) {
- return ( ( MarkerNoveltyInfo ) entity ).getSn();
- } else if ( entity instanceof MarkerExploreWay ) {
- return ( ( MarkerExploreWay ) entity ).getUserInfo().getSn();
- }
- } catch ( Exception e ) {
-
- }
- return "";
- }
-
- private String getCarSnFromMarker( IMogoMarker marker ) {
- if ( marker == null || marker.getObject() == null || marker.isDestroyed() ) {
- return null;
- }
- if ( !( marker.getObject() instanceof MarkerShowEntity ) ) {
- return null;
- }
- return getCarSnFromEntity( ( ( MarkerShowEntity ) marker.getObject() ).getBindObj() );
- }
-
- /**
- * @param maxAmount 展示的最大数量
- * @param list
- * @return
- */
- private int getAppropriateSize( int maxAmount, List list ) {
- if ( list == null ) {
- return 0;
- }
- return Math.min( maxAmount, list.size() );
- }
-
-
/**
* 统计地图内数据获取
*
@@ -638,37 +472,6 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
}
}
- /**
- * 大而全数据计数埋点
- */
- private synchronized static JSONObject fillPoiTypeTrackBody( JSONArray arr, String poiType, int poiTypeNum ) {
- JSONObject object = new JSONObject();
- try {
- object.put( "poitype", poiType );
- object.put( "num", poiTypeNum );
- if ( arr != null ) {
- arr.put( object );
- }
- return object;
- } catch ( JSONException e ) {
- e.printStackTrace();
- }
- return null;
- }
-
- private synchronized static void fillPoiChildTypeTrackBody( JSONArray arr, String childType, int childTypeNum ) {
- JSONObject object = new JSONObject();
- try {
- object.put( "contenttype", childType );
- object.put( "num", childTypeNum );
- if ( arr != null ) {
- arr.put( object );
- }
- } catch ( JSONException e ) {
- e.printStackTrace();
- }
- }
-
/**
* 绘制Marker,这里绘制的会使用markerShowEntities队列进行维护
*
@@ -677,38 +480,12 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
*/
public synchronized IMogoMarker drawMapMarker( MarkerShowEntity markerShowEntity, int zIndex ) {
try {
- return drawMapMarkerImpl( markerShowEntity, zIndex );
+ return MarkerDrawer.getInstance().drawMapMarkerImpl( markerShowEntity, zIndex, this );
} catch ( Exception e ) {
return null;
}
}
- private IMogoMarker drawMapMarkerImpl( MarkerShowEntity markerShowEntity, int zIndex ) {
- if ( markerShowEntity == null || markerShowEntity.getMarkerLocation() == null ) {
- return null;
- }
- MogoMarkerOptions options = new MogoMarkerOptions().owner( markerShowEntity.getMarkerType() ).zIndex( zIndex ).object( markerShowEntity ).latitude( markerShowEntity.getMarkerLocation().getLat() ).longitude( markerShowEntity.getMarkerLocation().getLon() );
- IMarkerView markerView = MapMarkerAdapter.getMarkerView( mContext, markerShowEntity, options );
- if ( markerView instanceof OnlineCarMarkerView ) {
- try {
- options.icon( markerView.getBitmap( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getCarInfo().getVehicleType() ) );
- } catch ( Exception e ) {
- options.icon( markerView.getBitmap( 0 ) );
- }
- options.anchor( 0.5f, 0.5f );
- } else {
- options.icon( markerView.getView() );
- }
-
- IMogoMarker marker = MarkerServiceHandler.getMarkerManager().addMarker( markerShowEntity.getMarkerType(), options );
- marker.setOwner( markerShowEntity.getMarkerType() );
- markerView.setMarker( marker );
- marker.setOnMarkerClickListener( this );
- markerShowEntity.setMarker( marker );
- return marker;
- }
-
-
@Override
public Class< MarkerResponse > target() {
return MarkerResponse.class;
@@ -832,7 +609,7 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
runOnTargetThread( () -> {
trackData( size );
- drawOnlineCarMarkers( onlineCarList, Integer.MAX_VALUE, fitBounds, fitBounds, mMarkerDisplayBounds, latLng );
+ OnlineCarDrawer.getInstance().drawOnlineCarMarkers( onlineCarList, Integer.MAX_VALUE, fitBounds, fitBounds, mMarkerDisplayBounds, latLng, MapMarkerManager.this );
UiThreadHandler.postDelayed( runnable, SMOOTH_DURATION * 1000 );
} );
}
@@ -871,81 +648,13 @@ public class MapMarkerManager implements IMogoMarkerClickListener,
MarkerServiceHandler.getMarkerManager().removeMarkers( ModuleNames.CARD_TYPE_USER_DATA );
}
- // 平滑移动
- private void startSmooth( IMogoMarker iMogoMarker, MarkerOnlineCar markerOnlineCar,
- MarkerLocation markerLocation ) {
- if ( iMogoMarker == null ) {
- return;
- }
- List< MarkerCarPois > poiList = markerOnlineCar.getPois();
- if ( filterErrorPoint( poiList ) ) {
- return;
- }
- if ( poiList == null || poiList.size() < 2 ) {
- return;
- }
-
- List< MogoLatLng > points = new ArrayList<>();
-
- double lastLat = 0.0d;
- double lastLon = 0.0d;
-
- for ( int j = 0; j < poiList.size(); j++ ) {
- MarkerCarPois poi = poiList.get( j );
- if ( poi == null || poi.getCoordinates() == null && poi.getCoordinates().size() != 2 ) {
- continue;
- }
- try {
- double lat = Double.valueOf( poi.getCoordinates().get( 1 ) + "" );
- double lng = Double.valueOf( poi.getCoordinates().get( 0 ) + "" );
-
- float distance = Utils.calculateLineDistance( lastLon, lastLat, lng, lat );
- lastLon = lng;
- lastLat = lat;
- if ( distance < 0.2f ) {// 距离过短,认为静止不动
- continue;
- }
-
- points.add( new MogoLatLng( lat, lng ) );
- } catch ( Exception e ) {
- }
- }
- if ( points.size() >= 1 ) {
- iMogoMarker.startSmooth( points, SMOOTH_DURATION );
- } else {
- }
- }
-
- /**
- * 有可能出现终点到起点跳跃的情况,需要用"500M"约束起点和终点
- *
- * @param poiList
- */
- private boolean filterErrorPoint( List< MarkerCarPois > poiList ) {
- if ( poiList == null || poiList.size() < 2 ) {
- return false;
- }
- MarkerCarPois start = poiList.get( 0 );
- MarkerCarPois end = poiList.get( poiList.size() - 1 );
-
- try {
- double lat1 = Double.valueOf( start.getCoordinates().get( 1 ) + "" );
- double lng1 = Double.valueOf( start.getCoordinates().get( 0 ) + "" );
- double lat2 = Double.valueOf( end.getCoordinates().get( 1 ) + "" );
- double lng2 = Double.valueOf( end.getCoordinates().get( 0 ) + "" );
- if ( Utils.calculateLineDistance( new MogoLatLng( lat1, lng1 ), new MogoLatLng( lat2, lng2 ) ) >= 500 ) {
- return true;
- }
- } catch ( Exception e ) {
- }
- return false;
- }
private boolean ignoreDrawRequest() {
return MarkerServiceHandler.getMogoStatusManager().isSearchUIShow()
|| MarkerServiceHandler.getMogoStatusManager().isV2XShow()
|| !MarkerServiceHandler.getMogoStatusManager().isMainPageLaunched()
- || !MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume();
+ || !MarkerServiceHandler.getMogoStatusManager().isMainPageOnResume()
+ || MarkerServiceHandler.getApis().getMapFrameControllerApi().isVrMode();
}
private void runOnTargetThread( Runnable runnable ) {
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java
index 6e820c88a2..47044f9b9f 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MogoMarkerServiceImpl.java
@@ -6,6 +6,7 @@ import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.map.marker.IMogoMarker;
+import com.mogo.module.common.drawer.MarkerDrawer;
import com.mogo.module.common.entity.MarkerShowEntity;
import com.mogo.module.service.MarkerServiceHandler;
import com.mogo.module.service.ServiceConst;
@@ -28,7 +29,7 @@ public class MogoMarkerServiceImpl implements IMogoMarkerService {
@Override
public IMogoMarker drawMarker( Object object ) {
if ( object instanceof MarkerShowEntity ) {
- return MarkerServiceHandler.getMapMarkerManager().drawMapMarker( ( ( MarkerShowEntity ) object ), ServiceConst.MARKER_Z_INDEX_HIGH );
+ return MarkerServiceHandler.getMapMarkerManager().drawMapMarker( ( ( MarkerShowEntity ) object ), MarkerDrawer.MARKER_Z_INDEX_HIGH );
}
Logger.w( TAG, "object must instance of [com.mogo.module.common.entity.MarkerShowEntity]" );
return null;
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java
index a1c20acb9d..e69de29bb2 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/UserDataMarkerInfoWindowAdapter.java
@@ -1,221 +0,0 @@
-package com.mogo.module.service.marker;
-
-import android.content.Context;
-import android.os.Looper;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.mogo.commons.debug.DebugConfig;
-import com.mogo.commons.network.SubscribeImpl;
-import com.mogo.map.marker.IMogoInfoWindowAdapter;
-import com.mogo.map.marker.IMogoMarker;
-import com.mogo.module.common.entity.MarkerLocation;
-import com.mogo.module.common.entity.MarkerOnlineCar;
-import com.mogo.module.common.entity.MarkerShowEntity;
-import com.mogo.module.common.entity.MarkerUserInfo;
-import com.mogo.module.service.MarkerServiceHandler;
-import com.mogo.module.service.R;
-import com.mogo.module.service.network.RefreshApiService;
-import com.mogo.module.service.network.RefreshModel;
-import com.mogo.module.service.network.bean.DemoUserInfoEntity;
-import com.mogo.service.imageloader.MogoImageView;
-import com.mogo.service.network.IMogoNetwork;
-import com.mogo.utils.UiThreadHandler;
-import com.mogo.utils.WindowUtils;
-import com.mogo.utils.logger.Logger;
-import com.mogo.utils.network.RequestOptions;
-import com.zhidao.carchattingprovider.CallChattingProviderConstant;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.schedulers.Schedulers;
-
-/**
- * @author congtaowang
- * @since 2020-04-27
- *
- * 在线车辆点击后弹出的info window 样式
- */
-public class UserDataMarkerInfoWindowAdapter implements IMogoInfoWindowAdapter {
-
- private static final String TAG = "UserDataMarkerInfoWindowAdapter";
-
- private static volatile UserDataMarkerInfoWindowAdapter sInstance;
- private final Context mContext;
- private static RefreshApiService sRefreshApiService;
-
- private View mInfoWindowView = null;
-
- private View mContentContainer;
- private MogoImageView mUserHeader;
- private TextView mContent;
- private TextView mTag;
- private ImageView mCall;
-
- private UserDataMarkerInfoWindowAdapter( Context context ) {
- this.mContext = context;
- IMogoNetwork network = MarkerServiceHandler.getApis().getNetworkApi();
- sRefreshApiService = network.create( RefreshApiService.class, RefreshModel.getNetHost() );
- }
-
- public static UserDataMarkerInfoWindowAdapter getInstance( Context context ) {
- if ( sInstance == null ) {
- synchronized ( UserDataMarkerInfoWindowAdapter.class ) {
- if ( sInstance == null ) {
- sInstance = new UserDataMarkerInfoWindowAdapter( context );
- }
- }
- }
- return sInstance;
- }
-
- public synchronized void release() {
- sInstance = null;
- }
-
- @Override
- public View getInfoWindow( IMogoMarker marker ) {
- return inflateView( marker );
- }
-
- private View inflateView( IMogoMarker marker ) {
- if ( marker == null ) {
- return null;
- }
-
- if ( mInfoWindowView == null ) {
- mInfoWindowView = LayoutInflater.from( mContext ).inflate( R.layout.modudle_services_marker_info_window_layout, null );
- mContentContainer = mInfoWindowView.findViewById( R.id.module_service_id_marker_content );
- mUserHeader = mInfoWindowView.findViewById( R.id.module_service_id_user_header );
- mContent = mInfoWindowView.findViewById( R.id.module_service_id_content );
- mTag = mInfoWindowView.findViewById( R.id.module_service_id_tag );
- mCall = mInfoWindowView.findViewById( R.id.module_service_id_call );
- }
-
- if ( DebugConfig.getCarMachineType() == DebugConfig.CAR_MACHINE_TYPE_BYD ) {
- mContentContainer.setPadding(
- mContentContainer.getPaddingLeft(),
- mContentContainer.getPaddingTop(),
- mContentContainer.getResources().getDimensionPixelSize( R.dimen.module_service_id_marker_content_paddingRight_widthoutCall ),
- mContentContainer.getPaddingBottom()
- );
- mCall.setVisibility( View.GONE );
- }
-
- try {
- MarkerShowEntity markerShowEntity = ( MarkerShowEntity ) marker.getObject();
- mContent.setText( markerShowEntity.getTextContent() );
- loadImageHeader( markerShowEntity );
- if ( markerShowEntity.getBindObj() instanceof MarkerOnlineCar ) {
- try {
- mTag.setText( ( ( MarkerOnlineCar ) markerShowEntity.getBindObj() ).getUserInfo().getSafeLabel() );
- } catch ( Exception e ) {
- e.printStackTrace();
- }
- }
- mCall.setOnClickListener( view -> {
- if ( markerShowEntity.getBindObj() instanceof MarkerOnlineCar ) {
- if ( DebugConfig.getNetMode() != DebugConfig.NET_MODE_DEMO ) {
- callToFactUser( markerShowEntity );
- return;
- }
- sRefreshApiService.getMockUsers().subscribeOn( Schedulers.io() )
- .observeOn( AndroidSchedulers.mainThread() )
- .subscribe( new SubscribeImpl< DemoUserInfoEntity >( RequestOptions.create( mContext ) ) {
- @Override
- public void onSuccess( DemoUserInfoEntity o ) {
- super.onSuccess( o );
- callToDemoUser( markerShowEntity, o );
- }
-
- @Override
- public void onError( String message, int code ) {
- super.onError( message, code );
- callToFactUser( markerShowEntity );
- }
- } );
- }
- } );
- } catch ( Exception e ) {
- Logger.e( TAG, e, "error." );
- }
-
- return mInfoWindowView;
- }
-
- private void callToDemoUser( MarkerShowEntity factUser, DemoUserInfoEntity demoUser ) {
- if ( demoUser == null
- || demoUser.getResult() == null
- || demoUser.getResult().getUserList() == null
- || demoUser.getResult().getUserList().isEmpty() ) {
- callToFactUser( factUser );
- return;
- }
- List< DemoUserInfoEntity.ResultBean.UserListBean > users = demoUser.getResult().getUserList();
- for ( DemoUserInfoEntity.ResultBean.UserListBean user : users ) {
- if ( user == null ) {
- continue;
- }
- if ( TextUtils.equals( "1", user.getSceneType() ) ) {
- try {
- ( ( MarkerOnlineCar ) factUser.getBindObj() ).getUserInfo().setSn( user.getUserInfo().getSn() );
- callToFactUser( factUser );
- return;
- } catch ( Exception e ) {
- }
- }
- }
- callToFactUser( factUser );
- }
-
- private void callToFactUser( MarkerShowEntity factUser ) {
- if ( factUser == null ) {
- return;
- }
- Map< String, String > params = new HashMap<>();
- MarkerUserInfo userInfo = ( ( MarkerOnlineCar ) factUser.getBindObj() ).getUserInfo();
- if ( userInfo != null ) {
- params.put( CallChattingProviderConstant.CCPROVIDER_SN, userInfo.getSn() );
- params.put( CallChattingProviderConstant.CCPROVIDER_USER_IMG, userInfo.getUserHead() );
- params.put( CallChattingProviderConstant.CCPROVIDER_USER_AGE, userInfo.getAgeNumber() + "" );
- params.put( CallChattingProviderConstant.CCPROVIDER_NICK_NAME, userInfo.getUserName() );
- params.put( CallChattingProviderConstant.CCPROVIDER_USER_SEX, userInfo.getGender() + "" );
- }
- MarkerLocation location = ( ( MarkerOnlineCar ) factUser.getBindObj() ).getLocation();
- if ( location != null ) {
- params.put( CallChattingProviderConstant.CCPROVIDER_ADDRESS, location.getAddress() );
- params.put( CallChattingProviderConstant.CCPROVIDER_LAT, location.getLat() + "" );
- params.put( CallChattingProviderConstant.CCPROVIDER_LON, location.getLon() + "" );
- }
- Logger.d( TAG, "call parameters: %s", params );
- if ( MarkerServiceHandler.getCarChatting() != null ) {
- MarkerServiceHandler.getCarChatting().call( params );
- }
- }
-
- protected void loadImageHeader( final MarkerShowEntity markerShowEntity ) {
-
- if ( Looper.myLooper() != Looper.getMainLooper() ) {
- UiThreadHandler.post( () -> runOnUiThread( markerShowEntity ));
- } else {
- runOnUiThread( markerShowEntity );
- }
- }
-
- private void runOnUiThread( final MarkerShowEntity markerShowEntity ) {
- if ( !TextUtils.isEmpty( markerShowEntity.getIconUrl() ) ) {
- MarkerServiceHandler.getImageloader().displayImage( markerShowEntity.getIconUrl(),
- mUserHeader,
- WindowUtils.dip2px( mContext, 50 ), WindowUtils.dip2px( mContext, 50 ), null );
-
- } else {
- mUserHeader.setBackgroundResource( R.drawable.icon_default_user_head );
- }
- }
-}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/MogoRefreshStrategyController.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/MogoRefreshStrategyController.java
index f13e5642e9..cf1fd09e11 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/MogoRefreshStrategyController.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/strategy/MogoRefreshStrategyController.java
@@ -4,6 +4,7 @@ import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.module.service.MogoServices;
+import com.mogo.module.service.location.MogoRTKLocation;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.strategy.IMogoRefreshStrategyController;
import com.mogo.utils.logger.Logger;
@@ -35,6 +36,11 @@ public class MogoRefreshStrategyController implements IMogoRefreshStrategyContro
MogoServices.getInstance().clearAllData();
}
+ @Override
+ public void resetLocationUpDelay(long delay) {
+ MogoRTKLocation.getInstance().resetUploadDelay(delay);
+ }
+
@Override
public void init( Context context ) {
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/LocationParseUtil.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/LocationParseUtil.java
new file mode 100644
index 0000000000..17a20c8115
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/LocationParseUtil.java
@@ -0,0 +1,40 @@
+package com.mogo.module.service.utils;
+
+import android.location.Location;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.module.common.entity.CloudLocationInfo;
+
+/**
+ * 定位数据类型转换工具
+ *
+ * @author tongchenfei
+ */
+public class LocationParseUtil {
+ /**
+ * 从Location 转 CloudLocationInfo
+ * @param info 待转数据
+ * @return 转后数据
+ */
+ public static CloudLocationInfo locationToCloudLocation(Location info) {
+ if (info == null) {
+ return null;
+ }
+ CloudLocationInfo cloud = new CloudLocationInfo();
+ cloud.setLat(info.getLatitude());
+ cloud.setLon(info.getLongitude());
+ cloud.setAlt(info.getAltitude());
+ cloud.setHeading(info.getBearing());
+ cloud.setSpeed(info.getSpeed());
+ cloud.setSatelliteTime(info.getTime());
+ cloud.setSystemTime(System.currentTimeMillis());
+ return cloud;
+ }
+
+ public static MogoLatLng cloudLocationToMogoLatLng(CloudLocationInfo info) {
+ if (info == null) {
+ return null;
+ }
+ return new MogoLatLng(info.getLat(), info.getLon());
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/MortonCode.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/MortonCode.java
new file mode 100644
index 0000000000..2e8196e40e
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/MortonCode.java
@@ -0,0 +1,139 @@
+package com.mogo.module.service.utils;
+
+import java.util.Arrays;
+
+/**
+ * 莫顿编码
+ *
+ * @author linyang
+ * @since 2020.07.09
+ */
+public class MortonCode {
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final long NDS_180_DEGREES = 0x7fffffff;
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final long NDS_360_DEGREES = 4294967295L;
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final long NDS_90_DEGREES = 0x3fffffff;
+
+ /**
+ * 经纬度转 morton 时的中间常量
+ */
+ private static final double RULE_MORTON = Math.pow( 2, 32 ) / 360;
+
+ /**
+ * morton 转 经纬度 时的中间常量
+ */
+ private static final double RULE_MORTON_TO_LONLAT = 360.0 / Math.pow( 2, 32 );
+
+ /**
+ * 编码 morton code
+ *
+ * @param lon
+ * @param lat
+ * @return
+ */
+ public static long encodeMorton( Double lon, Double lat ) {
+
+ Long bit = 1L;
+ long mortonCode = 0L;
+ long x = ( long ) ( lon * RULE_MORTON );
+ long y = ( long ) ( lat * RULE_MORTON );
+
+ if ( y < 0 ) {
+ y += 0x7FFFFFFF;
+ }
+ y = y << 1;
+ for ( int i = 0; i < 32; i++ ) {
+ // x-part
+ mortonCode = mortonCode | ( x & bit );
+ x = x << 1;
+ bit = bit << 1;
+ // y-part
+ mortonCode = mortonCode | ( y & bit );
+ y = y << 1;
+ bit = bit << 1;
+ }
+
+ return mortonCode;
+ }
+
+ /**
+ * 将莫顿码解码为坐标
+ *
+ * @param mortonCode
+ * @return
+ */
+ public static double[] decodeMorton( long mortonCode ) {
+ long[] midPoint = mortonCodeToCoord( mortonCode );
+ normalizeCoord( midPoint );
+ double[] point = new double[2];
+
+ // 将经纬度长整数转化为 浮点类型
+ point[0] = midPoint[0] * RULE_MORTON_TO_LONLAT;
+ point[1] = midPoint[1] * RULE_MORTON_TO_LONLAT;
+ return point;
+ }
+
+ /**
+ * 莫顿码分别拆解为 编码后的经纬度长整数
+ *
+ * @param mortonCode
+ * @return
+ */
+ private static long[] mortonCodeToCoord( long mortonCode ) {
+ long bit = 1L;
+ long[] longPoint = new long[2];
+
+ for ( int i = 0; i < 32; i++ ) {
+ longPoint[0] |= mortonCode & bit;
+ mortonCode >>= 1;
+ longPoint[1] |= mortonCode & bit;
+ bit <<= 1;
+ }
+ return longPoint;
+ }
+
+ /**
+ * 对编码后的经纬度长整数进行解码
+ *
+ * @param midPoint
+ */
+ private static void normalizeCoord( long[] midPoint ) {
+ // if x > 180 degrees, then subtract 360 degrees
+ if ( midPoint[0] > NDS_180_DEGREES ) {
+ midPoint[0] -=
+ NDS_360_DEGREES + 1; // add 1 because 0 must be counted as well
+ } else if ( midPoint[0] < -NDS_180_DEGREES ) // if x < 180 , x += 360
+ {
+ midPoint[0] +=
+ NDS_360_DEGREES + 1; // add 1 because 0 must be counted as well
+ }
+
+ // if y > 90 degrees, then subtract 180 degrees
+ if ( midPoint[1] > NDS_90_DEGREES ) {
+ midPoint[1] -=
+ NDS_180_DEGREES + 1; // add 1 because 0 must be counted as well
+ } else if ( midPoint[1] < -NDS_90_DEGREES ) // if y < 90, y += 180
+ {
+ midPoint[1] +=
+ NDS_180_DEGREES + 1; // add 1 because 0 must be counted as well
+ }
+ return;
+ }
+
+
+ public static void main( String[] args ) {
+ System.out.println( encodeMorton( 116.39584, 39.98152 ) );
+ System.out.println( Arrays.toString( decodeMorton( 1415388919630379091L ) ) );
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/SimpleLocationCorrectStrategy.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/SimpleLocationCorrectStrategy.java
new file mode 100644
index 0000000000..57bf885f2e
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/utils/SimpleLocationCorrectStrategy.java
@@ -0,0 +1,257 @@
+package com.mogo.module.service.utils;
+
+import android.location.Location;
+import android.os.SystemClock;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.entity.CloudLocationInfo;
+import com.mogo.utils.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 定位预测纠错策略
+ *
+ * @author tongchenfei
+ */
+public class SimpleLocationCorrectStrategy {
+ private static final String TAG = "SimpleLocationCorrectStrategy";
+ private static final int ERR_COUNT_THRESHOLD = 3;
+ /**
+ * 目标距离误差是10米,就是在原目标距离基础上增加10米
+ */
+ private static final float TARGET_DISTANCE_DEVIATION = 10;
+
+ private CloudLocationInfo lastLocation = null;
+ private long anchorTime;
+ private int errCount;
+
+ private static SimpleLocationCorrectStrategy instance = new SimpleLocationCorrectStrategy();
+
+ public static SimpleLocationCorrectStrategy getInstance(){
+ return instance;
+ }
+
+ private List historyList = new ArrayList<>();
+ private List validList = new ArrayList<>();
+ private List correctList = new ArrayList<>();
+ private List errList = new ArrayList<>();
+
+ public CloudLocationInfo correct(CloudLocationInfo info) {
+ Logger.d(TAG, "info: " + info.print());
+ if(isLocationValid(info)) {
+ if(recordLocation()) {
+ historyList.add(info);
+ }
+
+ if (lastLocation == null) {
+ lastLocation = info;
+ anchorTime = SystemClock.elapsedRealtime();
+ Logger.d(TAG, "第一条数据");
+ if(recordLocation()) {
+ validList.add(lastLocation);
+ }
+ return info;
+ }
+ if (lastLocation.equals(info)) {
+ Logger.d(TAG, "相同坐标点==");
+ return info;
+ }
+ try {
+ float targetDistance =
+ (float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION;
+ float distance = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().calculateLineDistance(LocationParseUtil.cloudLocationToMogoLatLng(lastLocation), LocationParseUtil.cloudLocationToMogoLatLng(info));
+ Logger.d(TAG,
+ "准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}");
+ if (distance <= targetDistance) {
+ // 新的定位点在目标距离范围内,认为此数据有效
+ lastLocation = info;
+ anchorTime = SystemClock.elapsedRealtime();
+ errCount = 0;
+ Logger.d(TAG, "在范围内,为有效点");
+ if(recordLocation()) {
+ validList.add(lastLocation);
+ }
+ return info;
+ } else {
+ // 出现异常点
+ if (errCount >= ERR_COUNT_THRESHOLD) {
+ // 出错次数超过阈值,认为本次出错点为正确点
+ if(recordLocation()) {
+ errList.add(new CloudLocationInfo(lastLocation));
+ correctList.add(info);
+ }
+ lastLocation = info;
+ anchorTime = SystemClock.elapsedRealtime();
+ errCount = 0;
+ Logger.d(TAG, "出错次数超限,异常点变有效点");
+ return info;
+ } else {
+ // 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同
+ CloudLocationInfo nextInfo = new CloudLocationInfo(lastLocation);
+ MogoLatLng nextLatLon = computerThatLonLat(lastLocation.getLon(),
+ lastLocation.getLat(), lastLocation.getHeading(), targetDistance);
+ nextInfo.setLon(nextLatLon.lon);
+ nextInfo.setLat(nextLatLon.lat);
+ if(recordLocation()) {
+ errList.add(info);
+ correctList.add(nextInfo);
+ }
+ lastLocation = nextInfo;
+ anchorTime = SystemClock.elapsedRealtime();
+ errCount++;
+ Logger.d(TAG, "异常点纠偏 info: " + lastLocation);
+// return lastLocation;
+ if(recordLocation()) {
+ correctList.add(nextInfo);
+ }
+ return nextInfo;
+ }
+ }
+ } catch (Exception e) {
+ Logger.e(TAG, e, "纠偏异常");
+ e.printStackTrace();
+ }
+ }else{
+ Logger.d(TAG, "定位点异常");
+ if (lastLocation == null) {
+ return null;
+ }else{
+ try {
+ float targetDistance =
+ (float) (lastLocation.getSpeed() * (SystemClock.elapsedRealtime() - anchorTime) / 1000) + TARGET_DISTANCE_DEVIATION;
+ float distance = MogoApisHandler.getInstance().getApis().getMapServiceApi().getMapUIController().calculateLineDistance(LocationParseUtil.cloudLocationToMogoLatLng(lastLocation), LocationParseUtil.cloudLocationToMogoLatLng(info));
+ Logger.d(TAG,
+ "异常定位点\n准备计算{ lastInfo: " + lastLocation.print() + " info: " + info.print() + " targetDistance: " + targetDistance + " distance : " + distance + "}");
+ // 按照上一个点的方向和速度,计算下一个点的位置,下一个点除坐标点外,其余数据与上一个点相同
+ CloudLocationInfo nextInfo = new CloudLocationInfo(lastLocation);
+ MogoLatLng nextLatLon = computerThatLonLat(lastLocation.getLon(),
+ lastLocation.getLat(), lastLocation.getHeading(), targetDistance);
+ nextInfo.setLon(nextLatLon.lon);
+ nextInfo.setLat(nextLatLon.lat);
+ if(recordLocation()) {
+ errList.add(info);
+ correctList.add(nextInfo);
+ }
+ lastLocation = nextInfo;
+ anchorTime = SystemClock.elapsedRealtime();
+ errCount++;
+ Logger.d(TAG, "异常点纠偏 info: " + lastLocation);
+ if(recordLocation()) {
+ correctList.add(nextInfo);
+ }
+// return lastLocation;
+ return nextInfo;
+ }catch (Exception e){
+ Logger.e(TAG, e, "纠偏异常");
+ e.printStackTrace();
+ }
+ }
+ }
+ return null;
+ }
+
+ private boolean isLocationValid(CloudLocationInfo info) {
+ return info.getLat() != 0 && info.getLon() != 0;
+ }
+
+ private RecordLocationListener recordLocationListener = null;
+ private boolean hasCallbackReocrd = false;
+
+ public void setRecordLocationListener(RecordLocationListener recordLocationListener) {
+ this.recordLocationListener = recordLocationListener;
+ }
+
+ private boolean recordLocation(){
+ if (historyList.size() >= 100 && !hasCallbackReocrd && recordLocationListener != null) {
+ hasCallbackReocrd = true;
+ recordLocationListener.onRecordFinish(historyList, correctList,validList,correctList);
+ }
+ return historyList.size() < 100;
+ }
+
+
+ /**
+ * 根据距离和角度计算下一个经纬度
+ * 大地坐标系资料WGS-84 长半径a=6378137 短半径b=6356752.3142 扁率f=1/298.2572236
+ */
+ public MogoLatLng computerThatLonLat(double lon, double lat, double brng, double dist) {
+
+ double alpha1 = rad(brng);
+ double sinAlpha1 = Math.sin(alpha1);
+ double cosAlpha1 = Math.cos(alpha1);
+
+ // 扁率f=1/298.2572236
+ double f = 1 / 298.2572236;
+ double tanU1 = (1 - f) * Math.tan(rad(lat));
+ double cosU1 = 1 / Math.sqrt((1 + tanU1 * tanU1));
+ double sinU1 = tanU1 * cosU1;
+ double sigma1 = Math.atan2(tanU1, cosAlpha1);
+ double sinAlpha = cosU1 * sinAlpha1;
+ double cosSqAlpha = 1 - sinAlpha * sinAlpha;
+ // 长半径a=6378137
+ double a = 6378137;
+ // 短半径b=6356752.3142
+ double b = 6356752.3142;
+ double uSq = cosSqAlpha * (a * a - b * b) / (b * b);
+ double A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));
+ double B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));
+
+ double cos2SigmaM=0;
+ double sinSigma=0;
+ double cosSigma=0;
+ double sigma = dist / (b * A), sigmaP = 2 * Math.PI;
+ while (Math.abs(sigma - sigmaP) > 1e-12) {
+ cos2SigmaM = Math.cos(2 * sigma1 + sigma);
+ sinSigma = Math.sin(sigma);
+ cosSigma = Math.cos(sigma);
+ double deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)
+ - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));
+ sigmaP = sigma;
+ sigma = dist / (b * A) + deltaSigma;
+ }
+
+ double tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;
+ double lat2 = Math.atan2(sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1,
+ (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp));
+ double lambda = Math.atan2(sinSigma * sinAlpha1, cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1);
+ double C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha));
+ double L = lambda - (1 - C) * f * sinAlpha
+ * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));
+
+ // final bearing
+ double revAz = Math.atan2(sinAlpha, -tmp);
+
+ System.out.println(revAz);
+ System.out.println(lon+deg(L)+","+deg(lat2));
+ return new MogoLatLng(deg(lat2), lon + deg(L));
+ }
+
+ /**
+ * 度换成弧度
+ *
+ * @param d
+ * 度
+ * @return 弧度
+ */
+ private double rad(double d) {
+ return d * Math.PI / 180.0;
+ }
+
+ /**
+ * 弧度换成度
+ *
+ * @param x
+ * 弧度
+ * @return 度
+ */
+ private double deg(double x) {
+ return x * 180 / Math.PI;
+ }
+
+ public interface RecordLocationListener{
+ void onRecordFinish(List history, List correct,List valid,List err);
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/vrmode/VrModeController.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/vrmode/VrModeController.java
new file mode 100644
index 0000000000..97f52cf54d
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/vrmode/VrModeController.java
@@ -0,0 +1,135 @@
+package com.mogo.module.service.vrmode;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.RemoteException;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+import com.mogo.module.common.machinevision.IMachineVisionInterface;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+class VrModeController {
+
+ private static final String TAG = "VrModeController";
+
+ private static volatile VrModeController sInstance;
+ private volatile IMachineVisionInterface mMachineVisionInterface;
+ private ServiceConnection mServiceConnection;
+
+ private VrModeController() {
+ }
+
+ public static VrModeController getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( VrModeController.class ) {
+ if ( sInstance == null ) {
+ sInstance = new VrModeController();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ private boolean mIsBinding = false;
+
+ public void onVrModeChanged( boolean isVrMode ) {
+ if ( isVrMode ) {
+ bindVrModeService();
+ } else {
+ unbindVrModeService();
+ }
+ }
+
+ private void bindVrModeService() {
+ if ( mIsBinding ) {
+ return;
+ }
+ mIsBinding = true;
+ Intent intent = new Intent();
+ intent.setComponent( new ComponentName( "com.mogo.launcher.f", "com.mogo.module.machine.vision.MachineVisionMapService" ) );
+ AbsMogoApplication.getApp().bindService( intent, mServiceConnection = new ServiceConnection() {
+ @Override
+ public void onServiceConnected( ComponentName name, IBinder service ) {
+ mMachineVisionInterface = IMachineVisionInterface.Stub.asInterface( service );
+ }
+
+ @Override
+ public void onServiceDisconnected( ComponentName name ) {
+ mMachineVisionInterface = null;
+ }
+
+ @Override
+ public void onBindingDied( ComponentName name ) {
+ mMachineVisionInterface = null;
+ }
+
+ @Override
+ public void onNullBinding( ComponentName name ) {
+ mMachineVisionInterface = null;
+ }
+ }, Context.BIND_AUTO_CREATE );
+ }
+
+ private void unbindVrModeService() {
+ mIsBinding = false;
+ if ( mServiceConnection != null ) {
+ try {
+ AbsMogoApplication.getApp().unbindService( mServiceConnection );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "unbindVrModeService" );
+ }
+ }
+ }
+
+ public void onMainPageResumeStatusChanged( boolean isResume ) {
+ if ( mMachineVisionInterface != null ) {
+ if ( isResume ) {
+ try {
+ mMachineVisionInterface.showViewIfExist();
+ } catch ( RemoteException e ) {
+ Logger.e( TAG, e, "onMainPageResumeStatusChanged" );
+ }
+ } else {
+ try {
+ mMachineVisionInterface.hideViewIfExist();
+ } catch ( RemoteException e ) {
+ Logger.e( TAG, e, "onMainPageResumeStatusChanged" );
+ }
+ }
+ }
+ }
+
+ public void renderMogoSnapshotSetData( MogoSnapshotSetData data ) {
+ if ( data == null ) {
+ return;
+ }
+ if ( mMachineVisionInterface == null ) {
+ return;
+ }
+ try {
+ mMachineVisionInterface.postData( data );
+ } catch ( Exception e ) {
+ Logger.e( TAG, e, "postData" );
+ }
+ }
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java
new file mode 100644
index 0000000000..98ea2be926
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/LocationResult.java
@@ -0,0 +1,35 @@
+package com.mogo.module.service.websocket;
+
+import com.mogo.module.common.entity.CloudLocationInfo;
+
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * 自车定位信息
+ */
+class LocationResult {
+
+ /**
+ * sn
+ */
+ public String sn;
+
+ /**
+ * 最后一个定位点的莫顿码
+ */
+ public long mortonCode;
+
+ /**
+ * 最后一个定位点
+ */
+ public CloudLocationInfo lastCoordinate;
+
+ /**
+ * 1s 内的连续定位点
+ */
+ public List< CloudLocationInfo > coordinates;
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/OnePerSecondSendContent.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/OnePerSecondSendContent.java
new file mode 100644
index 0000000000..9324bc2b52
--- /dev/null
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/websocket/OnePerSecondSendContent.java
@@ -0,0 +1,25 @@
+package com.mogo.module.service.websocket;
+
+import com.mogo.service.adas.entity.ADASRecognizedResult;
+
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * 一秒一次的上行数据
+ */
+class OnePerSecondSendContent {
+
+ /**
+ * 自车定位点
+ */
+ public LocationResult self;
+
+ /**
+ * adas 识别物体:1s 识别到的最后帧
+ */
+ public List< ADASRecognizedResult > adas;
+}
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_110.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_110.png
new file mode 100644
index 0000000000..74f12e781d
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_110.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_119.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_119.png
new file mode 100644
index 0000000000..db23ff7144
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_119.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_120.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_120.png
new file mode 100644
index 0000000000..1c929ca8a0
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_120.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_bus.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_bus.png
new file mode 100644
index 0000000000..afe1372cb9
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_bus.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_taxi.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_taxi.png
new file mode 100644
index 0000000000..0b363c6d61
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_car_type_taxi.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow_vr.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow_vr.png
new file mode 100644
index 0000000000..eca4f04cef
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/icon_map_marker_location_yellow_vr.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery.png
new file mode 100644
index 0000000000..f11b4a4178
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery_light.png b/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery_light.png
new file mode 100644
index 0000000000..e78307acd8
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable-xhdpi/module_service_ic_rc_road_slippery_light.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_110.png b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_110.png
new file mode 100644
index 0000000000..74f12e781d
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_110.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_119.png b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_119.png
new file mode 100644
index 0000000000..db23ff7144
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_119.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_120.png b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_120.png
new file mode 100644
index 0000000000..1c929ca8a0
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_120.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_bus.png b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_bus.png
new file mode 100644
index 0000000000..afe1372cb9
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_bus.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_taxi.png b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_taxi.png
new file mode 100644
index 0000000000..0b363c6d61
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/icon_map_marker_car_type_taxi.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/module_service_ic_rc_road_slippery.png b/modules/mogo-module-service/src/main/res/drawable/module_service_ic_rc_road_slippery.png
new file mode 100644
index 0000000000..f11b4a4178
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/module_service_ic_rc_road_slippery.png differ
diff --git a/modules/mogo-module-service/src/main/res/drawable/module_service_ic_rc_road_slippery_light.png b/modules/mogo-module-service/src/main/res/drawable/module_service_ic_rc_road_slippery_light.png
new file mode 100644
index 0000000000..e78307acd8
Binary files /dev/null and b/modules/mogo-module-service/src/main/res/drawable/module_service_ic_rc_road_slippery_light.png differ
diff --git a/modules/mogo-module-tanlu/build/intermediates/incremental/packageDebugResources/merged.dir/values-mdpi-v4/values-mdpi-v4.xml b/modules/mogo-module-tanlu/build/intermediates/incremental/packageDebugResources/merged.dir/values-mdpi-v4/values-mdpi-v4.xml
index 9acf79e69f..2a32aa9897 100644
--- a/modules/mogo-module-tanlu/build/intermediates/incremental/packageDebugResources/merged.dir/values-mdpi-v4/values-mdpi-v4.xml
+++ b/modules/mogo-module-tanlu/build/intermediates/incremental/packageDebugResources/merged.dir/values-mdpi-v4/values-mdpi-v4.xml
@@ -1,80 +1,100 @@
- 6px
- 69px
- 22px
- 18px
- 278px
- 32px
- 36px
- 56px
- 20px
- 23px
- 8px
- 10px
- 418px
- 28px
- 56px
+
+ 52px
+ 52px
+ 48px
+ 48px
72px
5px
- 26px
- 5px
- 15px
- 15px
- 2px
- 13px
- 109px
- 2px
- 10px
- 23px
- 186px
- 176px
- 6px
- 13px
- 28px
- 16px
- 44px
- 30px
- 136px
- 158px
- 19px
- 250px
- 642px
- 45px
- 25px
- 25px
- 90px
- 10px
- 700px
- 96px
+
+ 56px
+ 56px
96px
+ 96px
+ 90px
+ 700px
+ 10px
+
+ 72px
+ 25px
+ 25px
16px
48px
22px
700px
- 56px
- 56px
+
+
+ 5px
+ 15px
+ 2px
+ 19px
+ 136px
+ 44px
+ 2px
+ 109px
+ 10px
+ 23px
+ 30px
+ 28px
+ 16px
+ 22px
+ 26px
+
+
+ 6px
+
+ 400px
+ 150px
+ 80px
+ 32px
+
+ 260px
+ 44px
+
+
18px
14px
- 72px
- 48px
- 48px
- 16px
- 32px
- 44px
- 400px
- 80px
- 150px
- 17px
+ 15px
+ 13px
+ 16px
+
+
+ 418px
+ 278px
+ 69px
+ 22px
+ 36px
+ 18px
+ 32px
+
+ 20px
+ 56px
+ 23px
+
+ 10px
+ 8px
+
+
+ 642px
+ 186px
+ 176px
+ 250px
+ 158px
+ 45px
+
+ 13px
+ 6px
13px
+ 17px
3px
18px
- 22px
+ 26px
4px
- 6px
- 52px
- 52px
- 26px
- 260px
+
+ 28px
+ 56px
+ 6px
16px
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/build.gradle b/modules/mogo-module-v2x/build.gradle
index f45d57407d..1a7eaf2143 100644
--- a/modules/mogo-module-v2x/build.gradle
+++ b/modules/mogo-module-v2x/build.gradle
@@ -86,10 +86,10 @@ dependencies {
}
annotationProcessor rootProject.ext.dependencies.aroutercompiler
-
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ implementation project(':modules:mogo-module-obu')
}
apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java
index f385c2e48f..0bb891384e 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XConst.java
@@ -125,4 +125,8 @@ public class V2XConst {
*/
public static final String V2X_MARKER_GOVERNMENT = "V2X_MARKER_GOVERNMENT";
+ /**
+ * 绿波车速marker
+ */
+ public static final String V2X_OPTIMAL_SPEED_MARKER = "V2X_OPTIMAL_SPEED_MARKER";
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java
index e489d62a16..3bd380380b 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XModuleProvider.java
@@ -36,6 +36,7 @@ import com.mogo.module.v2x.entity.net.V2XStrategyPushRes;
import com.mogo.module.v2x.network.V2XRefreshCallback;
import com.mogo.module.v2x.receiver.SceneBroadcastReceiver;
import com.mogo.module.v2x.scenario.impl.V2XScenarioManager;
+import com.mogo.module.v2x.scenario.scene.livecar.V2XVoiceCallLiveBiz;
import com.mogo.module.v2x.scenario.scene.park.V2XIllegalParkScenario;
import com.mogo.module.v2x.scenario.scene.park.V2XIllegalParkWindow;
import com.mogo.module.v2x.utils.FatigueDrivingUtils;
@@ -140,7 +141,7 @@ public class V2XModuleProvider implements
V2XVoiceManager.INSTANCE.init(context);
registerListener();
initData();
-
+ initBiz(context);
// 注册广播接收场景弹窗使用的
SceneBroadcastReceiver localReceiver = new SceneBroadcastReceiver();
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
@@ -148,6 +149,12 @@ public class V2XModuleProvider implements
intentFilter.addAction(V2XConst.BROADCAST_SCENE_HANDLER_ACTION);
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
+ // obu数据转发初始化
+ V2XObuManager.getInstance().init(context);
+ }
+
+ private void initBiz(Context context) {
+ V2XVoiceCallLiveBiz.getInstance().init(context);
}
private void initData() {
@@ -175,6 +182,9 @@ public class V2XModuleProvider implements
* 获取疲劳驾驶的配置
*/
private void refreshStrategyConfig() {
+ //TODO V2XDemoManager这个是演示需求获取服务端配置可用直播车机
+ V2XDemoManager.getInstance().initData();
+ // 获取疲劳驾驶的配置
V2XServiceManager
.getV2XRefreshModel()
.getStrategyPush(new V2XRefreshCallback() {
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java
new file mode 100644
index 0000000000..e0e58bf260
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XObuManager.java
@@ -0,0 +1,290 @@
+package com.mogo.module.v2x;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.Message;
+import android.os.SystemClock;
+import android.util.ArrayMap;
+
+import androidx.localbroadcastmanager.content.LocalBroadcastManager;
+
+import com.amap.api.maps.CoordinateConverter;
+import com.amap.api.maps.model.LatLng;
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.module.common.entity.V2XMessageEntity;
+import com.mogo.module.common.entity.V2XObuEventEntity;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.listener.V2XLocationListener;
+import com.mogo.module.v2x.scenario.scene.obu.V2XObuEventScenario;
+import com.mogo.module.v2x.utils.ADASUtils;
+import com.mogo.module.v2x.utils.DrivingDirectionUtils;
+import com.mogo.module.v2x.utils.ObuConfig;
+import com.mogo.module.v2x.utils.TestOnLineCarUtils;
+import com.mogo.service.entrance.IMogoEntranceButtonController;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.mogo.module.obu.ObuConstant;
+import com.zhidao.mogo.module.obu.ObuManager;
+import com.zhidao.mogo.module.obu.obu.IObuCallback;
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo;
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuLocationInfo;
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuTrafficLightInfo;
+
+import org.json.JSONObject;
+
+import java.util.Map;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+import static com.mogo.module.v2x.V2XServiceManager.getContext;
+import static com.mogo.module.v2x.scenario.scene.obu.V2XObuEventScenario.ACTION_LAUNCHER_ADAS_APP_BIZ;
+
+/**
+ * obu数据管理类封装
+ *
+ * @author tongchenfei
+ */
+public class V2XObuManager implements IObuCallback, Handler.Callback {
+ private static final String TAG = V2XObuManager.class.getSimpleName();
+
+ private static final long DEFAULT_INTERVAL_TIME = 30_000L;
+
+ private V2XObuManager() {
+ }
+
+ private volatile static V2XObuManager instance = null;
+
+ public static V2XObuManager getInstance() {
+ if (instance == null) {
+ synchronized (V2XObuManager.class) {
+ if (instance == null) {
+ instance = new V2XObuManager();
+ }
+ }
+ }
+ return instance;
+ }
+
+ private static final int MSG_HIDE_TRAFFIC_LIGHT = 1001;
+ private static final long DEFAULT_HIDE_TRAFFIC_LIGHT_DELAY = 1500L;
+ private Handler handler = new Handler(this);
+
+ public void init(Context context) {
+ Logger.d(MODULE_NAME, "obuManager初始化--");
+ ObuManager obuManager = new ObuManager();
+ obuManager.init(context);
+ obuManager.registerObuDataChangedListener(this);
+ }
+
+ /**
+ * 用来处理30秒内不重复播报的情况
+ */
+ private Map intervalMap = new ArrayMap<>();
+
+ private int parseObuEvent(String type) {
+ switch (type) {
+ case "06":
+ // 紧急制动预警
+ return ObuConstant.TYPE_URGENCY_COLLISION_WARNING;
+ case "13":
+ // 绿波车速引导
+ return ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY;
+ case "39":
+ // 行人碰撞预警
+ return ObuConstant.TYPE_ROAD_USER_COLLISION_WARNING;
+ case "vip变灯提醒":
+ return ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP;
+ default:
+ return -1;
+ }
+ }
+
+ private MogoLocation[] historyPath = new MogoLocation[2];
+
+ private float computeCarAngle(MogoLocation location) {
+ float angle = 0f;
+ if (historyPath[0] != null) {
+ historyPath[1] = historyPath[0];
+ }
+ historyPath[0] = location;
+
+ if (historyPath[1] != null && historyPath[0] != null) {
+ double carAngle =
+ DrivingDirectionUtils.getCarAngle(
+ historyPath[1].getLatitude(), historyPath[1].getLongitude(),
+ historyPath[0].getLatitude(), historyPath[0].getLongitude()
+ );
+ // 这里是真实的车辆角度
+ angle = (float) carAngle;
+ }
+ return angle;
+ }
+
+ private static final String CALL_ADAS_SHOW_TRAFFIC_LIGHT = "2";
+ private static final String CALL_ADAS_HIDE_TRAFFIC_LIGHT = "1";
+
+ private void sendTrafficLightStatusToAdas(String status, MogoObuTrafficLightInfo trafficLightInfo) {
+ if (V2XObuEventScenario.getInstance().isInChangeLightForVip()) {
+ status = CALL_ADAS_HIDE_TRAFFIC_LIGHT;
+ }
+ try {
+ Intent intent = new Intent(ACTION_LAUNCHER_ADAS_APP_BIZ);
+ JSONObject json = new JSONObject();
+ // String action "1" - 隐藏 "2" - 显示
+ json.put("action", status);
+ if (trafficLightInfo != null) {
+ if (trafficLightInfo.getLightStatus() == null) {
+ json.put("lightStatus", "G");
+ } else {
+ json.put("lightStatus", trafficLightInfo.getLightStatus());
+ }
+ if (trafficLightInfo.getSurplusTime() == null) {
+ json.put("surplusTime", "0");
+ } else {
+ json.put("surplusTime", trafficLightInfo.getSurplusTime());
+ }
+ }
+ String data = json.toString();
+ Logger.d(MODULE_NAME, "发送红绿灯广播: " + data);
+ intent.putExtra("data", data);
+ intent.putExtra("type", 2);
+ getContext().sendBroadcast(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ Logger.e(MODULE_NAME, e, "发送红绿灯广播异常==");
+ }
+ }
+
+ @Override
+ public boolean handleMessage(Message msg) {
+ if (msg.what == MSG_HIDE_TRAFFIC_LIGHT) {
+ sendTrafficLightStatusToAdas(CALL_ADAS_HIDE_TRAFFIC_LIGHT, null);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onEventInfoCallback(MogoObuEventInfo info) {
+ Logger.d("V2X_OBU_EVENT", "carEventInfo==" + info);
+ Long last = intervalMap.get(info.getTypeCode());
+ if (last == null) {
+ last = 0L;
+ }
+// int eventType = parseObuEvent(info.getTypeCode());
+ int eventType = info.getMogoEventId();
+ if (eventType == ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY&& DebugConfig.getObuType() == DebugConfig.OBU_TYPE_CIDI) {
+ // 加一个容错机制,如果已经驶过绿波车速路口,那么再收到绿波车速obu事件,就不再上报
+ MogoLocation currentLocation = V2XLocationListener.getInstance().getLastCarLocation();
+ double eventAngle = DrivingDirectionUtils.getDegreeOfCar2Poi(
+ currentLocation.getLongitude(),
+ currentLocation.getLatitude(),
+ V2XObuEventScenario.getInstance().getOptimalCrossing().getLon(),
+ V2XObuEventScenario.getInstance().getOptimalCrossing().getLat(),
+ (int) currentLocation.getBearing()
+ );
+ if (0 > eventAngle || eventAngle > 20) {
+ Logger.e(MODULE_NAME, "超出绿波引导点范围,不处理此次事件===" + eventAngle);
+ return;
+ }
+ }
+ if (SystemClock.elapsedRealtime() - last > DEFAULT_INTERVAL_TIME||DebugConfig.getObuType() == DebugConfig.OBU_TYPE_HUALI) {
+ // 距离上次记录超过三十秒,继续相关逻辑,如果不超过三十秒,忽略此次事件
+ // 华砺智行obu暂时去掉此判断
+ intervalMap.put(info.getTypeCode(), SystemClock.elapsedRealtime());
+ V2XMessageEntity messageEntity = new V2XMessageEntity<>();
+ messageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_OBU_EVENT);
+ switch (eventType) {
+ case ObuConstant
+ .TYPE_OPTIMAL_SPEED_ADVISORY:
+ // 绿波车速引导
+ V2XObuEventEntity optimalEvent = new V2XObuEventEntity();
+ optimalEvent.setType(ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY);
+ optimalEvent.setDesc(info.getDescribe());
+ messageEntity.setContent(optimalEvent);
+ V2XObuEventScenario.getInstance().init(messageEntity);
+ break;
+ case ObuConstant.TYPE_URGENCY_COLLISION_WARNING:
+ // 前车紧急制动预警
+ V2XObuEventEntity urgencyEvent = new V2XObuEventEntity();
+ urgencyEvent.setType(ObuConstant.TYPE_URGENCY_COLLISION_WARNING);
+ urgencyEvent.setDesc(V2XObuEventScenario.URGENCY_COLLISION_WARN_TEXT);
+ messageEntity.setContent(urgencyEvent);
+ V2XObuEventScenario.getInstance().init(messageEntity);
+ V2XServiceManager.getMogoEntranceButtonController().showLeftNoticeByType(IMogoEntranceButtonController.NOTICE_TYPE_SUDDENLY_BREAK, R.drawable.module_v2x_suddenly_break, "前车急刹,保持车距");
+ break;
+ case ObuConstant.TYPE_ROAD_USER_COLLISION_WARNING:
+ // 行人预警,给adas发送广播即可
+ V2XPushMessageEntity entity = new V2XPushMessageEntity();
+ // 盲区行人预警的sceneId-100003
+ entity.setSceneId("100003");
+ entity.setTts("前方行人,注意减速");
+ entity.setExpireTime(30_000);
+ entity.setAlarmContent("前方行人,注意减速");
+ ADASUtils.broadcastToADAS(getContext(), entity);
+ break;
+ case ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP:
+ // vip变灯提醒
+ V2XObuEventEntity changeLightEvent = new V2XObuEventEntity();
+ changeLightEvent.setType(ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP);
+ changeLightEvent.setDesc(info.getDescribe());
+ messageEntity.setContent(changeLightEvent);
+ V2XObuEventScenario.getInstance().init(messageEntity);
+ break;
+ case ObuConstant.TYPE_RUSH_RED_LIGHT:
+ // 闯红灯预警
+ V2XObuEventEntity rushRedLightEvent = new V2XObuEventEntity();
+ rushRedLightEvent.setType(ObuConstant.TYPE_RUSH_RED_LIGHT);
+ rushRedLightEvent.setDesc(info.getDescribe());
+ messageEntity.setContent(rushRedLightEvent);
+ V2XObuEventScenario.getInstance().init(messageEntity);
+ break;
+ case ObuConstant.TYPE_CROSS_COLLISION_WARNING:
+ // 交叉口碰撞预警
+ V2XMessageEntity v2XMessageEntity =
+ TestOnLineCarUtils.getV2XScenarioCrossCrash();
+ Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION);
+ intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity);
+ LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
+ break;
+ default:
+ break;
+ }
+ }else{
+ Logger.d(TAG,"未超过时限,不展示事件");
+ }
+ }
+
+ @Override
+ public void onLocationInfoCallback( MogoObuLocationInfo locationInfo) {
+ if (ObuConfig.useObuLocation) {
+ MogoLocation currentLocation = new MogoLocation();
+
+ CoordinateConverter converter = new CoordinateConverter(getContext());
+ converter.from(CoordinateConverter.CoordType.GPS);
+ LatLng latLng = new LatLng(locationInfo.getLat(), locationInfo.getLon());
+ converter.coord(latLng);
+ LatLng convert = converter.convert();
+
+ currentLocation.setLatitude(convert.latitude);
+ currentLocation.setLongitude(convert.longitude);
+ currentLocation.setBearing(computeCarAngle(currentLocation));
+
+ V2XObuEventScenario.getInstance().updateLocation(currentLocation);
+ }
+ }
+
+ @Override
+ public void onTrafficLightInfoCallback(MogoObuTrafficLightInfo trafficLightInfo) {
+ handler.removeMessages(MSG_HIDE_TRAFFIC_LIGHT);
+ if (trafficLightInfo == null) {
+ Logger.d("V2X_OBU_EVENT", "红绿灯数据为空===");
+ sendTrafficLightStatusToAdas(CALL_ADAS_HIDE_TRAFFIC_LIGHT, null);
+ } else {
+ Logger.d("V2X_OBU_EVENT", "红绿灯数据==" + trafficLightInfo);
+ handler.sendEmptyMessageDelayed(MSG_HIDE_TRAFFIC_LIGHT,
+ DEFAULT_HIDE_TRAFFIC_LIGHT_DELAY);
+ sendTrafficLightStatusToAdas(CALL_ADAS_SHOW_TRAFFIC_LIGHT, trafficLightInfo);
+ }
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java
index ad0a8980a6..d4d17103f7 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/V2XSocketManager.java
@@ -63,7 +63,7 @@ public class V2XSocketManager {
register401007();
register401009();
// TODO 这里是前瞻需求,量产版本需要注释
- //register401003();
+ register401003();
// TODO 旧版本的一种V2X预警形式,已经废弃了
//register401006();
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java
index 65c130fde1..c5e6749eb6 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/adapter/holder/V2XPushEventVH.java
@@ -168,6 +168,7 @@ public class V2XPushEventVH extends V2XBaseViewHolder {
break;
case "100017"://政府公告
+ case "100018"://故障车辆推送
ivRoadEventLike.setVisibility(View.VISIBLE);
ivRoadCallChart.setVisibility(View.GONE);
ivRoadEventNav.setVisibility(View.GONE);
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/net/V2XLiveCrossRoad.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/net/V2XLiveCrossRoad.java
new file mode 100644
index 0000000000..d99dec5ce4
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/entity/net/V2XLiveCrossRoad.java
@@ -0,0 +1,109 @@
+package com.mogo.module.v2x.entity.net;
+
+import com.mogo.commons.data.BaseData;
+
+import java.io.Serializable;
+
+/**
+ * author : unknown
+ * desc : 路口实况返回数据
+ */
+public class V2XLiveCrossRoad extends BaseData implements Serializable {
+ public V2XLiveCrossRoadEntity result;
+
+ public V2XLiveCrossRoadEntity getResult() {
+ return result;
+ }
+
+ public void setResult(V2XLiveCrossRoadEntity result) {
+ this.result = result;
+ }
+
+ @Override
+ public String toString() {
+ return "V2XLiveCrossRoad{" +
+ "result=" + result +
+ ", code=" + code +
+ ", msg='" + msg + '\'' +
+ '}';
+ }
+
+ public class V2XLiveCrossRoadEntity {
+ private int cameraParentId;
+ private int cameraId;
+ private String url;
+ private Double lat;
+ private Double lon;
+ private Double distance;
+
+ public V2XLiveCrossRoadEntity(int cameraParentId, int cameraId, String url, Double lat, Double lon, Double distance) {
+ this.cameraParentId = cameraParentId;
+ this.cameraId = cameraId;
+ this.url = url;
+ this.lat = lat;
+ this.lon = lon;
+ this.distance = distance;
+ }
+
+ public int getCameraParentId() {
+ return cameraParentId;
+ }
+
+ public void setCameraParentId(int cameraParentId) {
+ this.cameraParentId = cameraParentId;
+ }
+
+ public int getCameraId() {
+ return cameraId;
+ }
+
+ public void setCameraId(int cameraId) {
+ this.cameraId = cameraId;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public Double getLon() {
+ return lon;
+ }
+
+ public void setLon(Double lon) {
+ this.lon = lon;
+ }
+
+ public Double getDistance() {
+ return distance;
+ }
+
+ public void setDistance(Double distance) {
+ this.distance = distance;
+ }
+
+ @Override
+ public String toString() {
+ return "V2XLiveCrossRoadEntity{" +
+ "cameraParentId=" + cameraParentId +
+ ", cameraId=" + cameraId +
+ ", url='" + url + '\'' +
+ ", lat=" + lat +
+ ", lon=" + lon +
+ ", distance=" + distance +
+ '}';
+ }
+ }
+
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt
index 631900f819..64a2b39735 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/fragment/V2XEventPanelFragment.kt
@@ -24,6 +24,7 @@ import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.mvp.MvpFragment
import com.mogo.module.common.entity.MarkerExploreWay
import com.mogo.module.common.entity.MarkerPoiTypeEnum
+import com.mogo.module.common.MogoApisHandler
import com.mogo.module.v2x.R
import com.mogo.module.v2x.SpacesItemDecoration
import com.mogo.module.v2x.V2XConst.MODULE_NAME
@@ -39,6 +40,8 @@ import com.mogo.module.v2x.view.V2XEventPanelHistoryCountView
import com.mogo.module.v2x.voice.V2XVoiceCallbackListener
import com.mogo.module.v2x.voice.V2XVoiceConstants
import com.mogo.module.v2x.voice.V2XVoiceManager
+import com.mogo.service.statusmanager.IMogoStatusChangedListener
+import com.mogo.service.statusmanager.StatusDescriptor
import com.mogo.utils.logger.Logger
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@@ -50,7 +53,7 @@ import org.greenrobot.eventbus.ThreadMode
*
* @author tongchenfei
*/
-class V2XEventPanelFragment : MvpFragment(), SurroundingDetailItemListener {
+class V2XEventPanelFragment : MvpFragment(), SurroundingDetailItemListener ,IMogoStatusChangedListener{
private val TAG = "EventPanelFragment"
@@ -200,7 +203,6 @@ class V2XEventPanelFragment : MvpFragment {
- // 更改选中是否加粗
// 更改选中是否加粗
mRbScenarioHistory?.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
mRbSurroundingEvent?.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
@@ -245,7 +247,13 @@ class V2XEventPanelFragment : MvpFragment manualMarkingTrafficJam(@FieldMap Map params);
+
+ /**
+ * 查询路口实况
+ */
+ @FormUrlEncoded
+ @POST("/yycp-geo-fence-carService/car/camera/no/nextTest/v1")
+// @POST("/yycp-geo-fence-carService/car/camera/no/next/v1")
+ Observable queryCrossRoadsLive(@FieldMap Map parameters);
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/network/V2XRefreshModel.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/network/V2XRefreshModel.java
index b8708c3a82..f5cbfc54e0 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/network/V2XRefreshModel.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/network/V2XRefreshModel.java
@@ -4,18 +4,22 @@ import android.content.Context;
import android.text.TextUtils;
import com.alibaba.android.arouter.launcher.ARouter;
+import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.data.BaseData;
import com.mogo.commons.network.ParamsProvider;
import com.mogo.commons.network.SubscribeImpl;
import com.mogo.commons.network.Utils;
import com.mogo.map.MogoLatLng;
+import com.mogo.map.location.MogoLocation;
import com.mogo.module.common.entity.MarkerResponse;
import com.mogo.module.service.ServiceConst;
import com.mogo.module.service.network.RefreshBody;
import com.mogo.module.v2x.V2XConst;
+import com.mogo.module.v2x.V2XServiceManager;
import com.mogo.module.v2x.entity.net.V2XDemoUserInfoRes;
import com.mogo.module.v2x.entity.net.V2XLiveCarBroadcastReq;
import com.mogo.module.v2x.entity.net.V2XLiveCarRes;
+import com.mogo.module.v2x.entity.net.V2XLiveCrossRoad;
import com.mogo.module.v2x.entity.net.V2XLivePushVoRes;
import com.mogo.module.v2x.entity.net.V2XSeekHelpRes;
import com.mogo.module.v2x.entity.net.V2XStrategyPushRes;
@@ -613,4 +617,42 @@ public class V2XRefreshModel {
});
}
}
+
+ public void queryCrossRoadsLive(V2XRefreshCallback callback) {
+ if (mV2XApiService != null) {
+ final Map map = new ParamsProvider.Builder(mContext).build();
+ MogoLocation lastKnowLocation = V2XServiceManager.getMapService().getSingletonLocationClient(AbsMogoApplication.getApp()).getLastKnowLocation();
+ double lat = lastKnowLocation.getLatitude();
+ double lon = lastKnowLocation.getLongitude();
+ String tmpLat = String.valueOf(lat);
+ String tmpLon = String.valueOf(lon);
+ float bearing = lastKnowLocation.getBearing();
+ String json = "{\"lat\":" + tmpLat + ",\"lon\":" + tmpLon + ",\"direction\":" + bearing + "}";
+ map.put("sn", Utils.getSn());
+ map.put("data", json);
+ mV2XApiService.queryCrossRoadsLive(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new SubscribeImpl(RequestOptions.create(mContext)) {
+ @Override
+ public void onSuccess(V2XLiveCrossRoad o) {
+ super.onSuccess(o);
+ if (callback != null) {
+ callback.onSuccess(o);
+ }
+ }
+
+ @Override
+ public void onError(String message, int code) {
+ super.onError(message, code);
+ if (callback != null) {
+ if (TextUtils.isEmpty(message)) {
+ message = "网络错误,请稍后重试";
+ }
+ callback.onFail(message);
+ }
+ }
+ });
+ }
+ }
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java
index 5c9bfbafe2..4f2d8ac7c7 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/impl/V2XScenarioManager.java
@@ -12,8 +12,10 @@ import com.mogo.module.v2x.scenario.scene.animation.V2XAnimationScenario;
import com.mogo.module.v2x.scenario.scene.fatigue.V2XFatigueDrivingScenario;
import com.mogo.module.v2x.scenario.scene.help.V2XCarForHelpScenario;
import com.mogo.module.v2x.scenario.scene.livecar.V2XPushLiveCarScenario;
+import com.mogo.module.v2x.scenario.scene.livecar.V2XVoiceCallLiveScenario;
import com.mogo.module.v2x.scenario.scene.park.V2XIllegalParkScenario;
import com.mogo.module.v2x.scenario.scene.push.V2XPushEventScenario;
+import com.mogo.module.v2x.scenario.scene.pushVR.V2XPushVREventScenario;
import com.mogo.module.v2x.scenario.scene.road.V2XRoadEventScenario;
import com.mogo.module.v2x.scenario.scene.seek.V2XSeekHelpScenario;
import com.mogo.module.v2x.scenario.scene.ugc.V2XEventUgcScenario;
@@ -100,6 +102,12 @@ public class V2XScenarioManager implements IV2XScenarioManager {
case V2XMessageEntity.V2XTypeEnum.ALERT_EVENT_UGC_WARNING:
mV2XScenario = V2XEventUgcScenario.getInstance();
break;
+ case V2XMessageEntity.V2XTypeEnum.ALERT_VOICE_CALL_FOR_LIVECAR_SHOW:
+ mV2XScenario = V2XVoiceCallLiveScenario.getInstance();
+ break;
+ case V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW:
+ mV2XScenario = V2XPushVREventScenario.getInstance();
+ break;
default:
Logger.e(MODULE_NAME, "当前V2X消息类型未定义。");
TipToast.tip("当前V2X消息类型未定义");
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 b2e2860f21..c77d966c31 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
@@ -8,6 +8,7 @@ import android.view.View;
import androidx.constraintlayout.widget.ConstraintLayout;
+import com.mogo.commons.voice.AIAssist;
import com.mogo.module.common.entity.V2XPushMessageEntity;
import com.mogo.module.v2x.R;
import com.mogo.module.v2x.V2XServiceManager;
@@ -59,6 +60,7 @@ public class V2XAnimationWindow extends ConstraintLayout implements IV2XWindow implements IM
if (getV2XButton() != null) {
getV2XButton().setOnActionListener(this::showDialog);
getV2XButton().show();
+ V2XServiceManager.getMogoEntranceButtonController().showLeftNoticeByType(IMogoEntranceButtonController.NOTICE_TYPE_SEEK_HELP, R.drawable.module_v2x_left_notice_seek_help, "正在发起求助...");
}
});
}
@@ -117,6 +120,7 @@ public class V2XCarForHelpScenario extends AbsV2XScenario implements IM
public void closeButton() {
if (V2XServiceManager.getMoGoStatusManager().isSeekHelping()) {
Logger.d(TAG, "关闭自车求助按钮!");
+ V2XServiceManager.getMogoEntranceButtonController().hideLeftNoticeByType(IMogoEntranceButtonController.NOTICE_TYPE_SEEK_HELP);
V2XServiceManager.getMoGoStatusManager().setSeekHelping(TAG, false);
if (getV2XButton() != null) {
getV2XButton().close();
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java
new file mode 100644
index 0000000000..911b7db6c0
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveBiz.java
@@ -0,0 +1,151 @@
+package com.mogo.module.v2x.scenario.scene.livecar;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import com.mogo.commons.voice.AIAssist;
+import com.mogo.module.common.entity.V2XMessageEntity;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.V2XDemoManager;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.entity.net.V2XDemoUserInfoRes;
+import com.mogo.module.v2x.entity.net.V2XLiveCrossRoad;
+import com.mogo.module.v2x.network.V2XRefreshCallback;
+import com.mogo.module.v2x.network.V2XRefreshModel;
+import com.mogo.module.v2x.utils.ToastUtils;
+import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
+import com.mogo.module.v2x.voice.V2XVoiceManager;
+import com.mogo.service.statusmanager.StatusDescriptor;
+import com.mogo.utils.logger.Logger;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+import static com.mogo.module.v2x.voice.V2XVoiceConstants.COMMAND_ZHIDAO_V2X_AHEAD_LIVE;
+import static com.mogo.module.v2x.voice.V2XVoiceConstants.COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP;
+import static com.mogo.module.v2x.voice.V2XVoiceConstants.COMMAND_ZHIDAO_V2X_CROSSROADS_LIVE;
+import static com.mogo.module.v2x.voice.V2XVoiceConstants.COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP;
+import static com.mogo.service.statusmanager.StatusDescriptor.MAIN_PAGE_RESUME;
+
+/**
+ * author : unknown
+ * desc : TODO 演示使用的语音呼叫查看直播车辆 或者 路口实况 业务模块
+ */
+public class V2XVoiceCallLiveBiz {
+
+ private static final String REGISTER_LIFECYCLE_TAG = V2XVoiceCallLiveBiz.class.getSimpleName();
+
+ private V2XVoiceCallLiveBiz() {
+
+ }
+
+ private static volatile V2XVoiceCallLiveBiz mV2XVoiceCallLiveBiz;
+
+ public static V2XVoiceCallLiveBiz getInstance() {
+ if (mV2XVoiceCallLiveBiz == null) {
+ synchronized (V2XVoiceCallLiveBiz.class) {
+ if (mV2XVoiceCallLiveBiz == null) {
+ mV2XVoiceCallLiveBiz = new V2XVoiceCallLiveBiz();
+ }
+ }
+ }
+ return mV2XVoiceCallLiveBiz;
+ }
+
+ private Context mContext;
+
+ //语音词指令 查看前车视频回调
+ private V2XVoiceCallbackListener v2XVoiceCallbackFrontLiveCarListener = (command, intent) -> {
+ Logger.d(MODULE_NAME, "语音词指令 查看前车视频回调");
+ getFrontCarLive();
+ };
+
+ //语音词指令 查看路口实况回调
+ private V2XVoiceCallbackListener v2XVoiceCallbackOpenRoadCameraListener = (command, intent) -> {
+ Logger.d(MODULE_NAME, "语音词指令 查看路口实况回调");
+ AIAssist.getInstance(mContext).speakTTSVoice(mContext.getString(R.string.v2x_voice_see_crossroad_live));
+ getOpenRoadCameraLive();
+ };
+
+ public void init(Context context) {
+ Logger.d(MODULE_NAME, "init");
+ this.mContext = context;
+ registerLifecycleChange();
+ registerVoice();
+ }
+
+ private void registerLifecycleChange() {
+ V2XServiceManager.getMoGoStatusManager().registerStatusChangedListener(REGISTER_LIFECYCLE_TAG, MAIN_PAGE_RESUME, (descriptor, isTrue) -> {
+ if (descriptor == StatusDescriptor.MAIN_PAGE_RESUME) {
+ if (isTrue) {
+ registerVoice();
+ } else {
+ unRegisterVoice();
+ }
+ }
+ });
+ }
+
+ private void registerVoice() {
+ V2XVoiceManager.INSTANCE.registerUnWakeVoice(COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP, v2XVoiceCallbackFrontLiveCarListener)
+ .registerUnWakeVoice(COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP, v2XVoiceCallbackOpenRoadCameraListener)
+ .registerWakeCmd(COMMAND_ZHIDAO_V2X_AHEAD_LIVE, v2XVoiceCallbackFrontLiveCarListener)
+ .registerWakeCmd(COMMAND_ZHIDAO_V2X_CROSSROADS_LIVE, v2XVoiceCallbackOpenRoadCameraListener);
+ }
+
+ private void unRegisterVoice() {
+ V2XVoiceManager.INSTANCE.unRegisterUnWakeVoice(COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP)
+ .unRegisterUnWakeVoice(COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP)
+ .unRegisterWakeCmd(COMMAND_ZHIDAO_V2X_AHEAD_LIVE).unRegisterWakeCmd(COMMAND_ZHIDAO_V2X_CROSSROADS_LIVE);
+ }
+
+ public void getFrontCarLive() {
+ V2XDemoUserInfoRes.ResultBean.UserListBean.UserInfoBean userInfoBean = V2XDemoManager.getInstance().getV2XDemoUserInfoEntity1().getUserInfo();
+ String liveCarSn = userInfoBean.getSn();
+ if (TextUtils.isEmpty(liveCarSn)) {
+ ToastUtils.showShort("附近没有可直播车机");
+ Logger.d(MODULE_NAME, "getFrontCarLive : sn is null");
+ return;
+ }
+ V2XMessageEntity v2XMessageEntity = buildCallLiveParams(liveCarSn, null);
+ V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCallLiveCarWindow());
+ V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity);
+ }
+
+ public void getOpenRoadCameraLive() {
+// String liveUrl = "rtmp://154.8.189.110:19350/live/10_1";
+// V2XMessageEntity v2XMessageEntity = buildCallLiveParams(null, liveUrl);
+// V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCrossRoadLiveWindow());
+// V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity);
+ V2XRefreshModel.getInstance(mContext).queryCrossRoadsLive(new V2XRefreshCallback() {
+ @Override
+ public void onSuccess(V2XLiveCrossRoad result) {
+ if (result != null && result.getResult().getUrl() != null) {
+ String liveUrl = result.getResult().getUrl();
+ V2XMessageEntity v2XMessageEntity = buildCallLiveParams(null, liveUrl);
+ V2XVoiceCallLiveScenario.getInstance().setV2XWindow(new V2XVoiceCrossRoadLiveWindow());
+ V2XVoiceCallLiveScenario.getInstance().init(v2XMessageEntity);
+ } else {
+ Logger.d(MODULE_NAME, "getOpenRoadCameraLive 路口实况直播地址为空");
+ }
+ }
+
+ @Override
+ public void onFail(String msg) {
+ Logger.d(MODULE_NAME, "getOpenRoadCameraLive : " + msg);
+ }
+ });
+ }
+
+ private V2XMessageEntity buildCallLiveParams(String sn, String liveUrl) {
+ V2XPushMessageEntity v2XPushMessageEntity = new V2XPushMessageEntity();
+ v2XPushMessageEntity.setVideoSn(sn);
+ v2XPushMessageEntity.setVideoUrl(liveUrl);
+ v2XPushMessageEntity.setShowWindow(true);
+ V2XMessageEntity v2XMessageEntity = new V2XMessageEntity<>();
+ v2XMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_VOICE_CALL_FOR_LIVECAR_SHOW);
+ v2XMessageEntity.setContent(v2XPushMessageEntity);
+ v2XMessageEntity.setShowState(true);
+ return v2XMessageEntity;
+ }
+
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java
new file mode 100644
index 0000000000..fd4c5474e4
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveCarWindow.java
@@ -0,0 +1,143 @@
+package com.mogo.module.v2x.scenario.scene.livecar;
+
+import android.content.Context;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.mogo.module.common.entity.MarkerCarInfo;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.listener.V2XWindowStatusListener;
+import com.mogo.module.v2x.scenario.view.IV2XWindow;
+import com.mogo.module.v2x.view.V2XCarLiveVideoView;
+import com.mogo.utils.logger.Logger;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+public class V2XVoiceCallLiveCarWindow extends RelativeLayout
+ implements IV2XWindow {
+
+ private V2XCarLiveVideoView mV2XCarLiveVideoView;
+ private TextView tvCountDown;
+ private ImageView ivVideoPlayingSign;
+ private boolean isVideoPlay = false;
+
+ // 处理道路事件,30秒倒计时
+ private Handler handlerV2XEvent = new Handler();
+ private Runnable runnableV2XEvent;
+ private static final int COUNT_DOWN_TIMER = 1_000;
+ private static final int ALL_EXPIRE_TIMER = 1_000 * 30;
+ private static int EXPIRE_TIMER = ALL_EXPIRE_TIMER;
+
+ public V2XVoiceCallLiveCarWindow() {
+ this(V2XServiceManager.getContext(), null);
+ Logger.d(MODULE_NAME, "V2XVoiceCallLiveCarWindow INIT");
+ }
+
+ public V2XVoiceCallLiveCarWindow(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public V2XVoiceCallLiveCarWindow(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ Logger.w(MODULE_NAME, "V2X===初始化语音呼叫直播视图");
+ LayoutInflater.from(context).inflate(R.layout.window_see_carlive_video, this);
+ mV2XCarLiveVideoView = findViewById(R.id.videoPlayer);
+ tvCountDown = findViewById(R.id.tvCountDown);
+ ivVideoPlayingSign = findViewById(R.id.ivVideoPlayingSign);
+ mV2XCarLiveVideoView.addOnVideoStatusChangeListener(videoPlaying -> {
+ isVideoPlay = videoPlaying;
+ if (isVideoPlay) {
+ startCountDown();
+ } else {
+ stopCountDown();
+ }
+ });
+ }
+
+ @Override
+ public void show(V2XPushMessageEntity entity) {
+ if (entity != null) {
+ Logger.w(MODULE_NAME, "更新直播信息。。。。。" + entity);
+ // 启动播放
+ MarkerCarInfo.CarLiveInfo carLiveInfo = new MarkerCarInfo.CarLiveInfo();
+ carLiveInfo.setVideoChannel(entity.getVideoChannel());
+ carLiveInfo.setVideoSn(entity.getVideoSn());
+ carLiveInfo.setVideoUrl(entity.getVideoUrl());
+ Logger.w(MODULE_NAME, "更新直播信息 END");
+ mV2XCarLiveVideoView.setCarLiveInfo(carLiveInfo);
+ if (isVideoPlay) {
+ startCountDown();
+ }
+ }
+ }
+
+ @Override
+ public void close() {
+ // 停止倒计时
+ stopCountDown();
+ if (V2XServiceManager
+ .getMogoTopViewManager().isViewAdded(this)) {
+ //移除窗体
+ V2XServiceManager
+ .getMogoTopViewManager()
+ .removeView(this);
+ }
+ }
+
+ @Override
+ public View getView() {
+ return this;
+ }
+
+ @Override
+ public void setWindowStatusListener(V2XWindowStatusListener listener) {
+
+ }
+
+ /**
+ * 窗体倒计时
+ */
+ private void startCountDown() {
+ // 倒计时
+ if (runnableV2XEvent == null) {
+ runnableV2XEvent = () -> {
+ EXPIRE_TIMER = EXPIRE_TIMER - COUNT_DOWN_TIMER;
+ Logger.d(MODULE_NAME, "V2X=== Window 30秒倒计时开始,当前 :" + EXPIRE_TIMER / COUNT_DOWN_TIMER + " 秒");
+ tvCountDown.setVisibility(View.VISIBLE);
+ ivVideoPlayingSign.setVisibility(View.VISIBLE);
+ tvCountDown.setText(String.valueOf(EXPIRE_TIMER / COUNT_DOWN_TIMER));
+ if (EXPIRE_TIMER > 0) {
+ handlerV2XEvent.postDelayed(runnableV2XEvent, COUNT_DOWN_TIMER);
+ } else {
+ close();
+ }
+ };
+ } else {
+ handlerV2XEvent.removeCallbacks(runnableV2XEvent);
+ }
+ Logger.d(MODULE_NAME, "V2X=== Window 展示开始倒计时");
+ handlerV2XEvent.postDelayed(runnableV2XEvent, COUNT_DOWN_TIMER);
+ }
+
+ private void stopCountDown() {
+ Logger.d(MODULE_NAME, "V2X=== Window 倒计时停止。。。");
+ if (handlerV2XEvent != null && runnableV2XEvent != null) {
+ handlerV2XEvent.removeCallbacks(runnableV2XEvent);
+ runnableV2XEvent = null;
+ tvCountDown.setVisibility(View.GONE);
+ ivVideoPlayingSign.setVisibility(View.GONE);
+ EXPIRE_TIMER = ALL_EXPIRE_TIMER;
+ }
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java
new file mode 100644
index 0000000000..8e8af5abc2
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCallLiveScenario.java
@@ -0,0 +1,143 @@
+package com.mogo.module.v2x.scenario.scene.livecar;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.Nullable;
+
+import com.mogo.module.common.entity.V2XMessageEntity;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.V2XConst;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.scenario.impl.AbsV2XScenario;
+import com.mogo.module.v2x.utils.V2XUtils;
+import com.mogo.service.windowview.IMogoTopViewStatusListener;
+import com.mogo.utils.TipToast;
+import com.mogo.utils.logger.Logger;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+/**
+ * author : unknown
+ * desc : TODO 演示使用的语音呼叫查看直播场景,包括车辆直播 或者 路口实况 window,区分不同页面window逻辑实现
+ */
+public class V2XVoiceCallLiveScenario extends AbsV2XScenario implements IMogoTopViewStatusListener {
+
+ private V2XVoiceCallLiveScenario() {
+
+ }
+
+ private static volatile V2XVoiceCallLiveScenario mV2XVoiceCallLiveCarScenario;
+
+ public static V2XVoiceCallLiveScenario getInstance() {
+ if (mV2XVoiceCallLiveCarScenario == null) {
+ synchronized (V2XVoiceCallLiveScenario.class) {
+ if (mV2XVoiceCallLiveCarScenario == null) {
+ mV2XVoiceCallLiveCarScenario = new V2XVoiceCallLiveScenario();
+ }
+ }
+ }
+ return mV2XVoiceCallLiveCarScenario;
+ }
+
+ @Override
+ public void init(@Nullable V2XMessageEntity v2XMessageEntity) {
+ if (v2XMessageEntity == null) {
+ TipToast.shortTip("附近没有可直播车机");
+ }
+ if (v2XMessageEntity.isShowState()) {
+ if (!isSameScenario(v2XMessageEntity)
+ && V2XServiceManager.getMoGoStatusManager().isMainPageLaunched()) {
+ setV2XMessageEntity(v2XMessageEntity);
+ Logger.d(V2XConst.MODULE_NAME, "v2XMessageEntity : " + v2XMessageEntity + " getVideoSn : " + v2XMessageEntity.getContent().getVideoSn());
+ if (v2XMessageEntity != null) {
+ Logger.d(V2XConst.MODULE_NAME, "准备展示直播窗口");
+ show();
+ } else {
+ TipToast.shortTip("附近没有可直播车机");
+ Logger.e(V2XConst.MODULE_NAME, "直播地址为null");
+ }
+ } else {
+ setV2XMessageEntity(v2XMessageEntity);
+ Logger.w(V2XConst.MODULE_NAME, "要处理的场景已经存在,丢弃这次初始化");
+ }
+ } else {
+ close();
+ }
+ }
+
+ @Override
+ public void show() {
+ if (getV2XMessageEntity() != null && getV2XMessageEntity().getContent() != null) {
+ showWindow();
+ }
+ }
+
+ @Override
+ public void showWindow() {
+ if (getV2XWindow() != null) {
+ getV2XWindow().show(getV2XMessageEntity().getContent());
+ ViewGroup.LayoutParams layoutParams =
+ new ViewGroup.LayoutParams(
+ (int) V2XUtils.getApp().getResources().getDimension(R.dimen.module_v2x_event_window_width),
+ (int) V2XUtils.getApp().getResources().getDimension(R.dimen.module_v2x_event_see_live_window_height));
+ V2XServiceManager
+ .getMogoTopViewManager()
+ .addView(getV2XWindow().getView(), layoutParams, this);
+ V2XServiceManager.getMoGoV2XStatusManager().setLiveCarWindowShow(TAG, true);
+ }
+ }
+
+ @Override
+ public void closeWindow() {
+ if (getV2XWindow() != null) {
+ getV2XWindow().close();
+ }
+ V2XServiceManager.getMoGoV2XStatusManager().setLiveCarWindowShow(TAG, false);
+ }
+
+ @Override
+ public void showButton() {
+
+ }
+
+ @Override
+ public void closeButton() {
+
+ }
+
+ @Override
+ public void drawPOI() {
+
+ }
+
+ @Override
+ public void clearPOI() {
+
+ }
+
+ @Override
+ public void onViewAdded(View view) {
+ Logger.d(MODULE_NAME, "展示 Window 动画结束");
+ }
+
+ @Override
+ public void onViewRemoved(View view) {
+ Logger.d(MODULE_NAME, "关闭 Window 动画结束");
+ getV2XWindow().close();
+ V2XServiceManager.getMoGoV2XStatusManager().setLiveCarWindowShow(TAG, false);
+ }
+
+ @Override
+ public void beforeViewAddAnim(View view) {
+ Logger.d(MODULE_NAME, "展示 Window 开始");
+ }
+
+ @Override
+ public void beforeViewRemoveAnim(View view) {
+ Logger.d(MODULE_NAME, "关闭 Window 开始");
+ setV2XMessageEntity(null);
+ V2XServiceManager.getMoGoV2XStatusManager().setLiveCarWindowShow(TAG, false);
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java
new file mode 100644
index 0000000000..025321de65
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/livecar/V2XVoiceCrossRoadLiveWindow.java
@@ -0,0 +1,145 @@
+package com.mogo.module.v2x.scenario.scene.livecar;
+
+import android.content.Context;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.mogo.module.common.entity.MarkerCarInfo;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.listener.V2XWindowStatusListener;
+import com.mogo.module.v2x.scenario.view.IV2XWindow;
+import com.mogo.module.v2x.view.V2XCrossRoadVideoView;
+import com.mogo.utils.logger.Logger;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+public class V2XVoiceCrossRoadLiveWindow extends RelativeLayout
+ implements IV2XWindow {
+
+ private V2XCrossRoadVideoView mV2XCrossRoadVideoView;
+ private TextView tvCountDown;
+ private ImageView ivVideoPlayingSign;
+ private boolean isVideoPlay = false;
+
+ // 处理道路事件,30秒倒计时
+ private Handler handlerV2XEvent = new Handler();
+ private Runnable runnableV2XEvent;
+ private static final int COUNT_DOWN_TIMER = 1_000;
+ private static final int ALL_EXPIRE_TIMER = 1_000 * 30;
+ private static int EXPIRE_TIMER = ALL_EXPIRE_TIMER;
+
+ public V2XVoiceCrossRoadLiveWindow() {
+ this(V2XServiceManager.getContext(), null);
+ Logger.d(MODULE_NAME, "V2XVoiceCallLiveCarWindow INIT");
+ }
+
+ public V2XVoiceCrossRoadLiveWindow(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public V2XVoiceCrossRoadLiveWindow(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ Logger.w(MODULE_NAME, "V2X===初始化语音呼叫直播视图");
+ LayoutInflater.from(context).inflate(R.layout.window_see_crossroadlive_video, this);
+ mV2XCrossRoadVideoView = findViewById(R.id.videoPlayer);
+ tvCountDown = findViewById(R.id.tvCountDown);
+ ivVideoPlayingSign = findViewById(R.id.ivVideoPlayingSign);
+ mV2XCrossRoadVideoView.addOnVideoStatusChangeListener(videoPlaying -> {
+ isVideoPlay = videoPlaying;
+ if (isVideoPlay) {
+ startCountDown();
+ } else {
+ stopCountDown();
+ }
+ });
+ }
+
+ @Override
+ public void show(V2XPushMessageEntity entity) {
+ if (entity != null) {
+ Logger.w(MODULE_NAME, "更新直播信息。。。。。" + entity);
+ // 启动播放
+ MarkerCarInfo.CarLiveInfo carLiveInfo = new MarkerCarInfo.CarLiveInfo();
+ carLiveInfo.setVideoChannel(entity.getVideoChannel());
+ carLiveInfo.setVideoSn(entity.getVideoSn());
+ carLiveInfo.setVideoUrl(entity.getVideoUrl());
+ Logger.w(MODULE_NAME, "更新直播信息 END");
+ mV2XCrossRoadVideoView.setCarLiveInfo(carLiveInfo);
+ if (isVideoPlay) {
+ startCountDown();
+ }
+ }
+ }
+
+ @Override
+ public void close() {
+ // 停止倒计时
+ stopCountDown();
+ if (V2XServiceManager
+ .getMogoTopViewManager().isViewAdded(this)) {
+ //移除窗体
+ V2XServiceManager
+ .getMogoTopViewManager()
+ .removeView(this);
+ }
+ }
+
+ @Override
+ public View getView() {
+ return this;
+ }
+
+ @Override
+ public void setWindowStatusListener(V2XWindowStatusListener listener) {
+
+ }
+
+ /**
+ * 窗体倒计时
+ */
+ private void startCountDown() {
+ // 倒计时
+ if (runnableV2XEvent == null) {
+ runnableV2XEvent = () -> {
+ EXPIRE_TIMER = EXPIRE_TIMER - COUNT_DOWN_TIMER;
+ Logger.d(MODULE_NAME, "V2X=== Window 30秒倒计时开始,当前 :" + EXPIRE_TIMER / COUNT_DOWN_TIMER + " 秒");
+ tvCountDown.setVisibility(View.VISIBLE);
+ ivVideoPlayingSign.setVisibility(View.VISIBLE);
+ tvCountDown.setText(String.valueOf(EXPIRE_TIMER / COUNT_DOWN_TIMER));
+ if (EXPIRE_TIMER > 0) {
+ handlerV2XEvent.postDelayed(runnableV2XEvent, COUNT_DOWN_TIMER);
+ } else {
+ Logger.d(MODULE_NAME, "V2X=== Window 30秒倒计时结束。。。");
+ // 移出Window详细信息
+ close();
+ }
+ };
+ } else {
+ handlerV2XEvent.removeCallbacks(runnableV2XEvent);
+ }
+ Logger.d(MODULE_NAME, "V2X=== Window 展示开始倒计时");
+ handlerV2XEvent.postDelayed(runnableV2XEvent, COUNT_DOWN_TIMER);
+ }
+
+ private void stopCountDown() {
+ Logger.d(MODULE_NAME, "V2X=== Window 倒计时停止。。。");
+ if (handlerV2XEvent != null && runnableV2XEvent != null) {
+ handlerV2XEvent.removeCallbacks(runnableV2XEvent);
+ runnableV2XEvent = null;
+ tvCountDown.setVisibility(View.GONE);
+ ivVideoPlayingSign.setVisibility(View.GONE);
+ EXPIRE_TIMER = ALL_EXPIRE_TIMER;
+ }
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java
new file mode 100644
index 0000000000..f0b34492f8
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/OptimalSpeedMarker.java
@@ -0,0 +1,41 @@
+package com.mogo.module.v2x.scenario.scene.obu;
+
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.marker.MogoMarkerOptions;
+import com.mogo.module.service.utils.ViewUtils;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.marker.OptimalSpeedMarkerView;
+import com.mogo.module.v2x.scenario.view.IV2XMarker;
+import com.mogo.utils.logger.Logger;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+import static com.mogo.module.v2x.V2XConst.V2X_OPTIMAL_SPEED_MARKER;
+
+/**
+ * 绿波车速的marker
+ */
+class OptimalSpeedMarker implements IV2XMarker {
+
+ private IMogoMarker optimalMarker = null;
+
+ @Override
+ public void drawPOI(MogoLatLng entity) {
+ Logger.d(MODULE_NAME, "绘制绿波marker===" + entity);
+ MogoMarkerOptions optionsRipple = new MogoMarkerOptions()
+ .latitude(entity.getLat())
+ .longitude(entity.getLon()).anchor(0.5f,0.9f).icon(ViewUtils.fromView(new OptimalSpeedMarkerView(V2XServiceManager.getContext())));
+ optimalMarker = V2XServiceManager.getMarkerManager().addMarker(V2X_OPTIMAL_SPEED_MARKER, optionsRipple);
+ optimalMarker.setClickable(false);
+ }
+
+ @Override
+ public void clearPOI() {
+ Logger.d(MODULE_NAME,"准备清除绿波marker");
+ if (optimalMarker != null) {
+ Logger.d(MODULE_NAME, "清除绿波marker===" + optimalMarker);
+ optimalMarker.remove();
+ optimalMarker = null;
+ }
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/V2XObuEventScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/V2XObuEventScenario.java
new file mode 100644
index 0000000000..a3c66a5bea
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/V2XObuEventScenario.java
@@ -0,0 +1,385 @@
+package com.mogo.module.v2x.scenario.scene.obu;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+
+import com.mogo.commons.debug.DebugConfig;
+import com.mogo.commons.voice.AIAssist;
+import com.mogo.map.MogoLatLng;
+import com.mogo.map.location.MogoLocation;
+import com.mogo.map.overlay.IMogoPolyline;
+import com.mogo.map.overlay.MogoPolylineOptions;
+import com.mogo.module.common.entity.V2XMessageEntity;
+import com.mogo.module.common.entity.V2XObuEventEntity;
+import com.mogo.module.service.Utils;
+import com.mogo.module.v2x.V2XObuManager;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.listener.V2XWindowStatusListener;
+import com.mogo.module.v2x.scenario.impl.AbsV2XScenario;
+import com.mogo.module.v2x.utils.DrivingDirectionUtils;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.mogo.module.obu.ObuConstant;
+import com.zhidao.mogo.module.obu.obu.bean.MogoObuEventInfo;
+
+import org.json.JSONObject;
+
+import java.util.Arrays;
+import java.util.List;
+
+import androidx.annotation.Nullable;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+/**
+ * obu场景界面管理
+ *
+ * @author tongchenfei
+ */
+public class V2XObuEventScenario extends AbsV2XScenario implements Handler.Callback {
+
+ public static final String URGENCY_COLLISION_WARN_TEXT = "前车急刹,注意保持安全距离!";
+ private static final int MSG_CLOSE_OBU_WINDOW = 1001;
+ private static final int DEFAULT_EXPIRE_TIME = 20_000;
+
+ private static final float DEFAULT_VIP_CROSSING_DISTANCE = 100F;
+
+ /**
+ * 可以关闭绿波引导的距离路口的最大距离,单位是米
+ */
+ private static final float DEFAULT_DISTANCE_TO_CLOSE_OPTIMAL = 10F;
+
+ private IMogoPolyline optimalLine = null;
+ private MogoLatLng defaultTarget = new MogoLatLng(39.969326, 116.407788);
+
+ private MogoLatLng optimalCrossing = new MogoLatLng(40.196431,116.738011);
+// private MogoLatLng vipCrossing = new MogoLatLng(40.200467,116.745498);
+
+
+ private MogoLatLng vipCrossing1 = new MogoLatLng(40.200467,116.745498);
+ private MogoLatLng vipCrossing2 = new MogoLatLng(40.200491,116.738535);
+ private List vipCrossingList = Arrays.asList(vipCrossing1, vipCrossing2);
+
+ private V2XObuEventScenario() {
+ }
+
+ private volatile static V2XObuEventScenario instance = null;
+
+ public static V2XObuEventScenario getInstance() {
+ if (instance == null) {
+ synchronized (V2XObuEventScenario.class) {
+ if (instance == null) {
+ instance = new V2XObuEventScenario();
+ instance.setV2XWindow(new V2XObuEventWindow(V2XServiceManager.getContext()));
+ }
+ }
+ }
+ return instance;
+ }
+
+ private V2XMessageEntity lastMessage = null;
+
+ private OptimalSpeedMarker optimalSpeedMarker = null;
+
+ private Handler handler = new Handler(Looper.getMainLooper(), this);
+
+ @Override
+ public void init(@Nullable V2XMessageEntity v2XMessageEntity) {
+ Logger.d(MODULE_NAME, "obu场景初始化: " + v2XMessageEntity);
+ setV2XMessageEntity(v2XMessageEntity);
+ if (v2XMessageEntity.getContent().getType() == ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY&& DebugConfig.getObuType() == DebugConfig.OBU_TYPE_CIDI) {
+ // 如果需要区分路口,就在这里做一下判断,给默认目标点赋值
+ defaultTarget = optimalCrossing;
+ if (optimalSpeedMarker == null) {
+ optimalSpeedMarker = new OptimalSpeedMarker();
+ } else {
+ optimalSpeedMarker.clearPOI();
+ }
+ } else if (v2XMessageEntity.getContent().getType() == ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP) {
+ // vip变灯提醒
+ isInChangeLightForVip = true;
+ V2XObuManager.getInstance().onTrafficLightInfoCallback(null);
+
+ if (optimalSpeedMarker == null) {
+ optimalSpeedMarker = new OptimalSpeedMarker();
+ } else {
+ optimalSpeedMarker.clearPOI();
+ }
+ }
+ show();
+ }
+
+ /**
+ * 展示场景
+ *
+ * 此场景需要语音提示和弹窗
+ */
+ @Override
+ public void show() {
+ AIAssist.getInstance(V2XServiceManager.getContext()).speakTTSVoice(getV2XMessageEntity().getContent().getDesc());
+ showWindow();
+ if (handler.hasMessages(MSG_CLOSE_OBU_WINDOW)) {
+ handler.removeMessages(MSG_CLOSE_OBU_WINDOW);
+ }
+ handler.sendEmptyMessageDelayed(MSG_CLOSE_OBU_WINDOW, DEFAULT_EXPIRE_TIME);
+ }
+
+ /**
+ * 展示Window
+ */
+ @Override
+ public void showWindow() {
+ if (lastMessage != null && lastMessage.getContent().getType() == ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY) {
+ Logger.d(MODULE_NAME, "上一条消息是绿波,发送隐藏广播===");
+ // 上一条信息是绿波,需要隐藏上一条信息
+ sendBroadcastToAdas(CALL_ADAS_HIDE_OPTIMAL);
+ }
+
+ if (lastMessage != null && lastMessage.getContent().getType() == ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP) {
+ Logger.d(MODULE_NAME,"上一条是vip变灯,需要先把线隐藏===");
+ hideLine();
+ }
+ lastMessage = getV2XMessageEntity();
+ getV2XWindow().show(getV2XMessageEntity().getContent());
+ getV2XWindow().setWindowStatusListener(new V2XWindowStatusListener() {
+ @Override
+ public void onViewShow() {
+
+ }
+
+ @Override
+ public void onViewClose() {
+ // 只在上滑关闭topview的时候回调
+ if (getV2XMessageEntity().getContent().getType() == ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY) {
+ Logger.d(MODULE_NAME, "关闭绿波浮窗,通知adas==");
+ sendBroadcastToAdas(CALL_ADAS_HIDE_OPTIMAL);
+ } else if (getV2XMessageEntity().getContent().getType() == ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP) {
+ Logger.d(MODULE_NAME,"关闭vip变灯浮窗,隐藏line");
+ isInChangeLightForVip = false;
+ hideLine();
+ }
+ lastMessage = null;
+ }
+ });
+ if (getV2XMessageEntity().getContent().getType() == ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY) {
+ // 给adas发送显示绿波的广播
+ Logger.d(MODULE_NAME, "收到绿波时间,发送广播给adas");
+ sendBroadcastToAdas(CALL_ADAS_SHOW_OPTIMAL);
+ } else if (getV2XMessageEntity().getContent().getType() == ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP) {
+ Logger.d(MODULE_NAME,"收到vip变灯,画线");
+ drawLine();
+ }
+
+ }
+
+ /**
+ * 关闭Window
+ */
+ @Override
+ public void closeWindow() {
+ Logger.d(MODULE_NAME, "obu场景关闭window");
+ handler.removeMessages(MSG_CLOSE_OBU_WINDOW);
+ getV2XWindow().close();
+ // 给adas发送隐藏绿波的广播
+ if (getV2XMessageEntity().getContent().getType() == ObuConstant.TYPE_OPTIMAL_SPEED_ADVISORY) {
+ Logger.d(MODULE_NAME, "关闭绿波浮窗,通知adas==");
+ sendBroadcastToAdas(CALL_ADAS_HIDE_OPTIMAL);
+ } else if (getV2XMessageEntity().getContent().getType() == ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP) {
+ Logger.d(MODULE_NAME,"关闭vip变灯浮窗");
+ isInChangeLightForVip = false;
+ hideLine();
+ }
+ lastMessage = null;
+ }
+
+ /**
+ * 展示按钮
+ */
+ @Override
+ public void showButton() {
+
+ }
+
+ /**
+ * 关闭按钮
+ */
+ @Override
+ public void closeButton() {
+
+ }
+
+ /**
+ * 绘制POI
+ */
+ @Override
+ public void drawPOI() {
+ if (optimalSpeedMarker != null) {
+ Logger.d(MODULE_NAME, "绘制obu Poi点");
+ optimalSpeedMarker.drawPOI(defaultTarget);
+ }
+ }
+
+ /**
+ * 清除POI
+ */
+ @Override
+ public void clearPOI() {
+ if (optimalSpeedMarker != null) {
+ Logger.d(MODULE_NAME, "清除obu Poi点");
+ optimalSpeedMarker.clearPOI();
+ optimalSpeedMarker = null;
+ }
+ }
+
+ /**
+ * 当定位发生变化时,调用此方法,在此方法中,根据当前状态判断是否需要消费此定位事件
+ *
+ * 主要目的是更新绿波速度引导的划线
+ *
+ * @param currentLocation 更新后的定位信息
+ */
+ public void updateLocation(MogoLocation currentLocation) {
+ MogoLatLng currentLatLng = new MogoLatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
+ if (optimalLine != null) {
+ float distance = Utils.calculateLineDistance(defaultTarget, currentLatLng);
+ if (distance <= DEFAULT_DISTANCE_TO_CLOSE_OPTIMAL) {
+ // 目标点和自身点小于DEFAULT_DISTANCE_TO_CLOSE_OPTIMAL的时候,隐藏绿波车速
+ closeWindow();
+ } else {
+ // 线不为空就更新位置,线为空了,也就隐藏了
+ optimalLine.setPoints(Arrays.asList(currentLatLng, defaultTarget));
+ }
+ }
+
+ // 判断当前位置与vip点的距离,来判断是否触发vip通行
+ for (MogoLatLng crossing : vipCrossingList) {
+ float distance = Utils.calculateLineDistance(currentLatLng, crossing);
+ double eventAngle = DrivingDirectionUtils.getDegreeOfCar2Poi(
+ currentLocation.getLongitude(),
+ currentLocation.getLatitude(),
+ crossing.getLon(),
+ crossing.getLat(),
+ (int) currentLocation.getBearing()
+ );
+ Logger.d("V2X_OBU_VIP", "监测是否需要进行vip弹框提醒\ndistance: " + distance + "\neventAngle: " + eventAngle + "\ntarget: " + crossing + "\ncurrent: " + currentLatLng);
+ if (distance <= DEFAULT_VIP_CROSSING_DISTANCE && 0 <= eventAngle && eventAngle <= 20) {
+ //距离小于DEFAULT_VIP_CROSSING_DISTANCE,且夹角在0~20(说明在前方),则触发vip通行
+ defaultTarget = crossing;
+ handler.post(() -> {
+ MogoObuEventInfo eventInfo = new MogoObuEventInfo();
+ eventInfo.setType("vip变灯提醒");
+ eventInfo.setTypeCode("vip变灯提醒");
+ eventInfo.setDescribe("将为您变灯,vip车辆可优先通行");
+ V2XObuManager.getInstance().onEventInfoCallback(eventInfo);
+ });
+ break;
+ }
+ }
+ }
+
+ /**
+ * @param msg A {@link Message Message} object
+ * @return True if no further handling is desired
+ */
+ @Override
+ public boolean handleMessage(Message msg) {
+ if (msg.what == MSG_CLOSE_OBU_WINDOW) {
+ Logger.d(MODULE_NAME, "V2X Obu scenario expire===");
+ closeWindow();
+ return true;
+ }
+ return false;
+ }
+
+ public static final String ACTION_LAUNCHER_ADAS_APP_BIZ = "com.mogo.launcher.adas.app.biz";
+ private static final String CALL_ADAS_SHOW_OPTIMAL = "2";
+ private static final String CALL_ADAS_HIDE_OPTIMAL = "1";
+
+ private void sendBroadcastToAdas(String status) {
+ if (status.equals(CALL_ADAS_SHOW_OPTIMAL)) {
+ // 给adas发送显示绿波的广播,同时自己也要开始划线
+ if(DebugConfig.getObuType() == DebugConfig.OBU_TYPE_CIDI) {
+ drawLine();
+ }
+ } else {
+ // 给adas发送隐藏绿波的广播,同时自己也需要结束划线动画
+ hideLine();
+ }
+ try {
+ Intent intent = new Intent(ACTION_LAUNCHER_ADAS_APP_BIZ);
+ JSONObject json = new JSONObject();
+ json.put("action", status);
+ String data = json.toString();
+ Logger.d(MODULE_NAME, "发送绿波广播: " + data);
+ intent.putExtra("data", data);
+ intent.putExtra("type", 1);
+ V2XServiceManager.getContext().sendBroadcast(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ Logger.e(MODULE_NAME, e, "发送绿波广播异常==");
+ }
+ }
+
+ public MogoLatLng getOptimalCrossing(){
+ return optimalCrossing;
+ }
+ public float cacheZoomLevel = 16f;
+ /**
+ * 开始划线,同时添加marker,调整地图比例尺
+ */
+ private void drawLine() {
+ Logger.d(MODULE_NAME, "绘制绿波车速的线=====");
+ if (optimalLine != null) {
+ optimalLine.remove();
+ }
+ // 绘制marker
+ drawPOI();
+ // 连接线参数
+ MogoPolylineOptions options = new MogoPolylineOptions();
+
+ // 线条粗细,渐变,渐变色值
+ options.width(16).useGradient(true).colorValues(Arrays.asList(Color.parseColor("#FF1DAAA5"), Color.parseColor("#3337DED9")));
+
+ // 当前车辆位置
+ MogoLatLng carLocation = V2XServiceManager.getNavi().getCarLocation();
+ if (carLocation != null) {
+ options.add(carLocation);
+ } else {
+ options.add(V2XServiceManager.getV2XStatusManager().getLocation());
+ }
+ // 目标车辆位置
+ options.add(defaultTarget);
+
+ // 绘制线的对象
+ optimalLine = V2XServiceManager.getMogoOverlayManager().addPolyline(options);
+ cacheZoomLevel = V2XServiceManager.getMapUIController().getZoomLevel();
+ Logger.d(MODULE_NAME, "V2xObuEventScenario cacheZoomLevel==" + cacheZoomLevel);
+ V2XServiceManager.getMapUIController().changeZoom(16);
+// V2XServiceManager.getMapUIController().changeZoom(17);
+ }
+
+ /**
+ * 结束划线,同时隐藏marker
+ */
+ private void hideLine() {
+ Logger.d(MODULE_NAME, "隐藏绿波车速的线====");
+ clearPOI();
+ if (optimalLine != null) {
+ optimalLine.remove();
+ optimalLine = null;
+ }
+ V2XServiceManager.getMapUIController().changeZoom(cacheZoomLevel);
+ }
+
+ private volatile boolean isInChangeLightForVip = false;
+
+ /**
+ * 是否在显示vip通行
+ * @return true - 在显示vip通行
+ */
+ public boolean isInChangeLightForVip(){
+ return isInChangeLightForVip;
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/V2XObuEventWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/V2XObuEventWindow.java
new file mode 100644
index 0000000000..2bf04a71f1
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/obu/V2XObuEventWindow.java
@@ -0,0 +1,160 @@
+package com.mogo.module.v2x.scenario.scene.obu;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.mogo.module.common.entity.V2XObuEventEntity;
+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.service.windowview.IMogoTopViewStatusListener;
+import com.mogo.utils.logger.Logger;
+import com.zhidao.mogo.module.obu.ObuConstant;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+/**
+ * obu事件window
+ *
+ * @author tongchenfei
+ */
+public class V2XObuEventWindow extends FrameLayout implements IV2XWindow {
+ public V2XObuEventWindow(@NonNull Context context) {
+ this(context,null);
+ }
+
+ public V2XObuEventWindow(@NonNull Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs,0);
+ }
+
+ public V2XObuEventWindow(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private ImageView ivTypeIcon;
+ private TextView tvType, tvDesc;
+
+ private void initView(Context context){
+ Logger.d(MODULE_NAME,"初始化obu场景view");
+ LayoutInflater.from(context).inflate(R.layout.window_simple_obu_event_detail, this);
+ ivTypeIcon = findViewById(R.id.ivObuTypeIcon);
+ tvType = findViewById(R.id.tvObuType);
+ tvDesc = findViewById(R.id.tvObuDesc);
+ }
+
+ /**
+ * 展示1/2窗口
+ *
+ * 目前只处理如下obu事件
+ * 绿波车速: {@link com.zhidao.mogo.module.obu.ObuConstant#TYPE_OPTIMAL_SPEED_ADVISORY}
+ * 前车急刹: {@link com.zhidao.mogo.module.obu.ObuConstant#TYPE_URGENCY_COLLISION_WARNING}
+ * vip车辆变灯提示(暂无回调,暂不处理)
+ * @param entity
+ */
+ @Override
+ public void show(V2XObuEventEntity entity) {
+ Logger.d(MODULE_NAME, "ObuEventWindow show " + entity);
+ switch (entity.getType()) {
+ case ObuConstant
+ .TYPE_OPTIMAL_SPEED_ADVISORY:
+ // 绿波车速引导
+ ivTypeIcon.setImageResource(R.drawable.v2x_icon_obu_optimal_speed);
+ tvDesc.setText(entity.getDesc());
+ tvType.setText("车速引导");
+ tvType.setBackgroundResource(R.drawable.bg_v2x_event_type_green);
+ break;
+ case ObuConstant.TYPE_URGENCY_COLLISION_WARNING:
+ // 前车急刹预警
+ ivTypeIcon.setImageResource(R.drawable.v2x_icon_obu_urgency_collision);
+ tvDesc.setText(entity.getDesc());
+ tvType.setText("前车急刹");
+ tvType.setBackgroundResource(R.drawable.bg_v2x_event_type_read);
+ break;
+ case ObuConstant.TYPE_CHANGE_LIGHT_FOR_VIP:
+ // vip变灯提醒
+ ivTypeIcon.setImageResource(R.drawable.v2x_icon_obu_traffic_light);
+ tvDesc.setText(entity.getDesc());
+ tvType.setText("优先通行");
+ tvType.setBackgroundResource(R.drawable.bg_v2x_event_type_green);
+ break;
+ case ObuConstant.TYPE_RUSH_RED_LIGHT:
+ ivTypeIcon.setImageResource(R.drawable.v2x_icon_obu_rush_red_light);
+ tvDesc.setText(entity.getDesc());
+ tvType.setText("红灯警告");
+ tvType.setBackgroundResource(R.drawable.bg_v2x_event_type_read);
+ break;
+ default:
+ Logger.w(MODULE_NAME, "其他obu类型,暂不处理: " + entity.getType());
+ break;
+ }
+ ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 210);
+ V2XServiceManager.getMogoTopViewManager().addView(this, params,topViewStatusListener);
+ }
+
+ /**
+ * 关闭1/2窗口
+ */
+ @Override
+ public void close() {
+ V2XServiceManager.getMogoTopViewManager().removeView(this);
+ }
+
+ /**
+ * 返回窗体
+ *
+ * @return 当前窗体
+ */
+ @Override
+ public View getView() {
+ return this;
+ }
+
+ private V2XWindowStatusListener statusListener = null;
+
+ /**
+ * 设置Window状态监听
+ *
+ * @param listener 监听器
+ */
+ @Override
+ public void setWindowStatusListener(V2XWindowStatusListener listener) {
+ statusListener = listener;
+ }
+
+ private IMogoTopViewStatusListener topViewStatusListener = new IMogoTopViewStatusListener() {
+ @Override
+ public void onViewAdded(View view) {
+
+ }
+
+ @Override
+ public void onViewRemoved(View view) {
+ if (statusListener != null) {
+ statusListener.onViewClose();
+ }
+ }
+
+ @Override
+ public void beforeViewAddAnim(View view) {
+
+ }
+
+ @Override
+ public void beforeViewRemoveAnim(View view) {
+
+ }
+ };
+
+
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventMarker.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventMarker.java
new file mode 100644
index 0000000000..aa18f70f8b
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventMarker.java
@@ -0,0 +1,131 @@
+package com.mogo.module.v2x.scenario.scene.pushVR;
+
+import com.mogo.map.marker.IMogoMarker;
+import com.mogo.map.overlay.IMogoPolyline;
+import com.mogo.map.overlay.MogoPolylineOptions;
+import com.mogo.module.common.drawer.PushRoadConditionDrawer;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.V2XConst;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.scenario.view.IV2XMarker;
+import com.mogo.module.v2x.utils.MarkerUtils;
+import com.mogo.utils.logger.Logger;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * author : donghongyu
+ * e-mail : 1358506549@qq.com
+ * date : 2020/5/15 5:37 PM
+ * desc : 推送VR场景
+ * version: 1.0
+ */
+public class V2XPushVREventMarker implements IV2XMarker {
+ private final String TAG = "V2XPushVREventMarker";
+
+ private static IMogoPolyline mMogoPolyline;
+ private static IMogoMarker mAlarmInfoMarker;
+
+ @Override
+ public void drawPOI(V2XPushMessageEntity entity) {
+ Logger.w(V2XConst.MODULE_NAME + "_" + TAG, "drawPOI 绘制VR Marker");
+
+ try {
+ // 清除道路事件
+ V2XServiceManager
+ .getMoGoV2XMarkerManager().clearALLPOI();
+
+ if (mMogoPolyline != null) {
+ mMogoPolyline.remove();
+ }
+
+ // 绘制事件点Marker
+ PushRoadConditionDrawer.getInstance().drawRoadConditionMarker(entity);
+
+ // 绘制引导线
+ drawablePloyLine(entity);
+ drawableRecommendPolyline(entity);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 绘制引导线
+ *
+ * @param entity
+ */
+ void drawablePloyLine(V2XPushMessageEntity entity) {
+ // 连接线参数
+ MogoPolylineOptions options = new MogoPolylineOptions();
+
+ // 渐变色
+ List colors = new ArrayList<>();
+ colors.add(0xFFFA8C34);
+ colors.add(0xFFBD6D36);
+ colors.add(0xFFFA8C34);
+
+ // 线条粗细,渐变,渐变色值
+ options.width(15).useGradient(true).color(0xFF1F7EFF);
+
+ for (double[] doubles : entity.getPolyline()) {
+ options.add(doubles[0], doubles[1]);
+ }
+
+ // 绘制线的对象
+ mMogoPolyline = V2XServiceManager.getMogoOverlayManager().addPolyline(options);
+ }
+
+ /**
+ * 绘制推荐引导线
+ *
+ * @param entity
+ */
+ void drawableRecommendPolyline(V2XPushMessageEntity entity) {
+ // 连接线参数
+ MogoPolylineOptions options = new MogoPolylineOptions();
+
+ // 渐变色
+ List colors = new ArrayList<>();
+ colors.add(0xFFF95959);
+ colors.add(0xFF942B48);
+ colors.add(0xFFCB253A);
+
+ // 线条粗细,渐变,渐变色值
+ options.width(15).useGradient(true).color(0xFFEF3A3A);
+
+ for (double[] doubles : entity.getRecommendPolyline()) {
+ options.add(doubles[0], doubles[1]);
+ }
+
+ // 绘制线的对象
+ mMogoPolyline = V2XServiceManager.getMogoOverlayManager().addPolyline(options);
+ }
+
+ @Override
+ public void clearPOI() {
+ // 锁车就是将地图视图移植中心点,因为行驶中的车和地图要相对的跟随
+ MarkerUtils.resetMapZoom(16);
+ // 移除线
+ clearLine();
+ // 移除事件POI
+ clearAlarmPOI();
+ // 绘制上次的数据
+ V2XServiceManager.getMoGoV2XMarkerManager().drawableLastAllPOI();
+ }
+
+ void clearAlarmPOI() {
+ if (mAlarmInfoMarker != null) {
+ mAlarmInfoMarker.remove();
+ }
+ }
+
+ public void clearLine() {
+ if (mMogoPolyline != null) {
+ mMogoPolyline.remove();
+ mMogoPolyline = null;
+ V2XServiceManager.getV2XStatusManager().setAlarmInfo(null);
+ }
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java
new file mode 100644
index 0000000000..17f63180d6
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventScenario.java
@@ -0,0 +1,143 @@
+package com.mogo.module.v2x.scenario.scene.pushVR;
+
+import android.view.View;
+
+import androidx.annotation.Nullable;
+
+import com.mogo.module.common.entity.V2XMessageEntity;
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.V2XConst;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.scenario.impl.AbsV2XScenario;
+import com.mogo.service.windowview.IMogoTopViewStatusListener;
+import com.mogo.utils.logger.Logger;
+import com.mogo.utils.network.utils.GsonUtil;
+
+/**
+ * author : donghongyu
+ * e-mail : 1358506549@qq.com
+ * date : 2020/5/15 5:37 PM
+ * desc : 推送VR场景控制
+ * version: 1.0
+ */
+public class V2XPushVREventScenario
+ extends AbsV2XScenario
+ implements IMogoTopViewStatusListener {
+ private String TAG = "V2XPushVREventWindow";
+
+ private static V2XPushVREventScenario mV2XPushEventScenario;
+
+ private V2XPushVREventScenario() {
+ }
+
+ public static V2XPushVREventScenario getInstance() {
+ if (mV2XPushEventScenario == null) {
+ synchronized (V2XPushVREventScenario.class) {
+ if (mV2XPushEventScenario == null) {
+ mV2XPushEventScenario = new V2XPushVREventScenario();
+ mV2XPushEventScenario.setV2XMarker(new V2XPushVREventMarker());
+ mV2XPushEventScenario.setV2XWindow(new V2XPushVREventWindow());
+ }
+ }
+ }
+ return mV2XPushEventScenario;
+ }
+
+
+ @Override
+ public void init(@Nullable V2XMessageEntity v2XMessageEntity) {
+ Logger.w(V2XConst.MODULE_NAME + "_" + TAG, "处理推送VR场景:" + GsonUtil.jsonFromObject(v2XMessageEntity));
+
+ if (!isSameScenario(v2XMessageEntity)
+ && V2XServiceManager.getMoGoStatusManager().isMainPageLaunched()) {
+ setV2XMessageEntity(v2XMessageEntity);
+ show();
+ } else {
+ closeWindow();
+ setV2XMessageEntity(v2XMessageEntity);
+ show();
+ Logger.w(V2XConst.MODULE_NAME + "_" + TAG, "要处理的场景已经存在,丢弃这次初始化");
+ }
+ }
+
+ @Override
+ public void show() {
+ if (getV2XMessageEntity() != null && getV2XMessageEntity().getContent() != null) {
+ speakTTSVoice(getV2XMessageEntity().getContent().getTts(), null);
+ drawPOI();
+ showWindow();
+ }
+ }
+
+ @Override
+ public void showWindow() {
+ if (getV2XWindow() != null) {
+ getV2XWindow().show(getV2XMessageEntity().getContent());
+ }
+ }
+
+ @Override
+ public void closeWindow() {
+ V2XServiceManager.getMoGoV2XStatusManager().setPushWindowShow(TAG, false);
+ if (getV2XWindow() != null) {
+ getV2XWindow().close();
+ }
+ }
+
+ @Override
+ public void showButton() {
+ if (getV2XButton() != null) {
+ getV2XButton().show();
+ }
+ }
+
+ @Override
+ public void closeButton() {
+ if (getV2XButton() != null) {
+ getV2XButton().close();
+ }
+ }
+
+ @Override
+ public void drawPOI() {
+ if (getV2XMarker() != null) {
+ getV2XMarker().drawPOI(getV2XMessageEntity().getContent());
+ V2XServiceManager.getMoGoV2XStatusManager().setPushPOIShow(TAG, true);
+ }
+ }
+
+ @Override
+ public void clearPOI() {
+ if (getV2XMarker() != null) {
+ getV2XMarker().clearPOI();
+ }
+ V2XServiceManager.getMoGoV2XStatusManager().setPushPOIShow(TAG, false);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ @Override
+ public void onViewAdded(View view) {
+ Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "展示 Window 动画结束");
+ }
+
+ @Override
+ public void onViewRemoved(View view) {
+ Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "关闭 Window 动画结束");
+ }
+
+ @Override
+ public void beforeViewAddAnim(View view) {
+ Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "展示 Window 开始");
+ }
+
+ @Override
+ public void beforeViewRemoveAnim(View view) {
+ Logger.d(V2XConst.MODULE_NAME + "_" + TAG, "关闭 Window 开始");
+ V2XServiceManager.getMoGoV2XStatusManager().setPushWindowShow(TAG, false);
+ // 重置场景提示的消息
+ setV2XMessageEntity(null);
+ clearPOI();
+ }
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventWindow.java
new file mode 100644
index 0000000000..3efb61a229
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/pushVR/V2XPushVREventWindow.java
@@ -0,0 +1,93 @@
+package com.mogo.module.v2x.scenario.scene.pushVR;
+
+import android.os.Handler;
+import android.view.View;
+
+import com.mogo.module.common.entity.V2XPushMessageEntity;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.listener.V2XWindowStatusListener;
+import com.mogo.module.v2x.scenario.view.IV2XWindow;
+import com.mogo.service.entrance.IMogoEntranceButtonController;
+import com.mogo.utils.logger.Logger;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+/**
+ * author : donghongyu
+ * e-mail : 1358506549@qq.com
+ * date : 2020/4/14 2:37 PM
+ * desc :
+ * TODO 只有VR演示场景使用
+ * version: 1.0
+ */
+public class V2XPushVREventWindow implements IV2XWindow {
+ private String TAG = "V2XPushVREventWindow";
+
+ // 处理道路事件,30秒倒计时
+ private Handler handlerV2XEvent = new Handler();
+ private Runnable runnableV2XEvent;
+ private int mExpireTime = 30000;
+
+ /**
+ * 展示道路事件详情Windows
+ */
+ @Override
+ public void show(V2XPushMessageEntity entity) {
+ Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=推送消息:展示 Window=\n" + entity);
+
+ V2XServiceManager
+ .getMogoEntranceButtonController()
+ .showLeftNoticeByType(
+ IMogoEntranceButtonController.NOTICE_TYPE_CONGESTION_RECOMMENDED,
+ R.drawable.module_v2x_left_notice_seek_help,
+ entity.getAlarmContent());
+ //countDownV2XEvent();
+ }
+
+ /**
+ * 关闭详情展示框
+ */
+ @Override
+ public void close() {
+ Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=关闭Window");
+ V2XServiceManager
+ .getMogoEntranceButtonController()
+ .hideLeftNoticeByType(IMogoEntranceButtonController.NOTICE_TYPE_CONGESTION_RECOMMENDED);
+
+ // 停止倒计时
+ if (handlerV2XEvent != null && runnableV2XEvent != null) {
+ handlerV2XEvent.removeCallbacks(runnableV2XEvent);
+ runnableV2XEvent = null;
+ }
+
+ }
+
+ @Override
+ public View getView() {
+ return null;
+ }
+
+ @Override
+ public void setWindowStatusListener(V2XWindowStatusListener listener) {
+ }
+
+ /**
+ * 窗体倒计时
+ */
+ public void countDownV2XEvent() {
+ // 倒计时
+ if (runnableV2XEvent == null) {
+ runnableV2XEvent = () -> {
+ Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=30秒倒计时结束。。。");
+ // 移出Window详细信息
+ close();
+ };
+ } else {
+ handlerV2XEvent.removeCallbacks(runnableV2XEvent);
+ }
+ Logger.d(MODULE_NAME + "_" + TAG, "V2X==VR=推送消息 Window 展示开始倒计时:" + mExpireTime);
+ handlerV2XEvent.postDelayed(runnableV2XEvent, mExpireTime);
+ }
+
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java
index 910c9d374c..b5ce9cf3f0 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/seek/V2XSeekHelpScenario.java
@@ -15,6 +15,7 @@ import com.mogo.module.v2x.entity.net.V2XSpecialCarRes.V2XMarkerEntity;
import com.mogo.module.v2x.scenario.impl.AbsV2XScenario;
import com.mogo.module.v2x.utils.ADASUtils;
import com.mogo.module.v2x.utils.V2XUtils;
+import com.mogo.service.entrance.IMogoEntranceButtonController;
import com.mogo.service.windowview.IMogoTopViewStatusListener;
import com.mogo.utils.logger.Logger;
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java
index 43926689b8..c979cca04b 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/scenario/scene/test/V2XTestConsoleWindow.java
@@ -43,6 +43,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
private LinearLayout mFlTestPanel;
private FlexboxLayout flTestPanelShunNormal;
private FlexboxLayout flTestPanelShunYi;
+ private FlexboxLayout flTestPanelVR;
private Button mBtnTriggerOpen;
private Button mBtnTriggerRoadEvent;
private Button mBtnClearRoadEvent;
@@ -56,6 +57,16 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
private Button mBtnTriggerEventUgc;
private Button mBtnTriggerTrafficSearch;
+ private Button btnTriggerRearVIPCarTip,
+ btnTriggerVehicleBrakes,
+ btnTriggerRearDangerousVehicles,
+ btnTriggerReverseVehicleRoutePrediction,
+ btnTriggerVIPLightChange,
+ btnTriggerObstacleDetour,
+ btnTriggerPedestrianWarning,
+ btnTriggerCongestedRouteRecommendation,
+ btnTriggerDoubleFlash;
+
public static V2XTestConsoleWindow getInstance(Context context, int showType) {
if (mV2XTestConsoleWindow == null) {
synchronized (V2XTestConsoleWindow.class) {
@@ -91,6 +102,7 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
mFlTestPanel = findViewById(R.id.flTestPanel);
flTestPanelShunNormal = findViewById(R.id.flTestPanelShunNormal);
flTestPanelShunYi = findViewById(R.id.flTestPanelShunYi);
+ flTestPanelVR = findViewById(R.id.flTestPanelVR);
mBtnTriggerOpen = findViewById(R.id.btnTriggerOpen);
mBtnClearRoadEvent = findViewById(R.id.btnClearRoadEvent);
mBtnTriggerRoadEvent = findViewById(R.id.btnTriggerRoadEvent);
@@ -118,6 +130,35 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
}
+ btnTriggerRearVIPCarTip = findViewById(R.id.btnTriggerRearVIPCarTip);
+ btnTriggerVehicleBrakes = findViewById(R.id.btnTriggerVehicleBrakes);
+ btnTriggerRearDangerousVehicles = findViewById(R.id.btnTriggerRearDangerousVehicles);
+ btnTriggerReverseVehicleRoutePrediction = findViewById(R.id.btnTriggerReverseVehicleRoutePrediction);
+ btnTriggerVIPLightChange = findViewById(R.id.btnTriggerVIPLightChange);
+ btnTriggerObstacleDetour = findViewById(R.id.btnTriggerObstacleDetour);
+ btnTriggerPedestrianWarning = findViewById(R.id.btnTriggerPedestrianWarning);
+ btnTriggerCongestedRouteRecommendation = findViewById(R.id.btnTriggerCongestedRouteRecommendation);
+ btnTriggerDoubleFlash = findViewById(R.id.btnTriggerDoubleFlash);
+
+
+ switch (showType) {
+ case 0:
+ flTestPanelShunNormal.setVisibility(View.VISIBLE);
+ flTestPanelShunYi.setVisibility(View.VISIBLE);
+ flTestPanelVR.setVisibility(View.VISIBLE);
+ break;
+ case 1:
+ flTestPanelShunNormal.setVisibility(View.VISIBLE);
+ break;
+ case 2:
+ flTestPanelShunYi.setVisibility(View.VISIBLE);
+ break;
+ case 3:
+ flTestPanelVR.setVisibility(View.VISIBLE);
+ break;
+ }
+
+
mBtnTriggerCallUserInfo.setOnClickListener(v -> {
MogoDriverInfo mogoDriverInfo = new MogoDriverInfo();
mogoDriverInfo.setAge(24);
@@ -219,6 +260,78 @@ public class V2XTestConsoleWindow extends ConstraintLayout {
});
mBtnTriggerTrafficSearch.setOnClickListener(v-> V2XServiceManager.getIMogoTrafficUploadProvider().verifyCurrentTrafficStatus());
+
+
+ /*
+ *后方VIP车辆提示
+ * */
+ btnTriggerRearVIPCarTip.setOnClickListener(v -> {
+
+ });
+ /*
+ *前车急刹
+ * */
+ btnTriggerVehicleBrakes.setOnClickListener(v -> {
+
+ });
+ /*
+ *后方危险车辆预警
+ * */
+ btnTriggerRearDangerousVehicles.setOnClickListener(v -> {
+
+ });
+
+ /*
+ * 逆向车辆路线预判
+ * */
+ btnTriggerReverseVehicleRoutePrediction.setOnClickListener(v -> {
+ V2XMessageEntity v2XMessageEntity =
+ TestOnLineCarUtils.getV2XScenarionVRReverseCarData();
+
+ Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION);
+ intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity);
+ LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
+ });
+
+ /*
+ *VIP变灯通行
+ * */
+ btnTriggerVIPLightChange.setOnClickListener(v -> {
+
+ });
+
+ /*
+ *障碍物绕行
+ * */
+ btnTriggerObstacleDetour.setOnClickListener(v -> {
+
+ });
+
+ /*
+ *行人预警,行人路线预测
+ * */
+ btnTriggerPedestrianWarning.setOnClickListener(v -> {
+
+ });
+
+ /*
+ *拥堵路线推荐
+ * */
+ btnTriggerCongestedRouteRecommendation.setOnClickListener(v -> {
+ V2XMessageEntity v2XMessageEntity =
+ TestOnLineCarUtils.getV2XScenarioPushVR();
+
+ Intent intent = new Intent(V2XConst.BROADCAST_SCENE_HANDLER_ACTION);
+ intent.putExtra(V2XConst.BROADCAST_SCENE_EXTRA_KEY, v2XMessageEntity);
+ LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
+ });
+
+ /*
+ *双闪车辆,自动绕行
+ * */
+ btnTriggerDoubleFlash.setOnClickListener(v -> {
+
+ });
}
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ImageUtil.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ImageUtil.java
index 76ba3e4c03..fdf8a1e931 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ImageUtil.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ImageUtil.java
@@ -75,4 +75,16 @@ public class ImageUtil {
}
return bitmap;
}
+
+
+
+ public static Bitmap createBitmap(Context context, int resId) {
+ if (resId != 0) {
+ BitmapFactory.Options opts = new BitmapFactory.Options();
+ BitmapFactory.decodeResource(context.getResources(), resId, opts);
+ Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId, opts);
+ return bitmap;
+ }
+ return null;
+ }
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ObuConfig.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ObuConfig.java
new file mode 100644
index 0000000000..361af30cce
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/ObuConfig.java
@@ -0,0 +1,14 @@
+package com.mogo.module.v2x.utils;
+
+/**
+ * obu相关设置项
+ * @author tongchenfei
+ */
+public class ObuConfig {
+ /**
+ * 设置是否使用obu定位信息
+ *
+ * 此定位信息目前只用于obu计算绿波车速引导和vip变灯提醒
+ */
+ public static boolean useObuLocation = false;
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java
index a730ae9870..7757a27b51 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/utils/TestOnLineCarUtils.java
@@ -223,6 +223,39 @@ public class TestOnLineCarUtils {
return null;
}
+ /**
+ * 模拟H5推送场景--十字路口碰撞
+ */
+ public static V2XMessageEntity getV2XScenarioCrossCrash() {
+ try {
+ InputStream inputStream = V2XUtils.getApp()
+ .getResources()
+ .openRawResource(R.raw.scenario_push_cross_crash);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int len = -1;
+ byte[] buffer = new byte[1024];
+ while ((len = inputStream.read(buffer)) != -1) {
+ baos.write(buffer, 0, len);
+ }
+ inputStream.close();
+
+ // 加载数据源
+ V2XPushMessageEntity v2xRoadEventEntity = GsonUtil.objectFromJson(baos.toString(), V2XPushMessageEntity.class);
+
+ V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>();
+ // 控制类型
+ v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_ANIMATION_WARNING);
+ // 设置数据
+ v2xMessageEntity.setContent(v2xRoadEventEntity);
+ // 控制展示状态
+ v2xMessageEntity.setShowState(true);
+ return v2xMessageEntity;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
/**
* 模拟 疲劳驾驶
*/
@@ -290,4 +323,104 @@ public class TestOnLineCarUtils {
}
return null;
}
+
+ /**
+ * 模拟 后方VIP
+ */
+ public static V2XMessageEntity> getV2XScenarionVRBehindVIPData() {
+ try {
+ InputStream inputStream = V2XUtils.getApp()
+ .getResources()
+ .openRawResource(R.raw.scenario_push_vr_hehind_vip_data);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int len = -1;
+ byte[] buffer = new byte[1024];
+ while ((len = inputStream.read(buffer)) != -1) {
+ baos.write(buffer, 0, len);
+ }
+ inputStream.close();
+
+ // 加载数据源
+ V2XSpecialCarRes v2xRoadEventEntity =
+ GsonUtil.objectFromJson(baos.toString(), V2XSpecialCarRes.class);
+
+ V2XMessageEntity> v2xMessageEntity = new V2XMessageEntity<>();
+ // 控制类型
+ v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_WINDOW_WARNING);
+ // 设置数据
+ v2xMessageEntity.setContent(v2xRoadEventEntity.getCoordinates());
+ // 控制展示状态
+ v2xMessageEntity.setShowState(true);
+ return v2xMessageEntity;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 逆向车辆路线预判
+ */
+ public static V2XMessageEntity getV2XScenarionVRReverseCarData() {
+ try {
+ InputStream inputStream = V2XUtils.getApp()
+ .getResources()
+ .openRawResource(R.raw.scenario_push_vr_reverse_car_data);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int len = -1;
+ byte[] buffer = new byte[1024];
+ while ((len = inputStream.read(buffer)) != -1) {
+ baos.write(buffer, 0, len);
+ }
+ inputStream.close();
+
+ // 加载数据源
+ V2XPushMessageEntity v2xRoadEventEntity = GsonUtil.objectFromJson(baos.toString(), V2XPushMessageEntity.class);
+
+ V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>();
+ // 控制类型
+ v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW);
+ // 设置数据
+ v2xMessageEntity.setContent(v2xRoadEventEntity);
+ // 控制展示状态
+ v2xMessageEntity.setShowState(true);
+ return v2xMessageEntity;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 模拟H5推送场景---推送VR场景信息
+ */
+ public static V2XMessageEntity getV2XScenarioPushVR() {
+ try {
+ InputStream inputStream = V2XUtils.getApp()
+ .getResources()
+ .openRawResource(R.raw.scenario_push_vr_event_data_yongdu);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int len = -1;
+ byte[] buffer = new byte[1024];
+ while ((len = inputStream.read(buffer)) != -1) {
+ baos.write(buffer, 0, len);
+ }
+ inputStream.close();
+
+ // 加载数据源
+ V2XPushMessageEntity v2xRoadEventEntity = GsonUtil.objectFromJson(baos.toString(), V2XPushMessageEntity.class);
+
+ V2XMessageEntity v2xMessageEntity = new V2XMessageEntity<>();
+ // 控制类型
+ v2xMessageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_PUSH_VR_SHOW);
+ // 设置数据
+ v2xMessageEntity.setContent(v2xRoadEventEntity);
+ // 控制展示状态
+ v2xMessageEntity.setShowState(true);
+ return v2xMessageEntity;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleLiveVideoPlayer.kt b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleLiveVideoPlayer.kt
new file mode 100644
index 0000000000..d1848e219a
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/SimpleLiveVideoPlayer.kt
@@ -0,0 +1,185 @@
+package com.mogo.module.v2x.view
+
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.Surface
+import android.view.View
+import android.widget.ImageView
+import com.mogo.module.v2x.R
+import com.shuyu.gsyvideoplayer.GSYVideoManager
+import com.shuyu.gsyvideoplayer.utils.GSYVideoType
+import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
+import com.shuyu.gsyvideoplayer.video.base.GSYVideoView
+import com.shuyu.gsyvideoplayer.video.base.GSYVideoViewBridge
+
+/**
+ * @author congtaowang
+ * @since 2020/12/8
+ *
+ * 描述
+ */
+class SimpleLiveVideoPlayer : StandardGSYVideoPlayer {
+
+ companion object {
+ const val PLAY_EVT_PLAY_LOADING = 1000
+ const val PLAY_EVT_PLAY_BEGIN = 2000
+ const val PLAY_EVT_PLAY_ERROR = 3000
+ }
+
+ private var playListener: PlayListener? = null
+ private lateinit var start: ImageView
+
+ interface PlayListener {
+ fun onPlayEvent(event: Int)
+ }
+
+ constructor(context: Context?) : super(context)
+ constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
+ constructor(context: Context?, fullFlag: Boolean?) : super(context, fullFlag)
+
+ override fun init(context: Context) {
+ super.init(context)
+ start = findViewById(R.id.start)
+ if (mThumbImageViewLayout != null
+ && (mCurrentState == -1 || mCurrentState == GSYVideoView.CURRENT_STATE_NORMAL || mCurrentState == GSYVideoView.CURRENT_STATE_ERROR)
+ ) {
+ mThumbImageViewLayout.visibility = View.VISIBLE
+ }
+ }
+
+ override fun getLayoutId(): Int {
+ return R.layout.item_v2x_crossroad_live_video
+ }
+
+ override fun getGSYVideoManager(): GSYVideoViewBridge {
+ GSYVideoManager.instance().initContext(context.applicationContext)
+ return GSYVideoManager.instance()
+ }
+
+ override fun setProgressAndTime(
+ progress: Int,
+ secProgress: Int,
+ currentTime: Int,
+ totalTime: Int,
+ forceChange: Boolean
+ ) {
+ super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange)
+ if (progress != 0) {
+ mProgressBar?.progress = progress
+ }
+ }
+
+ fun setPlayListener(listener: PlayListener) {
+ this.playListener = listener
+ }
+
+ override fun updateStartImage() {
+ }
+
+ override fun changeUiToCompleteShow() {
+ super.changeUiToCompleteShow()
+ mBottomContainer?.visibility = View.INVISIBLE
+ mProgressBar?.visibility = View.GONE
+ }
+
+ override fun hideAllWidget() {
+ super.hideAllWidget()
+ mBottomContainer?.visibility = View.INVISIBLE
+ mProgressBar?.visibility = View.GONE
+ }
+
+ override fun changeUiToPrepareingClear() {
+ super.changeUiToPrepareingClear()
+ mBottomContainer?.visibility = View.INVISIBLE
+ mProgressBar?.visibility = View.GONE
+ }
+
+ override fun changeUiToPlayingBufferingClear() {
+ super.changeUiToPlayingBufferingClear()
+ mBottomContainer?.visibility = View.INVISIBLE
+ mProgressBar?.visibility = View.GONE
+
+ }
+
+ override fun changeUiToClear() {
+ super.changeUiToClear()
+ mBottomContainer?.visibility = View.INVISIBLE
+ mProgressBar?.visibility = View.GONE
+ }
+
+ override fun changeUiToCompleteClear() {
+ super.changeUiToCompleteClear()
+ mBottomContainer?.visibility = View.INVISIBLE
+ mProgressBar?.visibility = View.GONE
+ }
+
+ override fun onAutoCompletion() {
+ super.onAutoCompletion()
+ mProgressBar?.progress = 0
+ }
+
+ override fun showWifiDialog() {
+ //直接播放,不显示WIFI对话框
+ startPlayLogic()
+ }
+
+ override fun onDetachedFromWindow() {
+ super.onDetachedFromWindow()
+ mProgressBar?.progress = 0
+ mFullPauseBitmap = null
+ }
+
+ override fun onClick(v: View?) {
+ super.onClick(v)
+ }
+
+ override fun onCompletion() {
+ isPostBufferUpdate = false
+ }
+
+ override fun onSurfaceUpdated(surface: Surface) {
+ super.onSurfaceUpdated(surface)
+ if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) {
+ mThumbImageViewLayout.visibility = View.INVISIBLE
+ }
+ }
+
+ override fun onPrepared() {
+ super.onPrepared()
+ playListener?.onPlayEvent(PLAY_EVT_PLAY_LOADING)
+ }
+
+ private var isPostBufferUpdate = false
+
+ override fun onBufferingUpdate(percent: Int) {
+ super.onBufferingUpdate(percent)
+ if (!isPostBufferUpdate && percent == 0) {
+ isPostBufferUpdate = true
+ playListener?.onPlayEvent(PLAY_EVT_PLAY_BEGIN)
+ }
+ }
+
+ override fun onError(what: Int, extra: Int) {
+ super.onError(what, extra)
+ playListener?.onPlayEvent(PLAY_EVT_PLAY_ERROR)
+ isPostBufferUpdate = false
+ }
+
+ override fun setViewShowState(view: View?, visibility: Int) {
+ if (view === mThumbImageViewLayout && visibility != View.VISIBLE) {
+ return
+ }
+ super.setViewShowState(view, visibility)
+ }
+
+ override fun onSurfaceAvailable(surface: Surface) {
+ super.onSurfaceAvailable(surface)
+ mProgressBar?.visibility = View.GONE
+ if (GSYVideoType.getRenderType() != GSYVideoType.TEXTURE) {
+ if (mThumbImageViewLayout != null && mThumbImageViewLayout.visibility == View.VISIBLE) {
+ mThumbImageViewLayout.visibility = View.INVISIBLE
+ }
+ }
+ }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000000..9db24bde03
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCarLiveVideoView.java
@@ -0,0 +1,280 @@
+package com.mogo.module.v2x.view;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.PorterDuff;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.content.ContextCompat;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.voice.AIAssist;
+import com.mogo.module.common.entity.MarkerCarInfo;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.V2XServiceManager;
+import com.mogo.module.v2x.entity.net.V2XLivePushVoRes;
+import com.mogo.module.v2x.network.V2XRefreshCallback;
+import com.mogo.module.v2x.utils.V2XUtils;
+import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
+import com.mogo.module.v2x.voice.V2XVoiceConstants;
+import com.mogo.module.v2x.voice.V2XVoiceManager;
+import com.mogo.utils.logger.Logger;
+import com.tencent.rtmp.ITXLivePlayListener;
+import com.tencent.rtmp.TXLiveConstants;
+import com.tencent.rtmp.TXLivePlayer;
+import com.tencent.rtmp.ui.TXCloudVideoView;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+
+/**
+ * author : donghongyu
+ * e-mail : 1358506549@qq.com
+ * date : 2020-02-0623:07
+ * desc :
+ * version: 1.0
+ */
+public class V2XCarLiveVideoView extends RoundLayout {
+ private final String TAG = "V2XLiveGSYVideoView";
+
+ private TXCloudVideoView mTxcVideoView;
+ private ProgressBar mLoading;
+ private TXLivePlayer mLivePlayer;
+ private ConstraintLayout mClLoadError;
+ private TextView mTvRefreshButton;
+
+ private MarkerCarInfo.CarLiveInfo mCarLiveInfo;
+ // 重新刷新直播流
+ private V2XVoiceCallbackListener v2XVoiceCallbackRefreshListener = new V2XVoiceCallbackListener() {
+ @Override
+ public void onCallback(String command, Intent intent) {
+ mLoading.setVisibility(VISIBLE);
+ mClLoadError.setVisibility(GONE);
+ if (mCarLiveInfo != null) {
+ startLive(mCarLiveInfo);
+ }
+ }
+ };
+
+ public V2XCarLiveVideoView(Context context) {
+ this(context, null);
+ }
+
+ public V2XCarLiveVideoView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public V2XCarLiveVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ LayoutInflater.from(context)
+ .inflate(R.layout.view_video_layout_see_live, this);
+ //mPlayerView 即 step1 中添加的界面 view
+ mTxcVideoView = findViewById(R.id.txcVideoView);
+ //创建 player 对象
+ mLivePlayer = new TXLivePlayer(context);
+ //关键 player 对象与界面 view
+ mLivePlayer.setPlayerView(mTxcVideoView);
+ mLivePlayer.setMute(true);
+ mLivePlayer.enableHardwareDecode(true);
+
+ mLoading = findViewById(R.id.loading);
+ mLoading.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, R.color.live_video_progress_bar_loading_color), PorterDuff.Mode.MULTIPLY);
+
+ mClLoadError = findViewById(R.id.clLoadError);
+ mTvRefreshButton = findViewById(R.id.tvRefreshButton);
+ mTvRefreshButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mLoading.setVisibility(VISIBLE);
+ mClLoadError.setVisibility(GONE);
+ if (mCarLiveInfo != null) {
+ startLive(mCarLiveInfo);
+ }
+ }
+ });
+ }
+
+ /**
+ * 设置直播信息
+ */
+ public void setCarLiveInfo(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ mCarLiveInfo = carLiveInfo;
+ }
+
+ /**
+ * 开始直播
+ *
+ * @param carLiveInfo 要直播的车机,如果没有直播的地址需要重新获取最新的直播地址
+ */
+ public void startLive(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ // 进行直播播放
+ if (mLivePlayer != null
+ && carLiveInfo != null) {
+ if (!TextUtils.isEmpty(carLiveInfo.getVideoUrl())) {
+ AIAssist.getInstance(AbsMogoApplication.getApp()).speakTTSVoice(AbsMogoApplication.getApp().getString(R.string.v2x_voice_see_front_car_live));
+ setCarLiveInfo(carLiveInfo);
+ playLiveVideo(carLiveInfo);
+ }
+ // 根据SN重新获取直播流地址
+ else {
+ V2XServiceManager
+ .getV2XRefreshModel()
+ .livePush(new V2XRefreshCallback() {
+ @Override
+ public void onSuccess(V2XLivePushVoRes result) {
+ AIAssist.getInstance(AbsMogoApplication.getApp()).speakTTSVoice(AbsMogoApplication.getApp().getString(R.string.v2x_voice_see_front_car_live));
+ mClLoadError.setVisibility(GONE);
+ mClLoadError.setVisibility(GONE);
+ try {
+ MarkerCarInfo.CarLiveInfo carRealLiveInfo = new MarkerCarInfo.CarLiveInfo();
+ carRealLiveInfo.setVideoUrl(result.getResult().getPlayUrl().getRtmp());
+ carRealLiveInfo.setVideoSn(carLiveInfo.getVideoSn());
+ carRealLiveInfo.setVideoChannel(result.getResult().getVideoChannel());
+ setCarLiveInfo(carLiveInfo);
+ playLiveVideo(carRealLiveInfo);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onFail(String msg) {
+ Logger.e(MODULE_NAME, "播放器:" + msg);
+ AIAssist.getInstance(AbsMogoApplication.getApp()).speakTTSVoice(AbsMogoApplication.getApp().getString(R.string.v2x_voice_see_front_car_live_error));
+ mLoading.setVisibility(GONE);
+ mClLoadError.setVisibility(VISIBLE);
+ }
+ }, carLiveInfo.getVideoSn(), 0);
+ }
+ }
+ }
+
+ /**
+ * 播放直播流,且开始心跳
+ */
+ private void playLiveVideo(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ startHeartLive(carLiveInfo);
+ if (mLivePlayer != null) {
+ mLivePlayer.startPlay(carLiveInfo.getVideoUrl(), TXLivePlayer.PLAY_TYPE_LIVE_RTMP);
+ mLivePlayer.setPlayListener(new ITXLivePlayListener() {
+ @Override
+ public void onPlayEvent(int event, Bundle bundle) {
+ Logger.w(MODULE_NAME, "播放器:onPlayEvent==" + event + "===bundle===" + bundle);
+ if (event == TXLiveConstants.PLAY_EVT_PLAY_LOADING) {
+ mLoading.setVisibility(VISIBLE);
+ mClLoadError.setVisibility(GONE);
+ } else if (event == TXLiveConstants.PLAY_EVT_PLAY_BEGIN) {
+ refreshStatusToListener(true);
+ mLoading.setVisibility(GONE);
+ mClLoadError.setVisibility(GONE);
+ } else if (event < 0) {
+ refreshStatusToListener(false);
+ AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("直播获取识败,可以对我说重试", null);
+ stopLive(mCarLiveInfo);
+ mLoading.setVisibility(GONE);
+ mClLoadError.setVisibility(VISIBLE);
+ // 注册语音交互
+ V2XVoiceManager.INSTANCE
+ .registerWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_CAR_LIVE,
+ v2XVoiceCallbackRefreshListener)
+ .registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP,
+ v2XVoiceCallbackRefreshListener);
+ }
+ }
+
+ @Override
+ public void onNetStatus(Bundle bundle) {
+ //Logger.w(MODULE_NAME, "播放器:onNetStatus===bundle===" + bundle);
+ }
+ });
+ }
+ }
+
+ // 刷新直播心跳
+ private void startHeartLive(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ try {
+ if (!TextUtils.isEmpty(carLiveInfo.getVideoSn())
+ && !TextUtils.isEmpty(carLiveInfo.getVideoChannel())) {
+ V2XServiceManager
+ .getV2XRefreshModel()
+ .refreshHeartBeat(carLiveInfo.getVideoSn(),
+ carLiveInfo.getVideoChannel(),
+ null);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void stopLive(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ try {
+ Logger.w(MODULE_NAME, "心跳:关闭直播...");
+ // 暂停
+ mLivePlayer.pause();
+ // true 代表清除最后一帧画面
+ mLivePlayer.stopPlay(true);
+ mTxcVideoView.onDestroy();
+ // 停止推流
+ V2XServiceManager
+ .getV2XRefreshModel()
+ .livePush(new V2XRefreshCallback() {
+ @Override
+ public void onSuccess(V2XLivePushVoRes result) {
+ Logger.d(MODULE_NAME, "播放器:" + result);
+ }
+
+ @Override
+ public void onFail(String msg) {
+ Logger.e(MODULE_NAME, "播放器:" + msg);
+ }
+ }, carLiveInfo.getVideoSn(), 1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (mCarLiveInfo != null) {
+ startLive(mCarLiveInfo);
+ }
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ stopLive(mCarLiveInfo);
+ mLoading.setVisibility(VISIBLE);
+ // 反注册语音交互
+ V2XVoiceManager.INSTANCE
+ .unRegisterWakeCmd(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_CAR_LIVE)
+ .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP);
+ super.onDetachedFromWindow();
+ }
+
+ private void refreshStatusToListener(boolean videoPlaying) {
+ if (onVideoStatusChange != null) {
+ onVideoStatusChange.videoPlaying(videoPlaying);
+ }
+ }
+
+ private OnVideoStatusChange onVideoStatusChange;
+
+ public void addOnVideoStatusChangeListener(OnVideoStatusChange onVideoStatusChange) {
+ this.onVideoStatusChange = onVideoStatusChange;
+ }
+
+ public interface OnVideoStatusChange {
+ void videoPlaying(boolean videoPlaying);
+ }
+}
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
new file mode 100644
index 0000000000..42feccd095
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/view/V2XCrossRoadVideoView.java
@@ -0,0 +1,263 @@
+package com.mogo.module.v2x.view;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.PorterDuff;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.content.ContextCompat;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.commons.voice.AIAssist;
+import com.mogo.module.common.entity.MarkerCarInfo;
+import com.mogo.module.v2x.R;
+import com.mogo.module.v2x.entity.net.V2XLiveCrossRoad;
+import com.mogo.module.v2x.network.V2XRefreshCallback;
+import com.mogo.module.v2x.network.V2XRefreshModel;
+import com.mogo.module.v2x.utils.V2XUtils;
+import com.mogo.module.v2x.voice.V2XVoiceCallbackListener;
+import com.mogo.module.v2x.voice.V2XVoiceConstants;
+import com.mogo.module.v2x.voice.V2XVoiceManager;
+import com.mogo.utils.logger.Logger;
+import com.shuyu.gsyvideoplayer.GSYVideoManager;
+import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
+import com.shuyu.gsyvideoplayer.cache.CacheFactory;
+import com.shuyu.gsyvideoplayer.cache.ProxyCacheManager;
+import com.shuyu.gsyvideoplayer.model.VideoOptionModel;
+import com.shuyu.gsyvideoplayer.player.IjkPlayerManager;
+import com.shuyu.gsyvideoplayer.player.PlayerFactory;
+import com.shuyu.gsyvideoplayer.utils.GSYVideoType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import tv.danmaku.ijk.media.player.IjkMediaPlayer;
+
+import static com.mogo.module.v2x.V2XConst.MODULE_NAME;
+import static com.mogo.module.v2x.view.SimpleLiveVideoPlayer.PLAY_EVT_PLAY_BEGIN;
+import static com.mogo.module.v2x.view.SimpleLiveVideoPlayer.PLAY_EVT_PLAY_LOADING;
+
+/**
+ * author : donghongyu
+ * e-mail : 1358506549@qq.com
+ * date : 2020-02-0623:07
+ * desc :
+ * version: 1.0
+ */
+public class V2XCrossRoadVideoView extends RoundLayout {
+
+ private static final String TAG = "CrossRoadVideo";
+
+ private SimpleLiveVideoPlayer mTxcVideoView;
+ private GSYVideoOptionBuilder gsyVideoOptionBuilder = new GSYVideoOptionBuilder();
+ private ProgressBar mLoading;
+ private ConstraintLayout mClLoadError;
+ private TextView mTvRefreshButton;
+ private boolean init = false;
+
+ private MarkerCarInfo.CarLiveInfo mCarLiveInfo;
+ // 重新刷新直播流
+ private V2XVoiceCallbackListener v2XVoiceCallbackRefreshListener = new V2XVoiceCallbackListener() {
+ @Override
+ public void onCallback(String command, Intent intent) {
+ mLoading.setVisibility(VISIBLE);
+ mClLoadError.setVisibility(GONE);
+ if (mCarLiveInfo != null) {
+ startLive(mCarLiveInfo);
+ }
+ }
+ };
+
+ public V2XCrossRoadVideoView(Context context) {
+ this(context, null);
+ }
+
+ public V2XCrossRoadVideoView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public V2XCrossRoadVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initView(context);
+ }
+
+ private void initView(Context context) {
+ if(init){
+ return;
+ }
+ Logger.d("V2XCrossRoadVideoView", "V2X===初始化语音呼叫路口直播视图");
+ LayoutInflater.from(context)
+ .inflate(R.layout.view_video_layout_see_crossroad, this);
+ //mPlayerView 即 step1 中添加的界面 view
+ mTxcVideoView = findViewById(R.id.txcVideoView);
+ initGSYVideoConfig();
+
+ mLoading = findViewById(R.id.loading);
+ mLoading.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, R.color.live_video_progress_bar_loading_color), PorterDuff.Mode.MULTIPLY);
+
+ mClLoadError = findViewById(R.id.clLoadError);
+ mTvRefreshButton = findViewById(R.id.tvRefreshButton);
+ mTvRefreshButton.setOnClickListener(v -> {
+ mLoading.setVisibility(VISIBLE);
+ mClLoadError.setVisibility(GONE);
+ if (mCarLiveInfo != null) {
+ startLive(mCarLiveInfo);
+ }
+ });
+ init = true;
+ }
+
+ private void initGSYVideoConfig() {
+ PlayerFactory.setPlayManager(IjkPlayerManager.class);
+ CacheFactory.setCacheManager(ProxyCacheManager.class);
+ List list = new ArrayList<>();
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_transport", "tcp"));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "rtsp_flags", "prefer_tcp"));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "allowed_media_types", "video"));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "timeout", 20000));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "buffer_size", 1316));
+
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "infbuf", 1));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", 1));
+
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probesize", 10240));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "flush_packets", 1));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration",1));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "packet-buffering", 0));
+ list.add(new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "reconnect",10));
+
+ GSYVideoManager.instance().setOptionModelList(list);
+ GSYVideoType.enableMediaCodec();
+ GSYVideoType.enableMediaCodecTexture();
+ GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL);
+ }
+
+ /**
+ * 设置直播信息
+ */
+ public void setCarLiveInfo(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ mCarLiveInfo = carLiveInfo;
+ }
+
+ /**
+ * 开始直播
+ *
+ * @param carLiveInfo 要直播的车机,如果没有直播的地址需要重新获取最新的直播地址
+ */
+ public void startLive(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ initView(this.getContext());
+ // 进行直播播放
+ if (mTxcVideoView != null
+ && carLiveInfo != null) {
+ if (!TextUtils.isEmpty(carLiveInfo.getVideoUrl())) {
+ setCarLiveInfo(carLiveInfo);
+ playLiveVideo(carLiveInfo);
+ }
+ //重新获取直播流地址
+ else {
+ V2XRefreshModel.getInstance(AbsMogoApplication.getApp()).queryCrossRoadsLive(new V2XRefreshCallback() {
+ @Override
+ public void onSuccess(V2XLiveCrossRoad result) {
+ if (result != null && result.getResult().getUrl() != null) {
+ String liveUrl = result.getResult().getUrl();
+ MarkerCarInfo.CarLiveInfo carLiveInfo = new MarkerCarInfo.CarLiveInfo();
+ carLiveInfo.setVideoUrl(liveUrl);
+ setCarLiveInfo(carLiveInfo);
+ playLiveVideo(carLiveInfo);
+ } else {
+ Logger.d(MODULE_NAME, "startLive 路口实况直播地址为空");
+ }
+ }
+
+ @Override
+ public void onFail(String msg) {
+ //获取路口实况失败
+ Logger.d(MODULE_NAME, "获取路口实况失败");
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * 播放直播流,且开始心跳
+ */
+ private void playLiveVideo(MarkerCarInfo.CarLiveInfo carLiveInfo) {
+ if (mTxcVideoView != null) {
+ mTxcVideoView.setPlayListener(event -> {
+ Logger.w(MODULE_NAME, "播放器:onPlayEvent==" + event);
+ if (event == PLAY_EVT_PLAY_LOADING) {
+ mLoading.setVisibility(VISIBLE);
+ mClLoadError.setVisibility(GONE);
+ } else if (event == PLAY_EVT_PLAY_BEGIN) {
+ refreshStatusToListener(true);
+ mLoading.setVisibility(GONE);
+ mClLoadError.setVisibility(GONE);
+ } else if (event < 0) {
+ refreshStatusToListener(false);
+ AIAssist.getInstance(V2XUtils.getApp()).speakTTSVoice("直播获取识败,可以对我说重试", null);
+ stopLive();
+ mLoading.setVisibility(GONE);
+ mClLoadError.setVisibility(VISIBLE);
+ // 注册语音交互
+ V2XVoiceManager.INSTANCE
+ .registerUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP,
+ v2XVoiceCallbackRefreshListener);
+ }
+ });
+ gsyVideoOptionBuilder.setUrl(carLiveInfo.getVideoUrl()).setCacheWithPlay(false).setPlayTag(TAG)
+ .build(mTxcVideoView);
+ mTxcVideoView.getStartButton().performClick();
+ }
+ }
+
+ public void stopLive() {
+ try {
+ Logger.w(MODULE_NAME, "关闭直播...");
+ GSYVideoManager.releaseAllVideos();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (mCarLiveInfo != null) {
+ startLive(mCarLiveInfo);
+ }
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ stopLive();
+ mLoading.setVisibility(VISIBLE);
+ // 反注册语音交互
+ V2XVoiceManager.INSTANCE
+ .unRegisterUnWakeVoice(V2XVoiceConstants.COMMAND_ZHIDAO_V2X_REFRESH_LIVE_UN_WAKEUP);
+ super.onDetachedFromWindow();
+ }
+
+ private void refreshStatusToListener(boolean videoPlaying) {
+ if (onVideoStatusChange != null) {
+ onVideoStatusChange.videoPlaying(videoPlaying);
+ }
+ }
+
+ private OnVideoStatusChange onVideoStatusChange;
+
+ public void addOnVideoStatusChangeListener(OnVideoStatusChange onVideoStatusChange) {
+ this.onVideoStatusChange = onVideoStatusChange;
+ }
+
+ public interface OnVideoStatusChange {
+ void videoPlaying(boolean videoPlaying);
+ }
+}
diff --git a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/voice/V2XVoiceConstants.java b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/voice/V2XVoiceConstants.java
index a34bf1a2be..6f22e219a8 100644
--- a/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/voice/V2XVoiceConstants.java
+++ b/modules/mogo-module-v2x/src/main/java/com/mogo/module/v2x/voice/V2XVoiceConstants.java
@@ -80,6 +80,16 @@ public class V2XVoiceConstants {
*/
public static final String COMMAND_ZHIDAO_V2X_REFRESH_CAR_LIVE = "com.zhidao.user.action.retry";
+ /**
+ * 唤醒词:查看前车视频
+ */
+ public static final String COMMAND_ZHIDAO_V2X_AHEAD_LIVE = "com.zhidao.ahead.live";
+
+ /**
+ * 唤醒词:查看周围路口直播
+ */
+ public static final String COMMAND_ZHIDAO_V2X_CROSSROADS_LIVE = "com.zhidao.crossroads.live";
+
/**
* 应用内免唤醒
* 发起定向车聊聊
@@ -194,6 +204,19 @@ public class V2XVoiceConstants {
public static final String COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP";
public static final String[] COMMAND_ZHIDAO_V2X_ILLEGAL_PARKMARKER_FEEDBACK_YOUYONG_UN_WAKEUP_WORDS = {"有用"};
+ /**
+ * 应用内免唤醒
+ * "查看前车视频","查看前车直播","查看前车视角"
+ */
+ public static final String COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP";
+ public static final String[] COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP_WORDS = {"查看前车视频", "查看前车直播", "查看前车视角"};
+
+ /**
+ * 应用内免唤醒
+ */
+ public static final String COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP = "COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP";
+ public static final String[] COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP_WORDS = {"查看路口实况", "查看路口直播", "查看路口视频"};
+
/**
* 违章停车
* 没用
@@ -297,5 +320,11 @@ public class V2XVoiceConstants {
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GU_NO_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_YES_UN_WAKEUP_WORDS);
sVoiceCmds.put(COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_FEEDBACK_SHI_GONG_NO_UN_WAKEUP_WORDS);
+
+
+ //2020-6-24 顺义演示需求添加,现合并至launcher 更新时间:2020-08-25
+ sVoiceCmds.put(COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP, COMMAND_ZHIDAO_V2X_CALL_FRONT_CAR_DEMO_UN_WAKEUP_WORDS);
+ sVoiceCmds.put(COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP, COMMAND_ZHIDAO_V2X_OPEN_ROAD_CAMERA_LIVE_UN_WAKEUP_WORDS);
+
}
}
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_left_notice_seek_help.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_left_notice_seek_help.png
new file mode 100644
index 0000000000..00c0cab6db
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_left_notice_seek_help.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_suddenly_break.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_suddenly_break.png
new file mode 100644
index 0000000000..fc413a6bd0
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_suddenly_break.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_vip.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_vip.png
new file mode 100644
index 0000000000..3d0eb6e1cc
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/module_v2x_vip.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_bg_simple_obu.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_bg_simple_obu.png
new file mode 100644
index 0000000000..cb30283530
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_bg_simple_obu.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_che.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_che.png
new file mode 100644
index 0000000000..28102482f0
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_che.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_che_xian.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_che_xian.png
new file mode 100644
index 0000000000..c07da97430
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_che_xian.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_xian.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_xian.png
new file mode 100644
index 0000000000..4d3cc1c5bc
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_duixiang_laiche_xian.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_optimal_speed.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_optimal_speed.png
new file mode 100644
index 0000000000..c7d9845123
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_optimal_speed.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_rush_red_light.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_rush_red_light.png
new file mode 100644
index 0000000000..885d5dfeb7
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_rush_red_light.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_traffic_light.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_traffic_light.png
new file mode 100644
index 0000000000..38dc68d539
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_traffic_light.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_urgency_collision.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_urgency_collision.png
new file mode 100644
index 0000000000..383e8897b1
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_icon_obu_urgency_collision.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_obu_green_point.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_obu_green_point.png
new file mode 100644
index 0000000000..6e48b03365
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_obu_green_point.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_obu_traffic_light_pop.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_obu_traffic_light_pop.png
new file mode 100644
index 0000000000..5e70e5f300
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_obu_traffic_light_pop.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_vr_ziche.png b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_vr_ziche.png
new file mode 100644
index 0000000000..01f991d7f7
Binary files /dev/null and b/modules/mogo-module-v2x/src/main/res/drawable-xhdpi/v2x_vr_ziche.png differ
diff --git a/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_green.xml b/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_green.xml
new file mode 100644
index 0000000000..1f055ae661
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/drawable/bg_v2x_event_type_green.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/drawable/v2x_shape_bg_count_down_corner_14.xml b/modules/mogo-module-v2x/src/main/res/drawable/v2x_shape_bg_count_down_corner_14.xml
new file mode 100644
index 0000000000..9f90c34357
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/drawable/v2x_shape_bg_count_down_corner_14.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_crossroad_live_video.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_crossroad_live_video.xml
new file mode 100644
index 0000000000..938a27fd1b
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_crossroad_live_video.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
diff --git a/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_crossroad_live_video.xml b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_crossroad_live_video.xml
new file mode 100644
index 0000000000..50615a0a07
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_crossroad_live_video.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000000..8ecc584a7d
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/item_v2x_see_frontcar_live_video.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/view_v2x_optimal_speed_marker.xml b/modules/mogo-module-v2x/src/main/res/layout/view_v2x_optimal_speed_marker.xml
new file mode 100644
index 0000000000..61db0e4f33
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/view_v2x_optimal_speed_marker.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_crossroad.xml b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_crossroad.xml
new file mode 100644
index 0000000000..9a5eda56df
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_crossroad.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
new file mode 100644
index 0000000000..0ad6257f83
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/view_video_layout_see_live.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_see_carlive_video.xml b/modules/mogo-module-v2x/src/main/res/layout/window_see_carlive_video.xml
new file mode 100644
index 0000000000..0859547799
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_see_carlive_video.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_see_crossroadlive_video.xml b/modules/mogo-module-v2x/src/main/res/layout/window_see_crossroadlive_video.xml
new file mode 100644
index 0000000000..02a8789b35
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_see_crossroadlive_video.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_simple_obu_event_detail.xml b/modules/mogo-module-v2x/src/main/res/layout/window_simple_obu_event_detail.xml
new file mode 100644
index 0000000000..691544963f
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_simple_obu_event_detail.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml b/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml
index 78ad4eb5fc..d7f0e36309 100644
--- a/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml
+++ b/modules/mogo-module-v2x/src/main/res/layout/window_test_console.xml
@@ -251,5 +251,158 @@
app:layout_constraintStart_toStartOf="parent" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_animation_event_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_animation_event_data.json
index 0cefc4487a..4181815172 100644
--- a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_animation_event_data.json
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_animation_event_data.json
@@ -1,5 +1,5 @@
{
- "sceneId": "100005",
+ "sceneId": "100006",
"alarmContent": "顺风车提醒",
"expireTime": 30000,
"sceneCategory": 0,
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_cross_crash.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_cross_crash.json
new file mode 100644
index 0000000000..180b9688a1
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_cross_crash.json
@@ -0,0 +1,21 @@
+{
+ "sceneId": "100006",
+ "alarmContent": "十字路口碰撞",
+ "expireTime": 30000,
+ "sceneCategory": 0,
+ "sceneDescription": "",
+ "sceneName": "",
+ "sceneLevel": 0,
+ "videoUrl": "",
+ "videoChannel": "C_1",
+ "videoSn": "ZD801B1932L00041",
+ "tts": "周围有路人发起顺风车",
+ "zoom": true,
+ "zoomScale": 15,
+ "location": {
+ "lat": 39.9754100000,
+ "lon": 116.4178276100
+ },
+ "userHead": "https://yycp-static-1255510688.cos.ap-beijing.myqcloud.com/defaultUserHeadImg/5.png",
+ "msgImgUrl": "https://upload.jianshu.io/users/upload_avatars/7663825/7c28763e-002b-4e89-8dea-5b8da210ef2c.jpg"
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_barrier_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_barrier_data.json
new file mode 100644
index 0000000000..485117a72d
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_barrier_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200006",
+ "alarmContent": "及时发现前方障碍物并告知车主,降低事故发生概率",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "利用用户分享数据以及单车识别能力将障碍物告知其他通过车主,从而降低事故发生概率",
+ "sceneName": "障碍物绕行",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "前方发现障碍物注意避让",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.196512,
+ "lon": 116.736461,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_behind_danger_car_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_behind_danger_car_data.json
new file mode 100644
index 0000000000..649a659c18
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_behind_danger_car_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200003",
+ "alarmContent": "演示后方危险车辆预警功能",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "后方危险车辆预警,注意保持车道",
+ "sceneName": "后方危险车辆预警",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "发现后方车辆超速,注意保持车道",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.196512,
+ "lon": 116.736461,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_car_break_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_car_break_data.json
new file mode 100644
index 0000000000..139b16390e
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_car_break_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200002",
+ "alarmContent": "发现前方车辆急刹,请注意减速",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "前车急刹,注意减速",
+ "sceneName": "前车急刹",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "前车急刹注意减速",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.195206,
+ "lon": 116.727433,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_event_data_shuangshan.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_event_data_shuangshan.json
new file mode 100644
index 0000000000..90519ff610
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_event_data_shuangshan.json
@@ -0,0 +1,745 @@
+{
+ "sceneId": "200008",
+ "alarmContent": "拥堵路线推荐",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "拥堵路线推荐",
+ "sceneName": "拥堵路线推荐",
+ "sceneLevel": 0,
+ "videoUrl": "",
+ "videoChannel": "",
+ "videoSn": "",
+ "tts": "发现前方拥堵,最优路线快6分钟",
+ "zoom": false,
+ "zoomScale": 15,
+ "userHead": "",
+ "msgImgUrl": "",
+ "lat": 40.196512,
+ "lon": 116.736461,
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_event_data_yongdu.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_event_data_yongdu.json
new file mode 100644
index 0000000000..a4707406c6
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_event_data_yongdu.json
@@ -0,0 +1,745 @@
+{
+ "sceneId": "200008",
+ "alarmContent": "拥堵路线推荐",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "拥堵路线推荐",
+ "sceneName": "拥堵路线推荐",
+ "sceneLevel": 0,
+ "videoUrl": "",
+ "videoChannel": "",
+ "videoSn": "",
+ "tts": "发现前方拥堵,最优路线快6分钟",
+ "zoom": false,
+ "zoomScale": 15,
+ "userHead": "",
+ "msgImgUrl": "",
+ "lat": 40.195571,
+ "lon": 116.729344,
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_hehind_vip_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_hehind_vip_data.json
new file mode 100644
index 0000000000..9a770eda3f
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_hehind_vip_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200001",
+ "alarmContent": "发现后方VIP车辆,请注意避让",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "VIP车辆,请避让",
+ "sceneName": "后方VIP车辆",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "发现后方VIP车辆,注意避让",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.196512,
+ "lon": 116.736461,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_reverse_car_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_reverse_car_data.json
new file mode 100644
index 0000000000..f0ffa82850
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_reverse_car_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200004",
+ "alarmContent": "发现逆向来车,注意减速慢行",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "逆向车辆对主车行驶影响预判功能",
+ "sceneName": "逆向车辆路线预判",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "对向来车注意减速",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.196175,
+ "lon": 116.731011,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_vip_light_change_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_vip_light_change_data.json
new file mode 100644
index 0000000000..c3d10b092f
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_vip_light_change_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200005",
+ "alarmContent": "让救护车、警车、消防车等VIP车辆通行时免去等待红灯时间,提高vip车辆通过效率",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "VIP车辆通过可改变路口红绿灯状态",
+ "sceneName": "VIP变灯通行",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "已为您变灯,可优先通行",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.196512,
+ "lon": 116.736461,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_xingren_yujing_data.json b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_xingren_yujing_data.json
new file mode 100644
index 0000000000..d2c7eaa55a
--- /dev/null
+++ b/modules/mogo-module-v2x/src/main/res/raw/scenario_push_vr_xingren_yujing_data.json
@@ -0,0 +1,744 @@
+{
+ "sceneId": "200007",
+ "alarmContent": "展现行人预测、提前预警能力",
+ "expireTime": 20000,
+ "sceneCategory": 0,
+ "sceneDescription": "行人碰撞预警系统可提前告知通过车辆有行人通过,降低该类型交通事件发生概率",
+ "sceneName": "行人预警,行人路线预测",
+ "sceneLevel": 0,
+ "sceneChannel": "",
+ "sceneSn": "",
+ "tts": "检测到路口行人穿行注意避让",
+ "zoom": false,
+ "zoomScale": 15,
+ "lat": 40.196512,
+ "lon": 116.736461,
+ "userHead": "",
+ "msgImgUrl": "",
+ "polyline": [
+ [
+ 116.725091,
+ 40.195123
+ ],
+ [
+ 116.725335,
+ 40.195123
+ ],
+ [
+ 116.725499,
+ 40.195123
+ ],
+ [
+ 116.72602,
+ 40.195109
+ ],
+ [
+ 116.726235,
+ 40.195106
+ ],
+ [
+ 116.726424,
+ 40.195105
+ ],
+ [
+ 116.726658,
+ 40.195104
+ ],
+ [
+ 116.726733,
+ 40.195105
+ ],
+ [
+ 116.72688,
+ 40.195106
+ ],
+ [
+ 116.72704,
+ 40.195109
+ ],
+ [
+ 116.727217,
+ 40.195115
+ ],
+ [
+ 116.727388,
+ 40.195124
+ ],
+ [
+ 116.727562,
+ 40.195136
+ ],
+ [
+ 116.727735,
+ 40.195155
+ ],
+ [
+ 116.727887,
+ 40.195174
+ ],
+ [
+ 116.727979,
+ 40.195186
+ ],
+ [
+ 116.728056,
+ 40.195198
+ ],
+ [
+ 116.728165,
+ 40.195216
+ ],
+ [
+ 116.728237,
+ 40.195228
+ ],
+ [
+ 116.728345,
+ 40.195247
+ ],
+ [
+ 116.728411,
+ 40.19526
+ ],
+ [
+ 116.728533,
+ 40.195283
+ ],
+ [
+ 116.728589,
+ 40.195295
+ ],
+ [
+ 116.728694,
+ 40.195318
+ ],
+ [
+ 116.728761,
+ 40.195334
+ ],
+ [
+ 116.728868,
+ 40.19536
+ ],
+ [
+ 116.728918,
+ 40.195372
+ ],
+ [
+ 116.729088,
+ 40.195416
+ ],
+ [
+ 116.729262,
+ 40.195462
+ ],
+ [
+ 116.729424,
+ 40.195512
+ ],
+ [
+ 116.729547,
+ 40.195553
+ ],
+ [
+ 116.729584,
+ 40.195566
+ ],
+ [
+ 116.729692,
+ 40.195606
+ ],
+ [
+ 116.729739,
+ 40.195624
+ ],
+ [
+ 116.729844,
+ 40.195661
+ ],
+ [
+ 116.730011,
+ 40.195726
+ ],
+ [
+ 116.73014,
+ 40.195778
+ ],
+ [
+ 116.730309,
+ 40.195849
+ ],
+ [
+ 116.730467,
+ 40.195911
+ ],
+ [
+ 116.730608,
+ 40.195962
+ ],
+ [
+ 116.730673,
+ 40.195984
+ ],
+ [
+ 116.730766,
+ 40.196015
+ ],
+ [
+ 116.730831,
+ 40.196036
+ ],
+ [
+ 116.730935,
+ 40.196069
+ ],
+ [
+ 116.730993,
+ 40.196087
+ ],
+ [
+ 116.731086,
+ 40.196113
+ ],
+ [
+ 116.731164,
+ 40.196135
+ ],
+ [
+ 116.731285,
+ 40.196165
+ ],
+ [
+ 116.731315,
+ 40.196173
+ ],
+ [
+ 116.731434,
+ 40.196202
+ ],
+ [
+ 116.731486,
+ 40.196214
+ ],
+ [
+ 116.731586,
+ 40.196238
+ ],
+ [
+ 116.731652,
+ 40.196253
+ ],
+ [
+ 116.731749,
+ 40.196273
+ ],
+ [
+ 116.731818,
+ 40.196287
+ ],
+ [
+ 116.731924,
+ 40.196305
+ ],
+ [
+ 116.731991,
+ 40.196317
+ ],
+ [
+ 116.732108,
+ 40.196336
+ ],
+ [
+ 116.732269,
+ 40.196361
+ ],
+ [
+ 116.732333,
+ 40.19637
+ ],
+ [
+ 116.732464,
+ 40.196385
+ ],
+ [
+ 116.732507,
+ 40.19639
+ ],
+ [
+ 116.732628,
+ 40.196404
+ ],
+ [
+ 116.732678,
+ 40.196409
+ ],
+ [
+ 116.732784,
+ 40.196418
+ ],
+ [
+ 116.732851,
+ 40.196424
+ ],
+ [
+ 116.732985,
+ 40.196433
+ ],
+ [
+ 116.73314,
+ 40.196439
+ ],
+ [
+ 116.733198,
+ 40.196441
+ ],
+ [
+ 116.733379,
+ 40.196445
+ ],
+ [
+ 116.733548,
+ 40.196445
+ ],
+ [
+ 116.733722,
+ 40.196445
+ ],
+ [
+ 116.733903,
+ 40.196445
+ ],
+ [
+ 116.734081,
+ 40.196447
+ ],
+ [
+ 116.734251,
+ 40.196446
+ ],
+ [
+ 116.734439,
+ 40.196445
+ ],
+ [
+ 116.734624,
+ 40.196444
+ ],
+ [
+ 116.734805,
+ 40.196442
+ ],
+ [
+ 116.734982,
+ 40.196442
+ ],
+ [
+ 116.735164,
+ 40.196441
+ ],
+ [
+ 116.735329,
+ 40.19644
+ ],
+ [
+ 116.735519,
+ 40.196438
+ ],
+ [
+ 116.735682,
+ 40.196437
+ ],
+ [
+ 116.735855,
+ 40.196437
+ ],
+ [
+ 116.736034,
+ 40.196436
+ ],
+ [
+ 116.73621,
+ 40.196435
+ ],
+ [
+ 116.736385,
+ 40.196433
+ ],
+ [
+ 116.736566,
+ 40.196433
+ ],
+ [
+ 116.736742,
+ 40.196431
+ ],
+ [
+ 116.736926,
+ 40.196431
+ ],
+ [
+ 116.737046,
+ 40.19643
+ ],
+ [
+ 116.737173,
+ 40.19643
+ ],
+ [
+ 116.737298,
+ 40.196429
+ ],
+ [
+ 116.737449,
+ 40.196427
+ ],
+ [
+ 116.737582,
+ 40.196427
+ ],
+ [
+ 116.737662,
+ 40.196425
+ ],
+ [
+ 116.737748,
+ 40.196425
+ ],
+ [
+ 116.73778,
+ 40.196424
+ ]
+ ],
+ "recommendPolyline": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ],
+ "moveTrack": [
+ [
+ 116.731239,
+ 40.196264
+ ],
+ [
+ 116.731082,
+ 40.19622
+ ],
+ [
+ 116.730919,
+ 40.196173
+ ],
+ [
+ 116.730762,
+ 40.196125
+ ],
+ [
+ 116.730596,
+ 40.196069
+ ],
+ [
+ 116.730437,
+ 40.196013
+ ],
+ [
+ 116.730296,
+ 40.195959
+ ],
+ [
+ 116.730122,
+ 40.19589
+ ],
+ [
+ 116.729956,
+ 40.195823
+ ],
+ [
+ 116.729841,
+ 40.195777
+ ],
+ [
+ 116.729797,
+ 40.195759
+ ],
+ [
+ 116.729696,
+ 40.195721
+ ],
+ [
+ 116.729624,
+ 40.195695
+ ],
+ [
+ 116.729498,
+ 40.195649
+ ],
+ [
+ 116.729464,
+ 40.195637
+ ],
+ [
+ 116.729366,
+ 40.195604
+ ],
+ [
+ 116.729294,
+ 40.195583
+ ],
+ [
+ 116.729122,
+ 40.195533
+ ],
+ [
+ 116.728954,
+ 40.195489
+ ],
+ [
+ 116.728781,
+ 40.195448
+ ],
+ [
+ 116.728616,
+ 40.195412
+ ],
+ [
+ 116.728442,
+ 40.195376
+ ],
+ [
+ 116.728269,
+ 40.195341
+ ],
+ [
+ 116.728087,
+ 40.195311
+ ],
+ [
+ 116.727909,
+ 40.195283
+ ],
+ [
+ 116.727746,
+ 40.195263
+ ],
+ [
+ 116.727561,
+ 40.195242
+ ],
+ [
+ 116.727386,
+ 40.195226
+ ],
+ [
+ 116.727213,
+ 40.195217
+ ],
+ [
+ 116.727036,
+ 40.19521
+ ],
+ [
+ 116.726865,
+ 40.195206
+ ],
+ [
+ 116.72669,
+ 40.195206
+ ],
+ [
+ 116.726512,
+ 40.195207
+ ],
+ [
+ 116.726333,
+ 40.195209
+ ],
+ [
+ 116.726144,
+ 40.195211
+ ],
+ [
+ 116.725959,
+ 40.195214
+ ],
+ [
+ 116.725771,
+ 40.195217
+ ],
+ [
+ 116.725588,
+ 40.195221
+ ],
+ [
+ 116.725411,
+ 40.195225
+ ],
+ [
+ 116.725201,
+ 40.195228
+ ],
+ [
+ 116.72509,
+ 40.195228
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml b/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml
index 368e5e2bc1..8f287310b4 100644
--- a/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml
+++ b/modules/mogo-module-v2x/src/main/res/values-xhdpi/dimens.xml
@@ -4,10 +4,11 @@
32px
32px
-
+ 1060px
390px
410px
+ 670px
147px
diff --git a/modules/mogo-module-v2x/src/main/res/values/dimens.xml b/modules/mogo-module-v2x/src/main/res/values/dimens.xml
index a4124c9e9f..b5010d51ee 100644
--- a/modules/mogo-module-v2x/src/main/res/values/dimens.xml
+++ b/modules/mogo-module-v2x/src/main/res/values/dimens.xml
@@ -4,12 +4,13 @@
18px
20px
-
+ 642px
190px
210px
- 82px
+ 670px
+ 82px
34px
@@ -96,10 +97,10 @@
34px
- 574px
- 480px
- 384px
150px
46px
26px
+ 574px
+ 480px
+ 384px
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 fe0dc51171..4a6f565066 100644
--- a/modules/mogo-module-v2x/src/main/res/values/strings.xml
+++ b/modules/mogo-module-v2x/src/main/res/values/strings.xml
@@ -9,6 +9,10 @@
周边5公里,共 %d 条
去分享
刷新
+ 小智已为您查询到前方最近车辆直播视频,请查看
+ 诶呀呀,没有查到前方车辆直播视屏,过一会再试试吧
+ 已为您打开路口直播实况
+ 诶呀呀,周围没有可用路口实况直播
停车场推荐
26px
diff --git a/modules/mogo-modules-mvision/.gitignore b/modules/mogo-modules-mvision/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/modules/mogo-modules-mvision/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build.gradle b/modules/mogo-modules-mvision/build.gradle
new file mode 100644
index 0000000000..ebff9c6729
--- /dev/null
+++ b/modules/mogo-modules-mvision/build.gradle
@@ -0,0 +1,60 @@
+apply plugin: 'com.android.library'
+apply plugin: '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")
+
+ javaCompileOptions {
+ annotationProcessorOptions {
+ arguments = [AROUTER_MODULE_NAME: project.getName()]
+ }
+ }
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ targetCompatibility 1.8
+ sourceCompatibility 1.8
+ }
+
+}
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ implementation rootProject.ext.dependencies.androidxappcompat
+ implementation rootProject.ext.dependencies.androidxconstraintlayout
+ implementation rootProject.ext.dependencies.arouter
+ annotationProcessor rootProject.ext.dependencies.aroutercompiler
+ if (Boolean.valueOf(RELEASE)) {
+ api rootProject.ext.dependencies.mogomap
+ api rootProject.ext.dependencies.mogomapapi
+ api rootProject.ext.dependencies.mogoutils
+ api rootProject.ext.dependencies.mogocommons
+ api rootProject.ext.dependencies.mogoserviceapi
+ implementation rootProject.ext.dependencies.modulecommon
+ } else {
+ api project(":libraries:mogo-map")
+ api project(":libraries:mogo-map-api")
+ api project(":foudations:mogo-utils")
+ api project(":foudations:mogo-commons")
+ api project(':services:mogo-service-api')
+ implementation project(':modules:mogo-module-common')
+ }
+}
+
+apply from: new File(rootProject.rootDir, "gradle/upload.gradle").toString()
diff --git a/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Group$$machinevision.java b/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Group$$machinevision.java
deleted file mode 100644
index 9d1b5e37e1..0000000000
--- a/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Group$$machinevision.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.alibaba.android.arouter.routes;
-
-import com.alibaba.android.arouter.facade.enums.RouteType;
-import com.alibaba.android.arouter.facade.model.RouteMeta;
-import com.alibaba.android.arouter.facade.template.IRouteGroup;
-import com.mogo.module.machine.vision.MogoMachineVisionProvider;
-import java.lang.Override;
-import java.lang.String;
-import java.util.Map;
-
-/**
- * DO NOT EDIT THIS FILE!!! IT WAS GENERATED BY AROUTER. */
-public class ARouter$$Group$$machinevision implements IRouteGroup {
- @Override
- public void loadInto(Map atlas) {
- atlas.put("/machinevision/api", RouteMeta.build(RouteType.PROVIDER, MogoMachineVisionProvider.class, "/machinevision/api", "machinevision", null, -1, -2147483648));
- }
-}
diff --git a/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Providers$$mogomodulesmvision.java b/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Providers$$mogomodulesmvision.java
deleted file mode 100644
index 3742ca96d7..0000000000
--- a/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Providers$$mogomodulesmvision.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.alibaba.android.arouter.routes;
-
-import com.alibaba.android.arouter.facade.enums.RouteType;
-import com.alibaba.android.arouter.facade.model.RouteMeta;
-import com.alibaba.android.arouter.facade.template.IProviderGroup;
-import com.mogo.module.machine.vision.MogoMachineVisionProvider;
-import java.lang.Override;
-import java.lang.String;
-import java.util.Map;
-
-/**
- * DO NOT EDIT THIS FILE!!! IT WAS GENERATED BY AROUTER. */
-public class ARouter$$Providers$$mogomodulesmvision implements IProviderGroup {
- @Override
- public void loadInto(Map providers) {
- providers.put("com.mogo.module.machine.vision.IMogoMachineVisionProvider", RouteMeta.build(RouteType.PROVIDER, MogoMachineVisionProvider.class, "/machinevision/api", "machinevision", null, -1, -2147483648));
- }
-}
diff --git a/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Root$$mogomodulesmvision.java b/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Root$$mogomodulesmvision.java
deleted file mode 100644
index f09927ca2e..0000000000
--- a/modules/mogo-modules-mvision/build/generated/ap_generated_sources/debug/out/com/alibaba/android/arouter/routes/ARouter$$Root$$mogomodulesmvision.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.alibaba.android.arouter.routes;
-
-import com.alibaba.android.arouter.facade.template.IRouteGroup;
-import com.alibaba.android.arouter.facade.template.IRouteRoot;
-import java.lang.Class;
-import java.lang.Override;
-import java.lang.String;
-import java.util.Map;
-
-/**
- * DO NOT EDIT THIS FILE!!! IT WAS GENERATED BY AROUTER. */
-public class ARouter$$Root$$mogomodulesmvision implements IRouteRoot {
- @Override
- public void loadInto(Map> routes) {
- routes.put("machinevision", ARouter$$Group$$machinevision.class);
- }
-}
diff --git a/modules/mogo-modules-mvision/build/generated/source/buildConfig/debug/com/mogo/module/machine/vision/BuildConfig.java b/modules/mogo-modules-mvision/build/generated/source/buildConfig/debug/com/mogo/module/machine/vision/BuildConfig.java
deleted file mode 100644
index 3663e194df..0000000000
--- a/modules/mogo-modules-mvision/build/generated/source/buildConfig/debug/com/mogo/module/machine/vision/BuildConfig.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Automatically generated file. DO NOT MODIFY
- */
-package com.mogo.module.machine.vision;
-
-public final class BuildConfig {
- public static final boolean DEBUG = Boolean.parseBoolean("true");
- public static final String LIBRARY_PACKAGE_NAME = "com.mogo.module.machine.vision";
- /**
- * @deprecated APPLICATION_ID is misleading in libraries. For the library package name use LIBRARY_PACKAGE_NAME
- */
- @Deprecated
- public static final String APPLICATION_ID = "com.mogo.module.machine.vision";
- public static final String BUILD_TYPE = "debug";
- public static final String FLAVOR = "";
- public static final int VERSION_CODE = 1;
- public static final String VERSION_NAME = "1.0.0";
-}
diff --git a/modules/mogo-modules-mvision/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml b/modules/mogo-modules-mvision/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml
deleted file mode 100644
index 517656d048..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json b/modules/mogo-modules-mvision/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json
deleted file mode 100644
index 35b27abba0..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"outputType":{"type":"AAPT_FRIENDLY_MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0.0","enabled":true,"outputFile":"mogo-modules-mvision-debug.aar","fullName":"debug","baseName":"debug"},"path":"AndroidManifest.xml","properties":{"packageId":"com.mogo.module.machine.vision","split":""}}]
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/annotation_processor_list/debug/annotationProcessors.json b/modules/mogo-modules-mvision/build/intermediates/annotation_processor_list/debug/annotationProcessors.json
deleted file mode 100644
index 0e71b72210..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/annotation_processor_list/debug/annotationProcessors.json
+++ /dev/null
@@ -1 +0,0 @@
-{"jetified-arouter-compiler-1.2.2.jar (com.alibaba:arouter-compiler:1.2.2)":false,"auto-service-1.0-rc2.jar (com.google.auto.service:auto-service:1.0-rc2)":false}
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/compile_library_classes/debug/classes.jar b/modules/mogo-modules-mvision/build/intermediates/compile_library_classes/debug/classes.jar
deleted file mode 100644
index cd05062d8e..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/compile_library_classes/debug/classes.jar and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar b/modules/mogo-modules-mvision/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar
deleted file mode 100644
index c8ec4d7eda..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/R.jar and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/debug-mergeNativeLibs/merge-state b/modules/mogo-modules-mvision/build/intermediates/incremental/debug-mergeNativeLibs/merge-state
deleted file mode 100644
index 95e9638658..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/incremental/debug-mergeNativeLibs/merge-state and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/modules/mogo-modules-mvision/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
deleted file mode 100644
index a115e02b0a..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/mergeDebugShaders/merger.xml b/modules/mogo-modules-mvision/build/intermediates/incremental/mergeDebugShaders/merger.xml
deleted file mode 100644
index 817b2a3546..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/incremental/mergeDebugShaders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugAssets/merger.xml b/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugAssets/merger.xml
deleted file mode 100644
index 7e433175bf..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugAssets/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
deleted file mode 100644
index 4e17df420c..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Mon Dec 07 12:00:02 CST 2020
-/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/res/layout/module_mvision_layout_view.xml=/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/build/intermediates/packaged_res/debug/layout/module_mvision_layout_view.xml
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/merger.xml b/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/merger.xml
deleted file mode 100644
index ee3f600277..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-460px 460px 204px 368px 0px 0px 1920px 1080px
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Group$$machinevision.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Group$$machinevision.class
deleted file mode 100644
index 920b4106aa..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Group$$machinevision.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Providers$$mogomodulesmvision.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Providers$$mogomodulesmvision.class
deleted file mode 100644
index 0fb3ab5ada..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Providers$$mogomodulesmvision.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Root$$mogomodulesmvision.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Root$$mogomodulesmvision.class
deleted file mode 100644
index b535fcf2ca..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/alibaba/android/arouter/routes/ARouter$$Root$$mogomodulesmvision.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/BuildConfig.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/BuildConfig.class
deleted file mode 100644
index 783135363d..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/BuildConfig.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/IMogoMachineVisionProvider.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/IMogoMachineVisionProvider.class
deleted file mode 100644
index ad72c916db..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/IMogoMachineVisionProvider.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapService$MachineVisionMapServiceBinder.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapService$MachineVisionMapServiceBinder.class
deleted file mode 100644
index a52218d93f..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapService$MachineVisionMapServiceBinder.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapService.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapService.class
deleted file mode 100644
index b0bc5b8ab7..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapService.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapView.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapView.class
deleted file mode 100644
index 6aa96efcf9..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapView.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapViewHandler.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapViewHandler.class
deleted file mode 100644
index 7efbe12381..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MachineVisionMapViewHandler.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MogoMachineVisionProvider.class b/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MogoMachineVisionProvider.class
deleted file mode 100644
index 95b4910a0a..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/javac/debug/classes/com/mogo/module/machine/vision/MogoMachineVisionProvider.class and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/library_java_res/debug/res.jar b/modules/mogo-modules-mvision/build/intermediates/library_java_res/debug/res.jar
deleted file mode 100644
index 15cb0ecb3e..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/library_java_res/debug/res.jar and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/library_manifest/debug/AndroidManifest.xml b/modules/mogo-modules-mvision/build/intermediates/library_manifest/debug/AndroidManifest.xml
deleted file mode 100644
index 517656d048..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/library_manifest/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/local_only_symbol_list/debug/parseDebugLibraryResources/R-def.txt b/modules/mogo-modules-mvision/build/intermediates/local_only_symbol_list/debug/parseDebugLibraryResources/R-def.txt
deleted file mode 100644
index b6ed7ad5dd..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/local_only_symbol_list/debug/parseDebugLibraryResources/R-def.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-R_DEF: Internal format may change without notice
-local
-dimen module_mvision_big_view_height
-dimen module_mvision_big_view_width
-dimen module_mvision_big_view_x
-dimen module_mvision_big_view_y
-dimen module_mvision_view_height
-dimen module_mvision_view_width
-dimen module_mvision_view_x
-dimen module_mvision_view_y
-id module_mvision_map_click
-id module_mvision_map_root
-id module_mvision_map_view
-layout module_mvision_layout_view
diff --git a/modules/mogo-modules-mvision/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/modules/mogo-modules-mvision/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
deleted file mode 100644
index af5a879dd3..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-1
-2
-6
-7 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
-9 android:targetSdkVersion="22" />
-9-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
-10
-11
-11-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:4:5-9:19
-12 /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:5:9-8:48
-13 android:name="com.mogo.module.machine.vision.MachineVisionMapService"
-13-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:6:13-52
-14 android:exported="false"
-14-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:7:13-37
-15 android:process=":machinevision" />
-15-->/Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:8:13-45
-16
-17
-18
diff --git a/modules/mogo-modules-mvision/build/intermediates/merged_manifests/debug/output.json b/modules/mogo-modules-mvision/build/intermediates/merged_manifests/debug/output.json
deleted file mode 100644
index 03cc8ad4d6..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/merged_manifests/debug/output.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"outputType":{"type":"MERGED_MANIFESTS"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0.0","enabled":true,"outputFile":"mogo-modules-mvision-debug.aar","fullName":"debug","baseName":"debug"},"path":"../../library_manifest/debug/AndroidManifest.xml","properties":{"packageId":"com.mogo.module.machine.vision","split":""}}]
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/packaged_res/debug/values-xhdpi-v4/values-xhdpi-v4.xml b/modules/mogo-modules-mvision/build/intermediates/packaged_res/debug/values-xhdpi-v4/values-xhdpi-v4.xml
deleted file mode 100644
index 5f5b6ae47d..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/packaged_res/debug/values-xhdpi-v4/values-xhdpi-v4.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- 1080px
- 1920px
- 0px
- 0px
- 460px
- 460px
- 204px
- 368px
-
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt b/modules/mogo-modules-mvision/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt
deleted file mode 100644
index c4d9db5d33..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/res/symbol-table-with-package/debug/package-aware-r.txt
+++ /dev/null
@@ -1,3584 +0,0 @@
-com.mogo.module.machine.vision
-anim abc_fade_in
-anim abc_fade_out
-anim abc_grow_fade_in_from_bottom
-anim abc_popup_enter
-anim abc_popup_exit
-anim abc_shrink_fade_out_from_bottom
-anim abc_slide_in_bottom
-anim abc_slide_in_top
-anim abc_slide_out_bottom
-anim abc_slide_out_top
-anim abc_tooltip_enter
-anim abc_tooltip_exit
-anim bottom_in
-anim bottom_out
-anim btn_checkbox_to_checked_box_inner_merged_animation
-anim btn_checkbox_to_checked_box_outer_merged_animation
-anim btn_checkbox_to_checked_icon_null_animation
-anim btn_checkbox_to_unchecked_box_inner_merged_animation
-anim btn_checkbox_to_unchecked_check_path_merged_animation
-anim btn_checkbox_to_unchecked_icon_null_animation
-anim btn_radio_to_off_mtrl_dot_group_animation
-anim btn_radio_to_off_mtrl_ring_outer_animation
-anim btn_radio_to_off_mtrl_ring_outer_path_animation
-anim btn_radio_to_on_mtrl_dot_group_animation
-anim btn_radio_to_on_mtrl_ring_outer_animation
-anim btn_radio_to_on_mtrl_ring_outer_path_animation
-anim cycle_7_1
-anim left_in
-anim left_out
-anim push_left_in
-anim right_in
-anim right_out
-anim shake
-anim slide_top_to_bottom
-anim top_in
-anim top_out
-array ages
-array gender
-array list_preference
-array map_style
-array map_style_value
-array mapdist
-array mapscale
-array values_list_preference
-attr actionBarDivider
-attr actionBarItemBackground
-attr actionBarPopupTheme
-attr actionBarSize
-attr actionBarSplitStyle
-attr actionBarStyle
-attr actionBarTabBarStyle
-attr actionBarTabStyle
-attr actionBarTabTextStyle
-attr actionBarTheme
-attr actionBarWidgetTheme
-attr actionButtonStyle
-attr actionDropDownStyle
-attr actionLayout
-attr actionMenuTextAppearance
-attr actionMenuTextColor
-attr actionModeBackground
-attr actionModeCloseButtonStyle
-attr actionModeCloseDrawable
-attr actionModeCopyDrawable
-attr actionModeCutDrawable
-attr actionModeFindDrawable
-attr actionModePasteDrawable
-attr actionModePopupWindowStyle
-attr actionModeSelectAllDrawable
-attr actionModeShareDrawable
-attr actionModeSplitBackground
-attr actionModeStyle
-attr actionModeWebSearchDrawable
-attr actionOverflowButtonStyle
-attr actionOverflowMenuStyle
-attr actionProviderClass
-attr actionViewClass
-attr activityChooserViewStyle
-attr actualImageScaleType
-attr actualImageUri
-attr alertDialogButtonGroupStyle
-attr alertDialogCenterButtons
-attr alertDialogStyle
-attr alertDialogTheme
-attr allowStacking
-attr alpha
-attr alphabeticModifiers
-attr arrowHeadLength
-attr arrowShaftLength
-attr autoCompleteTextViewStyle
-attr autoSizeMaxTextSize
-attr autoSizeMinTextSize
-attr autoSizePresetSizes
-attr autoSizeStepGranularity
-attr autoSizeTextType
-attr background
-attr backgroundImage
-attr backgroundSplit
-attr backgroundStacked
-attr backgroundTint
-attr backgroundTintMode
-attr barLength
-attr barrierAllowsGoneWidgets
-attr barrierDirection
-attr borderlessButtonStyle
-attr buttonBarButtonStyle
-attr buttonBarNegativeButtonStyle
-attr buttonBarNeutralButtonStyle
-attr buttonBarPositiveButtonStyle
-attr buttonBarStyle
-attr buttonCompat
-attr buttonGravity
-attr buttonIconDimen
-attr buttonPanelSideLayout
-attr buttonStyle
-attr buttonStyleSmall
-attr buttonTint
-attr buttonTintMode
-attr cardBackgroundColor
-attr cardCornerRadius
-attr cardElevation
-attr cardMaxElevation
-attr cardPreventCornerOverlap
-attr cardUseCompatPadding
-attr cardViewStyle
-attr chainUseRtl
-attr checkboxStyle
-attr checkedTextViewStyle
-attr civ_border_color
-attr civ_border_overlay
-attr civ_border_width
-attr civ_fill_color
-attr clickable
-attr closeIcon
-attr closeItemLayout
-attr collapseContentDescription
-attr collapseIcon
-attr color
-attr colorAccent
-attr colorBackgroundFloating
-attr colorButtonNormal
-attr colorControlActivated
-attr colorControlHighlight
-attr colorControlNormal
-attr colorError
-attr colorPrimary
-attr colorPrimaryDark
-attr colorSwitchThumbNormal
-attr commitIcon
-attr constraintSet
-attr constraint_referenced_ids
-attr content
-attr contentDescription
-attr contentInsetEnd
-attr contentInsetEndWithActions
-attr contentInsetLeft
-attr contentInsetRight
-attr contentInsetStart
-attr contentInsetStartWithNavigation
-attr contentPadding
-attr contentPaddingBottom
-attr contentPaddingLeft
-attr contentPaddingRight
-attr contentPaddingTop
-attr controlBackground
-attr coordinatorLayoutStyle
-attr cpd_inAnimDuration
-attr cpd_inStepColors
-attr cpd_inStepPercent
-attr cpd_initialAngle
-attr cpd_keepDuration
-attr cpd_maxSweepAngle
-attr cpd_minSweepAngle
-attr cpd_outAnimDuration
-attr cpd_padding
-attr cpd_reverse
-attr cpd_rotateDuration
-attr cpd_strokeColor
-attr cpd_strokeColors
-attr cpd_strokeSecondaryColor
-attr cpd_strokeSize
-attr cpd_transformDuration
-attr cpd_transformInterpolator
-attr customNavigationLayout
-attr defaultQueryHint
-attr dialogCornerRadius
-attr dialogPreferredPadding
-attr dialogTheme
-attr displayOptions
-attr divider
-attr dividerHorizontal
-attr dividerPadding
-attr dividerVertical
-attr drawableBottomCompat
-attr drawableEndCompat
-attr drawableLeftCompat
-attr drawableRightCompat
-attr drawableSize
-attr drawableStartCompat
-attr drawableTint
-attr drawableTintMode
-attr drawableTopCompat
-attr drawerArrowStyle
-attr dropDownListViewStyle
-attr dropdownListPreferredItemHeight
-attr dsv_orientation
-attr editTextBackground
-attr editTextColor
-attr editTextStyle
-attr elenmentCount
-attr elenmentEmpty
-attr elenmentFill
-attr elenmentHarf
-attr elenmentHeight
-attr elenmentPadding
-attr elenmentStep
-attr elenmentWidth
-attr elevation
-attr emptyVisibility
-attr expandActivityOverflowButtonDrawable
-attr fadeDuration
-attr failureImage
-attr failureImageScaleType
-attr fastScrollEnabled
-attr fastScrollHorizontalThumbDrawable
-attr fastScrollHorizontalTrackDrawable
-attr fastScrollVerticalThumbDrawable
-attr fastScrollVerticalTrackDrawable
-attr firstBaselineToTopHeight
-attr font
-attr fontFamily
-attr fontProviderAuthority
-attr fontProviderCerts
-attr fontProviderFetchStrategy
-attr fontProviderFetchTimeout
-attr fontProviderPackage
-attr fontProviderQuery
-attr fontStyle
-attr fontVariationSettings
-attr fontWeight
-attr gapBetweenBars
-attr goIcon
-attr height
-attr hideOnContentScroll
-attr homeAsUpIndicator
-attr homeLayout
-attr icon
-attr iconTint
-attr iconTintMode
-attr iconifiedByDefault
-attr imageButtonStyle
-attr indeterminateProgressStyle
-attr initialActivityCount
-attr isLightTheme
-attr itemPadding
-attr keylines
-attr lastBaselineToBottomHeight
-attr layout
-attr layoutManager
-attr layout_anchor
-attr layout_anchorGravity
-attr layout_behavior
-attr layout_constrainedHeight
-attr layout_constrainedWidth
-attr layout_constraintBaseline_creator
-attr layout_constraintBaseline_toBaselineOf
-attr layout_constraintBottom_creator
-attr layout_constraintBottom_toBottomOf
-attr layout_constraintBottom_toTopOf
-attr layout_constraintCircle
-attr layout_constraintCircleAngle
-attr layout_constraintCircleRadius
-attr layout_constraintDimensionRatio
-attr layout_constraintEnd_toEndOf
-attr layout_constraintEnd_toStartOf
-attr layout_constraintGuide_begin
-attr layout_constraintGuide_end
-attr layout_constraintGuide_percent
-attr layout_constraintHeight_default
-attr layout_constraintHeight_max
-attr layout_constraintHeight_min
-attr layout_constraintHeight_percent
-attr layout_constraintHorizontal_bias
-attr layout_constraintHorizontal_chainStyle
-attr layout_constraintHorizontal_weight
-attr layout_constraintLeft_creator
-attr layout_constraintLeft_toLeftOf
-attr layout_constraintLeft_toRightOf
-attr layout_constraintRight_creator
-attr layout_constraintRight_toLeftOf
-attr layout_constraintRight_toRightOf
-attr layout_constraintStart_toEndOf
-attr layout_constraintStart_toStartOf
-attr layout_constraintTop_creator
-attr layout_constraintTop_toBottomOf
-attr layout_constraintTop_toTopOf
-attr layout_constraintVertical_bias
-attr layout_constraintVertical_chainStyle
-attr layout_constraintVertical_weight
-attr layout_constraintWidth_default
-attr layout_constraintWidth_max
-attr layout_constraintWidth_min
-attr layout_constraintWidth_percent
-attr layout_dodgeInsetEdges
-attr layout_editor_absoluteX
-attr layout_editor_absoluteY
-attr layout_goneMarginBottom
-attr layout_goneMarginEnd
-attr layout_goneMarginLeft
-attr layout_goneMarginRight
-attr layout_goneMarginStart
-attr layout_goneMarginTop
-attr layout_insetEdge
-attr layout_keyline
-attr layout_optimizationLevel
-attr lineHeight
-attr listChoiceBackgroundIndicator
-attr listChoiceIndicatorMultipleAnimated
-attr listChoiceIndicatorSingleAnimated
-attr listDividerAlertDialog
-attr listItemLayout
-attr listLayout
-attr listMenuViewStyle
-attr listPopupWindowStyle
-attr listPreferredItemHeight
-attr listPreferredItemHeightLarge
-attr listPreferredItemHeightSmall
-attr listPreferredItemPaddingEnd
-attr listPreferredItemPaddingLeft
-attr listPreferredItemPaddingRight
-attr listPreferredItemPaddingStart
-attr logo
-attr logoDescription
-attr maxButtonHeight
-attr measureWithLargestChild
-attr menu
-attr miv_blurRadius
-attr miv_borderColor
-attr miv_bottomLeftRadius
-attr miv_bottomRightRadius
-attr miv_failureHolder
-attr miv_isBlur
-attr miv_overlayImageId
-attr miv_placeHolder
-attr miv_radius
-attr miv_shape
-attr miv_shapeBorderWidth
-attr miv_topLeftRadius
-attr miv_topRightRadius
-attr multiChoiceItemLayout
-attr navigationContentDescription
-attr navigationIcon
-attr navigationMode
-attr numericModifiers
-attr overlapAnchor
-attr overlayImage
-attr paddingBottomNoButtons
-attr paddingEnd
-attr paddingStart
-attr paddingTopNoTitle
-attr panelBackground
-attr panelMenuListTheme
-attr panelMenuListWidth
-attr placeholderImage
-attr placeholderImageScaleType
-attr popupMenuStyle
-attr popupTheme
-attr popupWindowStyle
-attr preserveIconSpacing
-attr pressedStateOverlayImage
-attr progressBarAutoRotateInterval
-attr progressBarImage
-attr progressBarImageScaleType
-attr progressBarPadding
-attr progressBarStyle
-attr pv_progressMode
-attr queryBackground
-attr queryHint
-attr radioButtonStyle
-attr ratingBarStyle
-attr ratingBarStyleIndicator
-attr ratingBarStyleSmall
-attr realtimeBlurRadius
-attr realtimeDownsampleFactor
-attr realtimeOverlayColor
-attr recyclerViewStyle
-attr retryImage
-attr retryImageScaleType
-attr reverseLayout
-attr roundAsCircle
-attr roundBottomLeft
-attr roundBottomRight
-attr roundTopLeft
-attr roundTopRight
-attr roundWithOverlayColor
-attr roundedCornerRadius
-attr roundingBorderColor
-attr roundingBorderPadding
-attr roundingBorderWidth
-attr searchHintIcon
-attr searchIcon
-attr searchViewStyle
-attr seekBarStyle
-attr selectableItemBackground
-attr selectableItemBackgroundBorderless
-attr showAsAction
-attr showDividers
-attr showText
-attr showTitle
-attr singleChoiceItemLayout
-attr spanCount
-attr spinBars
-attr spinnerDropDownItemStyle
-attr spinnerStyle
-attr splitTrack
-attr srcCompat
-attr stackFromEnd
-attr state_above_anchor
-attr statusBarBackground
-attr stepSize
-attr subMenuArrow
-attr submitBackground
-attr subtitle
-attr subtitleTextAppearance
-attr subtitleTextColor
-attr subtitleTextStyle
-attr suggestionRowLayout
-attr switchMinWidth
-attr switchPadding
-attr switchStyle
-attr switchTextAppearance
-attr textAllCaps
-attr textAppearanceLargePopupMenu
-attr textAppearanceListItem
-attr textAppearanceListItemSecondary
-attr textAppearanceListItemSmall
-attr textAppearancePopupMenuHeader
-attr textAppearanceSearchResultSubtitle
-attr textAppearanceSearchResultTitle
-attr textAppearanceSmallPopupMenu
-attr textColorAlertDialogListItem
-attr textColorSearchUrl
-attr textLocale
-attr theme
-attr thickness
-attr thumbTextPadding
-attr thumbTint
-attr thumbTintMode
-attr tickMark
-attr tickMarkTint
-attr tickMarkTintMode
-attr tint
-attr tintMode
-attr title
-attr titleMargin
-attr titleMarginBottom
-attr titleMarginEnd
-attr titleMarginStart
-attr titleMarginTop
-attr titleMargins
-attr titleTextAppearance
-attr titleTextColor
-attr titleTextStyle
-attr toolbarNavigationButtonStyle
-attr toolbarStyle
-attr tooltipForegroundColor
-attr tooltipFrameBackground
-attr tooltipText
-attr track
-attr trackTint
-attr trackTintMode
-attr ttcIndex
-attr viewAspectRatio
-attr viewInflaterClass
-attr voiceIcon
-attr windowActionBar
-attr windowActionBarOverlay
-attr windowActionModeOverlay
-attr windowFixedHeightMajor
-attr windowFixedHeightMinor
-attr windowFixedWidthMajor
-attr windowFixedWidthMinor
-attr windowMinWidthMajor
-attr windowMinWidthMinor
-attr windowNoTitle
-attr xRadius
-attr yRadius
-bool abc_action_bar_embed_tabs
-bool abc_allow_stacked_button_bar
-bool abc_config_actionMenuItemAllCaps
-bool abc_config_showMenuShortcutsWhenKeyboardPresent
-color abc_background_cache_hint_selector_material_dark
-color abc_background_cache_hint_selector_material_light
-color abc_btn_colored_borderless_text_material
-color abc_btn_colored_text_material
-color abc_color_highlight_material
-color abc_hint_foreground_material_dark
-color abc_hint_foreground_material_light
-color abc_input_method_navigation_guard
-color abc_primary_text_disable_only_material_dark
-color abc_primary_text_disable_only_material_light
-color abc_primary_text_material_dark
-color abc_primary_text_material_light
-color abc_search_url_text
-color abc_search_url_text_normal
-color abc_search_url_text_pressed
-color abc_search_url_text_selected
-color abc_secondary_text_material_dark
-color abc_secondary_text_material_light
-color abc_tint_btn_checkable
-color abc_tint_default
-color abc_tint_edittext
-color abc_tint_seek_thumb
-color abc_tint_spinner
-color abc_tint_switch_track
-color accent_material_dark
-color accent_material_light
-color arrow_color
-color background_color
-color background_floating_material_dark
-color background_floating_material_light
-color background_material_dark
-color background_material_light
-color bgSearchList
-color bg_gray_common_page
-color black
-color black_overlay
-color blue
-color bright_foreground_disabled_material_dark
-color bright_foreground_disabled_material_light
-color bright_foreground_inverse_material_dark
-color bright_foreground_inverse_material_light
-color bright_foreground_material_dark
-color bright_foreground_material_light
-color button_material_dark
-color button_material_light
-color cardview_dark_background
-color cardview_light_background
-color cardview_shadow_end_color
-color cardview_shadow_start_color
-color defaulttextcolor
-color dim_foreground_disabled_material_dark
-color dim_foreground_disabled_material_light
-color dim_foreground_material_dark
-color dim_foreground_material_light
-color error_color_material
-color error_color_material_dark
-color error_color_material_light
-color focused
-color foreground_material_dark
-color foreground_material_light
-color highlighted_text_material_dark
-color highlighted_text_material_light
-color light_g
-color material_blue_grey_800
-color material_blue_grey_900
-color material_blue_grey_950
-color material_deep_teal_200
-color material_deep_teal_500
-color material_grey_100
-color material_grey_300
-color material_grey_50
-color material_grey_600
-color material_grey_800
-color material_grey_850
-color material_grey_900
-color module_commons_dlg_bkg
-color module_commons_wm_dialog_text_textColor
-color modules_commons_toast_text_color
-color notification_action_color_filter
-color notification_icon_bg_color
-color notification_material_background_media_default_color
-color pressed
-color primary_dark_material_dark
-color primary_dark_material_light
-color primary_material_dark
-color primary_material_light
-color primary_text_default_material_dark
-color primary_text_default_material_light
-color primary_text_disabled_material_dark
-color primary_text_disabled_material_light
-color retangle_color
-color ripple_material_dark
-color ripple_material_light
-color secondary_text_default_material_dark
-color secondary_text_default_material_light
-color secondary_text_disabled_material_dark
-color secondary_text_disabled_material_light
-color selected
-color selected_list
-color selector_white_gray
-color share_btn
-color switch_thumb_disabled_material_dark
-color switch_thumb_disabled_material_light
-color switch_thumb_material_dark
-color switch_thumb_material_light
-color switch_thumb_normal_material_dark
-color switch_thumb_normal_material_light
-color text_bg_color
-color text_btn_color
-color text_color
-color text_color_bg
-color text_list_color
-color tooltip_background_dark
-color tooltip_background_light
-color traf_list_s
-color transparent
-color unfocused
-color unselected
-color unselected_list
-color v2x_FFF_666
-color white
-color white_30
-color white_50
-color white_argb_0
-color widgettext
-dimen abc_action_bar_content_inset_material
-dimen abc_action_bar_content_inset_with_nav
-dimen abc_action_bar_default_height_material
-dimen abc_action_bar_default_padding_end_material
-dimen abc_action_bar_default_padding_start_material
-dimen abc_action_bar_elevation_material
-dimen abc_action_bar_icon_vertical_padding_material
-dimen abc_action_bar_overflow_padding_end_material
-dimen abc_action_bar_overflow_padding_start_material
-dimen abc_action_bar_progress_bar_size
-dimen abc_action_bar_stacked_max_height
-dimen abc_action_bar_stacked_tab_max_width
-dimen abc_action_bar_subtitle_bottom_margin_material
-dimen abc_action_bar_subtitle_top_margin_material
-dimen abc_action_button_min_height_material
-dimen abc_action_button_min_width_material
-dimen abc_action_button_min_width_overflow_material
-dimen abc_alert_dialog_button_bar_height
-dimen abc_alert_dialog_button_dimen
-dimen abc_button_inset_horizontal_material
-dimen abc_button_inset_vertical_material
-dimen abc_button_padding_horizontal_material
-dimen abc_button_padding_vertical_material
-dimen abc_cascading_menus_min_smallest_width
-dimen abc_config_prefDialogWidth
-dimen abc_control_corner_material
-dimen abc_control_inset_material
-dimen abc_control_padding_material
-dimen abc_dialog_corner_radius_material
-dimen abc_dialog_fixed_height_major
-dimen abc_dialog_fixed_height_minor
-dimen abc_dialog_fixed_width_major
-dimen abc_dialog_fixed_width_minor
-dimen abc_dialog_list_padding_bottom_no_buttons
-dimen abc_dialog_list_padding_top_no_title
-dimen abc_dialog_min_width_major
-dimen abc_dialog_min_width_minor
-dimen abc_dialog_padding_material
-dimen abc_dialog_padding_top_material
-dimen abc_dialog_title_divider_material
-dimen abc_disabled_alpha_material_dark
-dimen abc_disabled_alpha_material_light
-dimen abc_dropdownitem_icon_width
-dimen abc_dropdownitem_text_padding_left
-dimen abc_dropdownitem_text_padding_right
-dimen abc_edit_text_inset_bottom_material
-dimen abc_edit_text_inset_horizontal_material
-dimen abc_edit_text_inset_top_material
-dimen abc_floating_window_z
-dimen abc_list_item_height_large_material
-dimen abc_list_item_height_material
-dimen abc_list_item_height_small_material
-dimen abc_list_item_padding_horizontal_material
-dimen abc_panel_menu_list_width
-dimen abc_progress_bar_height_material
-dimen abc_search_view_preferred_height
-dimen abc_search_view_preferred_width
-dimen abc_seekbar_track_background_height_material
-dimen abc_seekbar_track_progress_height_material
-dimen abc_select_dialog_padding_start_material
-dimen abc_switch_padding
-dimen abc_text_size_body_1_material
-dimen abc_text_size_body_2_material
-dimen abc_text_size_button_material
-dimen abc_text_size_caption_material
-dimen abc_text_size_display_1_material
-dimen abc_text_size_display_2_material
-dimen abc_text_size_display_3_material
-dimen abc_text_size_display_4_material
-dimen abc_text_size_headline_material
-dimen abc_text_size_large_material
-dimen abc_text_size_medium_material
-dimen abc_text_size_menu_header_material
-dimen abc_text_size_menu_material
-dimen abc_text_size_small_material
-dimen abc_text_size_subhead_material
-dimen abc_text_size_subtitle_material_toolbar
-dimen abc_text_size_title_material
-dimen abc_text_size_title_material_toolbar
-dimen btn_size
-dimen candidate_font_height
-dimen candidate_vertical_padding
-dimen cardview_compat_inset_shadow
-dimen cardview_default_elevation
-dimen cardview_default_radius
-dimen compat_button_inset_horizontal_material
-dimen compat_button_inset_vertical_material
-dimen compat_button_padding_horizontal_material
-dimen compat_button_padding_vertical_material
-dimen compat_control_corner_material
-dimen compat_notification_large_icon_max_height
-dimen compat_notification_large_icon_max_width
-dimen def_height
-dimen disabled_alpha_material_dark
-dimen disabled_alpha_material_light
-dimen dp_0
-dimen dp_0_1
-dimen dp_0_5
-dimen dp_1
-dimen dp_10
-dimen dp_100
-dimen dp_1000
-dimen dp_101
-dimen dp_102
-dimen dp_103
-dimen dp_104
-dimen dp_104_5
-dimen dp_105
-dimen dp_106
-dimen dp_107
-dimen dp_108
-dimen dp_109
-dimen dp_11
-dimen dp_110
-dimen dp_111
-dimen dp_112
-dimen dp_113
-dimen dp_114
-dimen dp_115
-dimen dp_116
-dimen dp_117
-dimen dp_118
-dimen dp_119
-dimen dp_12
-dimen dp_120
-dimen dp_121
-dimen dp_122
-dimen dp_123
-dimen dp_124
-dimen dp_125
-dimen dp_126
-dimen dp_127
-dimen dp_128
-dimen dp_129
-dimen dp_13
-dimen dp_130
-dimen dp_1300
-dimen dp_131
-dimen dp_132
-dimen dp_133
-dimen dp_134
-dimen dp_134_5
-dimen dp_135
-dimen dp_136
-dimen dp_137
-dimen dp_138
-dimen dp_139
-dimen dp_14
-dimen dp_140
-dimen dp_141
-dimen dp_142
-dimen dp_143
-dimen dp_144
-dimen dp_145
-dimen dp_146
-dimen dp_147
-dimen dp_148
-dimen dp_149
-dimen dp_15
-dimen dp_150
-dimen dp_151
-dimen dp_152
-dimen dp_153
-dimen dp_154
-dimen dp_155
-dimen dp_156
-dimen dp_157
-dimen dp_158
-dimen dp_159
-dimen dp_16
-dimen dp_160
-dimen dp_161
-dimen dp_162
-dimen dp_163
-dimen dp_164
-dimen dp_165
-dimen dp_166
-dimen dp_167
-dimen dp_168
-dimen dp_169
-dimen dp_17
-dimen dp_170
-dimen dp_171
-dimen dp_172
-dimen dp_173
-dimen dp_174
-dimen dp_175
-dimen dp_176
-dimen dp_177
-dimen dp_178
-dimen dp_179
-dimen dp_18
-dimen dp_180
-dimen dp_181
-dimen dp_182
-dimen dp_183
-dimen dp_184
-dimen dp_185
-dimen dp_186
-dimen dp_187
-dimen dp_188
-dimen dp_189
-dimen dp_19
-dimen dp_190
-dimen dp_191
-dimen dp_191_25
-dimen dp_192
-dimen dp_1920
-dimen dp_193
-dimen dp_194
-dimen dp_195
-dimen dp_196
-dimen dp_197
-dimen dp_198
-dimen dp_199
-dimen dp_1_5
-dimen dp_2
-dimen dp_20
-dimen dp_200
-dimen dp_201
-dimen dp_202
-dimen dp_203
-dimen dp_204
-dimen dp_205
-dimen dp_206
-dimen dp_207
-dimen dp_208
-dimen dp_209
-dimen dp_21
-dimen dp_210
-dimen dp_211
-dimen dp_212
-dimen dp_213
-dimen dp_214
-dimen dp_215
-dimen dp_216
-dimen dp_217
-dimen dp_218
-dimen dp_219
-dimen dp_22
-dimen dp_220
-dimen dp_221
-dimen dp_222
-dimen dp_223
-dimen dp_224
-dimen dp_225
-dimen dp_226
-dimen dp_227
-dimen dp_228
-dimen dp_229
-dimen dp_23
-dimen dp_230
-dimen dp_231
-dimen dp_232
-dimen dp_233
-dimen dp_234
-dimen dp_235
-dimen dp_236
-dimen dp_237
-dimen dp_238
-dimen dp_239
-dimen dp_24
-dimen dp_240
-dimen dp_241
-dimen dp_242
-dimen dp_243
-dimen dp_244
-dimen dp_245
-dimen dp_246
-dimen dp_247
-dimen dp_248
-dimen dp_249
-dimen dp_25
-dimen dp_250
-dimen dp_251
-dimen dp_252
-dimen dp_253
-dimen dp_254
-dimen dp_255
-dimen dp_256
-dimen dp_257
-dimen dp_258
-dimen dp_259
-dimen dp_26
-dimen dp_260
-dimen dp_261
-dimen dp_262
-dimen dp_263
-dimen dp_264
-dimen dp_265
-dimen dp_266
-dimen dp_267
-dimen dp_268
-dimen dp_269
-dimen dp_27
-dimen dp_270
-dimen dp_271
-dimen dp_272
-dimen dp_273
-dimen dp_274
-dimen dp_275
-dimen dp_276
-dimen dp_277
-dimen dp_278
-dimen dp_279
-dimen dp_28
-dimen dp_280
-dimen dp_281
-dimen dp_282
-dimen dp_283
-dimen dp_284
-dimen dp_285
-dimen dp_286
-dimen dp_287
-dimen dp_288
-dimen dp_289
-dimen dp_29
-dimen dp_290
-dimen dp_291
-dimen dp_292
-dimen dp_293
-dimen dp_294
-dimen dp_295
-dimen dp_296
-dimen dp_297
-dimen dp_298
-dimen dp_299
-dimen dp_2_5
-dimen dp_3
-dimen dp_30
-dimen dp_300
-dimen dp_301
-dimen dp_302
-dimen dp_303
-dimen dp_304
-dimen dp_305
-dimen dp_306
-dimen dp_307
-dimen dp_308
-dimen dp_309
-dimen dp_31
-dimen dp_310
-dimen dp_311
-dimen dp_312
-dimen dp_313
-dimen dp_314
-dimen dp_315
-dimen dp_316
-dimen dp_317
-dimen dp_318
-dimen dp_319
-dimen dp_32
-dimen dp_320
-dimen dp_321
-dimen dp_322
-dimen dp_323
-dimen dp_324
-dimen dp_325
-dimen dp_326
-dimen dp_327
-dimen dp_328
-dimen dp_329
-dimen dp_33
-dimen dp_330
-dimen dp_331
-dimen dp_332
-dimen dp_333
-dimen dp_334
-dimen dp_335
-dimen dp_336
-dimen dp_337
-dimen dp_338
-dimen dp_339
-dimen dp_34
-dimen dp_340
-dimen dp_341
-dimen dp_342
-dimen dp_343
-dimen dp_344
-dimen dp_345
-dimen dp_346
-dimen dp_347
-dimen dp_348
-dimen dp_349
-dimen dp_35
-dimen dp_350
-dimen dp_351
-dimen dp_352
-dimen dp_353
-dimen dp_354
-dimen dp_355
-dimen dp_356
-dimen dp_357
-dimen dp_358
-dimen dp_359
-dimen dp_36
-dimen dp_366
-dimen dp_367
-dimen dp_368
-dimen dp_369
-dimen dp_37
-dimen dp_370
-dimen dp_371
-dimen dp_372
-dimen dp_373
-dimen dp_374
-dimen dp_375
-dimen dp_376
-dimen dp_377
-dimen dp_378
-dimen dp_379
-dimen dp_38
-dimen dp_380
-dimen dp_381
-dimen dp_382
-dimen dp_383
-dimen dp_384
-dimen dp_385
-dimen dp_386
-dimen dp_387
-dimen dp_388
-dimen dp_389
-dimen dp_39
-dimen dp_390
-dimen dp_391
-dimen dp_392
-dimen dp_393
-dimen dp_394
-dimen dp_395
-dimen dp_396
-dimen dp_397
-dimen dp_398
-dimen dp_399
-dimen dp_3_5
-dimen dp_4
-dimen dp_40
-dimen dp_400
-dimen dp_401
-dimen dp_402
-dimen dp_403
-dimen dp_404
-dimen dp_405
-dimen dp_406
-dimen dp_407
-dimen dp_408
-dimen dp_409
-dimen dp_41
-dimen dp_410
-dimen dp_411
-dimen dp_412
-dimen dp_413
-dimen dp_414
-dimen dp_415
-dimen dp_416
-dimen dp_417
-dimen dp_418
-dimen dp_419
-dimen dp_42
-dimen dp_420
-dimen dp_421
-dimen dp_422
-dimen dp_423
-dimen dp_424
-dimen dp_425
-dimen dp_426
-dimen dp_427
-dimen dp_428
-dimen dp_429
-dimen dp_43
-dimen dp_430
-dimen dp_431
-dimen dp_432
-dimen dp_433
-dimen dp_434
-dimen dp_435
-dimen dp_436
-dimen dp_437
-dimen dp_438
-dimen dp_439
-dimen dp_44
-dimen dp_440
-dimen dp_441
-dimen dp_442
-dimen dp_443
-dimen dp_444
-dimen dp_445
-dimen dp_446
-dimen dp_447
-dimen dp_448
-dimen dp_449
-dimen dp_45
-dimen dp_450
-dimen dp_451
-dimen dp_452
-dimen dp_453
-dimen dp_454
-dimen dp_455
-dimen dp_456
-dimen dp_457
-dimen dp_458
-dimen dp_459
-dimen dp_46
-dimen dp_460
-dimen dp_461
-dimen dp_462
-dimen dp_463
-dimen dp_464
-dimen dp_465
-dimen dp_466
-dimen dp_467
-dimen dp_468
-dimen dp_469
-dimen dp_47
-dimen dp_470
-dimen dp_471
-dimen dp_472
-dimen dp_473
-dimen dp_474
-dimen dp_475
-dimen dp_476
-dimen dp_477
-dimen dp_478
-dimen dp_479
-dimen dp_48
-dimen dp_480
-dimen dp_481
-dimen dp_482
-dimen dp_483
-dimen dp_484
-dimen dp_485
-dimen dp_486
-dimen dp_487
-dimen dp_488
-dimen dp_489
-dimen dp_49
-dimen dp_490
-dimen dp_491
-dimen dp_492
-dimen dp_493
-dimen dp_494
-dimen dp_495
-dimen dp_496
-dimen dp_497
-dimen dp_498
-dimen dp_499
-dimen dp_4_5
-dimen dp_5
-dimen dp_50
-dimen dp_500
-dimen dp_501
-dimen dp_502
-dimen dp_503
-dimen dp_504
-dimen dp_505
-dimen dp_506
-dimen dp_507
-dimen dp_508
-dimen dp_509
-dimen dp_51
-dimen dp_510
-dimen dp_511
-dimen dp_512
-dimen dp_513
-dimen dp_514
-dimen dp_515
-dimen dp_516
-dimen dp_517
-dimen dp_518
-dimen dp_519
-dimen dp_52
-dimen dp_520
-dimen dp_521
-dimen dp_522
-dimen dp_523
-dimen dp_524
-dimen dp_525
-dimen dp_526
-dimen dp_527
-dimen dp_528
-dimen dp_529
-dimen dp_53
-dimen dp_530
-dimen dp_531
-dimen dp_532
-dimen dp_533
-dimen dp_534
-dimen dp_535
-dimen dp_536
-dimen dp_537
-dimen dp_538
-dimen dp_539
-dimen dp_54
-dimen dp_540
-dimen dp_541
-dimen dp_542
-dimen dp_543
-dimen dp_544
-dimen dp_545
-dimen dp_546
-dimen dp_547
-dimen dp_548
-dimen dp_549
-dimen dp_55
-dimen dp_550
-dimen dp_551
-dimen dp_552
-dimen dp_553
-dimen dp_554
-dimen dp_555
-dimen dp_556
-dimen dp_557
-dimen dp_558
-dimen dp_559
-dimen dp_56
-dimen dp_560
-dimen dp_561
-dimen dp_562
-dimen dp_563
-dimen dp_564
-dimen dp_565
-dimen dp_566
-dimen dp_567
-dimen dp_568
-dimen dp_569
-dimen dp_57
-dimen dp_570
-dimen dp_571
-dimen dp_572
-dimen dp_573
-dimen dp_574
-dimen dp_575
-dimen dp_576
-dimen dp_577
-dimen dp_578
-dimen dp_579
-dimen dp_58
-dimen dp_580
-dimen dp_581
-dimen dp_582
-dimen dp_583
-dimen dp_584
-dimen dp_585
-dimen dp_586
-dimen dp_587
-dimen dp_588
-dimen dp_589
-dimen dp_59
-dimen dp_590
-dimen dp_591
-dimen dp_592
-dimen dp_593
-dimen dp_594
-dimen dp_595
-dimen dp_596
-dimen dp_597
-dimen dp_598
-dimen dp_599
-dimen dp_6
-dimen dp_60
-dimen dp_600
-dimen dp_601
-dimen dp_602
-dimen dp_603
-dimen dp_604
-dimen dp_605
-dimen dp_606
-dimen dp_607
-dimen dp_608
-dimen dp_609
-dimen dp_61
-dimen dp_610
-dimen dp_611
-dimen dp_612
-dimen dp_613
-dimen dp_614
-dimen dp_615
-dimen dp_616
-dimen dp_617
-dimen dp_618
-dimen dp_619
-dimen dp_62
-dimen dp_620
-dimen dp_621
-dimen dp_622
-dimen dp_623
-dimen dp_624
-dimen dp_625
-dimen dp_626
-dimen dp_627
-dimen dp_628
-dimen dp_629
-dimen dp_63
-dimen dp_630
-dimen dp_631
-dimen dp_632
-dimen dp_633
-dimen dp_634
-dimen dp_635
-dimen dp_636
-dimen dp_637
-dimen dp_638
-dimen dp_639
-dimen dp_64
-dimen dp_640
-dimen dp_641
-dimen dp_642
-dimen dp_643
-dimen dp_644
-dimen dp_645
-dimen dp_646
-dimen dp_647
-dimen dp_648
-dimen dp_649
-dimen dp_65
-dimen dp_650
-dimen dp_651
-dimen dp_652
-dimen dp_653
-dimen dp_654
-dimen dp_655
-dimen dp_656
-dimen dp_657
-dimen dp_658
-dimen dp_659
-dimen dp_66
-dimen dp_660
-dimen dp_661
-dimen dp_662
-dimen dp_663
-dimen dp_664
-dimen dp_665
-dimen dp_666
-dimen dp_667
-dimen dp_668
-dimen dp_669
-dimen dp_67
-dimen dp_670
-dimen dp_671
-dimen dp_672
-dimen dp_673
-dimen dp_674
-dimen dp_675
-dimen dp_676
-dimen dp_677
-dimen dp_678
-dimen dp_679
-dimen dp_68
-dimen dp_680
-dimen dp_681
-dimen dp_682
-dimen dp_683
-dimen dp_684
-dimen dp_685
-dimen dp_686
-dimen dp_687
-dimen dp_688
-dimen dp_689
-dimen dp_69
-dimen dp_690
-dimen dp_691
-dimen dp_692
-dimen dp_693
-dimen dp_694
-dimen dp_695
-dimen dp_696
-dimen dp_697
-dimen dp_698
-dimen dp_699
-dimen dp_7
-dimen dp_70
-dimen dp_700
-dimen dp_701
-dimen dp_702
-dimen dp_703
-dimen dp_704
-dimen dp_705
-dimen dp_706
-dimen dp_707
-dimen dp_708
-dimen dp_709
-dimen dp_71
-dimen dp_710
-dimen dp_711
-dimen dp_712
-dimen dp_713
-dimen dp_714
-dimen dp_715
-dimen dp_716
-dimen dp_717
-dimen dp_718
-dimen dp_719
-dimen dp_72
-dimen dp_720
-dimen dp_721
-dimen dp_722
-dimen dp_723
-dimen dp_724
-dimen dp_725
-dimen dp_726
-dimen dp_727
-dimen dp_728
-dimen dp_729
-dimen dp_73
-dimen dp_730
-dimen dp_731
-dimen dp_732
-dimen dp_733
-dimen dp_734
-dimen dp_735
-dimen dp_736
-dimen dp_737
-dimen dp_738
-dimen dp_739
-dimen dp_74
-dimen dp_740
-dimen dp_741
-dimen dp_742
-dimen dp_743
-dimen dp_744
-dimen dp_745
-dimen dp_746
-dimen dp_747
-dimen dp_748
-dimen dp_749
-dimen dp_75
-dimen dp_750
-dimen dp_751
-dimen dp_752
-dimen dp_753
-dimen dp_754
-dimen dp_755
-dimen dp_756
-dimen dp_757
-dimen dp_758
-dimen dp_759
-dimen dp_76
-dimen dp_760
-dimen dp_761
-dimen dp_762
-dimen dp_763
-dimen dp_764
-dimen dp_765
-dimen dp_766
-dimen dp_767
-dimen dp_768
-dimen dp_769
-dimen dp_77
-dimen dp_770
-dimen dp_771
-dimen dp_772
-dimen dp_773
-dimen dp_774
-dimen dp_775
-dimen dp_776
-dimen dp_777
-dimen dp_778
-dimen dp_779
-dimen dp_78
-dimen dp_780
-dimen dp_781
-dimen dp_782
-dimen dp_783
-dimen dp_784
-dimen dp_785
-dimen dp_786
-dimen dp_787
-dimen dp_788
-dimen dp_789
-dimen dp_79
-dimen dp_790
-dimen dp_791
-dimen dp_792
-dimen dp_793
-dimen dp_794
-dimen dp_795
-dimen dp_796
-dimen dp_797
-dimen dp_798
-dimen dp_799
-dimen dp_7_5
-dimen dp_8
-dimen dp_80
-dimen dp_800
-dimen dp_801
-dimen dp_802
-dimen dp_803
-dimen dp_804
-dimen dp_805
-dimen dp_806
-dimen dp_807
-dimen dp_808
-dimen dp_809
-dimen dp_81
-dimen dp_810
-dimen dp_811
-dimen dp_812
-dimen dp_813
-dimen dp_814
-dimen dp_815
-dimen dp_816
-dimen dp_817
-dimen dp_818
-dimen dp_819
-dimen dp_82
-dimen dp_820
-dimen dp_821
-dimen dp_822
-dimen dp_823
-dimen dp_824
-dimen dp_825
-dimen dp_826
-dimen dp_827
-dimen dp_828
-dimen dp_829
-dimen dp_83
-dimen dp_830
-dimen dp_831
-dimen dp_832
-dimen dp_833
-dimen dp_834
-dimen dp_835
-dimen dp_836
-dimen dp_837
-dimen dp_838
-dimen dp_839
-dimen dp_84
-dimen dp_840
-dimen dp_841
-dimen dp_842
-dimen dp_843
-dimen dp_844
-dimen dp_845
-dimen dp_846
-dimen dp_847
-dimen dp_848
-dimen dp_849
-dimen dp_85
-dimen dp_850
-dimen dp_851
-dimen dp_852
-dimen dp_853
-dimen dp_854
-dimen dp_855
-dimen dp_856
-dimen dp_857
-dimen dp_858
-dimen dp_859
-dimen dp_86
-dimen dp_860
-dimen dp_861
-dimen dp_862
-dimen dp_863
-dimen dp_864
-dimen dp_865
-dimen dp_866
-dimen dp_867
-dimen dp_868
-dimen dp_869
-dimen dp_87
-dimen dp_870
-dimen dp_871
-dimen dp_872
-dimen dp_873
-dimen dp_874
-dimen dp_875
-dimen dp_876
-dimen dp_877
-dimen dp_878
-dimen dp_879
-dimen dp_88
-dimen dp_880
-dimen dp_881
-dimen dp_882
-dimen dp_883
-dimen dp_884
-dimen dp_885
-dimen dp_886
-dimen dp_887
-dimen dp_888
-dimen dp_889
-dimen dp_89
-dimen dp_890
-dimen dp_891
-dimen dp_892
-dimen dp_893
-dimen dp_894
-dimen dp_895
-dimen dp_896
-dimen dp_897
-dimen dp_898
-dimen dp_899
-dimen dp_9
-dimen dp_90
-dimen dp_900
-dimen dp_901
-dimen dp_902
-dimen dp_903
-dimen dp_904
-dimen dp_905
-dimen dp_906
-dimen dp_907
-dimen dp_908
-dimen dp_909
-dimen dp_91
-dimen dp_910
-dimen dp_911
-dimen dp_912
-dimen dp_913
-dimen dp_914
-dimen dp_915
-dimen dp_916
-dimen dp_917
-dimen dp_918
-dimen dp_919
-dimen dp_92
-dimen dp_920
-dimen dp_921
-dimen dp_922
-dimen dp_923
-dimen dp_924
-dimen dp_925
-dimen dp_926
-dimen dp_927
-dimen dp_928
-dimen dp_929
-dimen dp_93
-dimen dp_930
-dimen dp_931
-dimen dp_932
-dimen dp_933
-dimen dp_934
-dimen dp_935
-dimen dp_936
-dimen dp_937
-dimen dp_938
-dimen dp_939
-dimen dp_94
-dimen dp_940
-dimen dp_941
-dimen dp_942
-dimen dp_943
-dimen dp_944
-dimen dp_945
-dimen dp_946
-dimen dp_947
-dimen dp_948
-dimen dp_949
-dimen dp_95
-dimen dp_950
-dimen dp_951
-dimen dp_952
-dimen dp_953
-dimen dp_954
-dimen dp_955
-dimen dp_956
-dimen dp_957
-dimen dp_958
-dimen dp_959
-dimen dp_96
-dimen dp_960
-dimen dp_961
-dimen dp_962
-dimen dp_963
-dimen dp_964
-dimen dp_965
-dimen dp_966
-dimen dp_967
-dimen dp_968
-dimen dp_969
-dimen dp_97
-dimen dp_970
-dimen dp_971
-dimen dp_972
-dimen dp_973
-dimen dp_974
-dimen dp_975
-dimen dp_976
-dimen dp_977
-dimen dp_978
-dimen dp_979
-dimen dp_98
-dimen dp_980
-dimen dp_981
-dimen dp_982
-dimen dp_983
-dimen dp_984
-dimen dp_985
-dimen dp_986
-dimen dp_987
-dimen dp_988
-dimen dp_989
-dimen dp_99
-dimen dp_990
-dimen dp_991
-dimen dp_992
-dimen dp_993
-dimen dp_994
-dimen dp_995
-dimen dp_996
-dimen dp_997
-dimen dp_998
-dimen dp_999
-dimen dp_m_1
-dimen dp_m_10
-dimen dp_m_12
-dimen dp_m_2
-dimen dp_m_20
-dimen dp_m_30
-dimen dp_m_5
-dimen dp_m_60
-dimen dp_m_8
-dimen fastscroll_default_thickness
-dimen fastscroll_margin
-dimen fastscroll_minimum_range
-dimen heart_ratingbar_height
-dimen heart_ratingbar_width
-dimen highlight_alpha_material_colored
-dimen highlight_alpha_material_dark
-dimen highlight_alpha_material_light
-dimen hint_alpha_material_dark
-dimen hint_alpha_material_light
-dimen hint_pressed_alpha_material_dark
-dimen hint_pressed_alpha_material_light
-dimen item_touch_helper_max_drag_scroll_per_frame
-dimen item_touch_helper_swipe_escape_max_velocity
-dimen item_touch_helper_swipe_escape_velocity
-dimen key_height
-dimen module_common_shadow_width
-dimen module_common_shadow_width_pos
-dimen module_commons_toast_icon_width
-dimen module_commons_toast_marginBottom
-dimen module_commons_toast_marginLeft
-dimen module_commons_toast_marginRight
-dimen module_commons_toast_marginTop
-dimen module_commons_toast_maxWidth
-dimen module_commons_toast_minWidth
-dimen module_commons_toast_space_between_icon_and_msg
-dimen module_commons_toast_textSize
-dimen module_commons_toast_with_left_drawable_marginBottom
-dimen module_commons_toast_with_left_drawable_marginLeft
-dimen module_commons_toast_with_left_drawable_marginTop
-dimen module_commons_toast_y_offset
-dimen module_mvision_big_view_height
-dimen module_mvision_big_view_width
-dimen module_mvision_big_view_x
-dimen module_mvision_big_view_y
-dimen module_mvision_view_height
-dimen module_mvision_view_width
-dimen module_mvision_view_x
-dimen module_mvision_view_y
-dimen module_service_content_minWidth
-dimen module_service_content_textSize
-dimen module_service_id_marker_content_paddingRight
-dimen module_service_id_marker_content_paddingRight_widthoutCall
-dimen module_service_marker_anchor_size
-dimen module_service_marker_bounds_bottomMargin
-dimen module_service_marker_bounds_leftMargin
-dimen module_service_marker_bounds_rightMargin
-dimen module_service_marker_bounds_topMargin
-dimen module_service_marker_bubble_height
-dimen module_service_marker_bubble_icon_height
-dimen module_service_marker_bubble_icon_marginBottom
-dimen module_service_marker_bubble_icon_width
-dimen module_service_marker_bubble_width
-dimen module_service_marker_dot_marginTop
-dimen module_service_tag_textSize
-dimen module_service_user_header_height
-dimen module_service_user_header_width
-dimen module_services_empty_tip_marginTop
-dimen module_services_empty_tip_textSize
-dimen module_services_id_panel_item_avatar_border_width
-dimen module_services_id_panel_item_distance_marginLeft
-dimen module_services_info_window_height
-dimen module_services_info_window_paddingEnd
-dimen module_services_info_window_paddingStart
-dimen module_services_load_strategy_marginRight
-dimen module_services_load_strategy_paddingLeft
-dimen module_services_load_strategy_paddingTop
-dimen module_services_load_strategy_textSize
-dimen module_services_online_car_panel_close_margin_top
-dimen module_services_online_car_panel_marginBottom
-dimen module_services_online_car_panel_marginRight
-dimen module_services_online_car_panel_marginTop
-dimen module_services_online_car_panel_paddingBottom
-dimen module_services_online_car_panel_paddingLeft
-dimen module_services_online_car_panel_recycler_view_margin_top
-dimen module_services_online_car_panel_title_margin_top
-dimen module_services_online_car_panel_title_text_size
-dimen module_services_panel_item_avatar_size
-dimen module_services_panel_item_corner
-dimen module_services_panel_item_detail_bkg_corner
-dimen module_services_panel_item_detail_padding
-dimen module_services_panel_item_detail_textSize
-dimen module_services_panel_item_distance_textSize
-dimen module_services_panel_item_marginBottom
-dimen module_services_panel_item_nickname_marginLeft
-dimen module_services_panel_item_nickname_textSize
-dimen module_services_panel_item_padding
-dimen module_services_panel_strategy_button_bkg_corner
-dimen module_services_panel_strategy_button_marginTop
-dimen notification_action_icon_size
-dimen notification_action_text_size
-dimen notification_big_circle_margin
-dimen notification_content_margin_start
-dimen notification_large_icon_height
-dimen notification_large_icon_width
-dimen notification_main_column_padding_top
-dimen notification_media_narrow_margin
-dimen notification_right_icon_size
-dimen notification_right_side_padding_top
-dimen notification_small_icon_background_padding
-dimen notification_small_icon_size_as_large
-dimen notification_subtext_size
-dimen notification_top_pad
-dimen notification_top_pad_large_text
-dimen padding_large
-dimen padding_medium
-dimen padding_small
-dimen panel_list_item_title_size
-dimen path_width
-dimen scale
-dimen share_item_address
-dimen sp_10
-dimen sp_11
-dimen sp_12
-dimen sp_13
-dimen sp_14
-dimen sp_15
-dimen sp_16
-dimen sp_17
-dimen sp_18
-dimen sp_19
-dimen sp_20
-dimen sp_21
-dimen sp_22
-dimen sp_23
-dimen sp_24
-dimen sp_25
-dimen sp_28
-dimen sp_30
-dimen sp_32
-dimen sp_34
-dimen sp_36
-dimen sp_38
-dimen sp_40
-dimen sp_42
-dimen sp_48
-dimen sp_6
-dimen sp_7
-dimen sp_8
-dimen sp_9
-dimen subtitle_corner_radius
-dimen subtitle_outline_width
-dimen subtitle_shadow_offset
-dimen subtitle_shadow_radius
-dimen text_size_btn
-dimen text_size_btn2
-dimen text_size_middle
-dimen text_size_nav
-dimen tooltip_corner_radius
-dimen tooltip_horizontal_padding
-dimen tooltip_margin
-dimen tooltip_precise_anchor_extra_offset
-dimen tooltip_precise_anchor_threshold
-dimen tooltip_vertical_padding
-dimen tooltip_y_offset_non_touch
-dimen tooltip_y_offset_touch
-dimen v2x_panel_loading_top
-dimen v2x_share_btn_height
-dimen v2x_share_btn_width
-drawable abc_ab_share_pack_mtrl_alpha
-drawable abc_action_bar_item_background_material
-drawable abc_btn_borderless_material
-drawable abc_btn_check_material
-drawable abc_btn_check_material_anim
-drawable abc_btn_check_to_on_mtrl_000
-drawable abc_btn_check_to_on_mtrl_015
-drawable abc_btn_colored_material
-drawable abc_btn_default_mtrl_shape
-drawable abc_btn_radio_material
-drawable abc_btn_radio_material_anim
-drawable abc_btn_radio_to_on_mtrl_000
-drawable abc_btn_radio_to_on_mtrl_015
-drawable abc_btn_switch_to_on_mtrl_00001
-drawable abc_btn_switch_to_on_mtrl_00012
-drawable abc_cab_background_internal_bg
-drawable abc_cab_background_top_material
-drawable abc_cab_background_top_mtrl_alpha
-drawable abc_control_background_material
-drawable abc_dialog_material_background
-drawable abc_edit_text_material
-drawable abc_ic_ab_back_material
-drawable abc_ic_arrow_drop_right_black_24dp
-drawable abc_ic_clear_material
-drawable abc_ic_commit_search_api_mtrl_alpha
-drawable abc_ic_go_search_api_material
-drawable abc_ic_menu_copy_mtrl_am_alpha
-drawable abc_ic_menu_cut_mtrl_alpha
-drawable abc_ic_menu_overflow_material
-drawable abc_ic_menu_paste_mtrl_am_alpha
-drawable abc_ic_menu_selectall_mtrl_alpha
-drawable abc_ic_menu_share_mtrl_alpha
-drawable abc_ic_search_api_material
-drawable abc_ic_star_black_16dp
-drawable abc_ic_star_black_36dp
-drawable abc_ic_star_black_48dp
-drawable abc_ic_star_half_black_16dp
-drawable abc_ic_star_half_black_36dp
-drawable abc_ic_star_half_black_48dp
-drawable abc_ic_voice_search_api_material
-drawable abc_item_background_holo_dark
-drawable abc_item_background_holo_light
-drawable abc_list_divider_material
-drawable abc_list_divider_mtrl_alpha
-drawable abc_list_focused_holo
-drawable abc_list_longpressed_holo
-drawable abc_list_pressed_holo_dark
-drawable abc_list_pressed_holo_light
-drawable abc_list_selector_background_transition_holo_dark
-drawable abc_list_selector_background_transition_holo_light
-drawable abc_list_selector_disabled_holo_dark
-drawable abc_list_selector_disabled_holo_light
-drawable abc_list_selector_holo_dark
-drawable abc_list_selector_holo_light
-drawable abc_menu_hardkey_panel_mtrl_mult
-drawable abc_popup_background_mtrl_mult
-drawable abc_ratingbar_indicator_material
-drawable abc_ratingbar_material
-drawable abc_ratingbar_small_material
-drawable abc_scrubber_control_off_mtrl_alpha
-drawable abc_scrubber_control_to_pressed_mtrl_000
-drawable abc_scrubber_control_to_pressed_mtrl_005
-drawable abc_scrubber_primary_mtrl_alpha
-drawable abc_scrubber_track_mtrl_alpha
-drawable abc_seekbar_thumb_material
-drawable abc_seekbar_tick_mark_material
-drawable abc_seekbar_track_material
-drawable abc_spinner_mtrl_am_alpha
-drawable abc_spinner_textfield_background_material
-drawable abc_switch_thumb_material
-drawable abc_switch_track_mtrl_alpha
-drawable abc_tab_indicator_material
-drawable abc_tab_indicator_mtrl_alpha
-drawable abc_text_cursor_material
-drawable abc_text_select_handle_left_mtrl_dark
-drawable abc_text_select_handle_left_mtrl_light
-drawable abc_text_select_handle_middle_mtrl_dark
-drawable abc_text_select_handle_middle_mtrl_light
-drawable abc_text_select_handle_right_mtrl_dark
-drawable abc_text_select_handle_right_mtrl_light
-drawable abc_textfield_activated_mtrl_alpha
-drawable abc_textfield_default_mtrl_alpha
-drawable abc_textfield_search_activated_mtrl_alpha
-drawable abc_textfield_search_default_mtrl_alpha
-drawable abc_textfield_search_material
-drawable abc_vector_test
-drawable amap_bus
-drawable amap_car
-drawable amap_end
-drawable amap_man
-drawable amap_ride
-drawable amap_route_color_texture_0_arrow
-drawable amap_route_color_texture_1_arrow
-drawable amap_route_color_texture_2_arrow
-drawable amap_route_color_texture_3_arrow
-drawable amap_route_color_texture_4_arrow
-drawable amap_route_color_texture_5_arrow
-drawable amap_route_color_texture_6_arrow
-drawable amap_route_color_texture_7_arrow
-drawable amap_route_color_texture_8_arrow
-drawable amap_route_color_texture_9_arrow
-drawable amap_start
-drawable amap_through
-drawable app_icon
-drawable bg_jj_pressed
-drawable bg_map_marker_yellow_info
-drawable bg_menu_n
-drawable bg_menu_p
-drawable bg_pressed
-drawable bg_search_edit
-drawable bg_shape_reverse_yellow
-drawable black
-drawable brvah_sample_footer_loading
-drawable brvah_sample_footer_loading_progress
-drawable btn
-drawable btn_checkbox_checked_mtrl
-drawable btn_checkbox_checked_to_unchecked_mtrl_animation
-drawable btn_checkbox_unchecked_mtrl
-drawable btn_checkbox_unchecked_to_checked_mtrl_animation
-drawable btn_day
-drawable btn_day_press
-drawable btn_guidance_selecter
-drawable btn_keyboard_key_ics
-drawable btn_night
-drawable btn_night_press
-drawable btn_p
-drawable btn_radio_off_mtrl
-drawable btn_radio_off_to_on_mtrl_animation
-drawable btn_radio_on_mtrl
-drawable btn_radio_on_to_off_mtrl_animation
-drawable btn_selecter
-drawable btn_selecter_day
-drawable btn_selecter_night
-drawable btn_selecter_s
-drawable custom_info_bubble
-drawable default_image
-drawable dir1
-drawable dir10
-drawable dir11
-drawable dir12
-drawable dir13
-drawable dir14
-drawable dir15
-drawable dir16
-drawable dir2
-drawable dir3
-drawable dir4
-drawable dir5
-drawable dir6
-drawable dir7
-drawable dir8
-drawable dir9
-drawable dir_end
-drawable dir_start
-drawable dir_station
-drawable divider_line
-drawable gray
-drawable gray2
-drawable gray3
-drawable gray4
-drawable green
-drawable guidance_speed_bg
-drawable guidance_speed_p_bg
-drawable ic_1
-drawable ic_10
-drawable ic_11
-drawable ic_12
-drawable ic_13
-drawable ic_14
-drawable ic_15
-drawable ic_16
-drawable ic_17
-drawable ic_18
-drawable ic_19
-drawable ic_2
-drawable ic_20
-drawable ic_21
-drawable ic_22
-drawable ic_23
-drawable ic_24
-drawable ic_25
-drawable ic_26
-drawable ic_27
-drawable ic_28
-drawable ic_3
-drawable ic_4
-drawable ic_5
-drawable ic_50
-drawable ic_51
-drawable ic_52
-drawable ic_53
-drawable ic_54
-drawable ic_55
-drawable ic_56
-drawable ic_57
-drawable ic_58
-drawable ic_59
-drawable ic_6
-drawable ic_60
-drawable ic_61
-drawable ic_62
-drawable ic_63
-drawable ic_64
-drawable ic_65
-drawable ic_66
-drawable ic_67
-drawable ic_68
-drawable ic_69
-drawable ic_7
-drawable ic_8
-drawable ic_9
-drawable ic_amap_navi_cursor
-drawable ic_endpoint
-drawable ic_map_textview_bg
-drawable ic_navi_start
-drawable ic_navi_target
-drawable ic_panel_route_select
-drawable ic_panel_route_select_down
-drawable ic_refresh
-drawable ic_search_input
-drawable ic_snapshot_ph
-drawable icon_default_user_head
-drawable icon_heart_choose
-drawable icon_heart_second
-drawable icon_heart_unchoose
-drawable icon_map_marker_4s
-drawable icon_map_marker_book
-drawable icon_map_marker_car_gray
-drawable icon_map_marker_car_gray_selected
-drawable icon_map_marker_car_type2
-drawable icon_map_marker_car_type_110
-drawable icon_map_marker_car_type_119
-drawable icon_map_marker_car_type_120
-drawable icon_map_marker_car_type_bus
-drawable icon_map_marker_car_type_taxi
-drawable icon_map_marker_living
-drawable icon_map_marker_living_white
-drawable icon_map_marker_location_yellow
-drawable icon_map_marker_location_yellow_vr
-drawable icon_map_marker_misic
-drawable icon_map_marker_news
-drawable icon_map_marker_pondingl
-drawable icon_map_marker_pondingl2
-drawable icon_map_marker_pondingl2_white
-drawable icon_map_marker_refuel
-drawable icon_map_marker_road_block_off
-drawable icon_map_marker_road_block_off2
-drawable icon_map_marker_road_block_off2_white
-drawable icon_map_marker_road_block_up
-drawable icon_map_marker_road_block_up2
-drawable icon_map_marker_road_block_up2_white
-drawable icon_map_marker_road_check
-drawable icon_map_marker_road_check2
-drawable icon_map_marker_road_check2_white
-drawable icon_map_marker_road_work
-drawable icon_map_marker_road_work2
-drawable icon_map_marker_road_work2_white
-drawable icon_map_marker_shear_news
-drawable icon_map_marker_shop
-drawable icon_map_marker_shop_discount
-drawable join_checkbox_bg
-drawable keyboard_background_holo
-drawable line_v
-drawable list_line
-drawable listview_bg_dark
-drawable live_exit
-drawable location_city_image
-drawable main_solid_left_page_up_normal
-drawable main_solid_left_page_up_press
-drawable main_solid_right_page_up_normal
-drawable main_solid_right_page_up_press
-drawable mainpage_location_img
-drawable map_api_ic_current_location2
-drawable map_custom_ic_current_location2
-drawable map_location_normal
-drawable map_location_press
-drawable mapcolor
-drawable mapscale
-drawable marker_blue
-drawable menu_left_btn_p
-drawable module_common_default_user_head
-drawable module_common_online_car_vr_left
-drawable module_common_online_car_vr_machine_middle
-drawable module_common_online_car_vr_middle
-drawable module_common_online_car_vr_reverse
-drawable module_common_online_car_vr_right
-drawable module_commons_heart_ratingbar_drawable
-drawable module_commons_machine_car_other_left_normal
-drawable module_commons_machine_car_other_left_reverse_normal
-drawable module_commons_machine_car_other_normal
-drawable module_commons_machine_car_other_reverse_normal
-drawable module_commons_machine_car_other_right_normal
-drawable module_commons_machine_car_other_right_reverse_normal
-drawable module_commons_shape_dlg_round_bkg
-drawable module_commons_shape_left_btn_bkg
-drawable module_commons_shape_right_btn_bkg
-drawable module_commons_toast_bkg
-drawable module_commons_user_car_other_dangerous
-drawable module_commons_user_car_other_left_normal
-drawable module_commons_user_car_other_left_normal_dangerous
-drawable module_commons_user_car_other_left_reverse_dangerous
-drawable module_commons_user_car_other_left_reverse_normal
-drawable module_commons_user_car_other_normal
-drawable module_commons_user_car_other_reverse_dangerous
-drawable module_commons_user_car_other_reverse_normal
-drawable module_commons_user_car_other_right_dangerous
-drawable module_commons_user_car_other_right_normal
-drawable module_commons_user_car_other_right_reverse_dangerous
-drawable module_commons_user_car_other_right_reverse_normal
-drawable module_commons_user_car_self
-drawable module_commons_user_car_self_left
-drawable module_commons_user_car_self_right
-drawable module_dw_common_corner_bkg_light
-drawable module_service_ic_call
-drawable module_service_ic_rc_accident
-drawable module_service_ic_rc_accident2
-drawable module_service_ic_rc_accident3
-drawable module_service_ic_rc_accident3_white
-drawable module_service_ic_rc_dark_frog
-drawable module_service_ic_rc_dark_frog2
-drawable module_service_ic_rc_dark_frog2_white
-drawable module_service_ic_rc_freeze
-drawable module_service_ic_rc_freeze2
-drawable module_service_ic_rc_freeze2_white
-drawable module_service_ic_rc_illegal_park
-drawable module_service_ic_rc_illegal_park_white
-drawable module_service_ic_rc_parking
-drawable module_service_ic_rc_parking2
-drawable module_service_ic_rc_road_slippery
-drawable module_service_ic_rc_road_slippery_light
-drawable module_service_ic_seek_helping
-drawable module_services_marker_bkg
-drawable navi_tmcbar_bg
-drawable not_join_checkbox_bg
-drawable notification_action_background
-drawable notification_bg
-drawable notification_bg_low
-drawable notification_bg_low_normal
-drawable notification_bg_low_pressed
-drawable notification_bg_normal
-drawable notification_bg_normal_pressed
-drawable notification_icon_background
-drawable notification_template_icon_bg
-drawable notification_template_icon_low_bg
-drawable notification_tile_bg
-drawable notify_panel_notification_icon_bg
-drawable panel_channellist_detail
-drawable panel_menu_selector
-drawable panel_route_selecter
-drawable panel_route_selecter_p
-drawable panel_search_btn_selector
-drawable panel_search_indicator_selector
-drawable panel_search_voice_selector
-drawable panel_sharetrf_bg_pressed
-drawable progress_bg
-drawable public_arrow_back_iv
-drawable rect_dark
-drawable rect_light
-drawable result_color
-drawable seagreen
-drawable search_information_normal
-drawable search_information_press
-drawable selector_nav_btn
-drawable shadow_left
-drawable shadow_line
-drawable shadow_line2
-drawable shadow_progress
-drawable shadow_right
-drawable shape_blue_trans
-drawable stat_sys_download
-drawable tc_10
-drawable tc_11
-drawable tc_12
-drawable tc_13
-drawable tc_14
-drawable tc_15
-drawable tc_16
-drawable tc_17
-drawable tc_20
-drawable tc_21
-drawable tc_22
-drawable tc_23
-drawable tc_24
-drawable tc_25
-drawable tc_26
-drawable tc_27
-drawable tc_28
-drawable tc_30
-drawable tc_31
-drawable tc_32
-drawable tc_33
-drawable tc_34
-drawable tc_35
-drawable tc_36
-drawable tc_37
-drawable tc_38
-drawable tc_39
-drawable tc_40
-drawable tc_41
-drawable tc_42
-drawable tc_43
-drawable tc_44
-drawable tc_68
-drawable tc_84
-drawable tc_85
-drawable text_bg
-drawable textblue
-drawable tooltip_frame_dark
-drawable tooltip_frame_light
-drawable transparent_background
-drawable transparent_drawable
-drawable video_loading_img
-drawable white
-drawable white1
-drawable white2
-id BaseQuickAdapter_databinding_support
-id BaseQuickAdapter_dragging_support
-id BaseQuickAdapter_swiping_support
-id BaseQuickAdapter_viewholder_support
-id Full
-id Half
-id accessibility_action_clickable_span
-id accessibility_custom_action_0
-id accessibility_custom_action_1
-id accessibility_custom_action_10
-id accessibility_custom_action_11
-id accessibility_custom_action_12
-id accessibility_custom_action_13
-id accessibility_custom_action_14
-id accessibility_custom_action_15
-id accessibility_custom_action_16
-id accessibility_custom_action_17
-id accessibility_custom_action_18
-id accessibility_custom_action_19
-id accessibility_custom_action_2
-id accessibility_custom_action_20
-id accessibility_custom_action_21
-id accessibility_custom_action_22
-id accessibility_custom_action_23
-id accessibility_custom_action_24
-id accessibility_custom_action_25
-id accessibility_custom_action_26
-id accessibility_custom_action_27
-id accessibility_custom_action_28
-id accessibility_custom_action_29
-id accessibility_custom_action_3
-id accessibility_custom_action_30
-id accessibility_custom_action_31
-id accessibility_custom_action_4
-id accessibility_custom_action_5
-id accessibility_custom_action_6
-id accessibility_custom_action_7
-id accessibility_custom_action_8
-id accessibility_custom_action_9
-id action0
-id action_bar
-id action_bar_activity_content
-id action_bar_container
-id action_bar_root
-id action_bar_spinner
-id action_bar_subtitle
-id action_bar_title
-id action_container
-id action_context_bar
-id action_divider
-id action_image
-id action_menu_divider
-id action_menu_presenter
-id action_mode_bar
-id action_mode_bar_stub
-id action_mode_close_button
-id action_text
-id actions
-id activity_chooser_view_content
-id add
-id alertTitle
-id async
-id blocking
-id bottom
-id box_bkg
-id box_info
-id box_progress
-id btn_dest
-id btn_navi
-id btn_pos
-id btn_start
-id btn_tu
-id btn_zoom_city
-id btn_zoom_country
-id btn_zoom_in
-id btn_zoom_out
-id btn_zoom_provincial
-id btn_zoom_road
-id buffer
-id buttonPanel
-id cancel_action
-id center
-id centerCrop
-id centerInside
-id checkbox
-id checked
-id chronometer
-id circle
-id clMarkerContent
-id clMarkerTopView
-id content
-id contentPanel
-id cus_polygon
-id custom
-id customPanel
-id customRatingBar
-id dataBinding
-id decor_content_parent
-id default_activity_button
-id determinate
-id dialog_button
-id edit_query
-id end
-id end_padder
-id expand_activities_button
-id expanded_menu
-id fitCenter
-id fitEnd
-id fitStart
-id fitXY
-id fl_cars
-id focusCrop
-id forever
-id glide_custom_view_target_tag
-id gone
-id group_divider
-id guidance_btn_show_route_mode
-id guidance_enter_image
-id guidance_exit_image
-id guidance_iv_line
-id guidance_layout_next_road
-id guidance_layout_next_road_name
-id guidance_layout_next_road_two_name
-id guidance_layout_server_enter
-id guidance_left
-id guidance_progressBar
-id guidance_server_image
-id guidance_tv_progress
-id guidance_tv_speed
-id home
-id horizontal
-id icon
-id icon_group
-id image
-id imgView
-id img_traffic
-id img_zoom_in
-id img_zoom_out
-id indeterminate
-id index
-id info
-id infoW_title
-id infoWindowLayer
-id infow_content
-id invisible
-id italic
-id item_touch_helper_previous_elevation
-id ivCar
-id ivIcon
-id ivReverseTriangle
-id ivUserHead
-id iv_back
-id iv_guidance_3d_route_arrow
-id iv_guidance_3d_route_bg
-id iv_guidance_bind_car_arrow
-id iv_guidance_board_arrow
-id iv_guidance_board_bg
-id iv_guidance_enter_icon
-id iv_guidance_exit_icon
-id iv_guidance_lane_arrow
-id iv_guidance_lane_bg
-id iv_guidance_next_road
-id iv_guidance_next_road_over_mileage
-id iv_guidance_next_road_trun_mileage
-id iv_guidance_next_turn
-id iv_guidance_next_turn_over_mileage
-id iv_guidance_over_mileage
-id iv_guidance_server_icon
-id iv_logo
-id layout_zoom
-id layout_zoom_control
-id layout_zoom_value
-id left
-id length
-id lin_next_turn
-id line1
-id line3
-id listMode
-id list_item
-id ll_infowindow
-id load_more_load_complete_view
-id load_more_load_end_view
-id load_more_load_fail_view
-id load_more_loading_view
-id loading_imageview
-id loading_liner_layout
-id loading_progress
-id loading_text
-id lv_info
-id map_container
-id markerViewLayer
-id media_actions
-id menu_btn_bt
-id menu_btn_clearmap
-id menu_btn_common
-id menu_btn_periphery
-id menu_btn_periphery_search
-id menu_btn_recent
-id menu_btn_search
-id menu_btn_setting
-id menu_btn_show
-id menu_left_btn
-id menu_left_btns
-id menu_left_layout
-id message
-id module_commons_marker_car_model
-id module_commons_marker_car_speed
-id module_commons_toast_left_drawable
-id module_commons_toast_msg
-id module_commons_wm_dialog_button_cancel
-id module_commons_wm_dialog_button_ok
-id module_commons_wm_dialog_content
-id module_mvision_map_click
-id module_mvision_map_root
-id module_mvision_map_view
-id movePathView
-id multiply
-id navi_sdk_tmc_bar_container
-id next_icon
-id none
-id normal
-id notification_background
-id notification_main_column
-id notification_main_column_container
-id off
-id on
-id onAttachStateChangeListener
-id onDateChanged
-id orientation
-id packed
-id panel_btn_gps
-id panel_guidance_right
-id panel_text_gps
-id parent
-id parentPanel
-id percent
-id poi_browse_btn_back
-id poi_browse_btn_exit
-id poi_browse_btn_next
-id poi_browse_btn_pre
-id poi_browse_btns
-id progress
-id progress_circular
-id progress_horizontal
-id query
-id radio
-id refresh_button
-id rg_routing_set
-id right
-id right_icon
-id right_side
-id round
-id route_select_ok
-id route_select_setting
-id route_select_sim_navi
-id route_select_start
-id route_select_start_navi
-id route_select_time
-id route_set_end
-id route_set_layout
-id route_set_ok
-id route_set_start
-id route_set_waypoi
-id routebook_child_item_info_ll
-id routing_set_avoidhwy
-id routing_set_avoidtoll
-id routing_set_default
-id routing_set_fast
-id routing_set_short
-id screen
-id scrollIndicatorDown
-id scrollIndicatorUp
-id scrollView
-id search_badge
-id search_bar
-id search_button
-id search_close_btn
-id search_edit_frame
-id search_go_btn
-id search_mag_icon
-id search_plate
-id search_src_text
-id search_voice_btn
-id select_dialog_listview
-id shape_id
-id shortcut
-id sim_navi_control
-id sim_navi_next
-id sim_navi_pre
-id sim_navi_start
-id sim_navi_text
-id spacer
-id split_action_bar
-id spread
-id spread_inside
-id src_atop
-id src_in
-id src_over
-id start
-id status_bar_latest_event_content
-id submenuarrow
-id submit_area
-id tabMode
-id tag_accessibility_actions
-id tag_accessibility_clickable_spans
-id tag_accessibility_heading
-id tag_accessibility_pane_title
-id tag_screen_reader_focusable
-id tag_transition_group
-id tag_unhandled_key_event_manager
-id tag_unhandled_key_listeners
-id text
-id text2
-id textSpacerNoButtons
-id textSpacerNoTitle
-id textWatcher
-id time
-id title
-id titleDividerNoCustom
-id title_template
-id tmcBarCar
-id tmcBarTxt
-id tmcBarView
-id top
-id topPanel
-id tvMarkerContent
-id tv_dis
-id tv_guidance_cur_road
-id tv_guidance_enter_dis
-id tv_guidance_exit_dis
-id tv_guidance_next_export
-id tv_guidance_next_road
-id tv_guidance_next_road_two_name
-id tv_guidance_over_mileage
-id tv_guidance_over_time
-id tv_guidance_server_dis
-id tv_next_road
-id tv_over_view
-id tv_prompt
-id tv_scale
-id tv_scale_bg
-id tv_snippet
-id tv_title
-id txt_info
-id unchecked
-id uniform
-id up
-id vertical
-id wrap
-id wrap_content
-integer abc_config_activityDefaultDur
-integer abc_config_activityShortDur
-integer cancel_button_image_alpha
-integer config_tooltipAnimTime
-integer keyCode_0
-integer keyCode_1
-integer keyCode_1002
-integer keyCode_1003
-integer keyCode_1004
-integer keyCode_1005
-integer keyCode_2
-integer keyCode_3
-integer keyCode_4
-integer keyCode_5
-integer keyCode_6
-integer keyCode_7
-integer keyCode_8
-integer keyCode_9
-integer keyCode_a
-integer keyCode_b
-integer keyCode_c
-integer keyCode_d
-integer keyCode_del
-integer keyCode_e
-integer keyCode_f
-integer keyCode_g
-integer keyCode_h
-integer keyCode_heng
-integer keyCode_i
-integer keyCode_input_type
-integer keyCode_j
-integer keyCode_k
-integer keyCode_keboard_style
-integer keyCode_l
-integer keyCode_m
-integer keyCode_n
-integer keyCode_o
-integer keyCode_ok
-integer keyCode_p
-integer keyCode_q
-integer keyCode_r
-integer keyCode_s
-integer keyCode_search
-integer keyCode_t
-integer keyCode_u
-integer keyCode_v
-integer keyCode_w
-integer keyCode_x
-integer keyCode_xing
-integer keyCode_y
-integer keyCode_z
-integer status_bar_notification_info_maxnum
-interpolator btn_checkbox_checked_mtrl_animation_interpolator_0
-interpolator btn_checkbox_checked_mtrl_animation_interpolator_1
-interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0
-interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1
-interpolator btn_radio_to_off_mtrl_animation_interpolator_0
-interpolator btn_radio_to_on_mtrl_animation_interpolator_0
-interpolator fast_out_slow_in
-layout abc_action_bar_title_item
-layout abc_action_bar_up_container
-layout abc_action_menu_item_layout
-layout abc_action_menu_layout
-layout abc_action_mode_bar
-layout abc_action_mode_close_item_material
-layout abc_activity_chooser_view
-layout abc_activity_chooser_view_list_item
-layout abc_alert_dialog_button_bar_material
-layout abc_alert_dialog_material
-layout abc_alert_dialog_title_material
-layout abc_cascading_menu_item_layout
-layout abc_dialog_title_material
-layout abc_expanded_menu_layout
-layout abc_list_menu_item_checkbox
-layout abc_list_menu_item_icon
-layout abc_list_menu_item_layout
-layout abc_list_menu_item_radio
-layout abc_popup_menu_header_item_layout
-layout abc_popup_menu_item_layout
-layout abc_screen_content_include
-layout abc_screen_simple
-layout abc_screen_simple_overlay_action_mode
-layout abc_screen_toolbar
-layout abc_search_dropdown_item_icons_2line
-layout abc_search_view
-layout abc_select_dialog_material
-layout abc_tooltip
-layout brvah_quick_view_load_more
-layout custom_dialog
-layout dialog_routing_set
-layout dialog_tip
-layout dialog_wait
-layout layout_custom_info
-layout layout_map_auto_view
-layout layout_marker_infowindow_layer
-layout layout_normal_info_window_style
-layout layout_panel_btn_top_right
-layout layout_panel_guidance
-layout modeules_commons_layout_custom_ratingbar
-layout modudle_services_marker_layout
-layout modudle_services_marker_layout_info
-layout module_commons_layout_car
-layout module_commons_layout_toast
-layout module_commons_layout_toast_with_left_drawable
-layout module_commons_layout_wm_dialog
-layout module_mvision_layout_view
-layout navi_control_btn
-layout network_loading_item
-layout notification_action
-layout notification_action_tombstone
-layout notification_media_action
-layout notification_media_cancel_action
-layout notification_template_big_media
-layout notification_template_big_media_custom
-layout notification_template_big_media_narrow
-layout notification_template_big_media_narrow_custom
-layout notification_template_custom_big
-layout notification_template_icon_group
-layout notification_template_lines_media
-layout notification_template_media
-layout notification_template_media_custom
-layout notification_template_part_chronometer
-layout notification_template_part_time
-layout panel_btn_car
-layout panel_btn_cars
-layout panel_btn_left
-layout panel_btn_location
-layout panel_btn_logo
-layout panel_btn_scale
-layout panel_btn_zoom
-layout panel_btn_zoom_ctrl
-layout panel_guidance
-layout panel_polygon
-layout panel_route_select
-layout panel_route_set
-layout routebook_child_item
-layout select_dialog_item_material
-layout select_dialog_multichoice_material
-layout select_dialog_singlechoice_material
-layout support_simple_spinner_dropdown_item
-layout view_over_view
-layout view_traffic_button
-layout view_trafficbar
-layout view_zoom
-mipmap arrow
-mipmap bg_main
-mipmap car_two
-mipmap divider_mapbutton
-mipmap dot
-mipmap gray_dot
-mipmap green_dot
-mipmap ic_arrow_left_pressed
-mipmap ic_ch
-mipmap ic_launcher
-mipmap ic_search_btn_down
-mipmap ic_search_btn_up
-mipmap ic_search_voice_down
-mipmap ic_search_voice_up
-mipmap ic_show_map_n
-mipmap ic_show_map_p
-mipmap icon1001
-mipmap icon1002
-mipmap icon1003
-mipmap icon1004
-mipmap icon1005
-mipmap icon1006
-mipmap icon1007
-mipmap icon1008
-mipmap icon1009
-mipmap icon1010
-mipmap icon1011
-mipmap icon1012
-mipmap icon1013
-mipmap icon1014
-mipmap icon1015
-mipmap icon1022
-mipmap icon1027
-mipmap icon1028
-mipmap icon1029
-mipmap icon1035
-mipmap icon1042
-mipmap icon1043
-mipmap icon1044
-mipmap icon1501
-mipmap icon1502
-mipmap icon1503
-mipmap icon_car
-mipmap icon_collect
-mipmap icon_collect_s
-mipmap icon_day
-mipmap icon_direction
-mipmap icon_loading
-mipmap icon_loc_day
-mipmap icon_loc_night
-mipmap icon_location
-mipmap icon_location_day
-mipmap icon_location_night
-mipmap icon_night
-mipmap icon_pause_night
-mipmap icon_play_night
-mipmap icon_sim_navi_car
-mipmap icon_sim_navi_next
-mipmap icon_sim_navi_pause
-mipmap icon_sim_navi_pre
-mipmap icon_sim_navi_start
-mipmap icon_traffic_close_day
-mipmap icon_traffic_close_night
-mipmap icon_traffic_open_day
-mipmap icon_traffic_open_night
-mipmap icon_zoom_in_day
-mipmap icon_zoom_in_night
-mipmap icon_zoom_out_day
-mipmap icon_zoom_out_night
-mipmap img_error
-mipmap img_error_dark
-mipmap img_finish
-mipmap img_finish_dark
-mipmap img_warning
-mipmap img_warning_dark
-mipmap l0
-mipmap l1
-mipmap l2
-mipmap l3
-mipmap l4
-mipmap l5
-mipmap l6
-mipmap l7
-mipmap l8
-mipmap l9
-mipmap map_custom_mogo_self_car_2d
-mipmap map_custom_self_car
-mipmap map_custom_self_car_day
-mipmap map_custom_self_car_night
-mipmap mapdir
-mipmap menu_left_btn_icon_in
-mipmap menu_left_btn_icon_out
-mipmap mk_car
-mipmap n0
-mipmap n1
-mipmap n2
-mipmap n3
-mipmap n4
-mipmap n5
-mipmap n6
-mipmap n7
-mipmap n8
-mipmap n9
-mipmap navi_gps_set
-mipmap navi_gpssv
-mipmap navi_s_1
-mipmap navi_s_10
-mipmap navi_s_11
-mipmap navi_s_12
-mipmap navi_s_13
-mipmap navi_s_14
-mipmap navi_s_15
-mipmap navi_s_2
-mipmap navi_s_22
-mipmap navi_s_27
-mipmap navi_s_28
-mipmap navi_s_29
-mipmap navi_s_3
-mipmap navi_s_35
-mipmap navi_s_4
-mipmap navi_s_42
-mipmap navi_s_43
-mipmap navi_s_44
-mipmap navi_s_5
-mipmap navi_s_501
-mipmap navi_s_502
-mipmap navi_s_503
-mipmap navi_s_6
-mipmap navi_s_7
-mipmap navi_s_8
-mipmap navi_s_9
-mipmap navi_tmcbar_cursor
-mipmap panel_search_indicator_p
-mipmap panel_search_indicator_s
-mipmap poires
-mipmap poires_a
-mipmap poires_b
-mipmap poires_c
-mipmap poires_d
-mipmap poires_e
-mipmap poires_f
-mipmap poires_g
-mipmap poires_his
-mipmap routebook_icon1001
-mipmap sector
-mipmap stat_sys_download_anim0
-mipmap stat_sys_download_anim1
-mipmap stat_sys_download_anim2
-mipmap stat_sys_download_anim3
-mipmap stat_sys_download_anim4
-mipmap stat_sys_download_anim5
-mipmap sym_keyboard_delete
-mipmap ui_menu_clear
-mipmap ui_menu_exit
-mipmap ui_navigate
-mipmap water
-mipmap yellow_dot
-mipmap zoom_in_day
-mipmap zoom_in_night
-mipmap zoom_out_day
-mipmap zoom_out_night
-raw car
-raw putonghua_f1
-raw putonghua_f2
-raw putonghua_f3
-raw putonghua_f4
-raw putonghua_f5
-raw putonghua_f6
-raw theme
-raw version
-string Angle1
-string Angle2
-string Angle3
-string Disclaimer
-string DisclaimerInfo
-string High
-string Initial
-string Speed
-string abc_action_bar_home_description
-string abc_action_bar_up_description
-string abc_action_menu_overflow_description
-string abc_action_mode_done
-string abc_activity_chooser_view_see_all
-string abc_activitychooserview_choose_application
-string abc_capital_off
-string abc_capital_on
-string abc_font_family_body_1_material
-string abc_font_family_body_2_material
-string abc_font_family_button_material
-string abc_font_family_caption_material
-string abc_font_family_display_1_material
-string abc_font_family_display_2_material
-string abc_font_family_display_3_material
-string abc_font_family_display_4_material
-string abc_font_family_headline_material
-string abc_font_family_menu_material
-string abc_font_family_subhead_material
-string abc_font_family_title_material
-string abc_menu_alt_shortcut_label
-string abc_menu_ctrl_shortcut_label
-string abc_menu_delete_shortcut_label
-string abc_menu_enter_shortcut_label
-string abc_menu_function_shortcut_label
-string abc_menu_meta_shortcut_label
-string abc_menu_shift_shortcut_label
-string abc_menu_space_shortcut_label
-string abc_menu_sym_shortcut_label
-string abc_prepend_shortcut_label
-string abc_search_hint
-string abc_searchview_description_clear
-string abc_searchview_description_query
-string abc_searchview_description_search
-string abc_searchview_description_submit
-string abc_searchview_description_voice
-string abc_shareactionprovider_share_with
-string abc_shareactionprovider_share_with_application
-string abc_toolbar_collapse_description
-string add_ch_toast
-string age_prompt
-string app
-string app_name
-string aspeed
-string brvah_load_complete
-string brvah_load_end
-string brvah_load_failed
-string brvah_loading
-string cancelBtn
-string ch_name_illegal
-string ch_name_null
-string ch_name_presence
-string change_ch_name
-string comment_err
-string comment_suc
-string crash_dialog_comment_prompt
-string crash_dialog_text
-string crash_dialog_title
-string downloadMap
-string drivetime
-string email_sensitive_words_error
-string freqOfspeedDown
-string freqOfspeedUp
-string freqOfturn
-string greater_than_
-string heading
-string highestspeed
-string highspeedtime
-string hottime
-string idlingtime
-string infowindow_snippet
-string infowindow_title
-string input_null
-string input_too_long
-string input_user_name
-string keyLable_0
-string keyLable_1
-string keyLable_12
-string keyLable_13
-string keyLable_14
-string keyLable_2
-string keyLable_3
-string keyLable_4
-string keyLable_5
-string keyLable_6
-string keyLable_7
-string keyLable_8
-string keyLable_9
-string keyLable_a
-string keyLable_b
-string keyLable_c
-string keyLable_d
-string keyLable_del
-string keyLable_e
-string keyLable_f
-string keyLable_g
-string keyLable_h
-string keyLable_heng
-string keyLable_i
-string keyLable_input_type_bihua
-string keyLable_input_type_jianpin
-string keyLable_input_type_quanpin
-string keyLable_j
-string keyLable_k
-string keyLable_keboard_style_qwerty
-string keyLable_keboard_style_t9
-string keyLable_l
-string keyLable_ll
-string keyLable_m
-string keyLable_n
-string keyLable_o
-string keyLable_ok
-string keyLable_p
-string keyLable_q
-string keyLable_r
-string keyLable_s
-string keyLable_search
-string keyLable_t
-string keyLable_u
-string keyLable_v
-string keyLable_w
-string keyLable_x
-string keyLable_xing
-string keyLable_y
-string keyLable_z
-string l
-string location_err
-string lowspeedtime
-string menu_more
-string menu_settings
-string midspeedtime
-string module_commons_button_cancel
-string module_commons_button_ok
-string module_commons_exit_navi_content
-string net_err
-string net_timeout
-string nickname_sensitive_words_error
-string no_ch
-string no_sd
-string nullInitial
-string panel_Traffic_jam_number
-string panel_down_channel
-string panel_down_dest
-string panel_down_dest_select
-string panel_down_mute
-string panel_down_share
-string panel_search_btn
-string panel_search_voice
-string panel_seperator
-string panel_share_trf_accident
-string panel_share_trf_event
-string panel_share_trf_police
-string panel_share_trf_road
-string planet_prompt
-string r
-string re_input_user_name
-string reg_err
-string search_menu_title
-string sendBtn
-string serv_err
-string sex_prompt
-string starttime
-string status_bar_notification_info_overflow
-string stoptime
-string title_activity_map
-string totaltime
-string ui_cancel
-string ui_exit
-string ui_finish
-string ui_ok
-string updat_err
-string updat_suc
-string update_server
-string user_name_error
-string user_name_presence
-string vehicle_GONE
-string vehicle_VISIBLE
-style AlertDialog_AppCompat
-style AlertDialog_AppCompat_Light
-style Animation_AppCompat_Dialog
-style Animation_AppCompat_DropDownUp
-style Animation_AppCompat_Tooltip
-style AppTheme
-style BaseFloatDialogStyle
-style Base_AlertDialog_AppCompat
-style Base_AlertDialog_AppCompat_Light
-style Base_Animation_AppCompat_Dialog
-style Base_Animation_AppCompat_DropDownUp
-style Base_Animation_AppCompat_Tooltip
-style Base_CardView
-style Base_DialogWindowTitleBackground_AppCompat
-style Base_DialogWindowTitle_AppCompat
-style Base_TextAppearance_AppCompat
-style Base_TextAppearance_AppCompat_Body1
-style Base_TextAppearance_AppCompat_Body2
-style Base_TextAppearance_AppCompat_Button
-style Base_TextAppearance_AppCompat_Caption
-style Base_TextAppearance_AppCompat_Display1
-style Base_TextAppearance_AppCompat_Display2
-style Base_TextAppearance_AppCompat_Display3
-style Base_TextAppearance_AppCompat_Display4
-style Base_TextAppearance_AppCompat_Headline
-style Base_TextAppearance_AppCompat_Inverse
-style Base_TextAppearance_AppCompat_Large
-style Base_TextAppearance_AppCompat_Large_Inverse
-style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large
-style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small
-style Base_TextAppearance_AppCompat_Medium
-style Base_TextAppearance_AppCompat_Medium_Inverse
-style Base_TextAppearance_AppCompat_Menu
-style Base_TextAppearance_AppCompat_SearchResult
-style Base_TextAppearance_AppCompat_SearchResult_Subtitle
-style Base_TextAppearance_AppCompat_SearchResult_Title
-style Base_TextAppearance_AppCompat_Small
-style Base_TextAppearance_AppCompat_Small_Inverse
-style Base_TextAppearance_AppCompat_Subhead
-style Base_TextAppearance_AppCompat_Subhead_Inverse
-style Base_TextAppearance_AppCompat_Title
-style Base_TextAppearance_AppCompat_Title_Inverse
-style Base_TextAppearance_AppCompat_Tooltip
-style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu
-style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle
-style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse
-style Base_TextAppearance_AppCompat_Widget_ActionBar_Title
-style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse
-style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle
-style Base_TextAppearance_AppCompat_Widget_ActionMode_Title
-style Base_TextAppearance_AppCompat_Widget_Button
-style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored
-style Base_TextAppearance_AppCompat_Widget_Button_Colored
-style Base_TextAppearance_AppCompat_Widget_Button_Inverse
-style Base_TextAppearance_AppCompat_Widget_DropDownItem
-style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header
-style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large
-style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small
-style Base_TextAppearance_AppCompat_Widget_Switch
-style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem
-style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item
-style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle
-style Base_TextAppearance_Widget_AppCompat_Toolbar_Title
-style Base_ThemeOverlay_AppCompat
-style Base_ThemeOverlay_AppCompat_ActionBar
-style Base_ThemeOverlay_AppCompat_Dark
-style Base_ThemeOverlay_AppCompat_Dark_ActionBar
-style Base_ThemeOverlay_AppCompat_Dialog
-style Base_ThemeOverlay_AppCompat_Dialog_Alert
-style Base_ThemeOverlay_AppCompat_Light
-style Base_Theme_AppCompat
-style Base_Theme_AppCompat_CompactMenu
-style Base_Theme_AppCompat_Dialog
-style Base_Theme_AppCompat_DialogWhenLarge
-style Base_Theme_AppCompat_Dialog_Alert
-style Base_Theme_AppCompat_Dialog_FixedSize
-style Base_Theme_AppCompat_Dialog_MinWidth
-style Base_Theme_AppCompat_Light
-style Base_Theme_AppCompat_Light_DarkActionBar
-style Base_Theme_AppCompat_Light_Dialog
-style Base_Theme_AppCompat_Light_DialogWhenLarge
-style Base_Theme_AppCompat_Light_Dialog_Alert
-style Base_Theme_AppCompat_Light_Dialog_FixedSize
-style Base_Theme_AppCompat_Light_Dialog_MinWidth
-style Base_V21_ThemeOverlay_AppCompat_Dialog
-style Base_V21_Theme_AppCompat
-style Base_V21_Theme_AppCompat_Dialog
-style Base_V21_Theme_AppCompat_Light
-style Base_V21_Theme_AppCompat_Light_Dialog
-style Base_V22_Theme_AppCompat
-style Base_V22_Theme_AppCompat_Light
-style Base_V23_Theme_AppCompat
-style Base_V23_Theme_AppCompat_Light
-style Base_V26_Theme_AppCompat
-style Base_V26_Theme_AppCompat_Light
-style Base_V26_Widget_AppCompat_Toolbar
-style Base_V28_Theme_AppCompat
-style Base_V28_Theme_AppCompat_Light
-style Base_V7_ThemeOverlay_AppCompat_Dialog
-style Base_V7_Theme_AppCompat
-style Base_V7_Theme_AppCompat_Dialog
-style Base_V7_Theme_AppCompat_Light
-style Base_V7_Theme_AppCompat_Light_Dialog
-style Base_V7_Widget_AppCompat_AutoCompleteTextView
-style Base_V7_Widget_AppCompat_EditText
-style Base_V7_Widget_AppCompat_Toolbar
-style Base_Widget_AppCompat_ActionBar
-style Base_Widget_AppCompat_ActionBar_Solid
-style Base_Widget_AppCompat_ActionBar_TabBar
-style Base_Widget_AppCompat_ActionBar_TabText
-style Base_Widget_AppCompat_ActionBar_TabView
-style Base_Widget_AppCompat_ActionButton
-style Base_Widget_AppCompat_ActionButton_CloseMode
-style Base_Widget_AppCompat_ActionButton_Overflow
-style Base_Widget_AppCompat_ActionMode
-style Base_Widget_AppCompat_ActivityChooserView
-style Base_Widget_AppCompat_AutoCompleteTextView
-style Base_Widget_AppCompat_Button
-style Base_Widget_AppCompat_ButtonBar
-style Base_Widget_AppCompat_ButtonBar_AlertDialog
-style Base_Widget_AppCompat_Button_Borderless
-style Base_Widget_AppCompat_Button_Borderless_Colored
-style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog
-style Base_Widget_AppCompat_Button_Colored
-style Base_Widget_AppCompat_Button_Small
-style Base_Widget_AppCompat_CompoundButton_CheckBox
-style Base_Widget_AppCompat_CompoundButton_RadioButton
-style Base_Widget_AppCompat_CompoundButton_Switch
-style Base_Widget_AppCompat_DrawerArrowToggle
-style Base_Widget_AppCompat_DrawerArrowToggle_Common
-style Base_Widget_AppCompat_DropDownItem_Spinner
-style Base_Widget_AppCompat_EditText
-style Base_Widget_AppCompat_ImageButton
-style Base_Widget_AppCompat_Light_ActionBar
-style Base_Widget_AppCompat_Light_ActionBar_Solid
-style Base_Widget_AppCompat_Light_ActionBar_TabBar
-style Base_Widget_AppCompat_Light_ActionBar_TabText
-style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse
-style Base_Widget_AppCompat_Light_ActionBar_TabView
-style Base_Widget_AppCompat_Light_PopupMenu
-style Base_Widget_AppCompat_Light_PopupMenu_Overflow
-style Base_Widget_AppCompat_ListMenuView
-style Base_Widget_AppCompat_ListPopupWindow
-style Base_Widget_AppCompat_ListView
-style Base_Widget_AppCompat_ListView_DropDown
-style Base_Widget_AppCompat_ListView_Menu
-style Base_Widget_AppCompat_PopupMenu
-style Base_Widget_AppCompat_PopupMenu_Overflow
-style Base_Widget_AppCompat_PopupWindow
-style Base_Widget_AppCompat_ProgressBar
-style Base_Widget_AppCompat_ProgressBar_Horizontal
-style Base_Widget_AppCompat_RatingBar
-style Base_Widget_AppCompat_RatingBar_Indicator
-style Base_Widget_AppCompat_RatingBar_Small
-style Base_Widget_AppCompat_SearchView
-style Base_Widget_AppCompat_SearchView_ActionBar
-style Base_Widget_AppCompat_SeekBar
-style Base_Widget_AppCompat_SeekBar_Discrete
-style Base_Widget_AppCompat_Spinner
-style Base_Widget_AppCompat_Spinner_Underlined
-style Base_Widget_AppCompat_TextView
-style Base_Widget_AppCompat_TextView_SpinnerItem
-style Base_Widget_AppCompat_Toolbar
-style Base_Widget_AppCompat_Toolbar_Button_Navigation
-style CardView
-style CardView_Dark
-style CardView_Light
-style CircularProgress
-style Dialog_Fullscreen
-style Platform_AppCompat
-style Platform_AppCompat_Light
-style Platform_ThemeOverlay_AppCompat
-style Platform_ThemeOverlay_AppCompat_Dark
-style Platform_ThemeOverlay_AppCompat_Light
-style Platform_V21_AppCompat
-style Platform_V21_AppCompat_Light
-style Platform_V25_AppCompat
-style Platform_V25_AppCompat_Light
-style Platform_Widget_AppCompat_Spinner
-style RtlOverlay_DialogWindowTitle_AppCompat
-style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem
-style RtlOverlay_Widget_AppCompat_DialogTitle_Icon
-style RtlOverlay_Widget_AppCompat_PopupMenuItem
-style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup
-style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut
-style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow
-style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text
-style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title
-style RtlOverlay_Widget_AppCompat_SearchView_MagIcon
-style RtlOverlay_Widget_AppCompat_Search_DropDown
-style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1
-style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2
-style RtlOverlay_Widget_AppCompat_Search_DropDown_Query
-style RtlOverlay_Widget_AppCompat_Search_DropDown_Text
-style RtlUnderlay_Widget_AppCompat_ActionButton
-style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow
-style TextAppearance_AppCompat
-style TextAppearance_AppCompat_Body1
-style TextAppearance_AppCompat_Body2
-style TextAppearance_AppCompat_Button
-style TextAppearance_AppCompat_Caption
-style TextAppearance_AppCompat_Display1
-style TextAppearance_AppCompat_Display2
-style TextAppearance_AppCompat_Display3
-style TextAppearance_AppCompat_Display4
-style TextAppearance_AppCompat_Headline
-style TextAppearance_AppCompat_Inverse
-style TextAppearance_AppCompat_Large
-style TextAppearance_AppCompat_Large_Inverse
-style TextAppearance_AppCompat_Light_SearchResult_Subtitle
-style TextAppearance_AppCompat_Light_SearchResult_Title
-style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large
-style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small
-style TextAppearance_AppCompat_Medium
-style TextAppearance_AppCompat_Medium_Inverse
-style TextAppearance_AppCompat_Menu
-style TextAppearance_AppCompat_SearchResult_Subtitle
-style TextAppearance_AppCompat_SearchResult_Title
-style TextAppearance_AppCompat_Small
-style TextAppearance_AppCompat_Small_Inverse
-style TextAppearance_AppCompat_Subhead
-style TextAppearance_AppCompat_Subhead_Inverse
-style TextAppearance_AppCompat_Title
-style TextAppearance_AppCompat_Title_Inverse
-style TextAppearance_AppCompat_Tooltip
-style TextAppearance_AppCompat_Widget_ActionBar_Menu
-style TextAppearance_AppCompat_Widget_ActionBar_Subtitle
-style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse
-style TextAppearance_AppCompat_Widget_ActionBar_Title
-style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse
-style TextAppearance_AppCompat_Widget_ActionMode_Subtitle
-style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse
-style TextAppearance_AppCompat_Widget_ActionMode_Title
-style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse
-style TextAppearance_AppCompat_Widget_Button
-style TextAppearance_AppCompat_Widget_Button_Borderless_Colored
-style TextAppearance_AppCompat_Widget_Button_Colored
-style TextAppearance_AppCompat_Widget_Button_Inverse
-style TextAppearance_AppCompat_Widget_DropDownItem
-style TextAppearance_AppCompat_Widget_PopupMenu_Header
-style TextAppearance_AppCompat_Widget_PopupMenu_Large
-style TextAppearance_AppCompat_Widget_PopupMenu_Small
-style TextAppearance_AppCompat_Widget_Switch
-style TextAppearance_AppCompat_Widget_TextView_SpinnerItem
-style TextAppearance_Compat_Notification
-style TextAppearance_Compat_Notification_Info
-style TextAppearance_Compat_Notification_Info_Media
-style TextAppearance_Compat_Notification_Line2
-style TextAppearance_Compat_Notification_Line2_Media
-style TextAppearance_Compat_Notification_Media
-style TextAppearance_Compat_Notification_Time
-style TextAppearance_Compat_Notification_Time_Media
-style TextAppearance_Compat_Notification_Title
-style TextAppearance_Compat_Notification_Title_Media
-style TextAppearance_Widget_AppCompat_ExpandedMenu_Item
-style TextAppearance_Widget_AppCompat_Toolbar_Subtitle
-style TextAppearance_Widget_AppCompat_Toolbar_Title
-style ThemeOverlay_AppCompat
-style ThemeOverlay_AppCompat_ActionBar
-style ThemeOverlay_AppCompat_Dark
-style ThemeOverlay_AppCompat_Dark_ActionBar
-style ThemeOverlay_AppCompat_DayNight
-style ThemeOverlay_AppCompat_DayNight_ActionBar
-style ThemeOverlay_AppCompat_Dialog
-style ThemeOverlay_AppCompat_Dialog_Alert
-style ThemeOverlay_AppCompat_Light
-style Theme_AppCompat
-style Theme_AppCompat_CompactMenu
-style Theme_AppCompat_DayNight
-style Theme_AppCompat_DayNight_DarkActionBar
-style Theme_AppCompat_DayNight_Dialog
-style Theme_AppCompat_DayNight_DialogWhenLarge
-style Theme_AppCompat_DayNight_Dialog_Alert
-style Theme_AppCompat_DayNight_Dialog_MinWidth
-style Theme_AppCompat_DayNight_NoActionBar
-style Theme_AppCompat_Dialog
-style Theme_AppCompat_DialogWhenLarge
-style Theme_AppCompat_Dialog_Alert
-style Theme_AppCompat_Dialog_MinWidth
-style Theme_AppCompat_Light
-style Theme_AppCompat_Light_DarkActionBar
-style Theme_AppCompat_Light_Dialog
-style Theme_AppCompat_Light_DialogWhenLarge
-style Theme_AppCompat_Light_Dialog_Alert
-style Theme_AppCompat_Light_Dialog_MinWidth
-style Theme_AppCompat_Light_NoActionBar
-style Theme_AppCompat_NoActionBar
-style Widget_AppCompat_ActionBar
-style Widget_AppCompat_ActionBar_Solid
-style Widget_AppCompat_ActionBar_TabBar
-style Widget_AppCompat_ActionBar_TabText
-style Widget_AppCompat_ActionBar_TabView
-style Widget_AppCompat_ActionButton
-style Widget_AppCompat_ActionButton_CloseMode
-style Widget_AppCompat_ActionButton_Overflow
-style Widget_AppCompat_ActionMode
-style Widget_AppCompat_ActivityChooserView
-style Widget_AppCompat_AutoCompleteTextView
-style Widget_AppCompat_Button
-style Widget_AppCompat_ButtonBar
-style Widget_AppCompat_ButtonBar_AlertDialog
-style Widget_AppCompat_Button_Borderless
-style Widget_AppCompat_Button_Borderless_Colored
-style Widget_AppCompat_Button_ButtonBar_AlertDialog
-style Widget_AppCompat_Button_Colored
-style Widget_AppCompat_Button_Small
-style Widget_AppCompat_CompoundButton_CheckBox
-style Widget_AppCompat_CompoundButton_RadioButton
-style Widget_AppCompat_CompoundButton_Switch
-style Widget_AppCompat_DrawerArrowToggle
-style Widget_AppCompat_DropDownItem_Spinner
-style Widget_AppCompat_EditText
-style Widget_AppCompat_ImageButton
-style Widget_AppCompat_Light_ActionBar
-style Widget_AppCompat_Light_ActionBar_Solid
-style Widget_AppCompat_Light_ActionBar_Solid_Inverse
-style Widget_AppCompat_Light_ActionBar_TabBar
-style Widget_AppCompat_Light_ActionBar_TabBar_Inverse
-style Widget_AppCompat_Light_ActionBar_TabText
-style Widget_AppCompat_Light_ActionBar_TabText_Inverse
-style Widget_AppCompat_Light_ActionBar_TabView
-style Widget_AppCompat_Light_ActionBar_TabView_Inverse
-style Widget_AppCompat_Light_ActionButton
-style Widget_AppCompat_Light_ActionButton_CloseMode
-style Widget_AppCompat_Light_ActionButton_Overflow
-style Widget_AppCompat_Light_ActionMode_Inverse
-style Widget_AppCompat_Light_ActivityChooserView
-style Widget_AppCompat_Light_AutoCompleteTextView
-style Widget_AppCompat_Light_DropDownItem_Spinner
-style Widget_AppCompat_Light_ListPopupWindow
-style Widget_AppCompat_Light_ListView_DropDown
-style Widget_AppCompat_Light_PopupMenu
-style Widget_AppCompat_Light_PopupMenu_Overflow
-style Widget_AppCompat_Light_SearchView
-style Widget_AppCompat_Light_Spinner_DropDown_ActionBar
-style Widget_AppCompat_ListMenuView
-style Widget_AppCompat_ListPopupWindow
-style Widget_AppCompat_ListView
-style Widget_AppCompat_ListView_DropDown
-style Widget_AppCompat_ListView_Menu
-style Widget_AppCompat_PopupMenu
-style Widget_AppCompat_PopupMenu_Overflow
-style Widget_AppCompat_PopupWindow
-style Widget_AppCompat_ProgressBar
-style Widget_AppCompat_ProgressBar_Horizontal
-style Widget_AppCompat_RatingBar
-style Widget_AppCompat_RatingBar_Indicator
-style Widget_AppCompat_RatingBar_Small
-style Widget_AppCompat_SearchView
-style Widget_AppCompat_SearchView_ActionBar
-style Widget_AppCompat_SeekBar
-style Widget_AppCompat_SeekBar_Discrete
-style Widget_AppCompat_Spinner
-style Widget_AppCompat_Spinner_DropDown
-style Widget_AppCompat_Spinner_DropDown_ActionBar
-style Widget_AppCompat_Spinner_Underlined
-style Widget_AppCompat_TextView
-style Widget_AppCompat_TextView_SpinnerItem
-style Widget_AppCompat_Toolbar
-style Widget_AppCompat_Toolbar_Button_Navigation
-style Widget_Compat_NotificationActionContainer
-style Widget_Compat_NotificationActionText
-style Widget_Support_CoordinatorLayout
-style customHeartHeartRatingBarStyle
-style darkMode
-style lightMode
-style rb_map_nav
-style register_Dialog_Fullscreen
-style title
-styleable ActionBar background backgroundSplit backgroundStacked contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation customNavigationLayout displayOptions divider elevation height hideOnContentScroll homeAsUpIndicator homeLayout icon indeterminateProgressStyle itemPadding logo navigationMode popupTheme progressBarPadding progressBarStyle subtitle subtitleTextStyle title titleTextStyle
-styleable ActionBarLayout android_layout_gravity
-styleable ActionMenuItemView android_minWidth
-styleable ActionMenuView
-styleable ActionMode background backgroundSplit closeItemLayout height subtitleTextStyle titleTextStyle
-styleable ActivityChooserView expandActivityOverflowButtonDrawable initialActivityCount
-styleable AlertDialog android_layout buttonIconDimen buttonPanelSideLayout listItemLayout listLayout multiChoiceItemLayout showTitle singleChoiceItemLayout
-styleable AnimatedStateListDrawableCompat android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible
-styleable AnimatedStateListDrawableItem android_drawable android_id
-styleable AnimatedStateListDrawableTransition android_drawable android_fromId android_reversible android_toId
-styleable AppCompatImageView android_src srcCompat tint tintMode
-styleable AppCompatSeekBar android_thumb tickMark tickMarkTint tickMarkTintMode
-styleable AppCompatTextHelper android_drawableBottom android_drawableEnd android_drawableLeft android_drawableRight android_drawableStart android_drawableTop android_textAppearance
-styleable AppCompatTextView android_textAppearance autoSizeMaxTextSize autoSizeMinTextSize autoSizePresetSizes autoSizeStepGranularity autoSizeTextType drawableBottomCompat drawableEndCompat drawableLeftCompat drawableRightCompat drawableStartCompat drawableTint drawableTintMode drawableTopCompat firstBaselineToTopHeight fontFamily fontVariationSettings lastBaselineToBottomHeight lineHeight textAllCaps textLocale
-styleable AppCompatTheme actionBarDivider actionBarItemBackground actionBarPopupTheme actionBarSize actionBarSplitStyle actionBarStyle actionBarTabBarStyle actionBarTabStyle actionBarTabTextStyle actionBarTheme actionBarWidgetTheme actionButtonStyle actionDropDownStyle actionMenuTextAppearance actionMenuTextColor actionModeBackground actionModeCloseButtonStyle actionModeCloseDrawable actionModeCopyDrawable actionModeCutDrawable actionModeFindDrawable actionModePasteDrawable actionModePopupWindowStyle actionModeSelectAllDrawable actionModeShareDrawable actionModeSplitBackground actionModeStyle actionModeWebSearchDrawable actionOverflowButtonStyle actionOverflowMenuStyle activityChooserViewStyle alertDialogButtonGroupStyle alertDialogCenterButtons alertDialogStyle alertDialogTheme android_windowAnimationStyle android_windowIsFloating autoCompleteTextViewStyle borderlessButtonStyle buttonBarButtonStyle buttonBarNegativeButtonStyle buttonBarNeutralButtonStyle buttonBarPositiveButtonStyle buttonBarStyle buttonStyle buttonStyleSmall checkboxStyle checkedTextViewStyle colorAccent colorBackgroundFloating colorButtonNormal colorControlActivated colorControlHighlight colorControlNormal colorError colorPrimary colorPrimaryDark colorSwitchThumbNormal controlBackground dialogCornerRadius dialogPreferredPadding dialogTheme dividerHorizontal dividerVertical dropDownListViewStyle dropdownListPreferredItemHeight editTextBackground editTextColor editTextStyle homeAsUpIndicator imageButtonStyle listChoiceBackgroundIndicator listChoiceIndicatorMultipleAnimated listChoiceIndicatorSingleAnimated listDividerAlertDialog listMenuViewStyle listPopupWindowStyle listPreferredItemHeight listPreferredItemHeightLarge listPreferredItemHeightSmall listPreferredItemPaddingEnd listPreferredItemPaddingLeft listPreferredItemPaddingRight listPreferredItemPaddingStart panelBackground panelMenuListTheme panelMenuListWidth popupMenuStyle popupWindowStyle radioButtonStyle ratingBarStyle ratingBarStyleIndicator ratingBarStyleSmall searchViewStyle seekBarStyle selectableItemBackground selectableItemBackgroundBorderless spinnerDropDownItemStyle spinnerStyle switchStyle textAppearanceLargePopupMenu textAppearanceListItem textAppearanceListItemSecondary textAppearanceListItemSmall textAppearancePopupMenuHeader textAppearanceSearchResultSubtitle textAppearanceSearchResultTitle textAppearanceSmallPopupMenu textColorAlertDialogListItem textColorSearchUrl toolbarNavigationButtonStyle toolbarStyle tooltipForegroundColor tooltipFrameBackground viewInflaterClass windowActionBar windowActionBarOverlay windowActionModeOverlay windowFixedHeightMajor windowFixedHeightMinor windowFixedWidthMajor windowFixedWidthMinor windowMinWidthMajor windowMinWidthMinor windowNoTitle
-styleable ButtonBarContainerTheme buttonBarButtonStyle buttonBarStyle
-styleable ButtonBarLayout allowStacking
-styleable CardView android_minHeight android_minWidth cardBackgroundColor cardCornerRadius cardElevation cardMaxElevation cardPreventCornerOverlap cardUseCompatPadding contentPadding contentPaddingBottom contentPaddingLeft contentPaddingRight contentPaddingTop
-styleable CircularProgressDrawable cpd_inAnimDuration cpd_inStepColors cpd_inStepPercent cpd_initialAngle cpd_keepDuration cpd_maxSweepAngle cpd_minSweepAngle cpd_outAnimDuration cpd_padding cpd_reverse cpd_rotateDuration cpd_strokeColor cpd_strokeColors cpd_strokeSecondaryColor cpd_strokeSize cpd_transformDuration cpd_transformInterpolator pv_progressMode
-styleable ColorStateListItem alpha android_alpha android_color
-styleable CompoundButton android_button buttonCompat buttonTint buttonTintMode
-styleable ConstraintLayout_Layout android_maxHeight android_maxWidth android_minHeight android_minWidth android_orientation barrierAllowsGoneWidgets barrierDirection chainUseRtl constraintSet constraint_referenced_ids layout_constrainedHeight layout_constrainedWidth layout_constraintBaseline_creator layout_constraintBaseline_toBaselineOf layout_constraintBottom_creator layout_constraintBottom_toBottomOf layout_constraintBottom_toTopOf layout_constraintCircle layout_constraintCircleAngle layout_constraintCircleRadius layout_constraintDimensionRatio layout_constraintEnd_toEndOf layout_constraintEnd_toStartOf layout_constraintGuide_begin layout_constraintGuide_end layout_constraintGuide_percent layout_constraintHeight_default layout_constraintHeight_max layout_constraintHeight_min layout_constraintHeight_percent layout_constraintHorizontal_bias layout_constraintHorizontal_chainStyle layout_constraintHorizontal_weight layout_constraintLeft_creator layout_constraintLeft_toLeftOf layout_constraintLeft_toRightOf layout_constraintRight_creator layout_constraintRight_toLeftOf layout_constraintRight_toRightOf layout_constraintStart_toEndOf layout_constraintStart_toStartOf layout_constraintTop_creator layout_constraintTop_toBottomOf layout_constraintTop_toTopOf layout_constraintVertical_bias layout_constraintVertical_chainStyle layout_constraintVertical_weight layout_constraintWidth_default layout_constraintWidth_max layout_constraintWidth_min layout_constraintWidth_percent layout_editor_absoluteX layout_editor_absoluteY layout_goneMarginBottom layout_goneMarginEnd layout_goneMarginLeft layout_goneMarginRight layout_goneMarginStart layout_goneMarginTop layout_optimizationLevel
-styleable ConstraintLayout_placeholder content emptyVisibility
-styleable ConstraintSet android_alpha android_elevation android_id android_layout_height android_layout_marginBottom android_layout_marginEnd android_layout_marginLeft android_layout_marginRight android_layout_marginStart android_layout_marginTop android_layout_width android_maxHeight android_maxWidth android_minHeight android_minWidth android_orientation android_rotation android_rotationX android_rotationY android_scaleX android_scaleY android_transformPivotX android_transformPivotY android_translationX android_translationY android_translationZ android_visibility barrierAllowsGoneWidgets barrierDirection chainUseRtl constraint_referenced_ids layout_constrainedHeight layout_constrainedWidth layout_constraintBaseline_creator layout_constraintBaseline_toBaselineOf layout_constraintBottom_creator layout_constraintBottom_toBottomOf layout_constraintBottom_toTopOf layout_constraintCircle layout_constraintCircleAngle layout_constraintCircleRadius layout_constraintDimensionRatio layout_constraintEnd_toEndOf layout_constraintEnd_toStartOf layout_constraintGuide_begin layout_constraintGuide_end layout_constraintGuide_percent layout_constraintHeight_default layout_constraintHeight_max layout_constraintHeight_min layout_constraintHeight_percent layout_constraintHorizontal_bias layout_constraintHorizontal_chainStyle layout_constraintHorizontal_weight layout_constraintLeft_creator layout_constraintLeft_toLeftOf layout_constraintLeft_toRightOf layout_constraintRight_creator layout_constraintRight_toLeftOf layout_constraintRight_toRightOf layout_constraintStart_toEndOf layout_constraintStart_toStartOf layout_constraintTop_creator layout_constraintTop_toBottomOf layout_constraintTop_toTopOf layout_constraintVertical_bias layout_constraintVertical_chainStyle layout_constraintVertical_weight layout_constraintWidth_default layout_constraintWidth_max layout_constraintWidth_min layout_constraintWidth_percent layout_editor_absoluteX layout_editor_absoluteY layout_goneMarginBottom layout_goneMarginEnd layout_goneMarginLeft layout_goneMarginRight layout_goneMarginStart layout_goneMarginTop
-styleable CoordinatorLayout keylines statusBarBackground
-styleable CoordinatorLayout_Layout android_layout_gravity layout_anchor layout_anchorGravity layout_behavior layout_dodgeInsetEdges layout_insetEdge layout_keyline
-styleable CustomCircleImageView civ_border_color civ_border_overlay civ_border_width civ_fill_color
-styleable CustomRatingBar clickable elenmentCount elenmentEmpty elenmentFill elenmentHarf elenmentHeight elenmentPadding elenmentStep elenmentWidth stepSize
-styleable DiscreteScrollView dsv_orientation
-styleable DrawerArrowToggle arrowHeadLength arrowShaftLength barLength color drawableSize gapBetweenBars spinBars thickness
-styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery
-styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex
-styleable GenericDraweeHierarchy actualImageScaleType backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomLeft roundBottomRight roundTopLeft roundTopRight roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio
-styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type
-styleable GradientColorItem android_color android_offset
-styleable LinearConstraintLayout android_orientation
-styleable LinearLayoutCompat android_baselineAligned android_baselineAlignedChildIndex android_gravity android_orientation android_weightSum divider dividerPadding measureWithLargestChild showDividers
-styleable LinearLayoutCompat_Layout android_layout_gravity android_layout_height android_layout_weight android_layout_width
-styleable ListPopupWindow android_dropDownHorizontalOffset android_dropDownVerticalOffset
-styleable MenuGroup android_checkableBehavior android_enabled android_id android_menuCategory android_orderInCategory android_visible
-styleable MenuItem actionLayout actionProviderClass actionViewClass alphabeticModifiers android_alphabeticShortcut android_checkable android_checked android_enabled android_icon android_id android_menuCategory android_numericShortcut android_onClick android_orderInCategory android_title android_titleCondensed android_visible contentDescription iconTint iconTintMode numericModifiers showAsAction tooltipText
-styleable MenuView android_headerBackground android_horizontalDivider android_itemBackground android_itemIconDisabledAlpha android_itemTextAppearance android_verticalDivider android_windowAnimationStyle preserveIconSpacing subMenuArrow
-styleable MogoImageView miv_blurRadius miv_borderColor miv_bottomLeftRadius miv_bottomRightRadius miv_failureHolder miv_isBlur miv_overlayImageId miv_placeHolder miv_radius miv_shape miv_shapeBorderWidth miv_topLeftRadius miv_topRightRadius
-styleable MogoSkinBackgroundHelper android_background
-styleable MogoSkinCompatImageView android_src android_tint srcCompat tint
-styleable MogoSkinCompatTextHelper android_drawableBottom android_drawableEnd android_drawableLeft android_drawableRight android_drawableStart android_drawableTop android_textAppearance
-styleable MogoSkinTextAppearance android_shadowColor android_shadowDx android_shadowDy android_shadowRadius android_textColor android_textColorHint android_textSize android_textStyle android_typeface textAllCaps
-styleable PopupWindow android_popupAnimationStyle android_popupBackground overlapAnchor
-styleable PopupWindowBackgroundState state_above_anchor
-styleable RealtimeBlurView realtimeBlurRadius realtimeDownsampleFactor realtimeOverlayColor xRadius yRadius
-styleable RecycleListView paddingBottomNoButtons paddingTopNoTitle
-styleable RecyclerView android_clipToPadding android_descendantFocusability android_orientation fastScrollEnabled fastScrollHorizontalThumbDrawable fastScrollHorizontalTrackDrawable fastScrollVerticalThumbDrawable fastScrollVerticalTrackDrawable layoutManager reverseLayout spanCount stackFromEnd
-styleable SearchView android_focusable android_imeOptions android_inputType android_maxWidth closeIcon commitIcon defaultQueryHint goIcon iconifiedByDefault layout queryBackground queryHint searchHintIcon searchIcon submitBackground suggestionRowLayout voiceIcon
-styleable SimpleDraweeView actualImageUri
-styleable SkinCompatProgressBar android_indeterminateDrawable android_progressDrawable
-styleable Spinner android_dropDownWidth android_entries android_popupBackground android_prompt popupTheme
-styleable StateListDrawable android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible
-styleable StateListDrawableItem android_drawable
-styleable SwitchCompat android_textOff android_textOn android_thumb showText splitTrack switchMinWidth switchPadding switchTextAppearance thumbTextPadding thumbTint thumbTintMode track trackTint trackTintMode
-styleable TextAppearance android_fontFamily android_shadowColor android_shadowDx android_shadowDy android_shadowRadius android_textColor android_textColorHint android_textColorLink android_textFontWeight android_textSize android_textStyle android_typeface fontFamily fontVariationSettings textAllCaps textLocale
-styleable Toolbar android_gravity android_minHeight buttonGravity collapseContentDescription collapseIcon contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation logo logoDescription maxButtonHeight menu navigationContentDescription navigationIcon popupTheme subtitle subtitleTextAppearance subtitleTextColor title titleMargin titleMarginBottom titleMarginEnd titleMarginStart titleMarginTop titleMargins titleTextAppearance titleTextColor
-styleable View android_focusable android_theme paddingEnd paddingStart theme
-styleable ViewBackgroundHelper android_background backgroundTint backgroundTintMode
-styleable ViewStubCompat android_id android_inflatedId android_layout
diff --git a/modules/mogo-modules-mvision/build/intermediates/runtime_library_classes/debug/classes.jar b/modules/mogo-modules-mvision/build/intermediates/runtime_library_classes/debug/classes.jar
deleted file mode 100644
index cd05062d8e..0000000000
Binary files a/modules/mogo-modules-mvision/build/intermediates/runtime_library_classes/debug/classes.jar and /dev/null differ
diff --git a/modules/mogo-modules-mvision/build/intermediates/symbols/debug/R.txt b/modules/mogo-modules-mvision/build/intermediates/symbols/debug/R.txt
deleted file mode 100644
index 290b9e137e..0000000000
--- a/modules/mogo-modules-mvision/build/intermediates/symbols/debug/R.txt
+++ /dev/null
@@ -1,4288 +0,0 @@
-int anim abc_fade_in 0x7f010001
-int anim abc_fade_out 0x7f010002
-int anim abc_grow_fade_in_from_bottom 0x7f010003
-int anim abc_popup_enter 0x7f010004
-int anim abc_popup_exit 0x7f010005
-int anim abc_shrink_fade_out_from_bottom 0x7f010006
-int anim abc_slide_in_bottom 0x7f010007
-int anim abc_slide_in_top 0x7f010008
-int anim abc_slide_out_bottom 0x7f010009
-int anim abc_slide_out_top 0x7f01000a
-int anim abc_tooltip_enter 0x7f01000b
-int anim abc_tooltip_exit 0x7f01000c
-int anim bottom_in 0x7f01000d
-int anim bottom_out 0x7f01000e
-int anim btn_checkbox_to_checked_box_inner_merged_animation 0x7f01000f
-int anim btn_checkbox_to_checked_box_outer_merged_animation 0x7f010010
-int anim btn_checkbox_to_checked_icon_null_animation 0x7f010011
-int anim btn_checkbox_to_unchecked_box_inner_merged_animation 0x7f010012
-int anim btn_checkbox_to_unchecked_check_path_merged_animation 0x7f010013
-int anim btn_checkbox_to_unchecked_icon_null_animation 0x7f010014
-int anim btn_radio_to_off_mtrl_dot_group_animation 0x7f010015
-int anim btn_radio_to_off_mtrl_ring_outer_animation 0x7f010016
-int anim btn_radio_to_off_mtrl_ring_outer_path_animation 0x7f010017
-int anim btn_radio_to_on_mtrl_dot_group_animation 0x7f010018
-int anim btn_radio_to_on_mtrl_ring_outer_animation 0x7f010019
-int anim btn_radio_to_on_mtrl_ring_outer_path_animation 0x7f01001a
-int anim cycle_7_1 0x7f01001b
-int anim left_in 0x7f01001c
-int anim left_out 0x7f01001d
-int anim push_left_in 0x7f01001e
-int anim right_in 0x7f01001f
-int anim right_out 0x7f010020
-int anim shake 0x7f010021
-int anim slide_top_to_bottom 0x7f010022
-int anim top_in 0x7f010023
-int anim top_out 0x7f010024
-int array ages 0x7f030001
-int array gender 0x7f030002
-int array list_preference 0x7f030003
-int array map_style 0x7f030004
-int array map_style_value 0x7f030005
-int array mapdist 0x7f030006
-int array mapscale 0x7f030007
-int array values_list_preference 0x7f030008
-int attr actionBarDivider 0x7f040001
-int attr actionBarItemBackground 0x7f040002
-int attr actionBarPopupTheme 0x7f040003
-int attr actionBarSize 0x7f040004
-int attr actionBarSplitStyle 0x7f040005
-int attr actionBarStyle 0x7f040006
-int attr actionBarTabBarStyle 0x7f040007
-int attr actionBarTabStyle 0x7f040008
-int attr actionBarTabTextStyle 0x7f040009
-int attr actionBarTheme 0x7f04000a
-int attr actionBarWidgetTheme 0x7f04000b
-int attr actionButtonStyle 0x7f04000c
-int attr actionDropDownStyle 0x7f04000d
-int attr actionLayout 0x7f04000e
-int attr actionMenuTextAppearance 0x7f04000f
-int attr actionMenuTextColor 0x7f040010
-int attr actionModeBackground 0x7f040011
-int attr actionModeCloseButtonStyle 0x7f040012
-int attr actionModeCloseDrawable 0x7f040013
-int attr actionModeCopyDrawable 0x7f040014
-int attr actionModeCutDrawable 0x7f040015
-int attr actionModeFindDrawable 0x7f040016
-int attr actionModePasteDrawable 0x7f040017
-int attr actionModePopupWindowStyle 0x7f040018
-int attr actionModeSelectAllDrawable 0x7f040019
-int attr actionModeShareDrawable 0x7f04001a
-int attr actionModeSplitBackground 0x7f04001b
-int attr actionModeStyle 0x7f04001c
-int attr actionModeWebSearchDrawable 0x7f04001d
-int attr actionOverflowButtonStyle 0x7f04001e
-int attr actionOverflowMenuStyle 0x7f04001f
-int attr actionProviderClass 0x7f040020
-int attr actionViewClass 0x7f040021
-int attr activityChooserViewStyle 0x7f040022
-int attr actualImageScaleType 0x7f040023
-int attr actualImageUri 0x7f040024
-int attr alertDialogButtonGroupStyle 0x7f040025
-int attr alertDialogCenterButtons 0x7f040026
-int attr alertDialogStyle 0x7f040027
-int attr alertDialogTheme 0x7f040028
-int attr allowStacking 0x7f040029
-int attr alpha 0x7f04002a
-int attr alphabeticModifiers 0x7f04002b
-int attr arrowHeadLength 0x7f04002c
-int attr arrowShaftLength 0x7f04002d
-int attr autoCompleteTextViewStyle 0x7f04002e
-int attr autoSizeMaxTextSize 0x7f04002f
-int attr autoSizeMinTextSize 0x7f040030
-int attr autoSizePresetSizes 0x7f040031
-int attr autoSizeStepGranularity 0x7f040032
-int attr autoSizeTextType 0x7f040033
-int attr background 0x7f040034
-int attr backgroundImage 0x7f040035
-int attr backgroundSplit 0x7f040036
-int attr backgroundStacked 0x7f040037
-int attr backgroundTint 0x7f040038
-int attr backgroundTintMode 0x7f040039
-int attr barLength 0x7f04003a
-int attr barrierAllowsGoneWidgets 0x7f04003b
-int attr barrierDirection 0x7f04003c
-int attr borderlessButtonStyle 0x7f04003d
-int attr buttonBarButtonStyle 0x7f04003e
-int attr buttonBarNegativeButtonStyle 0x7f04003f
-int attr buttonBarNeutralButtonStyle 0x7f040040
-int attr buttonBarPositiveButtonStyle 0x7f040041
-int attr buttonBarStyle 0x7f040042
-int attr buttonCompat 0x7f040043
-int attr buttonGravity 0x7f040044
-int attr buttonIconDimen 0x7f040045
-int attr buttonPanelSideLayout 0x7f040046
-int attr buttonStyle 0x7f040047
-int attr buttonStyleSmall 0x7f040048
-int attr buttonTint 0x7f040049
-int attr buttonTintMode 0x7f04004a
-int attr cardBackgroundColor 0x7f04004b
-int attr cardCornerRadius 0x7f04004c
-int attr cardElevation 0x7f04004d
-int attr cardMaxElevation 0x7f04004e
-int attr cardPreventCornerOverlap 0x7f04004f
-int attr cardUseCompatPadding 0x7f040050
-int attr cardViewStyle 0x7f040051
-int attr chainUseRtl 0x7f040052
-int attr checkboxStyle 0x7f040053
-int attr checkedTextViewStyle 0x7f040054
-int attr civ_border_color 0x7f040055
-int attr civ_border_overlay 0x7f040056
-int attr civ_border_width 0x7f040057
-int attr civ_fill_color 0x7f040058
-int attr clickable 0x7f040059
-int attr closeIcon 0x7f04005a
-int attr closeItemLayout 0x7f04005b
-int attr collapseContentDescription 0x7f04005c
-int attr collapseIcon 0x7f04005d
-int attr color 0x7f04005e
-int attr colorAccent 0x7f04005f
-int attr colorBackgroundFloating 0x7f040060
-int attr colorButtonNormal 0x7f040061
-int attr colorControlActivated 0x7f040062
-int attr colorControlHighlight 0x7f040063
-int attr colorControlNormal 0x7f040064
-int attr colorError 0x7f040065
-int attr colorPrimary 0x7f040066
-int attr colorPrimaryDark 0x7f040067
-int attr colorSwitchThumbNormal 0x7f040068
-int attr commitIcon 0x7f040069
-int attr constraintSet 0x7f04006a
-int attr constraint_referenced_ids 0x7f04006b
-int attr content 0x7f04006c
-int attr contentDescription 0x7f04006d
-int attr contentInsetEnd 0x7f04006e
-int attr contentInsetEndWithActions 0x7f04006f
-int attr contentInsetLeft 0x7f040070
-int attr contentInsetRight 0x7f040071
-int attr contentInsetStart 0x7f040072
-int attr contentInsetStartWithNavigation 0x7f040073
-int attr contentPadding 0x7f040074
-int attr contentPaddingBottom 0x7f040075
-int attr contentPaddingLeft 0x7f040076
-int attr contentPaddingRight 0x7f040077
-int attr contentPaddingTop 0x7f040078
-int attr controlBackground 0x7f040079
-int attr coordinatorLayoutStyle 0x7f04007a
-int attr cpd_inAnimDuration 0x7f04007b
-int attr cpd_inStepColors 0x7f04007c
-int attr cpd_inStepPercent 0x7f04007d
-int attr cpd_initialAngle 0x7f04007e
-int attr cpd_keepDuration 0x7f04007f
-int attr cpd_maxSweepAngle 0x7f040080
-int attr cpd_minSweepAngle 0x7f040081
-int attr cpd_outAnimDuration 0x7f040082
-int attr cpd_padding 0x7f040083
-int attr cpd_reverse 0x7f040084
-int attr cpd_rotateDuration 0x7f040085
-int attr cpd_strokeColor 0x7f040086
-int attr cpd_strokeColors 0x7f040087
-int attr cpd_strokeSecondaryColor 0x7f040088
-int attr cpd_strokeSize 0x7f040089
-int attr cpd_transformDuration 0x7f04008a
-int attr cpd_transformInterpolator 0x7f04008b
-int attr customNavigationLayout 0x7f04008c
-int attr defaultQueryHint 0x7f04008d
-int attr dialogCornerRadius 0x7f04008e
-int attr dialogPreferredPadding 0x7f04008f
-int attr dialogTheme 0x7f040090
-int attr displayOptions 0x7f040091
-int attr divider 0x7f040092
-int attr dividerHorizontal 0x7f040093
-int attr dividerPadding 0x7f040094
-int attr dividerVertical 0x7f040095
-int attr drawableBottomCompat 0x7f040096
-int attr drawableEndCompat 0x7f040097
-int attr drawableLeftCompat 0x7f040098
-int attr drawableRightCompat 0x7f040099
-int attr drawableSize 0x7f04009a
-int attr drawableStartCompat 0x7f04009b
-int attr drawableTint 0x7f04009c
-int attr drawableTintMode 0x7f04009d
-int attr drawableTopCompat 0x7f04009e
-int attr drawerArrowStyle 0x7f04009f
-int attr dropDownListViewStyle 0x7f0400a0
-int attr dropdownListPreferredItemHeight 0x7f0400a1
-int attr dsv_orientation 0x7f0400a2
-int attr editTextBackground 0x7f0400a3
-int attr editTextColor 0x7f0400a4
-int attr editTextStyle 0x7f0400a5
-int attr elenmentCount 0x7f0400a6
-int attr elenmentEmpty 0x7f0400a7
-int attr elenmentFill 0x7f0400a8
-int attr elenmentHarf 0x7f0400a9
-int attr elenmentHeight 0x7f0400aa
-int attr elenmentPadding 0x7f0400ab
-int attr elenmentStep 0x7f0400ac
-int attr elenmentWidth 0x7f0400ad
-int attr elevation 0x7f0400ae
-int attr emptyVisibility 0x7f0400af
-int attr expandActivityOverflowButtonDrawable 0x7f0400b0
-int attr fadeDuration 0x7f0400b1
-int attr failureImage 0x7f0400b2
-int attr failureImageScaleType 0x7f0400b3
-int attr fastScrollEnabled 0x7f0400b4
-int attr fastScrollHorizontalThumbDrawable 0x7f0400b5
-int attr fastScrollHorizontalTrackDrawable 0x7f0400b6
-int attr fastScrollVerticalThumbDrawable 0x7f0400b7
-int attr fastScrollVerticalTrackDrawable 0x7f0400b8
-int attr firstBaselineToTopHeight 0x7f0400b9
-int attr font 0x7f0400ba
-int attr fontFamily 0x7f0400bb
-int attr fontProviderAuthority 0x7f0400bc
-int attr fontProviderCerts 0x7f0400bd
-int attr fontProviderFetchStrategy 0x7f0400be
-int attr fontProviderFetchTimeout 0x7f0400bf
-int attr fontProviderPackage 0x7f0400c0
-int attr fontProviderQuery 0x7f0400c1
-int attr fontStyle 0x7f0400c2
-int attr fontVariationSettings 0x7f0400c3
-int attr fontWeight 0x7f0400c4
-int attr gapBetweenBars 0x7f0400c5
-int attr goIcon 0x7f0400c6
-int attr height 0x7f0400c7
-int attr hideOnContentScroll 0x7f0400c8
-int attr homeAsUpIndicator 0x7f0400c9
-int attr homeLayout 0x7f0400ca
-int attr icon 0x7f0400cb
-int attr iconTint 0x7f0400cc
-int attr iconTintMode 0x7f0400cd
-int attr iconifiedByDefault 0x7f0400ce
-int attr imageButtonStyle 0x7f0400cf
-int attr indeterminateProgressStyle 0x7f0400d0
-int attr initialActivityCount 0x7f0400d1
-int attr isLightTheme 0x7f0400d2
-int attr itemPadding 0x7f0400d3
-int attr keylines 0x7f0400d4
-int attr lastBaselineToBottomHeight 0x7f0400d5
-int attr layout 0x7f0400d6
-int attr layoutManager 0x7f0400d7
-int attr layout_anchor 0x7f0400d8
-int attr layout_anchorGravity 0x7f0400d9
-int attr layout_behavior 0x7f0400da
-int attr layout_constrainedHeight 0x7f0400db
-int attr layout_constrainedWidth 0x7f0400dc
-int attr layout_constraintBaseline_creator 0x7f0400dd
-int attr layout_constraintBaseline_toBaselineOf 0x7f0400de
-int attr layout_constraintBottom_creator 0x7f0400df
-int attr layout_constraintBottom_toBottomOf 0x7f0400e0
-int attr layout_constraintBottom_toTopOf 0x7f0400e1
-int attr layout_constraintCircle 0x7f0400e2
-int attr layout_constraintCircleAngle 0x7f0400e3
-int attr layout_constraintCircleRadius 0x7f0400e4
-int attr layout_constraintDimensionRatio 0x7f0400e5
-int attr layout_constraintEnd_toEndOf 0x7f0400e6
-int attr layout_constraintEnd_toStartOf 0x7f0400e7
-int attr layout_constraintGuide_begin 0x7f0400e8
-int attr layout_constraintGuide_end 0x7f0400e9
-int attr layout_constraintGuide_percent 0x7f0400ea
-int attr layout_constraintHeight_default 0x7f0400eb
-int attr layout_constraintHeight_max 0x7f0400ec
-int attr layout_constraintHeight_min 0x7f0400ed
-int attr layout_constraintHeight_percent 0x7f0400ee
-int attr layout_constraintHorizontal_bias 0x7f0400ef
-int attr layout_constraintHorizontal_chainStyle 0x7f0400f0
-int attr layout_constraintHorizontal_weight 0x7f0400f1
-int attr layout_constraintLeft_creator 0x7f0400f2
-int attr layout_constraintLeft_toLeftOf 0x7f0400f3
-int attr layout_constraintLeft_toRightOf 0x7f0400f4
-int attr layout_constraintRight_creator 0x7f0400f5
-int attr layout_constraintRight_toLeftOf 0x7f0400f6
-int attr layout_constraintRight_toRightOf 0x7f0400f7
-int attr layout_constraintStart_toEndOf 0x7f0400f8
-int attr layout_constraintStart_toStartOf 0x7f0400f9
-int attr layout_constraintTop_creator 0x7f0400fa
-int attr layout_constraintTop_toBottomOf 0x7f0400fb
-int attr layout_constraintTop_toTopOf 0x7f0400fc
-int attr layout_constraintVertical_bias 0x7f0400fd
-int attr layout_constraintVertical_chainStyle 0x7f0400fe
-int attr layout_constraintVertical_weight 0x7f0400ff
-int attr layout_constraintWidth_default 0x7f040100
-int attr layout_constraintWidth_max 0x7f040101
-int attr layout_constraintWidth_min 0x7f040102
-int attr layout_constraintWidth_percent 0x7f040103
-int attr layout_dodgeInsetEdges 0x7f040104
-int attr layout_editor_absoluteX 0x7f040105
-int attr layout_editor_absoluteY 0x7f040106
-int attr layout_goneMarginBottom 0x7f040107
-int attr layout_goneMarginEnd 0x7f040108
-int attr layout_goneMarginLeft 0x7f040109
-int attr layout_goneMarginRight 0x7f04010a
-int attr layout_goneMarginStart 0x7f04010b
-int attr layout_goneMarginTop 0x7f04010c
-int attr layout_insetEdge 0x7f04010d
-int attr layout_keyline 0x7f04010e
-int attr layout_optimizationLevel 0x7f04010f
-int attr lineHeight 0x7f040110
-int attr listChoiceBackgroundIndicator 0x7f040111
-int attr listChoiceIndicatorMultipleAnimated 0x7f040112
-int attr listChoiceIndicatorSingleAnimated 0x7f040113
-int attr listDividerAlertDialog 0x7f040114
-int attr listItemLayout 0x7f040115
-int attr listLayout 0x7f040116
-int attr listMenuViewStyle 0x7f040117
-int attr listPopupWindowStyle 0x7f040118
-int attr listPreferredItemHeight 0x7f040119
-int attr listPreferredItemHeightLarge 0x7f04011a
-int attr listPreferredItemHeightSmall 0x7f04011b
-int attr listPreferredItemPaddingEnd 0x7f04011c
-int attr listPreferredItemPaddingLeft 0x7f04011d
-int attr listPreferredItemPaddingRight 0x7f04011e
-int attr listPreferredItemPaddingStart 0x7f04011f
-int attr logo 0x7f040120
-int attr logoDescription 0x7f040121
-int attr maxButtonHeight 0x7f040122
-int attr measureWithLargestChild 0x7f040123
-int attr menu 0x7f040124
-int attr miv_blurRadius 0x7f040125
-int attr miv_borderColor 0x7f040126
-int attr miv_bottomLeftRadius 0x7f040127
-int attr miv_bottomRightRadius 0x7f040128
-int attr miv_failureHolder 0x7f040129
-int attr miv_isBlur 0x7f04012a
-int attr miv_overlayImageId 0x7f04012b
-int attr miv_placeHolder 0x7f04012c
-int attr miv_radius 0x7f04012d
-int attr miv_shape 0x7f04012e
-int attr miv_shapeBorderWidth 0x7f04012f
-int attr miv_topLeftRadius 0x7f040130
-int attr miv_topRightRadius 0x7f040131
-int attr multiChoiceItemLayout 0x7f040132
-int attr navigationContentDescription 0x7f040133
-int attr navigationIcon 0x7f040134
-int attr navigationMode 0x7f040135
-int attr numericModifiers 0x7f040136
-int attr overlapAnchor 0x7f040137
-int attr overlayImage 0x7f040138
-int attr paddingBottomNoButtons 0x7f040139
-int attr paddingEnd 0x7f04013a
-int attr paddingStart 0x7f04013b
-int attr paddingTopNoTitle 0x7f04013c
-int attr panelBackground 0x7f04013d
-int attr panelMenuListTheme 0x7f04013e
-int attr panelMenuListWidth 0x7f04013f
-int attr placeholderImage 0x7f040140
-int attr placeholderImageScaleType 0x7f040141
-int attr popupMenuStyle 0x7f040142
-int attr popupTheme 0x7f040143
-int attr popupWindowStyle 0x7f040144
-int attr preserveIconSpacing 0x7f040145
-int attr pressedStateOverlayImage 0x7f040146
-int attr progressBarAutoRotateInterval 0x7f040147
-int attr progressBarImage 0x7f040148
-int attr progressBarImageScaleType 0x7f040149
-int attr progressBarPadding 0x7f04014a
-int attr progressBarStyle 0x7f04014b
-int attr pv_progressMode 0x7f04014c
-int attr queryBackground 0x7f04014d
-int attr queryHint 0x7f04014e
-int attr radioButtonStyle 0x7f04014f
-int attr ratingBarStyle 0x7f040150
-int attr ratingBarStyleIndicator 0x7f040151
-int attr ratingBarStyleSmall 0x7f040152
-int attr realtimeBlurRadius 0x7f040153
-int attr realtimeDownsampleFactor 0x7f040154
-int attr realtimeOverlayColor 0x7f040155
-int attr recyclerViewStyle 0x7f040156
-int attr retryImage 0x7f040157
-int attr retryImageScaleType 0x7f040158
-int attr reverseLayout 0x7f040159
-int attr roundAsCircle 0x7f04015a
-int attr roundBottomLeft 0x7f04015b
-int attr roundBottomRight 0x7f04015c
-int attr roundTopLeft 0x7f04015d
-int attr roundTopRight 0x7f04015e
-int attr roundWithOverlayColor 0x7f04015f
-int attr roundedCornerRadius 0x7f040160
-int attr roundingBorderColor 0x7f040161
-int attr roundingBorderPadding 0x7f040162
-int attr roundingBorderWidth 0x7f040163
-int attr searchHintIcon 0x7f040164
-int attr searchIcon 0x7f040165
-int attr searchViewStyle 0x7f040166
-int attr seekBarStyle 0x7f040167
-int attr selectableItemBackground 0x7f040168
-int attr selectableItemBackgroundBorderless 0x7f040169
-int attr showAsAction 0x7f04016a
-int attr showDividers 0x7f04016b
-int attr showText 0x7f04016c
-int attr showTitle 0x7f04016d
-int attr singleChoiceItemLayout 0x7f04016e
-int attr spanCount 0x7f04016f
-int attr spinBars 0x7f040170
-int attr spinnerDropDownItemStyle 0x7f040171
-int attr spinnerStyle 0x7f040172
-int attr splitTrack 0x7f040173
-int attr srcCompat 0x7f040174
-int attr stackFromEnd 0x7f040175
-int attr state_above_anchor 0x7f040176
-int attr statusBarBackground 0x7f040177
-int attr stepSize 0x7f040178
-int attr subMenuArrow 0x7f040179
-int attr submitBackground 0x7f04017a
-int attr subtitle 0x7f04017b
-int attr subtitleTextAppearance 0x7f04017c
-int attr subtitleTextColor 0x7f04017d
-int attr subtitleTextStyle 0x7f04017e
-int attr suggestionRowLayout 0x7f04017f
-int attr switchMinWidth 0x7f040180
-int attr switchPadding 0x7f040181
-int attr switchStyle 0x7f040182
-int attr switchTextAppearance 0x7f040183
-int attr textAllCaps 0x7f040184
-int attr textAppearanceLargePopupMenu 0x7f040185
-int attr textAppearanceListItem 0x7f040186
-int attr textAppearanceListItemSecondary 0x7f040187
-int attr textAppearanceListItemSmall 0x7f040188
-int attr textAppearancePopupMenuHeader 0x7f040189
-int attr textAppearanceSearchResultSubtitle 0x7f04018a
-int attr textAppearanceSearchResultTitle 0x7f04018b
-int attr textAppearanceSmallPopupMenu 0x7f04018c
-int attr textColorAlertDialogListItem 0x7f04018d
-int attr textColorSearchUrl 0x7f04018e
-int attr textLocale 0x7f04018f
-int attr theme 0x7f040190
-int attr thickness 0x7f040191
-int attr thumbTextPadding 0x7f040192
-int attr thumbTint 0x7f040193
-int attr thumbTintMode 0x7f040194
-int attr tickMark 0x7f040195
-int attr tickMarkTint 0x7f040196
-int attr tickMarkTintMode 0x7f040197
-int attr tint 0x7f040198
-int attr tintMode 0x7f040199
-int attr title 0x7f04019a
-int attr titleMargin 0x7f04019b
-int attr titleMarginBottom 0x7f04019c
-int attr titleMarginEnd 0x7f04019d
-int attr titleMarginStart 0x7f04019e
-int attr titleMarginTop 0x7f04019f
-int attr titleMargins 0x7f0401a0
-int attr titleTextAppearance 0x7f0401a1
-int attr titleTextColor 0x7f0401a2
-int attr titleTextStyle 0x7f0401a3
-int attr toolbarNavigationButtonStyle 0x7f0401a4
-int attr toolbarStyle 0x7f0401a5
-int attr tooltipForegroundColor 0x7f0401a6
-int attr tooltipFrameBackground 0x7f0401a7
-int attr tooltipText 0x7f0401a8
-int attr track 0x7f0401a9
-int attr trackTint 0x7f0401aa
-int attr trackTintMode 0x7f0401ab
-int attr ttcIndex 0x7f0401ac
-int attr viewAspectRatio 0x7f0401ad
-int attr viewInflaterClass 0x7f0401ae
-int attr voiceIcon 0x7f0401af
-int attr windowActionBar 0x7f0401b0
-int attr windowActionBarOverlay 0x7f0401b1
-int attr windowActionModeOverlay 0x7f0401b2
-int attr windowFixedHeightMajor 0x7f0401b3
-int attr windowFixedHeightMinor 0x7f0401b4
-int attr windowFixedWidthMajor 0x7f0401b5
-int attr windowFixedWidthMinor 0x7f0401b6
-int attr windowMinWidthMajor 0x7f0401b7
-int attr windowMinWidthMinor 0x7f0401b8
-int attr windowNoTitle 0x7f0401b9
-int attr xRadius 0x7f0401ba
-int attr yRadius 0x7f0401bb
-int bool abc_action_bar_embed_tabs 0x7f050001
-int bool abc_allow_stacked_button_bar 0x7f050002
-int bool abc_config_actionMenuItemAllCaps 0x7f050003
-int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f050004
-int color abc_background_cache_hint_selector_material_dark 0x7f060001
-int color abc_background_cache_hint_selector_material_light 0x7f060002
-int color abc_btn_colored_borderless_text_material 0x7f060003
-int color abc_btn_colored_text_material 0x7f060004
-int color abc_color_highlight_material 0x7f060005
-int color abc_hint_foreground_material_dark 0x7f060006
-int color abc_hint_foreground_material_light 0x7f060007
-int color abc_input_method_navigation_guard 0x7f060008
-int color abc_primary_text_disable_only_material_dark 0x7f060009
-int color abc_primary_text_disable_only_material_light 0x7f06000a
-int color abc_primary_text_material_dark 0x7f06000b
-int color abc_primary_text_material_light 0x7f06000c
-int color abc_search_url_text 0x7f06000d
-int color abc_search_url_text_normal 0x7f06000e
-int color abc_search_url_text_pressed 0x7f06000f
-int color abc_search_url_text_selected 0x7f060010
-int color abc_secondary_text_material_dark 0x7f060011
-int color abc_secondary_text_material_light 0x7f060012
-int color abc_tint_btn_checkable 0x7f060013
-int color abc_tint_default 0x7f060014
-int color abc_tint_edittext 0x7f060015
-int color abc_tint_seek_thumb 0x7f060016
-int color abc_tint_spinner 0x7f060017
-int color abc_tint_switch_track 0x7f060018
-int color accent_material_dark 0x7f060019
-int color accent_material_light 0x7f06001a
-int color arrow_color 0x7f06001b
-int color background_color 0x7f06001c
-int color background_floating_material_dark 0x7f06001d
-int color background_floating_material_light 0x7f06001e
-int color background_material_dark 0x7f06001f
-int color background_material_light 0x7f060020
-int color bgSearchList 0x7f060021
-int color bg_gray_common_page 0x7f060022
-int color black 0x7f060023
-int color black_overlay 0x7f060024
-int color blue 0x7f060025
-int color bright_foreground_disabled_material_dark 0x7f060026
-int color bright_foreground_disabled_material_light 0x7f060027
-int color bright_foreground_inverse_material_dark 0x7f060028
-int color bright_foreground_inverse_material_light 0x7f060029
-int color bright_foreground_material_dark 0x7f06002a
-int color bright_foreground_material_light 0x7f06002b
-int color button_material_dark 0x7f06002c
-int color button_material_light 0x7f06002d
-int color cardview_dark_background 0x7f06002e
-int color cardview_light_background 0x7f06002f
-int color cardview_shadow_end_color 0x7f060030
-int color cardview_shadow_start_color 0x7f060031
-int color defaulttextcolor 0x7f060032
-int color dim_foreground_disabled_material_dark 0x7f060033
-int color dim_foreground_disabled_material_light 0x7f060034
-int color dim_foreground_material_dark 0x7f060035
-int color dim_foreground_material_light 0x7f060036
-int color error_color_material 0x7f060037
-int color error_color_material_dark 0x7f060038
-int color error_color_material_light 0x7f060039
-int color focused 0x7f06003a
-int color foreground_material_dark 0x7f06003b
-int color foreground_material_light 0x7f06003c
-int color highlighted_text_material_dark 0x7f06003d
-int color highlighted_text_material_light 0x7f06003e
-int color light_g 0x7f06003f
-int color material_blue_grey_800 0x7f060040
-int color material_blue_grey_900 0x7f060041
-int color material_blue_grey_950 0x7f060042
-int color material_deep_teal_200 0x7f060043
-int color material_deep_teal_500 0x7f060044
-int color material_grey_100 0x7f060045
-int color material_grey_300 0x7f060046
-int color material_grey_50 0x7f060047
-int color material_grey_600 0x7f060048
-int color material_grey_800 0x7f060049
-int color material_grey_850 0x7f06004a
-int color material_grey_900 0x7f06004b
-int color module_commons_dlg_bkg 0x7f06004c
-int color module_commons_wm_dialog_text_textColor 0x7f06004d
-int color modules_commons_toast_text_color 0x7f06004e
-int color notification_action_color_filter 0x7f06004f
-int color notification_icon_bg_color 0x7f060050
-int color notification_material_background_media_default_color 0x7f060051
-int color pressed 0x7f060052
-int color primary_dark_material_dark 0x7f060053
-int color primary_dark_material_light 0x7f060054
-int color primary_material_dark 0x7f060055
-int color primary_material_light 0x7f060056
-int color primary_text_default_material_dark 0x7f060057
-int color primary_text_default_material_light 0x7f060058
-int color primary_text_disabled_material_dark 0x7f060059
-int color primary_text_disabled_material_light 0x7f06005a
-int color retangle_color 0x7f06005b
-int color ripple_material_dark 0x7f06005c
-int color ripple_material_light 0x7f06005d
-int color secondary_text_default_material_dark 0x7f06005e
-int color secondary_text_default_material_light 0x7f06005f
-int color secondary_text_disabled_material_dark 0x7f060060
-int color secondary_text_disabled_material_light 0x7f060061
-int color selected 0x7f060062
-int color selected_list 0x7f060063
-int color selector_white_gray 0x7f060064
-int color share_btn 0x7f060065
-int color switch_thumb_disabled_material_dark 0x7f060066
-int color switch_thumb_disabled_material_light 0x7f060067
-int color switch_thumb_material_dark 0x7f060068
-int color switch_thumb_material_light 0x7f060069
-int color switch_thumb_normal_material_dark 0x7f06006a
-int color switch_thumb_normal_material_light 0x7f06006b
-int color text_bg_color 0x7f06006c
-int color text_btn_color 0x7f06006d
-int color text_color 0x7f06006e
-int color text_color_bg 0x7f06006f
-int color text_list_color 0x7f060070
-int color tooltip_background_dark 0x7f060071
-int color tooltip_background_light 0x7f060072
-int color traf_list_s 0x7f060073
-int color transparent 0x7f060074
-int color unfocused 0x7f060075
-int color unselected 0x7f060076
-int color unselected_list 0x7f060077
-int color v2x_FFF_666 0x7f060078
-int color white 0x7f060079
-int color white_30 0x7f06007a
-int color white_50 0x7f06007b
-int color white_argb_0 0x7f06007c
-int color widgettext 0x7f06007d
-int dimen abc_action_bar_content_inset_material 0x7f070001
-int dimen abc_action_bar_content_inset_with_nav 0x7f070002
-int dimen abc_action_bar_default_height_material 0x7f070003
-int dimen abc_action_bar_default_padding_end_material 0x7f070004
-int dimen abc_action_bar_default_padding_start_material 0x7f070005
-int dimen abc_action_bar_elevation_material 0x7f070006
-int dimen abc_action_bar_icon_vertical_padding_material 0x7f070007
-int dimen abc_action_bar_overflow_padding_end_material 0x7f070008
-int dimen abc_action_bar_overflow_padding_start_material 0x7f070009
-int dimen abc_action_bar_progress_bar_size 0x7f07000a
-int dimen abc_action_bar_stacked_max_height 0x7f07000b
-int dimen abc_action_bar_stacked_tab_max_width 0x7f07000c
-int dimen abc_action_bar_subtitle_bottom_margin_material 0x7f07000d
-int dimen abc_action_bar_subtitle_top_margin_material 0x7f07000e
-int dimen abc_action_button_min_height_material 0x7f07000f
-int dimen abc_action_button_min_width_material 0x7f070010
-int dimen abc_action_button_min_width_overflow_material 0x7f070011
-int dimen abc_alert_dialog_button_bar_height 0x7f070012
-int dimen abc_alert_dialog_button_dimen 0x7f070013
-int dimen abc_button_inset_horizontal_material 0x7f070014
-int dimen abc_button_inset_vertical_material 0x7f070015
-int dimen abc_button_padding_horizontal_material 0x7f070016
-int dimen abc_button_padding_vertical_material 0x7f070017
-int dimen abc_cascading_menus_min_smallest_width 0x7f070018
-int dimen abc_config_prefDialogWidth 0x7f070019
-int dimen abc_control_corner_material 0x7f07001a
-int dimen abc_control_inset_material 0x7f07001b
-int dimen abc_control_padding_material 0x7f07001c
-int dimen abc_dialog_corner_radius_material 0x7f07001d
-int dimen abc_dialog_fixed_height_major 0x7f07001e
-int dimen abc_dialog_fixed_height_minor 0x7f07001f
-int dimen abc_dialog_fixed_width_major 0x7f070020
-int dimen abc_dialog_fixed_width_minor 0x7f070021
-int dimen abc_dialog_list_padding_bottom_no_buttons 0x7f070022
-int dimen abc_dialog_list_padding_top_no_title 0x7f070023
-int dimen abc_dialog_min_width_major 0x7f070024
-int dimen abc_dialog_min_width_minor 0x7f070025
-int dimen abc_dialog_padding_material 0x7f070026
-int dimen abc_dialog_padding_top_material 0x7f070027
-int dimen abc_dialog_title_divider_material 0x7f070028
-int dimen abc_disabled_alpha_material_dark 0x7f070029
-int dimen abc_disabled_alpha_material_light 0x7f07002a
-int dimen abc_dropdownitem_icon_width 0x7f07002b
-int dimen abc_dropdownitem_text_padding_left 0x7f07002c
-int dimen abc_dropdownitem_text_padding_right 0x7f07002d
-int dimen abc_edit_text_inset_bottom_material 0x7f07002e
-int dimen abc_edit_text_inset_horizontal_material 0x7f07002f
-int dimen abc_edit_text_inset_top_material 0x7f070030
-int dimen abc_floating_window_z 0x7f070031
-int dimen abc_list_item_height_large_material 0x7f070032
-int dimen abc_list_item_height_material 0x7f070033
-int dimen abc_list_item_height_small_material 0x7f070034
-int dimen abc_list_item_padding_horizontal_material 0x7f070035
-int dimen abc_panel_menu_list_width 0x7f070036
-int dimen abc_progress_bar_height_material 0x7f070037
-int dimen abc_search_view_preferred_height 0x7f070038
-int dimen abc_search_view_preferred_width 0x7f070039
-int dimen abc_seekbar_track_background_height_material 0x7f07003a
-int dimen abc_seekbar_track_progress_height_material 0x7f07003b
-int dimen abc_select_dialog_padding_start_material 0x7f07003c
-int dimen abc_switch_padding 0x7f07003d
-int dimen abc_text_size_body_1_material 0x7f07003e
-int dimen abc_text_size_body_2_material 0x7f07003f
-int dimen abc_text_size_button_material 0x7f070040
-int dimen abc_text_size_caption_material 0x7f070041
-int dimen abc_text_size_display_1_material 0x7f070042
-int dimen abc_text_size_display_2_material 0x7f070043
-int dimen abc_text_size_display_3_material 0x7f070044
-int dimen abc_text_size_display_4_material 0x7f070045
-int dimen abc_text_size_headline_material 0x7f070046
-int dimen abc_text_size_large_material 0x7f070047
-int dimen abc_text_size_medium_material 0x7f070048
-int dimen abc_text_size_menu_header_material 0x7f070049
-int dimen abc_text_size_menu_material 0x7f07004a
-int dimen abc_text_size_small_material 0x7f07004b
-int dimen abc_text_size_subhead_material 0x7f07004c
-int dimen abc_text_size_subtitle_material_toolbar 0x7f07004d
-int dimen abc_text_size_title_material 0x7f07004e
-int dimen abc_text_size_title_material_toolbar 0x7f07004f
-int dimen btn_size 0x7f070050
-int dimen candidate_font_height 0x7f070051
-int dimen candidate_vertical_padding 0x7f070052
-int dimen cardview_compat_inset_shadow 0x7f070053
-int dimen cardview_default_elevation 0x7f070054
-int dimen cardview_default_radius 0x7f070055
-int dimen compat_button_inset_horizontal_material 0x7f070056
-int dimen compat_button_inset_vertical_material 0x7f070057
-int dimen compat_button_padding_horizontal_material 0x7f070058
-int dimen compat_button_padding_vertical_material 0x7f070059
-int dimen compat_control_corner_material 0x7f07005a
-int dimen compat_notification_large_icon_max_height 0x7f07005b
-int dimen compat_notification_large_icon_max_width 0x7f07005c
-int dimen def_height 0x7f07005d
-int dimen disabled_alpha_material_dark 0x7f07005e
-int dimen disabled_alpha_material_light 0x7f07005f
-int dimen dp_0 0x7f070060
-int dimen dp_0_1 0x7f070061
-int dimen dp_0_5 0x7f070062
-int dimen dp_1 0x7f070063
-int dimen dp_10 0x7f070064
-int dimen dp_100 0x7f070065
-int dimen dp_1000 0x7f070066
-int dimen dp_101 0x7f070067
-int dimen dp_102 0x7f070068
-int dimen dp_103 0x7f070069
-int dimen dp_104 0x7f07006a
-int dimen dp_104_5 0x7f07006b
-int dimen dp_105 0x7f07006c
-int dimen dp_106 0x7f07006d
-int dimen dp_107 0x7f07006e
-int dimen dp_108 0x7f07006f
-int dimen dp_109 0x7f070070
-int dimen dp_11 0x7f070071
-int dimen dp_110 0x7f070072
-int dimen dp_111 0x7f070073
-int dimen dp_112 0x7f070074
-int dimen dp_113 0x7f070075
-int dimen dp_114 0x7f070076
-int dimen dp_115 0x7f070077
-int dimen dp_116 0x7f070078
-int dimen dp_117 0x7f070079
-int dimen dp_118 0x7f07007a
-int dimen dp_119 0x7f07007b
-int dimen dp_12 0x7f07007c
-int dimen dp_120 0x7f07007d
-int dimen dp_121 0x7f07007e
-int dimen dp_122 0x7f07007f
-int dimen dp_123 0x7f070080
-int dimen dp_124 0x7f070081
-int dimen dp_125 0x7f070082
-int dimen dp_126 0x7f070083
-int dimen dp_127 0x7f070084
-int dimen dp_128 0x7f070085
-int dimen dp_129 0x7f070086
-int dimen dp_13 0x7f070087
-int dimen dp_130 0x7f070088
-int dimen dp_1300 0x7f070089
-int dimen dp_131 0x7f07008a
-int dimen dp_132 0x7f07008b
-int dimen dp_133 0x7f07008c
-int dimen dp_134 0x7f07008d
-int dimen dp_134_5 0x7f07008e
-int dimen dp_135 0x7f07008f
-int dimen dp_136 0x7f070090
-int dimen dp_137 0x7f070091
-int dimen dp_138 0x7f070092
-int dimen dp_139 0x7f070093
-int dimen dp_14 0x7f070094
-int dimen dp_140 0x7f070095
-int dimen dp_141 0x7f070096
-int dimen dp_142 0x7f070097
-int dimen dp_143 0x7f070098
-int dimen dp_144 0x7f070099
-int dimen dp_145 0x7f07009a
-int dimen dp_146 0x7f07009b
-int dimen dp_147 0x7f07009c
-int dimen dp_148 0x7f07009d
-int dimen dp_149 0x7f07009e
-int dimen dp_15 0x7f07009f
-int dimen dp_150 0x7f0700a0
-int dimen dp_151 0x7f0700a1
-int dimen dp_152 0x7f0700a2
-int dimen dp_153 0x7f0700a3
-int dimen dp_154 0x7f0700a4
-int dimen dp_155 0x7f0700a5
-int dimen dp_156 0x7f0700a6
-int dimen dp_157 0x7f0700a7
-int dimen dp_158 0x7f0700a8
-int dimen dp_159 0x7f0700a9
-int dimen dp_16 0x7f0700aa
-int dimen dp_160 0x7f0700ab
-int dimen dp_161 0x7f0700ac
-int dimen dp_162 0x7f0700ad
-int dimen dp_163 0x7f0700ae
-int dimen dp_164 0x7f0700af
-int dimen dp_165 0x7f0700b0
-int dimen dp_166 0x7f0700b1
-int dimen dp_167 0x7f0700b2
-int dimen dp_168 0x7f0700b3
-int dimen dp_169 0x7f0700b4
-int dimen dp_17 0x7f0700b5
-int dimen dp_170 0x7f0700b6
-int dimen dp_171 0x7f0700b7
-int dimen dp_172 0x7f0700b8
-int dimen dp_173 0x7f0700b9
-int dimen dp_174 0x7f0700ba
-int dimen dp_175 0x7f0700bb
-int dimen dp_176 0x7f0700bc
-int dimen dp_177 0x7f0700bd
-int dimen dp_178 0x7f0700be
-int dimen dp_179 0x7f0700bf
-int dimen dp_18 0x7f0700c0
-int dimen dp_180 0x7f0700c1
-int dimen dp_181 0x7f0700c2
-int dimen dp_182 0x7f0700c3
-int dimen dp_183 0x7f0700c4
-int dimen dp_184 0x7f0700c5
-int dimen dp_185 0x7f0700c6
-int dimen dp_186 0x7f0700c7
-int dimen dp_187 0x7f0700c8
-int dimen dp_188 0x7f0700c9
-int dimen dp_189 0x7f0700ca
-int dimen dp_19 0x7f0700cb
-int dimen dp_190 0x7f0700cc
-int dimen dp_191 0x7f0700cd
-int dimen dp_191_25 0x7f0700ce
-int dimen dp_192 0x7f0700cf
-int dimen dp_1920 0x7f0700d0
-int dimen dp_193 0x7f0700d1
-int dimen dp_194 0x7f0700d2
-int dimen dp_195 0x7f0700d3
-int dimen dp_196 0x7f0700d4
-int dimen dp_197 0x7f0700d5
-int dimen dp_198 0x7f0700d6
-int dimen dp_199 0x7f0700d7
-int dimen dp_1_5 0x7f0700d8
-int dimen dp_2 0x7f0700d9
-int dimen dp_20 0x7f0700da
-int dimen dp_200 0x7f0700db
-int dimen dp_201 0x7f0700dc
-int dimen dp_202 0x7f0700dd
-int dimen dp_203 0x7f0700de
-int dimen dp_204 0x7f0700df
-int dimen dp_205 0x7f0700e0
-int dimen dp_206 0x7f0700e1
-int dimen dp_207 0x7f0700e2
-int dimen dp_208 0x7f0700e3
-int dimen dp_209 0x7f0700e4
-int dimen dp_21 0x7f0700e5
-int dimen dp_210 0x7f0700e6
-int dimen dp_211 0x7f0700e7
-int dimen dp_212 0x7f0700e8
-int dimen dp_213 0x7f0700e9
-int dimen dp_214 0x7f0700ea
-int dimen dp_215 0x7f0700eb
-int dimen dp_216 0x7f0700ec
-int dimen dp_217 0x7f0700ed
-int dimen dp_218 0x7f0700ee
-int dimen dp_219 0x7f0700ef
-int dimen dp_22 0x7f0700f0
-int dimen dp_220 0x7f0700f1
-int dimen dp_221 0x7f0700f2
-int dimen dp_222 0x7f0700f3
-int dimen dp_223 0x7f0700f4
-int dimen dp_224 0x7f0700f5
-int dimen dp_225 0x7f0700f6
-int dimen dp_226 0x7f0700f7
-int dimen dp_227 0x7f0700f8
-int dimen dp_228 0x7f0700f9
-int dimen dp_229 0x7f0700fa
-int dimen dp_23 0x7f0700fb
-int dimen dp_230 0x7f0700fc
-int dimen dp_231 0x7f0700fd
-int dimen dp_232 0x7f0700fe
-int dimen dp_233 0x7f0700ff
-int dimen dp_234 0x7f070100
-int dimen dp_235 0x7f070101
-int dimen dp_236 0x7f070102
-int dimen dp_237 0x7f070103
-int dimen dp_238 0x7f070104
-int dimen dp_239 0x7f070105
-int dimen dp_24 0x7f070106
-int dimen dp_240 0x7f070107
-int dimen dp_241 0x7f070108
-int dimen dp_242 0x7f070109
-int dimen dp_243 0x7f07010a
-int dimen dp_244 0x7f07010b
-int dimen dp_245 0x7f07010c
-int dimen dp_246 0x7f07010d
-int dimen dp_247 0x7f07010e
-int dimen dp_248 0x7f07010f
-int dimen dp_249 0x7f070110
-int dimen dp_25 0x7f070111
-int dimen dp_250 0x7f070112
-int dimen dp_251 0x7f070113
-int dimen dp_252 0x7f070114
-int dimen dp_253 0x7f070115
-int dimen dp_254 0x7f070116
-int dimen dp_255 0x7f070117
-int dimen dp_256 0x7f070118
-int dimen dp_257 0x7f070119
-int dimen dp_258 0x7f07011a
-int dimen dp_259 0x7f07011b
-int dimen dp_26 0x7f07011c
-int dimen dp_260 0x7f07011d
-int dimen dp_261 0x7f07011e
-int dimen dp_262 0x7f07011f
-int dimen dp_263 0x7f070120
-int dimen dp_264 0x7f070121
-int dimen dp_265 0x7f070122
-int dimen dp_266 0x7f070123
-int dimen dp_267 0x7f070124
-int dimen dp_268 0x7f070125
-int dimen dp_269 0x7f070126
-int dimen dp_27 0x7f070127
-int dimen dp_270 0x7f070128
-int dimen dp_271 0x7f070129
-int dimen dp_272 0x7f07012a
-int dimen dp_273 0x7f07012b
-int dimen dp_274 0x7f07012c
-int dimen dp_275 0x7f07012d
-int dimen dp_276 0x7f07012e
-int dimen dp_277 0x7f07012f
-int dimen dp_278 0x7f070130
-int dimen dp_279 0x7f070131
-int dimen dp_28 0x7f070132
-int dimen dp_280 0x7f070133
-int dimen dp_281 0x7f070134
-int dimen dp_282 0x7f070135
-int dimen dp_283 0x7f070136
-int dimen dp_284 0x7f070137
-int dimen dp_285 0x7f070138
-int dimen dp_286 0x7f070139
-int dimen dp_287 0x7f07013a
-int dimen dp_288 0x7f07013b
-int dimen dp_289 0x7f07013c
-int dimen dp_29 0x7f07013d
-int dimen dp_290 0x7f07013e
-int dimen dp_291 0x7f07013f
-int dimen dp_292 0x7f070140
-int dimen dp_293 0x7f070141
-int dimen dp_294 0x7f070142
-int dimen dp_295 0x7f070143
-int dimen dp_296 0x7f070144
-int dimen dp_297 0x7f070145
-int dimen dp_298 0x7f070146
-int dimen dp_299 0x7f070147
-int dimen dp_2_5 0x7f070148
-int dimen dp_3 0x7f070149
-int dimen dp_30 0x7f07014a
-int dimen dp_300 0x7f07014b
-int dimen dp_301 0x7f07014c
-int dimen dp_302 0x7f07014d
-int dimen dp_303 0x7f07014e
-int dimen dp_304 0x7f07014f
-int dimen dp_305 0x7f070150
-int dimen dp_306 0x7f070151
-int dimen dp_307 0x7f070152
-int dimen dp_308 0x7f070153
-int dimen dp_309 0x7f070154
-int dimen dp_31 0x7f070155
-int dimen dp_310 0x7f070156
-int dimen dp_311 0x7f070157
-int dimen dp_312 0x7f070158
-int dimen dp_313 0x7f070159
-int dimen dp_314 0x7f07015a
-int dimen dp_315 0x7f07015b
-int dimen dp_316 0x7f07015c
-int dimen dp_317 0x7f07015d
-int dimen dp_318 0x7f07015e
-int dimen dp_319 0x7f07015f
-int dimen dp_32 0x7f070160
-int dimen dp_320 0x7f070161
-int dimen dp_321 0x7f070162
-int dimen dp_322 0x7f070163
-int dimen dp_323 0x7f070164
-int dimen dp_324 0x7f070165
-int dimen dp_325 0x7f070166
-int dimen dp_326 0x7f070167
-int dimen dp_327 0x7f070168
-int dimen dp_328 0x7f070169
-int dimen dp_329 0x7f07016a
-int dimen dp_33 0x7f07016b
-int dimen dp_330 0x7f07016c
-int dimen dp_331 0x7f07016d
-int dimen dp_332 0x7f07016e
-int dimen dp_333 0x7f07016f
-int dimen dp_334 0x7f070170
-int dimen dp_335 0x7f070171
-int dimen dp_336 0x7f070172
-int dimen dp_337 0x7f070173
-int dimen dp_338 0x7f070174
-int dimen dp_339 0x7f070175
-int dimen dp_34 0x7f070176
-int dimen dp_340 0x7f070177
-int dimen dp_341 0x7f070178
-int dimen dp_342 0x7f070179
-int dimen dp_343 0x7f07017a
-int dimen dp_344 0x7f07017b
-int dimen dp_345 0x7f07017c
-int dimen dp_346 0x7f07017d
-int dimen dp_347 0x7f07017e
-int dimen dp_348 0x7f07017f
-int dimen dp_349 0x7f070180
-int dimen dp_35 0x7f070181
-int dimen dp_350 0x7f070182
-int dimen dp_351 0x7f070183
-int dimen dp_352 0x7f070184
-int dimen dp_353 0x7f070185
-int dimen dp_354 0x7f070186
-int dimen dp_355 0x7f070187
-int dimen dp_356 0x7f070188
-int dimen dp_357 0x7f070189
-int dimen dp_358 0x7f07018a
-int dimen dp_359 0x7f07018b
-int dimen dp_36 0x7f07018c
-int dimen dp_366 0x7f07018d
-int dimen dp_367 0x7f07018e
-int dimen dp_368 0x7f07018f
-int dimen dp_369 0x7f070190
-int dimen dp_37 0x7f070191
-int dimen dp_370 0x7f070192
-int dimen dp_371 0x7f070193
-int dimen dp_372 0x7f070194
-int dimen dp_373 0x7f070195
-int dimen dp_374 0x7f070196
-int dimen dp_375 0x7f070197
-int dimen dp_376 0x7f070198
-int dimen dp_377 0x7f070199
-int dimen dp_378 0x7f07019a
-int dimen dp_379 0x7f07019b
-int dimen dp_38 0x7f07019c
-int dimen dp_380 0x7f07019d
-int dimen dp_381 0x7f07019e
-int dimen dp_382 0x7f07019f
-int dimen dp_383 0x7f0701a0
-int dimen dp_384 0x7f0701a1
-int dimen dp_385 0x7f0701a2
-int dimen dp_386 0x7f0701a3
-int dimen dp_387 0x7f0701a4
-int dimen dp_388 0x7f0701a5
-int dimen dp_389 0x7f0701a6
-int dimen dp_39 0x7f0701a7
-int dimen dp_390 0x7f0701a8
-int dimen dp_391 0x7f0701a9
-int dimen dp_392 0x7f0701aa
-int dimen dp_393 0x7f0701ab
-int dimen dp_394 0x7f0701ac
-int dimen dp_395 0x7f0701ad
-int dimen dp_396 0x7f0701ae
-int dimen dp_397 0x7f0701af
-int dimen dp_398 0x7f0701b0
-int dimen dp_399 0x7f0701b1
-int dimen dp_3_5 0x7f0701b2
-int dimen dp_4 0x7f0701b3
-int dimen dp_40 0x7f0701b4
-int dimen dp_400 0x7f0701b5
-int dimen dp_401 0x7f0701b6
-int dimen dp_402 0x7f0701b7
-int dimen dp_403 0x7f0701b8
-int dimen dp_404 0x7f0701b9
-int dimen dp_405 0x7f0701ba
-int dimen dp_406 0x7f0701bb
-int dimen dp_407 0x7f0701bc
-int dimen dp_408 0x7f0701bd
-int dimen dp_409 0x7f0701be
-int dimen dp_41 0x7f0701bf
-int dimen dp_410 0x7f0701c0
-int dimen dp_411 0x7f0701c1
-int dimen dp_412 0x7f0701c2
-int dimen dp_413 0x7f0701c3
-int dimen dp_414 0x7f0701c4
-int dimen dp_415 0x7f0701c5
-int dimen dp_416 0x7f0701c6
-int dimen dp_417 0x7f0701c7
-int dimen dp_418 0x7f0701c8
-int dimen dp_419 0x7f0701c9
-int dimen dp_42 0x7f0701ca
-int dimen dp_420 0x7f0701cb
-int dimen dp_421 0x7f0701cc
-int dimen dp_422 0x7f0701cd
-int dimen dp_423 0x7f0701ce
-int dimen dp_424 0x7f0701cf
-int dimen dp_425 0x7f0701d0
-int dimen dp_426 0x7f0701d1
-int dimen dp_427 0x7f0701d2
-int dimen dp_428 0x7f0701d3
-int dimen dp_429 0x7f0701d4
-int dimen dp_43 0x7f0701d5
-int dimen dp_430 0x7f0701d6
-int dimen dp_431 0x7f0701d7
-int dimen dp_432 0x7f0701d8
-int dimen dp_433 0x7f0701d9
-int dimen dp_434 0x7f0701da
-int dimen dp_435 0x7f0701db
-int dimen dp_436 0x7f0701dc
-int dimen dp_437 0x7f0701dd
-int dimen dp_438 0x7f0701de
-int dimen dp_439 0x7f0701df
-int dimen dp_44 0x7f0701e0
-int dimen dp_440 0x7f0701e1
-int dimen dp_441 0x7f0701e2
-int dimen dp_442 0x7f0701e3
-int dimen dp_443 0x7f0701e4
-int dimen dp_444 0x7f0701e5
-int dimen dp_445 0x7f0701e6
-int dimen dp_446 0x7f0701e7
-int dimen dp_447 0x7f0701e8
-int dimen dp_448 0x7f0701e9
-int dimen dp_449 0x7f0701ea
-int dimen dp_45 0x7f0701eb
-int dimen dp_450 0x7f0701ec
-int dimen dp_451 0x7f0701ed
-int dimen dp_452 0x7f0701ee
-int dimen dp_453 0x7f0701ef
-int dimen dp_454 0x7f0701f0
-int dimen dp_455 0x7f0701f1
-int dimen dp_456 0x7f0701f2
-int dimen dp_457 0x7f0701f3
-int dimen dp_458 0x7f0701f4
-int dimen dp_459 0x7f0701f5
-int dimen dp_46 0x7f0701f6
-int dimen dp_460 0x7f0701f7
-int dimen dp_461 0x7f0701f8
-int dimen dp_462 0x7f0701f9
-int dimen dp_463 0x7f0701fa
-int dimen dp_464 0x7f0701fb
-int dimen dp_465 0x7f0701fc
-int dimen dp_466 0x7f0701fd
-int dimen dp_467 0x7f0701fe
-int dimen dp_468 0x7f0701ff
-int dimen dp_469 0x7f070200
-int dimen dp_47 0x7f070201
-int dimen dp_470 0x7f070202
-int dimen dp_471 0x7f070203
-int dimen dp_472 0x7f070204
-int dimen dp_473 0x7f070205
-int dimen dp_474 0x7f070206
-int dimen dp_475 0x7f070207
-int dimen dp_476 0x7f070208
-int dimen dp_477 0x7f070209
-int dimen dp_478 0x7f07020a
-int dimen dp_479 0x7f07020b
-int dimen dp_48 0x7f07020c
-int dimen dp_480 0x7f07020d
-int dimen dp_481 0x7f07020e
-int dimen dp_482 0x7f07020f
-int dimen dp_483 0x7f070210
-int dimen dp_484 0x7f070211
-int dimen dp_485 0x7f070212
-int dimen dp_486 0x7f070213
-int dimen dp_487 0x7f070214
-int dimen dp_488 0x7f070215
-int dimen dp_489 0x7f070216
-int dimen dp_49 0x7f070217
-int dimen dp_490 0x7f070218
-int dimen dp_491 0x7f070219
-int dimen dp_492 0x7f07021a
-int dimen dp_493 0x7f07021b
-int dimen dp_494 0x7f07021c
-int dimen dp_495 0x7f07021d
-int dimen dp_496 0x7f07021e
-int dimen dp_497 0x7f07021f
-int dimen dp_498 0x7f070220
-int dimen dp_499 0x7f070221
-int dimen dp_4_5 0x7f070222
-int dimen dp_5 0x7f070223
-int dimen dp_50 0x7f070224
-int dimen dp_500 0x7f070225
-int dimen dp_501 0x7f070226
-int dimen dp_502 0x7f070227
-int dimen dp_503 0x7f070228
-int dimen dp_504 0x7f070229
-int dimen dp_505 0x7f07022a
-int dimen dp_506 0x7f07022b
-int dimen dp_507 0x7f07022c
-int dimen dp_508 0x7f07022d
-int dimen dp_509 0x7f07022e
-int dimen dp_51 0x7f07022f
-int dimen dp_510 0x7f070230
-int dimen dp_511 0x7f070231
-int dimen dp_512 0x7f070232
-int dimen dp_513 0x7f070233
-int dimen dp_514 0x7f070234
-int dimen dp_515 0x7f070235
-int dimen dp_516 0x7f070236
-int dimen dp_517 0x7f070237
-int dimen dp_518 0x7f070238
-int dimen dp_519 0x7f070239
-int dimen dp_52 0x7f07023a
-int dimen dp_520 0x7f07023b
-int dimen dp_521 0x7f07023c
-int dimen dp_522 0x7f07023d
-int dimen dp_523 0x7f07023e
-int dimen dp_524 0x7f07023f
-int dimen dp_525 0x7f070240
-int dimen dp_526 0x7f070241
-int dimen dp_527 0x7f070242
-int dimen dp_528 0x7f070243
-int dimen dp_529 0x7f070244
-int dimen dp_53 0x7f070245
-int dimen dp_530 0x7f070246
-int dimen dp_531 0x7f070247
-int dimen dp_532 0x7f070248
-int dimen dp_533 0x7f070249
-int dimen dp_534 0x7f07024a
-int dimen dp_535 0x7f07024b
-int dimen dp_536 0x7f07024c
-int dimen dp_537 0x7f07024d
-int dimen dp_538 0x7f07024e
-int dimen dp_539 0x7f07024f
-int dimen dp_54 0x7f070250
-int dimen dp_540 0x7f070251
-int dimen dp_541 0x7f070252
-int dimen dp_542 0x7f070253
-int dimen dp_543 0x7f070254
-int dimen dp_544 0x7f070255
-int dimen dp_545 0x7f070256
-int dimen dp_546 0x7f070257
-int dimen dp_547 0x7f070258
-int dimen dp_548 0x7f070259
-int dimen dp_549 0x7f07025a
-int dimen dp_55 0x7f07025b
-int dimen dp_550 0x7f07025c
-int dimen dp_551 0x7f07025d
-int dimen dp_552 0x7f07025e
-int dimen dp_553 0x7f07025f
-int dimen dp_554 0x7f070260
-int dimen dp_555 0x7f070261
-int dimen dp_556 0x7f070262
-int dimen dp_557 0x7f070263
-int dimen dp_558 0x7f070264
-int dimen dp_559 0x7f070265
-int dimen dp_56 0x7f070266
-int dimen dp_560 0x7f070267
-int dimen dp_561 0x7f070268
-int dimen dp_562 0x7f070269
-int dimen dp_563 0x7f07026a
-int dimen dp_564 0x7f07026b
-int dimen dp_565 0x7f07026c
-int dimen dp_566 0x7f07026d
-int dimen dp_567 0x7f07026e
-int dimen dp_568 0x7f07026f
-int dimen dp_569 0x7f070270
-int dimen dp_57 0x7f070271
-int dimen dp_570 0x7f070272
-int dimen dp_571 0x7f070273
-int dimen dp_572 0x7f070274
-int dimen dp_573 0x7f070275
-int dimen dp_574 0x7f070276
-int dimen dp_575 0x7f070277
-int dimen dp_576 0x7f070278
-int dimen dp_577 0x7f070279
-int dimen dp_578 0x7f07027a
-int dimen dp_579 0x7f07027b
-int dimen dp_58 0x7f07027c
-int dimen dp_580 0x7f07027d
-int dimen dp_581 0x7f07027e
-int dimen dp_582 0x7f07027f
-int dimen dp_583 0x7f070280
-int dimen dp_584 0x7f070281
-int dimen dp_585 0x7f070282
-int dimen dp_586 0x7f070283
-int dimen dp_587 0x7f070284
-int dimen dp_588 0x7f070285
-int dimen dp_589 0x7f070286
-int dimen dp_59 0x7f070287
-int dimen dp_590 0x7f070288
-int dimen dp_591 0x7f070289
-int dimen dp_592 0x7f07028a
-int dimen dp_593 0x7f07028b
-int dimen dp_594 0x7f07028c
-int dimen dp_595 0x7f07028d
-int dimen dp_596 0x7f07028e
-int dimen dp_597 0x7f07028f
-int dimen dp_598 0x7f070290
-int dimen dp_599 0x7f070291
-int dimen dp_6 0x7f070292
-int dimen dp_60 0x7f070293
-int dimen dp_600 0x7f070294
-int dimen dp_601 0x7f070295
-int dimen dp_602 0x7f070296
-int dimen dp_603 0x7f070297
-int dimen dp_604 0x7f070298
-int dimen dp_605 0x7f070299
-int dimen dp_606 0x7f07029a
-int dimen dp_607 0x7f07029b
-int dimen dp_608 0x7f07029c
-int dimen dp_609 0x7f07029d
-int dimen dp_61 0x7f07029e
-int dimen dp_610 0x7f07029f
-int dimen dp_611 0x7f0702a0
-int dimen dp_612 0x7f0702a1
-int dimen dp_613 0x7f0702a2
-int dimen dp_614 0x7f0702a3
-int dimen dp_615 0x7f0702a4
-int dimen dp_616 0x7f0702a5
-int dimen dp_617 0x7f0702a6
-int dimen dp_618 0x7f0702a7
-int dimen dp_619 0x7f0702a8
-int dimen dp_62 0x7f0702a9
-int dimen dp_620 0x7f0702aa
-int dimen dp_621 0x7f0702ab
-int dimen dp_622 0x7f0702ac
-int dimen dp_623 0x7f0702ad
-int dimen dp_624 0x7f0702ae
-int dimen dp_625 0x7f0702af
-int dimen dp_626 0x7f0702b0
-int dimen dp_627 0x7f0702b1
-int dimen dp_628 0x7f0702b2
-int dimen dp_629 0x7f0702b3
-int dimen dp_63 0x7f0702b4
-int dimen dp_630 0x7f0702b5
-int dimen dp_631 0x7f0702b6
-int dimen dp_632 0x7f0702b7
-int dimen dp_633 0x7f0702b8
-int dimen dp_634 0x7f0702b9
-int dimen dp_635 0x7f0702ba
-int dimen dp_636 0x7f0702bb
-int dimen dp_637 0x7f0702bc
-int dimen dp_638 0x7f0702bd
-int dimen dp_639 0x7f0702be
-int dimen dp_64 0x7f0702bf
-int dimen dp_640 0x7f0702c0
-int dimen dp_641 0x7f0702c1
-int dimen dp_642 0x7f0702c2
-int dimen dp_643 0x7f0702c3
-int dimen dp_644 0x7f0702c4
-int dimen dp_645 0x7f0702c5
-int dimen dp_646 0x7f0702c6
-int dimen dp_647 0x7f0702c7
-int dimen dp_648 0x7f0702c8
-int dimen dp_649 0x7f0702c9
-int dimen dp_65 0x7f0702ca
-int dimen dp_650 0x7f0702cb
-int dimen dp_651 0x7f0702cc
-int dimen dp_652 0x7f0702cd
-int dimen dp_653 0x7f0702ce
-int dimen dp_654 0x7f0702cf
-int dimen dp_655 0x7f0702d0
-int dimen dp_656 0x7f0702d1
-int dimen dp_657 0x7f0702d2
-int dimen dp_658 0x7f0702d3
-int dimen dp_659 0x7f0702d4
-int dimen dp_66 0x7f0702d5
-int dimen dp_660 0x7f0702d6
-int dimen dp_661 0x7f0702d7
-int dimen dp_662 0x7f0702d8
-int dimen dp_663 0x7f0702d9
-int dimen dp_664 0x7f0702da
-int dimen dp_665 0x7f0702db
-int dimen dp_666 0x7f0702dc
-int dimen dp_667 0x7f0702dd
-int dimen dp_668 0x7f0702de
-int dimen dp_669 0x7f0702df
-int dimen dp_67 0x7f0702e0
-int dimen dp_670 0x7f0702e1
-int dimen dp_671 0x7f0702e2
-int dimen dp_672 0x7f0702e3
-int dimen dp_673 0x7f0702e4
-int dimen dp_674 0x7f0702e5
-int dimen dp_675 0x7f0702e6
-int dimen dp_676 0x7f0702e7
-int dimen dp_677 0x7f0702e8
-int dimen dp_678 0x7f0702e9
-int dimen dp_679 0x7f0702ea
-int dimen dp_68 0x7f0702eb
-int dimen dp_680 0x7f0702ec
-int dimen dp_681 0x7f0702ed
-int dimen dp_682 0x7f0702ee
-int dimen dp_683 0x7f0702ef
-int dimen dp_684 0x7f0702f0
-int dimen dp_685 0x7f0702f1
-int dimen dp_686 0x7f0702f2
-int dimen dp_687 0x7f0702f3
-int dimen dp_688 0x7f0702f4
-int dimen dp_689 0x7f0702f5
-int dimen dp_69 0x7f0702f6
-int dimen dp_690 0x7f0702f7
-int dimen dp_691 0x7f0702f8
-int dimen dp_692 0x7f0702f9
-int dimen dp_693 0x7f0702fa
-int dimen dp_694 0x7f0702fb
-int dimen dp_695 0x7f0702fc
-int dimen dp_696 0x7f0702fd
-int dimen dp_697 0x7f0702fe
-int dimen dp_698 0x7f0702ff
-int dimen dp_699 0x7f070300
-int dimen dp_7 0x7f070301
-int dimen dp_70 0x7f070302
-int dimen dp_700 0x7f070303
-int dimen dp_701 0x7f070304
-int dimen dp_702 0x7f070305
-int dimen dp_703 0x7f070306
-int dimen dp_704 0x7f070307
-int dimen dp_705 0x7f070308
-int dimen dp_706 0x7f070309
-int dimen dp_707 0x7f07030a
-int dimen dp_708 0x7f07030b
-int dimen dp_709 0x7f07030c
-int dimen dp_71 0x7f07030d
-int dimen dp_710 0x7f07030e
-int dimen dp_711 0x7f07030f
-int dimen dp_712 0x7f070310
-int dimen dp_713 0x7f070311
-int dimen dp_714 0x7f070312
-int dimen dp_715 0x7f070313
-int dimen dp_716 0x7f070314
-int dimen dp_717 0x7f070315
-int dimen dp_718 0x7f070316
-int dimen dp_719 0x7f070317
-int dimen dp_72 0x7f070318
-int dimen dp_720 0x7f070319
-int dimen dp_721 0x7f07031a
-int dimen dp_722 0x7f07031b
-int dimen dp_723 0x7f07031c
-int dimen dp_724 0x7f07031d
-int dimen dp_725 0x7f07031e
-int dimen dp_726 0x7f07031f
-int dimen dp_727 0x7f070320
-int dimen dp_728 0x7f070321
-int dimen dp_729 0x7f070322
-int dimen dp_73 0x7f070323
-int dimen dp_730 0x7f070324
-int dimen dp_731 0x7f070325
-int dimen dp_732 0x7f070326
-int dimen dp_733 0x7f070327
-int dimen dp_734 0x7f070328
-int dimen dp_735 0x7f070329
-int dimen dp_736 0x7f07032a
-int dimen dp_737 0x7f07032b
-int dimen dp_738 0x7f07032c
-int dimen dp_739 0x7f07032d
-int dimen dp_74 0x7f07032e
-int dimen dp_740 0x7f07032f
-int dimen dp_741 0x7f070330
-int dimen dp_742 0x7f070331
-int dimen dp_743 0x7f070332
-int dimen dp_744 0x7f070333
-int dimen dp_745 0x7f070334
-int dimen dp_746 0x7f070335
-int dimen dp_747 0x7f070336
-int dimen dp_748 0x7f070337
-int dimen dp_749 0x7f070338
-int dimen dp_75 0x7f070339
-int dimen dp_750 0x7f07033a
-int dimen dp_751 0x7f07033b
-int dimen dp_752 0x7f07033c
-int dimen dp_753 0x7f07033d
-int dimen dp_754 0x7f07033e
-int dimen dp_755 0x7f07033f
-int dimen dp_756 0x7f070340
-int dimen dp_757 0x7f070341
-int dimen dp_758 0x7f070342
-int dimen dp_759 0x7f070343
-int dimen dp_76 0x7f070344
-int dimen dp_760 0x7f070345
-int dimen dp_761 0x7f070346
-int dimen dp_762 0x7f070347
-int dimen dp_763 0x7f070348
-int dimen dp_764 0x7f070349
-int dimen dp_765 0x7f07034a
-int dimen dp_766 0x7f07034b
-int dimen dp_767 0x7f07034c
-int dimen dp_768 0x7f07034d
-int dimen dp_769 0x7f07034e
-int dimen dp_77 0x7f07034f
-int dimen dp_770 0x7f070350
-int dimen dp_771 0x7f070351
-int dimen dp_772 0x7f070352
-int dimen dp_773 0x7f070353
-int dimen dp_774 0x7f070354
-int dimen dp_775 0x7f070355
-int dimen dp_776 0x7f070356
-int dimen dp_777 0x7f070357
-int dimen dp_778 0x7f070358
-int dimen dp_779 0x7f070359
-int dimen dp_78 0x7f07035a
-int dimen dp_780 0x7f07035b
-int dimen dp_781 0x7f07035c
-int dimen dp_782 0x7f07035d
-int dimen dp_783 0x7f07035e
-int dimen dp_784 0x7f07035f
-int dimen dp_785 0x7f070360
-int dimen dp_786 0x7f070361
-int dimen dp_787 0x7f070362
-int dimen dp_788 0x7f070363
-int dimen dp_789 0x7f070364
-int dimen dp_79 0x7f070365
-int dimen dp_790 0x7f070366
-int dimen dp_791 0x7f070367
-int dimen dp_792 0x7f070368
-int dimen dp_793 0x7f070369
-int dimen dp_794 0x7f07036a
-int dimen dp_795 0x7f07036b
-int dimen dp_796 0x7f07036c
-int dimen dp_797 0x7f07036d
-int dimen dp_798 0x7f07036e
-int dimen dp_799 0x7f07036f
-int dimen dp_7_5 0x7f070370
-int dimen dp_8 0x7f070371
-int dimen dp_80 0x7f070372
-int dimen dp_800 0x7f070373
-int dimen dp_801 0x7f070374
-int dimen dp_802 0x7f070375
-int dimen dp_803 0x7f070376
-int dimen dp_804 0x7f070377
-int dimen dp_805 0x7f070378
-int dimen dp_806 0x7f070379
-int dimen dp_807 0x7f07037a
-int dimen dp_808 0x7f07037b
-int dimen dp_809 0x7f07037c
-int dimen dp_81 0x7f07037d
-int dimen dp_810 0x7f07037e
-int dimen dp_811 0x7f07037f
-int dimen dp_812 0x7f070380
-int dimen dp_813 0x7f070381
-int dimen dp_814 0x7f070382
-int dimen dp_815 0x7f070383
-int dimen dp_816 0x7f070384
-int dimen dp_817 0x7f070385
-int dimen dp_818 0x7f070386
-int dimen dp_819 0x7f070387
-int dimen dp_82 0x7f070388
-int dimen dp_820 0x7f070389
-int dimen dp_821 0x7f07038a
-int dimen dp_822 0x7f07038b
-int dimen dp_823 0x7f07038c
-int dimen dp_824 0x7f07038d
-int dimen dp_825 0x7f07038e
-int dimen dp_826 0x7f07038f
-int dimen dp_827 0x7f070390
-int dimen dp_828 0x7f070391
-int dimen dp_829 0x7f070392
-int dimen dp_83 0x7f070393
-int dimen dp_830 0x7f070394
-int dimen dp_831 0x7f070395
-int dimen dp_832 0x7f070396
-int dimen dp_833 0x7f070397
-int dimen dp_834 0x7f070398
-int dimen dp_835 0x7f070399
-int dimen dp_836 0x7f07039a
-int dimen dp_837 0x7f07039b
-int dimen dp_838 0x7f07039c
-int dimen dp_839 0x7f07039d
-int dimen dp_84 0x7f07039e
-int dimen dp_840 0x7f07039f
-int dimen dp_841 0x7f0703a0
-int dimen dp_842 0x7f0703a1
-int dimen dp_843 0x7f0703a2
-int dimen dp_844 0x7f0703a3
-int dimen dp_845 0x7f0703a4
-int dimen dp_846 0x7f0703a5
-int dimen dp_847 0x7f0703a6
-int dimen dp_848 0x7f0703a7
-int dimen dp_849 0x7f0703a8
-int dimen dp_85 0x7f0703a9
-int dimen dp_850 0x7f0703aa
-int dimen dp_851 0x7f0703ab
-int dimen dp_852 0x7f0703ac
-int dimen dp_853 0x7f0703ad
-int dimen dp_854 0x7f0703ae
-int dimen dp_855 0x7f0703af
-int dimen dp_856 0x7f0703b0
-int dimen dp_857 0x7f0703b1
-int dimen dp_858 0x7f0703b2
-int dimen dp_859 0x7f0703b3
-int dimen dp_86 0x7f0703b4
-int dimen dp_860 0x7f0703b5
-int dimen dp_861 0x7f0703b6
-int dimen dp_862 0x7f0703b7
-int dimen dp_863 0x7f0703b8
-int dimen dp_864 0x7f0703b9
-int dimen dp_865 0x7f0703ba
-int dimen dp_866 0x7f0703bb
-int dimen dp_867 0x7f0703bc
-int dimen dp_868 0x7f0703bd
-int dimen dp_869 0x7f0703be
-int dimen dp_87 0x7f0703bf
-int dimen dp_870 0x7f0703c0
-int dimen dp_871 0x7f0703c1
-int dimen dp_872 0x7f0703c2
-int dimen dp_873 0x7f0703c3
-int dimen dp_874 0x7f0703c4
-int dimen dp_875 0x7f0703c5
-int dimen dp_876 0x7f0703c6
-int dimen dp_877 0x7f0703c7
-int dimen dp_878 0x7f0703c8
-int dimen dp_879 0x7f0703c9
-int dimen dp_88 0x7f0703ca
-int dimen dp_880 0x7f0703cb
-int dimen dp_881 0x7f0703cc
-int dimen dp_882 0x7f0703cd
-int dimen dp_883 0x7f0703ce
-int dimen dp_884 0x7f0703cf
-int dimen dp_885 0x7f0703d0
-int dimen dp_886 0x7f0703d1
-int dimen dp_887 0x7f0703d2
-int dimen dp_888 0x7f0703d3
-int dimen dp_889 0x7f0703d4
-int dimen dp_89 0x7f0703d5
-int dimen dp_890 0x7f0703d6
-int dimen dp_891 0x7f0703d7
-int dimen dp_892 0x7f0703d8
-int dimen dp_893 0x7f0703d9
-int dimen dp_894 0x7f0703da
-int dimen dp_895 0x7f0703db
-int dimen dp_896 0x7f0703dc
-int dimen dp_897 0x7f0703dd
-int dimen dp_898 0x7f0703de
-int dimen dp_899 0x7f0703df
-int dimen dp_9 0x7f0703e0
-int dimen dp_90 0x7f0703e1
-int dimen dp_900 0x7f0703e2
-int dimen dp_901 0x7f0703e3
-int dimen dp_902 0x7f0703e4
-int dimen dp_903 0x7f0703e5
-int dimen dp_904 0x7f0703e6
-int dimen dp_905 0x7f0703e7
-int dimen dp_906 0x7f0703e8
-int dimen dp_907 0x7f0703e9
-int dimen dp_908 0x7f0703ea
-int dimen dp_909 0x7f0703eb
-int dimen dp_91 0x7f0703ec
-int dimen dp_910 0x7f0703ed
-int dimen dp_911 0x7f0703ee
-int dimen dp_912 0x7f0703ef
-int dimen dp_913 0x7f0703f0
-int dimen dp_914 0x7f0703f1
-int dimen dp_915 0x7f0703f2
-int dimen dp_916 0x7f0703f3
-int dimen dp_917 0x7f0703f4
-int dimen dp_918 0x7f0703f5
-int dimen dp_919 0x7f0703f6
-int dimen dp_92 0x7f0703f7
-int dimen dp_920 0x7f0703f8
-int dimen dp_921 0x7f0703f9
-int dimen dp_922 0x7f0703fa
-int dimen dp_923 0x7f0703fb
-int dimen dp_924 0x7f0703fc
-int dimen dp_925 0x7f0703fd
-int dimen dp_926 0x7f0703fe
-int dimen dp_927 0x7f0703ff
-int dimen dp_928 0x7f070400
-int dimen dp_929 0x7f070401
-int dimen dp_93 0x7f070402
-int dimen dp_930 0x7f070403
-int dimen dp_931 0x7f070404
-int dimen dp_932 0x7f070405
-int dimen dp_933 0x7f070406
-int dimen dp_934 0x7f070407
-int dimen dp_935 0x7f070408
-int dimen dp_936 0x7f070409
-int dimen dp_937 0x7f07040a
-int dimen dp_938 0x7f07040b
-int dimen dp_939 0x7f07040c
-int dimen dp_94 0x7f07040d
-int dimen dp_940 0x7f07040e
-int dimen dp_941 0x7f07040f
-int dimen dp_942 0x7f070410
-int dimen dp_943 0x7f070411
-int dimen dp_944 0x7f070412
-int dimen dp_945 0x7f070413
-int dimen dp_946 0x7f070414
-int dimen dp_947 0x7f070415
-int dimen dp_948 0x7f070416
-int dimen dp_949 0x7f070417
-int dimen dp_95 0x7f070418
-int dimen dp_950 0x7f070419
-int dimen dp_951 0x7f07041a
-int dimen dp_952 0x7f07041b
-int dimen dp_953 0x7f07041c
-int dimen dp_954 0x7f07041d
-int dimen dp_955 0x7f07041e
-int dimen dp_956 0x7f07041f
-int dimen dp_957 0x7f070420
-int dimen dp_958 0x7f070421
-int dimen dp_959 0x7f070422
-int dimen dp_96 0x7f070423
-int dimen dp_960 0x7f070424
-int dimen dp_961 0x7f070425
-int dimen dp_962 0x7f070426
-int dimen dp_963 0x7f070427
-int dimen dp_964 0x7f070428
-int dimen dp_965 0x7f070429
-int dimen dp_966 0x7f07042a
-int dimen dp_967 0x7f07042b
-int dimen dp_968 0x7f07042c
-int dimen dp_969 0x7f07042d
-int dimen dp_97 0x7f07042e
-int dimen dp_970 0x7f07042f
-int dimen dp_971 0x7f070430
-int dimen dp_972 0x7f070431
-int dimen dp_973 0x7f070432
-int dimen dp_974 0x7f070433
-int dimen dp_975 0x7f070434
-int dimen dp_976 0x7f070435
-int dimen dp_977 0x7f070436
-int dimen dp_978 0x7f070437
-int dimen dp_979 0x7f070438
-int dimen dp_98 0x7f070439
-int dimen dp_980 0x7f07043a
-int dimen dp_981 0x7f07043b
-int dimen dp_982 0x7f07043c
-int dimen dp_983 0x7f07043d
-int dimen dp_984 0x7f07043e
-int dimen dp_985 0x7f07043f
-int dimen dp_986 0x7f070440
-int dimen dp_987 0x7f070441
-int dimen dp_988 0x7f070442
-int dimen dp_989 0x7f070443
-int dimen dp_99 0x7f070444
-int dimen dp_990 0x7f070445
-int dimen dp_991 0x7f070446
-int dimen dp_992 0x7f070447
-int dimen dp_993 0x7f070448
-int dimen dp_994 0x7f070449
-int dimen dp_995 0x7f07044a
-int dimen dp_996 0x7f07044b
-int dimen dp_997 0x7f07044c
-int dimen dp_998 0x7f07044d
-int dimen dp_999 0x7f07044e
-int dimen dp_m_1 0x7f07044f
-int dimen dp_m_10 0x7f070450
-int dimen dp_m_12 0x7f070451
-int dimen dp_m_2 0x7f070452
-int dimen dp_m_20 0x7f070453
-int dimen dp_m_30 0x7f070454
-int dimen dp_m_5 0x7f070455
-int dimen dp_m_60 0x7f070456
-int dimen dp_m_8 0x7f070457
-int dimen fastscroll_default_thickness 0x7f070458
-int dimen fastscroll_margin 0x7f070459
-int dimen fastscroll_minimum_range 0x7f07045a
-int dimen heart_ratingbar_height 0x7f07045b
-int dimen heart_ratingbar_width 0x7f07045c
-int dimen highlight_alpha_material_colored 0x7f07045d
-int dimen highlight_alpha_material_dark 0x7f07045e
-int dimen highlight_alpha_material_light 0x7f07045f
-int dimen hint_alpha_material_dark 0x7f070460
-int dimen hint_alpha_material_light 0x7f070461
-int dimen hint_pressed_alpha_material_dark 0x7f070462
-int dimen hint_pressed_alpha_material_light 0x7f070463
-int dimen item_touch_helper_max_drag_scroll_per_frame 0x7f070464
-int dimen item_touch_helper_swipe_escape_max_velocity 0x7f070465
-int dimen item_touch_helper_swipe_escape_velocity 0x7f070466
-int dimen key_height 0x7f070467
-int dimen module_common_shadow_width 0x7f070468
-int dimen module_common_shadow_width_pos 0x7f070469
-int dimen module_commons_toast_icon_width 0x7f07046a
-int dimen module_commons_toast_marginBottom 0x7f07046b
-int dimen module_commons_toast_marginLeft 0x7f07046c
-int dimen module_commons_toast_marginRight 0x7f07046d
-int dimen module_commons_toast_marginTop 0x7f07046e
-int dimen module_commons_toast_maxWidth 0x7f07046f
-int dimen module_commons_toast_minWidth 0x7f070470
-int dimen module_commons_toast_space_between_icon_and_msg 0x7f070471
-int dimen module_commons_toast_textSize 0x7f070472
-int dimen module_commons_toast_with_left_drawable_marginBottom 0x7f070473
-int dimen module_commons_toast_with_left_drawable_marginLeft 0x7f070474
-int dimen module_commons_toast_with_left_drawable_marginTop 0x7f070475
-int dimen module_commons_toast_y_offset 0x7f070476
-int dimen module_mvision_big_view_height 0x7f070477
-int dimen module_mvision_big_view_width 0x7f070478
-int dimen module_mvision_big_view_x 0x7f070479
-int dimen module_mvision_big_view_y 0x7f07047a
-int dimen module_mvision_view_height 0x7f07047b
-int dimen module_mvision_view_width 0x7f07047c
-int dimen module_mvision_view_x 0x7f07047d
-int dimen module_mvision_view_y 0x7f07047e
-int dimen module_service_content_minWidth 0x7f07047f
-int dimen module_service_content_textSize 0x7f070480
-int dimen module_service_id_marker_content_paddingRight 0x7f070481
-int dimen module_service_id_marker_content_paddingRight_widthoutCall 0x7f070482
-int dimen module_service_marker_anchor_size 0x7f070483
-int dimen module_service_marker_bounds_bottomMargin 0x7f070484
-int dimen module_service_marker_bounds_leftMargin 0x7f070485
-int dimen module_service_marker_bounds_rightMargin 0x7f070486
-int dimen module_service_marker_bounds_topMargin 0x7f070487
-int dimen module_service_marker_bubble_height 0x7f070488
-int dimen module_service_marker_bubble_icon_height 0x7f070489
-int dimen module_service_marker_bubble_icon_marginBottom 0x7f07048a
-int dimen module_service_marker_bubble_icon_width 0x7f07048b
-int dimen module_service_marker_bubble_width 0x7f07048c
-int dimen module_service_marker_dot_marginTop 0x7f07048d
-int dimen module_service_tag_textSize 0x7f07048e
-int dimen module_service_user_header_height 0x7f07048f
-int dimen module_service_user_header_width 0x7f070490
-int dimen module_services_empty_tip_marginTop 0x7f070491
-int dimen module_services_empty_tip_textSize 0x7f070492
-int dimen module_services_id_panel_item_avatar_border_width 0x7f070493
-int dimen module_services_id_panel_item_distance_marginLeft 0x7f070494
-int dimen module_services_info_window_height 0x7f070495
-int dimen module_services_info_window_paddingEnd 0x7f070496
-int dimen module_services_info_window_paddingStart 0x7f070497
-int dimen module_services_load_strategy_marginRight 0x7f070498
-int dimen module_services_load_strategy_paddingLeft 0x7f070499
-int dimen module_services_load_strategy_paddingTop 0x7f07049a
-int dimen module_services_load_strategy_textSize 0x7f07049b
-int dimen module_services_online_car_panel_close_margin_top 0x7f07049c
-int dimen module_services_online_car_panel_marginBottom 0x7f07049d
-int dimen module_services_online_car_panel_marginRight 0x7f07049e
-int dimen module_services_online_car_panel_marginTop 0x7f07049f
-int dimen module_services_online_car_panel_paddingBottom 0x7f0704a0
-int dimen module_services_online_car_panel_paddingLeft 0x7f0704a1
-int dimen module_services_online_car_panel_recycler_view_margin_top 0x7f0704a2
-int dimen module_services_online_car_panel_title_margin_top 0x7f0704a3
-int dimen module_services_online_car_panel_title_text_size 0x7f0704a4
-int dimen module_services_panel_item_avatar_size 0x7f0704a5
-int dimen module_services_panel_item_corner 0x7f0704a6
-int dimen module_services_panel_item_detail_bkg_corner 0x7f0704a7
-int dimen module_services_panel_item_detail_padding 0x7f0704a8
-int dimen module_services_panel_item_detail_textSize 0x7f0704a9
-int dimen module_services_panel_item_distance_textSize 0x7f0704aa
-int dimen module_services_panel_item_marginBottom 0x7f0704ab
-int dimen module_services_panel_item_nickname_marginLeft 0x7f0704ac
-int dimen module_services_panel_item_nickname_textSize 0x7f0704ad
-int dimen module_services_panel_item_padding 0x7f0704ae
-int dimen module_services_panel_strategy_button_bkg_corner 0x7f0704af
-int dimen module_services_panel_strategy_button_marginTop 0x7f0704b0
-int dimen notification_action_icon_size 0x7f0704b1
-int dimen notification_action_text_size 0x7f0704b2
-int dimen notification_big_circle_margin 0x7f0704b3
-int dimen notification_content_margin_start 0x7f0704b4
-int dimen notification_large_icon_height 0x7f0704b5
-int dimen notification_large_icon_width 0x7f0704b6
-int dimen notification_main_column_padding_top 0x7f0704b7
-int dimen notification_media_narrow_margin 0x7f0704b8
-int dimen notification_right_icon_size 0x7f0704b9
-int dimen notification_right_side_padding_top 0x7f0704ba
-int dimen notification_small_icon_background_padding 0x7f0704bb
-int dimen notification_small_icon_size_as_large 0x7f0704bc
-int dimen notification_subtext_size 0x7f0704bd
-int dimen notification_top_pad 0x7f0704be
-int dimen notification_top_pad_large_text 0x7f0704bf
-int dimen padding_large 0x7f0704c0
-int dimen padding_medium 0x7f0704c1
-int dimen padding_small 0x7f0704c2
-int dimen panel_list_item_title_size 0x7f0704c3
-int dimen path_width 0x7f0704c4
-int dimen scale 0x7f0704c5
-int dimen share_item_address 0x7f0704c6
-int dimen sp_10 0x7f0704c7
-int dimen sp_11 0x7f0704c8
-int dimen sp_12 0x7f0704c9
-int dimen sp_13 0x7f0704ca
-int dimen sp_14 0x7f0704cb
-int dimen sp_15 0x7f0704cc
-int dimen sp_16 0x7f0704cd
-int dimen sp_17 0x7f0704ce
-int dimen sp_18 0x7f0704cf
-int dimen sp_19 0x7f0704d0
-int dimen sp_20 0x7f0704d1
-int dimen sp_21 0x7f0704d2
-int dimen sp_22 0x7f0704d3
-int dimen sp_23 0x7f0704d4
-int dimen sp_24 0x7f0704d5
-int dimen sp_25 0x7f0704d6
-int dimen sp_28 0x7f0704d7
-int dimen sp_30 0x7f0704d8
-int dimen sp_32 0x7f0704d9
-int dimen sp_34 0x7f0704da
-int dimen sp_36 0x7f0704db
-int dimen sp_38 0x7f0704dc
-int dimen sp_40 0x7f0704dd
-int dimen sp_42 0x7f0704de
-int dimen sp_48 0x7f0704df
-int dimen sp_6 0x7f0704e0
-int dimen sp_7 0x7f0704e1
-int dimen sp_8 0x7f0704e2
-int dimen sp_9 0x7f0704e3
-int dimen subtitle_corner_radius 0x7f0704e4
-int dimen subtitle_outline_width 0x7f0704e5
-int dimen subtitle_shadow_offset 0x7f0704e6
-int dimen subtitle_shadow_radius 0x7f0704e7
-int dimen text_size_btn 0x7f0704e8
-int dimen text_size_btn2 0x7f0704e9
-int dimen text_size_middle 0x7f0704ea
-int dimen text_size_nav 0x7f0704eb
-int dimen tooltip_corner_radius 0x7f0704ec
-int dimen tooltip_horizontal_padding 0x7f0704ed
-int dimen tooltip_margin 0x7f0704ee
-int dimen tooltip_precise_anchor_extra_offset 0x7f0704ef
-int dimen tooltip_precise_anchor_threshold 0x7f0704f0
-int dimen tooltip_vertical_padding 0x7f0704f1
-int dimen tooltip_y_offset_non_touch 0x7f0704f2
-int dimen tooltip_y_offset_touch 0x7f0704f3
-int dimen v2x_panel_loading_top 0x7f0704f4
-int dimen v2x_share_btn_height 0x7f0704f5
-int dimen v2x_share_btn_width 0x7f0704f6
-int drawable abc_ab_share_pack_mtrl_alpha 0x7f080001
-int drawable abc_action_bar_item_background_material 0x7f080002
-int drawable abc_btn_borderless_material 0x7f080003
-int drawable abc_btn_check_material 0x7f080004
-int drawable abc_btn_check_material_anim 0x7f080005
-int drawable abc_btn_check_to_on_mtrl_000 0x7f080006
-int drawable abc_btn_check_to_on_mtrl_015 0x7f080007
-int drawable abc_btn_colored_material 0x7f080008
-int drawable abc_btn_default_mtrl_shape 0x7f080009
-int drawable abc_btn_radio_material 0x7f08000a
-int drawable abc_btn_radio_material_anim 0x7f08000b
-int drawable abc_btn_radio_to_on_mtrl_000 0x7f08000c
-int drawable abc_btn_radio_to_on_mtrl_015 0x7f08000d
-int drawable abc_btn_switch_to_on_mtrl_00001 0x7f08000e
-int drawable abc_btn_switch_to_on_mtrl_00012 0x7f08000f
-int drawable abc_cab_background_internal_bg 0x7f080010
-int drawable abc_cab_background_top_material 0x7f080011
-int drawable abc_cab_background_top_mtrl_alpha 0x7f080012
-int drawable abc_control_background_material 0x7f080013
-int drawable abc_dialog_material_background 0x7f080014
-int drawable abc_edit_text_material 0x7f080015
-int drawable abc_ic_ab_back_material 0x7f080016
-int drawable abc_ic_arrow_drop_right_black_24dp 0x7f080017
-int drawable abc_ic_clear_material 0x7f080018
-int drawable abc_ic_commit_search_api_mtrl_alpha 0x7f080019
-int drawable abc_ic_go_search_api_material 0x7f08001a
-int drawable abc_ic_menu_copy_mtrl_am_alpha 0x7f08001b
-int drawable abc_ic_menu_cut_mtrl_alpha 0x7f08001c
-int drawable abc_ic_menu_overflow_material 0x7f08001d
-int drawable abc_ic_menu_paste_mtrl_am_alpha 0x7f08001e
-int drawable abc_ic_menu_selectall_mtrl_alpha 0x7f08001f
-int drawable abc_ic_menu_share_mtrl_alpha 0x7f080020
-int drawable abc_ic_search_api_material 0x7f080021
-int drawable abc_ic_star_black_16dp 0x7f080022
-int drawable abc_ic_star_black_36dp 0x7f080023
-int drawable abc_ic_star_black_48dp 0x7f080024
-int drawable abc_ic_star_half_black_16dp 0x7f080025
-int drawable abc_ic_star_half_black_36dp 0x7f080026
-int drawable abc_ic_star_half_black_48dp 0x7f080027
-int drawable abc_ic_voice_search_api_material 0x7f080028
-int drawable abc_item_background_holo_dark 0x7f080029
-int drawable abc_item_background_holo_light 0x7f08002a
-int drawable abc_list_divider_material 0x7f08002b
-int drawable abc_list_divider_mtrl_alpha 0x7f08002c
-int drawable abc_list_focused_holo 0x7f08002d
-int drawable abc_list_longpressed_holo 0x7f08002e
-int drawable abc_list_pressed_holo_dark 0x7f08002f
-int drawable abc_list_pressed_holo_light 0x7f080030
-int drawable abc_list_selector_background_transition_holo_dark 0x7f080031
-int drawable abc_list_selector_background_transition_holo_light 0x7f080032
-int drawable abc_list_selector_disabled_holo_dark 0x7f080033
-int drawable abc_list_selector_disabled_holo_light 0x7f080034
-int drawable abc_list_selector_holo_dark 0x7f080035
-int drawable abc_list_selector_holo_light 0x7f080036
-int drawable abc_menu_hardkey_panel_mtrl_mult 0x7f080037
-int drawable abc_popup_background_mtrl_mult 0x7f080038
-int drawable abc_ratingbar_indicator_material 0x7f080039
-int drawable abc_ratingbar_material 0x7f08003a
-int drawable abc_ratingbar_small_material 0x7f08003b
-int drawable abc_scrubber_control_off_mtrl_alpha 0x7f08003c
-int drawable abc_scrubber_control_to_pressed_mtrl_000 0x7f08003d
-int drawable abc_scrubber_control_to_pressed_mtrl_005 0x7f08003e
-int drawable abc_scrubber_primary_mtrl_alpha 0x7f08003f
-int drawable abc_scrubber_track_mtrl_alpha 0x7f080040
-int drawable abc_seekbar_thumb_material 0x7f080041
-int drawable abc_seekbar_tick_mark_material 0x7f080042
-int drawable abc_seekbar_track_material 0x7f080043
-int drawable abc_spinner_mtrl_am_alpha 0x7f080044
-int drawable abc_spinner_textfield_background_material 0x7f080045
-int drawable abc_switch_thumb_material 0x7f080046
-int drawable abc_switch_track_mtrl_alpha 0x7f080047
-int drawable abc_tab_indicator_material 0x7f080048
-int drawable abc_tab_indicator_mtrl_alpha 0x7f080049
-int drawable abc_text_cursor_material 0x7f08004a
-int drawable abc_text_select_handle_left_mtrl_dark 0x7f08004b
-int drawable abc_text_select_handle_left_mtrl_light 0x7f08004c
-int drawable abc_text_select_handle_middle_mtrl_dark 0x7f08004d
-int drawable abc_text_select_handle_middle_mtrl_light 0x7f08004e
-int drawable abc_text_select_handle_right_mtrl_dark 0x7f08004f
-int drawable abc_text_select_handle_right_mtrl_light 0x7f080050
-int drawable abc_textfield_activated_mtrl_alpha 0x7f080051
-int drawable abc_textfield_default_mtrl_alpha 0x7f080052
-int drawable abc_textfield_search_activated_mtrl_alpha 0x7f080053
-int drawable abc_textfield_search_default_mtrl_alpha 0x7f080054
-int drawable abc_textfield_search_material 0x7f080055
-int drawable abc_vector_test 0x7f080056
-int drawable amap_bus 0x7f080057
-int drawable amap_car 0x7f080058
-int drawable amap_end 0x7f080059
-int drawable amap_man 0x7f08005a
-int drawable amap_ride 0x7f08005b
-int drawable amap_route_color_texture_0_arrow 0x7f08005c
-int drawable amap_route_color_texture_1_arrow 0x7f08005d
-int drawable amap_route_color_texture_2_arrow 0x7f08005e
-int drawable amap_route_color_texture_3_arrow 0x7f08005f
-int drawable amap_route_color_texture_4_arrow 0x7f080060
-int drawable amap_route_color_texture_5_arrow 0x7f080061
-int drawable amap_route_color_texture_6_arrow 0x7f080062
-int drawable amap_route_color_texture_7_arrow 0x7f080063
-int drawable amap_route_color_texture_8_arrow 0x7f080064
-int drawable amap_route_color_texture_9_arrow 0x7f080065
-int drawable amap_start 0x7f080066
-int drawable amap_through 0x7f080067
-int drawable app_icon 0x7f080068
-int drawable bg_jj_pressed 0x7f080069
-int drawable bg_map_marker_yellow_info 0x7f08006a
-int drawable bg_menu_n 0x7f08006b
-int drawable bg_menu_p 0x7f08006c
-int drawable bg_pressed 0x7f08006d
-int drawable bg_search_edit 0x7f08006e
-int drawable bg_shape_reverse_yellow 0x7f08006f
-int drawable black 0x7f080070
-int drawable brvah_sample_footer_loading 0x7f080071
-int drawable brvah_sample_footer_loading_progress 0x7f080072
-int drawable btn 0x7f080073
-int drawable btn_checkbox_checked_mtrl 0x7f080074
-int drawable btn_checkbox_checked_to_unchecked_mtrl_animation 0x7f080075
-int drawable btn_checkbox_unchecked_mtrl 0x7f080076
-int drawable btn_checkbox_unchecked_to_checked_mtrl_animation 0x7f080077
-int drawable btn_day 0x7f080078
-int drawable btn_day_press 0x7f080079
-int drawable btn_guidance_selecter 0x7f08007a
-int drawable btn_keyboard_key_ics 0x7f08007b
-int drawable btn_night 0x7f08007c
-int drawable btn_night_press 0x7f08007d
-int drawable btn_p 0x7f08007e
-int drawable btn_radio_off_mtrl 0x7f08007f
-int drawable btn_radio_off_to_on_mtrl_animation 0x7f080080
-int drawable btn_radio_on_mtrl 0x7f080081
-int drawable btn_radio_on_to_off_mtrl_animation 0x7f080082
-int drawable btn_selecter 0x7f080083
-int drawable btn_selecter_day 0x7f080084
-int drawable btn_selecter_night 0x7f080085
-int drawable btn_selecter_s 0x7f080086
-int drawable custom_info_bubble 0x7f080087
-int drawable default_image 0x7f080088
-int drawable dir1 0x7f080089
-int drawable dir10 0x7f08008a
-int drawable dir11 0x7f08008b
-int drawable dir12 0x7f08008c
-int drawable dir13 0x7f08008d
-int drawable dir14 0x7f08008e
-int drawable dir15 0x7f08008f
-int drawable dir16 0x7f080090
-int drawable dir2 0x7f080091
-int drawable dir3 0x7f080092
-int drawable dir4 0x7f080093
-int drawable dir5 0x7f080094
-int drawable dir6 0x7f080095
-int drawable dir7 0x7f080096
-int drawable dir8 0x7f080097
-int drawable dir9 0x7f080098
-int drawable dir_end 0x7f080099
-int drawable dir_start 0x7f08009a
-int drawable dir_station 0x7f08009b
-int drawable divider_line 0x7f08009c
-int drawable gray 0x7f08009d
-int drawable gray2 0x7f08009e
-int drawable gray3 0x7f08009f
-int drawable gray4 0x7f0800a0
-int drawable green 0x7f0800a1
-int drawable guidance_speed_bg 0x7f0800a2
-int drawable guidance_speed_p_bg 0x7f0800a3
-int drawable ic_1 0x7f0800a4
-int drawable ic_10 0x7f0800a5
-int drawable ic_11 0x7f0800a6
-int drawable ic_12 0x7f0800a7
-int drawable ic_13 0x7f0800a8
-int drawable ic_14 0x7f0800a9
-int drawable ic_15 0x7f0800aa
-int drawable ic_16 0x7f0800ab
-int drawable ic_17 0x7f0800ac
-int drawable ic_18 0x7f0800ad
-int drawable ic_19 0x7f0800ae
-int drawable ic_2 0x7f0800af
-int drawable ic_20 0x7f0800b0
-int drawable ic_21 0x7f0800b1
-int drawable ic_22 0x7f0800b2
-int drawable ic_23 0x7f0800b3
-int drawable ic_24 0x7f0800b4
-int drawable ic_25 0x7f0800b5
-int drawable ic_26 0x7f0800b6
-int drawable ic_27 0x7f0800b7
-int drawable ic_28 0x7f0800b8
-int drawable ic_3 0x7f0800b9
-int drawable ic_4 0x7f0800ba
-int drawable ic_5 0x7f0800bb
-int drawable ic_50 0x7f0800bc
-int drawable ic_51 0x7f0800bd
-int drawable ic_52 0x7f0800be
-int drawable ic_53 0x7f0800bf
-int drawable ic_54 0x7f0800c0
-int drawable ic_55 0x7f0800c1
-int drawable ic_56 0x7f0800c2
-int drawable ic_57 0x7f0800c3
-int drawable ic_58 0x7f0800c4
-int drawable ic_59 0x7f0800c5
-int drawable ic_6 0x7f0800c6
-int drawable ic_60 0x7f0800c7
-int drawable ic_61 0x7f0800c8
-int drawable ic_62 0x7f0800c9
-int drawable ic_63 0x7f0800ca
-int drawable ic_64 0x7f0800cb
-int drawable ic_65 0x7f0800cc
-int drawable ic_66 0x7f0800cd
-int drawable ic_67 0x7f0800ce
-int drawable ic_68 0x7f0800cf
-int drawable ic_69 0x7f0800d0
-int drawable ic_7 0x7f0800d1
-int drawable ic_8 0x7f0800d2
-int drawable ic_9 0x7f0800d3
-int drawable ic_amap_navi_cursor 0x7f0800d4
-int drawable ic_endpoint 0x7f0800d5
-int drawable ic_map_textview_bg 0x7f0800d6
-int drawable ic_navi_start 0x7f0800d7
-int drawable ic_navi_target 0x7f0800d8
-int drawable ic_panel_route_select 0x7f0800d9
-int drawable ic_panel_route_select_down 0x7f0800da
-int drawable ic_refresh 0x7f0800db
-int drawable ic_search_input 0x7f0800dc
-int drawable ic_snapshot_ph 0x7f0800dd
-int drawable icon_default_user_head 0x7f0800de
-int drawable icon_heart_choose 0x7f0800df
-int drawable icon_heart_second 0x7f0800e0
-int drawable icon_heart_unchoose 0x7f0800e1
-int drawable icon_map_marker_4s 0x7f0800e2
-int drawable icon_map_marker_book 0x7f0800e3
-int drawable icon_map_marker_car_gray 0x7f0800e4
-int drawable icon_map_marker_car_gray_selected 0x7f0800e5
-int drawable icon_map_marker_car_type2 0x7f0800e6
-int drawable icon_map_marker_car_type_110 0x7f0800e7
-int drawable icon_map_marker_car_type_119 0x7f0800e8
-int drawable icon_map_marker_car_type_120 0x7f0800e9
-int drawable icon_map_marker_car_type_bus 0x7f0800ea
-int drawable icon_map_marker_car_type_taxi 0x7f0800eb
-int drawable icon_map_marker_living 0x7f0800ec
-int drawable icon_map_marker_living_white 0x7f0800ed
-int drawable icon_map_marker_location_yellow 0x7f0800ee
-int drawable icon_map_marker_location_yellow_vr 0x7f0800ef
-int drawable icon_map_marker_misic 0x7f0800f0
-int drawable icon_map_marker_news 0x7f0800f1
-int drawable icon_map_marker_pondingl 0x7f0800f2
-int drawable icon_map_marker_pondingl2 0x7f0800f3
-int drawable icon_map_marker_pondingl2_white 0x7f0800f4
-int drawable icon_map_marker_refuel 0x7f0800f5
-int drawable icon_map_marker_road_block_off 0x7f0800f6
-int drawable icon_map_marker_road_block_off2 0x7f0800f7
-int drawable icon_map_marker_road_block_off2_white 0x7f0800f8
-int drawable icon_map_marker_road_block_up 0x7f0800f9
-int drawable icon_map_marker_road_block_up2 0x7f0800fa
-int drawable icon_map_marker_road_block_up2_white 0x7f0800fb
-int drawable icon_map_marker_road_check 0x7f0800fc
-int drawable icon_map_marker_road_check2 0x7f0800fd
-int drawable icon_map_marker_road_check2_white 0x7f0800fe
-int drawable icon_map_marker_road_work 0x7f0800ff
-int drawable icon_map_marker_road_work2 0x7f080100
-int drawable icon_map_marker_road_work2_white 0x7f080101
-int drawable icon_map_marker_shear_news 0x7f080102
-int drawable icon_map_marker_shop 0x7f080103
-int drawable icon_map_marker_shop_discount 0x7f080104
-int drawable join_checkbox_bg 0x7f080105
-int drawable keyboard_background_holo 0x7f080106
-int drawable line_v 0x7f080107
-int drawable list_line 0x7f080108
-int drawable listview_bg_dark 0x7f080109
-int drawable live_exit 0x7f08010a
-int drawable location_city_image 0x7f08010b
-int drawable main_solid_left_page_up_normal 0x7f08010c
-int drawable main_solid_left_page_up_press 0x7f08010d
-int drawable main_solid_right_page_up_normal 0x7f08010e
-int drawable main_solid_right_page_up_press 0x7f08010f
-int drawable mainpage_location_img 0x7f080110
-int drawable map_api_ic_current_location2 0x7f080111
-int drawable map_custom_ic_current_location2 0x7f080112
-int drawable map_location_normal 0x7f080113
-int drawable map_location_press 0x7f080114
-int drawable mapcolor 0x7f080115
-int drawable mapscale 0x7f080116
-int drawable marker_blue 0x7f080117
-int drawable menu_left_btn_p 0x7f080118
-int drawable module_common_default_user_head 0x7f080119
-int drawable module_common_online_car_vr_left 0x7f08011a
-int drawable module_common_online_car_vr_machine_middle 0x7f08011b
-int drawable module_common_online_car_vr_middle 0x7f08011c
-int drawable module_common_online_car_vr_reverse 0x7f08011d
-int drawable module_common_online_car_vr_right 0x7f08011e
-int drawable module_commons_heart_ratingbar_drawable 0x7f08011f
-int drawable module_commons_machine_car_other_left_normal 0x7f080120
-int drawable module_commons_machine_car_other_left_reverse_normal 0x7f080121
-int drawable module_commons_machine_car_other_normal 0x7f080122
-int drawable module_commons_machine_car_other_reverse_normal 0x7f080123
-int drawable module_commons_machine_car_other_right_normal 0x7f080124
-int drawable module_commons_machine_car_other_right_reverse_normal 0x7f080125
-int drawable module_commons_shape_dlg_round_bkg 0x7f080126
-int drawable module_commons_shape_left_btn_bkg 0x7f080127
-int drawable module_commons_shape_right_btn_bkg 0x7f080128
-int drawable module_commons_toast_bkg 0x7f080129
-int drawable module_commons_user_car_other_dangerous 0x7f08012a
-int drawable module_commons_user_car_other_left_normal 0x7f08012b
-int drawable module_commons_user_car_other_left_normal_dangerous 0x7f08012c
-int drawable module_commons_user_car_other_left_reverse_dangerous 0x7f08012d
-int drawable module_commons_user_car_other_left_reverse_normal 0x7f08012e
-int drawable module_commons_user_car_other_normal 0x7f08012f
-int drawable module_commons_user_car_other_reverse_dangerous 0x7f080130
-int drawable module_commons_user_car_other_reverse_normal 0x7f080131
-int drawable module_commons_user_car_other_right_dangerous 0x7f080132
-int drawable module_commons_user_car_other_right_normal 0x7f080133
-int drawable module_commons_user_car_other_right_reverse_dangerous 0x7f080134
-int drawable module_commons_user_car_other_right_reverse_normal 0x7f080135
-int drawable module_commons_user_car_self 0x7f080136
-int drawable module_commons_user_car_self_left 0x7f080137
-int drawable module_commons_user_car_self_right 0x7f080138
-int drawable module_dw_common_corner_bkg_light 0x7f080139
-int drawable module_service_ic_call 0x7f08013a
-int drawable module_service_ic_rc_accident 0x7f08013b
-int drawable module_service_ic_rc_accident2 0x7f08013c
-int drawable module_service_ic_rc_accident3 0x7f08013d
-int drawable module_service_ic_rc_accident3_white 0x7f08013e
-int drawable module_service_ic_rc_dark_frog 0x7f08013f
-int drawable module_service_ic_rc_dark_frog2 0x7f080140
-int drawable module_service_ic_rc_dark_frog2_white 0x7f080141
-int drawable module_service_ic_rc_freeze 0x7f080142
-int drawable module_service_ic_rc_freeze2 0x7f080143
-int drawable module_service_ic_rc_freeze2_white 0x7f080144
-int drawable module_service_ic_rc_illegal_park 0x7f080145
-int drawable module_service_ic_rc_illegal_park_white 0x7f080146
-int drawable module_service_ic_rc_parking 0x7f080147
-int drawable module_service_ic_rc_parking2 0x7f080148
-int drawable module_service_ic_rc_road_slippery 0x7f080149
-int drawable module_service_ic_rc_road_slippery_light 0x7f08014a
-int drawable module_service_ic_seek_helping 0x7f08014b
-int drawable module_services_marker_bkg 0x7f08014c
-int drawable navi_tmcbar_bg 0x7f08014d
-int drawable not_join_checkbox_bg 0x7f08014e
-int drawable notification_action_background 0x7f08014f
-int drawable notification_bg 0x7f080150
-int drawable notification_bg_low 0x7f080151
-int drawable notification_bg_low_normal 0x7f080152
-int drawable notification_bg_low_pressed 0x7f080153
-int drawable notification_bg_normal 0x7f080154
-int drawable notification_bg_normal_pressed 0x7f080155
-int drawable notification_icon_background 0x7f080156
-int drawable notification_template_icon_bg 0x7f080157
-int drawable notification_template_icon_low_bg 0x7f080158
-int drawable notification_tile_bg 0x7f080159
-int drawable notify_panel_notification_icon_bg 0x7f08015a
-int drawable panel_channellist_detail 0x7f08015b
-int drawable panel_menu_selector 0x7f08015c
-int drawable panel_route_selecter 0x7f08015d
-int drawable panel_route_selecter_p 0x7f08015e
-int drawable panel_search_btn_selector 0x7f08015f
-int drawable panel_search_indicator_selector 0x7f080160
-int drawable panel_search_voice_selector 0x7f080161
-int drawable panel_sharetrf_bg_pressed 0x7f080162
-int drawable progress_bg 0x7f080163
-int drawable public_arrow_back_iv 0x7f080164
-int drawable rect_dark 0x7f080165
-int drawable rect_light 0x7f080166
-int drawable result_color 0x7f080167
-int drawable seagreen 0x7f080168
-int drawable search_information_normal 0x7f080169
-int drawable search_information_press 0x7f08016a
-int drawable selector_nav_btn 0x7f08016b
-int drawable shadow_left 0x7f08016c
-int drawable shadow_line 0x7f08016d
-int drawable shadow_line2 0x7f08016e
-int drawable shadow_progress 0x7f08016f
-int drawable shadow_right 0x7f080170
-int drawable shape_blue_trans 0x7f080171
-int drawable stat_sys_download 0x7f080172
-int drawable tc_10 0x7f080173
-int drawable tc_11 0x7f080174
-int drawable tc_12 0x7f080175
-int drawable tc_13 0x7f080176
-int drawable tc_14 0x7f080177
-int drawable tc_15 0x7f080178
-int drawable tc_16 0x7f080179
-int drawable tc_17 0x7f08017a
-int drawable tc_20 0x7f08017b
-int drawable tc_21 0x7f08017c
-int drawable tc_22 0x7f08017d
-int drawable tc_23 0x7f08017e
-int drawable tc_24 0x7f08017f
-int drawable tc_25 0x7f080180
-int drawable tc_26 0x7f080181
-int drawable tc_27 0x7f080182
-int drawable tc_28 0x7f080183
-int drawable tc_30 0x7f080184
-int drawable tc_31 0x7f080185
-int drawable tc_32 0x7f080186
-int drawable tc_33 0x7f080187
-int drawable tc_34 0x7f080188
-int drawable tc_35 0x7f080189
-int drawable tc_36 0x7f08018a
-int drawable tc_37 0x7f08018b
-int drawable tc_38 0x7f08018c
-int drawable tc_39 0x7f08018d
-int drawable tc_40 0x7f08018e
-int drawable tc_41 0x7f08018f
-int drawable tc_42 0x7f080190
-int drawable tc_43 0x7f080191
-int drawable tc_44 0x7f080192
-int drawable tc_68 0x7f080193
-int drawable tc_84 0x7f080194
-int drawable tc_85 0x7f080195
-int drawable text_bg 0x7f080196
-int drawable textblue 0x7f080197
-int drawable tooltip_frame_dark 0x7f080198
-int drawable tooltip_frame_light 0x7f080199
-int drawable transparent_background 0x7f08019a
-int drawable transparent_drawable 0x7f08019b
-int drawable video_loading_img 0x7f08019c
-int drawable white 0x7f08019d
-int drawable white1 0x7f08019e
-int drawable white2 0x7f08019f
-int id BaseQuickAdapter_databinding_support 0x7f0b0001
-int id BaseQuickAdapter_dragging_support 0x7f0b0002
-int id BaseQuickAdapter_swiping_support 0x7f0b0003
-int id BaseQuickAdapter_viewholder_support 0x7f0b0004
-int id Full 0x7f0b0005
-int id Half 0x7f0b0006
-int id accessibility_action_clickable_span 0x7f0b0007
-int id accessibility_custom_action_0 0x7f0b0008
-int id accessibility_custom_action_1 0x7f0b0009
-int id accessibility_custom_action_10 0x7f0b000a
-int id accessibility_custom_action_11 0x7f0b000b
-int id accessibility_custom_action_12 0x7f0b000c
-int id accessibility_custom_action_13 0x7f0b000d
-int id accessibility_custom_action_14 0x7f0b000e
-int id accessibility_custom_action_15 0x7f0b000f
-int id accessibility_custom_action_16 0x7f0b0010
-int id accessibility_custom_action_17 0x7f0b0011
-int id accessibility_custom_action_18 0x7f0b0012
-int id accessibility_custom_action_19 0x7f0b0013
-int id accessibility_custom_action_2 0x7f0b0014
-int id accessibility_custom_action_20 0x7f0b0015
-int id accessibility_custom_action_21 0x7f0b0016
-int id accessibility_custom_action_22 0x7f0b0017
-int id accessibility_custom_action_23 0x7f0b0018
-int id accessibility_custom_action_24 0x7f0b0019
-int id accessibility_custom_action_25 0x7f0b001a
-int id accessibility_custom_action_26 0x7f0b001b
-int id accessibility_custom_action_27 0x7f0b001c
-int id accessibility_custom_action_28 0x7f0b001d
-int id accessibility_custom_action_29 0x7f0b001e
-int id accessibility_custom_action_3 0x7f0b001f
-int id accessibility_custom_action_30 0x7f0b0020
-int id accessibility_custom_action_31 0x7f0b0021
-int id accessibility_custom_action_4 0x7f0b0022
-int id accessibility_custom_action_5 0x7f0b0023
-int id accessibility_custom_action_6 0x7f0b0024
-int id accessibility_custom_action_7 0x7f0b0025
-int id accessibility_custom_action_8 0x7f0b0026
-int id accessibility_custom_action_9 0x7f0b0027
-int id action0 0x7f0b0028
-int id action_bar 0x7f0b0029
-int id action_bar_activity_content 0x7f0b002a
-int id action_bar_container 0x7f0b002b
-int id action_bar_root 0x7f0b002c
-int id action_bar_spinner 0x7f0b002d
-int id action_bar_subtitle 0x7f0b002e
-int id action_bar_title 0x7f0b002f
-int id action_container 0x7f0b0030
-int id action_context_bar 0x7f0b0031
-int id action_divider 0x7f0b0032
-int id action_image 0x7f0b0033
-int id action_menu_divider 0x7f0b0034
-int id action_menu_presenter 0x7f0b0035
-int id action_mode_bar 0x7f0b0036
-int id action_mode_bar_stub 0x7f0b0037
-int id action_mode_close_button 0x7f0b0038
-int id action_text 0x7f0b0039
-int id actions 0x7f0b003a
-int id activity_chooser_view_content 0x7f0b003b
-int id add 0x7f0b003c
-int id alertTitle 0x7f0b003d
-int id async 0x7f0b003e
-int id blocking 0x7f0b003f
-int id bottom 0x7f0b0040
-int id box_bkg 0x7f0b0041
-int id box_info 0x7f0b0042
-int id box_progress 0x7f0b0043
-int id btn_dest 0x7f0b0044
-int id btn_navi 0x7f0b0045
-int id btn_pos 0x7f0b0046
-int id btn_start 0x7f0b0047
-int id btn_tu 0x7f0b0048
-int id btn_zoom_city 0x7f0b0049
-int id btn_zoom_country 0x7f0b004a
-int id btn_zoom_in 0x7f0b004b
-int id btn_zoom_out 0x7f0b004c
-int id btn_zoom_provincial 0x7f0b004d
-int id btn_zoom_road 0x7f0b004e
-int id buffer 0x7f0b004f
-int id buttonPanel 0x7f0b0050
-int id cancel_action 0x7f0b0051
-int id center 0x7f0b0052
-int id centerCrop 0x7f0b0053
-int id centerInside 0x7f0b0054
-int id checkbox 0x7f0b0055
-int id checked 0x7f0b0056
-int id chronometer 0x7f0b0057
-int id circle 0x7f0b0058
-int id clMarkerContent 0x7f0b0059
-int id clMarkerTopView 0x7f0b005a
-int id content 0x7f0b005b
-int id contentPanel 0x7f0b005c
-int id cus_polygon 0x7f0b005d
-int id custom 0x7f0b005e
-int id customPanel 0x7f0b005f
-int id customRatingBar 0x7f0b0060
-int id dataBinding 0x7f0b0061
-int id decor_content_parent 0x7f0b0062
-int id default_activity_button 0x7f0b0063
-int id determinate 0x7f0b0064
-int id dialog_button 0x7f0b0065
-int id edit_query 0x7f0b0066
-int id end 0x7f0b0067
-int id end_padder 0x7f0b0068
-int id expand_activities_button 0x7f0b0069
-int id expanded_menu 0x7f0b006a
-int id fitCenter 0x7f0b006b
-int id fitEnd 0x7f0b006c
-int id fitStart 0x7f0b006d
-int id fitXY 0x7f0b006e
-int id fl_cars 0x7f0b006f
-int id focusCrop 0x7f0b0070
-int id forever 0x7f0b0071
-int id glide_custom_view_target_tag 0x7f0b0072
-int id gone 0x7f0b0073
-int id group_divider 0x7f0b0074
-int id guidance_btn_show_route_mode 0x7f0b0075
-int id guidance_enter_image 0x7f0b0076
-int id guidance_exit_image 0x7f0b0077
-int id guidance_iv_line 0x7f0b0078
-int id guidance_layout_next_road 0x7f0b0079
-int id guidance_layout_next_road_name 0x7f0b007a
-int id guidance_layout_next_road_two_name 0x7f0b007b
-int id guidance_layout_server_enter 0x7f0b007c
-int id guidance_left 0x7f0b007d
-int id guidance_progressBar 0x7f0b007e
-int id guidance_server_image 0x7f0b007f
-int id guidance_tv_progress 0x7f0b0080
-int id guidance_tv_speed 0x7f0b0081
-int id home 0x7f0b0082
-int id horizontal 0x7f0b0083
-int id icon 0x7f0b0084
-int id icon_group 0x7f0b0085
-int id image 0x7f0b0086
-int id imgView 0x7f0b0087
-int id img_traffic 0x7f0b0088
-int id img_zoom_in 0x7f0b0089
-int id img_zoom_out 0x7f0b008a
-int id indeterminate 0x7f0b008b
-int id index 0x7f0b008c
-int id info 0x7f0b008d
-int id infoW_title 0x7f0b008e
-int id infoWindowLayer 0x7f0b008f
-int id infow_content 0x7f0b0090
-int id invisible 0x7f0b0091
-int id italic 0x7f0b0092
-int id item_touch_helper_previous_elevation 0x7f0b0093
-int id ivCar 0x7f0b0094
-int id ivIcon 0x7f0b0095
-int id ivReverseTriangle 0x7f0b0096
-int id ivUserHead 0x7f0b0097
-int id iv_back 0x7f0b0098
-int id iv_guidance_3d_route_arrow 0x7f0b0099
-int id iv_guidance_3d_route_bg 0x7f0b009a
-int id iv_guidance_bind_car_arrow 0x7f0b009b
-int id iv_guidance_board_arrow 0x7f0b009c
-int id iv_guidance_board_bg 0x7f0b009d
-int id iv_guidance_enter_icon 0x7f0b009e
-int id iv_guidance_exit_icon 0x7f0b009f
-int id iv_guidance_lane_arrow 0x7f0b00a0
-int id iv_guidance_lane_bg 0x7f0b00a1
-int id iv_guidance_next_road 0x7f0b00a2
-int id iv_guidance_next_road_over_mileage 0x7f0b00a3
-int id iv_guidance_next_road_trun_mileage 0x7f0b00a4
-int id iv_guidance_next_turn 0x7f0b00a5
-int id iv_guidance_next_turn_over_mileage 0x7f0b00a6
-int id iv_guidance_over_mileage 0x7f0b00a7
-int id iv_guidance_server_icon 0x7f0b00a8
-int id iv_logo 0x7f0b00a9
-int id layout_zoom 0x7f0b00aa
-int id layout_zoom_control 0x7f0b00ab
-int id layout_zoom_value 0x7f0b00ac
-int id left 0x7f0b00ad
-int id length 0x7f0b00ae
-int id lin_next_turn 0x7f0b00af
-int id line1 0x7f0b00b0
-int id line3 0x7f0b00b1
-int id listMode 0x7f0b00b2
-int id list_item 0x7f0b00b3
-int id ll_infowindow 0x7f0b00b4
-int id load_more_load_complete_view 0x7f0b00b5
-int id load_more_load_end_view 0x7f0b00b6
-int id load_more_load_fail_view 0x7f0b00b7
-int id load_more_loading_view 0x7f0b00b8
-int id loading_imageview 0x7f0b00b9
-int id loading_liner_layout 0x7f0b00ba
-int id loading_progress 0x7f0b00bb
-int id loading_text 0x7f0b00bc
-int id lv_info 0x7f0b00bd
-int id map_container 0x7f0b00be
-int id markerViewLayer 0x7f0b00bf
-int id media_actions 0x7f0b00c0
-int id menu_btn_bt 0x7f0b00c1
-int id menu_btn_clearmap 0x7f0b00c2
-int id menu_btn_common 0x7f0b00c3
-int id menu_btn_periphery 0x7f0b00c4
-int id menu_btn_periphery_search 0x7f0b00c5
-int id menu_btn_recent 0x7f0b00c6
-int id menu_btn_search 0x7f0b00c7
-int id menu_btn_setting 0x7f0b00c8
-int id menu_btn_show 0x7f0b00c9
-int id menu_left_btn 0x7f0b00ca
-int id menu_left_btns 0x7f0b00cb
-int id menu_left_layout 0x7f0b00cc
-int id message 0x7f0b00cd
-int id module_commons_marker_car_model 0x7f0b00ce
-int id module_commons_marker_car_speed 0x7f0b00cf
-int id module_commons_toast_left_drawable 0x7f0b00d0
-int id module_commons_toast_msg 0x7f0b00d1
-int id module_commons_wm_dialog_button_cancel 0x7f0b00d2
-int id module_commons_wm_dialog_button_ok 0x7f0b00d3
-int id module_commons_wm_dialog_content 0x7f0b00d4
-int id module_mvision_map_click 0x7f0b00d5
-int id module_mvision_map_root 0x7f0b00d6
-int id module_mvision_map_view 0x7f0b00d7
-int id movePathView 0x7f0b00d8
-int id multiply 0x7f0b00d9
-int id navi_sdk_tmc_bar_container 0x7f0b00da
-int id next_icon 0x7f0b00db
-int id none 0x7f0b00dc
-int id normal 0x7f0b00dd
-int id notification_background 0x7f0b00de
-int id notification_main_column 0x7f0b00df
-int id notification_main_column_container 0x7f0b00e0
-int id off 0x7f0b00e1
-int id on 0x7f0b00e2
-int id onAttachStateChangeListener 0x7f0b00e3
-int id onDateChanged 0x7f0b00e4
-int id orientation 0x7f0b00e5
-int id packed 0x7f0b00e6
-int id panel_btn_gps 0x7f0b00e7
-int id panel_guidance_right 0x7f0b00e8
-int id panel_text_gps 0x7f0b00e9
-int id parent 0x7f0b00ea
-int id parentPanel 0x7f0b00eb
-int id percent 0x7f0b00ec
-int id poi_browse_btn_back 0x7f0b00ed
-int id poi_browse_btn_exit 0x7f0b00ee
-int id poi_browse_btn_next 0x7f0b00ef
-int id poi_browse_btn_pre 0x7f0b00f0
-int id poi_browse_btns 0x7f0b00f1
-int id progress 0x7f0b00f2
-int id progress_circular 0x7f0b00f3
-int id progress_horizontal 0x7f0b00f4
-int id query 0x7f0b00f5
-int id radio 0x7f0b00f6
-int id refresh_button 0x7f0b00f7
-int id rg_routing_set 0x7f0b00f8
-int id right 0x7f0b00f9
-int id right_icon 0x7f0b00fa
-int id right_side 0x7f0b00fb
-int id round 0x7f0b00fc
-int id route_select_ok 0x7f0b00fd
-int id route_select_setting 0x7f0b00fe
-int id route_select_sim_navi 0x7f0b00ff
-int id route_select_start 0x7f0b0100
-int id route_select_start_navi 0x7f0b0101
-int id route_select_time 0x7f0b0102
-int id route_set_end 0x7f0b0103
-int id route_set_layout 0x7f0b0104
-int id route_set_ok 0x7f0b0105
-int id route_set_start 0x7f0b0106
-int id route_set_waypoi 0x7f0b0107
-int id routebook_child_item_info_ll 0x7f0b0108
-int id routing_set_avoidhwy 0x7f0b0109
-int id routing_set_avoidtoll 0x7f0b010a
-int id routing_set_default 0x7f0b010b
-int id routing_set_fast 0x7f0b010c
-int id routing_set_short 0x7f0b010d
-int id screen 0x7f0b010e
-int id scrollIndicatorDown 0x7f0b010f
-int id scrollIndicatorUp 0x7f0b0110
-int id scrollView 0x7f0b0111
-int id search_badge 0x7f0b0112
-int id search_bar 0x7f0b0113
-int id search_button 0x7f0b0114
-int id search_close_btn 0x7f0b0115
-int id search_edit_frame 0x7f0b0116
-int id search_go_btn 0x7f0b0117
-int id search_mag_icon 0x7f0b0118
-int id search_plate 0x7f0b0119
-int id search_src_text 0x7f0b011a
-int id search_voice_btn 0x7f0b011b
-int id select_dialog_listview 0x7f0b011c
-int id shape_id 0x7f0b011d
-int id shortcut 0x7f0b011e
-int id sim_navi_control 0x7f0b011f
-int id sim_navi_next 0x7f0b0120
-int id sim_navi_pre 0x7f0b0121
-int id sim_navi_start 0x7f0b0122
-int id sim_navi_text 0x7f0b0123
-int id spacer 0x7f0b0124
-int id split_action_bar 0x7f0b0125
-int id spread 0x7f0b0126
-int id spread_inside 0x7f0b0127
-int id src_atop 0x7f0b0128
-int id src_in 0x7f0b0129
-int id src_over 0x7f0b012a
-int id start 0x7f0b012b
-int id status_bar_latest_event_content 0x7f0b012c
-int id submenuarrow 0x7f0b012d
-int id submit_area 0x7f0b012e
-int id tabMode 0x7f0b012f
-int id tag_accessibility_actions 0x7f0b0130
-int id tag_accessibility_clickable_spans 0x7f0b0131
-int id tag_accessibility_heading 0x7f0b0132
-int id tag_accessibility_pane_title 0x7f0b0133
-int id tag_screen_reader_focusable 0x7f0b0134
-int id tag_transition_group 0x7f0b0135
-int id tag_unhandled_key_event_manager 0x7f0b0136
-int id tag_unhandled_key_listeners 0x7f0b0137
-int id text 0x7f0b0138
-int id text2 0x7f0b0139
-int id textSpacerNoButtons 0x7f0b013a
-int id textSpacerNoTitle 0x7f0b013b
-int id textWatcher 0x7f0b013c
-int id time 0x7f0b013d
-int id title 0x7f0b013e
-int id titleDividerNoCustom 0x7f0b013f
-int id title_template 0x7f0b0140
-int id tmcBarCar 0x7f0b0141
-int id tmcBarTxt 0x7f0b0142
-int id tmcBarView 0x7f0b0143
-int id top 0x7f0b0144
-int id topPanel 0x7f0b0145
-int id tvMarkerContent 0x7f0b0146
-int id tv_dis 0x7f0b0147
-int id tv_guidance_cur_road 0x7f0b0148
-int id tv_guidance_enter_dis 0x7f0b0149
-int id tv_guidance_exit_dis 0x7f0b014a
-int id tv_guidance_next_export 0x7f0b014b
-int id tv_guidance_next_road 0x7f0b014c
-int id tv_guidance_next_road_two_name 0x7f0b014d
-int id tv_guidance_over_mileage 0x7f0b014e
-int id tv_guidance_over_time 0x7f0b014f
-int id tv_guidance_server_dis 0x7f0b0150
-int id tv_next_road 0x7f0b0151
-int id tv_over_view 0x7f0b0152
-int id tv_prompt 0x7f0b0153
-int id tv_scale 0x7f0b0154
-int id tv_scale_bg 0x7f0b0155
-int id tv_snippet 0x7f0b0156
-int id tv_title 0x7f0b0157
-int id txt_info 0x7f0b0158
-int id unchecked 0x7f0b0159
-int id uniform 0x7f0b015a
-int id up 0x7f0b015b
-int id vertical 0x7f0b015c
-int id wrap 0x7f0b015d
-int id wrap_content 0x7f0b015e
-int integer abc_config_activityDefaultDur 0x7f0c0001
-int integer abc_config_activityShortDur 0x7f0c0002
-int integer cancel_button_image_alpha 0x7f0c0003
-int integer config_tooltipAnimTime 0x7f0c0004
-int integer keyCode_0 0x7f0c0005
-int integer keyCode_1 0x7f0c0006
-int integer keyCode_1002 0x7f0c0007
-int integer keyCode_1003 0x7f0c0008
-int integer keyCode_1004 0x7f0c0009
-int integer keyCode_1005 0x7f0c000a
-int integer keyCode_2 0x7f0c000b
-int integer keyCode_3 0x7f0c000c
-int integer keyCode_4 0x7f0c000d
-int integer keyCode_5 0x7f0c000e
-int integer keyCode_6 0x7f0c000f
-int integer keyCode_7 0x7f0c0010
-int integer keyCode_8 0x7f0c0011
-int integer keyCode_9 0x7f0c0012
-int integer keyCode_a 0x7f0c0013
-int integer keyCode_b 0x7f0c0014
-int integer keyCode_c 0x7f0c0015
-int integer keyCode_d 0x7f0c0016
-int integer keyCode_del 0x7f0c0017
-int integer keyCode_e 0x7f0c0018
-int integer keyCode_f 0x7f0c0019
-int integer keyCode_g 0x7f0c001a
-int integer keyCode_h 0x7f0c001b
-int integer keyCode_heng 0x7f0c001c
-int integer keyCode_i 0x7f0c001d
-int integer keyCode_input_type 0x7f0c001e
-int integer keyCode_j 0x7f0c001f
-int integer keyCode_k 0x7f0c0020
-int integer keyCode_keboard_style 0x7f0c0021
-int integer keyCode_l 0x7f0c0022
-int integer keyCode_m 0x7f0c0023
-int integer keyCode_n 0x7f0c0024
-int integer keyCode_o 0x7f0c0025
-int integer keyCode_ok 0x7f0c0026
-int integer keyCode_p 0x7f0c0027
-int integer keyCode_q 0x7f0c0028
-int integer keyCode_r 0x7f0c0029
-int integer keyCode_s 0x7f0c002a
-int integer keyCode_search 0x7f0c002b
-int integer keyCode_t 0x7f0c002c
-int integer keyCode_u 0x7f0c002d
-int integer keyCode_v 0x7f0c002e
-int integer keyCode_w 0x7f0c002f
-int integer keyCode_x 0x7f0c0030
-int integer keyCode_xing 0x7f0c0031
-int integer keyCode_y 0x7f0c0032
-int integer keyCode_z 0x7f0c0033
-int integer status_bar_notification_info_maxnum 0x7f0c0034
-int interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 0x7f0d0001
-int interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 0x7f0d0002
-int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 0x7f0d0003
-int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 0x7f0d0004
-int interpolator btn_radio_to_off_mtrl_animation_interpolator_0 0x7f0d0005
-int interpolator btn_radio_to_on_mtrl_animation_interpolator_0 0x7f0d0006
-int interpolator fast_out_slow_in 0x7f0d0007
-int layout abc_action_bar_title_item 0x7f0e0001
-int layout abc_action_bar_up_container 0x7f0e0002
-int layout abc_action_menu_item_layout 0x7f0e0003
-int layout abc_action_menu_layout 0x7f0e0004
-int layout abc_action_mode_bar 0x7f0e0005
-int layout abc_action_mode_close_item_material 0x7f0e0006
-int layout abc_activity_chooser_view 0x7f0e0007
-int layout abc_activity_chooser_view_list_item 0x7f0e0008
-int layout abc_alert_dialog_button_bar_material 0x7f0e0009
-int layout abc_alert_dialog_material 0x7f0e000a
-int layout abc_alert_dialog_title_material 0x7f0e000b
-int layout abc_cascading_menu_item_layout 0x7f0e000c
-int layout abc_dialog_title_material 0x7f0e000d
-int layout abc_expanded_menu_layout 0x7f0e000e
-int layout abc_list_menu_item_checkbox 0x7f0e000f
-int layout abc_list_menu_item_icon 0x7f0e0010
-int layout abc_list_menu_item_layout 0x7f0e0011
-int layout abc_list_menu_item_radio 0x7f0e0012
-int layout abc_popup_menu_header_item_layout 0x7f0e0013
-int layout abc_popup_menu_item_layout 0x7f0e0014
-int layout abc_screen_content_include 0x7f0e0015
-int layout abc_screen_simple 0x7f0e0016
-int layout abc_screen_simple_overlay_action_mode 0x7f0e0017
-int layout abc_screen_toolbar 0x7f0e0018
-int layout abc_search_dropdown_item_icons_2line 0x7f0e0019
-int layout abc_search_view 0x7f0e001a
-int layout abc_select_dialog_material 0x7f0e001b
-int layout abc_tooltip 0x7f0e001c
-int layout brvah_quick_view_load_more 0x7f0e001d
-int layout custom_dialog 0x7f0e001e
-int layout dialog_routing_set 0x7f0e001f
-int layout dialog_tip 0x7f0e0020
-int layout dialog_wait 0x7f0e0021
-int layout layout_custom_info 0x7f0e0022
-int layout layout_map_auto_view 0x7f0e0023
-int layout layout_marker_infowindow_layer 0x7f0e0024
-int layout layout_normal_info_window_style 0x7f0e0025
-int layout layout_panel_btn_top_right 0x7f0e0026
-int layout layout_panel_guidance 0x7f0e0027
-int layout modeules_commons_layout_custom_ratingbar 0x7f0e0028
-int layout modudle_services_marker_layout 0x7f0e0029
-int layout modudle_services_marker_layout_info 0x7f0e002a
-int layout module_commons_layout_car 0x7f0e002b
-int layout module_commons_layout_toast 0x7f0e002c
-int layout module_commons_layout_toast_with_left_drawable 0x7f0e002d
-int layout module_commons_layout_wm_dialog 0x7f0e002e
-int layout module_mvision_layout_view 0x7f0e002f
-int layout navi_control_btn 0x7f0e0030
-int layout network_loading_item 0x7f0e0031
-int layout notification_action 0x7f0e0032
-int layout notification_action_tombstone 0x7f0e0033
-int layout notification_media_action 0x7f0e0034
-int layout notification_media_cancel_action 0x7f0e0035
-int layout notification_template_big_media 0x7f0e0036
-int layout notification_template_big_media_custom 0x7f0e0037
-int layout notification_template_big_media_narrow 0x7f0e0038
-int layout notification_template_big_media_narrow_custom 0x7f0e0039
-int layout notification_template_custom_big 0x7f0e003a
-int layout notification_template_icon_group 0x7f0e003b
-int layout notification_template_lines_media 0x7f0e003c
-int layout notification_template_media 0x7f0e003d
-int layout notification_template_media_custom 0x7f0e003e
-int layout notification_template_part_chronometer 0x7f0e003f
-int layout notification_template_part_time 0x7f0e0040
-int layout panel_btn_car 0x7f0e0041
-int layout panel_btn_cars 0x7f0e0042
-int layout panel_btn_left 0x7f0e0043
-int layout panel_btn_location 0x7f0e0044
-int layout panel_btn_logo 0x7f0e0045
-int layout panel_btn_scale 0x7f0e0046
-int layout panel_btn_zoom 0x7f0e0047
-int layout panel_btn_zoom_ctrl 0x7f0e0048
-int layout panel_guidance 0x7f0e0049
-int layout panel_polygon 0x7f0e004a
-int layout panel_route_select 0x7f0e004b
-int layout panel_route_set 0x7f0e004c
-int layout routebook_child_item 0x7f0e004d
-int layout select_dialog_item_material 0x7f0e004e
-int layout select_dialog_multichoice_material 0x7f0e004f
-int layout select_dialog_singlechoice_material 0x7f0e0050
-int layout support_simple_spinner_dropdown_item 0x7f0e0051
-int layout view_over_view 0x7f0e0052
-int layout view_traffic_button 0x7f0e0053
-int layout view_trafficbar 0x7f0e0054
-int layout view_zoom 0x7f0e0055
-int mipmap arrow 0x7f100001
-int mipmap bg_main 0x7f100002
-int mipmap car_two 0x7f100003
-int mipmap divider_mapbutton 0x7f100004
-int mipmap dot 0x7f100005
-int mipmap gray_dot 0x7f100006
-int mipmap green_dot 0x7f100007
-int mipmap ic_arrow_left_pressed 0x7f100008
-int mipmap ic_ch 0x7f100009
-int mipmap ic_launcher 0x7f10000a
-int mipmap ic_search_btn_down 0x7f10000b
-int mipmap ic_search_btn_up 0x7f10000c
-int mipmap ic_search_voice_down 0x7f10000d
-int mipmap ic_search_voice_up 0x7f10000e
-int mipmap ic_show_map_n 0x7f10000f
-int mipmap ic_show_map_p 0x7f100010
-int mipmap icon1001 0x7f100011
-int mipmap icon1002 0x7f100012
-int mipmap icon1003 0x7f100013
-int mipmap icon1004 0x7f100014
-int mipmap icon1005 0x7f100015
-int mipmap icon1006 0x7f100016
-int mipmap icon1007 0x7f100017
-int mipmap icon1008 0x7f100018
-int mipmap icon1009 0x7f100019
-int mipmap icon1010 0x7f10001a
-int mipmap icon1011 0x7f10001b
-int mipmap icon1012 0x7f10001c
-int mipmap icon1013 0x7f10001d
-int mipmap icon1014 0x7f10001e
-int mipmap icon1015 0x7f10001f
-int mipmap icon1022 0x7f100020
-int mipmap icon1027 0x7f100021
-int mipmap icon1028 0x7f100022
-int mipmap icon1029 0x7f100023
-int mipmap icon1035 0x7f100024
-int mipmap icon1042 0x7f100025
-int mipmap icon1043 0x7f100026
-int mipmap icon1044 0x7f100027
-int mipmap icon1501 0x7f100028
-int mipmap icon1502 0x7f100029
-int mipmap icon1503 0x7f10002a
-int mipmap icon_car 0x7f10002b
-int mipmap icon_collect 0x7f10002c
-int mipmap icon_collect_s 0x7f10002d
-int mipmap icon_day 0x7f10002e
-int mipmap icon_direction 0x7f10002f
-int mipmap icon_loading 0x7f100030
-int mipmap icon_loc_day 0x7f100031
-int mipmap icon_loc_night 0x7f100032
-int mipmap icon_location 0x7f100033
-int mipmap icon_location_day 0x7f100034
-int mipmap icon_location_night 0x7f100035
-int mipmap icon_night 0x7f100036
-int mipmap icon_pause_night 0x7f100037
-int mipmap icon_play_night 0x7f100038
-int mipmap icon_sim_navi_car 0x7f100039
-int mipmap icon_sim_navi_next 0x7f10003a
-int mipmap icon_sim_navi_pause 0x7f10003b
-int mipmap icon_sim_navi_pre 0x7f10003c
-int mipmap icon_sim_navi_start 0x7f10003d
-int mipmap icon_traffic_close_day 0x7f10003e
-int mipmap icon_traffic_close_night 0x7f10003f
-int mipmap icon_traffic_open_day 0x7f100040
-int mipmap icon_traffic_open_night 0x7f100041
-int mipmap icon_zoom_in_day 0x7f100042
-int mipmap icon_zoom_in_night 0x7f100043
-int mipmap icon_zoom_out_day 0x7f100044
-int mipmap icon_zoom_out_night 0x7f100045
-int mipmap img_error 0x7f100046
-int mipmap img_error_dark 0x7f100047
-int mipmap img_finish 0x7f100048
-int mipmap img_finish_dark 0x7f100049
-int mipmap img_warning 0x7f10004a
-int mipmap img_warning_dark 0x7f10004b
-int mipmap l0 0x7f10004c
-int mipmap l1 0x7f10004d
-int mipmap l2 0x7f10004e
-int mipmap l3 0x7f10004f
-int mipmap l4 0x7f100050
-int mipmap l5 0x7f100051
-int mipmap l6 0x7f100052
-int mipmap l7 0x7f100053
-int mipmap l8 0x7f100054
-int mipmap l9 0x7f100055
-int mipmap map_custom_mogo_self_car_2d 0x7f100056
-int mipmap map_custom_self_car 0x7f100057
-int mipmap map_custom_self_car_day 0x7f100058
-int mipmap map_custom_self_car_night 0x7f100059
-int mipmap mapdir 0x7f10005a
-int mipmap menu_left_btn_icon_in 0x7f10005b
-int mipmap menu_left_btn_icon_out 0x7f10005c
-int mipmap mk_car 0x7f10005d
-int mipmap n0 0x7f10005e
-int mipmap n1 0x7f10005f
-int mipmap n2 0x7f100060
-int mipmap n3 0x7f100061
-int mipmap n4 0x7f100062
-int mipmap n5 0x7f100063
-int mipmap n6 0x7f100064
-int mipmap n7 0x7f100065
-int mipmap n8 0x7f100066
-int mipmap n9 0x7f100067
-int mipmap navi_gps_set 0x7f100068
-int mipmap navi_gpssv 0x7f100069
-int mipmap navi_s_1 0x7f10006a
-int mipmap navi_s_10 0x7f10006b
-int mipmap navi_s_11 0x7f10006c
-int mipmap navi_s_12 0x7f10006d
-int mipmap navi_s_13 0x7f10006e
-int mipmap navi_s_14 0x7f10006f
-int mipmap navi_s_15 0x7f100070
-int mipmap navi_s_2 0x7f100071
-int mipmap navi_s_22 0x7f100072
-int mipmap navi_s_27 0x7f100073
-int mipmap navi_s_28 0x7f100074
-int mipmap navi_s_29 0x7f100075
-int mipmap navi_s_3 0x7f100076
-int mipmap navi_s_35 0x7f100077
-int mipmap navi_s_4 0x7f100078
-int mipmap navi_s_42 0x7f100079
-int mipmap navi_s_43 0x7f10007a
-int mipmap navi_s_44 0x7f10007b
-int mipmap navi_s_5 0x7f10007c
-int mipmap navi_s_501 0x7f10007d
-int mipmap navi_s_502 0x7f10007e
-int mipmap navi_s_503 0x7f10007f
-int mipmap navi_s_6 0x7f100080
-int mipmap navi_s_7 0x7f100081
-int mipmap navi_s_8 0x7f100082
-int mipmap navi_s_9 0x7f100083
-int mipmap navi_tmcbar_cursor 0x7f100084
-int mipmap panel_search_indicator_p 0x7f100085
-int mipmap panel_search_indicator_s 0x7f100086
-int mipmap poires 0x7f100087
-int mipmap poires_a 0x7f100088
-int mipmap poires_b 0x7f100089
-int mipmap poires_c 0x7f10008a
-int mipmap poires_d 0x7f10008b
-int mipmap poires_e 0x7f10008c
-int mipmap poires_f 0x7f10008d
-int mipmap poires_g 0x7f10008e
-int mipmap poires_his 0x7f10008f
-int mipmap routebook_icon1001 0x7f100090
-int mipmap sector 0x7f100091
-int mipmap stat_sys_download_anim0 0x7f100092
-int mipmap stat_sys_download_anim1 0x7f100093
-int mipmap stat_sys_download_anim2 0x7f100094
-int mipmap stat_sys_download_anim3 0x7f100095
-int mipmap stat_sys_download_anim4 0x7f100096
-int mipmap stat_sys_download_anim5 0x7f100097
-int mipmap sym_keyboard_delete 0x7f100098
-int mipmap ui_menu_clear 0x7f100099
-int mipmap ui_menu_exit 0x7f10009a
-int mipmap ui_navigate 0x7f10009b
-int mipmap water 0x7f10009c
-int mipmap yellow_dot 0x7f10009d
-int mipmap zoom_in_day 0x7f10009e
-int mipmap zoom_in_night 0x7f10009f
-int mipmap zoom_out_day 0x7f1000a0
-int mipmap zoom_out_night 0x7f1000a1
-int raw car 0x7f130001
-int raw putonghua_f1 0x7f130002
-int raw putonghua_f2 0x7f130003
-int raw putonghua_f3 0x7f130004
-int raw putonghua_f4 0x7f130005
-int raw putonghua_f5 0x7f130006
-int raw putonghua_f6 0x7f130007
-int raw theme 0x7f130008
-int raw version 0x7f130009
-int string Angle1 0x7f140001
-int string Angle2 0x7f140002
-int string Angle3 0x7f140003
-int string Disclaimer 0x7f140004
-int string DisclaimerInfo 0x7f140005
-int string High 0x7f140006
-int string Initial 0x7f140007
-int string Speed 0x7f140008
-int string abc_action_bar_home_description 0x7f140009
-int string abc_action_bar_up_description 0x7f14000a
-int string abc_action_menu_overflow_description 0x7f14000b
-int string abc_action_mode_done 0x7f14000c
-int string abc_activity_chooser_view_see_all 0x7f14000d
-int string abc_activitychooserview_choose_application 0x7f14000e
-int string abc_capital_off 0x7f14000f
-int string abc_capital_on 0x7f140010
-int string abc_font_family_body_1_material 0x7f140011
-int string abc_font_family_body_2_material 0x7f140012
-int string abc_font_family_button_material 0x7f140013
-int string abc_font_family_caption_material 0x7f140014
-int string abc_font_family_display_1_material 0x7f140015
-int string abc_font_family_display_2_material 0x7f140016
-int string abc_font_family_display_3_material 0x7f140017
-int string abc_font_family_display_4_material 0x7f140018
-int string abc_font_family_headline_material 0x7f140019
-int string abc_font_family_menu_material 0x7f14001a
-int string abc_font_family_subhead_material 0x7f14001b
-int string abc_font_family_title_material 0x7f14001c
-int string abc_menu_alt_shortcut_label 0x7f14001d
-int string abc_menu_ctrl_shortcut_label 0x7f14001e
-int string abc_menu_delete_shortcut_label 0x7f14001f
-int string abc_menu_enter_shortcut_label 0x7f140020
-int string abc_menu_function_shortcut_label 0x7f140021
-int string abc_menu_meta_shortcut_label 0x7f140022
-int string abc_menu_shift_shortcut_label 0x7f140023
-int string abc_menu_space_shortcut_label 0x7f140024
-int string abc_menu_sym_shortcut_label 0x7f140025
-int string abc_prepend_shortcut_label 0x7f140026
-int string abc_search_hint 0x7f140027
-int string abc_searchview_description_clear 0x7f140028
-int string abc_searchview_description_query 0x7f140029
-int string abc_searchview_description_search 0x7f14002a
-int string abc_searchview_description_submit 0x7f14002b
-int string abc_searchview_description_voice 0x7f14002c
-int string abc_shareactionprovider_share_with 0x7f14002d
-int string abc_shareactionprovider_share_with_application 0x7f14002e
-int string abc_toolbar_collapse_description 0x7f14002f
-int string add_ch_toast 0x7f140030
-int string age_prompt 0x7f140031
-int string app 0x7f140032
-int string app_name 0x7f140033
-int string aspeed 0x7f140034
-int string brvah_load_complete 0x7f140035
-int string brvah_load_end 0x7f140036
-int string brvah_load_failed 0x7f140037
-int string brvah_loading 0x7f140038
-int string cancelBtn 0x7f140039
-int string ch_name_illegal 0x7f14003a
-int string ch_name_null 0x7f14003b
-int string ch_name_presence 0x7f14003c
-int string change_ch_name 0x7f14003d
-int string comment_err 0x7f14003e
-int string comment_suc 0x7f14003f
-int string crash_dialog_comment_prompt 0x7f140040
-int string crash_dialog_text 0x7f140041
-int string crash_dialog_title 0x7f140042
-int string downloadMap 0x7f140043
-int string drivetime 0x7f140044
-int string email_sensitive_words_error 0x7f140045
-int string freqOfspeedDown 0x7f140046
-int string freqOfspeedUp 0x7f140047
-int string freqOfturn 0x7f140048
-int string greater_than_ 0x7f140049
-int string heading 0x7f14004a
-int string highestspeed 0x7f14004b
-int string highspeedtime 0x7f14004c
-int string hottime 0x7f14004d
-int string idlingtime 0x7f14004e
-int string infowindow_snippet 0x7f14004f
-int string infowindow_title 0x7f140050
-int string input_null 0x7f140051
-int string input_too_long 0x7f140052
-int string input_user_name 0x7f140053
-int string keyLable_0 0x7f140054
-int string keyLable_1 0x7f140055
-int string keyLable_12 0x7f140056
-int string keyLable_13 0x7f140057
-int string keyLable_14 0x7f140058
-int string keyLable_2 0x7f140059
-int string keyLable_3 0x7f14005a
-int string keyLable_4 0x7f14005b
-int string keyLable_5 0x7f14005c
-int string keyLable_6 0x7f14005d
-int string keyLable_7 0x7f14005e
-int string keyLable_8 0x7f14005f
-int string keyLable_9 0x7f140060
-int string keyLable_a 0x7f140061
-int string keyLable_b 0x7f140062
-int string keyLable_c 0x7f140063
-int string keyLable_d 0x7f140064
-int string keyLable_del 0x7f140065
-int string keyLable_e 0x7f140066
-int string keyLable_f 0x7f140067
-int string keyLable_g 0x7f140068
-int string keyLable_h 0x7f140069
-int string keyLable_heng 0x7f14006a
-int string keyLable_i 0x7f14006b
-int string keyLable_input_type_bihua 0x7f14006c
-int string keyLable_input_type_jianpin 0x7f14006d
-int string keyLable_input_type_quanpin 0x7f14006e
-int string keyLable_j 0x7f14006f
-int string keyLable_k 0x7f140070
-int string keyLable_keboard_style_qwerty 0x7f140071
-int string keyLable_keboard_style_t9 0x7f140072
-int string keyLable_l 0x7f140073
-int string keyLable_ll 0x7f140074
-int string keyLable_m 0x7f140075
-int string keyLable_n 0x7f140076
-int string keyLable_o 0x7f140077
-int string keyLable_ok 0x7f140078
-int string keyLable_p 0x7f140079
-int string keyLable_q 0x7f14007a
-int string keyLable_r 0x7f14007b
-int string keyLable_s 0x7f14007c
-int string keyLable_search 0x7f14007d
-int string keyLable_t 0x7f14007e
-int string keyLable_u 0x7f14007f
-int string keyLable_v 0x7f140080
-int string keyLable_w 0x7f140081
-int string keyLable_x 0x7f140082
-int string keyLable_xing 0x7f140083
-int string keyLable_y 0x7f140084
-int string keyLable_z 0x7f140085
-int string l 0x7f140086
-int string location_err 0x7f140087
-int string lowspeedtime 0x7f140088
-int string menu_more 0x7f140089
-int string menu_settings 0x7f14008a
-int string midspeedtime 0x7f14008b
-int string module_commons_button_cancel 0x7f14008c
-int string module_commons_button_ok 0x7f14008d
-int string module_commons_exit_navi_content 0x7f14008e
-int string net_err 0x7f14008f
-int string net_timeout 0x7f140090
-int string nickname_sensitive_words_error 0x7f140091
-int string no_ch 0x7f140092
-int string no_sd 0x7f140093
-int string nullInitial 0x7f140094
-int string panel_Traffic_jam_number 0x7f140095
-int string panel_down_channel 0x7f140096
-int string panel_down_dest 0x7f140097
-int string panel_down_dest_select 0x7f140098
-int string panel_down_mute 0x7f140099
-int string panel_down_share 0x7f14009a
-int string panel_search_btn 0x7f14009b
-int string panel_search_voice 0x7f14009c
-int string panel_seperator 0x7f14009d
-int string panel_share_trf_accident 0x7f14009e
-int string panel_share_trf_event 0x7f14009f
-int string panel_share_trf_police 0x7f1400a0
-int string panel_share_trf_road 0x7f1400a1
-int string planet_prompt 0x7f1400a2
-int string r 0x7f1400a3
-int string re_input_user_name 0x7f1400a4
-int string reg_err 0x7f1400a5
-int string search_menu_title 0x7f1400a6
-int string sendBtn 0x7f1400a7
-int string serv_err 0x7f1400a8
-int string sex_prompt 0x7f1400a9
-int string starttime 0x7f1400aa
-int string status_bar_notification_info_overflow 0x7f1400ab
-int string stoptime 0x7f1400ac
-int string title_activity_map 0x7f1400ad
-int string totaltime 0x7f1400ae
-int string ui_cancel 0x7f1400af
-int string ui_exit 0x7f1400b0
-int string ui_finish 0x7f1400b1
-int string ui_ok 0x7f1400b2
-int string updat_err 0x7f1400b3
-int string updat_suc 0x7f1400b4
-int string update_server 0x7f1400b5
-int string user_name_error 0x7f1400b6
-int string user_name_presence 0x7f1400b7
-int string vehicle_GONE 0x7f1400b8
-int string vehicle_VISIBLE 0x7f1400b9
-int style AlertDialog_AppCompat 0x7f150001
-int style AlertDialog_AppCompat_Light 0x7f150002
-int style Animation_AppCompat_Dialog 0x7f150003
-int style Animation_AppCompat_DropDownUp 0x7f150004
-int style Animation_AppCompat_Tooltip 0x7f150005
-int style AppTheme 0x7f150006
-int style BaseFloatDialogStyle 0x7f150007
-int style Base_AlertDialog_AppCompat 0x7f150008
-int style Base_AlertDialog_AppCompat_Light 0x7f150009
-int style Base_Animation_AppCompat_Dialog 0x7f15000a
-int style Base_Animation_AppCompat_DropDownUp 0x7f15000b
-int style Base_Animation_AppCompat_Tooltip 0x7f15000c
-int style Base_CardView 0x7f15000d
-int style Base_DialogWindowTitleBackground_AppCompat 0x7f15000e
-int style Base_DialogWindowTitle_AppCompat 0x7f15000f
-int style Base_TextAppearance_AppCompat 0x7f150010
-int style Base_TextAppearance_AppCompat_Body1 0x7f150011
-int style Base_TextAppearance_AppCompat_Body2 0x7f150012
-int style Base_TextAppearance_AppCompat_Button 0x7f150013
-int style Base_TextAppearance_AppCompat_Caption 0x7f150014
-int style Base_TextAppearance_AppCompat_Display1 0x7f150015
-int style Base_TextAppearance_AppCompat_Display2 0x7f150016
-int style Base_TextAppearance_AppCompat_Display3 0x7f150017
-int style Base_TextAppearance_AppCompat_Display4 0x7f150018
-int style Base_TextAppearance_AppCompat_Headline 0x7f150019
-int style Base_TextAppearance_AppCompat_Inverse 0x7f15001a
-int style Base_TextAppearance_AppCompat_Large 0x7f15001b
-int style Base_TextAppearance_AppCompat_Large_Inverse 0x7f15001c
-int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f15001d
-int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f15001e
-int style Base_TextAppearance_AppCompat_Medium 0x7f15001f
-int style Base_TextAppearance_AppCompat_Medium_Inverse 0x7f150020
-int style Base_TextAppearance_AppCompat_Menu 0x7f150021
-int style Base_TextAppearance_AppCompat_SearchResult 0x7f150022
-int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x7f150023
-int style Base_TextAppearance_AppCompat_SearchResult_Title 0x7f150024
-int style Base_TextAppearance_AppCompat_Small 0x7f150025
-int style Base_TextAppearance_AppCompat_Small_Inverse 0x7f150026
-int style Base_TextAppearance_AppCompat_Subhead 0x7f150027
-int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x7f150028
-int style Base_TextAppearance_AppCompat_Title 0x7f150029
-int style Base_TextAppearance_AppCompat_Title_Inverse 0x7f15002a
-int style Base_TextAppearance_AppCompat_Tooltip 0x7f15002b
-int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f15002c
-int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f15002d
-int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f15002e
-int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f15002f
-int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f150030
-int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f150031
-int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f150032
-int style Base_TextAppearance_AppCompat_Widget_Button 0x7f150033
-int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f150034
-int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x7f150035
-int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x7f150036
-int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x7f150037
-int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f150038
-int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f150039
-int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f15003a
-int style Base_TextAppearance_AppCompat_Widget_Switch 0x7f15003b
-int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f15003c
-int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f15003d
-int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f15003e
-int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f15003f
-int style Base_ThemeOverlay_AppCompat 0x7f150040
-int style Base_ThemeOverlay_AppCompat_ActionBar 0x7f150041
-int style Base_ThemeOverlay_AppCompat_Dark 0x7f150042
-int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x7f150043
-int style Base_ThemeOverlay_AppCompat_Dialog 0x7f150044
-int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x7f150045
-int style Base_ThemeOverlay_AppCompat_Light 0x7f150046
-int style Base_Theme_AppCompat 0x7f150047
-int style Base_Theme_AppCompat_CompactMenu 0x7f150048
-int style Base_Theme_AppCompat_Dialog 0x7f150049
-int style Base_Theme_AppCompat_DialogWhenLarge 0x7f15004a
-int style Base_Theme_AppCompat_Dialog_Alert 0x7f15004b
-int style Base_Theme_AppCompat_Dialog_FixedSize 0x7f15004c
-int style Base_Theme_AppCompat_Dialog_MinWidth 0x7f15004d
-int style Base_Theme_AppCompat_Light 0x7f15004e
-int style Base_Theme_AppCompat_Light_DarkActionBar 0x7f15004f
-int style Base_Theme_AppCompat_Light_Dialog 0x7f150050
-int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x7f150051
-int style Base_Theme_AppCompat_Light_Dialog_Alert 0x7f150052
-int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x7f150053
-int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x7f150054
-int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x7f150055
-int style Base_V21_Theme_AppCompat 0x7f150056
-int style Base_V21_Theme_AppCompat_Dialog 0x7f150057
-int style Base_V21_Theme_AppCompat_Light 0x7f150058
-int style Base_V21_Theme_AppCompat_Light_Dialog 0x7f150059
-int style Base_V22_Theme_AppCompat 0x7f15005a
-int style Base_V22_Theme_AppCompat_Light 0x7f15005b
-int style Base_V23_Theme_AppCompat 0x7f15005c
-int style Base_V23_Theme_AppCompat_Light 0x7f15005d
-int style Base_V26_Theme_AppCompat 0x7f15005e
-int style Base_V26_Theme_AppCompat_Light 0x7f15005f
-int style Base_V26_Widget_AppCompat_Toolbar 0x7f150060
-int style Base_V28_Theme_AppCompat 0x7f150061
-int style Base_V28_Theme_AppCompat_Light 0x7f150062
-int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x7f150063
-int style Base_V7_Theme_AppCompat 0x7f150064
-int style Base_V7_Theme_AppCompat_Dialog 0x7f150065
-int style Base_V7_Theme_AppCompat_Light 0x7f150066
-int style Base_V7_Theme_AppCompat_Light_Dialog 0x7f150067
-int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x7f150068
-int style Base_V7_Widget_AppCompat_EditText 0x7f150069
-int style Base_V7_Widget_AppCompat_Toolbar 0x7f15006a
-int style Base_Widget_AppCompat_ActionBar 0x7f15006b
-int style Base_Widget_AppCompat_ActionBar_Solid 0x7f15006c
-int style Base_Widget_AppCompat_ActionBar_TabBar 0x7f15006d
-int style Base_Widget_AppCompat_ActionBar_TabText 0x7f15006e
-int style Base_Widget_AppCompat_ActionBar_TabView 0x7f15006f
-int style Base_Widget_AppCompat_ActionButton 0x7f150070
-int style Base_Widget_AppCompat_ActionButton_CloseMode 0x7f150071
-int style Base_Widget_AppCompat_ActionButton_Overflow 0x7f150072
-int style Base_Widget_AppCompat_ActionMode 0x7f150073
-int style Base_Widget_AppCompat_ActivityChooserView 0x7f150074
-int style Base_Widget_AppCompat_AutoCompleteTextView 0x7f150075
-int style Base_Widget_AppCompat_Button 0x7f150076
-int style Base_Widget_AppCompat_ButtonBar 0x7f150077
-int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x7f150078
-int style Base_Widget_AppCompat_Button_Borderless 0x7f150079
-int style Base_Widget_AppCompat_Button_Borderless_Colored 0x7f15007a
-int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f15007b
-int style Base_Widget_AppCompat_Button_Colored 0x7f15007c
-int style Base_Widget_AppCompat_Button_Small 0x7f15007d
-int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x7f15007e
-int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x7f15007f
-int style Base_Widget_AppCompat_CompoundButton_Switch 0x7f150080
-int style Base_Widget_AppCompat_DrawerArrowToggle 0x7f150081
-int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x7f150082
-int style Base_Widget_AppCompat_DropDownItem_Spinner 0x7f150083
-int style Base_Widget_AppCompat_EditText 0x7f150084
-int style Base_Widget_AppCompat_ImageButton 0x7f150085
-int style Base_Widget_AppCompat_Light_ActionBar 0x7f150086
-int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x7f150087
-int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x7f150088
-int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x7f150089
-int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f15008a
-int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x7f15008b
-int style Base_Widget_AppCompat_Light_PopupMenu 0x7f15008c
-int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x7f15008d
-int style Base_Widget_AppCompat_ListMenuView 0x7f15008e
-int style Base_Widget_AppCompat_ListPopupWindow 0x7f15008f
-int style Base_Widget_AppCompat_ListView 0x7f150090
-int style Base_Widget_AppCompat_ListView_DropDown 0x7f150091
-int style Base_Widget_AppCompat_ListView_Menu 0x7f150092
-int style Base_Widget_AppCompat_PopupMenu 0x7f150093
-int style Base_Widget_AppCompat_PopupMenu_Overflow 0x7f150094
-int style Base_Widget_AppCompat_PopupWindow 0x7f150095
-int style Base_Widget_AppCompat_ProgressBar 0x7f150096
-int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x7f150097
-int style Base_Widget_AppCompat_RatingBar 0x7f150098
-int style Base_Widget_AppCompat_RatingBar_Indicator 0x7f150099
-int style Base_Widget_AppCompat_RatingBar_Small 0x7f15009a
-int style Base_Widget_AppCompat_SearchView 0x7f15009b
-int style Base_Widget_AppCompat_SearchView_ActionBar 0x7f15009c
-int style Base_Widget_AppCompat_SeekBar 0x7f15009d
-int style Base_Widget_AppCompat_SeekBar_Discrete 0x7f15009e
-int style Base_Widget_AppCompat_Spinner 0x7f15009f
-int style Base_Widget_AppCompat_Spinner_Underlined 0x7f1500a0
-int style Base_Widget_AppCompat_TextView 0x7f1500a1
-int style Base_Widget_AppCompat_TextView_SpinnerItem 0x7f1500a2
-int style Base_Widget_AppCompat_Toolbar 0x7f1500a3
-int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x7f1500a4
-int style CardView 0x7f1500a5
-int style CardView_Dark 0x7f1500a6
-int style CardView_Light 0x7f1500a7
-int style CircularProgress 0x7f1500a8
-int style Dialog_Fullscreen 0x7f1500a9
-int style Platform_AppCompat 0x7f1500aa
-int style Platform_AppCompat_Light 0x7f1500ab
-int style Platform_ThemeOverlay_AppCompat 0x7f1500ac
-int style Platform_ThemeOverlay_AppCompat_Dark 0x7f1500ad
-int style Platform_ThemeOverlay_AppCompat_Light 0x7f1500ae
-int style Platform_V21_AppCompat 0x7f1500af
-int style Platform_V21_AppCompat_Light 0x7f1500b0
-int style Platform_V25_AppCompat 0x7f1500b1
-int style Platform_V25_AppCompat_Light 0x7f1500b2
-int style Platform_Widget_AppCompat_Spinner 0x7f1500b3
-int style RtlOverlay_DialogWindowTitle_AppCompat 0x7f1500b4
-int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x7f1500b5
-int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x7f1500b6
-int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x7f1500b7
-int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x7f1500b8
-int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut 0x7f1500b9
-int style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow 0x7f1500ba
-int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x7f1500bb
-int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title 0x7f1500bc
-int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x7f1500bd
-int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x7f1500be
-int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x7f1500bf
-int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x7f1500c0
-int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x7f1500c1
-int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x7f1500c2
-int style RtlUnderlay_Widget_AppCompat_ActionButton 0x7f1500c3
-int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x7f1500c4
-int style TextAppearance_AppCompat 0x7f1500c5
-int style TextAppearance_AppCompat_Body1 0x7f1500c6
-int style TextAppearance_AppCompat_Body2 0x7f1500c7
-int style TextAppearance_AppCompat_Button 0x7f1500c8
-int style TextAppearance_AppCompat_Caption 0x7f1500c9
-int style TextAppearance_AppCompat_Display1 0x7f1500ca
-int style TextAppearance_AppCompat_Display2 0x7f1500cb
-int style TextAppearance_AppCompat_Display3 0x7f1500cc
-int style TextAppearance_AppCompat_Display4 0x7f1500cd
-int style TextAppearance_AppCompat_Headline 0x7f1500ce
-int style TextAppearance_AppCompat_Inverse 0x7f1500cf
-int style TextAppearance_AppCompat_Large 0x7f1500d0
-int style TextAppearance_AppCompat_Large_Inverse 0x7f1500d1
-int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f1500d2
-int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f1500d3
-int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f1500d4
-int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f1500d5
-int style TextAppearance_AppCompat_Medium 0x7f1500d6
-int style TextAppearance_AppCompat_Medium_Inverse 0x7f1500d7
-int style TextAppearance_AppCompat_Menu 0x7f1500d8
-int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f1500d9
-int style TextAppearance_AppCompat_SearchResult_Title 0x7f1500da
-int style TextAppearance_AppCompat_Small 0x7f1500db
-int style TextAppearance_AppCompat_Small_Inverse 0x7f1500dc
-int style TextAppearance_AppCompat_Subhead 0x7f1500dd
-int style TextAppearance_AppCompat_Subhead_Inverse 0x7f1500de
-int style TextAppearance_AppCompat_Title 0x7f1500df
-int style TextAppearance_AppCompat_Title_Inverse 0x7f1500e0
-int style TextAppearance_AppCompat_Tooltip 0x7f1500e1
-int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f1500e2
-int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f1500e3
-int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f1500e4
-int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f1500e5
-int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f1500e6
-int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f1500e7
-int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f1500e8
-int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f1500e9
-int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f1500ea
-int style TextAppearance_AppCompat_Widget_Button 0x7f1500eb
-int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f1500ec
-int style TextAppearance_AppCompat_Widget_Button_Colored 0x7f1500ed
-int style TextAppearance_AppCompat_Widget_Button_Inverse 0x7f1500ee
-int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f1500ef
-int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f1500f0
-int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f1500f1
-int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f1500f2
-int style TextAppearance_AppCompat_Widget_Switch 0x7f1500f3
-int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f1500f4
-int style TextAppearance_Compat_Notification 0x7f1500f5
-int style TextAppearance_Compat_Notification_Info 0x7f1500f6
-int style TextAppearance_Compat_Notification_Info_Media 0x7f1500f7
-int style TextAppearance_Compat_Notification_Line2 0x7f1500f8
-int style TextAppearance_Compat_Notification_Line2_Media 0x7f1500f9
-int style TextAppearance_Compat_Notification_Media 0x7f1500fa
-int style TextAppearance_Compat_Notification_Time 0x7f1500fb
-int style TextAppearance_Compat_Notification_Time_Media 0x7f1500fc
-int style TextAppearance_Compat_Notification_Title 0x7f1500fd
-int style TextAppearance_Compat_Notification_Title_Media 0x7f1500fe
-int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f1500ff
-int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f150100
-int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f150101
-int style ThemeOverlay_AppCompat 0x7f150102
-int style ThemeOverlay_AppCompat_ActionBar 0x7f150103
-int style ThemeOverlay_AppCompat_Dark 0x7f150104
-int style ThemeOverlay_AppCompat_Dark_ActionBar 0x7f150105
-int style ThemeOverlay_AppCompat_DayNight 0x7f150106
-int style ThemeOverlay_AppCompat_DayNight_ActionBar 0x7f150107
-int style ThemeOverlay_AppCompat_Dialog 0x7f150108
-int style ThemeOverlay_AppCompat_Dialog_Alert 0x7f150109
-int style ThemeOverlay_AppCompat_Light 0x7f15010a
-int style Theme_AppCompat 0x7f15010b
-int style Theme_AppCompat_CompactMenu 0x7f15010c
-int style Theme_AppCompat_DayNight 0x7f15010d
-int style Theme_AppCompat_DayNight_DarkActionBar 0x7f15010e
-int style Theme_AppCompat_DayNight_Dialog 0x7f15010f
-int style Theme_AppCompat_DayNight_DialogWhenLarge 0x7f150110
-int style Theme_AppCompat_DayNight_Dialog_Alert 0x7f150111
-int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x7f150112
-int style Theme_AppCompat_DayNight_NoActionBar 0x7f150113
-int style Theme_AppCompat_Dialog 0x7f150114
-int style Theme_AppCompat_DialogWhenLarge 0x7f150115
-int style Theme_AppCompat_Dialog_Alert 0x7f150116
-int style Theme_AppCompat_Dialog_MinWidth 0x7f150117
-int style Theme_AppCompat_Light 0x7f150118
-int style Theme_AppCompat_Light_DarkActionBar 0x7f150119
-int style Theme_AppCompat_Light_Dialog 0x7f15011a
-int style Theme_AppCompat_Light_DialogWhenLarge 0x7f15011b
-int style Theme_AppCompat_Light_Dialog_Alert 0x7f15011c
-int style Theme_AppCompat_Light_Dialog_MinWidth 0x7f15011d
-int style Theme_AppCompat_Light_NoActionBar 0x7f15011e
-int style Theme_AppCompat_NoActionBar 0x7f15011f
-int style Widget_AppCompat_ActionBar 0x7f150120
-int style Widget_AppCompat_ActionBar_Solid 0x7f150121
-int style Widget_AppCompat_ActionBar_TabBar 0x7f150122
-int style Widget_AppCompat_ActionBar_TabText 0x7f150123
-int style Widget_AppCompat_ActionBar_TabView 0x7f150124
-int style Widget_AppCompat_ActionButton 0x7f150125
-int style Widget_AppCompat_ActionButton_CloseMode 0x7f150126
-int style Widget_AppCompat_ActionButton_Overflow 0x7f150127
-int style Widget_AppCompat_ActionMode 0x7f150128
-int style Widget_AppCompat_ActivityChooserView 0x7f150129
-int style Widget_AppCompat_AutoCompleteTextView 0x7f15012a
-int style Widget_AppCompat_Button 0x7f15012b
-int style Widget_AppCompat_ButtonBar 0x7f15012c
-int style Widget_AppCompat_ButtonBar_AlertDialog 0x7f15012d
-int style Widget_AppCompat_Button_Borderless 0x7f15012e
-int style Widget_AppCompat_Button_Borderless_Colored 0x7f15012f
-int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f150130
-int style Widget_AppCompat_Button_Colored 0x7f150131
-int style Widget_AppCompat_Button_Small 0x7f150132
-int style Widget_AppCompat_CompoundButton_CheckBox 0x7f150133
-int style Widget_AppCompat_CompoundButton_RadioButton 0x7f150134
-int style Widget_AppCompat_CompoundButton_Switch 0x7f150135
-int style Widget_AppCompat_DrawerArrowToggle 0x7f150136
-int style Widget_AppCompat_DropDownItem_Spinner 0x7f150137
-int style Widget_AppCompat_EditText 0x7f150138
-int style Widget_AppCompat_ImageButton 0x7f150139
-int style Widget_AppCompat_Light_ActionBar 0x7f15013a
-int style Widget_AppCompat_Light_ActionBar_Solid 0x7f15013b
-int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f15013c
-int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f15013d
-int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f15013e
-int style Widget_AppCompat_Light_ActionBar_TabText 0x7f15013f
-int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f150140
-int style Widget_AppCompat_Light_ActionBar_TabView 0x7f150141
-int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f150142
-int style Widget_AppCompat_Light_ActionButton 0x7f150143
-int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f150144
-int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f150145
-int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f150146
-int style Widget_AppCompat_Light_ActivityChooserView 0x7f150147
-int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f150148
-int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f150149
-int style Widget_AppCompat_Light_ListPopupWindow 0x7f15014a
-int style Widget_AppCompat_Light_ListView_DropDown 0x7f15014b
-int style Widget_AppCompat_Light_PopupMenu 0x7f15014c
-int style Widget_AppCompat_Light_PopupMenu_Overflow 0x7f15014d
-int style Widget_AppCompat_Light_SearchView 0x7f15014e
-int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f15014f
-int style Widget_AppCompat_ListMenuView 0x7f150150
-int style Widget_AppCompat_ListPopupWindow 0x7f150151
-int style Widget_AppCompat_ListView 0x7f150152
-int style Widget_AppCompat_ListView_DropDown 0x7f150153
-int style Widget_AppCompat_ListView_Menu 0x7f150154
-int style Widget_AppCompat_PopupMenu 0x7f150155
-int style Widget_AppCompat_PopupMenu_Overflow 0x7f150156
-int style Widget_AppCompat_PopupWindow 0x7f150157
-int style Widget_AppCompat_ProgressBar 0x7f150158
-int style Widget_AppCompat_ProgressBar_Horizontal 0x7f150159
-int style Widget_AppCompat_RatingBar 0x7f15015a
-int style Widget_AppCompat_RatingBar_Indicator 0x7f15015b
-int style Widget_AppCompat_RatingBar_Small 0x7f15015c
-int style Widget_AppCompat_SearchView 0x7f15015d
-int style Widget_AppCompat_SearchView_ActionBar 0x7f15015e
-int style Widget_AppCompat_SeekBar 0x7f15015f
-int style Widget_AppCompat_SeekBar_Discrete 0x7f150160
-int style Widget_AppCompat_Spinner 0x7f150161
-int style Widget_AppCompat_Spinner_DropDown 0x7f150162
-int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f150163
-int style Widget_AppCompat_Spinner_Underlined 0x7f150164
-int style Widget_AppCompat_TextView 0x7f150165
-int style Widget_AppCompat_TextView_SpinnerItem 0x7f150166
-int style Widget_AppCompat_Toolbar 0x7f150167
-int style Widget_AppCompat_Toolbar_Button_Navigation 0x7f150168
-int style Widget_Compat_NotificationActionContainer 0x7f150169
-int style Widget_Compat_NotificationActionText 0x7f15016a
-int style Widget_Support_CoordinatorLayout 0x7f15016b
-int style customHeartHeartRatingBarStyle 0x7f15016c
-int style darkMode 0x7f15016d
-int style lightMode 0x7f15016e
-int style rb_map_nav 0x7f15016f
-int style register_Dialog_Fullscreen 0x7f150170
-int style title 0x7f150171
-int[] styleable ActionBar { 0x7f040034, 0x7f040036, 0x7f040037, 0x7f04006e, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f04008c, 0x7f040091, 0x7f040092, 0x7f0400ae, 0x7f0400c7, 0x7f0400c8, 0x7f0400c9, 0x7f0400ca, 0x7f0400cb, 0x7f0400d0, 0x7f0400d3, 0x7f040120, 0x7f040135, 0x7f040143, 0x7f04014a, 0x7f04014b, 0x7f04017b, 0x7f04017e, 0x7f04019a, 0x7f0401a3 }
-int styleable ActionBar_background 0
-int styleable ActionBar_backgroundSplit 1
-int styleable ActionBar_backgroundStacked 2
-int styleable ActionBar_contentInsetEnd 3
-int styleable ActionBar_contentInsetEndWithActions 4
-int styleable ActionBar_contentInsetLeft 5
-int styleable ActionBar_contentInsetRight 6
-int styleable ActionBar_contentInsetStart 7
-int styleable ActionBar_contentInsetStartWithNavigation 8
-int styleable ActionBar_customNavigationLayout 9
-int styleable ActionBar_displayOptions 10
-int styleable ActionBar_divider 11
-int styleable ActionBar_elevation 12
-int styleable ActionBar_height 13
-int styleable ActionBar_hideOnContentScroll 14
-int styleable ActionBar_homeAsUpIndicator 15
-int styleable ActionBar_homeLayout 16
-int styleable ActionBar_icon 17
-int styleable ActionBar_indeterminateProgressStyle 18
-int styleable ActionBar_itemPadding 19
-int styleable ActionBar_logo 20
-int styleable ActionBar_navigationMode 21
-int styleable ActionBar_popupTheme 22
-int styleable ActionBar_progressBarPadding 23
-int styleable ActionBar_progressBarStyle 24
-int styleable ActionBar_subtitle 25
-int styleable ActionBar_subtitleTextStyle 26
-int styleable ActionBar_title 27
-int styleable ActionBar_titleTextStyle 28
-int[] styleable ActionBarLayout { 0x10100b3 }
-int styleable ActionBarLayout_android_layout_gravity 0
-int[] styleable ActionMenuItemView { 0x101013f }
-int styleable ActionMenuItemView_android_minWidth 0
-int[] styleable ActionMenuView { }
-int[] styleable ActionMode { 0x7f040034, 0x7f040036, 0x7f04005b, 0x7f0400c7, 0x7f04017e, 0x7f0401a3 }
-int styleable ActionMode_background 0
-int styleable ActionMode_backgroundSplit 1
-int styleable ActionMode_closeItemLayout 2
-int styleable ActionMode_height 3
-int styleable ActionMode_subtitleTextStyle 4
-int styleable ActionMode_titleTextStyle 5
-int[] styleable ActivityChooserView { 0x7f0400b0, 0x7f0400d1 }
-int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0
-int styleable ActivityChooserView_initialActivityCount 1
-int[] styleable AlertDialog { 0x10100f2, 0x7f040045, 0x7f040046, 0x7f040115, 0x7f040116, 0x7f040132, 0x7f04016d, 0x7f04016e }
-int styleable AlertDialog_android_layout 0
-int styleable AlertDialog_buttonIconDimen 1
-int styleable AlertDialog_buttonPanelSideLayout 2
-int styleable AlertDialog_listItemLayout 3
-int styleable AlertDialog_listLayout 4
-int styleable AlertDialog_multiChoiceItemLayout 5
-int styleable AlertDialog_showTitle 6
-int styleable AlertDialog_singleChoiceItemLayout 7
-int[] styleable AnimatedStateListDrawableCompat { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 }
-int styleable AnimatedStateListDrawableCompat_android_constantSize 0
-int styleable AnimatedStateListDrawableCompat_android_dither 1
-int styleable AnimatedStateListDrawableCompat_android_enterFadeDuration 2
-int styleable AnimatedStateListDrawableCompat_android_exitFadeDuration 3
-int styleable AnimatedStateListDrawableCompat_android_variablePadding 4
-int styleable AnimatedStateListDrawableCompat_android_visible 5
-int[] styleable AnimatedStateListDrawableItem { 0x1010199, 0x10100d0 }
-int styleable AnimatedStateListDrawableItem_android_drawable 0
-int styleable AnimatedStateListDrawableItem_android_id 1
-int[] styleable AnimatedStateListDrawableTransition { 0x1010199, 0x101044a, 0x101044b, 0x1010449 }
-int styleable AnimatedStateListDrawableTransition_android_drawable 0
-int styleable AnimatedStateListDrawableTransition_android_fromId 1
-int styleable AnimatedStateListDrawableTransition_android_reversible 2
-int styleable AnimatedStateListDrawableTransition_android_toId 3
-int[] styleable AppCompatImageView { 0x1010119, 0x7f040174, 0x7f040198, 0x7f040199 }
-int styleable AppCompatImageView_android_src 0
-int styleable AppCompatImageView_srcCompat 1
-int styleable AppCompatImageView_tint 2
-int styleable AppCompatImageView_tintMode 3
-int[] styleable AppCompatSeekBar { 0x1010142, 0x7f040195, 0x7f040196, 0x7f040197 }
-int styleable AppCompatSeekBar_android_thumb 0
-int styleable AppCompatSeekBar_tickMark 1
-int styleable AppCompatSeekBar_tickMarkTint 2
-int styleable AppCompatSeekBar_tickMarkTintMode 3
-int[] styleable AppCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 }
-int styleable AppCompatTextHelper_android_drawableBottom 0
-int styleable AppCompatTextHelper_android_drawableEnd 1
-int styleable AppCompatTextHelper_android_drawableLeft 2
-int styleable AppCompatTextHelper_android_drawableRight 3
-int styleable AppCompatTextHelper_android_drawableStart 4
-int styleable AppCompatTextHelper_android_drawableTop 5
-int styleable AppCompatTextHelper_android_textAppearance 6
-int[] styleable AppCompatTextView { 0x1010034, 0x7f04002f, 0x7f040030, 0x7f040031, 0x7f040032, 0x7f040033, 0x7f040096, 0x7f040097, 0x7f040098, 0x7f040099, 0x7f04009b, 0x7f04009c, 0x7f04009d, 0x7f04009e, 0x7f0400b9, 0x7f0400bb, 0x7f0400c3, 0x7f0400d5, 0x7f040110, 0x7f040184, 0x7f04018f }
-int styleable AppCompatTextView_android_textAppearance 0
-int styleable AppCompatTextView_autoSizeMaxTextSize 1
-int styleable AppCompatTextView_autoSizeMinTextSize 2
-int styleable AppCompatTextView_autoSizePresetSizes 3
-int styleable AppCompatTextView_autoSizeStepGranularity 4
-int styleable AppCompatTextView_autoSizeTextType 5
-int styleable AppCompatTextView_drawableBottomCompat 6
-int styleable AppCompatTextView_drawableEndCompat 7
-int styleable AppCompatTextView_drawableLeftCompat 8
-int styleable AppCompatTextView_drawableRightCompat 9
-int styleable AppCompatTextView_drawableStartCompat 10
-int styleable AppCompatTextView_drawableTint 11
-int styleable AppCompatTextView_drawableTintMode 12
-int styleable AppCompatTextView_drawableTopCompat 13
-int styleable AppCompatTextView_firstBaselineToTopHeight 14
-int styleable AppCompatTextView_fontFamily 15
-int styleable AppCompatTextView_fontVariationSettings 16
-int styleable AppCompatTextView_lastBaselineToBottomHeight 17
-int styleable AppCompatTextView_lineHeight 18
-int styleable AppCompatTextView_textAllCaps 19
-int styleable AppCompatTextView_textLocale 20
-int[] styleable AppCompatTheme { 0x7f040001, 0x7f040002, 0x7f040003, 0x7f040004, 0x7f040005, 0x7f040006, 0x7f040007, 0x7f040008, 0x7f040009, 0x7f04000a, 0x7f04000b, 0x7f04000c, 0x7f04000d, 0x7f04000f, 0x7f040010, 0x7f040011, 0x7f040012, 0x7f040013, 0x7f040014, 0x7f040015, 0x7f040016, 0x7f040017, 0x7f040018, 0x7f040019, 0x7f04001a, 0x7f04001b, 0x7f04001c, 0x7f04001d, 0x7f04001e, 0x7f04001f, 0x7f040022, 0x7f040025, 0x7f040026, 0x7f040027, 0x7f040028, 0x10100ae, 0x1010057, 0x7f04002e, 0x7f04003d, 0x7f04003e, 0x7f04003f, 0x7f040040, 0x7f040041, 0x7f040042, 0x7f040047, 0x7f040048, 0x7f040053, 0x7f040054, 0x7f04005f, 0x7f040060, 0x7f040061, 0x7f040062, 0x7f040063, 0x7f040064, 0x7f040065, 0x7f040066, 0x7f040067, 0x7f040068, 0x7f040079, 0x7f04008e, 0x7f04008f, 0x7f040090, 0x7f040093, 0x7f040095, 0x7f0400a0, 0x7f0400a1, 0x7f0400a3, 0x7f0400a4, 0x7f0400a5, 0x7f0400c9, 0x7f0400cf, 0x7f040111, 0x7f040112, 0x7f040113, 0x7f040114, 0x7f040117, 0x7f040118, 0x7f040119, 0x7f04011a, 0x7f04011b, 0x7f04011c, 0x7f04011d, 0x7f04011e, 0x7f04011f, 0x7f04013d, 0x7f04013e, 0x7f04013f, 0x7f040142, 0x7f040144, 0x7f04014f, 0x7f040150, 0x7f040151, 0x7f040152, 0x7f040166, 0x7f040167, 0x7f040168, 0x7f040169, 0x7f040171, 0x7f040172, 0x7f040182, 0x7f040185, 0x7f040186, 0x7f040187, 0x7f040188, 0x7f040189, 0x7f04018a, 0x7f04018b, 0x7f04018c, 0x7f04018d, 0x7f04018e, 0x7f0401a4, 0x7f0401a5, 0x7f0401a6, 0x7f0401a7, 0x7f0401ae, 0x7f0401b0, 0x7f0401b1, 0x7f0401b2, 0x7f0401b3, 0x7f0401b4, 0x7f0401b5, 0x7f0401b6, 0x7f0401b7, 0x7f0401b8, 0x7f0401b9 }
-int styleable AppCompatTheme_actionBarDivider 0
-int styleable AppCompatTheme_actionBarItemBackground 1
-int styleable AppCompatTheme_actionBarPopupTheme 2
-int styleable AppCompatTheme_actionBarSize 3
-int styleable AppCompatTheme_actionBarSplitStyle 4
-int styleable AppCompatTheme_actionBarStyle 5
-int styleable AppCompatTheme_actionBarTabBarStyle 6
-int styleable AppCompatTheme_actionBarTabStyle 7
-int styleable AppCompatTheme_actionBarTabTextStyle 8
-int styleable AppCompatTheme_actionBarTheme 9
-int styleable AppCompatTheme_actionBarWidgetTheme 10
-int styleable AppCompatTheme_actionButtonStyle 11
-int styleable AppCompatTheme_actionDropDownStyle 12
-int styleable AppCompatTheme_actionMenuTextAppearance 13
-int styleable AppCompatTheme_actionMenuTextColor 14
-int styleable AppCompatTheme_actionModeBackground 15
-int styleable AppCompatTheme_actionModeCloseButtonStyle 16
-int styleable AppCompatTheme_actionModeCloseDrawable 17
-int styleable AppCompatTheme_actionModeCopyDrawable 18
-int styleable AppCompatTheme_actionModeCutDrawable 19
-int styleable AppCompatTheme_actionModeFindDrawable 20
-int styleable AppCompatTheme_actionModePasteDrawable 21
-int styleable AppCompatTheme_actionModePopupWindowStyle 22
-int styleable AppCompatTheme_actionModeSelectAllDrawable 23
-int styleable AppCompatTheme_actionModeShareDrawable 24
-int styleable AppCompatTheme_actionModeSplitBackground 25
-int styleable AppCompatTheme_actionModeStyle 26
-int styleable AppCompatTheme_actionModeWebSearchDrawable 27
-int styleable AppCompatTheme_actionOverflowButtonStyle 28
-int styleable AppCompatTheme_actionOverflowMenuStyle 29
-int styleable AppCompatTheme_activityChooserViewStyle 30
-int styleable AppCompatTheme_alertDialogButtonGroupStyle 31
-int styleable AppCompatTheme_alertDialogCenterButtons 32
-int styleable AppCompatTheme_alertDialogStyle 33
-int styleable AppCompatTheme_alertDialogTheme 34
-int styleable AppCompatTheme_android_windowAnimationStyle 35
-int styleable AppCompatTheme_android_windowIsFloating 36
-int styleable AppCompatTheme_autoCompleteTextViewStyle 37
-int styleable AppCompatTheme_borderlessButtonStyle 38
-int styleable AppCompatTheme_buttonBarButtonStyle 39
-int styleable AppCompatTheme_buttonBarNegativeButtonStyle 40
-int styleable AppCompatTheme_buttonBarNeutralButtonStyle 41
-int styleable AppCompatTheme_buttonBarPositiveButtonStyle 42
-int styleable AppCompatTheme_buttonBarStyle 43
-int styleable AppCompatTheme_buttonStyle 44
-int styleable AppCompatTheme_buttonStyleSmall 45
-int styleable AppCompatTheme_checkboxStyle 46
-int styleable AppCompatTheme_checkedTextViewStyle 47
-int styleable AppCompatTheme_colorAccent 48
-int styleable AppCompatTheme_colorBackgroundFloating 49
-int styleable AppCompatTheme_colorButtonNormal 50
-int styleable AppCompatTheme_colorControlActivated 51
-int styleable AppCompatTheme_colorControlHighlight 52
-int styleable AppCompatTheme_colorControlNormal 53
-int styleable AppCompatTheme_colorError 54
-int styleable AppCompatTheme_colorPrimary 55
-int styleable AppCompatTheme_colorPrimaryDark 56
-int styleable AppCompatTheme_colorSwitchThumbNormal 57
-int styleable AppCompatTheme_controlBackground 58
-int styleable AppCompatTheme_dialogCornerRadius 59
-int styleable AppCompatTheme_dialogPreferredPadding 60
-int styleable AppCompatTheme_dialogTheme 61
-int styleable AppCompatTheme_dividerHorizontal 62
-int styleable AppCompatTheme_dividerVertical 63
-int styleable AppCompatTheme_dropDownListViewStyle 64
-int styleable AppCompatTheme_dropdownListPreferredItemHeight 65
-int styleable AppCompatTheme_editTextBackground 66
-int styleable AppCompatTheme_editTextColor 67
-int styleable AppCompatTheme_editTextStyle 68
-int styleable AppCompatTheme_homeAsUpIndicator 69
-int styleable AppCompatTheme_imageButtonStyle 70
-int styleable AppCompatTheme_listChoiceBackgroundIndicator 71
-int styleable AppCompatTheme_listChoiceIndicatorMultipleAnimated 72
-int styleable AppCompatTheme_listChoiceIndicatorSingleAnimated 73
-int styleable AppCompatTheme_listDividerAlertDialog 74
-int styleable AppCompatTheme_listMenuViewStyle 75
-int styleable AppCompatTheme_listPopupWindowStyle 76
-int styleable AppCompatTheme_listPreferredItemHeight 77
-int styleable AppCompatTheme_listPreferredItemHeightLarge 78
-int styleable AppCompatTheme_listPreferredItemHeightSmall 79
-int styleable AppCompatTheme_listPreferredItemPaddingEnd 80
-int styleable AppCompatTheme_listPreferredItemPaddingLeft 81
-int styleable AppCompatTheme_listPreferredItemPaddingRight 82
-int styleable AppCompatTheme_listPreferredItemPaddingStart 83
-int styleable AppCompatTheme_panelBackground 84
-int styleable AppCompatTheme_panelMenuListTheme 85
-int styleable AppCompatTheme_panelMenuListWidth 86
-int styleable AppCompatTheme_popupMenuStyle 87
-int styleable AppCompatTheme_popupWindowStyle 88
-int styleable AppCompatTheme_radioButtonStyle 89
-int styleable AppCompatTheme_ratingBarStyle 90
-int styleable AppCompatTheme_ratingBarStyleIndicator 91
-int styleable AppCompatTheme_ratingBarStyleSmall 92
-int styleable AppCompatTheme_searchViewStyle 93
-int styleable AppCompatTheme_seekBarStyle 94
-int styleable AppCompatTheme_selectableItemBackground 95
-int styleable AppCompatTheme_selectableItemBackgroundBorderless 96
-int styleable AppCompatTheme_spinnerDropDownItemStyle 97
-int styleable AppCompatTheme_spinnerStyle 98
-int styleable AppCompatTheme_switchStyle 99
-int styleable AppCompatTheme_textAppearanceLargePopupMenu 100
-int styleable AppCompatTheme_textAppearanceListItem 101
-int styleable AppCompatTheme_textAppearanceListItemSecondary 102
-int styleable AppCompatTheme_textAppearanceListItemSmall 103
-int styleable AppCompatTheme_textAppearancePopupMenuHeader 104
-int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 105
-int styleable AppCompatTheme_textAppearanceSearchResultTitle 106
-int styleable AppCompatTheme_textAppearanceSmallPopupMenu 107
-int styleable AppCompatTheme_textColorAlertDialogListItem 108
-int styleable AppCompatTheme_textColorSearchUrl 109
-int styleable AppCompatTheme_toolbarNavigationButtonStyle 110
-int styleable AppCompatTheme_toolbarStyle 111
-int styleable AppCompatTheme_tooltipForegroundColor 112
-int styleable AppCompatTheme_tooltipFrameBackground 113
-int styleable AppCompatTheme_viewInflaterClass 114
-int styleable AppCompatTheme_windowActionBar 115
-int styleable AppCompatTheme_windowActionBarOverlay 116
-int styleable AppCompatTheme_windowActionModeOverlay 117
-int styleable AppCompatTheme_windowFixedHeightMajor 118
-int styleable AppCompatTheme_windowFixedHeightMinor 119
-int styleable AppCompatTheme_windowFixedWidthMajor 120
-int styleable AppCompatTheme_windowFixedWidthMinor 121
-int styleable AppCompatTheme_windowMinWidthMajor 122
-int styleable AppCompatTheme_windowMinWidthMinor 123
-int styleable AppCompatTheme_windowNoTitle 124
-int[] styleable ButtonBarContainerTheme { 0x7f04003e, 0x7f040042 }
-int styleable ButtonBarContainerTheme_buttonBarButtonStyle 0
-int styleable ButtonBarContainerTheme_buttonBarStyle 1
-int[] styleable ButtonBarLayout { 0x7f040029 }
-int styleable ButtonBarLayout_allowStacking 0
-int[] styleable CardView { 0x1010140, 0x101013f, 0x7f04004b, 0x7f04004c, 0x7f04004d, 0x7f04004e, 0x7f04004f, 0x7f040050, 0x7f040074, 0x7f040075, 0x7f040076, 0x7f040077, 0x7f040078 }
-int styleable CardView_android_minHeight 0
-int styleable CardView_android_minWidth 1
-int styleable CardView_cardBackgroundColor 2
-int styleable CardView_cardCornerRadius 3
-int styleable CardView_cardElevation 4
-int styleable CardView_cardMaxElevation 5
-int styleable CardView_cardPreventCornerOverlap 6
-int styleable CardView_cardUseCompatPadding 7
-int styleable CardView_contentPadding 8
-int styleable CardView_contentPaddingBottom 9
-int styleable CardView_contentPaddingLeft 10
-int styleable CardView_contentPaddingRight 11
-int styleable CardView_contentPaddingTop 12
-int[] styleable CircularProgressDrawable { 0x7f04007b, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f04007f, 0x7f040080, 0x7f040081, 0x7f040082, 0x7f040083, 0x7f040084, 0x7f040085, 0x7f040086, 0x7f040087, 0x7f040088, 0x7f040089, 0x7f04008a, 0x7f04008b, 0x7f04014c }
-int styleable CircularProgressDrawable_cpd_inAnimDuration 0
-int styleable CircularProgressDrawable_cpd_inStepColors 1
-int styleable CircularProgressDrawable_cpd_inStepPercent 2
-int styleable CircularProgressDrawable_cpd_initialAngle 3
-int styleable CircularProgressDrawable_cpd_keepDuration 4
-int styleable CircularProgressDrawable_cpd_maxSweepAngle 5
-int styleable CircularProgressDrawable_cpd_minSweepAngle 6
-int styleable CircularProgressDrawable_cpd_outAnimDuration 7
-int styleable CircularProgressDrawable_cpd_padding 8
-int styleable CircularProgressDrawable_cpd_reverse 9
-int styleable CircularProgressDrawable_cpd_rotateDuration 10
-int styleable CircularProgressDrawable_cpd_strokeColor 11
-int styleable CircularProgressDrawable_cpd_strokeColors 12
-int styleable CircularProgressDrawable_cpd_strokeSecondaryColor 13
-int styleable CircularProgressDrawable_cpd_strokeSize 14
-int styleable CircularProgressDrawable_cpd_transformDuration 15
-int styleable CircularProgressDrawable_cpd_transformInterpolator 16
-int styleable CircularProgressDrawable_pv_progressMode 17
-int[] styleable ColorStateListItem { 0x7f04002a, 0x101031f, 0x10101a5 }
-int styleable ColorStateListItem_alpha 0
-int styleable ColorStateListItem_android_alpha 1
-int styleable ColorStateListItem_android_color 2
-int[] styleable CompoundButton { 0x1010107, 0x7f040043, 0x7f040049, 0x7f04004a }
-int styleable CompoundButton_android_button 0
-int styleable CompoundButton_buttonCompat 1
-int styleable CompoundButton_buttonTint 2
-int styleable CompoundButton_buttonTintMode 3
-int[] styleable ConstraintLayout_Layout { 0x1010120, 0x101011f, 0x1010140, 0x101013f, 0x10100c4, 0x7f04003b, 0x7f04003c, 0x7f040052, 0x7f04006a, 0x7f04006b, 0x7f0400db, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400e8, 0x7f0400e9, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f0400f0, 0x7f0400f1, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040101, 0x7f040102, 0x7f040103, 0x7f040105, 0x7f040106, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c, 0x7f04010f }
-int styleable ConstraintLayout_Layout_android_maxHeight 0
-int styleable ConstraintLayout_Layout_android_maxWidth 1
-int styleable ConstraintLayout_Layout_android_minHeight 2
-int styleable ConstraintLayout_Layout_android_minWidth 3
-int styleable ConstraintLayout_Layout_android_orientation 4
-int styleable ConstraintLayout_Layout_barrierAllowsGoneWidgets 5
-int styleable ConstraintLayout_Layout_barrierDirection 6
-int styleable ConstraintLayout_Layout_chainUseRtl 7
-int styleable ConstraintLayout_Layout_constraintSet 8
-int styleable ConstraintLayout_Layout_constraint_referenced_ids 9
-int styleable ConstraintLayout_Layout_layout_constrainedHeight 10
-int styleable ConstraintLayout_Layout_layout_constrainedWidth 11
-int styleable ConstraintLayout_Layout_layout_constraintBaseline_creator 12
-int styleable ConstraintLayout_Layout_layout_constraintBaseline_toBaselineOf 13
-int styleable ConstraintLayout_Layout_layout_constraintBottom_creator 14
-int styleable ConstraintLayout_Layout_layout_constraintBottom_toBottomOf 15
-int styleable ConstraintLayout_Layout_layout_constraintBottom_toTopOf 16
-int styleable ConstraintLayout_Layout_layout_constraintCircle 17
-int styleable ConstraintLayout_Layout_layout_constraintCircleAngle 18
-int styleable ConstraintLayout_Layout_layout_constraintCircleRadius 19
-int styleable ConstraintLayout_Layout_layout_constraintDimensionRatio 20
-int styleable ConstraintLayout_Layout_layout_constraintEnd_toEndOf 21
-int styleable ConstraintLayout_Layout_layout_constraintEnd_toStartOf 22
-int styleable ConstraintLayout_Layout_layout_constraintGuide_begin 23
-int styleable ConstraintLayout_Layout_layout_constraintGuide_end 24
-int styleable ConstraintLayout_Layout_layout_constraintGuide_percent 25
-int styleable ConstraintLayout_Layout_layout_constraintHeight_default 26
-int styleable ConstraintLayout_Layout_layout_constraintHeight_max 27
-int styleable ConstraintLayout_Layout_layout_constraintHeight_min 28
-int styleable ConstraintLayout_Layout_layout_constraintHeight_percent 29
-int styleable ConstraintLayout_Layout_layout_constraintHorizontal_bias 30
-int styleable ConstraintLayout_Layout_layout_constraintHorizontal_chainStyle 31
-int styleable ConstraintLayout_Layout_layout_constraintHorizontal_weight 32
-int styleable ConstraintLayout_Layout_layout_constraintLeft_creator 33
-int styleable ConstraintLayout_Layout_layout_constraintLeft_toLeftOf 34
-int styleable ConstraintLayout_Layout_layout_constraintLeft_toRightOf 35
-int styleable ConstraintLayout_Layout_layout_constraintRight_creator 36
-int styleable ConstraintLayout_Layout_layout_constraintRight_toLeftOf 37
-int styleable ConstraintLayout_Layout_layout_constraintRight_toRightOf 38
-int styleable ConstraintLayout_Layout_layout_constraintStart_toEndOf 39
-int styleable ConstraintLayout_Layout_layout_constraintStart_toStartOf 40
-int styleable ConstraintLayout_Layout_layout_constraintTop_creator 41
-int styleable ConstraintLayout_Layout_layout_constraintTop_toBottomOf 42
-int styleable ConstraintLayout_Layout_layout_constraintTop_toTopOf 43
-int styleable ConstraintLayout_Layout_layout_constraintVertical_bias 44
-int styleable ConstraintLayout_Layout_layout_constraintVertical_chainStyle 45
-int styleable ConstraintLayout_Layout_layout_constraintVertical_weight 46
-int styleable ConstraintLayout_Layout_layout_constraintWidth_default 47
-int styleable ConstraintLayout_Layout_layout_constraintWidth_max 48
-int styleable ConstraintLayout_Layout_layout_constraintWidth_min 49
-int styleable ConstraintLayout_Layout_layout_constraintWidth_percent 50
-int styleable ConstraintLayout_Layout_layout_editor_absoluteX 51
-int styleable ConstraintLayout_Layout_layout_editor_absoluteY 52
-int styleable ConstraintLayout_Layout_layout_goneMarginBottom 53
-int styleable ConstraintLayout_Layout_layout_goneMarginEnd 54
-int styleable ConstraintLayout_Layout_layout_goneMarginLeft 55
-int styleable ConstraintLayout_Layout_layout_goneMarginRight 56
-int styleable ConstraintLayout_Layout_layout_goneMarginStart 57
-int styleable ConstraintLayout_Layout_layout_goneMarginTop 58
-int styleable ConstraintLayout_Layout_layout_optimizationLevel 59
-int[] styleable ConstraintLayout_placeholder { 0x7f04006c, 0x7f0400af }
-int styleable ConstraintLayout_placeholder_content 0
-int styleable ConstraintLayout_placeholder_emptyVisibility 1
-int[] styleable ConstraintSet { 0x101031f, 0x1010440, 0x10100d0, 0x10100f5, 0x10100fa, 0x10103b6, 0x10100f7, 0x10100f9, 0x10103b5, 0x10100f8, 0x10100f4, 0x1010120, 0x101011f, 0x1010140, 0x101013f, 0x10100c4, 0x1010326, 0x1010327, 0x1010328, 0x1010324, 0x1010325, 0x1010320, 0x1010321, 0x1010322, 0x1010323, 0x10103fa, 0x10100dc, 0x7f04003b, 0x7f04003c, 0x7f040052, 0x7f04006b, 0x7f0400db, 0x7f0400dc, 0x7f0400dd, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400e8, 0x7f0400e9, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef, 0x7f0400f0, 0x7f0400f1, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa, 0x7f0400fb, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040100, 0x7f040101, 0x7f040102, 0x7f040103, 0x7f040105, 0x7f040106, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c }
-int styleable ConstraintSet_android_alpha 0
-int styleable ConstraintSet_android_elevation 1
-int styleable ConstraintSet_android_id 2
-int styleable ConstraintSet_android_layout_height 3
-int styleable ConstraintSet_android_layout_marginBottom 4
-int styleable ConstraintSet_android_layout_marginEnd 5
-int styleable ConstraintSet_android_layout_marginLeft 6
-int styleable ConstraintSet_android_layout_marginRight 7
-int styleable ConstraintSet_android_layout_marginStart 8
-int styleable ConstraintSet_android_layout_marginTop 9
-int styleable ConstraintSet_android_layout_width 10
-int styleable ConstraintSet_android_maxHeight 11
-int styleable ConstraintSet_android_maxWidth 12
-int styleable ConstraintSet_android_minHeight 13
-int styleable ConstraintSet_android_minWidth 14
-int styleable ConstraintSet_android_orientation 15
-int styleable ConstraintSet_android_rotation 16
-int styleable ConstraintSet_android_rotationX 17
-int styleable ConstraintSet_android_rotationY 18
-int styleable ConstraintSet_android_scaleX 19
-int styleable ConstraintSet_android_scaleY 20
-int styleable ConstraintSet_android_transformPivotX 21
-int styleable ConstraintSet_android_transformPivotY 22
-int styleable ConstraintSet_android_translationX 23
-int styleable ConstraintSet_android_translationY 24
-int styleable ConstraintSet_android_translationZ 25
-int styleable ConstraintSet_android_visibility 26
-int styleable ConstraintSet_barrierAllowsGoneWidgets 27
-int styleable ConstraintSet_barrierDirection 28
-int styleable ConstraintSet_chainUseRtl 29
-int styleable ConstraintSet_constraint_referenced_ids 30
-int styleable ConstraintSet_layout_constrainedHeight 31
-int styleable ConstraintSet_layout_constrainedWidth 32
-int styleable ConstraintSet_layout_constraintBaseline_creator 33
-int styleable ConstraintSet_layout_constraintBaseline_toBaselineOf 34
-int styleable ConstraintSet_layout_constraintBottom_creator 35
-int styleable ConstraintSet_layout_constraintBottom_toBottomOf 36
-int styleable ConstraintSet_layout_constraintBottom_toTopOf 37
-int styleable ConstraintSet_layout_constraintCircle 38
-int styleable ConstraintSet_layout_constraintCircleAngle 39
-int styleable ConstraintSet_layout_constraintCircleRadius 40
-int styleable ConstraintSet_layout_constraintDimensionRatio 41
-int styleable ConstraintSet_layout_constraintEnd_toEndOf 42
-int styleable ConstraintSet_layout_constraintEnd_toStartOf 43
-int styleable ConstraintSet_layout_constraintGuide_begin 44
-int styleable ConstraintSet_layout_constraintGuide_end 45
-int styleable ConstraintSet_layout_constraintGuide_percent 46
-int styleable ConstraintSet_layout_constraintHeight_default 47
-int styleable ConstraintSet_layout_constraintHeight_max 48
-int styleable ConstraintSet_layout_constraintHeight_min 49
-int styleable ConstraintSet_layout_constraintHeight_percent 50
-int styleable ConstraintSet_layout_constraintHorizontal_bias 51
-int styleable ConstraintSet_layout_constraintHorizontal_chainStyle 52
-int styleable ConstraintSet_layout_constraintHorizontal_weight 53
-int styleable ConstraintSet_layout_constraintLeft_creator 54
-int styleable ConstraintSet_layout_constraintLeft_toLeftOf 55
-int styleable ConstraintSet_layout_constraintLeft_toRightOf 56
-int styleable ConstraintSet_layout_constraintRight_creator 57
-int styleable ConstraintSet_layout_constraintRight_toLeftOf 58
-int styleable ConstraintSet_layout_constraintRight_toRightOf 59
-int styleable ConstraintSet_layout_constraintStart_toEndOf 60
-int styleable ConstraintSet_layout_constraintStart_toStartOf 61
-int styleable ConstraintSet_layout_constraintTop_creator 62
-int styleable ConstraintSet_layout_constraintTop_toBottomOf 63
-int styleable ConstraintSet_layout_constraintTop_toTopOf 64
-int styleable ConstraintSet_layout_constraintVertical_bias 65
-int styleable ConstraintSet_layout_constraintVertical_chainStyle 66
-int styleable ConstraintSet_layout_constraintVertical_weight 67
-int styleable ConstraintSet_layout_constraintWidth_default 68
-int styleable ConstraintSet_layout_constraintWidth_max 69
-int styleable ConstraintSet_layout_constraintWidth_min 70
-int styleable ConstraintSet_layout_constraintWidth_percent 71
-int styleable ConstraintSet_layout_editor_absoluteX 72
-int styleable ConstraintSet_layout_editor_absoluteY 73
-int styleable ConstraintSet_layout_goneMarginBottom 74
-int styleable ConstraintSet_layout_goneMarginEnd 75
-int styleable ConstraintSet_layout_goneMarginLeft 76
-int styleable ConstraintSet_layout_goneMarginRight 77
-int styleable ConstraintSet_layout_goneMarginStart 78
-int styleable ConstraintSet_layout_goneMarginTop 79
-int[] styleable CoordinatorLayout { 0x7f0400d4, 0x7f040177 }
-int styleable CoordinatorLayout_keylines 0
-int styleable CoordinatorLayout_statusBarBackground 1
-int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x7f0400d8, 0x7f0400d9, 0x7f0400da, 0x7f040104, 0x7f04010d, 0x7f04010e }
-int styleable CoordinatorLayout_Layout_android_layout_gravity 0
-int styleable CoordinatorLayout_Layout_layout_anchor 1
-int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
-int styleable CoordinatorLayout_Layout_layout_behavior 3
-int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
-int styleable CoordinatorLayout_Layout_layout_insetEdge 5
-int styleable CoordinatorLayout_Layout_layout_keyline 6
-int[] styleable CustomCircleImageView { 0x7f040055, 0x7f040056, 0x7f040057, 0x7f040058 }
-int styleable CustomCircleImageView_civ_border_color 0
-int styleable CustomCircleImageView_civ_border_overlay 1
-int styleable CustomCircleImageView_civ_border_width 2
-int styleable CustomCircleImageView_civ_fill_color 3
-int[] styleable CustomRatingBar { 0x7f040059, 0x7f0400a6, 0x7f0400a7, 0x7f0400a8, 0x7f0400a9, 0x7f0400aa, 0x7f0400ab, 0x7f0400ac, 0x7f0400ad, 0x7f040178 }
-int styleable CustomRatingBar_clickable 0
-int styleable CustomRatingBar_elenmentCount 1
-int styleable CustomRatingBar_elenmentEmpty 2
-int styleable CustomRatingBar_elenmentFill 3
-int styleable CustomRatingBar_elenmentHarf 4
-int styleable CustomRatingBar_elenmentHeight 5
-int styleable CustomRatingBar_elenmentPadding 6
-int styleable CustomRatingBar_elenmentStep 7
-int styleable CustomRatingBar_elenmentWidth 8
-int styleable CustomRatingBar_stepSize 9
-int[] styleable DiscreteScrollView { 0x7f0400a2 }
-int styleable DiscreteScrollView_dsv_orientation 0
-int[] styleable DrawerArrowToggle { 0x7f04002c, 0x7f04002d, 0x7f04003a, 0x7f04005e, 0x7f04009a, 0x7f0400c5, 0x7f040170, 0x7f040191 }
-int styleable DrawerArrowToggle_arrowHeadLength 0
-int styleable DrawerArrowToggle_arrowShaftLength 1
-int styleable DrawerArrowToggle_barLength 2
-int styleable DrawerArrowToggle_color 3
-int styleable DrawerArrowToggle_drawableSize 4
-int styleable DrawerArrowToggle_gapBetweenBars 5
-int styleable DrawerArrowToggle_spinBars 6
-int styleable DrawerArrowToggle_thickness 7
-int[] styleable FontFamily { 0x7f0400bc, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c0, 0x7f0400c1 }
-int styleable FontFamily_fontProviderAuthority 0
-int styleable FontFamily_fontProviderCerts 1
-int styleable FontFamily_fontProviderFetchStrategy 2
-int styleable FontFamily_fontProviderFetchTimeout 3
-int styleable FontFamily_fontProviderPackage 4
-int styleable FontFamily_fontProviderQuery 5
-int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x7f0400ba, 0x7f0400c2, 0x7f0400c3, 0x7f0400c4, 0x7f0401ac }
-int styleable FontFamilyFont_android_font 0
-int styleable FontFamilyFont_android_fontStyle 1
-int styleable FontFamilyFont_android_fontVariationSettings 2
-int styleable FontFamilyFont_android_fontWeight 3
-int styleable FontFamilyFont_android_ttcIndex 4
-int styleable FontFamilyFont_font 5
-int styleable FontFamilyFont_fontStyle 6
-int styleable FontFamilyFont_fontVariationSettings 7
-int styleable FontFamilyFont_fontWeight 8
-int styleable FontFamilyFont_ttcIndex 9
-int[] styleable GenericDraweeHierarchy { 0x7f040023, 0x7f040035, 0x7f0400b1, 0x7f0400b2, 0x7f0400b3, 0x7f040138, 0x7f040140, 0x7f040141, 0x7f040146, 0x7f040147, 0x7f040148, 0x7f040149, 0x7f040157, 0x7f040158, 0x7f04015a, 0x7f04015b, 0x7f04015c, 0x7f04015d, 0x7f04015e, 0x7f04015f, 0x7f040160, 0x7f040161, 0x7f040162, 0x7f040163, 0x7f0401ad }
-int styleable GenericDraweeHierarchy_actualImageScaleType 0
-int styleable GenericDraweeHierarchy_backgroundImage 1
-int styleable GenericDraweeHierarchy_fadeDuration 2
-int styleable GenericDraweeHierarchy_failureImage 3
-int styleable GenericDraweeHierarchy_failureImageScaleType 4
-int styleable GenericDraweeHierarchy_overlayImage 5
-int styleable GenericDraweeHierarchy_placeholderImage 6
-int styleable GenericDraweeHierarchy_placeholderImageScaleType 7
-int styleable GenericDraweeHierarchy_pressedStateOverlayImage 8
-int styleable GenericDraweeHierarchy_progressBarAutoRotateInterval 9
-int styleable GenericDraweeHierarchy_progressBarImage 10
-int styleable GenericDraweeHierarchy_progressBarImageScaleType 11
-int styleable GenericDraweeHierarchy_retryImage 12
-int styleable GenericDraweeHierarchy_retryImageScaleType 13
-int styleable GenericDraweeHierarchy_roundAsCircle 14
-int styleable GenericDraweeHierarchy_roundBottomLeft 15
-int styleable GenericDraweeHierarchy_roundBottomRight 16
-int styleable GenericDraweeHierarchy_roundTopLeft 17
-int styleable GenericDraweeHierarchy_roundTopRight 18
-int styleable GenericDraweeHierarchy_roundWithOverlayColor 19
-int styleable GenericDraweeHierarchy_roundedCornerRadius 20
-int styleable GenericDraweeHierarchy_roundingBorderColor 21
-int styleable GenericDraweeHierarchy_roundingBorderPadding 22
-int styleable GenericDraweeHierarchy_roundingBorderWidth 23
-int styleable GenericDraweeHierarchy_viewAspectRatio 24
-int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 }
-int styleable GradientColor_android_centerColor 0
-int styleable GradientColor_android_centerX 1
-int styleable GradientColor_android_centerY 2
-int styleable GradientColor_android_endColor 3
-int styleable GradientColor_android_endX 4
-int styleable GradientColor_android_endY 5
-int styleable GradientColor_android_gradientRadius 6
-int styleable GradientColor_android_startColor 7
-int styleable GradientColor_android_startX 8
-int styleable GradientColor_android_startY 9
-int styleable GradientColor_android_tileMode 10
-int styleable GradientColor_android_type 11
-int[] styleable GradientColorItem { 0x10101a5, 0x1010514 }
-int styleable GradientColorItem_android_color 0
-int styleable GradientColorItem_android_offset 1
-int[] styleable LinearConstraintLayout { 0x10100c4 }
-int styleable LinearConstraintLayout_android_orientation 0
-int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x7f040092, 0x7f040094, 0x7f040123, 0x7f04016b }
-int styleable LinearLayoutCompat_android_baselineAligned 0
-int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1
-int styleable LinearLayoutCompat_android_gravity 2
-int styleable LinearLayoutCompat_android_orientation 3
-int styleable LinearLayoutCompat_android_weightSum 4
-int styleable LinearLayoutCompat_divider 5
-int styleable LinearLayoutCompat_dividerPadding 6
-int styleable LinearLayoutCompat_measureWithLargestChild 7
-int styleable LinearLayoutCompat_showDividers 8
-int[] styleable LinearLayoutCompat_Layout { 0x10100b3, 0x10100f5, 0x1010181, 0x10100f4 }
-int styleable LinearLayoutCompat_Layout_android_layout_gravity 0
-int styleable LinearLayoutCompat_Layout_android_layout_height 1
-int styleable LinearLayoutCompat_Layout_android_layout_weight 2
-int styleable LinearLayoutCompat_Layout_android_layout_width 3
-int[] styleable ListPopupWindow { 0x10102ac, 0x10102ad }
-int styleable ListPopupWindow_android_dropDownHorizontalOffset 0
-int styleable ListPopupWindow_android_dropDownVerticalOffset 1
-int[] styleable MenuGroup { 0x10101e0, 0x101000e, 0x10100d0, 0x10101de, 0x10101df, 0x1010194 }
-int styleable MenuGroup_android_checkableBehavior 0
-int styleable MenuGroup_android_enabled 1
-int styleable MenuGroup_android_id 2
-int styleable MenuGroup_android_menuCategory 3
-int styleable MenuGroup_android_orderInCategory 4
-int styleable MenuGroup_android_visible 5
-int[] styleable MenuItem { 0x7f04000e, 0x7f040020, 0x7f040021, 0x7f04002b, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x7f04006d, 0x7f0400cc, 0x7f0400cd, 0x7f040136, 0x7f04016a, 0x7f0401a8 }
-int styleable MenuItem_actionLayout 0
-int styleable MenuItem_actionProviderClass 1
-int styleable MenuItem_actionViewClass 2
-int styleable MenuItem_alphabeticModifiers 3
-int styleable MenuItem_android_alphabeticShortcut 4
-int styleable MenuItem_android_checkable 5
-int styleable MenuItem_android_checked 6
-int styleable MenuItem_android_enabled 7
-int styleable MenuItem_android_icon 8
-int styleable MenuItem_android_id 9
-int styleable MenuItem_android_menuCategory 10
-int styleable MenuItem_android_numericShortcut 11
-int styleable MenuItem_android_onClick 12
-int styleable MenuItem_android_orderInCategory 13
-int styleable MenuItem_android_title 14
-int styleable MenuItem_android_titleCondensed 15
-int styleable MenuItem_android_visible 16
-int styleable MenuItem_contentDescription 17
-int styleable MenuItem_iconTint 18
-int styleable MenuItem_iconTintMode 19
-int styleable MenuItem_numericModifiers 20
-int styleable MenuItem_showAsAction 21
-int styleable MenuItem_tooltipText 22
-int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x7f040145, 0x7f040179 }
-int styleable MenuView_android_headerBackground 0
-int styleable MenuView_android_horizontalDivider 1
-int styleable MenuView_android_itemBackground 2
-int styleable MenuView_android_itemIconDisabledAlpha 3
-int styleable MenuView_android_itemTextAppearance 4
-int styleable MenuView_android_verticalDivider 5
-int styleable MenuView_android_windowAnimationStyle 6
-int styleable MenuView_preserveIconSpacing 7
-int styleable MenuView_subMenuArrow 8
-int[] styleable MogoImageView { 0x7f040125, 0x7f040126, 0x7f040127, 0x7f040128, 0x7f040129, 0x7f04012a, 0x7f04012b, 0x7f04012c, 0x7f04012d, 0x7f04012e, 0x7f04012f, 0x7f040130, 0x7f040131 }
-int styleable MogoImageView_miv_blurRadius 0
-int styleable MogoImageView_miv_borderColor 1
-int styleable MogoImageView_miv_bottomLeftRadius 2
-int styleable MogoImageView_miv_bottomRightRadius 3
-int styleable MogoImageView_miv_failureHolder 4
-int styleable MogoImageView_miv_isBlur 5
-int styleable MogoImageView_miv_overlayImageId 6
-int styleable MogoImageView_miv_placeHolder 7
-int styleable MogoImageView_miv_radius 8
-int styleable MogoImageView_miv_shape 9
-int styleable MogoImageView_miv_shapeBorderWidth 10
-int styleable MogoImageView_miv_topLeftRadius 11
-int styleable MogoImageView_miv_topRightRadius 12
-int[] styleable MogoSkinBackgroundHelper { 0x10100d4 }
-int styleable MogoSkinBackgroundHelper_android_background 0
-int[] styleable MogoSkinCompatImageView { 0x1010119, 0x1010121, 0x7f040174, 0x7f040198 }
-int styleable MogoSkinCompatImageView_android_src 0
-int styleable MogoSkinCompatImageView_android_tint 1
-int styleable MogoSkinCompatImageView_srcCompat 2
-int styleable MogoSkinCompatImageView_tint 3
-int[] styleable MogoSkinCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 }
-int styleable MogoSkinCompatTextHelper_android_drawableBottom 0
-int styleable MogoSkinCompatTextHelper_android_drawableEnd 1
-int styleable MogoSkinCompatTextHelper_android_drawableLeft 2
-int styleable MogoSkinCompatTextHelper_android_drawableRight 3
-int styleable MogoSkinCompatTextHelper_android_drawableStart 4
-int styleable MogoSkinCompatTextHelper_android_drawableTop 5
-int styleable MogoSkinCompatTextHelper_android_textAppearance 6
-int[] styleable MogoSkinTextAppearance { 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x1010095, 0x1010097, 0x1010096, 0x7f040184 }
-int styleable MogoSkinTextAppearance_android_shadowColor 0
-int styleable MogoSkinTextAppearance_android_shadowDx 1
-int styleable MogoSkinTextAppearance_android_shadowDy 2
-int styleable MogoSkinTextAppearance_android_shadowRadius 3
-int styleable MogoSkinTextAppearance_android_textColor 4
-int styleable MogoSkinTextAppearance_android_textColorHint 5
-int styleable MogoSkinTextAppearance_android_textSize 6
-int styleable MogoSkinTextAppearance_android_textStyle 7
-int styleable MogoSkinTextAppearance_android_typeface 8
-int styleable MogoSkinTextAppearance_textAllCaps 9
-int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x7f040137 }
-int styleable PopupWindow_android_popupAnimationStyle 0
-int styleable PopupWindow_android_popupBackground 1
-int styleable PopupWindow_overlapAnchor 2
-int[] styleable PopupWindowBackgroundState { 0x7f040176 }
-int styleable PopupWindowBackgroundState_state_above_anchor 0
-int[] styleable RealtimeBlurView { 0x7f040153, 0x7f040154, 0x7f040155, 0x7f0401ba, 0x7f0401bb }
-int styleable RealtimeBlurView_realtimeBlurRadius 0
-int styleable RealtimeBlurView_realtimeDownsampleFactor 1
-int styleable RealtimeBlurView_realtimeOverlayColor 2
-int styleable RealtimeBlurView_xRadius 3
-int styleable RealtimeBlurView_yRadius 4
-int[] styleable RecycleListView { 0x7f040139, 0x7f04013c }
-int styleable RecycleListView_paddingBottomNoButtons 0
-int styleable RecycleListView_paddingTopNoTitle 1
-int[] styleable RecyclerView { 0x10100eb, 0x10100f1, 0x10100c4, 0x7f0400b4, 0x7f0400b5, 0x7f0400b6, 0x7f0400b7, 0x7f0400b8, 0x7f0400d7, 0x7f040159, 0x7f04016f, 0x7f040175 }
-int styleable RecyclerView_android_clipToPadding 0
-int styleable RecyclerView_android_descendantFocusability 1
-int styleable RecyclerView_android_orientation 2
-int styleable RecyclerView_fastScrollEnabled 3
-int styleable RecyclerView_fastScrollHorizontalThumbDrawable 4
-int styleable RecyclerView_fastScrollHorizontalTrackDrawable 5
-int styleable RecyclerView_fastScrollVerticalThumbDrawable 6
-int styleable RecyclerView_fastScrollVerticalTrackDrawable 7
-int styleable RecyclerView_layoutManager 8
-int styleable RecyclerView_reverseLayout 9
-int styleable RecyclerView_spanCount 10
-int styleable RecyclerView_stackFromEnd 11
-int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x7f04005a, 0x7f040069, 0x7f04008d, 0x7f0400c6, 0x7f0400ce, 0x7f0400d6, 0x7f04014d, 0x7f04014e, 0x7f040164, 0x7f040165, 0x7f04017a, 0x7f04017f, 0x7f0401af }
-int styleable SearchView_android_focusable 0
-int styleable SearchView_android_imeOptions 1
-int styleable SearchView_android_inputType 2
-int styleable SearchView_android_maxWidth 3
-int styleable SearchView_closeIcon 4
-int styleable SearchView_commitIcon 5
-int styleable SearchView_defaultQueryHint 6
-int styleable SearchView_goIcon 7
-int styleable SearchView_iconifiedByDefault 8
-int styleable SearchView_layout 9
-int styleable SearchView_queryBackground 10
-int styleable SearchView_queryHint 11
-int styleable SearchView_searchHintIcon 12
-int styleable SearchView_searchIcon 13
-int styleable SearchView_submitBackground 14
-int styleable SearchView_suggestionRowLayout 15
-int styleable SearchView_voiceIcon 16
-int[] styleable SimpleDraweeView { 0x7f040024 }
-int styleable SimpleDraweeView_actualImageUri 0
-int[] styleable SkinCompatProgressBar { 0x101013b, 0x101013c }
-int styleable SkinCompatProgressBar_android_indeterminateDrawable 0
-int styleable SkinCompatProgressBar_android_progressDrawable 1
-int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x7f040143 }
-int styleable Spinner_android_dropDownWidth 0
-int styleable Spinner_android_entries 1
-int styleable Spinner_android_popupBackground 2
-int styleable Spinner_android_prompt 3
-int styleable Spinner_popupTheme 4
-int[] styleable StateListDrawable { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 }
-int styleable StateListDrawable_android_constantSize 0
-int styleable StateListDrawable_android_dither 1
-int styleable StateListDrawable_android_enterFadeDuration 2
-int styleable StateListDrawable_android_exitFadeDuration 3
-int styleable StateListDrawable_android_variablePadding 4
-int styleable StateListDrawable_android_visible 5
-int[] styleable StateListDrawableItem { 0x1010199 }
-int styleable StateListDrawableItem_android_drawable 0
-int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x7f04016c, 0x7f040173, 0x7f040180, 0x7f040181, 0x7f040183, 0x7f040192, 0x7f040193, 0x7f040194, 0x7f0401a9, 0x7f0401aa, 0x7f0401ab }
-int styleable SwitchCompat_android_textOff 0
-int styleable SwitchCompat_android_textOn 1
-int styleable SwitchCompat_android_thumb 2
-int styleable SwitchCompat_showText 3
-int styleable SwitchCompat_splitTrack 4
-int styleable SwitchCompat_switchMinWidth 5
-int styleable SwitchCompat_switchPadding 6
-int styleable SwitchCompat_switchTextAppearance 7
-int styleable SwitchCompat_thumbTextPadding 8
-int styleable SwitchCompat_thumbTint 9
-int styleable SwitchCompat_thumbTintMode 10
-int styleable SwitchCompat_track 11
-int styleable SwitchCompat_trackTint 12
-int styleable SwitchCompat_trackTintMode 13
-int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010585, 0x1010095, 0x1010097, 0x1010096, 0x7f0400bb, 0x7f0400c3, 0x7f040184, 0x7f04018f }
-int styleable TextAppearance_android_fontFamily 0
-int styleable TextAppearance_android_shadowColor 1
-int styleable TextAppearance_android_shadowDx 2
-int styleable TextAppearance_android_shadowDy 3
-int styleable TextAppearance_android_shadowRadius 4
-int styleable TextAppearance_android_textColor 5
-int styleable TextAppearance_android_textColorHint 6
-int styleable TextAppearance_android_textColorLink 7
-int styleable TextAppearance_android_textFontWeight 8
-int styleable TextAppearance_android_textSize 9
-int styleable TextAppearance_android_textStyle 10
-int styleable TextAppearance_android_typeface 11
-int styleable TextAppearance_fontFamily 12
-int styleable TextAppearance_fontVariationSettings 13
-int styleable TextAppearance_textAllCaps 14
-int styleable TextAppearance_textLocale 15
-int[] styleable Toolbar { 0x10100af, 0x1010140, 0x7f040044, 0x7f04005c, 0x7f04005d, 0x7f04006e, 0x7f04006f, 0x7f040070, 0x7f040071, 0x7f040072, 0x7f040073, 0x7f040120, 0x7f040121, 0x7f040122, 0x7f040124, 0x7f040133, 0x7f040134, 0x7f040143, 0x7f04017b, 0x7f04017c, 0x7f04017d, 0x7f04019a, 0x7f04019b, 0x7f04019c, 0x7f04019d, 0x7f04019e, 0x7f04019f, 0x7f0401a0, 0x7f0401a1, 0x7f0401a2 }
-int styleable Toolbar_android_gravity 0
-int styleable Toolbar_android_minHeight 1
-int styleable Toolbar_buttonGravity 2
-int styleable Toolbar_collapseContentDescription 3
-int styleable Toolbar_collapseIcon 4
-int styleable Toolbar_contentInsetEnd 5
-int styleable Toolbar_contentInsetEndWithActions 6
-int styleable Toolbar_contentInsetLeft 7
-int styleable Toolbar_contentInsetRight 8
-int styleable Toolbar_contentInsetStart 9
-int styleable Toolbar_contentInsetStartWithNavigation 10
-int styleable Toolbar_logo 11
-int styleable Toolbar_logoDescription 12
-int styleable Toolbar_maxButtonHeight 13
-int styleable Toolbar_menu 14
-int styleable Toolbar_navigationContentDescription 15
-int styleable Toolbar_navigationIcon 16
-int styleable Toolbar_popupTheme 17
-int styleable Toolbar_subtitle 18
-int styleable Toolbar_subtitleTextAppearance 19
-int styleable Toolbar_subtitleTextColor 20
-int styleable Toolbar_title 21
-int styleable Toolbar_titleMargin 22
-int styleable Toolbar_titleMarginBottom 23
-int styleable Toolbar_titleMarginEnd 24
-int styleable Toolbar_titleMarginStart 25
-int styleable Toolbar_titleMarginTop 26
-int styleable Toolbar_titleMargins 27
-int styleable Toolbar_titleTextAppearance 28
-int styleable Toolbar_titleTextColor 29
-int[] styleable View { 0x10100da, 0x1010000, 0x7f04013a, 0x7f04013b, 0x7f040190 }
-int styleable View_android_focusable 0
-int styleable View_android_theme 1
-int styleable View_paddingEnd 2
-int styleable View_paddingStart 3
-int styleable View_theme 4
-int[] styleable ViewBackgroundHelper { 0x10100d4, 0x7f040038, 0x7f040039 }
-int styleable ViewBackgroundHelper_android_background 0
-int styleable ViewBackgroundHelper_backgroundTint 1
-int styleable ViewBackgroundHelper_backgroundTintMode 2
-int[] styleable ViewStubCompat { 0x10100d0, 0x10100f3, 0x10100f2 }
-int styleable ViewStubCompat_android_id 0
-int styleable ViewStubCompat_android_inflatedId 1
-int styleable ViewStubCompat_android_layout 2
diff --git a/modules/mogo-modules-mvision/build/outputs/logs/manifest-merger-debug-report.txt b/modules/mogo-modules-mvision/build/outputs/logs/manifest-merger-debug-report.txt
deleted file mode 100644
index d77ce408b9..0000000000
--- a/modules/mogo-modules-mvision/build/outputs/logs/manifest-merger-debug-report.txt
+++ /dev/null
@@ -1,47 +0,0 @@
--- Merging decision tree log ---
-manifest
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
- package
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:2:5-45
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- android:versionName
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- android:versionCode
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:1-10:12
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- xmlns:android
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:1:11-69
-application
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:4:5-9:19
-service#com.mogo.module.machine.vision.MachineVisionMapService
-ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:5:9-8:48
- android:process
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:8:13-45
- android:exported
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:7:13-37
- android:name
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml:6:13-52
-uses-sdk
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml reason: use-sdk injection requested
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
-INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- android:targetSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- android:minSdkVersion
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- ADDED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
- INJECTED from /Users/congtaowang/Public/AndroidStudioProjects/zhidao/yycp/MogoLauncher/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
diff --git a/modules/mogo-modules-mvision/consumer-rules.pro b/modules/mogo-modules-mvision/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/modules/mogo-modules-mvision/gradle.properties b/modules/mogo-modules-mvision/gradle.properties
new file mode 100644
index 0000000000..d905dbfdd1
--- /dev/null
+++ b/modules/mogo-modules-mvision/gradle.properties
@@ -0,0 +1,3 @@
+GROUP=com.mogo.module
+POM_ARTIFACT_ID=module-machine-vision
+VERSION_CODE=1
diff --git a/modules/mogo-modules-mvision/proguard-rules.pro b/modules/mogo-modules-mvision/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/modules/mogo-modules-mvision/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/modules/mogo-modules-mvision/src/androidTest/java/com/mogo/module/machine/vision/ExampleInstrumentedTest.java b/modules/mogo-modules-mvision/src/androidTest/java/com/mogo/module/machine/vision/ExampleInstrumentedTest.java
new file mode 100644
index 0000000000..3b66fb5c01
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/androidTest/java/com/mogo/module/machine/vision/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.mogo.module.machine.vision;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith( AndroidJUnit4.class )
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals( "com.mogo.module.machine.vision.test", appContext.getPackageName() );
+ }
+}
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/main/AndroidManifest.xml b/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..4188fe3b46
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/AndroidManifest.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/IMogoMachineVisionProvider.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/IMogoMachineVisionProvider.java
new file mode 100644
index 0000000000..f87f55e13a
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/IMogoMachineVisionProvider.java
@@ -0,0 +1,15 @@
+package com.mogo.module.machine.vision;
+
+import com.mogo.service.module.IMogoModuleProvider;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+interface IMogoMachineVisionProvider extends IMogoModuleProvider {
+
+ String path = "/machinevision/api";
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapService.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapService.java
new file mode 100644
index 0000000000..7bb820473b
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapService.java
@@ -0,0 +1,182 @@
+package com.mogo.module.machine.vision;
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.view.Gravity;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+import com.mogo.module.common.machinevision.IMachineVisionInterface;
+import com.mogo.module.common.wm.WindowManagerView;
+import com.mogo.utils.UiThreadHandler;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/26
+ *
+ * 描述
+ */
+class MachineVisionMapService extends Service {
+
+ private static final String TAG = "MachineVisionMapService";
+
+ private IBinder mBinder;
+
+ private WindowManagerView mMachineVisionMapViewManager;
+ private View mRootView;
+ private View mClickView;
+ private MachineVisionMapView mMapView;
+
+ @Nullable
+ @Override
+ public IBinder onBind( Intent intent ) {
+ mBinder = new MachineVisionMapServiceBinder();
+ addMachineVisionMapView();
+ Logger.d( TAG, "onBind" );
+ return mBinder;
+ }
+
+ @Override
+ public boolean onUnbind( Intent intent ) {
+ if ( mMachineVisionMapViewManager != null && mMachineVisionMapViewManager.isShowing() ) {
+ mMachineVisionMapViewManager.dismiss();
+ }
+ MachineVisionMapViewHandler.getInstance().destroyMapView();
+ mMachineVisionMapViewManager = null;
+ Logger.d( TAG, "onUnbind" );
+ return true;
+ }
+
+ @Override
+ public void onRebind( Intent intent ) {
+ super.onRebind( intent );
+ addMachineVisionMapView();
+ Logger.d( TAG, "onRebind" );
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ }
+
+ public class MachineVisionMapServiceBinder extends IMachineVisionInterface.Stub {
+
+ private static final String TAG = "MachineVisionMapServiceBinder";
+
+ @Override
+ public void postData( MogoSnapshotSetData data ) throws RemoteException {
+ Logger.d( TAG, "current Thread:%s", Thread.currentThread().getName() );
+ MachineVisionMapViewHandler.getInstance().renderSnapshotSetData( data );
+ }
+
+ @Override
+ public void linkToDeath( @NonNull DeathRecipient recipient, int flags ) {
+ super.linkToDeath( recipient, flags );
+ }
+
+ @Override
+ public boolean unlinkToDeath( @NonNull DeathRecipient recipient, int flags ) {
+ return super.unlinkToDeath( recipient, flags );
+ }
+
+ @Override
+ public void hideViewIfExist() throws RemoteException {
+ if ( mRootView != null ) {
+ Logger.d( TAG, "hideViewIfExist" );
+ UiThreadHandler.post( () -> {
+ if ( mRootView != null ) {
+ mRootView.setVisibility( View.GONE );
+ }
+ } );
+ }
+ }
+
+ @Override
+ public void showViewIfExist() throws RemoteException {
+ if ( mRootView != null ) {
+ Logger.d( TAG, "showViewIfExist" );
+ UiThreadHandler.post( () -> {
+ if ( mRootView != null ) {
+ mRootView.setVisibility( View.VISIBLE );
+ }
+ } );
+ }
+ }
+ }
+
+ private boolean isSmall = true;
+
+ private void addMachineVisionMapView() {
+ mMachineVisionMapViewManager = new WindowManagerView.Builder( getApplicationContext() )
+ .contentView( R.layout.module_mvision_layout_view )
+ .size(
+ WindowManager.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.WRAP_CONTENT
+ )
+ .position(
+ getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_x ),
+ getResources().getDimensionPixelOffset( R.dimen.module_mvision_view_y )
+ )
+ .gravity( Gravity.TOP | Gravity.LEFT )
+ .showInWindowManager();
+ mRootView = mMachineVisionMapViewManager.findViewById( R.id.module_mvision_map_root );
+ mClickView = mMachineVisionMapViewManager.findViewById(R.id.module_mvision_map_click);
+ mMapView = mMachineVisionMapViewManager.findViewById(R.id.module_mvision_map_view);
+ MachineVisionMapViewHandler.getInstance().setMachineVisionMapView( mMapView );
+ mMachineVisionMapViewManager.show();
+
+ mClickView.setOnClickListener(v -> {
+ int width, height, x, y;
+ if (isSmall) {
+ // 变大
+ isSmall = false;
+ width = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_width);
+ height = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_height);
+ x = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_x);
+ y = getResources().getDimensionPixelSize(R.dimen.module_mvision_big_view_y);
+ }else{
+ // 变小
+ isSmall = true;
+ width = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_width);
+ height = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_height);
+ x = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_x);
+ y = getResources().getDimensionPixelSize(R.dimen.module_mvision_view_y);
+ }
+ mRootView.getLayoutParams().width = width;
+ mRootView.getLayoutParams().height = height;
+ mRootView.setLayoutParams(mRootView.getLayoutParams());
+
+ mClickView.getLayoutParams().width = width;
+ mClickView.getLayoutParams().height = height;
+ mClickView.setLayoutParams(mClickView.getLayoutParams());
+
+ mMapView.getLayoutParams().width = width;
+ mMapView.getLayoutParams().height = height;
+ mMapView.setLayoutParams(mMapView.getLayoutParams());
+
+ mMachineVisionMapViewManager.exchangeSizeAndPosition(width, height, x, y);
+ Logger.d(TAG, "zoom out map view");
+ });
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ MachineVisionMapViewHandler.getInstance().release();
+ if ( mMachineVisionMapViewManager != null ) {
+ mMachineVisionMapViewManager.dismiss();
+ mRootView = null;
+ mClickView = null;
+ mMapView = null;
+ }
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapView.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapView.java
new file mode 100644
index 0000000000..2410e87788
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapView.java
@@ -0,0 +1,71 @@
+package com.mogo.module.machine.vision;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import androidx.annotation.Nullable;
+
+import com.mogo.map.IMogoMapView;
+import com.mogo.map.MogoBaseMapView;
+import com.mogo.map.MogoMap;
+import com.mogo.map.impl.custom.CustomMapView;
+import com.mogo.utils.logger.Logger;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/26
+ *
+ * 描述
+ */
+class MachineVisionMapView extends MogoBaseMapView {
+
+ private static final String TAG = "MachineVisionMapView";
+
+ public MachineVisionMapView( Context context ) {
+ this( context, null );
+ }
+
+ public MachineVisionMapView( Context context, @Nullable AttributeSet attrs ) {
+ this( context, attrs, 0 );
+ }
+
+ public MachineVisionMapView( Context context, @Nullable AttributeSet attrs, int defStyleAttr ) {
+ super( context, attrs, defStyleAttr );
+ }
+
+ @Override
+ protected void addDleMaps() {
+ IMogoMapView machineMapView = new CustomMapView().create( getContext() );
+ if ( machineMapView != null ) {
+ final View mapView = machineMapView.getMapView();
+ if ( mapView != null ) {
+ addView( mapView, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) );
+ } else {
+ Logger.e( TAG, "create MapView instance failed." );
+ }
+ } else {
+ Logger.e( TAG, "create IMogoMapView instance failed." );
+ }
+ mMapView = machineMapView;
+ MogoMap.getInstance().init( getContext(), mMapView.getMap() );
+ onCreate( null );
+ postDelayed( ()->{
+ getMap().getUIController().showMyLocation( true );
+ }, 1000 );
+ }
+
+ @Override
+ public void display2DMap( boolean invokeCreateAuto, boolean invokeResumeAuto ) {
+
+ }
+
+ @Override
+ public void displayVRMap( boolean invokeCreateAuto, boolean invokeResumeAuto ) {
+
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapViewHandler.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapViewHandler.java
new file mode 100644
index 0000000000..b918a60d6b
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MachineVisionMapViewHandler.java
@@ -0,0 +1,62 @@
+package com.mogo.module.machine.vision;
+
+import com.mogo.module.common.drawer.SnapshotSetDataDrawer;
+import com.mogo.module.common.entity.MogoSnapshotSetData;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+class MachineVisionMapViewHandler {
+
+ private static volatile MachineVisionMapViewHandler sInstance;
+
+ private MachineVisionMapViewHandler() {
+ }
+
+ public static MachineVisionMapViewHandler getInstance() {
+ if ( sInstance == null ) {
+ synchronized ( MachineVisionMapViewHandler.class ) {
+ if ( sInstance == null ) {
+ sInstance = new MachineVisionMapViewHandler();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ mMachineVisionMapView = null;
+ }
+
+ private Object readResolve() {
+ // 阻止反序列化,必须实现 Serializable 接口
+ return sInstance;
+ }
+
+ private MachineVisionMapView mMachineVisionMapView;
+
+ public void setMachineVisionMapView( MachineVisionMapView mMachineVisionMapView ) {
+ this.mMachineVisionMapView = mMachineVisionMapView;
+ }
+
+ public void destroyMapView(){
+ if ( mMachineVisionMapView != null ) {
+ mMachineVisionMapView.onDestroy();
+ }
+ }
+
+ public void renderSnapshotSetData( MogoSnapshotSetData data ) {
+ if ( data == null ) {
+ return;
+ }
+ if ( mMachineVisionMapView == null ) {
+ return;
+ }
+ SnapshotSetDataDrawer.getInstance().renderSnapshotData( data, true );
+ }
+}
diff --git a/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MogoMachineVisionProvider.java b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MogoMachineVisionProvider.java
new file mode 100644
index 0000000000..a33c945ccc
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/main/java/com/mogo/module/machine/vision/MogoMachineVisionProvider.java
@@ -0,0 +1,61 @@
+package com.mogo.module.machine.vision;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.commons.AbsMogoApplication;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/27
+ *
+ * 描述
+ */
+@Route( path = IMogoMachineVisionProvider.path)
+class MogoMachineVisionProvider implements IMogoMachineVisionProvider {
+
+ private static final String TAG = "MogoMachineVisionProvider";
+
+ private Intent mMachineVisionServiceIntent;
+
+ @Override
+ public Fragment createFragment( Context context, Bundle data ) {
+ return null;
+ }
+
+ @Override
+ public View createView( Context context ) {
+ return null;
+ }
+
+ @NonNull
+ @Override
+ public String getModuleName() {
+ return null;
+ }
+
+ @Override
+ public int getType() {
+ return 0;
+ }
+
+ @Override
+ public void init( Context context ) {
+ mMachineVisionServiceIntent = new Intent( context, MachineVisionMapService.class );
+ context.startService( mMachineVisionServiceIntent );
+ }
+
+ @Override
+ public void onDestroy() {
+ if ( mMachineVisionServiceIntent != null ) {
+ AbsMogoApplication.getApp().stopService( mMachineVisionServiceIntent );
+ }
+ }
+}
diff --git a/modules/mogo-modules-mvision/build/intermediates/packaged_res/debug/layout/module_mvision_layout_view.xml b/modules/mogo-modules-mvision/src/main/res/layout/module_mvision_layout_view.xml
similarity index 100%
rename from modules/mogo-modules-mvision/build/intermediates/packaged_res/debug/layout/module_mvision_layout_view.xml
rename to modules/mogo-modules-mvision/src/main/res/layout/module_mvision_layout_view.xml
diff --git a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/merged.dir/values-xhdpi-v4/values-xhdpi-v4.xml b/modules/mogo-modules-mvision/src/main/res/values-xhdpi/dimens.xml
similarity index 99%
rename from modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/merged.dir/values-xhdpi-v4/values-xhdpi-v4.xml
rename to modules/mogo-modules-mvision/src/main/res/values-xhdpi/dimens.xml
index 5f5b6ae47d..d7917ae5cf 100644
--- a/modules/mogo-modules-mvision/build/intermediates/incremental/packageDebugResources/merged.dir/values-xhdpi-v4/values-xhdpi-v4.xml
+++ b/modules/mogo-modules-mvision/src/main/res/values-xhdpi/dimens.xml
@@ -1,11 +1,12 @@
- 1080px
- 1920px
- 0px
- 0px
- 460px
460px
+ 460px
204px
368px
+
+ 0px
+ 0px
+ 1920px
+ 1080px
\ No newline at end of file
diff --git a/modules/mogo-modules-mvision/src/test/java/com/mogo/module/machine/vision/ExampleUnitTest.java b/modules/mogo-modules-mvision/src/test/java/com/mogo/module/machine/vision/ExampleUnitTest.java
new file mode 100644
index 0000000000..fefd93d5cd
--- /dev/null
+++ b/modules/mogo-modules-mvision/src/test/java/com/mogo/module/machine/vision/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.mogo.module.machine.vision;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals( 4, 2 + 2 );
+ }
+}
\ No newline at end of file
diff --git a/services/mogo-service-api/build.gradle b/services/mogo-service-api/build.gradle
index 321acd18a9..5b85a74290 100644
--- a/services/mogo-service-api/build.gradle
+++ b/services/mogo-service-api/build.gradle
@@ -41,7 +41,7 @@ dependencies {
implementation rootProject.ext.dependencies.arouter
annotationProcessor rootProject.ext.dependencies.aroutercompiler
api rootProject.ext.dependencies.fresco
- api rootProject.ext.dependencies.obusdk
+ api 'com.mogo.module:module-crash-warning:1.1.0'
if (Boolean.valueOf(RELEASE)) {
api rootProject.ext.dependencies.mogomapapi
api rootProject.ext.dependencies.skinsupport
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
index 62dfb38cd7..5286baa279 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/IMogoServiceApis.java
@@ -8,6 +8,7 @@ import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.auth.IMogoAuthManager;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
+import com.mogo.service.connection.IMogoWebSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.entrance.IMogoEntranceButtonController;
import com.mogo.service.eventpanel.IEventPanelProvider;
@@ -16,6 +17,7 @@ import com.mogo.service.imageloader.IMogoImageloader;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.launcher.IMogoLauncher;
import com.mogo.service.locationinfo.IMogoLocationInfoService;
+import com.mogo.service.map.IMogoMapFrameController;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoActionManager;
import com.mogo.service.module.IMogoAddressManager;
@@ -25,7 +27,7 @@ import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.service.network.IMogoNetwork;
-import com.mogo.service.obu.IMogoObuManager;
+import com.mogo.service.obu.IMogoCrashWarnProvider;
import com.mogo.service.passport.IMogoPassportManager;
import com.mogo.service.share.IMogoShareManager;
import com.mogo.service.share.IMogoTrafficUploadProvider;
@@ -70,6 +72,11 @@ public interface IMogoServiceApis extends IProvider {
*/
IMogoSocketManager getSocketManagerApi( Context context );
+ /**
+ * 获取WebSocket操作api
+ */
+ IMogoWebSocketManager getWebSocketManagerApi( Context context );
+
/**
* 大而全的数据管理接口
*
@@ -217,13 +224,6 @@ public interface IMogoServiceApis extends IProvider {
*/
IMogoShareManager getShareManager();
- /**
- * 获取obuManager
- *
- * @return obuManager
- */
- IMogoObuManager getObuManager();
-
/**
* 获取事件面板manager
*
@@ -247,35 +247,49 @@ public interface IMogoServiceApis extends IProvider {
/**
* 获取授权服务
+ *
* @return
*/
IMogoAuthManager getAuthManagerApi();
/**
* 获取探路服务
+ *
* @return
*/
IMogoTanluProvider getTanluApi();
/**
* 获取Monitor相关api
+ *
* @return
*/
IMogoMonitorProvider getMogoMonitorApi();
+
/**
* 获取探路ui服务
+ *
* @return
*/
IMogoTanluUiProvider getTanluUiApi();
/**
* 皮肤管理接口
+ *
* @return
*/
IMogoSkinSupportInstaller getSkinSupportInstallerApi();
+ /**
+ * 获取crashWarnProvider
+ *
+ * @return
+ */
+ IMogoCrashWarnProvider getCrashWarnProvider();
+
/**
* 在线车辆面板
+ *
* @return
*/
IMogoOnlineCarListPanelProvider getOnlineCarPanelApi();
@@ -285,4 +299,11 @@ public interface IMogoServiceApis extends IProvider {
* @return
*/
IMogoTrafficUploadProvider getTrafficUploadApi();
+
+ /**
+ * 地图图层控制接口
+ *
+ * @return
+ */
+ IMogoMapFrameController getMapFrameControllerApi();
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
index 8d5f687c8e..5d4a2e12b1 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/MogoServicePaths.java
@@ -51,6 +51,12 @@ public class MogoServicePaths {
@Deprecated
public static final String PATH_SOCKET_MANAGER = "/socket/manager";
+ /**
+ * WebSocket 长链
+ */
+ @Deprecated
+ public static final String PATH_WEB_SOCKET_MANAGER = "/websocket/manager";
+
/**
* 状态管理接口
*/
@@ -155,8 +161,6 @@ public class MogoServicePaths {
@Deprecated
public static final String PATH_REFRESH_STRATEGY_API = "/refreshstrategy/api";
-
-
/**
* 刷新策略控制
*/
@@ -227,7 +231,7 @@ public class MogoServicePaths {
* 授权服务
*/
@Deprecated
- public static final String PATH_AGREEMENT = "/agreement/showFragment";
+ public static final String PATH_AGREEMENT = "/agreement/showFragment";
/**
* 日志上传
@@ -265,6 +269,12 @@ public class MogoServicePaths {
@Deprecated
public static final String PATH_TANLU_UI_API = "/tanlu/ui";
+ /**
+ * 碰撞报警模块
+ */
+ @Deprecated
+ public static final String PATH_CRASH_WARNING = "/crash/warning";
+
/**
* 悬浮小控件
*/
@@ -284,4 +294,9 @@ public class MogoServicePaths {
* 返回悬浮按钮
*/
public static final String PATH_BACK = "/back2launcher/ui";
+
+ /**
+ * 自研地图和高德地图切换
+ */
+ public static final String PATH_MAP_FRAME_CONTROLLER = "/mapframe/controller";
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
index 363a23a088..4d4bfc61dd 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoADASController.java
@@ -2,6 +2,9 @@ package com.mogo.service.adas;
import com.alibaba.android.arouter.facade.template.IProvider;
import com.mogo.map.uicontroller.EnumMapUI;
+import com.mogo.service.adas.entity.ADASRecognizedResult;
+
+import java.util.List;
/**
* @author congtaowang
@@ -72,19 +75,57 @@ public interface IMogoADASController extends IProvider {
/**
* 给adas传递数据
*
- * @param json
+ * @param result
*/
- void notifyAdas( String json );
+ void aiCloudToAdasData( RemoteControlAutoPilotParameters result );
+
/**
* 添加adas数据回调接口
+ *
* @param callback 回调接口
*/
- void addAdasDataCallback(IMogoAdasDataCallback callback);
+ void addAdasDataCallback( IMogoAdasDataCallback callback );
/**
* 移除adas数据回调接口
+ *
* @param callback 待移除的callback
*/
- void removeAdasDataCallback(IMogoAdasDataCallback callback);
+ void removeAdasDataCallback( IMogoAdasDataCallback callback );
+
+ /**
+ * 添加adas报警数据回调接口
+ *
+ * @param callback 回调接口
+ */
+ void addAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback );
+
+ /**
+ * 移除adas报警数据回调接口
+ *
+ * @param callback 待移除的callback
+ */
+ void removeAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback );
+
+ /**
+ * 获取 adas 识别列表
+ *
+ * @return
+ */
+ List< ADASRecognizedResult > getLastADASRecognizedResult();
+
+ /**
+ * 添加adas识别物体回调
+ *
+ * @param callback
+ */
+ void addAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback );
+
+ /**
+ * 移除adas识别物体回调
+ *
+ * @param callback
+ */
+ void removeAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback );
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasRecognizedDataCallback.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasRecognizedDataCallback.java
new file mode 100644
index 0000000000..301b94d0fc
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasRecognizedDataCallback.java
@@ -0,0 +1,20 @@
+package com.mogo.service.adas;
+
+import com.mogo.service.adas.entity.ADASRecognizedListResult;
+import com.mogo.service.adas.entity.ADASRecognizedResult;
+
+import java.util.List;
+
+/**
+ * adas 物体识别数据回调接口
+ *
+ * @author tongchenfei
+ */
+public interface IMogoAdasRecognizedDataCallback {
+ /**
+ * adas 数据回调
+ *
+ * @param resultList 具体识别的物体数据
+ */
+ void onAdasDataCallback( List< ADASRecognizedListResult > resultList );
+}
\ No newline at end of file
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasWarnMessageCallback.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasWarnMessageCallback.java
new file mode 100644
index 0000000000..2106b7ab11
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/IMogoAdasWarnMessageCallback.java
@@ -0,0 +1,16 @@
+package com.mogo.service.adas;
+
+import com.mogo.service.adas.entity.ADASWarnMessage;
+
+/**
+ * adas 数据回调接口
+ *
+ * @author tongchenfei
+ */
+public interface IMogoAdasWarnMessageCallback {
+ /**
+ * adas 数据回调
+ * @param msg 具体数据
+ */
+ void onReceiveData( ADASWarnMessage msg );
+}
\ No newline at end of file
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/MogoADASWarnType.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/MogoADASWarnType.java
new file mode 100644
index 0000000000..a75bad61da
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/MogoADASWarnType.java
@@ -0,0 +1,64 @@
+package com.mogo.service.adas;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * 描述
+ */
+interface MogoADASWarnType {
+
+ /**
+ * 行人报警
+ */
+ int ADAS_WARNING_PERSON = 16;
+ /**
+ * 前车起步
+ */
+ int ADAS_WARNING_FRONT_CAR_GO = 17;
+ /**
+ * ldw 类型 左侧车道线
+ */
+ int ADAS_WARNING_SENCE_LANE_LEFT_LOST = 18;
+ /**
+ * 右侧车道线
+ */
+ int ADAS_WARNING_SENCE_LANE_RIGHT_LOST = 19;
+ /**
+ * fcw 类型
+ */
+ int ADAS_WARNING_FRONT_CAR = 20;
+ /**
+ * 摩托车碰撞
+ */
+ int ADAS_WARNING_MOTORCYCLE = 23;
+ /**
+ * 急刹车
+ */
+ int ADAS_WARNING_QUICK_BRAKE = 30;
+ /**
+ * 禁止掉头
+ */
+ int ADAS_WARNING_NOT_U_TURN = 40;
+ /**
+ * 禁止左转
+ */
+ int ADAS_WARNING_NOT_LEFT_TURN = 41;
+ /**
+ * 禁止右转
+ */
+ int ADAS_WARNING_NOT_RIGHT_TURN = 42;
+ /**
+ * 禁止鸣喇叭
+ */
+ int ADAS_WARNING_NOT_VOICE = 43;
+ /**
+ * 禁止通行
+ */
+ int ADAS_WARNING_DO_NOT_ENTER = 44;
+ /**
+ * 限速
+ */
+ int ADAS_WARNING_LIMIT_SPEED = 45;
+}
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotParameters.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/RemoteControlAutoPilotParameters.java
similarity index 83%
rename from modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotParameters.java
rename to services/mogo-service-api/src/main/java/com/mogo/service/adas/RemoteControlAutoPilotParameters.java
index 9e40ca6454..9deb76e3f6 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/autopilot/AutoPilotParameters.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/RemoteControlAutoPilotParameters.java
@@ -1,4 +1,4 @@
-package com.mogo.module.service.autopilot;
+package com.mogo.service.adas;
import java.util.List;
@@ -9,7 +9,7 @@ public
*
* 自动驾驶参数
*/
-class AutoPilotParameters {
+class RemoteControlAutoPilotParameters {
public AutoPilotLonLat startLatLon;
public List< AutoPilotLonLat > wayLatLons;
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java
new file mode 100644
index 0000000000..7196126e4b
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedListResult.java
@@ -0,0 +1,56 @@
+package com.mogo.service.adas.entity;
+
+import java.util.List;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * adas 识别物体参数
+ */
+class ADASRecognizedListResult {
+
+ /**
+ * 识别物体类型
+ */
+ public int type;
+
+ /**
+ * 识别物体唯一标识
+ */
+ public String uuid;
+ /**
+ * 方向
+ */
+ public double heading;
+ /**
+ * 速度
+ */
+ public double speed;
+ /**
+ * x 轴距离
+ */
+ public double distanceX;
+
+ /**
+ * y 轴距离
+ */
+ public double distanceY;
+
+ /**
+ * 同一个uuid 1s内所对应的连续坐标
+ */
+ public List< LatLon > latLonList;
+
+ public static class LatLon {
+
+ public LatLon( double lat, double lon ) {
+ this.lat = lat;
+ this.lon = lon;
+ }
+
+ public double lat;
+ public double lon;
+ }
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedResult.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedResult.java
new file mode 100644
index 0000000000..774eff545a
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASRecognizedResult.java
@@ -0,0 +1,72 @@
+package com.mogo.service.adas.entity;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * adas 识别物体参数
+ */
+class ADASRecognizedResult {
+
+ /**
+ * 识别物体类型
+ */
+ public int type;
+
+ /**
+ * 识别物体唯一标识
+ */
+ public String uuid;
+
+ /**
+ * 红绿灯颜色
+ */
+ public String color;
+
+ /**
+ *
+ */
+ public String carId;
+
+ /**
+ * 识别物体的纬度
+ */
+ public double lat;
+
+ /**
+ * 识别物体的经度
+ */
+ public double lon;
+
+ /**
+ * 朝向
+ */
+ public double heading;
+
+ /**
+ * 系统时间
+ */
+ public long systemTime;
+
+ /**
+ * 定位卫星时间
+ */
+ public long satelliteTime;
+
+ /**
+ * 海拔
+ */
+ public double alt;
+
+ /**
+ * 速度
+ */
+ public double speed;
+
+ /**
+ * 莫顿码
+ */
+ public long mortonCode;
+
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASWarnMessage.java b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASWarnMessage.java
new file mode 100644
index 0000000000..4c24cb413c
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/adas/entity/ADASWarnMessage.java
@@ -0,0 +1,32 @@
+package com.mogo.service.adas.entity;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * 描述
+ */
+class ADASWarnMessage {
+
+ public String content;
+ public String level;
+
+ /**
+ * 警告消息类型
+ *
+ * {@link com.mogo.service.adas.MogoADASWarnType}
+ */
+ public int type;
+ public String value;
+
+ @Override
+ public String toString() {
+ return "ADASWarnMessage{" +
+ "content='" + content + '\'' +
+ ", level='" + level + '\'' +
+ ", type=" + type +
+ ", value='" + value + '\'' +
+ '}';
+ }
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoOnWebSocketMessageListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoOnWebSocketMessageListener.java
new file mode 100644
index 0000000000..ddddd14868
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoOnWebSocketMessageListener.java
@@ -0,0 +1,27 @@
+package com.mogo.service.connection;
+
+/**
+ * 消息回调
+ */
+public interface IMogoOnWebSocketMessageListener {
+
+ default WebSocketMsgType getDownLinkType() {
+ return null;
+ }
+
+ default WebSocketMsgType getUpLinkType() {
+ return null;
+ }
+
+ default Class target() {
+ return null;
+ }
+
+ default void onMsgReceived(T obj) {
+
+ }
+
+ default void onError(String errorMsg) {
+
+ }
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoWebSocketManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoWebSocketManager.java
new file mode 100644
index 0000000000..1409b2b2c3
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoWebSocketManager.java
@@ -0,0 +1,38 @@
+package com.mogo.service.connection;
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.facade.template.IProvider;
+
+public interface IMogoWebSocketManager extends IProvider {
+
+ /**
+ * 初始化,各模块不用关心
+ *
+ * @param context 上下文
+ * @param appId 一般为包名,不参与通道的建立,一般用于发消息
+ */
+ void init( Context context, String appId );
+
+ /**
+ * 注册消息监听
+ *
+ * @param listener 回调
+ */
+ void registerOnWebSocketMessageListener(IMogoOnWebSocketMessageListener listener );
+
+ /**
+ * 注销消息监听
+ *
+ */
+ void unregisterOnWebSocketMessageListener(IMogoOnWebSocketMessageListener listener );
+
+ /**
+ * 发送消息
+ *
+ * @param body 消息体
+ * @param listener 回执监听
+ */
+ void sendMsg( T body, IMogoOnWebSocketMessageListener listener );
+
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/WebSocketMsgType.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/WebSocketMsgType.java
new file mode 100644
index 0000000000..27635e97e7
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/WebSocketMsgType.java
@@ -0,0 +1,24 @@
+package com.mogo.service.connection;
+
+public enum WebSocketMsgType {
+
+ MSG_TYPE_UPLINK_CAR_DATA(0,"自车与ADAS数据"),
+ MSG_TYPE_DOWNLINK_CAR_DATA(1,"服务端下发车辆信息"),
+ MSG_TYPE_ACK(3, "ACK");
+
+ private int msgType;
+ private String msg;
+
+ WebSocketMsgType(int msgType, String msg) {
+ this.msgType = msgType;
+ this.msg = msg;
+ }
+
+ public int getMsgType() {
+ return msgType;
+ }
+
+ public void setMsgType(int msgType) {
+ this.msgType = msgType;
+ }
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java
index 637ea09cfb..bebd0cdd4d 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/entrance/IMogoEntranceButtonController.java
@@ -4,6 +4,7 @@ import android.view.View;
import android.widget.TextView;
import com.alibaba.android.arouter.facade.template.IProvider;
+import com.mogo.service.windowview.IMogoEntranceViewListener;
/**
* @author congtaowang
@@ -13,6 +14,54 @@ import com.alibaba.android.arouter.facade.template.IProvider;
*/
public interface IMogoEntranceButtonController extends IProvider {
+ /**
+ * 前车急刹
+ */
+ int NOTICE_TYPE_SUDDENLY_BREAK = 1001;
+ /**
+ * vip变灯通行
+ */
+ int NOTICE_TYPE_VIP = 1002;
+ /**
+ * 行人碰撞预警
+ */
+ int NOTICE_TYPE_PEOPLE_WARN = 1003;
+ /**
+ * 逆向超车
+ */
+ int NOTICE_TYPE_ILLEGAL_OVERTAKE = 1004;
+ /**
+ * 后方危险车辆提醒
+ */
+ int NOTICE_TYPE_DANGEROUS_CAR_WARN = 1005;
+ /**
+ * 特殊车辆快速通过
+ */
+ int NOTICE_TYPE_SPECIAL_CAR_WARN = 1006;
+ /**
+ * 自车求助
+ */
+ int NOTICE_TYPE_SEEK_HELP = 1007;
+ /**
+ * 交通事故识别
+ */
+ int NOTICE_TYPE_ACCIDENT_WARN = 1008;
+
+ /**
+ * 障碍物体绕行
+ */
+ int NOTICE_TYPE_OBSTACLE_WARN = 1009;
+
+ /**
+ * 障碍车辆绕行
+ */
+ int NOTICE_TYPE_OBSTACLE_CAR_WARN = 1010;
+
+ /**
+ * 拥堵路线推荐
+ */
+ int NOTICE_TYPE_CONGESTION_RECOMMENDED = 1011;
+
/**
* 获取入口按钮实例
*
@@ -53,4 +102,42 @@ public interface IMogoEntranceButtonController extends IProvider {
* @param view 待移除view
*/
void removeLeftFeatureView(View view);
+
+ /**
+ * 设置vr模式下,左下角提示view
+ * @param view 目前是adas提示和求助
+ */
+ void showLeftNoticeView(View view);
+
+ /**
+ * 隐藏vr模式下,左下角提示view,需要与{@link #showLeftNoticeView(View)}成对使用
+ * @param view 待隐藏view
+ */
+ void hideLeftNoticeView(View view);
+
+ /**
+ * 根据noticeType添加左侧提示
+ * @param noticeType {@link #NOTICE_TYPE_SUDDENLY_BREAK}...
+ * @param iconRes 本地 icon res
+ * @param content 提示内容
+ */
+ void showLeftNoticeByType(int noticeType, int iconRes, String content);
+
+ /**
+ * 移除noticeType,需要与{@link #showLeftNoticeByType(int, int, String)}成对使用
+ * @param noticeType {@link #NOTICE_TYPE_SUDDENLY_BREAK}...
+ */
+ void hideLeftNoticeByType(int noticeType);
+
+ /**
+ * 添加view状态回调监听
+ * @param listener 回调监听
+ */
+ void addEntranceViewListener(IMogoEntranceViewListener listener);
+
+ /**
+ * 移除view状态回调监听
+ * @param listener 回调监听
+ */
+ void removeEntranceViewListener(IMogoEntranceViewListener listener);
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java
new file mode 100644
index 0000000000..834c4802db
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/map/IMogoMapFrameController.java
@@ -0,0 +1,28 @@
+package com.mogo.service.map;
+
+import com.alibaba.android.arouter.facade.template.IProvider;
+import com.mogo.map.IDestroyable;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/23
+ *
+ * 地图图层切换:高德地图 <-> 自研地图,过渡期使用
+ */
+interface IMogoMapFrameController extends IProvider, IDestroyable {
+
+ void initDelegate( IMogoMapFrameController controller );
+
+ /**
+ * 切换到高德2D
+ */
+ void changeTo2dMode();
+
+ /**
+ * 切换到自研vr
+ */
+ void changeToVRMode();
+
+ boolean isVrMode();
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java
index 2f9700cdc5..ce78bdb253 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/module/IMogoRegisterCenter.java
@@ -8,7 +8,6 @@ import com.mogo.map.navi.IMogoAimlessModeListener;
import com.mogo.map.navi.IMogoCarLocationChangedListener;
import com.mogo.map.navi.IMogoNaviListener;
import com.mogo.service.adas.IMogoADASControlStatusChangedListener;
-import com.mogo.service.obu.IMogoObuDataChangedListener;
import java.util.Iterator;
@@ -138,19 +137,6 @@ public interface IMogoRegisterCenter extends IProvider {
*/
void unregisterCarLocationChangedListener( String tag, IMogoCarLocationChangedListener listener );
- /**
- * 注册obu数据变化监听
- * @param tag 模块tag,目前没有实际作用,只用于解注册时的tag选择
- * @param listener 回调监听
- */
- void registerObuDataListener(String tag, IMogoObuDataChangedListener listener);
-
- /**
- * 注销obu数据变化监听
- * @param tag 传入与注册时相同的tag
- */
- void unregisterObuDataListener(String tag);
-
/**
* adas 控制状态变更监听
* @param tag
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoCrashWarnProvider.java b/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoCrashWarnProvider.java
new file mode 100644
index 0000000000..b09de9723e
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoCrashWarnProvider.java
@@ -0,0 +1,22 @@
+package com.mogo.service.obu;
+
+import com.alibaba.android.arouter.facade.template.IProvider;
+import com.zhidao.manager.ts.TsThreshold;
+
+/**
+ * 碰撞报警相关接口
+ * @author tongchenfei
+ */
+public interface IMogoCrashWarnProvider extends IProvider {
+ /**
+ * 设置碰撞碰撞报警阈值
+ * @param threshold
+ */
+ void setCrashThreshold(TsThreshold threshold);
+
+ /**
+ * 获取当前碰撞报警阈值
+ * @return
+ */
+ TsThreshold getCurrentCrashThreshold();
+}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoObuDataChangedListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoObuDataChangedListener.java
deleted file mode 100644
index ff3ad42b57..0000000000
--- a/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoObuDataChangedListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.mogo.service.obu;
-
-import com.zhidao.smartv2x.model.obu.CarEventInfo;
-import com.zhidao.smartv2x.model.obu.CarLocationInfo;
-import com.zhidao.smartv2x.model.obu.TrafficLightInfo;
-
-/**
- * obu数据改变的回调
- *
- * @author tongchenfei
- */
-public interface IMogoObuDataChangedListener {
- /**
- * 车辆位置信息回调接口
- * @param info 位置信息
- */
- void showCarLocationInfo(CarLocationInfo info);
-
- /**
- * UDP 收发消息回调接口
- *
- * @param info 消息回调
- */
- void showOtherInfo(String info);
-
- /**
- * 交通信号灯信息回调接口
- *
- * @param info 信号灯信息
- */
- void showTrafficLightInfo(TrafficLightInfo info);
-
- /**
- * 场景触发事件信息回调接口
- *
- * @param info 场景触发事件信息
- */
- void showCarEventInfo(CarEventInfo info);
-}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoObuManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoObuManager.java
deleted file mode 100644
index 21c5fc6c01..0000000000
--- a/services/mogo-service-api/src/main/java/com/mogo/service/obu/IMogoObuManager.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.mogo.service.obu;
-
-import com.mogo.service.module.IMogoModuleProvider;
-import com.zhidao.smartv2x.listener.OnMessageReceiveListener;
-
-/**
- * obu事件管理器
- * @author tongchenfei
- */
-public interface IMogoObuManager extends IMogoModuleProvider, OnMessageReceiveListener{
- void registerObuDataChangedListener(IMogoObuDataChangedListener listener);
-}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java
index 77a7055d18..9a1c3b3737 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java
@@ -16,6 +16,12 @@ public interface IMogoStatusManager extends IProvider {
*/
boolean isTopViewShow();
+ /**
+ * 是否在vr模式
+ * @return true - 在vr模式 false - 不在vr模式
+ */
+ boolean isVrMode();
+
/**
* 小智语音 UI 是否在展示
*
@@ -123,6 +129,13 @@ public interface IMogoStatusManager extends IProvider {
*/
boolean isMainPageLaunched();
+ /**
+ * 设置vrMode状态
+ * @param tag 业务类型
+ * @param vrMode true - 在vr模式 false 不在vr模式
+ */
+ void setVrMode(String tag, boolean vrMode);
+
/**
* 媒体是否正在播放
* @return true - 正在播放 false - 没有播放
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java
index d33b78ea0c..21a937c226 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java
@@ -91,5 +91,9 @@ public enum StatusDescriptor {
/**
* 媒体播放状态
*/
- MEDIA_PLAYER_STATUS
+ MEDIA_PLAYER_STATUS,
+ /**
+ * 是否已经进入vr模式
+ */
+ VR_MODE
}
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java b/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java
index 719b12b8ea..01c793c34e 100644
--- a/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/strategy/IMogoRefreshStrategyController.java
@@ -21,4 +21,10 @@ public interface IMogoRefreshStrategyController extends IProvider {
* 清除所有数据
*/
void clearAllData();
+
+ /**
+ * 重新设置定位点上报时间间隔
+ * @param delay 新的时间间隔
+ */
+ void resetLocationUpDelay(long delay);
}
\ No newline at end of file
diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoEntranceViewListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoEntranceViewListener.java
new file mode 100644
index 0000000000..65ec76d6ad
--- /dev/null
+++ b/services/mogo-service-api/src/main/java/com/mogo/service/windowview/IMogoEntranceViewListener.java
@@ -0,0 +1,40 @@
+package com.mogo.service.windowview;
+
+import android.view.View;
+
+/**
+ * EntranceView状态监听
+ *
+ * @author tongchenfei
+ */
+public interface IMogoEntranceViewListener {
+ /**
+ * 新view展示
+ * 只针对左侧提示(LeftNotice)
+ * @param type 展示的类型
+ */
+ void onViewAdded(int type);
+
+ /**
+ * view移除
+ * 只针对左侧提示(LeftNotice)
+ * @param type 移除的type
+ */
+ void onViewRemoved(int type);
+
+ /**
+ * view添加动画开始之前
+ * @param view 添加的view
+ * @deprecated 暂时没用
+ */
+ @Deprecated
+ void beforeViewAddAnim(View view);
+
+ /**
+ * view 移除动画开始之前
+ * @param view 移除的view
+ * @deprecated 暂时没用
+ */
+ @Deprecated
+ void beforeViewRemoveAnim(View view);
+}
diff --git a/services/mogo-service/build.gradle b/services/mogo-service/build.gradle
index 6da98cf88e..4486370e37 100644
--- a/services/mogo-service/build.gradle
+++ b/services/mogo-service/build.gradle
@@ -42,6 +42,7 @@ dependencies {
annotationProcessor rootProject.ext.dependencies.aroutercompiler
implementation rootProject.ext.dependencies.adasapi
implementation rootProject.ext.dependencies.adasconfigapi
+ implementation "com.zhidao.support.adas:high:1.1.4.6"
if (Boolean.valueOf(RELEASE)) {
api rootProject.ext.dependencies.mogomap
implementation rootProject.ext.dependencies.mogomapapi
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
index 42a99d7bcc..23e5373804 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/MogoServiceApis.java
@@ -12,6 +12,7 @@ import com.mogo.service.analytics.IMogoAnalytics;
import com.mogo.service.auth.IMogoAuthManager;
import com.mogo.service.cardmanager.IMogoCardManager;
import com.mogo.service.connection.IMogoSocketManager;
+import com.mogo.service.connection.IMogoWebSocketManager;
import com.mogo.service.datamanager.IMogoDataManager;
import com.mogo.service.entrance.IMogoEntranceButtonController;
import com.mogo.service.eventpanel.IEventPanelProvider;
@@ -24,6 +25,7 @@ import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.intent.IMogoIntentManager;
import com.mogo.service.launcher.IMogoLauncher;
import com.mogo.service.locationinfo.IMogoLocationInfoService;
+import com.mogo.service.map.IMogoMapFrameController;
import com.mogo.service.map.IMogoMapService;
import com.mogo.service.module.IMogoActionManager;
import com.mogo.service.module.IMogoAddressManager;
@@ -33,7 +35,7 @@ import com.mogo.service.module.IMogoSearchManager;
import com.mogo.service.module.IMogoSettingManager;
import com.mogo.service.monitor.IMogoMonitorProvider;
import com.mogo.service.network.IMogoNetwork;
-import com.mogo.service.obu.IMogoObuManager;
+import com.mogo.service.obu.IMogoCrashWarnProvider;
import com.mogo.service.passport.IMogoPassportManager;
import com.mogo.service.share.IMogoShareManager;
import com.mogo.service.share.IMogoTrafficUploadProvider;
@@ -73,6 +75,11 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoSocketManager.class, MogoServicePaths.PATH_SOCKET_MANAGER );
}
+ @Override
+ public IMogoWebSocketManager getWebSocketManagerApi(Context context) {
+ return getApiInstance( IMogoWebSocketManager.class, MogoServicePaths.PATH_WEB_SOCKET_MANAGER );
+ }
+
@Override
public IMogoFragmentManager getFragmentManagerApi() {
return SingletonsHolder.get( IMogoFragmentManager.class );
@@ -189,11 +196,6 @@ public class MogoServiceApis implements IMogoServiceApis {
return getApiInstance( IMogoShareManager.class, MogoServicePaths.PATH_SHARE );
}
- @Override
- public IMogoObuManager getObuManager() {
- return getApiInstance( IMogoObuManager.class, MogoServicePaths.PATH_OBU );
- }
-
@Override
public IEventPanelProvider getEventPanelManager() {
return getApiInstance( IEventPanelProvider.class, MogoServicePaths.PATH_EVENT_PANEL );
@@ -216,27 +218,37 @@ public class MogoServiceApis implements IMogoServiceApis {
@Override
public IMogoTanluProvider getTanluApi() {
- return getApiInstance(IMogoTanluProvider.class, MogoServicePaths.PATH_TANLU_API);
+ return getApiInstance( IMogoTanluProvider.class, MogoServicePaths.PATH_TANLU_API );
}
@Override
public IMogoMonitorProvider getMogoMonitorApi() {
- return getApiInstance(IMogoMonitorProvider.class,MogoServicePaths.PATH_MOGO_MONITOR);
+ return getApiInstance( IMogoMonitorProvider.class, MogoServicePaths.PATH_MOGO_MONITOR );
}
@Override
- public IMogoTanluUiProvider getTanluUiApi(){
- return getApiInstance(IMogoTanluUiProvider.class, MogoServicePaths.PATH_TANLU_UI_API);
+ public IMogoTanluUiProvider getTanluUiApi() {
+ return getApiInstance( IMogoTanluUiProvider.class, MogoServicePaths.PATH_TANLU_UI_API );
}
@Override
public IMogoSkinSupportInstaller getSkinSupportInstallerApi() {
- return getApiInstance( IMogoSkinSupportInstaller.class, SkinSupportInstallerConstants.PATH);
+ return getApiInstance( IMogoSkinSupportInstaller.class, SkinSupportInstallerConstants.PATH );
+ }
+
+ @Override
+ public IMogoCrashWarnProvider getCrashWarnProvider() {
+ return getApiInstance( IMogoCrashWarnProvider.class, MogoServicePaths.PATH_CRASH_WARNING );
}
@Override
public IMogoOnlineCarListPanelProvider getOnlineCarPanelApi() {
- return getApiInstance( IMogoOnlineCarListPanelProvider.class, MogoServicePaths.PATH_ONLINE_CAR_PANEL);
+ return getApiInstance( IMogoOnlineCarListPanelProvider.class, MogoServicePaths.PATH_ONLINE_CAR_PANEL );
+ }
+
+ @Override
+ public IMogoMapFrameController getMapFrameControllerApi() {
+ return getApiInstance( IMogoMapFrameController.class, MogoServicePaths.PATH_MAP_FRAME_CONTROLLER );
}
@Override
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasControlCommandParameter.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasControlCommandParameter.java
new file mode 100644
index 0000000000..391b8fcb72
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasControlCommandParameter.java
@@ -0,0 +1,19 @@
+package com.mogo.service.impl.adas;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/22
+ *
+ * 描述
+ */
+class AdasControlCommandParameter {
+
+ public String action;
+ public Object result;
+
+ public AdasControlCommandParameter( String action, Object result ) {
+ this.action = action;
+ this.result = result;
+ }
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java
new file mode 100644
index 0000000000..97a33a325c
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java
@@ -0,0 +1,119 @@
+package com.mogo.service.impl.adas;
+
+import android.text.TextUtils;
+
+import com.mogo.commons.utils.MortonCode;
+import com.mogo.service.adas.entity.ADASRecognizedListResult;
+import com.mogo.service.adas.entity.ADASRecognizedResult;
+import com.mogo.service.adas.entity.ADASWarnMessage;
+import com.zhidao.support.adas.high.bean.RectInfo;
+import com.zhidao.support.adas.high.bean.WarnMessageInfo;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/25
+ *
+ * 对象转换类
+ */
+class AdasObjectUtils {
+
+ public static ADASWarnMessage fromAdasObject( WarnMessageInfo info ) {
+ if ( info == null ) {
+ return null;
+ }
+ ADASWarnMessage warnMessage = new ADASWarnMessage();
+ warnMessage.content = info.getContent();
+ warnMessage.level = info.getLevel();
+ try {
+ warnMessage.type = Integer.valueOf( info.getType() );
+ } catch ( NumberFormatException e ) {
+ return null;
+ }
+ warnMessage.value = info.getValue();
+ return warnMessage;
+ }
+
+ public static List< ADASRecognizedResult > fromAdasObject( RectInfo rectInfo ) {
+ if ( rectInfo == null
+ || rectInfo.getModels() == null
+ || rectInfo.getModels().isEmpty() ) {
+ return null;
+ }
+
+ List< ADASRecognizedResult > recognizedResults = new ArrayList<>();
+ for ( RectInfo.RectBean model : rectInfo.getModels() ) {
+ try {
+ ADASRecognizedResult result = fromAdasObject( model );
+ if ( result != null ) {
+ recognizedResults.add( result );
+ }
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ return recognizedResults;
+ }
+
+ public static ADASRecognizedResult fromAdasObject( RectInfo.RectBean rectBean ) {
+ if ( rectBean == null ) {
+ return null;
+ }
+ ADASRecognizedResult result = new ADASRecognizedResult();
+ result.uuid = rectBean.getUuid();
+ result.lat = rectBean.getLat();
+ result.lon = rectBean.getLon();
+ result.type = Integer.valueOf( rectBean.getType() );
+ result.heading = rectBean.getHeading();
+ result.systemTime = Long.valueOf( rectBean.getSystemTime() );
+ result.satelliteTime = Long.valueOf( rectBean.getSatelliteTime() );
+ result.alt = rectBean.getAlt();
+ result.color = rectBean.getColor();
+ result.speed = rectBean.getSpeed();
+ result.carId = rectBean.getCarId();
+ result.mortonCode = MortonCode.wrapEncodeMorton( result.lon, result.lat );
+ return result;
+ }
+
+ public static List< ADASRecognizedListResult > regroupData( List< RectInfo > datums ) {
+ if ( datums == null || datums.isEmpty() ) {
+ return null;
+ }
+ Map< String, ADASRecognizedListResult > result = new HashMap<>();
+ for ( RectInfo rectInfo : datums ) {
+ if ( rectInfo == null || rectInfo.getModels() == null || rectInfo.getModels().isEmpty() ) {
+ continue;
+ }
+ List< RectInfo.RectBean > models = rectInfo.getModels();
+ for ( RectInfo.RectBean model : models ) {
+ if ( model == null || TextUtils.isEmpty( model.getUuid() ) ) {
+ continue;
+ }
+ ADASRecognizedListResult recognizedListResult = null;
+ if ( !result.containsKey( model.getUuid() ) ) {
+ recognizedListResult = new ADASRecognizedListResult();
+ recognizedListResult.latLonList = new ArrayList<>();
+ recognizedListResult.heading = model.getHeading();
+ recognizedListResult.speed = model.getSpeed();
+ recognizedListResult.type = Integer.valueOf( model.getType() );
+ recognizedListResult.uuid = model.getUuid();
+ result.put( model.getUuid(), recognizedListResult );
+ } else {
+ recognizedListResult = result.get( model.getUuid() );
+ recognizedListResult.distanceX = model.getDistance_x();
+ recognizedListResult.distanceY = model.getDistance_y();
+ }
+ recognizedListResult.latLonList.add( new ADASRecognizedListResult.LatLon( model.getLat(), model.getLon() ) );
+ }
+ }
+ if ( result.isEmpty() ) {
+ return null;
+ }
+ return new ArrayList<>( result.values() );
+ }
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
index 277461c9d8..95b8661d44 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java
@@ -3,6 +3,8 @@ package com.mogo.service.impl.adas;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
+import android.text.TextUtils;
+import android.util.Log;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.commons.AbsMogoApplication;
@@ -19,6 +21,12 @@ import com.mogo.module.common.utils.CarSeries;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.adas.IMogoADASController;
import com.mogo.service.adas.IMogoAdasDataCallback;
+import com.mogo.service.adas.IMogoAdasRecognizedDataCallback;
+import com.mogo.service.adas.IMogoAdasWarnMessageCallback;
+import com.mogo.service.adas.RemoteControlAutoPilotParameters;
+import com.mogo.service.adas.entity.ADASRecognizedListResult;
+import com.mogo.service.adas.entity.ADASRecognizedResult;
+import com.mogo.service.adas.entity.ADASWarnMessage;
import com.mogo.service.impl.singleton.SingletonsHolder;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.TipToast;
@@ -34,15 +42,22 @@ import com.zhidao.adasconfig.common.config.EnumSkinStyle;
import com.zhidao.autopilot.support.api.AutopilotServiceManage;
import com.zhidao.autopilot.support.api.IAutopilotServiceStatusListener;
import com.zhidao.autopilot.support.api.IAutopolitDataCallBack;
+import com.zhidao.support.adas.high.OnAdasListener;
+import com.zhidao.support.adas.high.bean.RectInfo;
+import com.zhidao.support.adas.high.bean.WarnMessageInfo;
+import com.zhidao.support.adas.high.msg.MyMessageFactory;
+import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import io.reactivex.schedulers.Schedulers;
+import java.util.concurrent.CopyOnWriteArrayList;
import static com.mogo.module.common.utils.SPConst.getSpGuide;
@@ -69,10 +84,113 @@ public class MogoADASController implements IMogoADASController {
private IMogoStatusManager mStatusManager = SingletonsHolder.get( IMogoStatusManager.class );
+ private boolean mIsReleased = true;
private List adasDataCallbackList = new ArrayList<>();
private IAutopolitDataCallBack mAutopolitDataCallBack;
+ /**
+ * 获取adas前车距离
+ */
+ private List< IMogoAdasDataCallback > mAdasDataCallbackList = new CopyOnWriteArrayList<>();
+
+ /**
+ * adas 报警数据回调
+ */
+ private List< IMogoAdasWarnMessageCallback > mMogoAdasWarnMessageCallbackList = new CopyOnWriteArrayList<>();
+
+ /**
+ * adas 识别物体回调
+ */
+ private List< IMogoAdasRecognizedDataCallback > mMogoAdasRecognizedDataCallbacks = new CopyOnWriteArrayList<>();
+
+ private RectInfo mLastFrameData;
+
+ private OnAdasListener mOnAdasListener = new OnAdasListenerAdapter() {
+
+ @Override
+ public void onRectData( RectInfo rectInfo ) {
+ // 物体识别返回
+ Logger.d( TAG, "onRectData = %s", rectInfo.toString() );
+ mLastFrameData = rectInfo;
+ handleAdasRecognizedData( rectInfo );
+ }
+
+ @Override
+ public void onWarnMessage( WarnMessageInfo warnMessageInfo ) {
+ if ( warnMessageInfo == null ) {
+ return;
+ }
+ // 警告消息
+ Logger.d( TAG, "onWarnMessage = %s", warnMessageInfo.toString() );
+ if ( mMogoAdasWarnMessageCallbackList.isEmpty() ) {
+ return;
+ }
+ final ADASWarnMessage warnMessage = AdasObjectUtils.fromAdasObject( warnMessageInfo );
+ if ( warnMessage == null ) {
+ return;
+ }
+ UiThreadHandler.post( () -> {
+ Iterator< IMogoAdasWarnMessageCallback > iMogoAdasWarnMessageCallbackIterator = mMogoAdasWarnMessageCallbackList.iterator();
+ while ( iMogoAdasWarnMessageCallbackIterator.hasNext() ) {
+ IMogoAdasWarnMessageCallback callback = iMogoAdasWarnMessageCallbackIterator.next();
+ if ( callback != null ) {
+ callback.onReceiveData( warnMessage );
+ }
+ }
+ } );
+ }
+ };
+
+ private long mLastRecordSeconds = 0L;
+
+
+ /**
+ * 缓存容器
+ */
+ List< RectInfo > mCacheRecognizedDataSet = new ArrayList<>();
+
+ /**
+ * 处理数据,将识别到的物体分组,然后每1s进行一次回调
+ * 时间:系统时间
+ *
+ * @param rectInfo
+ */
+ private void handleAdasRecognizedData( RectInfo rectInfo ) {
+ if ( rectInfo == null
+ || rectInfo.getModels() == null
+ || rectInfo.getModels().isEmpty() ) {
+ return;
+ }
+ long curTime = System.currentTimeMillis() / 1000;
+ if ( mLastRecordSeconds == 0L ) {
+ mLastRecordSeconds = curTime;
+ }
+ if ( mLastRecordSeconds != curTime ) {
+ invokeCallbackPerSecond( mCacheRecognizedDataSet );
+ mCacheRecognizedDataSet = new ArrayList<>();
+ }
+ mCacheRecognizedDataSet.add( rectInfo );
+ }
+
+ private void invokeCallbackPerSecond( List< RectInfo > data ) {
+ List< RectInfo > newRef = data;
+ List< ADASRecognizedListResult > recognizedListResults = AdasObjectUtils.regroupData( newRef );
+ if ( recognizedListResults == null || recognizedListResults.isEmpty() ) {
+ return;
+ }
+ if ( !mMogoAdasRecognizedDataCallbacks.isEmpty() ) {
+ for ( IMogoAdasRecognizedDataCallback callback : mMogoAdasRecognizedDataCallbacks ) {
+ if ( callback == null ) {
+ continue;
+ }
+ callback.onAdasDataCallback( recognizedListResults );
+ }
+ }
+ }
+
+ private MyMessageFactory mAdasMessageFactory;
+
@Override
public void openADAS() {
showADAS();
@@ -97,6 +215,10 @@ public class MogoADASController implements IMogoADASController {
return;
}
}
+ if ( MogoApisHandler.getInstance().getApis().getMapFrameControllerApi().isVrMode() ) {
+ return;
+ }
+ Logger.d( TAG, Log.getStackTraceString( new Throwable() ) );
init( AbsMogoApplication.getApp() );
AutopilotServiceManage.getInstance().registerAutopilotServiceStatusListener( new IAutopilotServiceStatusListener() {
@Override
@@ -126,7 +248,17 @@ public class MogoADASController implements IMogoADASController {
@Override
public void cameraEyeDetectResult( String detectResult ) {
-
+ try {
+ JSONObject jsonObjectWs = new JSONObject( detectResult );
+ String action = jsonObjectWs.optString( "action" );
+ if ( TextUtils.isEmpty( action ) ) {
+ Logger.w( TAG, "--->action is null" );
+ return;
+ }
+ mAdasMessageFactory.createMessage( action ).handlerMsg( GsonUtil.getGson(), mOnAdasListener, detectResult );
+ } catch ( JSONException e ) {
+ e.printStackTrace();
+ }
}
@Override
@@ -239,6 +371,8 @@ public class MogoADASController implements IMogoADASController {
@Override
public void init( Context context ) {
AutopilotServiceManage.getInstance().init( context );
+ mIsReleased = false;
+ mAdasMessageFactory = new MyMessageFactory();
this.context = context;
}
@@ -304,22 +438,26 @@ public class MogoADASController implements IMogoADASController {
}
@Override
- public void notifyAdas( String json ) {
+ public void aiCloudToAdasData( RemoteControlAutoPilotParameters result ) {
try {
-// AutopilotServiceManage.getInstance().aiCloudToAdasData( json );
+ syncControlCmdToADAS( "aiCloudToStartAutopilot", result );
} catch ( Exception e ) {
- Logger.e( TAG, e, "notifyAdas" );
+ Logger.e( TAG, e, "aiCloudToAdasData" );
}
}
- @Override
- public void addAdasDataCallback(IMogoAdasDataCallback callback) {
- adasDataCallbackList.add(callback);
- }
-
- @Override
- public void removeAdasDataCallback(IMogoAdasDataCallback callback) {
- adasDataCallbackList.remove(callback);
+ /**
+ * @param action
+ * @param result
+ */
+ private void syncControlCmdToADAS( String action, Object result ) {
+ AdasControlCommandParameter parameter = new AdasControlCommandParameter( action, result );
+ //位置信息 action是aiCloudToStartAutopilot
+ try {
+ AutopilotServiceManage.getInstance().aiCloudToAdasData( GsonUtil.jsonFromObject( parameter ) );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
}
private static final String TEST_SN = "ZD802B1932L00617";
@@ -365,6 +503,69 @@ public class MogoADASController implements IMogoADASController {
@Override
public void release() {
+ mIsReleased = true;
+ AutopilotServiceManage.getInstance().unRegisterAutopilotDataListener( mAutopolitDataCallBack );
AutopilotServiceManage.getInstance().release();
}
+
+ @Override
+ public void addAdasDataCallback( IMogoAdasDataCallback callback ) {
+ if ( callback == null ) {
+ return;
+ }
+ if ( !mAdasDataCallbackList.contains( callback ) ) {
+ mAdasDataCallbackList.add( callback );
+ }
+ }
+
+ @Override
+ public void removeAdasDataCallback( IMogoAdasDataCallback callback ) {
+ if ( callback == null ) {
+ return;
+ }
+ mAdasDataCallbackList.remove( callback );
+ }
+
+ @Override
+ public void addAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback ) {
+ if ( callback == null ) {
+ return;
+ }
+ if ( !mMogoAdasWarnMessageCallbackList.contains( callback ) ) {
+ mMogoAdasWarnMessageCallbackList.add( callback );
+ }
+ }
+
+ @Override
+ public void removeAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback ) {
+ if ( callback == null ) {
+ return;
+ }
+ mMogoAdasWarnMessageCallbackList.remove( callback );
+ }
+
+ @Override
+ public List< ADASRecognizedResult > getLastADASRecognizedResult() {
+ RectInfo rectInfo = mLastFrameData;
+ List< ADASRecognizedResult > recognizedResultList = AdasObjectUtils.fromAdasObject( rectInfo );
+ return recognizedResultList;
+ }
+
+ @Override
+ public void addAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback ) {
+ if ( callback == null ) {
+ return;
+ }
+ if ( !mMogoAdasRecognizedDataCallbacks.contains( callback ) ) {
+ mMogoAdasRecognizedDataCallbacks.add( callback );
+ }
+ }
+
+ @Override
+ public void removeAdasRecognizedDataCallback( IMogoAdasRecognizedDataCallback callback ) {
+ if ( callback == null ) {
+ return;
+ }
+ mMogoAdasRecognizedDataCallbacks.remove( callback );
+ }
}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/OnAdasListenerAdapter.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/OnAdasListenerAdapter.java
new file mode 100644
index 0000000000..b8a1badc36
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/OnAdasListenerAdapter.java
@@ -0,0 +1,60 @@
+package com.mogo.service.impl.adas;
+
+import com.zhidao.support.adas.high.OnAdasListener;
+import com.zhidao.support.adas.high.bean.AutopilotStatus;
+import com.zhidao.support.adas.high.bean.CarLaneInfo;
+import com.zhidao.support.adas.high.bean.CarStateInfo;
+import com.zhidao.support.adas.high.bean.LightStatueInfo;
+import com.zhidao.support.adas.high.bean.ObstaclesInfo;
+import com.zhidao.support.adas.high.bean.RectInfo;
+import com.zhidao.support.adas.high.bean.WarnMessageInfo;
+
+public
+/**
+ * @author congtaowang
+ * @since 2020/10/22
+ *
+ * 描述
+ */
+abstract class OnAdasListenerAdapter implements OnAdasListener {
+
+ @Override
+ public void onWarnMessage( WarnMessageInfo warnMessageInfo ) {
+
+ }
+
+ @Override
+ public void onVideoSize( int width, int height ) {
+
+ }
+
+ @Override
+ public void onRectData( RectInfo rectInfo ) {
+
+ }
+
+ @Override
+ public void onCarStateData( CarStateInfo carStateInfo ) {
+
+ }
+
+ @Override
+ public void onLightStateData( LightStatueInfo lightStatueInfo ) {
+
+ }
+
+ @Override
+ public void onObstaclesInfo( ObstaclesInfo obstaclesInfo ) {
+
+ }
+
+ @Override
+ public void onCarLaneInfo( CarLaneInfo carLaneInfo ) {
+
+ }
+
+ @Override
+ public void autopilotStatus( AutopilotStatus autopilotStatus ) {
+
+ }
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoWebSocketManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoWebSocketManager.java
new file mode 100644
index 0000000000..3a7d3c5f22
--- /dev/null
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/connection/MogoWebSocketManager.java
@@ -0,0 +1,63 @@
+package com.mogo.service.impl.connection;
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.mogo.service.connection.IMogoOnWebSocketMessageListener;
+import com.mogo.service.connection.IMogoWebSocketManager;
+import com.mogo.utils.logger.Logger;
+
+import java.lang.reflect.Method;
+
+import static com.mogo.service.MogoServicePaths.PATH_WEB_SOCKET_MANAGER;
+
+@Route(path = PATH_WEB_SOCKET_MANAGER)
+public class MogoWebSocketManager implements IMogoWebSocketManager {
+
+ private static final String TAG = "MogoWebSocketManager";
+ private IMogoWebSocketManager mDelegate;
+
+ @Override
+ public void init(Context context, String appId) {
+ if (mDelegate != null) {
+ mDelegate.init(context, appId);
+ }
+ }
+
+ @Override
+ public void registerOnWebSocketMessageListener( IMogoOnWebSocketMessageListener listener) {
+ if (mDelegate != null) {
+ mDelegate.registerOnWebSocketMessageListener( listener);
+ }
+ }
+
+ @Override
+ public void unregisterOnWebSocketMessageListener( IMogoOnWebSocketMessageListener listener) {
+ if (mDelegate != null) {
+ mDelegate.unregisterOnWebSocketMessageListener( listener );
+ }
+ }
+
+ @Override
+ public void sendMsg(Object body, IMogoOnWebSocketMessageListener listener) {
+ if (mDelegate != null) {
+ mDelegate.sendMsg(body, listener);
+ }
+ }
+
+ @Override
+ public void init(Context context) {
+ try {
+ Class> clazz = Class.forName("com.mogo.base.websocket.WebSocketManager");
+ Method getInstanceMethod = clazz.getMethod("getInstance", Context.class);
+ getInstanceMethod.setAccessible(true);
+ mDelegate = (IMogoWebSocketManager) getInstanceMethod.invoke(null, context);
+ } catch (Exception e) {
+ Logger.e(TAG, e, "error.");
+ }
+
+ if (mDelegate != null) {
+ mDelegate.init(context);
+ }
+ }
+}
diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java
index 3244314524..def506de22 100644
--- a/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java
+++ b/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java
@@ -49,6 +49,11 @@ public class MogoStatusManager implements IMogoStatusManager {
return get_bool_val( StatusDescriptor.VOICE_UI );
}
+ @Override
+ public boolean isVrMode() {
+ return get_bool_val(StatusDescriptor.VR_MODE);
+ }
+
@Override
public boolean isADASShow() {
return get_bool_val( StatusDescriptor.ADAS_UI );
@@ -152,6 +157,11 @@ public class MogoStatusManager implements IMogoStatusManager {
doSetStatus(tag, StatusDescriptor.TOP_VIEW, show);
}
+ @Override
+ public void setVrMode(String tag, boolean vrMode) {
+ doSetStatus(tag, StatusDescriptor.VR_MODE, vrMode);
+ }
+
@Override
public void setVoiceUIShow( String tag, boolean show ) {
doSetStatus( tag, StatusDescriptor.VOICE_UI, show );
diff --git a/settings.gradle b/settings.gradle
index 49edc56a94..fcb16f4bd8 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,9 @@
+include ':app2'
+include ':foudations:httpdns-base'
+include ':foudations:httpdns-tencent'
+include ':foudations:httpdns-noop'
+include ':modules:mogo-modules-mvision'
+include ':foudations:mogo-base-websocket-sdk'
include ':tts:tts-base'
include ':tts:tts-di'
include ':tts:tts-zhi'
@@ -39,6 +45,7 @@ include ':modules:mogo-module-service'
include ':modules:mogo-module-back'
include ':modules:mogo-module-authorize'
include ':libraries:map-amap'
+include ':libraries:map-custom'
include ':libraries:mogo-map-api'
include ':modules:mogo-module-apps'
include ':modules:mogo-module-extensions'