Browse Source

room database

zhaoyadi 2 years ago
parent
commit
6606892311
57 changed files with 817 additions and 714 deletions
  1. 0 13
      .idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml
  2. 4 4
      .idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml
  3. 0 11
      .idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0.xml
  4. 0 13
      .idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml
  5. 3 3
      .idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml
  6. 0 11
      .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml
  7. 0 9
      .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3.xml
  8. 4 4
      .idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml
  9. 0 16
      .idea/libraries/Gradle__androidx_core_core_1_0_0_aar.xml
  10. 3 3
      .idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
  11. 3 3
      .idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml
  12. 3 3
      .idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
  13. 4 4
      .idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml
  14. 4 4
      .idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_2_0_aar.xml
  15. 4 4
      .idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml
  16. 3 3
      .idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml
  17. 3 3
      .idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml
  18. 3 3
      .idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml
  19. 0 11
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0.xml
  20. 3 3
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml
  21. 0 13
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml
  22. 0 13
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml
  23. 0 13
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml
  24. 3 3
      .idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
  25. 3 3
      .idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
  26. 4 4
      .idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml
  27. 0 16
      .idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_0_0_aar.xml
  28. 3 3
      .idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml
  29. 4 4
      .idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml
  30. 3 3
      .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml
  31. 3 3
      .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml
  32. 0 13
      .idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml
  33. 3 3
      .idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
  34. 4 4
      .idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_12_0_aar.xml
  35. 3 3
      .idea/libraries/Gradle__com_github_bumptech_glide_glide_4_12_0_aar.xml
  36. 3 3
      .idea/libraries/Gradle__com_tencent_liteav_LiteAVSDK_Player_10_5_0_11177_aar.xml
  37. 0 1
      .idea/modules.xml
  38. 2 0
      build.gradle
  39. 29 8
      kit/build.gradle
  40. 2 1
      kit/src/main/AndroidManifest.xml
  41. 12 11
      kit/src/main/java/com/tencent/liteav/demo/superplayer/SuperPlayerView.java
  42. 37 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/PlayerApplication.java
  43. 43 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/PlayerDatabase.kt
  44. 8 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/PlayerDatabaseProvider.kt
  45. 17 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/dao/CountDownDao.kt
  46. 19 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/dao/HistoryDao.kt
  47. 33 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/entity/CountDown.kt
  48. 20 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/entity/History.kt
  49. 25 0
      kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/repo/PlayerRepository.kt
  50. 22 2
      ui/build.gradle
  51. 1 0
      ui/src/main/AndroidManifest.xml
  52. 0 281
      ui/src/main/java/com/tencent/liteav/demo/player/PlayerActivity.java
  53. 0 176
      ui/src/main/java/com/tencent/liteav/demo/player/ViewInsets.java
  54. 7 2
      ui/src/main/java/com/tencent/liteav/demo/player/util/PlayerModelProvider.java
  55. 250 0
      ui/src/main/kotlin/com/tencent/liteav/demo/player/PlayerActivity.kt
  56. 157 0
      ui/src/main/kotlin/com/tencent/liteav/demo/player/ViewInsets.kt
  57. 53 0
      ui/src/main/kotlin/com/tencent/liteav/demo/player/viewmodel/PlayerViewModel.kt

+ 0 - 13
.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml

@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.annotation:annotation:1.1.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.1.0/e3a6fb2f40e3a3842e6b7472628ba4ce416ea4c8/annotation-1.1.0.jar!/" />
-    </CLASSES>
-    <JAVADOC>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.1.0/408af38ec57369afe3fd6466e1c4bfdd5f15fc92/annotation-1.1.0-javadoc.jar!/" />
-    </JAVADOC>
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.1.0/8b7bdc00eb4d998bfbc76767b098620990f2a805/annotation-1.1.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 4 - 4
.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.appcompat:appcompat:1.0.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/240b03f5975b1df36610d723eab46265/appcompat-1.0.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/907a0084245fd4ddc93073a82b389d01/appcompat-1.0.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/240b03f5975b1df36610d723eab46265/appcompat-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/240b03f5975b1df36610d723eab46265/appcompat-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/240b03f5975b1df36610d723eab46265/appcompat-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/907a0084245fd4ddc93073a82b389d01/appcompat-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/907a0084245fd4ddc93073a82b389d01/appcompat-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/907a0084245fd4ddc93073a82b389d01/appcompat-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 11
.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0.xml

@@ -1,11 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.arch.core:core-common:2.0.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.0.0/bb21b9a11761451b51624ac428d1f1bb5deeac38/core-common-2.0.0.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.0.0/645b95386a07be66eef0bfe7007535e3f95ec642/core-common-2.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 0 - 13
.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml

@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/750b7b3e6ba5087b346f6e90470bbb4c/core-runtime-2.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/750b7b3e6ba5087b346f6e90470bbb4c/core-runtime-2.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/750b7b3e6ba5087b346f6e90470bbb4c/core-runtime-2.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-runtime/2.0.0/bc41b287c95bc50a3cd27cb1b7cfb301805ba7f1/core-runtime-2.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 3 - 3
.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/d7ef7342eb80ff707691a83b9012e6a9/asynclayoutinflater-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/d7ef7342eb80ff707691a83b9012e6a9/asynclayoutinflater-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/d7ef7342eb80ff707691a83b9012e6a9/asynclayoutinflater-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/fdb735abf59ccd7e0b5c41f08c3b35f5/asynclayoutinflater-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/fdb735abf59ccd7e0b5c41f08c3b35f5/asynclayoutinflater-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/fdb735abf59ccd7e0b5c41f08c3b35f5/asynclayoutinflater-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 11
.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml

@@ -1,11 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.constraintlayout:constraintlayout:1.1.3@aar">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/5c2d055b9576f9b1a68fe7075632917c/constraintlayout-1.1.3/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/5c2d055b9576f9b1a68fe7075632917c/constraintlayout-1.1.3/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/5c2d055b9576f9b1a68fe7075632917c/constraintlayout-1.1.3/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>

+ 0 - 9
.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3.xml

@@ -1,9 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.constraintlayout:constraintlayout-solver:1.1.3">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.constraintlayout/constraintlayout-solver/1.1.3/54abe9ffb22cc9019b0b6fcc10f185cc4e67b34e/constraintlayout-solver-1.1.3.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>

+ 4 - 4
.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e1c1a328fa5c525d8a813cf3d0ad18ce/coordinatorlayout-1.0.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b2f1728171c5b9b613e7fb75fa8774da/coordinatorlayout-1.0.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e1c1a328fa5c525d8a813cf3d0ad18ce/coordinatorlayout-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e1c1a328fa5c525d8a813cf3d0ad18ce/coordinatorlayout-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e1c1a328fa5c525d8a813cf3d0ad18ce/coordinatorlayout-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b2f1728171c5b9b613e7fb75fa8774da/coordinatorlayout-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b2f1728171c5b9b613e7fb75fa8774da/coordinatorlayout-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b2f1728171c5b9b613e7fb75fa8774da/coordinatorlayout-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 16
.idea/libraries/Gradle__androidx_core_core_1_0_0_aar.xml

@@ -1,16 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.core:core:1.0.0@aar">
-    <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/704168206db443cc6a8404f53cd4e417/core-1.0.0/annotations.zip!/" />
-    </ANNOTATIONS>
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/704168206db443cc6a8404f53cd4e417/core-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/704168206db443cc6a8404f53cd4e417/core-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/704168206db443cc6a8404f53cd4e417/core-1.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.core/core/1.0.0/a23a5f203e97d91666c374e408053b1878de3bff/core-1.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 3 - 3
.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9f5395c9e2c4a1a11a43e64f5d81258c/cursoradapter-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9f5395c9e2c4a1a11a43e64f5d81258c/cursoradapter-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9f5395c9e2c4a1a11a43e64f5d81258c/cursoradapter-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/78ad7158db52b84407eb2ceab2c03bb4/cursoradapter-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/78ad7158db52b84407eb2ceab2c03bb4/cursoradapter-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/78ad7158db52b84407eb2ceab2c03bb4/cursoradapter-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.customview:customview:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/3438716bbde0c4ae93b6b3ca42413f5c/customview-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/3438716bbde0c4ae93b6b3ca42413f5c/customview-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/3438716bbde0c4ae93b6b3ca42413f5c/customview-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/bab61d9b5aeff64ef6ccc107179c983d/customview-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/bab61d9b5aeff64ef6ccc107179c983d/customview-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/bab61d9b5aeff64ef6ccc107179c983d/customview-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.documentfile:documentfile:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/815bb9272ee789daabc21bc15b42e2c3/documentfile-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/815bb9272ee789daabc21bc15b42e2c3/documentfile-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/815bb9272ee789daabc21bc15b42e2c3/documentfile-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/91f515b39f24217b6704cac73cf18de3/documentfile-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/91f515b39f24217b6704cac73cf18de3/documentfile-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/91f515b39f24217b6704cac73cf18de3/documentfile-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 4 - 4
.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9bcad8df747e7e541c668492e993a22d/drawerlayout-1.0.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7e98d766033b51d7d7b313ae109c7cd6/drawerlayout-1.0.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9bcad8df747e7e541c668492e993a22d/drawerlayout-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9bcad8df747e7e541c668492e993a22d/drawerlayout-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9bcad8df747e7e541c668492e993a22d/drawerlayout-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7e98d766033b51d7d7b313ae109c7cd6/drawerlayout-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7e98d766033b51d7d7b313ae109c7cd6/drawerlayout-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7e98d766033b51d7d7b313ae109c7cd6/drawerlayout-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 4 - 4
.idea/libraries/Gradle__androidx_exifinterface_exifinterface_1_2_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.exifinterface:exifinterface:1.2.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/29381e4b3a15d9e6ef9bbdf26871c88b/exifinterface-1.2.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/329b8dd003e812d0eef4dd6e320566cf/exifinterface-1.2.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/29381e4b3a15d9e6ef9bbdf26871c88b/exifinterface-1.2.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/29381e4b3a15d9e6ef9bbdf26871c88b/exifinterface-1.2.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/29381e4b3a15d9e6ef9bbdf26871c88b/exifinterface-1.2.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/329b8dd003e812d0eef4dd6e320566cf/exifinterface-1.2.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/329b8dd003e812d0eef4dd6e320566cf/exifinterface-1.2.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/329b8dd003e812d0eef4dd6e320566cf/exifinterface-1.2.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 4 - 4
.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.fragment:fragment:1.0.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/939487120f8beb920a58dc41bbe9f02a/fragment-1.0.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f1be2786447132c45315401052d31c44/fragment-1.0.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/939487120f8beb920a58dc41bbe9f02a/fragment-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/939487120f8beb920a58dc41bbe9f02a/fragment-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/939487120f8beb920a58dc41bbe9f02a/fragment-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f1be2786447132c45315401052d31c44/fragment-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f1be2786447132c45315401052d31c44/fragment-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f1be2786447132c45315401052d31c44/fragment-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.interpolator:interpolator:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a81ff3a6f4fe4cdba627ce49c2369465/interpolator-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a81ff3a6f4fe4cdba627ce49c2369465/interpolator-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a81ff3a6f4fe4cdba627ce49c2369465/interpolator-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9de4caf691382e3e302f9cda2fe3f49e/interpolator-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9de4caf691382e3e302f9cda2fe3f49e/interpolator-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9de4caf691382e3e302f9cda2fe3f49e/interpolator-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b913b577636afb646741ffd904028e15/legacy-support-core-ui-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b913b577636afb646741ffd904028e15/legacy-support-core-ui-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b913b577636afb646741ffd904028e15/legacy-support-core-ui-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/93d746db60acbc9530ddb9ad201d5c2b/legacy-support-core-ui-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/93d746db60acbc9530ddb9ad201d5c2b/legacy-support-core-ui-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/93d746db60acbc9530ddb9ad201d5c2b/legacy-support-core-ui-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1e3214591e5f847e6b5b2333c34f548f/legacy-support-core-utils-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1e3214591e5f847e6b5b2333c34f548f/legacy-support-core-utils-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1e3214591e5f847e6b5b2333c34f548f/legacy-support-core-utils-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/96a6b3b6e85b73f8b7edc1207a877079/legacy-support-core-utils-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/96a6b3b6e85b73f8b7edc1207a877079/legacy-support-core-utils-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/96a6b3b6e85b73f8b7edc1207a877079/legacy-support-core-utils-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 11
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0.xml

@@ -1,11 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.0.0/e070ffae07452331bc5684734fce6831d531785c/lifecycle-common-2.0.0.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.0.0/cb4562c8927ab69f2a8ef49267b90753207df0c3/lifecycle-common-2.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 3 - 3
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e3a7d3b723deff8b2b903c0665652c62/lifecycle-livedata-2.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e3a7d3b723deff8b2b903c0665652c62/lifecycle-livedata-2.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e3a7d3b723deff8b2b903c0665652c62/lifecycle-livedata-2.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/8b03c9b8ad794fbf5435592cddb4cafb/lifecycle-livedata-2.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/8b03c9b8ad794fbf5435592cddb4cafb/lifecycle-livedata-2.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/8b03c9b8ad794fbf5435592cddb4cafb/lifecycle-livedata-2.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 13
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml

@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/c9ce6976a0ee114a7df6a78a9d188526/lifecycle-livedata-core-2.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/c9ce6976a0ee114a7df6a78a9d188526/lifecycle-livedata-core-2.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/c9ce6976a0ee114a7df6a78a9d188526/lifecycle-livedata-core-2.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-livedata-core/2.0.0/c158207594782b42f3a2e08a5a029eb3319e4404/lifecycle-livedata-core-2.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 0 - 13
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml

@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9b615267ab01aab8f9f5ed2bdc1c6d21/lifecycle-runtime-2.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9b615267ab01aab8f9f5ed2bdc1c6d21/lifecycle-runtime-2.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/9b615267ab01aab8f9f5ed2bdc1c6d21/lifecycle-runtime-2.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-runtime/2.0.0/94562933879240f04fc2dea3f1841171b164c748/lifecycle-runtime-2.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 0 - 13
.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml

@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/0fae1921ea392fcf1099ebc521d9f280/lifecycle-viewmodel-2.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/0fae1921ea392fcf1099ebc521d9f280/lifecycle-viewmodel-2.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/0fae1921ea392fcf1099ebc521d9f280/lifecycle-viewmodel-2.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-viewmodel/2.0.0/41b56105d14b1151a963444875cab191271f43db/lifecycle-viewmodel-2.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 3 - 3
.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.loader:loader:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/818f45328ee8f5b99bad88c27c6cc009/loader-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/818f45328ee8f5b99bad88c27c6cc009/loader-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/818f45328ee8f5b99bad88c27c6cc009/loader-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f793f4a94637d88fd908c63ee06a79ae/loader-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f793f4a94637d88fd908c63ee06a79ae/loader-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f793f4a94637d88fd908c63ee06a79ae/loader-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b93e2b8a7319b8231fdc1936a598b860/localbroadcastmanager-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b93e2b8a7319b8231fdc1936a598b860/localbroadcastmanager-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b93e2b8a7319b8231fdc1936a598b860/localbroadcastmanager-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/74b5e835c6958b2b6ae205621a81bdd0/localbroadcastmanager-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/74b5e835c6958b2b6ae205621a81bdd0/localbroadcastmanager-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/74b5e835c6958b2b6ae205621a81bdd0/localbroadcastmanager-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 4 - 4
.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.print:print:1.0.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f8503f66578d12caa389b09e1e5eca48/print-1.0.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/22e51c05087e926ebbe00e4bb034440d/print-1.0.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f8503f66578d12caa389b09e1e5eca48/print-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f8503f66578d12caa389b09e1e5eca48/print-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/f8503f66578d12caa389b09e1e5eca48/print-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/22e51c05087e926ebbe00e4bb034440d/print-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/22e51c05087e926ebbe00e4bb034440d/print-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/22e51c05087e926ebbe00e4bb034440d/print-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 16
.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_0_0_aar.xml

@@ -1,16 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.recyclerview:recyclerview:1.0.0@aar">
-    <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b8e1c55b226b4c886055bf095cd57a2f/recyclerview-1.0.0/annotations.zip!/" />
-    </ANNOTATIONS>
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b8e1c55b226b4c886055bf095cd57a2f/recyclerview-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b8e1c55b226b4c886055bf095cd57a2f/recyclerview-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b8e1c55b226b4c886055bf095cd57a2f/recyclerview-1.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.recyclerview/recyclerview/1.0.0/2151d26c3b241f0a887f2dadb9ab091649fcf020/recyclerview-1.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 3 - 3
.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7430e01f2c6ea8ff3578619715c15e18/slidingpanelayout-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7430e01f2c6ea8ff3578619715c15e18/slidingpanelayout-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/7430e01f2c6ea8ff3578619715c15e18/slidingpanelayout-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/bc323c6da166b45b9975f3b4f5207cdf/slidingpanelayout-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/bc323c6da166b45b9975f3b4f5207cdf/slidingpanelayout-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/bc323c6da166b45b9975f3b4f5207cdf/slidingpanelayout-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 4 - 4
.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a4aa212df090916fdc5167a61460eb35/swiperefreshlayout-1.0.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ad41f454bb859bc187be904ea96b48a0/swiperefreshlayout-1.0.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a4aa212df090916fdc5167a61460eb35/swiperefreshlayout-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a4aa212df090916fdc5167a61460eb35/swiperefreshlayout-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a4aa212df090916fdc5167a61460eb35/swiperefreshlayout-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ad41f454bb859bc187be904ea96b48a0/swiperefreshlayout-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ad41f454bb859bc187be904ea96b48a0/swiperefreshlayout-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ad41f454bb859bc187be904ea96b48a0/swiperefreshlayout-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.vectordrawable:vectordrawable:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/c957036829a0bfc56e2a531c675b44e2/vectordrawable-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/c957036829a0bfc56e2a531c675b44e2/vectordrawable-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/c957036829a0bfc56e2a531c675b44e2/vectordrawable-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/41aaf00387a524060176cce3a472ee92/vectordrawable-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/41aaf00387a524060176cce3a472ee92/vectordrawable-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/41aaf00387a524060176cce3a472ee92/vectordrawable-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 3 - 3
.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/359a50d098d5826e3b063aef4f5919f4/vectordrawable-animated-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/359a50d098d5826e3b063aef4f5919f4/vectordrawable-animated-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/359a50d098d5826e3b063aef4f5919f4/vectordrawable-animated-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e2cc2c40280fb4c01f8cd48b9874952c/vectordrawable-animated-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e2cc2c40280fb4c01f8cd48b9874952c/vectordrawable-animated-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/e2cc2c40280fb4c01f8cd48b9874952c/vectordrawable-animated-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 0 - 13
.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml

@@ -1,13 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/34741137234e1c5c22970a0a3b0c3fd3/versionedparcelable-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/34741137234e1c5c22970a0a3b0c3fd3/versionedparcelable-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/34741137234e1c5c22970a0a3b0c3fd3/versionedparcelable-1.0.0/AndroidManifest.xml" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/androidx.versionedparcelable/versionedparcelable/1.0.0/df4c3c5d517f6a49017612e6b4dfdd007e7cc9b8/versionedparcelable-1.0.0-sources.jar!/" />
-    </SOURCES>
-  </library>
-</component>

+ 3 - 3
.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: androidx.viewpager:viewpager:1.0.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b9a8ccdf08677e6ebe8a29448e9bae04/viewpager-1.0.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b9a8ccdf08677e6ebe8a29448e9bae04/viewpager-1.0.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/b9a8ccdf08677e6ebe8a29448e9bae04/viewpager-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/0c2cdb24f8ed896c0f093594b551dfc5/viewpager-1.0.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/0c2cdb24f8ed896c0f093594b551dfc5/viewpager-1.0.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/0c2cdb24f8ed896c0f093594b551dfc5/viewpager-1.0.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES>

+ 4 - 4
.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_12_0_aar.xml

@@ -1,12 +1,12 @@
 <component name="libraryTable">
   <library name="Gradle: com.github.bumptech.glide:gifdecoder:4.12.0@aar">
     <ANNOTATIONS>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a0155774c5e9b8e146aab9c810686a6b/jetified-gifdecoder-4.12.0/annotations.zip!/" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1317f7b9d718df07b91e6860be9af181/jetified-gifdecoder-4.12.0/annotations.zip!/" />
     </ANNOTATIONS>
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a0155774c5e9b8e146aab9c810686a6b/jetified-gifdecoder-4.12.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a0155774c5e9b8e146aab9c810686a6b/jetified-gifdecoder-4.12.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/a0155774c5e9b8e146aab9c810686a6b/jetified-gifdecoder-4.12.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1317f7b9d718df07b91e6860be9af181/jetified-gifdecoder-4.12.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1317f7b9d718df07b91e6860be9af181/jetified-gifdecoder-4.12.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/1317f7b9d718df07b91e6860be9af181/jetified-gifdecoder-4.12.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC>
       <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/gifdecoder/4.12.0/746b9323bb108e97840d4dacd37bd8d4cec34419/gifdecoder-4.12.0-javadoc.jar!/" />

+ 3 - 3
.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_12_0_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: com.github.bumptech.glide:glide:4.12.0@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ab378bf830c7048bc4dd1737c270aeb5/jetified-glide-4.12.0/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ab378bf830c7048bc4dd1737c270aeb5/jetified-glide-4.12.0/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/ab378bf830c7048bc4dd1737c270aeb5/jetified-glide-4.12.0/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/608a35e0b4f345c29f1723c6f42fab1a/jetified-glide-4.12.0/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/608a35e0b4f345c29f1723c6f42fab1a/jetified-glide-4.12.0/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/608a35e0b4f345c29f1723c6f42fab1a/jetified-glide-4.12.0/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC>
       <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/4.12.0/a1ed6593904cff903246abb68f5dbbc9bf7dde60/glide-4.12.0-javadoc.jar!/" />

+ 3 - 3
.idea/libraries/Gradle__com_tencent_liteav_LiteAVSDK_Player_10_5_0_11177_aar.xml

@@ -1,9 +1,9 @@
 <component name="libraryTable">
   <library name="Gradle: com.tencent.liteav:LiteAVSDK_Player:10.5.0.11177@aar">
     <CLASSES>
-      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/2558f52c5e1518dc77be1edbf4729481/jetified-LiteAVSDK_Player-10.5.0.11177/jars/classes.jar!/" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/2558f52c5e1518dc77be1edbf4729481/jetified-LiteAVSDK_Player-10.5.0.11177/res" />
-      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/2558f52c5e1518dc77be1edbf4729481/jetified-LiteAVSDK_Player-10.5.0.11177/AndroidManifest.xml" />
+      <root url="jar://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/6087bbf745af7eaed125737f8dc760cb/jetified-LiteAVSDK_Player-10.5.0.11177/jars/classes.jar!/" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/6087bbf745af7eaed125737f8dc760cb/jetified-LiteAVSDK_Player-10.5.0.11177/res" />
+      <root url="file://$PROJECT_DIR$/../../../../cache/.gradle/caches/transforms-2/files-2.1/6087bbf745af7eaed125737f8dc760cb/jetified-LiteAVSDK_Player-10.5.0.11177/AndroidManifest.xml" />
     </CLASSES>
     <JAVADOC />
     <SOURCES />

+ 0 - 1
.idea/modules.xml

@@ -3,7 +3,6 @@
   <component name="ProjectModuleManager">
     <modules>
       <module fileurl="file://$PROJECT_DIR$/.idea/modules/Demo.iml" filepath="$PROJECT_DIR$/.idea/modules/Demo.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/app/Demo.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/Demo.app.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/modules/superplayerkit/Demo.kit.iml" filepath="$PROJECT_DIR$/.idea/modules/superplayerkit/Demo.kit.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/modules/superplayerdemo/Demo.ui.iml" filepath="$PROJECT_DIR$/.idea/modules/superplayerdemo/Demo.ui.iml" />
     </modules>

+ 2 - 0
build.gradle

@@ -1,6 +1,7 @@
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 
 buildscript {
+    ext.kotlin_version = '1.7.0'
 
     repositories {
         jcenter { "https://maven.aliyun.com/repository/public" }
@@ -9,6 +10,7 @@ buildscript {
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:4.2.2'
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
     }
 }
 

+ 29 - 8
kit/build.gradle

@@ -1,4 +1,8 @@
-apply plugin: 'com.android.library'
+plugins{
+    id 'com.android.library'
+    id 'kotlin-android'
+    id 'kotlin-kapt'
+}
 
 android {
     compileSdkVersion rootProject.ext.compileSdkVersion
@@ -14,6 +18,10 @@ android {
 
     }
 
+    sourceSets {
+        main.java.srcDirs += 'src/main/kotlin'
+    }
+
     buildTypes {
         release {
             minifyEnabled false
@@ -21,18 +29,31 @@ android {
         }
     }
 
+    compileOptions {
+        sourceCompatibility 1.8
+        targetCompatibility 1.8
+    }
+
 }
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
 
-    api rootProject.ext.liteavSdk
-
-    implementation 'androidx.appcompat:appcompat:1.0.0'
-    implementation 'androidx.recyclerview:recyclerview:1.0.0'
+    api 'com.tencent.liteav:LiteAVSDK_Player:latest.release'
 
+    implementation 'androidx.appcompat:appcompat:1.4.2'
+    implementation 'androidx.recyclerview:recyclerview:1.2.1'
     api 'com.github.bumptech.glide:glide:4.12.0'
-    implementation 'androidx.exifinterface:exifinterface:1.2.0'
-
-    api 'androidx.constraintlayout:constraintlayout:1.1.3'
+    implementation 'androidx.exifinterface:exifinterface:1.3.3'
+    api 'androidx.constraintlayout:constraintlayout:2.1.4'
+
+    def room_version = "2.4.0"
+    implementation "androidx.room:room-runtime:$room_version"
+    kapt "androidx.room:room-compiler:$room_version"
+    implementation("androidx.room:room-ktx:$room_version")
+
+    implementation "androidx.core:core-ktx:1.7.0"
+    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
 }

+ 2 - 1
kit/src/main/AndroidManifest.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.tencent.liteav.demo.superplayer" >
+    package="com.tencent.liteav.demo.superplayer">
 
     <uses-permission android:name="android.permission.VIBRATE" />
+
 </manifest>

+ 12 - 11
kit/src/main/java/com/tencent/liteav/demo/superplayer/SuperPlayerView.java

@@ -185,7 +185,7 @@ public class SuperPlayerView extends RelativeLayout {
     }
 
     private void playModelInList(int index) {
-        mIsPlayInit = false;
+//        mIsPlayInit = false;
         mSuperPlayer.stop();
         mPlayIndex = index;
         updateNextButton();
@@ -560,16 +560,17 @@ public class SuperPlayerView extends RelativeLayout {
 
         @Override
         public void onPlayStop() {
-            if (mSuperPlayerModelList.size() >= 1 && mIsPlayInit && mIsLoopPlayList) {
-                playNextVideo();
-            } else {
-                mWindowPlayer.updatePlayState(SuperPlayerDef.PlayerState.END);
-                mFullScreenPlayer.updatePlayState(SuperPlayerDef.PlayerState.END);
-                // 清空关键帧和视频打点信息
-                if (mWatcher != null) {
-                    mWatcher.stop();
-                }
-            }
+            playNextVideo();
+
+//            if (mSuperPlayerModelList.size() >= 1 && mIsPlayInit && mIsLoopPlayList) {
+//            } else {
+//                mWindowPlayer.updatePlayState(SuperPlayerDef.PlayerState.END);
+//                mFullScreenPlayer.updatePlayState(SuperPlayerDef.PlayerState.END);
+//                // 清空关键帧和视频打点信息
+//                if (mWatcher != null) {
+//                    mWatcher.stop();
+//                }
+//            }
             notifyCallbackPlayEnd();
         }
 

+ 37 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/PlayerApplication.java

@@ -0,0 +1,37 @@
+package com.tencent.liteav.demo.superplayer.database;
+
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+
+import com.tencent.liteav.demo.superplayer.database.PlayerDatabase;
+import com.tencent.liteav.demo.superplayer.database.PlayerDatabaseProvider;
+import com.tencent.liteav.demo.superplayer.database.repo.PlayerRepository;
+
+public class PlayerApplication extends Application implements PlayerDatabaseProvider {
+    private PlayerDatabase database;
+    private PlayerRepository repository;
+
+    @NonNull
+    @Override
+    public PlayerDatabase getPlayerDatabase() {
+        if (database == null) {
+            database = PlayerDatabase.Companion.getDatabase(this);
+        }
+
+        return database;
+    }
+
+
+    @NonNull
+    @Override
+    public PlayerRepository getPlayerRepository() {
+        if (repository == null) {
+            repository = new PlayerRepository(
+                    getPlayerDatabase().historyDao(),
+                    getPlayerDatabase().countDownDao()
+            );
+        }
+        return repository;
+    }
+}

+ 43 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/PlayerDatabase.kt

@@ -0,0 +1,43 @@
+package com.tencent.liteav.demo.superplayer.database
+
+import android.content.Context
+import androidx.room.Database
+import androidx.room.Room
+import androidx.room.RoomDatabase
+import com.tencent.liteav.demo.superplayer.database.dao.CountDownDao
+import com.tencent.liteav.demo.superplayer.database.dao.HistoryDao
+import com.tencent.liteav.demo.superplayer.database.entity.CountDown
+import com.tencent.liteav.demo.superplayer.database.entity.History
+
+@Database(
+    version = 1,
+    entities = [History::class, CountDown::class],
+    exportSchema = false
+)
+abstract class PlayerDatabase : RoomDatabase() {
+    abstract fun historyDao(): HistoryDao
+    abstract fun countDownDao(): CountDownDao
+
+    companion object {
+        // Singleton prevents multiple instances of database opening at the
+        // same time.
+        @Volatile
+        private var INSTANCE: PlayerDatabase? = null
+
+        @JvmStatic
+        fun getDatabase(context: Context): PlayerDatabase {
+            // if the INSTANCE is not null, then return it,
+            // if it is, then create the database
+            return INSTANCE ?: synchronized(this) {
+                val instance = Room.databaseBuilder(
+                    context.applicationContext,
+                    PlayerDatabase::class.java,
+                    "player_database"
+                ).build()
+                INSTANCE = instance
+                // return instance
+                instance
+            }
+        }
+    }
+}

+ 8 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/PlayerDatabaseProvider.kt

@@ -0,0 +1,8 @@
+package com.tencent.liteav.demo.superplayer.database
+
+import com.tencent.liteav.demo.superplayer.database.repo.PlayerRepository
+
+interface PlayerDatabaseProvider {
+    fun getPlayerDatabase(): PlayerDatabase
+    fun getPlayerRepository(): PlayerRepository
+}

+ 17 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/dao/CountDownDao.kt

@@ -0,0 +1,17 @@
+package com.tencent.liteav.demo.superplayer.database.dao
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import com.tencent.liteav.demo.superplayer.database.entity.CountDown
+import kotlinx.coroutines.flow.Flow
+
+@Dao
+interface CountDownDao {
+
+    @Query("SELECT * FROM countdown WHERE course_id = :courseId LIMIT 1")
+    fun getCountDownByCourseId(courseId: String): Flow<CountDown?>
+
+    @Insert
+    fun insertCountDown(countDown: CountDown)
+}

+ 19 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/dao/HistoryDao.kt

@@ -0,0 +1,19 @@
+package com.tencent.liteav.demo.superplayer.database.dao
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.Query
+import com.tencent.liteav.demo.superplayer.database.entity.History
+import kotlinx.coroutines.flow.Flow
+
+@Dao
+public interface HistoryDao {
+    @Query("SELECT * FROM history WHERE course_id = :courseId")
+    fun getById(courseId: String): Flow<List<History>>
+
+    @Insert
+    fun insertHistory(history: History)
+
+    @Insert
+    fun insertHistories(vararg histories: History)
+}

+ 33 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/entity/CountDown.kt

@@ -0,0 +1,33 @@
+package com.tencent.liteav.demo.superplayer.database.entity
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity
+data class CountDown(
+    @PrimaryKey(autoGenerate = true)
+    val id: Long? = null,
+
+    @ColumnInfo(name = "course_id")
+    val courseId: String,
+
+    /* 定时类型 1集数 2时长 */
+    @ColumnInfo(name = "type")
+    val type: Int,
+
+    /** 定时的值
+     * 类型为集数时则表示多少集
+     * 类型为时长是则表示多少分钟
+     */
+    @ColumnInfo(name = "value")
+    val value: Int
+) {
+    companion object {
+        @JvmStatic
+        public val TYPE_EPISODE = 1;
+
+        @JvmStatic
+        public val TYPE_DURATION = 2;
+    }
+}

+ 20 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/entity/History.kt

@@ -0,0 +1,20 @@
+package com.tencent.liteav.demo.superplayer.database.entity
+
+import androidx.room.ColumnInfo
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity
+data class History(
+    @PrimaryKey(autoGenerate = true)
+    var id: Long? = null,
+
+    @ColumnInfo(name = "start")
+    val start: Long,
+
+    @ColumnInfo(name = "end")
+    val end: Long,
+
+    @ColumnInfo(name = "course_id")
+    val courseId: String,
+)

+ 25 - 0
kit/src/main/kotlin/com/tencent/liteav/demo/superplayer/database/repo/PlayerRepository.kt

@@ -0,0 +1,25 @@
+package com.tencent.liteav.demo.superplayer.database.repo
+
+import com.tencent.liteav.demo.superplayer.database.dao.CountDownDao
+import com.tencent.liteav.demo.superplayer.database.dao.HistoryDao
+import com.tencent.liteav.demo.superplayer.database.entity.CountDown
+import com.tencent.liteav.demo.superplayer.database.entity.History
+import kotlinx.coroutines.flow.Flow
+
+public class PlayerRepository(
+    private val historyDao: HistoryDao,
+    private val countDownDao: CountDownDao,
+) {
+
+    suspend fun insertHistory(history: History) {
+        historyDao.insertHistory(history)
+    }
+
+    suspend fun insertCountDown(countDown: CountDown) {
+        countDownDao.insertCountDown(countDown)
+    }
+
+    suspend fun findHasCountDown(courseId: String): Flow<CountDown?> {
+        return countDownDao.getCountDownByCourseId(courseId)
+    }
+}

+ 22 - 2
ui/build.gradle

@@ -1,4 +1,5 @@
 apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
 
 android {
     compileSdkVersion rootProject.ext.compileSdkVersion
@@ -11,13 +12,16 @@ android {
         versionName "1.0"
 
         testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
-
     }
 
     buildFeatures {
         viewBinding true
     }
 
+    sourceSets {
+        main.java.srcDirs += 'src/main/kotlin'
+    }
+
     buildTypes {
         release {
             minifyEnabled false
@@ -25,14 +29,30 @@ android {
         }
     }
 
+    compileOptions {
+        sourceCompatibility 1.8
+        targetCompatibility 1.8
+    }
+
 }
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
 
-    implementation rootProject.ext.liteavSdk
     implementation project(':kit')
+
+    implementation 'com.tencent.liteav:LiteAVSDK_Player:latest.release'
+
+    implementation 'androidx.activity:activity-ktx:1.5.1'
+
+    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
+    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1"
+    implementation "androidx.lifecycle:lifecycle-common-java8:2.5.1"
+
     implementation 'androidx.appcompat:appcompat:1.0.0'
     implementation 'androidx.recyclerview:recyclerview:1.2.1'
     implementation 'com.squareup.okhttp3:okhttp:4.9.3'
+
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
+    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
 }

+ 1 - 0
ui/src/main/AndroidManifest.xml

@@ -4,6 +4,7 @@
     package="com.tencent.liteav.demo.player">
 
     <application
+        android:name="com.tencent.liteav.demo.superplayer.database.PlayerApplication"
         android:allowBackup="false"
         android:icon="@drawable/ic_launcher"
         android:label="@string/superplayer_app_name"

+ 0 - 281
ui/src/main/java/com/tencent/liteav/demo/player/PlayerActivity.java

@@ -1,281 +0,0 @@
-package com.tencent.liteav.demo.player;
-
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowInsets;
-import android.view.WindowManager;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.tencent.liteav.demo.player.databinding.ActivityPlayerBinding;
-import com.tencent.liteav.demo.player.ui.PlayerListAdapter;
-import com.tencent.liteav.demo.player.ui.PlayerListDecoration;
-import com.tencent.liteav.demo.player.util.PlayerModelProvider;
-import com.tencent.liteav.demo.superplayer.SuperPlayerDef;
-import com.tencent.liteav.demo.superplayer.SuperPlayerGlobalConfig;
-import com.tencent.liteav.demo.superplayer.SuperPlayerModel;
-import com.tencent.liteav.demo.superplayer.SuperPlayerView;
-import com.tencent.liteav.demo.superplayer.ui.view.PlayerRelativeLayout;
-import com.tencent.rtmp.TXLiveConstants;
-
-/**
- * Created by liyuejiao on 2018/7/3.
- * 超级播放器主Activity
- */
-
-public class PlayerActivity extends Activity implements View.OnClickListener,
-        SuperPlayerView.OnSuperPlayerViewCallback,
-        PlayerListAdapter.OnItemClickListener {
-
-    private static final String TAG = "SuperPlayerActivity";
-
-    private static final float sPlayerViewDisplayRatio = (float) 720 / 1280;   //当前界面播放器view展示的宽高比,用主流的16:9
-
-    private View activityLayout;
-
-    private LinearLayout mLayoutTopBar;
-    private RelativeLayout mLayoutList;
-    private PlayerRelativeLayout mLayoutPlayer;
-
-    private ImageView mImageBack;
-    private TextView mTextTitle;
-
-    private ImageView mImageLock;
-    private ImageView mImageMenu;
-
-    private SuperPlayerView mSuperPlayerView;
-    private RecyclerView mVodPlayerListView;
-
-    private PlayerListAdapter mVodPlayerListAdapter;
-
-    private boolean mIsManualPause = false;
-
-    private ViewInsets.ViewportMetrics viewInsets = new ViewInsets.ViewportMetrics();
-
-    private int currentIndex = -1;
-
-    private ActivityPlayerBinding binding;
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        binding = ActivityPlayerBinding.inflate(getLayoutInflater());
-        setContentView(binding.getRoot());
-
-        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-        initView();
-        initData();
-
-        updateList();
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (isFullScreen) {
-            mSuperPlayerView.switchPlayMode(SuperPlayerDef.PlayerMode.WINDOW);
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    /**
-     * 以16:9 比例显示播放器view,优先保证宽度完全填充
-     */
-    private void adjustSuperPlayerViewAndMaskHeight() {
-        final int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
-        ViewGroup.LayoutParams layoutParams = mSuperPlayerView.getLayoutParams();
-        layoutParams.width = screenWidth;
-        layoutParams.height = (int) (screenWidth * sPlayerViewDisplayRatio);
-        mSuperPlayerView.setLayoutParams(layoutParams);
-
-        getWindow().getDecorView().setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
-            @Override
-            public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
-                WindowInsets newInsets = insets;
-                viewInsets = ViewInsets.applyWindowInsets(PlayerActivity.this, insets);
-                setPadding();
-                return newInsets;
-            }
-        });
-    }
-
-    private void initView() {
-        activityLayout = findViewById(R.id.superplayer_activity);
-
-        mLayoutTopBar = (LinearLayout) findViewById(R.id.superplayer_tc_action_bar);
-        mLayoutList = (RelativeLayout) findViewById(R.id.superplayer_rb_list);
-        mLayoutPlayer = (PlayerRelativeLayout) findViewById(R.id.superplayer_bl_player);
-
-        mImageBack = (ImageView) findViewById(R.id.superplayer_tc_back);
-        mImageBack.setOnClickListener(this);
-
-        mTextTitle = (TextView) findViewById(R.id.superplayer_tc_url);
-        mTextTitle.setOnClickListener(this);
-
-        mImageLock = (ImageView) findViewById(R.id.superplayer_tc_lock);
-        mImageLock.setOnClickListener(this);
-
-        mImageMenu = (ImageView) findViewById(R.id.superplayer_tc_menu);
-        mImageMenu.setOnClickListener(this);
-
-        mSuperPlayerView = (SuperPlayerView) findViewById(R.id.superVodPlayerView);
-        mSuperPlayerView.setPlayerViewCallback(this);
-
-        mVodPlayerListView = (RecyclerView) findViewById(R.id.superplayer_recycler_view);
-        mVodPlayerListView.setLayoutManager(new LinearLayoutManager(this));
-        mVodPlayerListAdapter = new PlayerListAdapter(this);
-        mVodPlayerListAdapter.setOnItemClickListener(this);
-        mVodPlayerListView.setAdapter(mVodPlayerListAdapter);
-        mVodPlayerListView.addItemDecoration(new PlayerListDecoration());
-
-        binding.superplayerTcVerify.setOnClickListener(this);
-        adjustSuperPlayerViewAndMaskHeight();
-    }
-
-    private void initData() {
-        initSuperVodGlobalSetting();
-    }
-
-    /**
-     * 初始化超级播放器全局配置
-     */
-    private void initSuperVodGlobalSetting() {
-        SuperPlayerGlobalConfig prefs = SuperPlayerGlobalConfig.getInstance();
-        prefs.maxCacheItem = 5;
-        prefs.enableHWAcceleration = true;
-        prefs.renderMode = TXLiveConstants.RENDER_MODE_ADJUST_RESOLUTION;
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        if (mSuperPlayerView.getPlayerState() == SuperPlayerDef.PlayerState.PLAYING
-                || mSuperPlayerView.getPlayerState() == SuperPlayerDef.PlayerState.PAUSE) {
-            Log.i(TAG, "onResume state :" + mSuperPlayerView.getPlayerState());
-            if (!mIsManualPause) {
-                mSuperPlayerView.onResume();
-            }
-        }
-
-        mSuperPlayerView.setNeedToPause(false);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        Log.i(TAG, "onPause state :" + mSuperPlayerView.getPlayerState());
-
-        mIsManualPause = mSuperPlayerView.getPlayerState() == SuperPlayerDef.PlayerState.PAUSE;
-        mSuperPlayerView.onPause();
-        mSuperPlayerView.setNeedToPause(true);
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mSuperPlayerView.release();
-        mSuperPlayerView.resetPlayer();
-    }
-
-    @Override
-    public void onItemClick(SuperPlayerModel videoModel, int index) {
-        playVideoModel(index);
-    }
-
-    private void playVideoModel(int index) {
-        mSuperPlayerView.playWithModelList(PlayerModelProvider.getList(), false, index);
-    }
-
-    @Override
-    public void onClick(View v) {
-        int id = v.getId();
-        if (id == R.id.superplayer_tc_back) {
-            finish();
-        } else if (id == R.id.superplayer_tc_lock) {
-            mSuperPlayerView.switchPlayMode(SuperPlayerDef.PlayerMode.FULLSCREEN);
-        } else if (id == R.id.superplayer_tc_menu) {
-            PlayerMenu.start(PlayerActivity.this, "");
-        } else if (id == binding.superplayerTcVerify.getId()) {
-            PlayerVerify.start(PlayerActivity.this);
-        }
-    }
-
-    private void updateList() {
-        mVodPlayerListAdapter.clear();
-
-        for (SuperPlayerModel videoModel : PlayerModelProvider.getList()) {
-            mVodPlayerListAdapter.addSuperPlayerModel(videoModel);
-        }
-
-        mSuperPlayerView.playWithModelList(PlayerModelProvider.getList(), false, 0);
-    }
-
-    private boolean isFullScreen = false;
-
-    @Override
-    public void onStartFullScreenPlay() {
-        // 隐藏其他元素实现全屏
-        mLayoutPlayer.onFullScreenMode();
-        mLayoutTopBar.setVisibility(GONE);
-        mLayoutList.setVisibility(GONE);
-        isFullScreen = true;
-        setPadding();
-    }
-
-    @Override
-    public void onStopFullScreenPlay() {
-        // 恢复原有元素
-        mLayoutPlayer.onWindowMode();
-        mLayoutTopBar.setVisibility(VISIBLE);
-        mLayoutList.setVisibility(VISIBLE);
-        isFullScreen = false;
-        setPadding();
-    }
-
-    private void setPadding() {
-        if (!isFullScreen) {
-            activityLayout.setPadding(
-                    viewInsets.viewPaddingLeft,
-                    viewInsets.viewPaddingTop,
-                    viewInsets.viewPaddingRight,
-                    viewInsets.viewPaddingBottom
-            );
-        } else {
-            activityLayout.setPadding(0, 0, 0, 0);
-        }
-    }
-
-    @Override
-    public void onPlaying() {
-
-    }
-
-    @Override
-    public void onPlayIndex(int index, SuperPlayerModel model) {
-        mVodPlayerListAdapter.setIndex(index);
-        ((LinearLayoutManager) mVodPlayerListView.getLayoutManager()).scrollToPositionWithOffset(index * 200, 0);
-    }
-
-    @Override
-    public void onPlayEnd() {
-
-    }
-
-    @Override
-    public void onError(int code) {
-
-    }
-}

+ 0 - 176
ui/src/main/java/com/tencent/liteav/demo/player/ViewInsets.java

@@ -1,176 +0,0 @@
-package com.tencent.liteav.demo.player;
-
-import static android.view.View.SYSTEM_UI_FLAG_FULLSCREEN;
-import static android.view.View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
-
-import static androidx.core.view.ViewCompat.getWindowSystemUiVisibility;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Insets;
-import android.os.Build;
-import android.view.DisplayCutout;
-import android.view.Surface;
-import android.view.WindowInsets;
-import android.view.WindowManager;
-
-import androidx.annotation.RequiresApi;
-
-
-public class ViewInsets {
-
-    public static class ViewportMetrics {
-        public int viewPaddingTop = 0;
-        public int viewPaddingRight = 0;
-        public int viewPaddingBottom = 0;
-        public int viewPaddingLeft = 0;
-        public int viewInsetTop = 0;
-        public int viewInsetRight = 0;
-        public int viewInsetBottom = 0;
-        public int viewInsetLeft = 0;
-    }
-
-    private enum ZeroSides {
-        NONE,
-        LEFT,
-        RIGHT,
-        BOTH
-    }
-
-    private static ZeroSides calculateShouldZeroSides(Activity activity) {
-        // We get both orientation and rotation because rotation is all 4
-        // rotations relative to default rotation while orientation is portrait
-        // or landscape. By combining both, we can obtain a more precise measure
-        // of the rotation.
-        Context context = activity.getBaseContext();
-        int orientation = context.getResources().getConfiguration().orientation;
-        int rotation =
-                ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))
-                        .getDefaultDisplay()
-                        .getRotation();
-
-        if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
-            if (rotation == Surface.ROTATION_90) {
-                return ZeroSides.RIGHT;
-            } else if (rotation == Surface.ROTATION_270) {
-                // In android API >= 23, the nav bar always appears on the "bottom" (USB) side.
-                return Build.VERSION.SDK_INT >= 23 ? ZeroSides.LEFT : ZeroSides.RIGHT;
-            }
-            // Ambiguous orientation due to landscape left/right default. Zero both sides.
-            else if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
-                return ZeroSides.BOTH;
-            }
-        }
-        // Square orientation deprecated in API 16, we will not check for it and return false
-        // to be safe and not remove any unique padding for the devices that do use it.
-        return ZeroSides.NONE;
-    }
-
-
-    public static ViewportMetrics applyWindowInsets(Activity activity, WindowInsets insets) {
-        ViewportMetrics viewportMetrics = new ViewportMetrics();
-
-        boolean statusBarVisible = (SYSTEM_UI_FLAG_FULLSCREEN & getWindowSystemUiVisibility(activity.getWindow().getDecorView())) == 0;
-        boolean navigationBarVisible =
-                (SYSTEM_UI_FLAG_HIDE_NAVIGATION & getWindowSystemUiVisibility(activity.getWindow().getDecorView())) == 0;
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
-            int mask = 0;
-            if (navigationBarVisible) {
-                mask = mask | android.view.WindowInsets.Type.navigationBars();
-            }
-            if (statusBarVisible) {
-                mask = mask | android.view.WindowInsets.Type.statusBars();
-            }
-            Insets uiInsets = insets.getInsets(mask);
-            viewportMetrics.viewPaddingTop = uiInsets.top;
-            viewportMetrics.viewPaddingRight = uiInsets.right;
-            viewportMetrics.viewPaddingBottom = uiInsets.bottom;
-            viewportMetrics.viewPaddingLeft = uiInsets.left;
-
-            Insets imeInsets = insets.getInsets(android.view.WindowInsets.Type.ime());
-            viewportMetrics.viewInsetTop = imeInsets.top;
-            viewportMetrics.viewInsetRight = imeInsets.right;
-            viewportMetrics.viewInsetBottom = imeInsets.bottom;
-            viewportMetrics.viewInsetLeft = imeInsets.left;
-        } else {
-            // We zero the left and/or right sides to prevent the padding the
-            // navigation bar would have caused.
-            ZeroSides zeroSides = ZeroSides.NONE;
-            if (!navigationBarVisible) {
-                zeroSides = calculateShouldZeroSides(activity);
-            }
-
-            // Status bar (top), navigation bar (bottom) and left/right system insets should
-            // partially obscure the content (padding).
-            viewportMetrics.viewPaddingTop = statusBarVisible ? insets.getSystemWindowInsetTop() : 0;
-            viewportMetrics.viewPaddingRight =
-                    zeroSides == ZeroSides.RIGHT || zeroSides == ZeroSides.BOTH
-                            ? 0
-                            : insets.getSystemWindowInsetRight();
-            viewportMetrics.viewPaddingBottom =
-                    navigationBarVisible && guessBottomKeyboardInset(activity, insets) == 0
-                            ? insets.getSystemWindowInsetBottom()
-                            : 0;
-            viewportMetrics.viewPaddingLeft =
-                    zeroSides == ZeroSides.LEFT || zeroSides == ZeroSides.BOTH
-                            ? 0
-                            : insets.getSystemWindowInsetLeft();
-
-            // Bottom system inset (keyboard) should adjust scrollable bottom edge (inset).
-            viewportMetrics.viewInsetTop = 0;
-            viewportMetrics.viewInsetRight = 0;
-            viewportMetrics.viewInsetBottom = guessBottomKeyboardInset(activity, insets);
-            viewportMetrics.viewInsetLeft = 0;
-        }
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
-            DisplayCutout cutout = insets.getDisplayCutout();
-            if (cutout != null) {
-                Insets waterfallInsets = Insets.NONE;
-
-                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
-                    waterfallInsets = cutout.getWaterfallInsets();
-                }
-
-                viewportMetrics.viewPaddingTop =
-                        Math.max(
-                                Math.max(viewportMetrics.viewPaddingTop, waterfallInsets.top),
-                                cutout.getSafeInsetTop());
-                viewportMetrics.viewPaddingRight =
-                        Math.max(
-                                Math.max(viewportMetrics.viewPaddingRight, waterfallInsets.right),
-                                cutout.getSafeInsetRight());
-                viewportMetrics.viewPaddingBottom =
-                        Math.max(
-                                Math.max(viewportMetrics.viewPaddingBottom, waterfallInsets.bottom),
-                                cutout.getSafeInsetBottom());
-                viewportMetrics.viewPaddingLeft =
-                        Math.max(
-                                Math.max(viewportMetrics.viewPaddingLeft, waterfallInsets.left),
-                                cutout.getSafeInsetLeft());
-            }
-        }
-
-        return viewportMetrics;
-    }
-
-    @TargetApi(20)
-    @RequiresApi(20)
-    private static int guessBottomKeyboardInset(Activity activity, WindowInsets insets) {
-        int screenHeight = activity.getWindow().getDecorView().getHeight();
-        // Magic number due to this being a heuristic. This should be replaced, but we have not
-        // found a clean way to do it yet (Sept. 2018)
-        final double keyboardHeightRatioHeuristic = 0.18;
-        if (insets.getSystemWindowInsetBottom() < screenHeight * keyboardHeightRatioHeuristic) {
-            // Is not a keyboard, so return zero as inset.
-            return 0;
-        } else {
-            // Is a keyboard, so return the full inset.
-            return insets.getSystemWindowInsetBottom();
-        }
-    }
-
-}

+ 7 - 2
ui/src/main/java/com/tencent/liteav/demo/player/util/PlayerModelProvider.java

@@ -6,6 +6,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class PlayerModelProvider {
+    private static final String VIDEO_URL = "https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000c9kggtjc77ubekkovilg&line=0&file_id=4465db5b9e48487197f8c0359e94ec46&sign=538e27bb98107b3dbabc0e24af67b0a8&is_play_url=1&source=PackSourceEnum_AWEME_DETAIL&aid=6383";
+
+    private static final String COVER_URL = "";
+
     private PlayerModelProvider() {
     }
 
@@ -17,14 +21,15 @@ public class PlayerModelProvider {
             model.title = "测试视频" + i;
             model.duration = 1222;
             model.isEnableCache = true;
-            model.url = "https://v26-web.douyinvod.com/802dec176de7e625a42389f1b06ff316/62fdfbac/video/tos/cn/tos-cn-ve-15c001-alinc2/c25dd934970346678458d085b01772a3/?a=6383&ch=0&cr=0&dr=0&cd=0%7C0%7C0%7C0&cv=1&br=1374&bt=1374&cs=0&ds=3&ft=X1nbLXvvBQ3AUq8yq8Z.wNnOYZlc_UI7F2bLtM40xiZm&mime_type=video_mp4&qs=0&rc=Zzo7N2k4O2Q7aTg8ZWQ4N0Bpajc4dzo6Zng6ZDMzNGkzM0BhYF9gNDNgX2MxXmBjYzJeYSNhbzVhcjRnNWBgLS1kLS9zcw%3D%3D";
+            model.url = VIDEO_URL;
+
             if (i % 2 == 0) {
                 model.cover = "https://p9-pc-sign.douyinpic.com/tos-cn-p-0015/57aaf7f5975247e09c3df35e152055e4_1654159193~tplv-dy-360p.jpeg?biz_tag=pcweb_cover&from=4257465056&se=false&x-expires=1662015600&x-signature=0uL3qAHjGGcvaNmDuopeSCKdfm8%3D";
             }
             list.add(model);
         }
 
-        list.get(list.size()-1).isLast = true;
+        list.get(list.size() - 1).isLast = true;
         return list;
     }
 }

+ 250 - 0
ui/src/main/kotlin/com/tencent/liteav/demo/player/PlayerActivity.kt

@@ -0,0 +1,250 @@
+package com.tencent.liteav.demo.player
+
+import android.content.Intent
+import android.view.View
+import com.tencent.liteav.demo.superplayer.SuperPlayerView.OnSuperPlayerViewCallback
+import com.tencent.liteav.demo.player.ui.PlayerListAdapter
+import com.tencent.liteav.demo.player.ViewInsets.ViewportMetrics
+import android.os.Bundle
+import android.util.Log
+import android.view.WindowManager
+import androidx.activity.viewModels
+import com.tencent.liteav.demo.superplayer.SuperPlayerDef
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.viewmodel.viewModelFactory
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.tencent.liteav.demo.player.ui.PlayerListDecoration
+import com.tencent.liteav.demo.superplayer.SuperPlayerGlobalConfig
+import com.tencent.rtmp.TXLiveConstants
+import com.tencent.liteav.demo.superplayer.SuperPlayerModel
+import com.tencent.liteav.demo.player.util.PlayerModelProvider
+import com.tencent.liteav.demo.player.databinding.ActivityPlayerBinding
+import com.tencent.liteav.demo.player.viewmodel.PlayerViewModel
+import com.tencent.liteav.demo.player.viewmodel.PlayerViewModelFactory
+import com.tencent.liteav.demo.superplayer.database.PlayerDatabaseProvider
+import com.tencent.liteav.demo.superplayer.database.entity.History
+
+/**
+ * Created by liyuejiao on 2018/7/3.
+ * 超级播放器主Activity
+ */
+class PlayerActivity : AppCompatActivity(),
+    View.OnClickListener,
+    OnSuperPlayerViewCallback,
+    PlayerListAdapter.OnItemClickListener {
+
+    private var _viewBinding: ActivityPlayerBinding? = null
+    private val viewBinding get() = _viewBinding!!
+
+    private val activityLayout get() = viewBinding.superplayerActivity
+    private val mLayoutTopBar get() = viewBinding.superplayerTcActionBar
+    private val mLayoutList get() = viewBinding.superplayerRbList
+    private val mLayoutPlayer get() = viewBinding.superplayerBlPlayer
+    private val mImageBack get() = viewBinding.superplayerTcBack
+    private val mTextTitle get() = viewBinding.superplayerTcUrl
+    private val mImageLock get() = viewBinding.superplayerTcLock
+    private val mImageMenu get() = viewBinding.superplayerTcMenu
+    private val mSuperPlayerView get() = viewBinding.superVodPlayerView
+    private val mVodPlayerListView get() = viewBinding.superplayerRecyclerView
+    private lateinit var mVodPlayerListAdapter: PlayerListAdapter
+
+    private var mIsManualPause = false
+
+    private var viewInsets = ViewportMetrics()
+    private val currentIndex = -1
+
+    private val viewModel by viewModels<PlayerViewModel> {
+        PlayerViewModelFactory(((application) as PlayerDatabaseProvider).getPlayerRepository())
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        _viewBinding = ActivityPlayerBinding.inflate(layoutInflater)
+        setContentView(viewBinding.root)
+        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
+        initView()
+        initData()
+        updateList()
+
+    }
+
+    override fun onBackPressed() {
+        if (isFullScreen) {
+            mSuperPlayerView.switchPlayMode(SuperPlayerDef.PlayerMode.WINDOW)
+        } else {
+            super.onBackPressed()
+        }
+    }
+
+    /**
+     * 以16:9 比例显示播放器view,优先保证宽度完全填充
+     */
+    private fun adjustSuperPlayerViewAndMaskHeight() {
+        val screenWidth = windowManager.defaultDisplay.width
+        val layoutParams = mSuperPlayerView.layoutParams
+        layoutParams.width = screenWidth
+        layoutParams.height = (screenWidth * sPlayerViewDisplayRatio).toInt()
+        mSuperPlayerView.layoutParams = layoutParams
+        window.decorView.setOnApplyWindowInsetsListener { v, insets ->
+            viewInsets = ViewInsets.applyWindowInsets(this@PlayerActivity, insets)
+            setPadding()
+            insets
+        }
+    }
+
+    private fun initView() {
+        mImageBack.setOnClickListener(this)
+        mTextTitle.setOnClickListener(this)
+        mImageLock.setOnClickListener(this)
+        mImageMenu.setOnClickListener(this)
+        mSuperPlayerView.setPlayerViewCallback(this)
+        mVodPlayerListView.layoutManager = LinearLayoutManager(this)
+        mVodPlayerListAdapter = PlayerListAdapter(this)
+        mVodPlayerListAdapter.setOnItemClickListener(this)
+        mVodPlayerListView.adapter = mVodPlayerListAdapter
+        mVodPlayerListView.addItemDecoration(PlayerListDecoration())
+        viewBinding.superplayerTcVerify.setOnClickListener(this)
+        adjustSuperPlayerViewAndMaskHeight()
+    }
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+
+        when (requestCode) {
+            0 -> {
+                if (checkResultCode(resultCode)) {
+                }
+            }
+            else -> {
+
+            }
+        }
+    }
+
+    fun checkResultCode(resultCode: Int): Boolean {
+        return resultCode == RESULT_OK
+    }
+
+    private fun initData() {
+        initSuperVodGlobalSetting()
+    }
+
+    /**
+     * 初始化超级播放器全局配置
+     */
+    private fun initSuperVodGlobalSetting() {
+        val prefs = SuperPlayerGlobalConfig.getInstance()
+        prefs.maxCacheItem = 5
+        prefs.enableHWAcceleration = true
+        prefs.renderMode = TXLiveConstants.RENDER_MODE_ADJUST_RESOLUTION
+    }
+
+    override fun onResume() {
+        super.onResume()
+        if (mSuperPlayerView.playerState == SuperPlayerDef.PlayerState.PLAYING
+            || mSuperPlayerView.playerState == SuperPlayerDef.PlayerState.PAUSE
+        ) {
+            Log.i(TAG, "onResume state :" + mSuperPlayerView.playerState)
+            if (!mIsManualPause) {
+                mSuperPlayerView.onResume()
+            }
+        }
+        mSuperPlayerView.setNeedToPause(false)
+    }
+
+    override fun onPause() {
+        super.onPause()
+        Log.i(TAG, "onPause state :" + mSuperPlayerView.playerState)
+        mIsManualPause = mSuperPlayerView.playerState == SuperPlayerDef.PlayerState.PAUSE
+        mSuperPlayerView.onPause()
+        mSuperPlayerView.setNeedToPause(true)
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        mSuperPlayerView.release()
+        mSuperPlayerView.resetPlayer()
+        _viewBinding = null
+    }
+
+    override fun onItemClick(videoModel: SuperPlayerModel, index: Int) {
+        playVideoModel(index)
+    }
+
+    private fun playVideoModel(index: Int) {
+        mSuperPlayerView.playWithModelList(PlayerModelProvider.getList(), true, index)
+    }
+
+    override fun onClick(v: View) {
+        val id = v.id
+        if (id == R.id.superplayer_tc_back) {
+            finish()
+        } else if (id == R.id.superplayer_tc_lock) {
+            mSuperPlayerView.switchPlayMode(SuperPlayerDef.PlayerMode.FULLSCREEN)
+        } else if (id == R.id.superplayer_tc_menu) {
+            PlayerMenu.start(this@PlayerActivity, "")
+        } else if (id == viewBinding.superplayerTcVerify.id) {
+            PlayerVerify.start(this@PlayerActivity)
+        }
+    }
+
+    private fun updateList() {
+        mVodPlayerListAdapter.clear()
+        for (videoModel in PlayerModelProvider.getList()) {
+            mVodPlayerListAdapter.addSuperPlayerModel(videoModel)
+        }
+        mSuperPlayerView.playWithModelList(PlayerModelProvider.getList(), false, 0)
+    }
+
+    private var isFullScreen = false
+    override fun onStartFullScreenPlay() {
+        // 隐藏其他元素实现全屏
+        mLayoutPlayer.onFullScreenMode()
+        mLayoutTopBar.visibility = View.GONE
+        mLayoutList.visibility = View.GONE
+        isFullScreen = true
+        setPadding()
+    }
+
+    override fun onStopFullScreenPlay() {
+        // 恢复原有元素
+        mLayoutPlayer.onWindowMode()
+        mLayoutTopBar.visibility = View.VISIBLE
+        mLayoutList.visibility = View.VISIBLE
+        isFullScreen = false
+        setPadding()
+    }
+
+    private fun setPadding() {
+        if (!isFullScreen) {
+            activityLayout.setPadding(
+                viewInsets.viewPaddingLeft,
+                viewInsets.viewPaddingTop,
+                viewInsets.viewPaddingRight,
+                viewInsets.viewPaddingBottom
+            )
+        } else {
+            activityLayout.setPadding(0, 0, 0, 0)
+        }
+    }
+
+    override fun onPlaying() {}
+    override fun onPlayIndex(index: Int, model: SuperPlayerModel) {
+        viewModel.saveHistory(History(start = 0, end = 10, courseId = model.url))
+        mVodPlayerListAdapter.setIndex(index)
+        (mVodPlayerListView.layoutManager as LinearLayoutManager?)!!.scrollToPositionWithOffset(
+            index * 200,
+            0
+        )
+    }
+
+    override fun onPlayEnd() {}
+    override fun onError(code: Int) {}
+
+    companion object {
+        private const val TAG = "SuperPlayerActivity"
+        private const val sPlayerViewDisplayRatio =
+            720.toFloat() / 1280 //当前界面播放器view展示的宽高比,用主流的16:9
+    }
+}

+ 157 - 0
ui/src/main/kotlin/com/tencent/liteav/demo/player/ViewInsets.kt

@@ -0,0 +1,157 @@
+package com.tencent.liteav.demo.player
+
+import android.app.Activity
+import com.tencent.liteav.demo.player.ViewInsets.ZeroSides
+import android.content.Context
+import android.view.WindowManager
+import android.view.Surface
+import android.os.Build
+import android.view.WindowInsets
+import com.tencent.liteav.demo.player.ViewInsets.ViewportMetrics
+import android.view.View
+import com.tencent.liteav.demo.player.ViewInsets
+import android.view.DisplayCutout
+import android.annotation.TargetApi
+import android.content.res.Configuration
+import android.graphics.Insets
+import androidx.annotation.RequiresApi
+import androidx.core.view.ViewCompat
+
+object ViewInsets {
+    private fun calculateShouldZeroSides(activity: Activity): ZeroSides {
+        // We get both orientation and rotation because rotation is all 4
+        // rotations relative to default rotation while orientation is portrait
+        // or landscape. By combining both, we can obtain a more precise measure
+        // of the rotation.
+        val context = activity.baseContext
+        val orientation = context.resources.configuration.orientation
+        val rotation = (context.getSystemService(Context.WINDOW_SERVICE) as WindowManager)
+            .defaultDisplay
+            .rotation
+        if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
+            if (rotation == Surface.ROTATION_90) {
+                return ZeroSides.RIGHT
+            } else if (rotation == Surface.ROTATION_270) {
+                // In android API >= 23, the nav bar always appears on the "bottom" (USB) side.
+                return if (Build.VERSION.SDK_INT >= 23) ZeroSides.LEFT else ZeroSides.RIGHT
+            } else if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
+                return ZeroSides.BOTH
+            }
+        }
+        // Square orientation deprecated in API 16, we will not check for it and return false
+        // to be safe and not remove any unique padding for the devices that do use it.
+        return ZeroSides.NONE
+    }
+
+    fun applyWindowInsets(activity: Activity, insets: WindowInsets): ViewportMetrics {
+        val viewportMetrics = ViewportMetrics()
+        val statusBarVisible =
+            View.SYSTEM_UI_FLAG_FULLSCREEN and ViewCompat.getWindowSystemUiVisibility(activity.window.decorView) == 0
+        val navigationBarVisible =
+            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION and ViewCompat.getWindowSystemUiVisibility(activity.window.decorView) == 0
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            var mask = 0
+            if (navigationBarVisible) {
+                mask = mask or WindowInsets.Type.navigationBars()
+            }
+            if (statusBarVisible) {
+                mask = mask or WindowInsets.Type.statusBars()
+            }
+            val uiInsets = insets.getInsets(mask)
+            viewportMetrics.viewPaddingTop = uiInsets.top
+            viewportMetrics.viewPaddingRight = uiInsets.right
+            viewportMetrics.viewPaddingBottom = uiInsets.bottom
+            viewportMetrics.viewPaddingLeft = uiInsets.left
+            val imeInsets = insets.getInsets(WindowInsets.Type.ime())
+            viewportMetrics.viewInsetTop = imeInsets.top
+            viewportMetrics.viewInsetRight = imeInsets.right
+            viewportMetrics.viewInsetBottom = imeInsets.bottom
+            viewportMetrics.viewInsetLeft = imeInsets.left
+        } else {
+            // We zero the left and/or right sides to prevent the padding the
+            // navigation bar would have caused.
+            var zeroSides = ZeroSides.NONE
+            if (!navigationBarVisible) {
+                zeroSides = calculateShouldZeroSides(activity)
+            }
+
+            // Status bar (top), navigation bar (bottom) and left/right system insets should
+            // partially obscure the content (padding).
+            viewportMetrics.viewPaddingTop =
+                if (statusBarVisible) insets.systemWindowInsetTop else 0
+            viewportMetrics.viewPaddingRight =
+                if (zeroSides == ZeroSides.RIGHT || zeroSides == ZeroSides.BOTH) 0 else insets.systemWindowInsetRight
+            viewportMetrics.viewPaddingBottom =
+                if (navigationBarVisible && guessBottomKeyboardInset(
+                        activity,
+                        insets
+                    ) == 0
+                ) insets.systemWindowInsetBottom else 0
+            viewportMetrics.viewPaddingLeft =
+                if (zeroSides == ZeroSides.LEFT || zeroSides == ZeroSides.BOTH) 0 else insets.systemWindowInsetLeft
+
+            // Bottom system inset (keyboard) should adjust scrollable bottom edge (inset).
+            viewportMetrics.viewInsetTop = 0
+            viewportMetrics.viewInsetRight = 0
+            viewportMetrics.viewInsetBottom = guessBottomKeyboardInset(activity, insets)
+            viewportMetrics.viewInsetLeft = 0
+        }
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+            val cutout = insets.displayCutout
+            if (cutout != null) {
+                var waterfallInsets = Insets.NONE
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+                    waterfallInsets = cutout.waterfallInsets
+                }
+                viewportMetrics.viewPaddingTop = Math.max(
+                    Math.max(viewportMetrics.viewPaddingTop, waterfallInsets.top),
+                    cutout.safeInsetTop
+                )
+                viewportMetrics.viewPaddingRight = Math.max(
+                    Math.max(viewportMetrics.viewPaddingRight, waterfallInsets.right),
+                    cutout.safeInsetRight
+                )
+                viewportMetrics.viewPaddingBottom = Math.max(
+                    Math.max(viewportMetrics.viewPaddingBottom, waterfallInsets.bottom),
+                    cutout.safeInsetBottom
+                )
+                viewportMetrics.viewPaddingLeft = Math.max(
+                    Math.max(viewportMetrics.viewPaddingLeft, waterfallInsets.left),
+                    cutout.safeInsetLeft
+                )
+            }
+        }
+        return viewportMetrics
+    }
+
+    @TargetApi(20)
+    @RequiresApi(20)
+    private fun guessBottomKeyboardInset(activity: Activity, insets: WindowInsets): Int {
+        val screenHeight = activity.window.decorView.height
+        // Magic number due to this being a heuristic. This should be replaced, but we have not
+        // found a clean way to do it yet (Sept. 2018)
+        val keyboardHeightRatioHeuristic = 0.18
+        return if (insets.systemWindowInsetBottom < screenHeight * keyboardHeightRatioHeuristic) {
+            // Is not a keyboard, so return zero as inset.
+            0
+        } else {
+            // Is a keyboard, so return the full inset.
+            insets.systemWindowInsetBottom
+        }
+    }
+
+    class ViewportMetrics {
+        var viewPaddingTop = 0
+        var viewPaddingRight = 0
+        var viewPaddingBottom = 0
+        var viewPaddingLeft = 0
+        var viewInsetTop = 0
+        var viewInsetRight = 0
+        var viewInsetBottom = 0
+        var viewInsetLeft = 0
+    }
+
+    private enum class ZeroSides {
+        NONE, LEFT, RIGHT, BOTH
+    }
+}

+ 53 - 0
ui/src/main/kotlin/com/tencent/liteav/demo/player/viewmodel/PlayerViewModel.kt

@@ -0,0 +1,53 @@
+package com.tencent.liteav.demo.player.viewmodel
+
+import android.content.Context
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.viewModelScope
+import com.tencent.liteav.demo.superplayer.database.entity.CountDown
+import com.tencent.liteav.demo.superplayer.database.entity.History
+import com.tencent.liteav.demo.superplayer.database.repo.PlayerRepository
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.launch
+
+class PlayerViewModel(
+    private val repository: PlayerRepository
+) : ViewModel() {
+    private var countDown: CountDown? = null
+
+    private val countDownLiveData: MutableLiveData<Long> = MutableLiveData()
+
+    public fun loadConfig(context: Context) = viewModelScope.launch {
+        repository.findHasCountDown("").first()?.let {
+
+        }
+    }
+
+    public fun saveHistory(history: History) = viewModelScope.launch(Dispatchers.IO) {
+        repository.insertHistory(history)
+    }
+
+    public fun saveCountDown(countDown: CountDown) = viewModelScope.launch {
+        repository.insertCountDown(countDown)
+    }
+
+    public fun setCountDown(countDown: CountDown) {
+        if (countDown.type == CountDown.TYPE_EPISODE) {
+
+        } else if (countDown.type == CountDown.TYPE_DURATION) {
+
+        }
+    }
+}
+
+class PlayerViewModelFactory(private val repository: PlayerRepository) : ViewModelProvider.Factory {
+    override fun <T : ViewModel> create(modelClass: Class<T>): T {
+        if (modelClass.isAssignableFrom(PlayerViewModel::class.java)) {
+            @Suppress("UNCHECKED_CAST")
+            return PlayerViewModel(repository) as T
+        }
+        throw IllegalArgumentException("Unknown ViewModel class")
+    }
+}