Compare commits
10 Commits
0f9e99fb8c
...
3ead09d554
Author | SHA1 | Date | |
---|---|---|---|
|
3ead09d554 | ||
|
5d69dd845c | ||
![]() |
421517c248 | ||
![]() |
37924fa2b5 | ||
![]() |
96376ed7fc | ||
![]() |
a361a2c11c | ||
![]() |
1c2cdacadb | ||
![]() |
12c46700d6 | ||
![]() |
057c386556 | ||
![]() |
71c6f658fd |
|
@ -0,0 +1,41 @@
|
|||
.gradle/
|
||||
.idea/
|
||||
release/
|
||||
build/
|
||||
debug/
|
||||
his-version-apk
|
||||
|
||||
# ---> Android
|
||||
# Gradle files
|
||||
.gradle/
|
||||
build/
|
||||
|
||||
# Local configuration file (sdk path, etc)
|
||||
local.properties
|
||||
|
||||
# Log/OS Files
|
||||
*.log
|
||||
|
||||
# Android Studio generated files and folders
|
||||
captures/
|
||||
.externalNativeBuild/
|
||||
.cxx/
|
||||
*.apk
|
||||
output.json
|
||||
|
||||
# IntelliJ
|
||||
*.iml
|
||||
.idea/
|
||||
misc.xml
|
||||
deploymentTargetDropDown.xml
|
||||
render.experimental.xml
|
||||
|
||||
# Keystore files
|
||||
*.jks
|
||||
*.keystore
|
||||
|
||||
# Google Services (e.g. APIs or Firebase)
|
||||
google-services.json
|
||||
|
||||
# Android Profiling
|
||||
*.hprof
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,2 +1,2 @@
|
|||
#Thu Sep 14 18:07:54 GMT+08:00 2023
|
||||
#Tue Jun 25 17:25:11 GMT+08:00 2024
|
||||
gradle.version=5.6.4
|
||||
|
|
Binary file not shown.
|
@ -1,11 +0,0 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: androidx.room:room-common:2.2.5">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.room/room-common/2.2.5/f5e3b73a0c2ab5e276e26868e4ce3542baede207/room-common-2.2.5.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.room/room-common/2.2.5/924310c61a30c7a167a22f636331556bc654ec94/room-common-2.2.5-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: androidx.test.services:storage:1.4.0@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3ae6e141069f76b9dd24050149524d9d/jetified-storage-1.4.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3ae6e141069f76b9dd24050149524d9d/jetified-storage-1.4.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3ae6e141069f76b9dd24050149524d9d/jetified-storage-1.4.0/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.test.services/storage/1.4.0/27088f46bc0ab94523a20ccc56aa27e142662396/storage-1.4.0-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -16,6 +16,24 @@
|
|||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad67766727e8b516aa8b11db6408390f/jetified-debug-db-base-1.0.6/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad67766727e8b516aa8b11db6408390f/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad67766727e8b516aa8b11db6408390f/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/000d0a739247410c745f8b5cfc291dbb/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/000d0a739247410c745f8b5cfc291dbb/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/000d0a739247410c745f8b5cfc291dbb/jetified-debug-db-base-1.0.6/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4ddbfcbe0013ceaa7e5a6631cd5f6ef5/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4ddbfcbe0013ceaa7e5a6631cd5f6ef5/jetified-debug-db-base-1.0.6/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4ddbfcbe0013ceaa7e5a6631cd5f6ef5/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/e310a8b89f2d8ba2f75dc3a1729e8b2a/jetified-debug-db-base-1.0.6/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/e310a8b89f2d8ba2f75dc3a1729e8b2a/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/e310a8b89f2d8ba2f75dc3a1729e8b2a/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/66c4a999c6f6d70833d2c8f86bcf185d/jetified-debug-db-base-1.0.6/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/66c4a999c6f6d70833d2c8f86bcf185d/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/66c4a999c6f6d70833d2c8f86bcf185d/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/50940156addf6bddb76e95ed727c8bee/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/50940156addf6bddb76e95ed727c8bee/jetified-debug-db-base-1.0.6/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/50940156addf6bddb76e95ed727c8bee/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/14ef4c0cf733cf117ddea4bb23fad05f/jetified-debug-db-base-1.0.6/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/14ef4c0cf733cf117ddea4bb23fad05f/jetified-debug-db-base-1.0.6/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/14ef4c0cf733cf117ddea4bb23fad05f/jetified-debug-db-base-1.0.6/res" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.amitshekhar.android/debug-db-base/1.0.6/43c6abb777258b8e02b7a4f4aef44f5996ddf30f/debug-db-base-1.0.6-javadoc.jar!/" />
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.andkulikov:transitionseverywhere:2.0.0-beta01@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/10ea8aa4f6e092ff2f55dabcec7eb0a9/jetified-transitionseverywhere-2.0.0-beta01/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/10ea8aa4f6e092ff2f55dabcec7eb0a9/jetified-transitionseverywhere-2.0.0-beta01/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/10ea8aa4f6e092ff2f55dabcec7eb0a9/jetified-transitionseverywhere-2.0.0-beta01/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.andkulikov/transitionseverywhere/2.0.0-beta01/1cc96719538e8a0d18a71d74a3c998e3df9228e9/transitionseverywhere-2.0.0-beta01-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.andkulikov/transitionseverywhere/2.0.0-beta01/3d8df039674a1e242e675f386b2dd65f7d9f1625/transitionseverywhere-2.0.0-beta01-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -6,6 +6,13 @@
|
|||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/62035fcaa1eb865fcb157c3556d5e2c8/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad36d5a34233c7fa29ad3770971d35c6/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4d8a2b6516214c37dd58d58e9a7f5172/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/083aec472dafcfc3b0c0d766cd43b137/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/887f6708c215f50988e88d72cdabde59/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/cccd8aa5fc5dd56698cef82da605b812/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/69ab993d74cceb064b535055353ca0cb/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ea069d680a452b2b20ed9f28da603030/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/440f81a160906a9defe08b476792ce98/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b2fc26a486b08ed641398608a6b45164/jetified-stetho-1.5.1/annotations.zip!/" />
|
||||
</ANNOTATIONS>
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/d20b09848ce936fd0a38f787548625fb/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
|
@ -23,6 +30,27 @@
|
|||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4d8a2b6516214c37dd58d58e9a7f5172/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4d8a2b6516214c37dd58d58e9a7f5172/jetified-stetho-1.5.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/4d8a2b6516214c37dd58d58e9a7f5172/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/083aec472dafcfc3b0c0d766cd43b137/jetified-stetho-1.5.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/083aec472dafcfc3b0c0d766cd43b137/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/083aec472dafcfc3b0c0d766cd43b137/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/887f6708c215f50988e88d72cdabde59/jetified-stetho-1.5.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/887f6708c215f50988e88d72cdabde59/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/887f6708c215f50988e88d72cdabde59/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/cccd8aa5fc5dd56698cef82da605b812/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/cccd8aa5fc5dd56698cef82da605b812/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/cccd8aa5fc5dd56698cef82da605b812/jetified-stetho-1.5.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/69ab993d74cceb064b535055353ca0cb/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/69ab993d74cceb064b535055353ca0cb/jetified-stetho-1.5.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/69ab993d74cceb064b535055353ca0cb/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ea069d680a452b2b20ed9f28da603030/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ea069d680a452b2b20ed9f28da603030/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ea069d680a452b2b20ed9f28da603030/jetified-stetho-1.5.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/440f81a160906a9defe08b476792ce98/jetified-stetho-1.5.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/440f81a160906a9defe08b476792ce98/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/440f81a160906a9defe08b476792ce98/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b2fc26a486b08ed641398608a6b45164/jetified-stetho-1.5.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b2fc26a486b08ed641398608a6b45164/jetified-stetho-1.5.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b2fc26a486b08ed641398608a6b45164/jetified-stetho-1.5.1/jars/classes.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.facebook.stetho/stetho/1.5.1/b71856fcb682e807ccec3a276e47c94944b6c6ea/stetho-1.5.1-javadoc.jar!/" />
|
||||
|
|
|
@ -16,6 +16,27 @@
|
|||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/34c9268e89b7e26ed7d2a6d2fbc7372d/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/34c9268e89b7e26ed7d2a6d2fbc7372d/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/34c9268e89b7e26ed7d2a6d2fbc7372d/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7f2036a595ce5b219144e3375ddac139/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7f2036a595ce5b219144e3375ddac139/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7f2036a595ce5b219144e3375ddac139/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/19787c79412530f7cf41ba98e3cf4503/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/19787c79412530f7cf41ba98e3cf4503/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/19787c79412530f7cf41ba98e3cf4503/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0b4a4104fa2fea365d8bad6f5dfd0a29/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0b4a4104fa2fea365d8bad6f5dfd0a29/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0b4a4104fa2fea365d8bad6f5dfd0a29/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1c32e92e942e346fa72f85577fbd57cb/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1c32e92e942e346fa72f85577fbd57cb/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1c32e92e942e346fa72f85577fbd57cb/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6bb8df3919283efc1f3f23f8c7562b55/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6bb8df3919283efc1f3f23f8c7562b55/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6bb8df3919283efc1f3f23f8c7562b55/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9f2d89654525734f9df46f8b0c86ea98/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9f2d89654525734f9df46f8b0c86ea98/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9f2d89654525734f9df46f8b0c86ea98/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/335eb90c2c2079801ad2d1562688d085/jetified-GreenDaoUpgradeHelper-v2.2.1/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/335eb90c2c2079801ad2d1562688d085/jetified-GreenDaoUpgradeHelper-v2.2.1/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/335eb90c2c2079801ad2d1562688d085/jetified-GreenDaoUpgradeHelper-v2.2.1/jars/classes.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.yuweiguocn/GreenDaoUpgradeHelper/v2.2.1/7aef2e7b4c18afb240f0e17af5d045f176d2b8ef/GreenDaoUpgradeHelper-v2.2.1-javadoc.jar!/" />
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.google.android.exoplayer:exoplayer:r1.5.11@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/790c62dbd20241bc524dd54d3ef19633/jetified-exoplayer-r1.5.11/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/790c62dbd20241bc524dd54d3ef19633/jetified-exoplayer-r1.5.11/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/790c62dbd20241bc524dd54d3ef19633/jetified-exoplayer-r1.5.11/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.android.exoplayer/exoplayer/r1.5.11/51c6408ed7fb546c19d6b6f5c8b21d3a559842f1/exoplayer-r1.5.11-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.android.exoplayer/exoplayer/r1.5.11/5bb43348bca48bf6567a206024acdbcb23f4a990/exoplayer-r1.5.11-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,13 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.jakewharton:disklrucache:2.0.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/disklrucache/2.0.2/93b399470e72c0bc8cb52379943b63c9aa586cd8/disklrucache-2.0.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/disklrucache/2.0.2/a0405f093a7fa9000f68ba5a8db11f4a01d827d9/disklrucache-2.0.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/disklrucache/2.0.2/a8b600c9a1d9f75cdc45bb1b24b4731845a7658b/disklrucache-2.0.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -16,6 +16,27 @@
|
|||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8acd84ed04507b25ad4ab1f092095a58/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8acd84ed04507b25ad4ab1f092095a58/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8acd84ed04507b25ad4ab1f092095a58/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad5dbc95019bd8e49004e8b34c57b5cc/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad5dbc95019bd8e49004e8b34c57b5cc/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad5dbc95019bd8e49004e8b34c57b5cc/jetified-logger-2.2.0/res" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3c61309d95eba32c83569838bd6eb73d/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3c61309d95eba32c83569838bd6eb73d/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3c61309d95eba32c83569838bd6eb73d/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/94dd3650c1dd350610ff6179bb68c164/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/94dd3650c1dd350610ff6179bb68c164/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/94dd3650c1dd350610ff6179bb68c164/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1adbba6365c42fc22a765dabaf2bf186/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1adbba6365c42fc22a765dabaf2bf186/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1adbba6365c42fc22a765dabaf2bf186/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/2c7174e836587cce110bf07de8a9d247/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/2c7174e836587cce110bf07de8a9d247/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/2c7174e836587cce110bf07de8a9d247/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/590a8d0b56e7f81871a8e48271d0a8db/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/590a8d0b56e7f81871a8e48271d0a8db/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/590a8d0b56e7f81871a8e48271d0a8db/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8ccd565971f02f2b178029a4f4566ab1/jetified-logger-2.2.0/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8ccd565971f02f2b178029a4f4566ab1/jetified-logger-2.2.0/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8ccd565971f02f2b178029a4f4566ab1/jetified-logger-2.2.0/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.orhanobut/logger/2.2.0/98e69754ab23f7179137d8d2a0e3eea79200d746/logger-2.2.0-javadoc.jar!/" />
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-arm64:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0a8bc628c5c2b59e5803dd252d230c69/jetified-gsyVideoPlayer-arm64-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0a8bc628c5c2b59e5803dd252d230c69/jetified-gsyVideoPlayer-arm64-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0a8bc628c5c2b59e5803dd252d230c69/jetified-gsyVideoPlayer-arm64-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-arm64/8.1.2/c6f27a359eb8fe4c2d26e0c786323ff027204ba7/gsyVideoPlayer-arm64-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-arm64/8.1.2/4d37565f790e60f0d875452224f40cfd8a050be2/gsyVideoPlayer-arm64-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-armv5:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b360dda17d7d2dabffa05706dc38e9c5/jetified-gsyVideoPlayer-armv5-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b360dda17d7d2dabffa05706dc38e9c5/jetified-gsyVideoPlayer-armv5-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b360dda17d7d2dabffa05706dc38e9c5/jetified-gsyVideoPlayer-armv5-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-armv5/8.1.2/80149f6a5bf76ba29c8067173600f6d1b3607ca2/gsyVideoPlayer-armv5-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-armv5/8.1.2/4d9b627b40d7ac32c2a4f165fcef0707787dfc81/gsyVideoPlayer-armv5-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-armv7a:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1a0615481ecb85d0cb83348dd9df58dc/jetified-gsyVideoPlayer-armv7a-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1a0615481ecb85d0cb83348dd9df58dc/jetified-gsyVideoPlayer-armv7a-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/1a0615481ecb85d0cb83348dd9df58dc/jetified-gsyVideoPlayer-armv7a-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-armv7a/8.1.2/cd1b87b0f3c507abd5b9e51da344b590af1141c1/gsyVideoPlayer-armv7a-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-armv7a/8.1.2/3ccfc3d7981f9a925a069db589a1450857144386/gsyVideoPlayer-armv7a-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-base:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/2b3dc07e55269a31ad24bd8b19352261/jetified-gsyVideoPlayer-base-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/2b3dc07e55269a31ad24bd8b19352261/jetified-gsyVideoPlayer-base-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/2b3dc07e55269a31ad24bd8b19352261/jetified-gsyVideoPlayer-base-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-base/8.1.2/d8d7811290044edab5f9070bbdd0926044ff404c/gsyVideoPlayer-base-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-base/8.1.2/5767ca223e495bf5ef9630a4f4d172ab64eb0665/gsyVideoPlayer-base-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-java:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/991b63861e192385d2a45317518c9ae6/jetified-gsyVideoPlayer-java-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/991b63861e192385d2a45317518c9ae6/jetified-gsyVideoPlayer-java-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/991b63861e192385d2a45317518c9ae6/jetified-gsyVideoPlayer-java-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-java/8.1.2/42f025c9609037f4ea2c63721987c6df76c1e06/gsyVideoPlayer-java-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-java/8.1.2/908aad69d136a466aa392a45ddd5c17ae8126946/gsyVideoPlayer-java-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-x64:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/5eae8ee142e4c872b46a2bed9193c2fd/jetified-gsyVideoPlayer-x64-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/5eae8ee142e4c872b46a2bed9193c2fd/jetified-gsyVideoPlayer-x64-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/5eae8ee142e4c872b46a2bed9193c2fd/jetified-gsyVideoPlayer-x64-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-x64/8.1.2/8862c43f4332e5a59c532a69d568dc5be87abaa5/gsyVideoPlayer-x64-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-x64/8.1.2/dd3ead2ad18092a247a25f6d719b162b0a65be23/gsyVideoPlayer-x64-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyVideoPlayer-x86:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9629325aebcbe5ec806a7df2072bba58/jetified-gsyVideoPlayer-x86-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9629325aebcbe5ec806a7df2072bba58/jetified-gsyVideoPlayer-x86-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9629325aebcbe5ec806a7df2072bba58/jetified-gsyVideoPlayer-x86-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-x86/8.1.2/4f26ab09538d4ccbbda6eb3eb70eea1ebe52f9c8/gsyVideoPlayer-x86-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyVideoPlayer-x86/8.1.2/6fb69f7cfcd70a9d16c27983f775c545aff09035/gsyVideoPlayer-x86-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.shuyu:gsyvideoplayer-androidvideocache:8.1.2@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0a94de07336996d2e58928d8758c5c0e/jetified-gsyvideoplayer-androidvideocache-8.1.2/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0a94de07336996d2e58928d8758c5c0e/jetified-gsyvideoplayer-androidvideocache-8.1.2/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/0a94de07336996d2e58928d8758c5c0e/jetified-gsyvideoplayer-androidvideocache-8.1.2/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyvideoplayer-androidvideocache/8.1.2/f3a37151911860bd9c81de39aa5cdbb062fc096a/gsyvideoplayer-androidvideocache-8.1.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.shuyu/gsyvideoplayer-androidvideocache/8.1.2/f0094ffb27578e8850fc573b52af6624948ad744/gsyvideoplayer-androidvideocache-8.1.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,15 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: com.zhouyou:rxeasyhttp:2.1.5@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7af653fe83e0e90c9b7886840ceae684/jetified-rxeasyhttp-2.1.5/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7af653fe83e0e90c9b7886840ceae684/jetified-rxeasyhttp-2.1.5/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7af653fe83e0e90c9b7886840ceae684/jetified-rxeasyhttp-2.1.5/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.zhouyou/rxeasyhttp/2.1.5/7a0a1d0738c5f8c0a5286cc09e929e5cf7667954/rxeasyhttp-2.1.5-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.zhouyou/rxeasyhttp/2.1.5/6e05ef8e11293e988d7e27bf8228dd3e1d6efb53/rxeasyhttp-2.1.5-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,11 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: tv.danmaku.ijk.media:ijkplayer-exo:0.8.8@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/42d9a1858575c38fe01b9ac6560613d1/jetified-ijkplayer-exo-0.8.8/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/42d9a1858575c38fe01b9ac6560613d1/jetified-ijkplayer-exo-0.8.8/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/42d9a1858575c38fe01b9ac6560613d1/jetified-ijkplayer-exo-0.8.8/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
|
@ -0,0 +1,11 @@
|
|||
<component name="libraryTable">
|
||||
<library name="Gradle: tv.danmaku.ijk.media:ijkplayer-java:0.8.8@aar">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/97d6ec940fa9fe8f3f7d9f6c67d24115/jetified-ijkplayer-java-0.8.8/jars/classes.jar!/" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/97d6ec940fa9fe8f3f7d9f6c67d24115/jetified-ijkplayer-java-0.8.8/res" />
|
||||
<root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/97d6ec940fa9fe8f3f7d9f6c67d24115/jetified-ijkplayer-java-0.8.8/AndroidManifest.xml" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -21,8 +21,8 @@ android {
|
|||
applicationId "net.sysolution.taxiapp"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
versionCode 240
|
||||
versionName "3.3.3-beta26.3.9.97-debug"
|
||||
versionCode 257
|
||||
versionName "3.3.3-beta26.4.1.4-release"
|
||||
|
||||
//alphaxx - 预览版本,不会对外发布,由测试人员测试,会有很多bug
|
||||
//Betaxx - 公开测试版本,会发给其他工作人员,会有较多版本
|
||||
|
@ -58,7 +58,14 @@ android {
|
|||
3.3.3-beta26.3.9.3.94 新增播放日志开关,gps开关查询,直接清除所有广告功能
|
||||
3.3.3-beta26.3.9.3.95 修复日志重复上传问题
|
||||
26.3.9.96 播放时长为广告素材的播放时长
|
||||
26.3.9.97 记录taxiApp当天的运行时间
|
||||
26.3.9.98 记录taxiApp当天的运行时间
|
||||
26.3.9.99 优化日志上传,改为一天只传一次昨天的播放记录。
|
||||
优化定点广告频z繁切换会出现黑屏问题
|
||||
3.3.3-beta26.4.0.6-release 优化GPS,播放日志,运行时长上报功能
|
||||
3.3.3-beta26.4.0.7-release 优化GPS上报,每次取250条数据,小于250条时等待8分钟后再次上传
|
||||
3.3.3-beta26.4.1.2-release 修复收到的GPS卫星数量为0时频繁刷新问题
|
||||
3.3.3-beta26.4.1.4-release 有GPS日志时,每次100条以内的日志进行上报,上报成功继续上报剩余的日志,传完为止,上报失败或无gps日志时,每隔2分钟后重新监测日志进行上报
|
||||
3.3.3-beta26.4.1.5-release 修复有计次广告的时候重启后过了好几分钟才播的问题
|
||||
**/
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
@ -111,7 +118,7 @@ android {
|
|||
|
||||
//每升级一次数据库加一
|
||||
greendao {
|
||||
schemaVersion 44
|
||||
schemaVersion 46
|
||||
daoPackage 'cn.trans88.taxiappkotlin.logic.dao'
|
||||
targetGenDir 'src/main/java'
|
||||
}
|
||||
|
@ -142,6 +149,8 @@ dependencies {
|
|||
//网络调试数据库
|
||||
implementation 'com.amitshekhar.android:debug-db:1.0.6'
|
||||
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
|
||||
|
||||
//logger
|
||||
implementation 'com.orhanobut:logger:2.2.0'
|
||||
|
||||
|
@ -172,7 +181,6 @@ dependencies {
|
|||
// implementation 'androidx.room:room-runtime:2.2.5'//room
|
||||
// kapt "androidx.room:room-compiler:2.2.5"
|
||||
|
||||
|
||||
//lifecycle协程
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-core-ktx:$livedata"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$livedata"
|
||||
|
@ -206,4 +214,14 @@ dependencies {
|
|||
// implementation 'com.google.android.exoplayer:exoplayer-ui:2.14.2'
|
||||
|
||||
// implementation 'com.github.Trans88:KuroLibrary:0.1.3'
|
||||
implementation 'com.zhouyou:rxeasyhttp:2.1.5'
|
||||
|
||||
implementation 'com.shuyu:gsyVideoPlayer-java:8.1.2'
|
||||
|
||||
//根据你的需求ijk模式的so
|
||||
implementation 'com.shuyu:gsyVideoPlayer-armv5:8.1.2'
|
||||
implementation 'com.shuyu:gsyVideoPlayer-armv7a:8.1.2'
|
||||
implementation 'com.shuyu:gsyVideoPlayer-arm64:8.1.2'
|
||||
implementation 'com.shuyu:gsyVideoPlayer-x64:8.1.2'
|
||||
implementation 'com.shuyu:gsyVideoPlayer-x86:8.1.2'
|
||||
}
|
||||
|
|
|
@ -351,6 +351,18 @@ public class Configurations {
|
|||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putBoolean("isCustomLogo", b).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否使用软解码
|
||||
* @return
|
||||
*/
|
||||
public boolean isSoftDecode(){
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getBoolean("isSoftDecode", false);
|
||||
}
|
||||
|
||||
public void isSoftDecodeSave(Boolean b){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putBoolean("isSoftDecode", b).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* taxiApp开始运行时间
|
||||
* @return
|
||||
|
@ -375,16 +387,28 @@ public class Configurations {
|
|||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("endRunTime", startTime).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* taxiApp每次启动的总运行时间
|
||||
* @return
|
||||
*/
|
||||
public Long sumRunTime(){
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("sumRunTime",0);
|
||||
}
|
||||
|
||||
public void sumRunTimeSave(long runtime){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("sumRunTime", runtime).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* taxiApp当天总的运行时间
|
||||
* @return
|
||||
*/
|
||||
public long sumRunTime(){
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("sumRunTime",0L);
|
||||
public Long todaySumRunTime(){
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("todaySumRunTime",0);
|
||||
}
|
||||
|
||||
public void sumRunTimeSave(Long startTime){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("sumRunTime", startTime).apply();
|
||||
public void todaySumRunTimeSave(long runtime){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("todaySumRunTime", runtime).apply();
|
||||
}
|
||||
|
||||
public String runtimeJsonString(){
|
||||
|
@ -396,6 +420,48 @@ public class Configurations {
|
|||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putString("runtimeJsonString", s).apply();
|
||||
}
|
||||
|
||||
public String logSummaryJsonString(){
|
||||
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getString("logSummaryJsonString", "");
|
||||
}
|
||||
|
||||
public void logSummaryJsonStringSave(String s){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putString("logSummaryJsonString", s).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* taxiApp当天第一次运行时间
|
||||
* @return
|
||||
*/
|
||||
public long firstRunTime(){
|
||||
long defaultValue = System.currentTimeMillis();
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getLong("firstRunTime",defaultValue);
|
||||
}
|
||||
|
||||
public void firstRunTimeSave(Long runTime){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putLong("firstRunTime", runTime).apply();
|
||||
}
|
||||
|
||||
/**
|
||||
* 日志概要上传的周期,默认一天传一次,单位分钟
|
||||
* @return
|
||||
*/
|
||||
public int logInterval(){
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getInt("logInterval", 0);
|
||||
}
|
||||
|
||||
public void logIntervalSave(int logInterval){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putInt("logInterval", logInterval).apply();
|
||||
}
|
||||
|
||||
public String progressList(){
|
||||
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getString("progressList", "");
|
||||
}
|
||||
|
||||
public void progressListSave(String s){
|
||||
context.getSharedPreferences("config", Context.MODE_PRIVATE).edit().putString("progressList", s).apply();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import cn.trans88.taxiappkotlin.logic.dao.DaoSession
|
|||
import cn.trans88.taxiappkotlin.logic.dao.HelperDaoDB
|
||||
import cn.trans88.taxiappkotlin.logic.exception.CrashHandler
|
||||
import cn.trans88.taxiappkotlin.logic.model.Advertise
|
||||
import cn.trans88.taxiappkotlin.logic.model.AdvertiseProcess
|
||||
import cn.trans88.taxiappkotlin.logic.model.BackgroundType
|
||||
import cn.trans88.taxiappkotlin.logic.model.Regions
|
||||
import cn.trans88.taxiappkotlin.logic.network.JoeyDownloadManager
|
||||
|
@ -26,14 +27,20 @@ import cn.trans88.taxiappkotlin.util.KuroTimer
|
|||
import cn.trans88.taxiappkotlin.util.YoungUtil
|
||||
import com.facebook.stetho.Stetho
|
||||
import com.google.gson.Gson
|
||||
import com.shuyu.gsyvideoplayer.player.IjkPlayerManager
|
||||
import com.shuyu.gsyvideoplayer.player.PlayerFactory
|
||||
import com.shuyu.gsyvideoplayer.utils.GSYVideoType
|
||||
import com.trs88.kurolibrary.log.*
|
||||
import com.trs88.kurolibrary.restful.retrofit.KuroApiFactory
|
||||
import com.zhouyou.http.EasyHttp
|
||||
import io.reactivex.plugins.RxJavaPlugins
|
||||
import tv.danmaku.ijk.media.player.IjkMediaPlayer
|
||||
import java.io.*
|
||||
import java.util.*
|
||||
import java.util.concurrent.CopyOnWriteArrayList
|
||||
import kotlin.collections.ArrayList
|
||||
import kotlin.collections.HashMap
|
||||
import kotlin.collections.HashSet
|
||||
|
||||
class TaxiApp:Application() {
|
||||
|
||||
|
@ -62,12 +69,16 @@ class TaxiApp:Application() {
|
|||
val timerTaskMap = HashMap<String,kotlin.collections.ArrayList<TimerTask>>()
|
||||
//存储定时广告的列表
|
||||
var timedAds:ArrayList<Advertise> = ArrayList()
|
||||
//存储未上传成功的下载进度
|
||||
var processList:HashSet<AdvertiseProcess> = HashSet()
|
||||
var activity:PlayActivity? = null
|
||||
|
||||
//gps日志定时器
|
||||
var gpsTimer: Timer? = null
|
||||
//播放日志定时器
|
||||
var playerLogTimer: Timer? = null
|
||||
//存储静止点坐标定时器
|
||||
var quietGpsTimer: Timer? = null
|
||||
//播放日志摘要定时器
|
||||
var playerLogSummaryTimer: Timer? = null
|
||||
|
||||
var testCount = 0
|
||||
val TAG = "TaxiApp"
|
||||
|
@ -75,7 +86,12 @@ class TaxiApp:Application() {
|
|||
// lateinit var listener:Player.Listener
|
||||
// var player: SimpleExoPlayer? = null
|
||||
// lateinit var factory: ProgressiveMediaSource.Factory
|
||||
var sendLogTimes = 0
|
||||
|
||||
var isPositionRefresh = false
|
||||
|
||||
//是否软解码
|
||||
var isSoftDecode = false
|
||||
|
||||
companion object{
|
||||
private var instance:Application? =null
|
||||
|
@ -111,12 +127,18 @@ class TaxiApp:Application() {
|
|||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
instance = this
|
||||
PlayerFactory.setPlayManager(IjkPlayerManager::class.java) //ijk模式
|
||||
GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL)
|
||||
//关闭IJK日志
|
||||
IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT)
|
||||
|
||||
val helperDaoDB = HelperDaoDB(this, "taxi-app-database.db", null)
|
||||
val db = helperDaoDB.writableDatabase
|
||||
daoMaster = DaoMaster(db)
|
||||
daoSession = daoMaster.newSession()
|
||||
|
||||
|
||||
EasyHttp.init(this)
|
||||
//add by yzd @20211130 用config替换原有的配置文件
|
||||
Configurations.config(this).init();
|
||||
//初始化异常捕捉 //yzd 注释于20211110
|
||||
|
|
|
@ -72,6 +72,11 @@ object Repository {
|
|||
currentSyncTime = syncTime
|
||||
}
|
||||
|
||||
fun cancelTimer(){
|
||||
kuroTimer.cancel()
|
||||
kuroTimer.purge()
|
||||
}
|
||||
|
||||
fun getAdvertiseTEST(): Advertise? {
|
||||
synchronized(TaxiApp::class.java){
|
||||
val list = myListMap[getTestPlayLevels()]
|
||||
|
@ -90,6 +95,7 @@ object Repository {
|
|||
}
|
||||
|
||||
fun getTestPlayCircularList(): MutableList<Advertise>? {
|
||||
"getTestPlayCircularList".logd()
|
||||
//#edit by ljh @2023/2/23
|
||||
//如果正在播放的是多时段的定时广告,则返回定时广告的播放列表,否则返回不定时的播放列表
|
||||
val taxiApp:TaxiApp = TaxiApp.instance() as TaxiApp
|
||||
|
@ -102,48 +108,6 @@ object Repository {
|
|||
return list
|
||||
}
|
||||
|
||||
fun getAdvertiseNext(): Advertise? {
|
||||
// return getPlayAdvertise(circularListMap[getPlayLevels()])
|
||||
val isTimedAdvertise = Configurations.config(taxiApp.activity).isTimedAdvertise
|
||||
// val advertise = getNextPlayAdvertise(myListMap[getTestPlayLevels()])
|
||||
val advertise = if (isTimedAdvertise){
|
||||
getNextPlayAdvertise(taxiApp.timedAds)
|
||||
} else {
|
||||
getNextPlayAdvertise(myListMap[getTestPlayLevels()])
|
||||
}
|
||||
"getAdvertiseNext() -> advertise:${advertise}".loge()
|
||||
return advertise
|
||||
}
|
||||
|
||||
/**
|
||||
* 拿到将要播放的广告
|
||||
*/
|
||||
private fun getNextPlayAdvertise(list: MutableList<Advertise>?): Advertise? {
|
||||
YoungUtil.YoungLog("getNextPlayAdvertise")
|
||||
var nextIndex = currentListOrder + 1
|
||||
list?.let {
|
||||
if (it.isEmpty()) {
|
||||
return null
|
||||
}
|
||||
for (index in 0..list.size) {
|
||||
|
||||
//防止下标越界
|
||||
if (nextIndex >= list.size) {
|
||||
nextIndex = 0
|
||||
}
|
||||
|
||||
//YoungUtil.YoungLog("当前播放的广告list位数 : $currentListOrder")
|
||||
val advertise = list[nextIndex]
|
||||
|
||||
if (advertise.isAllowPlay()) {
|
||||
//YoungUtil.YoungLog("拿到广告花费时间 :${System.currentTimeMillis() - currentTimeMillis}")
|
||||
YoungUtil.YoungLog("拿到下一个广告:" + advertise.ad_id)
|
||||
return advertise
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -209,43 +173,6 @@ object Repository {
|
|||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 拿到将要播放的广告
|
||||
*/
|
||||
private fun getTestPlayAdvertiseByTempList(list: MutableList<Advertise>?): Advertise? {
|
||||
YoungUtil.YoungLog("getTestPlayAdvertiseByTempList")
|
||||
val currentTimeMillis = System.currentTimeMillis()
|
||||
list?.let {
|
||||
if (it.isEmpty()) {
|
||||
"播放列表是空的".loge()
|
||||
return null
|
||||
}
|
||||
//防止如果需求定点广告切换成普通广告,但是要继续上次普通广告的播放,然后现在的广告列表数改变,下标越界的情况
|
||||
// if(currentListOrder>=list.size){
|
||||
// currentListOrder=0
|
||||
// }
|
||||
|
||||
for (index in 0..list.size) {
|
||||
|
||||
//防止下标越界
|
||||
if (currentListOrder >= list.size) {
|
||||
currentListOrder = 0
|
||||
}
|
||||
|
||||
//YoungUtil.YoungLog("当前播放的广告list位数 : $currentListOrder")
|
||||
val advertise = list[currentListOrder]
|
||||
|
||||
if (advertise.isAllowPlay()) {
|
||||
//YoungUtil.YoungLog("拿到广告花费时间 :${System.currentTimeMillis() - currentTimeMillis}")
|
||||
YoungUtil.YoungLog("拿到广告:" + advertise.ad_id)
|
||||
return advertise
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 拿到应该播放的等级
|
||||
|
@ -451,7 +378,7 @@ object Repository {
|
|||
if (newAdvertise.isAllowPlay()) {
|
||||
//#edit by ljh @2023/2/23 myListMap集合只存放不是定时插播的广告
|
||||
if (!newAdvertise.isTimedAd){
|
||||
"广告准备ok 加入Mylist 广告ad_id:${newAdvertise.ad_id},是否是最后一个广告:${newAdvertise.isLast},belongto: ${newAdvertise.belongTo}".loge("Repository")
|
||||
"广告准备ok 加入Mylist 广告ad_id:${newAdvertise.ad_id},是否是最后一个广告:${newAdvertise.isLast},belongto: ${newAdvertise.belongTo}".loge()
|
||||
myListMap[newAdvertise.belongTo]?.add(newAdvertise)
|
||||
} else if(isTimedAdNow && newAdvertise.isTimedAd && newAdvertise.is_exclusive) {
|
||||
taxiApp.timedAds.forEach {
|
||||
|
@ -465,6 +392,8 @@ object Repository {
|
|||
// myListMap[newAdvertise.belongTo]?.add(newAdvertise)
|
||||
} else {
|
||||
YoungUtil.YoungLog("广告不满足不加入播放列表:${newAdvertise.ad_id}")
|
||||
//edit by ljh @2023/8/14
|
||||
taxiApp.daoAds.clear()
|
||||
}
|
||||
}
|
||||
} catch (e:Exception){
|
||||
|
@ -539,7 +468,7 @@ object Repository {
|
|||
if (playViewModel == null) {
|
||||
playViewModel = viewModel
|
||||
}
|
||||
refreshMyList()
|
||||
// refreshMyList()
|
||||
// refreshCircularList()
|
||||
// playViewModel?.refreshAdvertise(getAdvertiseTEST())
|
||||
playViewModel?.refreshAdvertise()
|
||||
|
@ -571,20 +500,28 @@ object Repository {
|
|||
currentListOrder = 0
|
||||
refreshMyList()
|
||||
// "sync:${Configurations.config(TaxiApp.instance()).sync()}".loge()
|
||||
if (Configurations.config(TaxiApp.instance()).sync() && getTestPlayLevels() == AdvertiseType.GROUP.ordinal) {
|
||||
//#edit by ljh @2023/12/12 定点刷新
|
||||
if (taxiApp.isPositionRefresh){
|
||||
//非同步播放或者定点播放
|
||||
YoungUtil.YoungLog("非同步刷新")
|
||||
playViewModel!!.refreshAdvertise()
|
||||
taxiApp.isPositionRefresh = false
|
||||
} else if (Configurations.config(TaxiApp.instance()).sync() && getTestPlayLevels() == AdvertiseType.GROUP.ordinal) {
|
||||
//设置同步播放并且是分组广告
|
||||
// if (Settings.sync) {
|
||||
val syncTimeModel = getSyncSingleTime(currentSyncTime, getTestPlayCircularList())
|
||||
YoungUtil.YoungLog("播放方式为同步播放,同步时间:${syncTimeModel.delay}=============================================")
|
||||
val currentTimeMillis = System.currentTimeMillis()
|
||||
val advertise = getAdvertiseTEST()
|
||||
// val advertise = getAdvertiseTEST()
|
||||
val getAdvertiseSyncTime = syncTimeModel.delay-(System.currentTimeMillis()-currentTimeMillis)
|
||||
YoungUtil.YoungLog("获取到广告的时间 校准同步时间:$getAdvertiseSyncTime")
|
||||
// handler.postDelayed(SyncTimerTask(playViewModel!!, advertise, syncTimeModel.currentPosition), syncTimeModel.delay)
|
||||
"即将播放的视频索引:${syncTimeModel.currentPosition}".logd()
|
||||
kuroTimer.cancel()
|
||||
kuroTimer.purge()
|
||||
kuroTimer = KuroTimer()
|
||||
kuroTimer.schedule(SyncTimerTask(playViewModel!!, advertise, syncTimeModel.currentPosition), syncTimeModel.delay)
|
||||
// kuroTimer.schedule(SyncTimerTask(playViewModel!!, advertise, syncTimeModel.currentPosition), syncTimeModel.delay)
|
||||
kuroTimer.schedule(SyncTimerTask(playViewModel!!, null, syncTimeModel.currentPosition), syncTimeModel.delay)
|
||||
} else {
|
||||
//非同步播放或者定点播放
|
||||
YoungUtil.YoungLog("播放方式为非同步播放")
|
||||
|
|
|
@ -14,10 +14,10 @@ import org.greenrobot.greendao.identityscope.IdentityScopeType;
|
|||
|
||||
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
|
||||
/**
|
||||
* Master of DAO (schema version 44): knows all DAOs.
|
||||
* Master of DAO (schema version 46): knows all DAOs.
|
||||
*/
|
||||
public class DaoMaster extends AbstractDaoMaster {
|
||||
public static final int SCHEMA_VERSION = 44;
|
||||
public static final int SCHEMA_VERSION = 46;
|
||||
|
||||
/** Creates underlying database table using DAOs. */
|
||||
public static void createAllTables(Database db, boolean ifNotExists) {
|
||||
|
@ -29,6 +29,7 @@ public class DaoMaster extends AbstractDaoMaster {
|
|||
PlayLoggerDao.createTable(db, ifNotExists);
|
||||
PositionAdvertiseDao.createTable(db, ifNotExists);
|
||||
RegionsDao.createTable(db, ifNotExists);
|
||||
RunTimeDataDao.createTable(db, ifNotExists);
|
||||
SanleAdvertiseDao.createTable(db, ifNotExists);
|
||||
ScheduleDao.createTable(db, ifNotExists);
|
||||
SectionDao.createTable(db, ifNotExists);
|
||||
|
@ -46,6 +47,7 @@ public class DaoMaster extends AbstractDaoMaster {
|
|||
PlayLoggerDao.dropTable(db, ifExists);
|
||||
PositionAdvertiseDao.dropTable(db, ifExists);
|
||||
RegionsDao.dropTable(db, ifExists);
|
||||
RunTimeDataDao.dropTable(db, ifExists);
|
||||
SanleAdvertiseDao.dropTable(db, ifExists);
|
||||
ScheduleDao.dropTable(db, ifExists);
|
||||
SectionDao.dropTable(db, ifExists);
|
||||
|
@ -77,6 +79,7 @@ public class DaoMaster extends AbstractDaoMaster {
|
|||
registerDaoClass(PlayLoggerDao.class);
|
||||
registerDaoClass(PositionAdvertiseDao.class);
|
||||
registerDaoClass(RegionsDao.class);
|
||||
registerDaoClass(RunTimeDataDao.class);
|
||||
registerDaoClass(SanleAdvertiseDao.class);
|
||||
registerDaoClass(ScheduleDao.class);
|
||||
registerDaoClass(SectionDao.class);
|
||||
|
|
|
@ -16,6 +16,7 @@ import cn.trans88.taxiappkotlin.logic.model.Order;
|
|||
import cn.trans88.taxiappkotlin.logic.model.PlayLogger;
|
||||
import cn.trans88.taxiappkotlin.logic.model.PositionAdvertise;
|
||||
import cn.trans88.taxiappkotlin.logic.model.Regions;
|
||||
import cn.trans88.taxiappkotlin.logic.model.RunTimeData;
|
||||
import cn.trans88.taxiappkotlin.logic.model.SanleAdvertise;
|
||||
import cn.trans88.taxiappkotlin.logic.model.Schedule;
|
||||
import cn.trans88.taxiappkotlin.logic.model.Section;
|
||||
|
@ -30,6 +31,7 @@ import cn.trans88.taxiappkotlin.logic.dao.OrderDao;
|
|||
import cn.trans88.taxiappkotlin.logic.dao.PlayLoggerDao;
|
||||
import cn.trans88.taxiappkotlin.logic.dao.PositionAdvertiseDao;
|
||||
import cn.trans88.taxiappkotlin.logic.dao.RegionsDao;
|
||||
import cn.trans88.taxiappkotlin.logic.dao.RunTimeDataDao;
|
||||
import cn.trans88.taxiappkotlin.logic.dao.SanleAdvertiseDao;
|
||||
import cn.trans88.taxiappkotlin.logic.dao.ScheduleDao;
|
||||
import cn.trans88.taxiappkotlin.logic.dao.SectionDao;
|
||||
|
@ -53,6 +55,7 @@ public class DaoSession extends AbstractDaoSession {
|
|||
private final DaoConfig playLoggerDaoConfig;
|
||||
private final DaoConfig positionAdvertiseDaoConfig;
|
||||
private final DaoConfig regionsDaoConfig;
|
||||
private final DaoConfig runTimeDataDaoConfig;
|
||||
private final DaoConfig sanleAdvertiseDaoConfig;
|
||||
private final DaoConfig scheduleDaoConfig;
|
||||
private final DaoConfig sectionDaoConfig;
|
||||
|
@ -67,6 +70,7 @@ public class DaoSession extends AbstractDaoSession {
|
|||
private final PlayLoggerDao playLoggerDao;
|
||||
private final PositionAdvertiseDao positionAdvertiseDao;
|
||||
private final RegionsDao regionsDao;
|
||||
private final RunTimeDataDao runTimeDataDao;
|
||||
private final SanleAdvertiseDao sanleAdvertiseDao;
|
||||
private final ScheduleDao scheduleDao;
|
||||
private final SectionDao sectionDao;
|
||||
|
@ -101,6 +105,9 @@ public class DaoSession extends AbstractDaoSession {
|
|||
regionsDaoConfig = daoConfigMap.get(RegionsDao.class).clone();
|
||||
regionsDaoConfig.initIdentityScope(type);
|
||||
|
||||
runTimeDataDaoConfig = daoConfigMap.get(RunTimeDataDao.class).clone();
|
||||
runTimeDataDaoConfig.initIdentityScope(type);
|
||||
|
||||
sanleAdvertiseDaoConfig = daoConfigMap.get(SanleAdvertiseDao.class).clone();
|
||||
sanleAdvertiseDaoConfig.initIdentityScope(type);
|
||||
|
||||
|
@ -124,6 +131,7 @@ public class DaoSession extends AbstractDaoSession {
|
|||
playLoggerDao = new PlayLoggerDao(playLoggerDaoConfig, this);
|
||||
positionAdvertiseDao = new PositionAdvertiseDao(positionAdvertiseDaoConfig, this);
|
||||
regionsDao = new RegionsDao(regionsDaoConfig, this);
|
||||
runTimeDataDao = new RunTimeDataDao(runTimeDataDaoConfig, this);
|
||||
sanleAdvertiseDao = new SanleAdvertiseDao(sanleAdvertiseDaoConfig, this);
|
||||
scheduleDao = new ScheduleDao(scheduleDaoConfig, this);
|
||||
sectionDao = new SectionDao(sectionDaoConfig, this);
|
||||
|
@ -138,6 +146,7 @@ public class DaoSession extends AbstractDaoSession {
|
|||
registerDao(PlayLogger.class, playLoggerDao);
|
||||
registerDao(PositionAdvertise.class, positionAdvertiseDao);
|
||||
registerDao(Regions.class, regionsDao);
|
||||
registerDao(RunTimeData.class, runTimeDataDao);
|
||||
registerDao(SanleAdvertise.class, sanleAdvertiseDao);
|
||||
registerDao(Schedule.class, scheduleDao);
|
||||
registerDao(Section.class, sectionDao);
|
||||
|
@ -154,6 +163,7 @@ public class DaoSession extends AbstractDaoSession {
|
|||
playLoggerDaoConfig.clearIdentityScope();
|
||||
positionAdvertiseDaoConfig.clearIdentityScope();
|
||||
regionsDaoConfig.clearIdentityScope();
|
||||
runTimeDataDaoConfig.clearIdentityScope();
|
||||
sanleAdvertiseDaoConfig.clearIdentityScope();
|
||||
scheduleDaoConfig.clearIdentityScope();
|
||||
sectionDaoConfig.clearIdentityScope();
|
||||
|
@ -193,6 +203,10 @@ public class DaoSession extends AbstractDaoSession {
|
|||
return regionsDao;
|
||||
}
|
||||
|
||||
public RunTimeDataDao getRunTimeDataDao() {
|
||||
return runTimeDataDao;
|
||||
}
|
||||
|
||||
public SanleAdvertiseDao getSanleAdvertiseDao() {
|
||||
return sanleAdvertiseDao;
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ object DaoUtil {
|
|||
private var mScheduleDao:ScheduleDao
|
||||
private var mRegionsDao:RegionsDao
|
||||
private var mContainerDao:ContainerDao
|
||||
private var mRunTimeDataDao:RunTimeDataDao
|
||||
|
||||
init {
|
||||
// helperDaoDB = HelperDaoDB(TaxiApp.instance(), DB_NAME, null)
|
||||
|
@ -39,6 +40,7 @@ object DaoUtil {
|
|||
mScheduleDao = daoSession.scheduleDao
|
||||
mRegionsDao = daoSession.regionsDao
|
||||
mContainerDao = daoSession.containerDao
|
||||
mRunTimeDataDao = daoSession.runTimeDataDao
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
|
@ -82,6 +84,11 @@ object DaoUtil {
|
|||
return mSanleAdvertiseDao
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun getRunTimeDao(): RunTimeDataDao {
|
||||
return mRunTimeDataDao
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun getPositionAdvertise(): PositionAdvertiseDao = mPositionAdvertiseDao
|
||||
|
||||
|
@ -203,4 +210,11 @@ object DaoUtil {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除已上传的运行时长数据
|
||||
*/
|
||||
fun deleteIsUpRunTimeData(){
|
||||
getRunTimeDao().queryBuilder().where(RunTimeDataDao.Properties.IsUpload.eq(1)).buildDelete().executeDeleteWithoutDetachingEntities()
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
package cn.trans88.taxiappkotlin.logic.dao;
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteStatement;
|
||||
|
||||
import org.greenrobot.greendao.AbstractDao;
|
||||
import org.greenrobot.greendao.Property;
|
||||
import org.greenrobot.greendao.internal.DaoConfig;
|
||||
import org.greenrobot.greendao.database.Database;
|
||||
import org.greenrobot.greendao.database.DatabaseStatement;
|
||||
|
||||
import cn.trans88.taxiappkotlin.logic.model.RunTimeData;
|
||||
|
||||
// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
|
||||
/**
|
||||
* DAO for table "RUN_TIME_DATA".
|
||||
*/
|
||||
public class RunTimeDataDao extends AbstractDao<RunTimeData, Long> {
|
||||
|
||||
public static final String TABLENAME = "RUN_TIME_DATA";
|
||||
|
||||
/**
|
||||
* Properties of entity RunTimeData.<br/>
|
||||
* Can be used for QueryBuilder and for referencing column names.
|
||||
*/
|
||||
public static class Properties {
|
||||
public final static Property AutoId = new Property(0, Long.class, "autoId", true, "_id");
|
||||
public final static Property CardId = new Property(1, String.class, "cardId", false, "CARD_ID");
|
||||
public final static Property SumRuntime = new Property(2, Long.class, "sumRuntime", false, "SUM_RUNTIME");
|
||||
public final static Property StartRuntime = new Property(3, Long.class, "startRuntime", false, "START_RUNTIME");
|
||||
public final static Property IsUpload = new Property(4, Integer.class, "isUpload", false, "IS_UPLOAD");
|
||||
}
|
||||
|
||||
|
||||
public RunTimeDataDao(DaoConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
public RunTimeDataDao(DaoConfig config, DaoSession daoSession) {
|
||||
super(config, daoSession);
|
||||
}
|
||||
|
||||
/** Creates the underlying database table. */
|
||||
public static void createTable(Database db, boolean ifNotExists) {
|
||||
String constraint = ifNotExists? "IF NOT EXISTS ": "";
|
||||
db.execSQL("CREATE TABLE " + constraint + "\"RUN_TIME_DATA\" (" + //
|
||||
"\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: autoId
|
||||
"\"CARD_ID\" TEXT," + // 1: cardId
|
||||
"\"SUM_RUNTIME\" INTEGER," + // 2: sumRuntime
|
||||
"\"START_RUNTIME\" INTEGER," + // 3: startRuntime
|
||||
"\"IS_UPLOAD\" INTEGER);"); // 4: isUpload
|
||||
}
|
||||
|
||||
/** Drops the underlying database table. */
|
||||
public static void dropTable(Database db, boolean ifExists) {
|
||||
String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"RUN_TIME_DATA\"";
|
||||
db.execSQL(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void bindValues(DatabaseStatement stmt, RunTimeData entity) {
|
||||
stmt.clearBindings();
|
||||
|
||||
Long autoId = entity.getAutoId();
|
||||
if (autoId != null) {
|
||||
stmt.bindLong(1, autoId);
|
||||
}
|
||||
|
||||
String cardId = entity.getCardId();
|
||||
if (cardId != null) {
|
||||
stmt.bindString(2, cardId);
|
||||
}
|
||||
|
||||
Long sumRuntime = entity.getSumRuntime();
|
||||
if (sumRuntime != null) {
|
||||
stmt.bindLong(3, sumRuntime);
|
||||
}
|
||||
|
||||
Long startRuntime = entity.getStartRuntime();
|
||||
if (startRuntime != null) {
|
||||
stmt.bindLong(4, startRuntime);
|
||||
}
|
||||
|
||||
Integer isUpload = entity.getIsUpload();
|
||||
if (isUpload != null) {
|
||||
stmt.bindLong(5, isUpload);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void bindValues(SQLiteStatement stmt, RunTimeData entity) {
|
||||
stmt.clearBindings();
|
||||
|
||||
Long autoId = entity.getAutoId();
|
||||
if (autoId != null) {
|
||||
stmt.bindLong(1, autoId);
|
||||
}
|
||||
|
||||
String cardId = entity.getCardId();
|
||||
if (cardId != null) {
|
||||
stmt.bindString(2, cardId);
|
||||
}
|
||||
|
||||
Long sumRuntime = entity.getSumRuntime();
|
||||
if (sumRuntime != null) {
|
||||
stmt.bindLong(3, sumRuntime);
|
||||
}
|
||||
|
||||
Long startRuntime = entity.getStartRuntime();
|
||||
if (startRuntime != null) {
|
||||
stmt.bindLong(4, startRuntime);
|
||||
}
|
||||
|
||||
Integer isUpload = entity.getIsUpload();
|
||||
if (isUpload != null) {
|
||||
stmt.bindLong(5, isUpload);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long readKey(Cursor cursor, int offset) {
|
||||
return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RunTimeData readEntity(Cursor cursor, int offset) {
|
||||
RunTimeData entity = new RunTimeData( //
|
||||
cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // autoId
|
||||
cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // cardId
|
||||
cursor.isNull(offset + 2) ? null : cursor.getLong(offset + 2), // sumRuntime
|
||||
cursor.isNull(offset + 3) ? null : cursor.getLong(offset + 3), // startRuntime
|
||||
cursor.isNull(offset + 4) ? null : cursor.getInt(offset + 4) // isUpload
|
||||
);
|
||||
return entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntity(Cursor cursor, RunTimeData entity, int offset) {
|
||||
entity.setAutoId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
|
||||
entity.setCardId(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
|
||||
entity.setSumRuntime(cursor.isNull(offset + 2) ? null : cursor.getLong(offset + 2));
|
||||
entity.setStartRuntime(cursor.isNull(offset + 3) ? null : cursor.getLong(offset + 3));
|
||||
entity.setIsUpload(cursor.isNull(offset + 4) ? null : cursor.getInt(offset + 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Long updateKeyAfterInsert(RunTimeData entity, long rowId) {
|
||||
entity.setAutoId(rowId);
|
||||
return rowId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getKey(RunTimeData entity) {
|
||||
if(entity != null) {
|
||||
return entity.getAutoId();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasKey(RunTimeData entity) {
|
||||
return entity.getAutoId() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final boolean isEntityUpdateable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
package cn.trans88.taxiappkotlin.logic.model;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class AdvertiseProcess {
|
||||
private String type = "notify_download_ad_progress";
|
||||
private String ad_id;
|
||||
|
@ -20,4 +22,19 @@ public class AdvertiseProcess {
|
|||
public void setProgress(String progress) {
|
||||
this.progress = progress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
AdvertiseProcess that = (AdvertiseProcess) o;
|
||||
return Objects.equals(type, that.type) &&
|
||||
Objects.equals(ad_id, that.ad_id) &&
|
||||
Objects.equals(progress, that.progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type, ad_id, progress);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package cn.trans88.taxiappkotlin.logic.model;
|
||||
|
||||
/**
|
||||
* @Author: LJH
|
||||
* @Time: 2023/12/13
|
||||
* @description:
|
||||
*/
|
||||
public class LogInterval {
|
||||
|
||||
private String id;
|
||||
private String task_id;
|
||||
private int interval;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTask_id() {
|
||||
return task_id;
|
||||
}
|
||||
|
||||
public void setTask_id(String task_id) {
|
||||
this.task_id = task_id;
|
||||
}
|
||||
|
||||
public int getInterval() {
|
||||
return interval;
|
||||
}
|
||||
|
||||
public void setInterval(int interval) {
|
||||
this.interval = interval;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package cn.trans88.taxiappkotlin.logic.model;
|
||||
|
||||
/**
|
||||
* @Author: LJH
|
||||
* @Time: 2023/12/13
|
||||
* @description:
|
||||
*/
|
||||
public class LogIntervalResponse extends SanleResponse{
|
||||
|
||||
private int interval;
|
||||
|
||||
public int getInterval() {
|
||||
return interval;
|
||||
}
|
||||
|
||||
public void setInterval(int interval) {
|
||||
this.interval = interval;
|
||||
}
|
||||
}
|
|
@ -9,5 +9,9 @@ package cn.trans88.taxiappkotlin.logic.model
|
|||
data class LogSummary(
|
||||
val ad_id: String,
|
||||
val play_num:Int,
|
||||
val duration:Long
|
||||
val duration:Long,
|
||||
val ad_type:Int,
|
||||
val media_url:String,
|
||||
val begin_play_ts:Long,
|
||||
val end_play_ts:Long
|
||||
)
|
||||
|
|
|
@ -125,4 +125,6 @@ public class PlayLogger implements Serializable {
|
|||
this.latitude = latitude;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
package cn.trans88.taxiappkotlin.logic.model;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
|
||||
import org.greenrobot.greendao.annotation.Entity;
|
||||
import org.greenrobot.greendao.annotation.Id;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.greenrobot.greendao.annotation.Generated;
|
||||
|
||||
/**
|
||||
* @Author: LJH
|
||||
* @Time: 2024/2/29
|
||||
* @description:
|
||||
*/
|
||||
@Entity
|
||||
public class RunTimeData implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Expose(serialize = false,deserialize = false)
|
||||
@Id(autoincrement = true)
|
||||
private Long autoId;
|
||||
|
||||
private String cardId; //设备id
|
||||
private Long sumRuntime; //上一次开机的总运行时长
|
||||
private Long startRuntime; //上一次开机的开始运行时间
|
||||
private Integer isUpload; //是否上传 0 未上传; 1 已上传
|
||||
@Generated(hash = 710149355)
|
||||
public RunTimeData(Long autoId, String cardId, Long sumRuntime,
|
||||
Long startRuntime, Integer isUpload) {
|
||||
this.autoId = autoId;
|
||||
this.cardId = cardId;
|
||||
this.sumRuntime = sumRuntime;
|
||||
this.startRuntime = startRuntime;
|
||||
this.isUpload = isUpload;
|
||||
}
|
||||
@Generated(hash = 1108588427)
|
||||
public RunTimeData() {
|
||||
}
|
||||
public Long getAutoId() {
|
||||
return this.autoId;
|
||||
}
|
||||
public void setAutoId(Long autoId) {
|
||||
this.autoId = autoId;
|
||||
}
|
||||
public String getCardId() {
|
||||
return this.cardId;
|
||||
}
|
||||
public void setCardId(String cardId) {
|
||||
this.cardId = cardId;
|
||||
}
|
||||
public Long getSumRuntime() {
|
||||
return this.sumRuntime;
|
||||
}
|
||||
public void setSumRuntime(Long sumRuntime) {
|
||||
this.sumRuntime = sumRuntime;
|
||||
}
|
||||
public Long getStartRuntime() {
|
||||
return this.startRuntime;
|
||||
}
|
||||
public void setStartRuntime(Long startRuntime) {
|
||||
this.startRuntime = startRuntime;
|
||||
}
|
||||
public Integer getIsUpload() {
|
||||
return this.isUpload;
|
||||
}
|
||||
public void setIsUpload(Integer isUpload) {
|
||||
this.isUpload = isUpload;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package cn.trans88.taxiappkotlin.logic.model;
|
||||
|
||||
/**
|
||||
* @Author: LJH
|
||||
* @Time: 2024/3/14
|
||||
* @description:
|
||||
*/
|
||||
public class SoftDecode {
|
||||
|
||||
private String id;
|
||||
private String task_id;
|
||||
private boolean isSoftDeCode;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getTask_id() {
|
||||
return task_id;
|
||||
}
|
||||
|
||||
public void setTask_id(String task_id) {
|
||||
this.task_id = task_id;
|
||||
}
|
||||
|
||||
public boolean isSoftDeCode() {
|
||||
return isSoftDeCode;
|
||||
}
|
||||
|
||||
public void setSoftDeCode(boolean softDeCode) {
|
||||
isSoftDeCode = softDeCode;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package cn.trans88.taxiappkotlin.logic.model;
|
||||
|
||||
/**
|
||||
* @Author: LJH
|
||||
* @Time: 2024/3/14
|
||||
* @description:
|
||||
*/
|
||||
public class SoftDecodeState extends SanleResponse{
|
||||
private Boolean softDecode = false;
|
||||
|
||||
public Boolean getSoftDecode() {
|
||||
return softDecode;
|
||||
}
|
||||
|
||||
public void setSoftDecode(Boolean softDecode) {
|
||||
this.softDecode = softDecode;
|
||||
}
|
||||
}
|
|
@ -16,8 +16,11 @@ import cn.trans88.taxiappkotlin.logic.Repository
|
|||
import cn.trans88.taxiappkotlin.logic.Repository.taxiApp
|
||||
import cn.trans88.taxiappkotlin.logic.dao.DaoUtil
|
||||
import cn.trans88.taxiappkotlin.logic.model.*
|
||||
import cn.trans88.taxiappkotlin.net.EasyHttpTool
|
||||
import cn.trans88.taxiappkotlin.net.OkHttpTool
|
||||
import cn.trans88.taxiappkotlin.play.RefreshPlayer
|
||||
import cn.trans88.taxiappkotlin.ui.play.PlayActivity
|
||||
import cn.trans88.taxiappkotlin.ui.play.isSendedLog
|
||||
import cn.trans88.taxiappkotlin.util.KuroTimer
|
||||
import cn.trans88.taxiappkotlin.util.KuroTimerTask
|
||||
import cn.trans88.taxiappkotlin.util.YoungUtil
|
||||
|
@ -32,6 +35,9 @@ import com.trs88.kurolibrary.execute.KuroExecutor
|
|||
import com.trs88.kurolibrary.file.KuroFileUtil
|
||||
import com.trs88.kurolibrary.file.PostFileCallBack
|
||||
import com.xixun.xy.conn.aidl.ConnService
|
||||
import com.zhouyou.http.EasyHttp
|
||||
import com.zhouyou.http.callback.SimpleCallBack
|
||||
import com.zhouyou.http.exception.ApiException
|
||||
import net.sysolution.taxiapp.ITaxiListener
|
||||
import okhttp3.*
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
|
@ -39,8 +45,11 @@ import okhttp3.RequestBody.Companion.asRequestBody
|
|||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.ThreadPoolExecutor
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.stream.Collectors
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
/**
|
||||
* @author TRS
|
||||
|
@ -63,6 +72,11 @@ object ConnManger {
|
|||
// val BaseUrl ="http://taxihub.cn:2346/"
|
||||
private var connService: ConnService? = null
|
||||
|
||||
@Volatile
|
||||
var sendPlayerLogSwitch: Boolean = false
|
||||
@Volatile
|
||||
var sendGPSLogSwitch: Boolean = false
|
||||
|
||||
/**
|
||||
* 注册App
|
||||
*/
|
||||
|
@ -173,6 +187,9 @@ object ConnManger {
|
|||
val registerToken = Configurations.config(TaxiApp.instance()).registerToken()
|
||||
//不是默认账号则存入conn
|
||||
if (!registerToken.equals(defaultToken)){
|
||||
if (isBindOrTransfer){
|
||||
isBindOrTransfer = false
|
||||
}
|
||||
"is not defaultToken,save message to conn.".loge()
|
||||
initConnectMessage()
|
||||
//测试平台要加
|
||||
|
@ -189,8 +206,11 @@ object ConnManger {
|
|||
}
|
||||
}
|
||||
|
||||
sendLogger()
|
||||
sendLocation()
|
||||
// sendLogger()
|
||||
// sendLocation()
|
||||
startPlayLogThread()
|
||||
startLocationThread()
|
||||
// debugLocation()
|
||||
//edit by ljh @2023/9/1
|
||||
WsManager.isRegister = false
|
||||
WsManager.initWebSocket()
|
||||
|
@ -203,9 +223,9 @@ object ConnManger {
|
|||
isRegisterSuccess = false
|
||||
// val timer = Timer()
|
||||
//验证conn的信息
|
||||
if (isBindOrTransfer){
|
||||
isBindOrTransfer = false
|
||||
}
|
||||
// if (isBindOrTransfer){
|
||||
// isBindOrTransfer = false
|
||||
// }
|
||||
DelayTimer.timer({ registerApp() }, 4000)
|
||||
}
|
||||
})
|
||||
|
@ -443,7 +463,13 @@ object ConnManger {
|
|||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, requestJson)
|
||||
|
||||
val okHttpClient = OkHttpClient()
|
||||
// val okHttpClient = OkHttpClient()
|
||||
//edit by ljh @2024/2/26
|
||||
val okHttpClient = OkHttpClient.Builder()
|
||||
.connectTimeout(80, TimeUnit.SECONDS)
|
||||
.readTimeout(80, TimeUnit.SECONDS)
|
||||
.writeTimeout(80, TimeUnit.SECONDS)
|
||||
.build()
|
||||
//YoungUtil.YoungLog("准备上传坐标,上传地址:${SaveSimpleData.getLogServiceUrl()}")
|
||||
YoungUtil.YoungLog("准备上传坐标")
|
||||
YoungUtil.YoungLog("sendLocation:${requestJson}")
|
||||
|
@ -457,8 +483,7 @@ object ConnManger {
|
|||
call.enqueue(object : Callback {
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
YoungUtil.YoungLog("上传坐标失败:${e.message}")
|
||||
//日志存卡里
|
||||
// taxiApp.saveLog("上传坐标失败,不删除失败的数据")
|
||||
|
||||
// DaoUtil.getLocationDao().deleteAll()
|
||||
}
|
||||
|
||||
|
@ -478,38 +503,129 @@ object ConnManger {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 发送坐标
|
||||
* 启动发送坐标线程
|
||||
*/
|
||||
fun sendLocation() {
|
||||
taxiApp.gpsTimer?.let {
|
||||
it.cancel()
|
||||
it.purge()
|
||||
}
|
||||
synchronized(ConnManger::class.java){
|
||||
//edit by yzd @20211201
|
||||
//if (Settings.gpsSwitch) {
|
||||
fun startLocationThread(){
|
||||
if (Configurations.config(TaxiApp.instance()).gpsSwitch()) {
|
||||
"gpsSwitch on".loge()
|
||||
taxiApp.gpsTimer = Timer()
|
||||
taxiApp.gpsTimer?.schedule(object : TimerTask() {
|
||||
override fun run() {
|
||||
sendLocationToWeb()
|
||||
// sendLocation()
|
||||
}
|
||||
}, 5000,10000)
|
||||
if (!sendGPSLogSwitch){
|
||||
thread {
|
||||
"启动发送坐标线程".logd()
|
||||
sendGPSLogSwitch = true
|
||||
while (true) {
|
||||
// val locations = DaoUtil.getLocations()
|
||||
val upLocations = DaoUtil.getLocationDao().queryBuilder().limit(100).build().list()
|
||||
"locations size:${upLocations.size}".logd()
|
||||
if (upLocations.isNotEmpty()){
|
||||
val requestJson: String = ProcessingCommands.gson.toJson(upLocations)
|
||||
"提交GPS数据 $requestJson".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, requestJson)
|
||||
val url = Configurations.config(TaxiApp.instance()).logServiceUrl() + "postGpsLocationLog"
|
||||
|
||||
try {
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
// .addHeader("Accept-Encoding", "gzip")
|
||||
.post(body)
|
||||
.build()
|
||||
val response = OkHttpTool.getInstance().client.newCall(request).execute()
|
||||
"response code:${response?.code}".logd()
|
||||
if (response.isSuccessful){
|
||||
"上传GPS日志成功 ".logd()
|
||||
DaoUtil.getLocationDao().deleteInTx(upLocations)
|
||||
"删除GPS日志成功,upLocations.size:${upLocations.size}".logd()
|
||||
|
||||
// if(upLocations.size < 250) {
|
||||
// Thread.sleep(8*60*1000L)
|
||||
// }
|
||||
} else {
|
||||
"gpsSwitch off".loge()
|
||||
taxiApp.gpsTimer = Timer()
|
||||
taxiApp.gpsTimer?.schedule(object : TimerTask() {
|
||||
override fun run() {
|
||||
sendLocationToWeb()
|
||||
// sendLocation()
|
||||
"上传GPS日志失败".loge()
|
||||
Thread.sleep(2*60*1000L)
|
||||
}
|
||||
}, 5000,60 * 60 * 1000)
|
||||
} catch (e: Exception) {
|
||||
"up logs failed,Exception:${e.message}".loge()
|
||||
Thread.sleep(2*60*1000L)
|
||||
}
|
||||
|
||||
} else {
|
||||
"gps数据小于0条不上传,2分钟后再次查询".logd()
|
||||
try {
|
||||
Thread.sleep(2*60*1000L)
|
||||
} catch (e: Exception) {
|
||||
"${e?.message}".loge()
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
"gps日志线程已经启动了,无需再次启动!".loge()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交GPS数据接口测试
|
||||
*/
|
||||
fun debugLocation(){
|
||||
"开始提交GPS数据接口测试".logd()
|
||||
thread {
|
||||
while (true){
|
||||
"提交GPS数据接口测试".logd()
|
||||
val locations = mutableListOf<Location>()
|
||||
for (i in 0 .. 1000){
|
||||
for (j in 0 .. 1000){}
|
||||
val location = Location().apply {
|
||||
timestamp = System.currentTimeMillis()
|
||||
longitude = 22.665534200203726
|
||||
latitude = 113.91975187778473
|
||||
bearing = 1F
|
||||
speed = 1F
|
||||
distance = 99F
|
||||
elapse = 2
|
||||
}
|
||||
locations.add(location)
|
||||
}
|
||||
val jsonStr = ProcessingCommands.gson.toJson(locations)
|
||||
"提交测试的GPS数据 $jsonStr".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, jsonStr)
|
||||
EasyHttp.post(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postGpsLocationLog")
|
||||
.readTimeOut(80*1000) //读超时80s,单位毫秒
|
||||
.writeTimeOut(80*1000) //写超时80s,单位毫秒
|
||||
.connectTimeout(80*1000) //连接超时80s,单位毫秒
|
||||
.headers("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.requestBody(body)
|
||||
.retryCount(5) //网络不好自动重试5次
|
||||
.retryDelay(600) //本次请求重试延迟时间600ms
|
||||
.syncRequest(true)//设置同步请求
|
||||
.execute(object : SimpleCallBack<String>(){
|
||||
override fun onError(e: ApiException?) {
|
||||
"上传测试的GPS数据失败:${e?.message}".loge()
|
||||
|
||||
}
|
||||
|
||||
override fun onSuccess(t: String?) {
|
||||
"上传测试的GPS数据成功 $t".loge()
|
||||
locations.clear()
|
||||
|
||||
}
|
||||
})
|
||||
try {
|
||||
Thread.sleep(3*60*1000L)
|
||||
}catch (e: Exception) {
|
||||
"${e?.message}".loge()
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -684,22 +800,34 @@ object ConnManger {
|
|||
*/
|
||||
fun sendLogsSummary(){
|
||||
YoungUtil.YoungLog("sendLogger in Thread is ${Looper.getMainLooper().thread === Thread.currentThread()}")
|
||||
thread {
|
||||
val playLoggers = DaoUtil.getPlayLoggers()
|
||||
if (playLoggers.isNotEmpty()) {
|
||||
//#edit by ljh @2023/6/5 改成大批量看是否能减小流量消耗
|
||||
val requestJson = ProcessingCommands.gson.toJson(playLoggers)
|
||||
|
||||
for (playLogger in playLoggers) {
|
||||
DaoUtil.getPlayLogger().delete(playLogger)
|
||||
"playLoggers size: ${playLoggers.size}".logd()
|
||||
val requestJson = getLogSummaryJson(playLoggers)
|
||||
if (requestJson.isNotEmpty()){
|
||||
EasyHttpTool.sendPlayLogToServer(requestJson)
|
||||
// sendLogsSummaryToWeb(requestJson)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val okHttpClient = OkHttpClient()
|
||||
YoungUtil.YoungLog("准备上传日志")
|
||||
/**
|
||||
* 上传日志概要到平台
|
||||
* @param jsonStr String
|
||||
*/
|
||||
var logsSummaryTimer:Timer? = null
|
||||
fun sendLogsSummaryToWeb(requestJson:String){
|
||||
val okHttpClient = OkHttpClient.Builder()
|
||||
.connectTimeout(80, TimeUnit.SECONDS)
|
||||
.readTimeout(80, TimeUnit.SECONDS)
|
||||
.writeTimeout(80, TimeUnit.SECONDS)
|
||||
.build()
|
||||
YoungUtil.YoungLog("准备上传日志摘要")
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, requestJson)
|
||||
YoungUtil.YoungLog("sendLogger:${requestJson}")
|
||||
val request: Request = Request.Builder()
|
||||
.url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLog") //要访问的链接
|
||||
.url(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLogPlus") //要访问的链接
|
||||
.addHeader("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.addHeader("Accept-Encoding", "gzip")
|
||||
.post(body)
|
||||
|
@ -709,46 +837,101 @@ object ConnManger {
|
|||
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
YoungUtil.YoungLog("上传日志失败:${e.message}")
|
||||
e.printStackTrace()
|
||||
"3s后重新上传日志摘要".loge()
|
||||
logsSummaryTimer?.let {
|
||||
it.cancel()
|
||||
it.purge()
|
||||
}
|
||||
logsSummaryTimer = null
|
||||
logsSummaryTimer = Timer()
|
||||
logsSummaryTimer?.schedule(object :TimerTask(){
|
||||
override fun run() {
|
||||
sendLogsSummaryToWeb(requestJson)
|
||||
}
|
||||
},3000L)
|
||||
}
|
||||
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
YoungUtil.YoungLog("上传日志成功:${response.message},response isSuccessful ${response.isSuccessful}${response.code}")
|
||||
|
||||
// if (response.code == 200) {
|
||||
// //#edit by ljh @2023/6/5 删除批量上传的日志
|
||||
// DaoUtil.getPlayLogger().deleteAll()
|
||||
// }
|
||||
"删除已上传的日志".logd()
|
||||
if (response.code == 200) {
|
||||
Configurations.config(taxiApp).logSummaryJsonStringSave("")
|
||||
} else {
|
||||
"服务器没回复200,重新上传日志摘要".loge()
|
||||
"3s后重新上传日志摘要".loge()
|
||||
logsSummaryTimer?.let {
|
||||
it.cancel()
|
||||
it.purge()
|
||||
}
|
||||
logsSummaryTimer = null
|
||||
logsSummaryTimer = Timer()
|
||||
logsSummaryTimer?.schedule(object :TimerTask(){
|
||||
override fun run() {
|
||||
sendLogsSummaryToWeb(requestJson)
|
||||
}
|
||||
},3000L)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取昨天的日志概要Json数据
|
||||
*/
|
||||
private fun getLogSummaryJson(playLoggers:List<PlayLogger>):String{
|
||||
// val cacheJson = Configurations.config(taxiApp).logSummaryJsonString()
|
||||
// if (!cacheJson.isNullOrEmpty()){
|
||||
// "cacheJson:$cacheJson".logd()
|
||||
// return cacheJson
|
||||
// }
|
||||
var jsonStr = ""
|
||||
if (!playLoggers.isNullOrEmpty()){
|
||||
val summaryList = ArrayList<LogSummary>()
|
||||
// val endPlayTime = playLoggers.map {
|
||||
// it.end_play_ts
|
||||
// }.max() ?: 0L
|
||||
// val beginPlayTime = playLoggers.map {
|
||||
// it.begin_play_ts
|
||||
// }.min() ?: 0L
|
||||
|
||||
val logsGroup = playLoggers.groupBy { it.ad_id }
|
||||
logsGroup.keys.forEach {
|
||||
val adId = it
|
||||
logsGroup.get(it)?.let { playLoggers ->
|
||||
val beginPlayTime = playLoggers.map { it.begin_play_ts }.filter { it > 1702192270 }.min() ?: 0L
|
||||
val endPlayTime = playLoggers.map { it.end_play_ts }.max() ?: 0L
|
||||
val playNums = playLoggers.size
|
||||
val playLogger = playLoggers.get(0)
|
||||
val ad_type = playLogger.ad_type
|
||||
val media_url = playLogger.media_url
|
||||
val duration = playLogger.duration
|
||||
val summary = LogSummary(adId,playNums,duration,ad_type,media_url,beginPlayTime,endPlayTime)
|
||||
"开始播放时间:$beginPlayTime,结束播放时间:$endPlayTime".loge()
|
||||
"添加一条日志摘要:${summary.toString()}".loge()
|
||||
summaryList.add(summary)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getLogSummaryJson(){
|
||||
val playLoggers = DaoUtil.getPlayLoggers()
|
||||
val maxEndPlayTs = playLoggers.map {
|
||||
it.end_play_ts
|
||||
}.max()
|
||||
val minBeginPlayTs = playLoggers.map {
|
||||
it.begin_play_ts
|
||||
}.min()
|
||||
|
||||
"开始播放时间:$minBeginPlayTs,最后一条日志的播放时间:$maxEndPlayTs".loge()
|
||||
if (playLoggers.isNotEmpty()) {
|
||||
for (playLogger in playLoggers) {
|
||||
DaoUtil.getPlayLogger().delete(playLogger)
|
||||
}
|
||||
|
||||
jsonStr = Gson().toJson(summaryList)
|
||||
// Configurations.config(taxiApp).logSummaryJsonStringSave(jsonStr)
|
||||
}
|
||||
"日志概要json:$jsonStr".loge()
|
||||
return jsonStr
|
||||
}
|
||||
|
||||
/**
|
||||
* 上报运行时长
|
||||
*/
|
||||
var runtimeTimer:Timer? = null
|
||||
fun sendRuntimeToWeb(){
|
||||
val jsonStr = Configurations.config(taxiApp).runtimeJsonString() ?: ""
|
||||
val okHttpClient = OkHttpClient()
|
||||
val okHttpClient = OkHttpClient.Builder()
|
||||
.connectTimeout(80, TimeUnit.SECONDS)
|
||||
.readTimeout(80, TimeUnit.SECONDS)
|
||||
.writeTimeout(80, TimeUnit.SECONDS)
|
||||
.build()
|
||||
YoungUtil.YoungLog("准备上报运行时长")
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, jsonStr)
|
||||
|
@ -764,12 +947,18 @@ object ConnManger {
|
|||
|
||||
override fun onFailure(call: Call, e: IOException) {
|
||||
YoungUtil.YoungLog("上传运行时长失败:${e.message}")
|
||||
Timer().schedule(object :TimerTask(){
|
||||
e.printStackTrace()
|
||||
"3s后重新上报运行时长".loge()
|
||||
runtimeTimer?.let {
|
||||
it.cancel()
|
||||
it.purge()
|
||||
}
|
||||
runtimeTimer = Timer()
|
||||
runtimeTimer?.schedule(object :TimerTask(){
|
||||
override fun run() {
|
||||
"重新上报运行时长".loge()
|
||||
sendRuntimeToWeb()
|
||||
}
|
||||
},5000)
|
||||
},3000L)
|
||||
}
|
||||
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
|
@ -777,30 +966,82 @@ object ConnManger {
|
|||
if (response.code == 200) {
|
||||
"清除上传成功的运行时长数据".loge()
|
||||
Configurations.config(taxiApp).runtimeJsonStringSave("")
|
||||
} else {
|
||||
"3s后重新上报运行时长".loge()
|
||||
runtimeTimer?.let {
|
||||
it.cancel()
|
||||
it.purge()
|
||||
}
|
||||
runtimeTimer = Timer()
|
||||
runtimeTimer?.schedule(object :TimerTask(){
|
||||
override fun run() {
|
||||
sendRuntimeToWeb()
|
||||
}
|
||||
},3000L)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 发送播放日志
|
||||
* 提交播放日志
|
||||
*/
|
||||
fun sendLogger() {
|
||||
taxiApp.playerLogTimer?.let {
|
||||
fun startPlayLogThread(){
|
||||
if (Configurations.config(TaxiApp.instance()).loggerSwitch()) {
|
||||
if (!sendPlayerLogSwitch){
|
||||
thread {
|
||||
"提交播放日志线程启动".logd()
|
||||
sendPlayerLogSwitch = true
|
||||
while (true){
|
||||
// val playerLogs = DaoUtil.getPlayLoggers()
|
||||
val playerLogs = DaoUtil.getPlayLogger().queryBuilder().limit(100).build().list()
|
||||
"播放日志数据数量:${playerLogs.size}".logd()
|
||||
if (playerLogs.size>10){
|
||||
EasyHttpTool.sendPlayLogToServer(playerLogs)
|
||||
} else {
|
||||
try {
|
||||
Thread.sleep(60*1000L)
|
||||
} catch (e: Exception){
|
||||
"Exception:${e.message}".loge()
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
"播放日志线程已经启动了,无需再次启动!".loge()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 定时发送播放日志摘要
|
||||
*/
|
||||
fun sendLogSummaryByInterval(interval:Int) {
|
||||
taxiApp.playerLogSummaryTimer?.let {
|
||||
it.cancel()
|
||||
it.purge()
|
||||
}
|
||||
//edit by yzd @20211201
|
||||
if (interval > 0) {
|
||||
//if (Settings.loggerSwitch) {
|
||||
if (Configurations.config(TaxiApp.instance()).loggerSwitch()) {
|
||||
taxiApp.playerLogTimer = Timer()
|
||||
taxiApp.playerLogTimer?.schedule(object :TimerTask(){
|
||||
taxiApp.playerLogSummaryTimer = Timer()
|
||||
taxiApp.playerLogSummaryTimer?.schedule(object :TimerTask(){
|
||||
override fun run() {
|
||||
sendLoggerToWeb()
|
||||
val playLoggers = DaoUtil.getPlayLoggers()
|
||||
"定时上传日志摘要,playLoggers size: ${playLoggers.size}".logd()
|
||||
val requestJson = getLogSummaryJson(playLoggers)
|
||||
if (requestJson.isNotEmpty() && logsSummaryTimer == null){
|
||||
EasyHttpTool.sendPlayLogToServer(requestJson)
|
||||
// sendLogsSummaryToWeb(requestJson)
|
||||
}
|
||||
},5000,30000)
|
||||
}
|
||||
},interval*60*1000L,interval*60*1000L)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -192,6 +192,7 @@ public class JoeyDownloadManager {
|
|||
downloadListener = new JoeyDownloadListener() {
|
||||
@Override
|
||||
protected void completed(BaseDownloadTask task) {
|
||||
YoungUtil.YoungLog("下载完成 --》 completed");
|
||||
YoungUtil.YoungLog("Download "
|
||||
+ task.getUrl()
|
||||
+ " successful, [Size/Speed ==> "
|
||||
|
@ -226,7 +227,7 @@ public class JoeyDownloadManager {
|
|||
advertiseProcess.setProgress(String.valueOf(100));
|
||||
String progressJson = new Gson().toJson(advertiseProcess);
|
||||
YoungUtil.YoungLog("广告:"+task.getTag()+",下载完成进度100");
|
||||
WsManager.INSTANCE.send(progressJson);
|
||||
// WsManager.INSTANCE.send(progressJson);
|
||||
|
||||
try {
|
||||
RefreshPlayer.refresh();
|
||||
|
@ -313,11 +314,12 @@ public class JoeyDownloadManager {
|
|||
advertiseProcess.setProgress(String.valueOf(100));
|
||||
String progressJson = new Gson().toJson(advertiseProcess);
|
||||
YoungUtil.YoungLog("广告:"+task.getTag().toString()+",下载完成进度100");
|
||||
WsManager.INSTANCE.send(progressJson);
|
||||
try{
|
||||
Thread.sleep(500);
|
||||
}catch (Exception e){}
|
||||
WsManager.INSTANCE.send(progressJson);
|
||||
// WsManager.INSTANCE.send(progressJson);
|
||||
|
||||
// try{
|
||||
// Thread.sleep(500);
|
||||
// }catch (Exception e){}
|
||||
// WsManager.INSTANCE.send(progressJson);
|
||||
}
|
||||
// if (progress%5==0){
|
||||
// AdvertiseProcess advertiseProcess =new AdvertiseProcess();
|
||||
|
|
|
@ -22,11 +22,11 @@ import cn.trans88.taxiappkotlin.ui.play.isOverdue
|
|||
import cn.trans88.taxiappkotlin.util.YoungUtil
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonParser
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.trs88.kurolibrary.execute.KuroExecutor
|
||||
import com.trs88.kurolibrary.file.KuroFileUtil
|
||||
import java.io.*
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
object ProcessingCommands {
|
||||
|
||||
|
@ -82,8 +82,13 @@ object ProcessingCommands {
|
|||
"get_advertise_order" -> sendOrderInfo(task,baseTask.type)
|
||||
"update_player_log_switch" -> playLoggerSwitch(task,baseTask.type)
|
||||
"update_gps_log_switch" -> gpsSwitch(task,baseTask.type)
|
||||
"soft_decode_switch" -> isSoftDecodeSwitch(task,baseTask.type)
|
||||
//获取播放日志开关状态
|
||||
"get_player_log_state" -> getLoggerSwitch(task,baseTask.type)
|
||||
"get_soft_decode" -> getSoftDecodeState(task,baseTask.type)
|
||||
//设置日志上传间隔
|
||||
"set_log_interval" -> setLogInterval(task,baseTask.type)
|
||||
"get_log_interval" -> getLogInterval(task,baseTask.type)
|
||||
//获取gps日志开关状态
|
||||
"get_gps_state" -> getGpsSwitch(task,baseTask.type)
|
||||
"get_today_runtime" -> getTodayRuntime(task,baseTask.type)
|
||||
|
@ -109,7 +114,9 @@ object ProcessingCommands {
|
|||
//edit by yzd @20211201
|
||||
//Settings.gpsSwitch =gpsSwitch.isTurn_on
|
||||
Configurations.config(TaxiApp.instance()).gpsSwitchSave(gpsSwitch.isTurn_on)
|
||||
ConnManger.sendLocation()
|
||||
// ConnManger.sendLocation()
|
||||
//edit by ljh @2024/2/29 定点数据上传优化
|
||||
ConnManger.startLocationThread()
|
||||
// if (gpsSwitch.isTurn_on){
|
||||
// ConnManger.sendLocation()
|
||||
// }
|
||||
|
@ -150,9 +157,8 @@ object ProcessingCommands {
|
|||
val sb = logException(e)
|
||||
YoungUtil.YoungLog("熙讯长连接执行命令出现异常: $sb")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// /**
|
||||
// *发送排正在播放的广告信息
|
||||
// */
|
||||
|
@ -176,6 +182,26 @@ object ProcessingCommands {
|
|||
sanleResponse.turn_on = turn_on
|
||||
val response = gson.toJson(sanleResponse)
|
||||
send(response)
|
||||
|
||||
//测试日志上传
|
||||
// ConnManger.sendLogsSummary()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取日志上传间隔
|
||||
*/
|
||||
private fun getLogInterval(task: String, type: String) {
|
||||
val baseResponse = gson.fromJson<BaseResponse>(task)
|
||||
val intervalResponse = LogIntervalResponse()
|
||||
val interval = Configurations.config(TaxiApp.instance()).logInterval()
|
||||
"getLogInterval-->日志上传间隔:$interval".logd()
|
||||
|
||||
intervalResponse.type = type
|
||||
intervalResponse.id = baseResponse.id
|
||||
intervalResponse.task_id = baseResponse.task_id
|
||||
intervalResponse.interval = interval
|
||||
val response = gson.toJson(intervalResponse)
|
||||
send(response)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -193,24 +219,50 @@ object ProcessingCommands {
|
|||
sanleResponse.turn_on = turn_on
|
||||
val response = gson.toJson(sanleResponse)
|
||||
send(response)
|
||||
|
||||
|
||||
//debug
|
||||
//测试软解码开关
|
||||
// taxiApp.isSoftDecode = !taxiApp.isSoftDecode
|
||||
|
||||
//测试gps
|
||||
// val lat2 = 22.665534200203726
|
||||
// val lon2 = 113.91975187778473
|
||||
// val lat3 = 23.665534200203726
|
||||
// val lon3 = 114.91975187778473
|
||||
// var isRun = true
|
||||
// Timer().schedule(object :TimerTask(){
|
||||
// override fun run() {
|
||||
// if (isRun){
|
||||
// "进圈".loge()
|
||||
// taxiApp.activity?.getViewModel()?.onLocationChanged(lon2,lat2,2.0f,66.0f,1)
|
||||
// isRun = false
|
||||
// } else {
|
||||
// "出圈".loge()
|
||||
// taxiApp.activity?.getViewModel()?.onLocationChanged(lon3,lat3,2.0f,66.0f,1)
|
||||
// isRun = true
|
||||
// }
|
||||
// }
|
||||
// },0,3000L)
|
||||
}
|
||||
|
||||
/**
|
||||
* 实时获取当天taixApp运行时间
|
||||
* 实时获取本次启动后的taixApp运行时间
|
||||
*/
|
||||
private fun getTodayRuntime(task: String, type: String) {
|
||||
val baseResponse = gson.fromJson<BaseResponse>(task)
|
||||
val sanleResponse = TodayRunTime()
|
||||
val startRuntime = Configurations.config(TaxiApp.instance()).startRunTime()
|
||||
val endRuntime = Configurations.config(TaxiApp.instance()).endRunTime()
|
||||
val sumRuntime = Configurations.config(TaxiApp.instance()).sumRunTime()
|
||||
val todayRuntime = endRuntime - startRuntime + sumRuntime
|
||||
"getTodayRuntime-->当前taxiApp运行时间:$todayRuntime".logd()
|
||||
|
||||
// val startRuntime = Configurations.config(TaxiApp.instance()).startRunTime()
|
||||
// val endRuntime = Configurations.config(TaxiApp.instance()).endRunTime()
|
||||
val todaySumRunTime = Configurations.config(TaxiApp.instance()).todaySumRunTime()
|
||||
"getTodayRuntime-->当天taxiApp运行时间:$todaySumRunTime".logd()
|
||||
// val sumTimeList = DaoUtil.getRunTimeDao().queryBuilder().where(
|
||||
// RunTimeDataDao.Properties.IsUpload.eq(0)).list()
|
||||
sanleResponse.type = type
|
||||
sanleResponse.id = baseResponse.id
|
||||
sanleResponse.task_id = baseResponse.task_id
|
||||
sanleResponse.runtime = todayRuntime
|
||||
sanleResponse.runtime = todaySumRunTime
|
||||
// sanleResponse.runtime = sumTimeList.size.toLong()
|
||||
val response = gson.toJson(sanleResponse)
|
||||
send(response)
|
||||
}
|
||||
|
@ -228,7 +280,65 @@ object ProcessingCommands {
|
|||
if (loggerSwitch.isTurn_on){
|
||||
// ConnManger.loggerTimer?.cancel()
|
||||
// ConnManger.loggerTimer?.purge()
|
||||
ConnManger.sendLogger()
|
||||
|
||||
// ConnManger.sendLogger()
|
||||
ConnManger.startPlayLogThread()
|
||||
}
|
||||
|
||||
baseResponse.type = type
|
||||
val response = gson.toJson(baseResponse)
|
||||
send(response)
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否设置软解码
|
||||
* @param task String
|
||||
* @param type String
|
||||
*/
|
||||
private fun isSoftDecodeSwitch(task: String, type: String) {
|
||||
val baseResponse = gson.fromJson<BaseResponse>(task)
|
||||
val loggerSwitch = gson.fromJson<SoftDecode>(task)
|
||||
//edit by ljh @2024/3/14
|
||||
Configurations.config(TaxiApp.instance()).isSoftDecodeSave(loggerSwitch.isSoftDeCode)
|
||||
taxiApp.isSoftDecode = loggerSwitch.isSoftDeCode
|
||||
"是否软解码:${taxiApp.isSoftDecode}".logd()
|
||||
|
||||
baseResponse.type = type
|
||||
val response = gson.toJson(baseResponse)
|
||||
send(response)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取软解码开关状态
|
||||
*/
|
||||
private fun getSoftDecodeState(task: String, type: String) {
|
||||
val baseResponse = gson.fromJson<BaseResponse>(task)
|
||||
val sanleResponse = SoftDecodeState()
|
||||
val turn_on = Configurations.config(TaxiApp.instance()).isSoftDecode()
|
||||
"getSoftDecodeState --> 当前软解码开关状态开关状态:$turn_on".logd()
|
||||
|
||||
sanleResponse.type = type
|
||||
sanleResponse.id = baseResponse.id
|
||||
sanleResponse.task_id = baseResponse.task_id
|
||||
sanleResponse.softDecode = turn_on
|
||||
val response = gson.toJson(sanleResponse)
|
||||
send(response)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 设置日志上传周期
|
||||
*/
|
||||
private fun setLogInterval(task: String, type: String) {
|
||||
val baseResponse = gson.fromJson<BaseResponse>(task)
|
||||
val loggerInterval = gson.fromJson<LogInterval>(task)
|
||||
"设置上传日志周期:${loggerInterval.interval}".logd()
|
||||
//edit by yzd @20211201
|
||||
//Settings.loggerSwitch = loggerSwitch.isTurn_on
|
||||
Configurations.config(TaxiApp.instance()).loggerSwitchSave(true)
|
||||
if (loggerInterval.interval > -1){
|
||||
Configurations.config(TaxiApp.instance()).logIntervalSave(loggerInterval.interval)
|
||||
// ConnManger.sendLogSummaryByInterval(loggerInterval.interval)
|
||||
}
|
||||
|
||||
baseResponse.type = type
|
||||
|
@ -250,6 +360,7 @@ object ProcessingCommands {
|
|||
beatTimer!!.cancel()
|
||||
beatTimer!!.purge()
|
||||
beatTimer = null
|
||||
|
||||
}
|
||||
|
||||
beatTimer = Timer()
|
||||
|
@ -292,6 +403,22 @@ object ProcessingCommands {
|
|||
* 发送所有广告信息
|
||||
*/
|
||||
private fun sendAllAdvertiseInfo(task: String, type: String) {
|
||||
//提交未上传成功的下载进度
|
||||
try {
|
||||
val progressListJson = Configurations.config(taxiApp).progressList()
|
||||
if (!progressListJson.isNullOrEmpty()){
|
||||
"progressListJson:$progressListJson".logd()
|
||||
val progressList = gson.fromJson<AdvertiseProcess>(progressListJson,object : TypeToken<Set<AdvertiseProcess>>(){}.type) as HashSet<AdvertiseProcess>
|
||||
for (advertiseProcess in progressList) {
|
||||
send(gson.toJson(advertiseProcess))
|
||||
}
|
||||
Configurations.config(taxiApp).progressListSave("")
|
||||
taxiApp.processList.clear()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
"exception:${e?.message}".loge()
|
||||
}
|
||||
|
||||
val baseResponse = gson.fromJson<BaseResponse>(task)
|
||||
|
||||
val positionAdvertises = DaoUtil.getPositionAdvertise().loadAll()
|
||||
|
@ -364,33 +491,6 @@ object ProcessingCommands {
|
|||
private fun clearAdvertiseOrder(task: String, type: String?) {
|
||||
val advertiseOrder = gson.fromJson<AdvertiseOrder>(task)
|
||||
"clearAdvertiseOrder".logd()
|
||||
//日志存卡里
|
||||
// taxiApp.saveLog("收到了清空排序指令...")
|
||||
//Settings.advertiseOrder = ""
|
||||
//edit by ljh @2023/8/9/1
|
||||
//三分钟内收到两次清除排序才会清除排序,防止排序被清除
|
||||
// taxiApp.isDoubleClearOrder += 1
|
||||
// if(taxiApp.isDoubleClearOrder < 2){
|
||||
// "没有点击两次清空排序,开始计时三分钟".logd()
|
||||
// taxiApp.clearOrderTimer.schedule(object :TimerTask(){
|
||||
// override fun run() {
|
||||
// try {
|
||||
// taxiApp.isDoubleClearOrder = 0
|
||||
// "三分钟时间到,isDoubleClearOrder重置".logd()
|
||||
// } catch (e:java.lang.Exception){
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// }
|
||||
// },3*60*1000L)
|
||||
// } else {
|
||||
// "点击了两次清空排序,取消三分钟计时并清空排序".logd()
|
||||
// taxiApp.clearOrderTimer.cancel()
|
||||
// taxiApp.clearOrderTimer.purge()
|
||||
// taxiApp.clearOrderTimer = Timer()
|
||||
// Configurations.config(TaxiApp.instance()).advertiseOrderSave("")
|
||||
// taxiApp.isDoubleClearOrder = 0
|
||||
// RefreshPlayer.refresh()
|
||||
// }
|
||||
|
||||
//edit by ljh @2023/8/22
|
||||
// taxiApp.saveLog("clearAdvertiseOrder,清除了广告排序")
|
||||
|
@ -406,7 +506,6 @@ object ProcessingCommands {
|
|||
|
||||
RefreshPlayer.refresh()
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -748,6 +847,12 @@ object ProcessingCommands {
|
|||
sanleResponse.type = type
|
||||
val response = gson.toJson(sanleResponse)
|
||||
send(response)
|
||||
|
||||
val advertiseProcess = AdvertiseProcess()
|
||||
advertiseProcess.ad_id = positionAdvertise.task_id
|
||||
advertiseProcess.progress = 100.toString()
|
||||
val progressJson = Gson().toJson(advertiseProcess)
|
||||
send(progressJson)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -933,7 +1038,7 @@ object ProcessingCommands {
|
|||
"${task_id}计次播放,该广告播放次数为${sanleAdvertise.play_numbers}".logd()
|
||||
}
|
||||
|
||||
if (time_section != null && time_section.size>0){
|
||||
if (time_section != null && time_section.size>0 && !isCount){
|
||||
isTimedAd = true
|
||||
"${task_id}是分时段播放广告".loge()
|
||||
}
|
||||
|
@ -964,6 +1069,12 @@ object ProcessingCommands {
|
|||
sanleResponse.type = type
|
||||
val response = gson.toJson(sanleResponse)
|
||||
send(response)
|
||||
|
||||
val advertiseProcess = AdvertiseProcess()
|
||||
advertiseProcess.ad_id = sanleAdvertise.task_id
|
||||
advertiseProcess.progress = 100.toString()
|
||||
val progressJson = Gson().toJson(advertiseProcess)
|
||||
send(progressJson)
|
||||
// send("服务器日志 ${Xixun.getCardId()} 添加广告 id =${sanleAdvertise.id}")
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import cn.trans88.taxiappkotlin.ext.logd
|
|||
import cn.trans88.taxiappkotlin.ext.loge
|
||||
import cn.trans88.taxiappkotlin.logic.Repository
|
||||
import cn.trans88.taxiappkotlin.logic.dao.DaoUtil
|
||||
import cn.trans88.taxiappkotlin.logic.model.AdvertiseProcess
|
||||
import cn.trans88.taxiappkotlin.logic.model.CurrentPlayAdvertises
|
||||
import cn.trans88.taxiappkotlin.util.KuroTimer
|
||||
import cn.trans88.taxiappkotlin.util.KuroTimerTask
|
||||
|
@ -357,7 +358,22 @@ object WsManager {
|
|||
// if(!(heartbeatContext.equals(msg))){
|
||||
// Repository.taxiApp.saveLog("回复服务器 $msg")
|
||||
// }
|
||||
|
||||
if (msg.contains("notify_download_ad_progress")) {
|
||||
"notify_download_ad_progress ----> $msg".logd()
|
||||
if (mWebSocket == null) {
|
||||
try {
|
||||
val process = Repository.taxiApp.gson.fromJson<AdvertiseProcess>(
|
||||
msg,
|
||||
AdvertiseProcess::class.java
|
||||
)
|
||||
Repository.taxiApp.processList.add(process)
|
||||
val json = Repository.taxiApp.gson.toJson(Repository.taxiApp.processList)
|
||||
Configurations.config(Repository.taxiApp).progressListSave(json)
|
||||
} catch (e:Exception){
|
||||
"exception:${e?.message}".loge()
|
||||
}
|
||||
}
|
||||
}
|
||||
mWebSocket?.send(msg)
|
||||
// mWebSocket?.send(msg) ?: throw IllegalArgumentException("mWebSocket is null not send!")
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package cn.trans88.taxiappkotlin.net
|
||||
|
||||
import com.zhouyou.http.model.ApiResult
|
||||
|
||||
/**
|
||||
*
|
||||
* @Author: LJH
|
||||
* @Time: 2024/2/28
|
||||
* @description:
|
||||
*/
|
||||
class EasyHttpResult<T> :ApiResult<T>(){
|
||||
|
||||
var message:String = ""
|
||||
|
||||
}
|
|
@ -0,0 +1,273 @@
|
|||
package cn.trans88.taxiappkotlin.net
|
||||
|
||||
import cn.trans88.taxiappkotlin.Configurations
|
||||
import cn.trans88.taxiappkotlin.TaxiApp
|
||||
import cn.trans88.taxiappkotlin.ext.logd
|
||||
import cn.trans88.taxiappkotlin.ext.loge
|
||||
import cn.trans88.taxiappkotlin.logic.dao.AdvertiseDao
|
||||
import cn.trans88.taxiappkotlin.logic.dao.DaoUtil
|
||||
import cn.trans88.taxiappkotlin.logic.dao.RunTimeDataDao
|
||||
import cn.trans88.taxiappkotlin.logic.model.PlayLogger
|
||||
import cn.trans88.taxiappkotlin.logic.model.RunTimeData
|
||||
import cn.trans88.taxiappkotlin.logic.model.RuntimeJson
|
||||
import cn.trans88.taxiappkotlin.logic.network.ProcessingCommands
|
||||
import cn.trans88.taxiappkotlin.ui.advertise.AdvertiseType
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.zhouyou.http.EasyHttp
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.RequestBody
|
||||
import com.zhouyou.http.callback.SimpleCallBack
|
||||
import com.zhouyou.http.exception.ApiException
|
||||
import okhttp3.Request
|
||||
import java.util.stream.Collectors
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @Author: LJH
|
||||
* @Time: 2024/2/28
|
||||
* @description:
|
||||
*/
|
||||
object EasyHttpTool {
|
||||
|
||||
/**
|
||||
* 提交运行时长
|
||||
* @param runtimeJson String
|
||||
*/
|
||||
fun sendRunTimeToServer(runtimeJson: String){
|
||||
"sendRunTimeToServer run".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, runtimeJson)
|
||||
EasyHttp.post(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postRunningTimeLog")
|
||||
.readTimeOut(80*1000)
|
||||
.writeTimeOut(80*1000)
|
||||
.connectTimeout(80*1000)
|
||||
.headers("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.headers("Accept-Encoding", "gzip")
|
||||
.requestBody(body)
|
||||
.retryCount(5)//本次请求重试次数
|
||||
.retryDelay(600)//本次请求重试延迟时间600ms
|
||||
.execute(object :SimpleCallBack<String>(){
|
||||
override fun onError(e: ApiException?) {
|
||||
"上传运行时长失败:${e?.message}".loge()
|
||||
}
|
||||
|
||||
override fun onSuccess(t: String?) {
|
||||
"上传运行时长成功:${t}".loge()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交运行时长
|
||||
*/
|
||||
fun sendRunTimeToServer(){
|
||||
val sumTimeList = DaoUtil.getRunTimeDao().queryBuilder().where(
|
||||
RunTimeDataDao.Properties.IsUpload.eq(0)).list()
|
||||
"未提交的运行时长数量sumTimeList size: ${sumTimeList?.size}".logd()
|
||||
if (!sumTimeList.isNullOrEmpty()){
|
||||
|
||||
for (runTimeData in sumTimeList) {
|
||||
|
||||
sendRunLogToServer(runTimeData)
|
||||
|
||||
// val runtimeJson = RuntimeJson(runTimeData.cardId,runTimeData.sumRuntime,runTimeData.startRuntime)
|
||||
// val runtimeJsonStr = Gson().toJson(runtimeJson)
|
||||
// "提交运行时长sendRunTimeToServer:$runtimeJsonStr".logd()
|
||||
// val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
// val body = RequestBody.create(parse, runtimeJsonStr)
|
||||
|
||||
// EasyHttp.post(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postRunningTimeLog")
|
||||
// .readTimeOut(80*1000)
|
||||
// .writeTimeOut(80*1000)
|
||||
// .connectTimeout(80*1000)
|
||||
// .headers("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
// .headers("Accept-Encoding", "gzip")
|
||||
// .requestBody(body)
|
||||
// .retryCount(1)//本次请求重试次数
|
||||
// .retryDelay(1000)//本次请求重试延迟时间1000ms
|
||||
// .execute(object :SimpleCallBack<String>(){
|
||||
// override fun onError(e: ApiException?) {
|
||||
// "上传运行时长失败:${e?.message}".loge()
|
||||
// }
|
||||
//
|
||||
// override fun onSuccess(t: String?) {
|
||||
// "上传运行时长成功:${t}".loge()
|
||||
// runTimeData.isUpload = 1
|
||||
// DaoUtil.getRunTimeDao().update(runTimeData)
|
||||
// "将提交的runTimeData标记成已上传".logd()
|
||||
// }
|
||||
// })
|
||||
}
|
||||
|
||||
// val lists:List<RuntimeJson> = sumTimeList.map {
|
||||
// RuntimeJson(it.cardId,it.sumRuntime,it.startRuntime)
|
||||
// }
|
||||
|
||||
|
||||
// val runtimeJson = Gson().toJson(lists)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传1条运行日志
|
||||
*/
|
||||
fun sendRunLogToServer(runTimeData:RunTimeData){
|
||||
// val logJson = ProcessingCommands.gson.toJson(dbPlayerLogs)
|
||||
val runtimeJson = RuntimeJson(runTimeData.cardId,runTimeData.sumRuntime,runTimeData.startRuntime)
|
||||
val runtimeJsonStr = Gson().toJson(runtimeJson)
|
||||
"提交运行时长sendRunTimeToServer:$runtimeJsonStr".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, runtimeJsonStr)
|
||||
val url = Configurations.config(TaxiApp.instance()).logServiceUrl() + "postRunningTimeLog"
|
||||
|
||||
try {
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("Authorization","Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.addHeader("Accept-Encoding","gzip")
|
||||
.post(body)
|
||||
.build()
|
||||
val response = OkHttpTool.getInstance().client.newCall(request).execute()
|
||||
"response code:${response?.code}".logd()
|
||||
"response body:${response?.body?.string().toString()}".logd()
|
||||
if (response.isSuccessful){
|
||||
"上传运行时长成功".loge()
|
||||
runTimeData.isUpload = 1
|
||||
DaoUtil.getRunTimeDao().update(runTimeData)
|
||||
"将提交的runTimeData标记成已上传".logd()
|
||||
} else {
|
||||
"上传运行时长失败".loge()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
"上传运行时长失败:${e?.message}".loge()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 提交日志摘要
|
||||
* @param gpsJson String
|
||||
*/
|
||||
fun sendPlayLogToServer(logJson: String){
|
||||
"提交日志摘要 $logJson".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, logJson)
|
||||
EasyHttp.post(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLogPlus")
|
||||
.readTimeOut(80*1000)
|
||||
.writeTimeOut(80*1000)
|
||||
.connectTimeout(80*1000)
|
||||
.headers("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.headers("Accept-Encoding", "gzip")
|
||||
.requestBody(body)
|
||||
.retryCount(5) //本次请求重试次数
|
||||
.retryDelay(600) //本次请求重试延迟时间600ms
|
||||
.execute(object :SimpleCallBack<String>(){
|
||||
override fun onError(e: ApiException?) {
|
||||
"上传日志摘要失败:${e?.message}".loge()
|
||||
}
|
||||
|
||||
override fun onSuccess(t: String?) {
|
||||
"上传日志摘要成功 $t".loge()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 提交GPS数据
|
||||
* @param gpsJson String
|
||||
*/
|
||||
fun sendGPSToServer(gpsJson: String){
|
||||
"提交GPS数据 $gpsJson".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, gpsJson)
|
||||
EasyHttp.post(Configurations.config(TaxiApp.instance()).logServiceUrl() + "postGpsLocationLog")
|
||||
.readTimeOut(80*1000)
|
||||
.writeTimeOut(80*1000)
|
||||
.connectTimeout(80*1000)
|
||||
.headers("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.requestBody(body)
|
||||
.retryCount(5) //本次请求重试次数
|
||||
.retryDelay(600) //本次请求重试延迟时间600ms
|
||||
.syncRequest(true)//设置同步请求
|
||||
.execute(object :SimpleCallBack<String>(){
|
||||
override fun onError(e: ApiException?) {
|
||||
"上传GPS数据失败:${e?.message}".loge()
|
||||
}
|
||||
|
||||
override fun onSuccess(t: String?) {
|
||||
"上传GPS数据成功 $t".loge()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传100条播放日志
|
||||
*/
|
||||
fun sendPlayLogToServer(dbPlayerLogs:List<PlayLogger>){
|
||||
val logJson = ProcessingCommands.gson.toJson(dbPlayerLogs)
|
||||
"提交日志Json $logJson".logd()
|
||||
val parse = ("application/json;charset=UTF-8").toMediaTypeOrNull()
|
||||
val body = RequestBody.create(parse, logJson)
|
||||
val url = Configurations.config(TaxiApp.instance()).logServiceUrl() + "postPlayerLog"
|
||||
|
||||
try {
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.addHeader("Authorization","Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
.addHeader("Accept-Encoding","gzip")
|
||||
.post(body)
|
||||
.build()
|
||||
val response = OkHttpTool.getInstance().client.newCall(request).execute()
|
||||
"response code:${response?.code}".logd()
|
||||
"response body:${response?.body?.string().toString()}".logd()
|
||||
if (response.isSuccessful){
|
||||
"上传日志成功 ".logd()
|
||||
DaoUtil.getPlayLogger().deleteInTx(dbPlayerLogs)
|
||||
"删除日志成功".logd()
|
||||
} else {
|
||||
"上传日志失败".loge()
|
||||
Thread.sleep(60*1000L)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
"提交失败Exception:${e.message}".loge()
|
||||
Thread.sleep(60*1000L)
|
||||
}
|
||||
|
||||
|
||||
// EasyHttp.post(url)
|
||||
// .readTimeOut(80*1000)
|
||||
// .writeTimeOut(80*1000)
|
||||
// .connectTimeout(80*1000)
|
||||
// .headers("Authorization", "Bearer ${Configurations.config(TaxiApp.instance()).appToken()}")
|
||||
// .headers("Accept-Encoding", "gzip")
|
||||
// .requestBody(body)
|
||||
// .retryCount(5) //本次请求重试次数
|
||||
// .retryDelay(600) //本次请求重试延迟时间600ms
|
||||
// .syncRequest(true)//设置同步请求
|
||||
// .execute(object :SimpleCallBack<String>(){
|
||||
// override fun onError(e: ApiException?) {
|
||||
// "上传日志失败:${e?.message}".loge()
|
||||
// try {
|
||||
// Thread.sleep(60*1000L)
|
||||
// } catch (e: Exception){
|
||||
// "Exception:${e.message}".loge()
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// override fun onSuccess(t: String?) {
|
||||
// "上传日志成功 $t".loge()
|
||||
// DaoUtil.getPlayLogger().deleteInTx(tenPlayLogs)
|
||||
// "删除日志成功".loge()
|
||||
// }
|
||||
// })
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
package cn.trans88.taxiappkotlin.net;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.SSLSession;
|
||||
|
||||
import okhttp3.Callback;
|
||||
import okhttp3.Dns;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
|
||||
public class OkHttpTool {
|
||||
private OkHttpClient client;
|
||||
private volatile static OkHttpTool instance;
|
||||
|
||||
public static OkHttpTool getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (OkHttpTool.class) {
|
||||
if (instance == null) {
|
||||
instance = new OkHttpTool();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
private OkHttpTool() {
|
||||
client = new OkHttpClient.Builder()
|
||||
.connectTimeout(80, TimeUnit.SECONDS)
|
||||
.readTimeout(80,TimeUnit.SECONDS)
|
||||
.writeTimeout(80,TimeUnit.SECONDS)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送异步请求
|
||||
* @param url
|
||||
* @param callback
|
||||
*/
|
||||
public void sendRequest(String url, Callback callback){
|
||||
Request request = new Request.Builder()
|
||||
.url(url).build();
|
||||
client.newCall(request).enqueue(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送同步请求
|
||||
* @param url
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public Response sendSyncRequest(String url) throws IOException {
|
||||
Request request = new Request.Builder().url(url).build();
|
||||
return client.newCall(request).execute();
|
||||
}
|
||||
|
||||
public OkHttpClient getClient(){
|
||||
return client;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package cn.trans88.taxiappkotlin.ui.play;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
|
||||
|
||||
import cn.trans88.taxiappkotlin.R;
|
||||
|
||||
/**
|
||||
* 无任何控制ui的播放
|
||||
* Created by guoshuyu on 2017/8/6.
|
||||
*/
|
||||
public class EmptyControlVideo extends StandardGSYVideoPlayer {
|
||||
|
||||
public EmptyControlVideo(Context context, Boolean fullFlag) {
|
||||
super(context, fullFlag);
|
||||
}
|
||||
|
||||
public EmptyControlVideo(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public EmptyControlVideo(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLayoutId() {
|
||||
return R.layout.empty_control_video;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void touchSurfaceMoveFullLogic(float absDeltaX, float absDeltaY) {
|
||||
super.touchSurfaceMoveFullLogic(absDeltaX, absDeltaY);
|
||||
//不给触摸快进,如果需要,屏蔽下方代码即可
|
||||
mChangePosition = false;
|
||||
|
||||
//不给触摸音量,如果需要,屏蔽下方代码即可
|
||||
mChangeVolume = false;
|
||||
|
||||
//不给触摸亮度,如果需要,屏蔽下方代码即可
|
||||
mBrightness = false;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// protected void touchDoubleUp() {
|
||||
// //super.touchDoubleUp();
|
||||
// //不需要双击暂停
|
||||
// }
|
||||
@Override
|
||||
protected void touchDoubleUp(MotionEvent e) {
|
||||
//super.touchDoubleUp();
|
||||
//不需要双击暂停
|
||||
}
|
||||
}
|
|
@ -33,8 +33,10 @@ import cn.trans88.taxiappkotlin.logic.dao.PlayLoggerDao
|
|||
import cn.trans88.taxiappkotlin.logic.gps.GpsReceiver
|
||||
import cn.trans88.taxiappkotlin.logic.model.Advertise
|
||||
import cn.trans88.taxiappkotlin.logic.model.Location
|
||||
import cn.trans88.taxiappkotlin.logic.model.RunTimeData
|
||||
import cn.trans88.taxiappkotlin.logic.model.RuntimeJson
|
||||
import cn.trans88.taxiappkotlin.logic.network.*
|
||||
import cn.trans88.taxiappkotlin.net.EasyHttpTool
|
||||
import cn.trans88.taxiappkotlin.play.RefreshPlayer
|
||||
import cn.trans88.taxiappkotlin.ui.advertise.AdvertiseType
|
||||
import cn.trans88.taxiappkotlin.ui.broadcaskReceiver.BusCallback
|
||||
|
@ -54,11 +56,16 @@ import com.permissionx.guolindev.PermissionX
|
|||
import com.trs88.kurolibrary.execute.KuroExecutor
|
||||
import com.trs88.kurolibrary.util.MainHandler
|
||||
import com.xixun.xy.conn.aidl.ConnService
|
||||
import com.zhouyou.http.EasyHttp
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import java.io.File
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.*
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
//未校时或没网时卡的初始时间存在为1970年的情况,
|
||||
// 时间至少大于1970-10-02 00:21:26才有可能已经校时完成
|
||||
const val NOVALIDTIME = 23646086L
|
||||
class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreenSizeListener {
|
||||
val CREATE_VIEW_MSG = 11111111
|
||||
|
||||
|
@ -77,6 +84,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
|
||||
private var saveRuntimeTimer:Timer? = null
|
||||
private var startSaveRunTimer:Timer? = null
|
||||
private var sumTimeTimer:Timer? = null
|
||||
|
||||
val handler = MyHandler(this)
|
||||
|
||||
|
@ -93,6 +101,8 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
super.onCreate(savedInstanceState)
|
||||
YoungUtil.YoungLog("playActivity onCreate")
|
||||
TaxiApp.isActive = true
|
||||
ConnManger.sendGPSLogSwitch = false
|
||||
ConnManger.sendPlayerLogSwitch = false
|
||||
//防止息屏
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
|
||||
|
@ -128,7 +138,9 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
|
||||
val loggerSwitch = Configurations.config(this).loggerSwitch()
|
||||
val gpsSwitch = Configurations.config(this).gpsSwitch()
|
||||
"loggerSwitch ------> $loggerSwitch,gpsSwitch -----------> $gpsSwitch".logd()
|
||||
val isSoftDecode = Configurations.config(this).isSoftDecode()
|
||||
taxiApp.isSoftDecode = isSoftDecode
|
||||
"loggerSwitch ------> $loggerSwitch,gpsSwitch -----------> $gpsSwitch,isSoftDecode----->$isSoftDecode".logd()
|
||||
|
||||
JoeyDownloadManager.getInstance().setCallBack(this)
|
||||
|
||||
|
@ -170,7 +182,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
|
||||
customView()
|
||||
|
||||
Thread(Runnable { clearOverdueLogger() }).start()
|
||||
// Thread(Runnable { clearOverdueLogger() }).start()
|
||||
val serverIntent = Intent(this, PlayServer::class.java)
|
||||
startService(serverIntent)
|
||||
//开机不管同步不同步直接先放
|
||||
|
@ -187,11 +199,68 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
}
|
||||
mLocationManager?.removeUpdates(getLocationListener())
|
||||
}
|
||||
saveStartTime()
|
||||
},30 * 1000)
|
||||
saveStartTimeThread()
|
||||
// testLocation()
|
||||
}
|
||||
|
||||
fun saveStartTimeThread(){
|
||||
thread {
|
||||
while (true) {
|
||||
var cacheStartTime:Long = configurations.startRunTime()
|
||||
var currentTime = System.currentTimeMillis()
|
||||
"saveStartTimeThread ---> 当前系统时间:currentTime:$currentTime".loge()
|
||||
"saveStartTimeThread ---> 上一次的启动时间:cacheStartTime:$cacheStartTime".loge()
|
||||
if (currentTime > NOVALIDTIME && currentTime > cacheStartTime) {
|
||||
//如果上一次启动时间和当前时间相比是第二天,重置当天的总运行时长,todaySunRuntime
|
||||
var dayType = DateUtil.getDaysDiff(currentTime,cacheStartTime)
|
||||
if (dayType != DayType.IS_SAME_DAY.ordinal){
|
||||
"第二天了,重置当天的运行时长".logd()
|
||||
configurations.todaySumRunTimeSave(0)
|
||||
}
|
||||
|
||||
//删除已提交的运行时长数据
|
||||
DaoUtil.deleteIsUpRunTimeData()
|
||||
|
||||
//如果上次缓存的总运行时长大于0,取出存到数据库中
|
||||
val cacheSumTime = configurations.sumRunTime()
|
||||
"cacheSumTime ---> 上一次的运行时长:cacheSumTime:$cacheSumTime".loge()
|
||||
|
||||
if (cacheSumTime > 0 && cacheStartTime > NOVALIDTIME){
|
||||
val cardId = configurations.cardId()
|
||||
val runTimeData = RunTimeData()
|
||||
runTimeData.cardId = cardId
|
||||
runTimeData.sumRuntime = cacheSumTime
|
||||
runTimeData.isUpload = 0
|
||||
runTimeData.startRuntime = cacheStartTime
|
||||
DaoUtil.getRunTimeDao().insert(runTimeData)
|
||||
}
|
||||
|
||||
|
||||
|
||||
//重新初始化startRunTime为当前启动时间,sumRuntime为0
|
||||
configurations.startRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0)
|
||||
//开启定时器,让sumRunTime累加
|
||||
startSaveSumTimer()
|
||||
|
||||
//提交未上传的运行时长数据
|
||||
EasyHttpTool.sendRunTimeToServer()
|
||||
//跳出循环
|
||||
break
|
||||
} else {
|
||||
"系统时间尚未校时,80s后重新获取系统时间".loge()
|
||||
try {
|
||||
Thread.sleep(80*1000)
|
||||
} catch (e:Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存开始运行时间
|
||||
*/
|
||||
|
@ -199,7 +268,8 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
var cacheStartTime:Long = configurations.startRunTime()
|
||||
var currentTime = System.currentTimeMillis()
|
||||
"saveStartTime ---> currentTime:$currentTime".loge()
|
||||
if (currentTime>23646086L){
|
||||
|
||||
if (currentTime > NOVALIDTIME && currentTime > cacheStartTime){
|
||||
|
||||
startSaveRunTimer?.let {
|
||||
it.purge()
|
||||
|
@ -210,13 +280,31 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
var dayType = DateUtil.getDaysDiff(currentTime,cacheStartTime)
|
||||
when(dayType){
|
||||
DayType.IS_OTHER_DAY.ordinal -> { //如果缓存的启动时间是三天前(或更久)了,或者为零,直接覆盖
|
||||
configurations.logSummaryJsonStringSave("")
|
||||
Thread(Runnable { clearOverdueLogger() }).start()
|
||||
isSendedLog = false
|
||||
sendLogInterval()
|
||||
"startRunTime,endRunTime初始化为:$currentTime".loge()
|
||||
configurations.startRunTimeSave(currentTime)
|
||||
configurations.endRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0L)
|
||||
configurations.firstRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0)
|
||||
configurations.runtimeJsonStringSave("")
|
||||
startRuntimeTimer()
|
||||
}
|
||||
DayType.IS_SAME_DAY.ordinal -> {//同一天重启
|
||||
|
||||
isSendedLog = false
|
||||
// val logSummaryJson = configurations.logSummaryJsonString()
|
||||
// if (!logSummaryJson.isNullOrEmpty()){
|
||||
// "同一天重启,之前的日志数据没传,重新上传".loge()
|
||||
// ConnManger.sendLogsSummary()
|
||||
// } else {
|
||||
// isSendedLog = false
|
||||
// }
|
||||
|
||||
sendLogInterval()
|
||||
|
||||
//先计算上次重启前的运行时间
|
||||
val lastSumTime = configurations.sumRunTime()
|
||||
val lastStartRuntime = configurations.startRunTime()
|
||||
|
@ -229,11 +317,15 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
"程序启动,目前运行时间(毫秒):${todaySumRuntime}".loge()
|
||||
|
||||
//测试上报接口
|
||||
// val runtimeJson = RuntimeJson(configurations.cardId(),todaySumRuntime,System.currentTimeMillis())
|
||||
// val runtimeJson = RuntimeJson(configurations.cardId(),todaySumRuntime,lastStartRuntime)
|
||||
// val jsonStr = Gson().toJson(runtimeJson)
|
||||
// "测试数据:$jsonStr".loge()
|
||||
|
||||
|
||||
// configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
|
||||
if (!configurations.runtimeJsonString().isNullOrEmpty()){
|
||||
ConnManger.sendRuntimeToWeb()
|
||||
}
|
||||
// if (!configurations.runtimeJsonString().isNullOrEmpty()){
|
||||
// ConnManger.sendRuntimeToWeb()
|
||||
// }
|
||||
|
||||
//保存新的开始运行时间,和结束时间
|
||||
configurations.startRunTimeSave(currentTime)
|
||||
|
@ -241,6 +333,8 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
startRuntimeTimer()
|
||||
}
|
||||
DayType.IS_SECOND_DAY.ordinal -> {
|
||||
// ConnManger.sendLogsSummary()
|
||||
sendLogInterval()
|
||||
//先计算上次重启前的运行时间
|
||||
val lastSumTime = configurations.sumRunTime()
|
||||
val lastStartRuntime = configurations.startRunTime()
|
||||
|
@ -251,19 +345,26 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
val yesterdaySumTime = lastRunTime + lastSumTime
|
||||
"程序启动,昨天运行时间(毫秒):${yesterdaySumTime}".loge()
|
||||
//提交昨天一整天的运行时间
|
||||
val runtimeJson = RuntimeJson(configurations.cardId(),yesterdaySumTime,System.currentTimeMillis())
|
||||
configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
|
||||
ConnManger.sendRuntimeToWeb()
|
||||
val firstRuntime = configurations.firstRunTime()
|
||||
val runtimeJson = RuntimeJson(configurations.cardId(),yesterdaySumTime,firstRuntime)
|
||||
// configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
|
||||
//edit by ljh on 2024/2/28
|
||||
//优化上传运行时长方式
|
||||
EasyHttpTool.sendRunTimeToServer(Gson().toJson(runtimeJson))
|
||||
// ConnManger.sendRuntimeToWeb()
|
||||
//保存新的开始运行时间,和结束时间
|
||||
configurations.startRunTimeSave(currentTime)
|
||||
configurations.endRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0L)
|
||||
configurations.firstRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0)
|
||||
startRuntimeTimer()
|
||||
}
|
||||
else -> {
|
||||
configurations.startRunTimeSave(currentTime)
|
||||
configurations.endRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0L)
|
||||
configurations.firstRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0)
|
||||
sendLogInterval()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -276,8 +377,60 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
},30*1000L,30*1000L)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时传日志摘要
|
||||
*/
|
||||
private fun sendLogInterval(){
|
||||
val logInterval = configurations.logInterval()
|
||||
"logInterval:$logInterval".logd()
|
||||
if (logInterval > 0){
|
||||
// ConnManger.sendLogSummaryByInterval(logInterval)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 启动计算运行时长的计时器
|
||||
*/
|
||||
private fun startSaveSumTimer(){
|
||||
sumTimeTimer?.purge()
|
||||
sumTimeTimer?.cancel()
|
||||
sumTimeTimer = Timer()
|
||||
"计算运行时长的计时器启动".logd()
|
||||
sumTimeTimer?.schedule(object : TimerTask(){
|
||||
override fun run() {
|
||||
|
||||
val startRuntime = configurations.startRunTime()
|
||||
val currentTime = System.currentTimeMillis()
|
||||
val currentType = DateUtil.getDaysDiff(currentTime,startRuntime)
|
||||
var cacheSumRunTime = configurations.sumRunTime()
|
||||
var cacheTodaySumRunTime = configurations.todaySumRunTime()
|
||||
if (currentType == DayType.IS_SECOND_DAY.ordinal){
|
||||
"当前时间已经是第二天了,记录一次".logd()
|
||||
val cardId = configurations.cardId()
|
||||
val rumTimeData = RunTimeData()
|
||||
rumTimeData.isUpload = 0
|
||||
rumTimeData.cardId = cardId
|
||||
rumTimeData.sumRuntime = cacheSumRunTime
|
||||
rumTimeData.startRuntime = startRuntime
|
||||
DaoUtil.getRunTimeDao().insert(rumTimeData)
|
||||
|
||||
//重新初始化startRunTime为当前启动时间,sumRuntime为0
|
||||
configurations.startRunTimeSave(currentTime)
|
||||
configurations.sumRunTimeSave(0)
|
||||
configurations.todaySumRunTimeSave(0)
|
||||
cacheTodaySumRunTime = 0
|
||||
cacheSumRunTime = 0
|
||||
}
|
||||
|
||||
//每30s累加一次
|
||||
"当前运行时长cacheSumRunTime:${cacheSumRunTime},累加30s".logd()
|
||||
configurations.sumRunTimeSave(cacheSumRunTime+30*1000L)
|
||||
configurations.todaySumRunTimeSave(cacheTodaySumRunTime+30*1000L)
|
||||
}
|
||||
},30*1000L,30*1000L)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -293,18 +446,44 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
override fun run() {
|
||||
val endRuntime = configurations.endRunTime()
|
||||
val startRuntime = configurations.startRunTime()
|
||||
val currentTime = System.currentTimeMillis()
|
||||
"RuntimeTimer --> currentEndRuntime:$endRuntime".loge()
|
||||
val type = DateUtil.getDaysDiff(endRuntime,startRuntime)
|
||||
val currentType = DateUtil.getDaysDiff(currentTime,startRuntime)
|
||||
val isSecond = DayType.IS_SECOND_DAY.ordinal == currentType
|
||||
// if (isSecond && Repository.taxiApp.sendLogTimes == 0) {
|
||||
// //当前时间被手动设置成第二天了,提交一次运行时长数据
|
||||
// isSendedLog = true
|
||||
// val lastRunTime = endRuntime - startRuntime
|
||||
// val yesterdayRuntime = configurations.sumRunTime() + lastRunTime
|
||||
// //提交昨天一整天的运行时间
|
||||
// val firstRuntime = configurations.firstRunTime()
|
||||
// val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,firstRuntime)
|
||||
// configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
|
||||
// ConnManger.sendRuntimeToWeb()
|
||||
//
|
||||
// //提交一次日志数据
|
||||
// ConnManger.sendLogsSummary()
|
||||
//
|
||||
// Repository.taxiApp.sendLogTimes = 1
|
||||
// }
|
||||
if (DayType.IS_SECOND_DAY.ordinal == type) {
|
||||
|
||||
// ConnManger.sendLogsSummary()
|
||||
|
||||
val lastRunTime = endRuntime - startRuntime
|
||||
val yesterdayRuntime = configurations.sumRunTime() + lastRunTime
|
||||
//提交昨天一整天的运行时间
|
||||
val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,System.currentTimeMillis())
|
||||
configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
|
||||
ConnManger.sendRuntimeToWeb()
|
||||
val firstRuntime = configurations.firstRunTime()
|
||||
val runtimeJson = RuntimeJson(configurations.cardId(),yesterdayRuntime,firstRuntime)
|
||||
// configurations.runtimeJsonStringSave(Gson().toJson(runtimeJson))
|
||||
// ConnManger.sendRuntimeToWeb()
|
||||
//edit by ljh on 2024/2/28
|
||||
EasyHttpTool.sendRunTimeToServer(Gson().toJson(runtimeJson))
|
||||
//保存新的开始运行时间,和结束时间
|
||||
configurations.startRunTimeSave(endRuntime)
|
||||
configurations.sumRunTimeSave(0L)
|
||||
configurations.firstRunTimeSave(endRuntime)
|
||||
configurations.sumRunTimeSave(0)
|
||||
}
|
||||
|
||||
configurations.endRunTimeSave(endRuntime+30*1000L)
|
||||
|
@ -351,6 +530,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
|
||||
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
|
||||
YoungUtil.YoungLog("bindService onServiceConnected")
|
||||
|
||||
connService = ConnService.Stub.asInterface(service)
|
||||
ConnManger.setConnService(connService)
|
||||
ConnManger.registerApp()
|
||||
|
@ -409,7 +589,7 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
val overdueTime = currentTimeMillis - 30 * 24 * 60 * 60 * 1000
|
||||
//lt < gt > ge >= le <=
|
||||
DaoUtil.getPlayLoggerDao().queryBuilder().where(PlayLoggerDao.Properties.Created_at.lt(overdueTime)).buildDelete().executeDeleteWithoutDetachingEntities()
|
||||
|
||||
"清除日志后,当前日志数量:${DaoUtil.getPlayLoggers().size}".logd()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -445,7 +625,6 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
busLayoutParams.width = Configurations.config(TaxiApp.instance()).screenSizeX() / 7
|
||||
busLayoutParams.height = Configurations.config(TaxiApp.instance()).screenSizeY()
|
||||
|
||||
|
||||
img_bus_top.visibility = View.VISIBLE
|
||||
|
||||
val program = File(TaxiApp.instance().filesDir, TaxiApp.instance().getString(string.dir_program))
|
||||
|
@ -495,9 +674,10 @@ class PlayActivity : AppCompatActivity(), NetworkCallback, BusCallback, OnScreen
|
|||
*/
|
||||
fun cancelCustomView(){
|
||||
YoungUtil.YoungLog("取消自定义显示,路线、左转右转等..")
|
||||
|
||||
runOnUiThread{
|
||||
ll_bus.visibility = View.GONE
|
||||
img_other_screen.visibility = View.GONE
|
||||
}
|
||||
|
||||
fl_play.apply {
|
||||
val logoView = this.findViewWithTag<View>("logo")
|
||||
|
|
|
@ -25,6 +25,7 @@ import cn.trans88.taxiappkotlin.TaxiApp
|
|||
import cn.trans88.taxiappkotlin.TaxiApp.Companion.HAOSHENG
|
||||
import cn.trans88.taxiappkotlin.ext.logd
|
||||
import cn.trans88.taxiappkotlin.ext.loge
|
||||
import cn.trans88.taxiappkotlin.logic.Repository
|
||||
import cn.trans88.taxiappkotlin.logic.model.Advertise
|
||||
import cn.trans88.taxiappkotlin.logic.model.BackgroundType
|
||||
import cn.trans88.taxiappkotlin.logic.model.TextInfo
|
||||
|
@ -37,6 +38,7 @@ import com.bumptech.glide.Glide
|
|||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.google.gson.Gson
|
||||
import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
|
||||
|
||||
import kotlinx.android.synthetic.main.activity_main.view.*
|
||||
import java.io.File
|
||||
|
@ -134,9 +136,23 @@ fun View.createView(context: Context, advertise: Advertise, seek: Int): View? {
|
|||
// YoungUtil.YoungLog("初始化视频控件耗时:${currentTimeMillis - System.currentTimeMillis()}")
|
||||
// video = jVideoView
|
||||
// }
|
||||
|
||||
if (Repository.taxiApp.isSoftDecode){
|
||||
"SoftDecode 使用的是软解码".logd()
|
||||
//ijk GSYPlayer
|
||||
val videoPlayer = EmptyControlVideo(context)
|
||||
videoPlayer.setUp(advertise.pathName,true,"")
|
||||
videoPlayer.startPlayLogic()
|
||||
videoPlayer.setVideoAllCallBack(object : GSYSampleCallBack(){
|
||||
override fun onPrepared(url: String?, vararg objects: Any?) {
|
||||
super.onPrepared(url, *objects)
|
||||
"视频准备完成".logd()
|
||||
}
|
||||
})
|
||||
video = videoPlayer
|
||||
} else {
|
||||
"使用的是硬解码".logd()
|
||||
//MediaPlayer
|
||||
// YoungUtil.YoungLog("素材是视频:${Configurations.config(TaxiApp.instance()).downloadUrl()}${advertise.media_url}")
|
||||
YoungUtil.YoungLog("素材是视频:${Configurations.config(TaxiApp.instance()).downloadUrl()}${advertise.media_url}")
|
||||
val currentTimeMillis = System.currentTimeMillis()
|
||||
|
||||
val jVideoView = JVideoView(context)
|
||||
|
@ -179,6 +195,10 @@ fun View.createView(context: Context, advertise: Advertise, seek: Int): View? {
|
|||
}
|
||||
YoungUtil.YoungLog("初始化视频控件耗时:${currentTimeMillis - System.currentTimeMillis()}")
|
||||
video = jVideoView
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//其他
|
||||
// if (Build.VERSION.SDK_INT >= 26) {
|
||||
|
|
|
@ -72,6 +72,7 @@ import cn.trans88.taxiappkotlin.util.YoungUtil
|
|||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import org.greenrobot.greendao.query.LazyList
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
|
||||
|
@ -80,6 +81,12 @@ import java.util.*
|
|||
* 所有与界面相关的数据都应该放在ViewModel中
|
||||
*/
|
||||
//todo 这里不应该持有ui,应该要建立对应的livedata去回调给ui
|
||||
//如果是第二天,但是第一天日志没传完,就设为true
|
||||
var isSendedLog: Boolean = true
|
||||
//从缓存获取次数达到8888次后,从数据库获取一次数据,并更新缓存
|
||||
const val MAX_CACHE: Int = 8888
|
||||
// 跳跃点的距离阈值,单位为米
|
||||
const val JUMP_THRESHOLD = 10000.0f
|
||||
class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout, private val imageView: ImageView) : ViewModel(), GpsInformationListener, IPlay, LifecycleObserver {
|
||||
|
||||
private val providerMap = HashMap<String,String>()
|
||||
|
@ -499,6 +506,8 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
|
||||
if(!advertise.isCount){
|
||||
setCurAdvertise(advertise)
|
||||
} else {
|
||||
curAdvertise = advertise
|
||||
}
|
||||
|
||||
//edit by yzd @2022-09-09
|
||||
|
@ -569,6 +578,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
//view.startAnimation(addAnim)
|
||||
|
||||
fl_play.addView(view)
|
||||
// fl_play.addView(view)
|
||||
|
||||
removeView()
|
||||
|
||||
|
@ -592,17 +602,22 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
//用来防止有多余的view没有删除。
|
||||
if (fl_play.childCount > 1) {
|
||||
|
||||
fl_play.post {
|
||||
fl_play.postDelayed({
|
||||
YoungUtil.YoungLog("删除View,FrameLayout有多少子视图:${fl_play.childCount}")
|
||||
if (fl_play.childCount > 1) {
|
||||
|
||||
val childView = fl_play[0]
|
||||
//edit by ljh on2024/5/9
|
||||
if (childView is EmptyControlVideo) {
|
||||
"上一个图层是软解码视图,释放资源,is EmptyControlVideo".loge()
|
||||
childView.release()
|
||||
}
|
||||
|
||||
if (childView != null) {
|
||||
fl_play.removeView(childView)
|
||||
}
|
||||
}
|
||||
}
|
||||
},2000L)
|
||||
|
||||
// fl_play.postDelayed({
|
||||
// YoungUtil.YoungLog("删除View,FrameLayout有多少子视图:${fl_play.childCount}")
|
||||
|
@ -786,6 +801,8 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
var cachePlayLoggers = ArrayList<PlayLogger>()
|
||||
/**
|
||||
* 将curLogger设置为播放完成后存储到LoggerContainer中,并将curLogger清空
|
||||
*/
|
||||
|
@ -796,9 +813,10 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
curLogger!!.end_play_ts = System.currentTimeMillis()
|
||||
// val roundingDuration = Math.ceil((curLogger!!.duration.toDouble() / 1000)) * 1000
|
||||
// curLogger!!.duration = roundingDuration.toLong()
|
||||
|
||||
DaoUtil.getPlayLoggerDao().insert(curLogger)
|
||||
// DaoUtil.getPlayLoggerDao().insert(curLogger)
|
||||
"存储日志:${curLogger?.begin_play_ts}".loge()
|
||||
// "当前日志数量:${DaoUtil.getPlayLoggers().size}".logd()
|
||||
DaoUtil.getPlayLoggerDao().insert(curLogger)
|
||||
}
|
||||
curLogger = null
|
||||
}
|
||||
|
@ -883,7 +901,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
//edit by ljh @2023/8/28
|
||||
regionCacheSwitch -= 1
|
||||
if (regionCacheSwitch<=0){
|
||||
regionCacheSwitch = 8888
|
||||
regionCacheSwitch = MAX_CACHE
|
||||
taxiApp.regionsList.clear()
|
||||
}
|
||||
// val regions = DaoUtil.getRegion().loadAll()
|
||||
|
@ -898,6 +916,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
list
|
||||
}
|
||||
"regions.size:${regions.size}".logd()
|
||||
var isRefresh = false
|
||||
for (region in regions) {
|
||||
"regionAdId:${region.regionAdId},index:${regions.indexOf(region)}".logd()
|
||||
YoungUtil.YoungLog("当前两点间距离:${DistanceUtil.getDistance(region.lat, region.lng, latitude, longitude)}")
|
||||
|
@ -941,7 +960,11 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
//edit by ljh @2023/8/15
|
||||
taxiApp.daoAds.clear()
|
||||
|
||||
RefreshPlayer.refresh()
|
||||
//edit by ljh @2023/12/12 刷新定点广告
|
||||
Repository.cancelTimer()
|
||||
isRefresh = true
|
||||
|
||||
// RefreshPlayer.refresh()
|
||||
} else {
|
||||
YoungUtil.YoungLog("positionAdvertise is null");
|
||||
}
|
||||
|
@ -957,7 +980,7 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
|
||||
val reg = DaoUtil.getRegion().queryBuilder().where(RegionsDao.Properties.AutoId.eq(region.autoId)).unique()
|
||||
if (reg != null){
|
||||
reg.isInRegion = true
|
||||
reg.isInRegion = false
|
||||
DaoUtil.getRegion().update(reg)
|
||||
} else {
|
||||
taxiApp.regionsList.clear()
|
||||
|
@ -972,13 +995,21 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
//edit by ljh @2023/8/14
|
||||
taxiApp.daoAds.clear()
|
||||
|
||||
//edit by ljh @2023/12/12
|
||||
Repository.cancelTimer()
|
||||
isRefresh = true
|
||||
DaoUtil.getAdvertise().queryBuilder().where(AdvertiseDao.Properties.Ad_id.eq(region.regionAdId)).buildDelete()
|
||||
.executeDeleteWithoutDetachingEntities()
|
||||
YoungUtil.YoungLog("没进圈删除定点广告:${region.regionAdId}")
|
||||
taxiApp.isPositionRefresh = true
|
||||
// RefreshPlayer.refresh()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isRefresh){
|
||||
"定点变动,刷新列表".loge()
|
||||
RefreshPlayer.refresh()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1002,20 +1033,27 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除旧的定点广告
|
||||
*/
|
||||
fun clearAreaAdvertise() {
|
||||
val list = getAdvertise().queryBuilder().where(Properties.BelongTo.eq(AREA.ordinal)).list()
|
||||
list?.let {
|
||||
"list对象是空的吗:${list == null}".loge()
|
||||
"list元素是0吗:${list?.size}".loge()
|
||||
//edit by ljh @2024/4/19修复收到的GPS卫星数量为0时频繁刷新问题
|
||||
if (list.isNotEmpty()){
|
||||
//edit by ljh @2023/8/11
|
||||
taxiApp.daoAds.clear()
|
||||
for (advertise in it) {
|
||||
for (advertise in list) {
|
||||
getAdvertise().delete(advertise)
|
||||
}
|
||||
try {
|
||||
"clearAreaAdvertise -> 刷新列表了".loge()
|
||||
RefreshPlayer.refresh()
|
||||
} catch (e: InterruptedException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1044,6 +1082,12 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
//edit by ljh@2023/8/22
|
||||
if (distanceLocation > 20) {
|
||||
// Log.d("LCT","DistanceUtil --> distanceLocation:$distanceLocation")
|
||||
//edit by ljh@2024/5/9
|
||||
taxiApp.quietGpsTimer?.apply {
|
||||
cancel()
|
||||
purge()
|
||||
}
|
||||
taxiApp.quietGpsTimer = null
|
||||
|
||||
// edit by yzd @20211201
|
||||
// if (Settings.gpsSwitch) {
|
||||
|
@ -1068,11 +1112,13 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
|
||||
//过滤掉距离过大的数据,edit by ljh 2023/8/8
|
||||
location.distance?.let {
|
||||
if (it < 10000f){
|
||||
if (it < JUMP_THRESHOLD){
|
||||
DaoUtil.getLocationDao().insert(location)
|
||||
}
|
||||
}
|
||||
// 如果不是跳跃点,更新上一个有效点的坐标
|
||||
curLocation = location
|
||||
}
|
||||
}
|
||||
// DaoUtil.getLocationDao().insert(location)
|
||||
//debug 将日志存卡里看location信息对不对
|
||||
// taxiApp.saveLog(location.toString())
|
||||
} else {
|
||||
|
@ -1097,7 +1143,22 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
}
|
||||
}
|
||||
} else {
|
||||
YoungUtil.YoungLog("当前位置坐标距离上一个点小于20,不记录")
|
||||
YoungUtil.YoungLog("当前位置坐标距离上一个点小于20")
|
||||
//edit by ljh@2024/5/9
|
||||
val lon = String.format("%.7f", longitude).toDouble()
|
||||
val lat = String.format("%.7f", latitude).toDouble()
|
||||
val location = Location().apply {
|
||||
timestamp = System.currentTimeMillis()
|
||||
setLongitude(lon)
|
||||
setLatitude(lat)
|
||||
setBearing(bearing)
|
||||
setSpeed(speed)
|
||||
// val floatArray = FloatArray(1)
|
||||
// distanceBetween(curLocation?.latitude!!, curLocation?.longitude!!, latitude, longitude, floatArray)
|
||||
distance = distanceLocation.toFloat()
|
||||
elapse = timestamp - curLocation?.timestamp!!
|
||||
}
|
||||
saveQuietGPS(location)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
|
@ -1106,6 +1167,23 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 存储静止点
|
||||
* @param location Location
|
||||
*/
|
||||
private fun saveQuietGPS(location: Location) {
|
||||
if (taxiApp.quietGpsTimer == null) {
|
||||
"开启存储静止点的定时器".logd()
|
||||
taxiApp.quietGpsTimer = Timer()
|
||||
taxiApp.quietGpsTimer?.schedule(object :TimerTask(){
|
||||
override fun run() {
|
||||
"三分钟没收到非静止的点了,存储静止点:${location.timestamp}".logd()
|
||||
DaoUtil.getLocationDao().insert(location)
|
||||
}
|
||||
},3*60*1000,3*60*1000)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否当前是否已经在播当前区域的定点广告
|
||||
*/
|
||||
|
@ -1159,6 +1237,13 @@ class PlayViewModel(val lifecycle: Lifecycle, private val fl_play: FrameLayout,
|
|||
this.latitude = latitude
|
||||
}
|
||||
|
||||
//edit by ljh @2023/12/12
|
||||
val file = File(advertise.pathName)
|
||||
if (file.exists()) {
|
||||
"定点广告的素材已下载".loge()
|
||||
advertise.isDownloaded = true
|
||||
}
|
||||
|
||||
YoungUtil.YoungLog("setAdvertiseByPosition adid:${advertise.ad_id}")
|
||||
|
||||
advertise.toString().loge()
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.os.Handler
|
|||
import cn.trans88.kurotool.util.TimeUtil
|
||||
import cn.trans88.taxiappkotlin.ext.logd
|
||||
import cn.trans88.taxiappkotlin.ext.loge
|
||||
import cn.trans88.taxiappkotlin.logic.Repository
|
||||
import cn.trans88.taxiappkotlin.logic.dao.AdvertiseDao
|
||||
import cn.trans88.taxiappkotlin.logic.dao.AdvertiseDao.Properties
|
||||
import cn.trans88.taxiappkotlin.logic.dao.DaoUtil
|
||||
|
@ -91,6 +92,7 @@ fun Advertise.isAllowPlay(): Boolean {
|
|||
|
||||
if (advertise == null){
|
||||
YoungUtil.YoungLog("广告已经下坎不再播放:${this.ad_id}")
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ public class DateUtil {
|
|||
|
||||
public static SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
|
||||
/**
|
||||
* 获取任务第一次执行的开始或者结束日期
|
||||
* @param weekDay
|
||||
|
@ -112,7 +113,7 @@ public class DateUtil {
|
|||
* @return
|
||||
*/
|
||||
public static int getDaysDiff(long currentTime, long cacheTime){
|
||||
Log.d("yzd_t", "currentTime: " + currentTime + ", cacheTime: " + cacheTime);
|
||||
Log.d("yzd_t", "currentTime: " + currentTime + ", cacheStartTime: " + cacheTime);
|
||||
int dayType = DayType.IS_OTHER_DAY.ordinal();
|
||||
// long currentTimeStamp = 1699723270L; // 替换为currentTimeStamp的值 2023/11/12
|
||||
// long lastTimeStamp = 1699690270L; // 替换为lastTimeStamp的值 2023/11/11
|
||||
|
@ -146,10 +147,10 @@ public class DateUtil {
|
|||
Log.d("yzd_t", "daysDiff: " + daysDiff);
|
||||
|
||||
if (daysDiff == 1) {
|
||||
Log.d("yzd_t","currentTimeStamp对应的时间是lastTimeStamp的后一天的时间。");
|
||||
Log.d("yzd_t","对比当前时间是第二天");
|
||||
dayType = DayType.IS_SECOND_DAY.ordinal();
|
||||
} else if (daysDiff == 0) {
|
||||
Log.d("yzd_t","currentTimeStamp对应的时间不是lastTimeStamp的后一天的时间。");
|
||||
Log.d("yzd_t","对比当前时间是同一天");
|
||||
dayType = DayType.IS_SAME_DAY.ordinal();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
package cn.trans88.taxiappkotlin.util;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.SSLSession;
|
||||
|
||||
import okhttp3.Callback;
|
||||
import okhttp3.Dns;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
|
||||
public class OkHttpTool {
|
||||
private OkHttpClient client;
|
||||
private volatile static OkHttpTool instance;
|
||||
|
||||
public static OkHttpTool getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (OkHttpTool.class) {
|
||||
if (instance == null) {
|
||||
instance = new OkHttpTool();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
private OkHttpTool() {
|
||||
client = new OkHttpClient.Builder()
|
||||
.connectTimeout(80, TimeUnit.SECONDS)
|
||||
.readTimeout(80, TimeUnit.SECONDS)
|
||||
.writeTimeout(80, TimeUnit.SECONDS)
|
||||
.build();;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送异步请求
|
||||
* @param url
|
||||
* @param callback
|
||||
*/
|
||||
public void sendRequest(String url, Callback callback){
|
||||
Request request = new Request.Builder().url(url).build();
|
||||
client.newCall(request).enqueue(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送同步请求
|
||||
* @param url
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public Response sendSyncRequest(String url) throws IOException {
|
||||
Request request = new Request.Builder().url(url).build();
|
||||
return client.newCall(request).execute();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getVistor(String url, String token) {
|
||||
Log.i("TAG", "token:" + token);
|
||||
// Headers headers = new Headers.Builder().add("token",token).build();
|
||||
Request request = new Request.Builder().get().url(url + "?dataKey=" + token).build();
|
||||
try {
|
||||
Response response = client.newCall(request).execute();
|
||||
if (response.isSuccessful() && response.code() == 200) {
|
||||
return response.body().string();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/black">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/surface_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center">
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</RelativeLayout>
|
|
@ -1 +1 @@
|
|||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":240,"versionName":"3.3.3-beta26.3.9.97-debug","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.97-debug{240}.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.97-debug{240}.apk","properties":{}}]
|
||||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":245,"versionName":"3.3.3-beta26.4.0.5-debug","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.4.0.5-debug{245}.apk","fullName":"debug","baseName":"debug","dirName":""},"path":"TaxiApp_v3.3.3-beta26.4.0.5-debug{245}.apk","properties":{}}]
|
Binary file not shown.
|
@ -4,5 +4,5 @@
|
|||
# Location of the SDK. This is only used by Gradle.
|
||||
# For customization when using a Version Control System, please read the
|
||||
# header note.
|
||||
#Mon Nov 06 09:42:57 GMT+08:00 2023
|
||||
#Tue Jun 25 17:11:45 GMT+08:00 2024
|
||||
sdk.dir=D\:\\Android\\sdk
|
||||
|
|
|
@ -1 +1 @@
|
|||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":239,"versionName":"3.3.3-beta26.3.9.96-release","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.3.9.96-release{239}.apk","fullName":"release","baseName":"release","dirName":""},"path":"TaxiApp_v3.3.3-beta26.3.9.96-release{239}.apk","properties":{}}]
|
||||
[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":257,"versionName":"3.3.3-beta26.4.1.4-release","enabled":true,"outputFile":"TaxiApp_v3.3.3-beta26.4.1.4-release{257}.apk","fullName":"release","baseName":"release","dirName":""},"path":"TaxiApp_v3.3.3-beta26.4.1.4-release{257}.apk","properties":{}}]
|
Loading…
Reference in New Issue
Block a user