Browse Source

first commit

姜永辉 1 năm trước cách đây
commit
8b44d3f673
100 tập tin đã thay đổi với 3262 bổ sung0 xóa
  1. BIN
      .gradle/6.7.1/executionHistory/executionHistory.bin
  2. BIN
      .gradle/6.7.1/executionHistory/executionHistory.lock
  3. BIN
      .gradle/6.7.1/fileChanges/last-build.bin
  4. BIN
      .gradle/6.7.1/fileHashes/fileHashes.bin
  5. BIN
      .gradle/6.7.1/fileHashes/fileHashes.lock
  6. BIN
      .gradle/6.7.1/fileHashes/resourceHashesCache.bin
  7. 0 0
      .gradle/6.7.1/gc.properties
  8. BIN
      .gradle/6.7.1/javaCompile/classAnalysis.bin
  9. BIN
      .gradle/6.7.1/javaCompile/jarAnalysis.bin
  10. BIN
      .gradle/6.7.1/javaCompile/javaCompile.lock
  11. BIN
      .gradle/6.7.1/javaCompile/taskHistory.bin
  12. BIN
      .gradle/buildOutputCleanup/buildOutputCleanup.lock
  13. 2 0
      .gradle/buildOutputCleanup/cache.properties
  14. BIN
      .gradle/buildOutputCleanup/outputFiles.bin
  15. BIN
      .gradle/checksums/checksums.lock
  16. BIN
      .gradle/checksums/md5-checksums.bin
  17. BIN
      .gradle/checksums/sha1-checksums.bin
  18. 0 0
      .gradle/configuration-cache/gc.properties
  19. 0 0
      .gradle/vcs-1/gc.properties
  20. BIN
      .gradle/workspace-id.txt
  21. BIN
      .gradle/workspace-id.txt.lock
  22. 3 0
      .idea/.gitignore
  23. 6 0
      .idea/compiler.xml
  24. 20 0
      .idea/gradle.xml
  25. 35 0
      .idea/jarRepositories.xml
  26. 16 0
      .idea/libraries/Gradle__androidx_activity_activity_1_0_0_aar.xml
  27. 13 0
      .idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml
  28. 16 0
      .idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml
  29. 16 0
      .idea/libraries/Gradle__androidx_appcompat_appcompat_1_2_0_aar.xml
  30. 16 0
      .idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_2_0_aar.xml
  31. 11 0
      .idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml
  32. 13 0
      .idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml
  33. 13 0
      .idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml
  34. 11 0
      .idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml
  35. 11 0
      .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_1_aar.xml
  36. 9 0
      .idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_1.xml
  37. 16 0
      .idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml
  38. 16 0
      .idea/libraries/Gradle__androidx_core_core_1_3_1_aar.xml
  39. 13 0
      .idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
  40. 13 0
      .idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml
  41. 16 0
      .idea/libraries/Gradle__androidx_databinding_viewbinding_4_2_0_aar.xml
  42. 16 0
      .idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml
  43. 16 0
      .idea/libraries/Gradle__androidx_fragment_fragment_1_1_0_aar.xml
  44. 13 0
      .idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml
  45. 11 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_2_0.xml
  46. 13 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_2_0_aar.xml
  47. 13 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_2_0_aar.xml
  48. 16 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_ktx_2_2_0_aar.xml
  49. 16 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_ktx_2_2_0_aar.xml
  50. 13 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_1_0_aar.xml
  51. 13 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_2_0_aar.xml
  52. 16 0
      .idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_ktx_2_2_0_aar.xml
  53. 13 0
      .idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml
  54. 16 0
      .idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml
  55. 16 0
      .idea/libraries/Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml
  56. 16 0
      .idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml
  57. 13 0
      .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml
  58. 13 0
      .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml
  59. 13 0
      .idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml
  60. 20 0
      .idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml
  61. 13 0
      .idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
  62. 16 0
      .idea/libraries/Gradle__com_google_android_material_material_1_2_1_aar.xml
  63. 13 0
      .idea/libraries/Gradle__com_google_code_gson_gson_2_8_9.xml
  64. 13 0
      .idea/libraries/Gradle__com_google_zxing_core_3_3_3.xml
  65. 25 0
      .idea/libraries/Gradle__com_journeyapps_zxing_android_embedded_3_6_0_aar.xml
  66. 13 0
      .idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_10_0.xml
  67. 13 0
      .idea/libraries/Gradle__com_squareup_okio_okio_jvm_3_0_0.xml
  68. 13 0
      .idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml
  69. 13 0
      .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_20.xml
  70. 13 0
      .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_20.xml
  71. 13 0
      .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_5_31.xml
  72. 13 0
      .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_5_31.xml
  73. 13 0
      .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_3_0.xml
  74. 13 0
      .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_1_3_0.xml
  75. 16 0
      .idea/misc.xml
  76. 9 0
      .idea/modules.xml
  77. 94 0
      .idea/modules/app/mes-pda.app.iml
  78. 20 0
      .idea/modules/mes-pda.iml
  79. 10 0
      .idea/runConfigurations.xml
  80. 6 0
      .idea/vcs.xml
  81. 49 0
      app/build.gradle
  82. BIN
      app/libs/bugly_crash_release.jar
  83. 21 0
      app/proguard-rules.pro
  84. 67 0
      app/src/main/AndroidManifest.xml
  85. 78 0
      app/src/main/assets/400.html
  86. 78 0
      app/src/main/assets/401.html
  87. 78 0
      app/src/main/assets/403.html
  88. 102 0
      app/src/main/assets/404.html
  89. 78 0
      app/src/main/assets/405.html
  90. 78 0
      app/src/main/assets/406.html
  91. 78 0
      app/src/main/assets/407.html
  92. 78 0
      app/src/main/assets/500.html
  93. 78 0
      app/src/main/assets/501.html
  94. 78 0
      app/src/main/assets/502.html
  95. 78 0
      app/src/main/assets/503.html
  96. 78 0
      app/src/main/assets/504.html
  97. 78 0
      app/src/main/assets/505.html
  98. 96 0
      app/src/main/assets/JsTest.html
  99. 899 0
      app/src/main/java/com/dk/mes/app/activity/HomeActivity.java
  100. 179 0
      app/src/main/java/com/dk/mes/app/activity/MainActivity.java

BIN
.gradle/6.7.1/executionHistory/executionHistory.bin


BIN
.gradle/6.7.1/executionHistory/executionHistory.lock


BIN
.gradle/6.7.1/fileChanges/last-build.bin


BIN
.gradle/6.7.1/fileHashes/fileHashes.bin


BIN
.gradle/6.7.1/fileHashes/fileHashes.lock


BIN
.gradle/6.7.1/fileHashes/resourceHashesCache.bin


+ 0 - 0
.gradle/6.7.1/gc.properties


BIN
.gradle/6.7.1/javaCompile/classAnalysis.bin


BIN
.gradle/6.7.1/javaCompile/jarAnalysis.bin


BIN
.gradle/6.7.1/javaCompile/javaCompile.lock


BIN
.gradle/6.7.1/javaCompile/taskHistory.bin


BIN
.gradle/buildOutputCleanup/buildOutputCleanup.lock


+ 2 - 0
.gradle/buildOutputCleanup/cache.properties

@@ -0,0 +1,2 @@
+#Fri Apr 22 09:58:05 CST 2022
+gradle.version=6.7.1

BIN
.gradle/buildOutputCleanup/outputFiles.bin


BIN
.gradle/checksums/checksums.lock


BIN
.gradle/checksums/md5-checksums.bin


BIN
.gradle/checksums/sha1-checksums.bin


+ 0 - 0
.gradle/configuration-cache/gc.properties


+ 0 - 0
.gradle/vcs-1/gc.properties


BIN
.gradle/workspace-id.txt


BIN
.gradle/workspace-id.txt.lock


+ 3 - 0
.idea/.gitignore

@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml

+ 6 - 0
.idea/compiler.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="11" />
+  </component>
+</project>

+ 20 - 0
.idea/gradle.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="testRunner" value="PLATFORM" />
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/app" />
+          </set>
+        </option>
+        <option name="resolveModulePerSourceSet" value="false" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>

+ 35 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="BintrayJCenter" />
+      <option name="name" value="BintrayJCenter" />
+      <option name="url" value="https://jcenter.bintray.com/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="Google" />
+      <option name="name" value="Google" />
+      <option name="url" value="https://dl.google.com/dl/android/maven2/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven" />
+      <option name="name" value="maven" />
+      <option name="url" value="https://download.01.org/crosswalk/releases/crosswalk/android/maven2" />
+    </remote-repository>
+  </component>
+</project>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.activity:activity:1.0.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/99a6d588a8c711ee894376a71e2bb473/activity-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/99a6d588a8c711ee894376a71e2bb473/activity-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/99a6d588a8c711ee894376a71e2bb473/activity-1.0.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/99a6d588a8c711ee894376a71e2bb473/jetified-activity-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/99a6d588a8c711ee894376a71e2bb473/jetified-activity-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/99a6d588a8c711ee894376a71e2bb473/jetified-activity-1.0.0/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.activity/activity/1.0.0/28eb83e6a29ac3fbb87aa632cfa0e644a313f491/activity-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.annotation:annotation:1.1.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.1.0/e3a6fb2f40e3a3842e6b7472628ba4ce416ea4c8/annotation-1.1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.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://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation/1.1.0/8b7bdc00eb4d998bfbc76767b098620990f2a805/annotation-1.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.annotation:annotation-experimental:1.0.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/a4934bcfce5a642fea31bbad1cb3e0e2/annotation-experimental-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/a4934bcfce5a642fea31bbad1cb3e0e2/annotation-experimental-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/a4934bcfce5a642fea31bbad1cb3e0e2/annotation-experimental-1.0.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/a4934bcfce5a642fea31bbad1cb3e0e2/jetified-annotation-experimental-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/a4934bcfce5a642fea31bbad1cb3e0e2/jetified-annotation-experimental-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/a4934bcfce5a642fea31bbad1cb3e0e2/jetified-annotation-experimental-1.0.0/jars/classes.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.annotation/annotation-experimental/1.0.0/2408f6cb8f31ffabdd88e1365f82914c251e44dc/annotation-experimental-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.appcompat:appcompat:1.2.0@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/aee462275766ea11fd05a9119c668fe0/appcompat-1.2.0/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/aee462275766ea11fd05a9119c668fe0/appcompat-1.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/aee462275766ea11fd05a9119c668fe0/appcompat-1.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/aee462275766ea11fd05a9119c668fe0/appcompat-1.2.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.appcompat/appcompat/1.2.0/13e8ff89631c2e101eb6bddd12c2fb4bbd74b15d/appcompat-1.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.appcompat:appcompat-resources:1.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6ba548daa8910021590b469dd1d15252/appcompat-resources-1.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6ba548daa8910021590b469dd1d15252/appcompat-resources-1.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6ba548daa8910021590b469dd1d15252/appcompat-resources-1.2.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6ba548daa8910021590b469dd1d15252/jetified-appcompat-resources-1.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6ba548daa8910021590b469dd1d15252/jetified-appcompat-resources-1.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6ba548daa8910021590b469dd1d15252/jetified-appcompat-resources-1.2.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.appcompat/appcompat-resources/1.2.0/9c8b428f65a329eeff4f6abe14a44931b12ef3f2/appcompat-resources-1.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.arch.core:core-common:2.1.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.1.0/b3152fc64428c9354344bd89848ecddc09b6f07e/core-common-2.1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.arch.core/core-common/2.1.0/80ac2d7c8e6400ce2fbc663cd1a7e1cbef38c4b8/core-common-2.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

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

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

@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.collection:collection:1.1.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.collection/collection/1.1.0/1f27220b47669781457de0d600849a5de0e89909/collection-1.1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.collection/collection/1.1.0/bae67b0019fbb38498198fcc2d0282a340b71c5b/collection-1.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

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

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/52af9bb131e0a20092265842e485c08f/coordinatorlayout-1.1.0/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/52af9bb131e0a20092265842e485c08f/coordinatorlayout-1.1.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/52af9bb131e0a20092265842e485c08f/coordinatorlayout-1.1.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/52af9bb131e0a20092265842e485c08f/coordinatorlayout-1.1.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.coordinatorlayout/coordinatorlayout/1.1.0/a15529ac349d76a872ae5ef42b84c320c456cd7f/coordinatorlayout-1.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

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

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

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

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.databinding:viewbinding:4.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/465d783f90737306ac5dbdd240d104f2/viewbinding-4.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/465d783f90737306ac5dbdd240d104f2/viewbinding-4.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/465d783f90737306ac5dbdd240d104f2/viewbinding-4.2.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/465d783f90737306ac5dbdd240d104f2/jetified-viewbinding-4.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/465d783f90737306ac5dbdd240d104f2/jetified-viewbinding-4.2.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/465d783f90737306ac5dbdd240d104f2/jetified-viewbinding-4.2.0/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.databinding/viewbinding/4.2.0/96e718eaa45095b41c48c82eb3bb3b5237e6f828/viewbinding-4.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/63d693d6393609dd312217953d27b75c/drawerlayout-1.0.0/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/63d693d6393609dd312217953d27b75c/drawerlayout-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/63d693d6393609dd312217953d27b75c/drawerlayout-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/63d693d6393609dd312217953d27b75c/drawerlayout-1.0.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.drawerlayout/drawerlayout/1.0.0/9ecd4ecb7da215ba4c5c3e00bf8d290dad6f2bc5/drawerlayout-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.fragment:fragment:1.1.0@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/905ffd1a5dad36185c5105d953647283/fragment-1.1.0/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/905ffd1a5dad36185c5105d953647283/fragment-1.1.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/905ffd1a5dad36185c5105d953647283/fragment-1.1.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/905ffd1a5dad36185c5105d953647283/fragment-1.1.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.fragment/fragment/1.1.0/b9ebb04df2cb0cad4419af3c658690bc82aa5706/fragment-1.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-common:2.2.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.2.0/4ef09a745007778eef83b92f8f23987a8ea59496/lifecycle-common-2.2.0.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-common/2.2.0/d38861c5e1656c5eb1890b1fa149510f38aa5d42/lifecycle-common-2.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-livedata:2.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7574a2bacc64e6b5d351698a89f42523/lifecycle-livedata-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7574a2bacc64e6b5d351698a89f42523/lifecycle-livedata-2.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/7574a2bacc64e6b5d351698a89f42523/lifecycle-livedata-2.2.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-livedata/2.2.0/9849dd6833f7e999169e4f9d48949cc92bf58b50/lifecycle-livedata-2.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-livedata-core-ktx:2.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/df4c86c718ca69703391ec61d05fa145/lifecycle-livedata-core-ktx-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/df4c86c718ca69703391ec61d05fa145/lifecycle-livedata-core-ktx-2.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/df4c86c718ca69703391ec61d05fa145/lifecycle-livedata-core-ktx-2.2.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/df4c86c718ca69703391ec61d05fa145/jetified-lifecycle-livedata-core-ktx-2.2.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/df4c86c718ca69703391ec61d05fa145/jetified-lifecycle-livedata-core-ktx-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/df4c86c718ca69703391ec61d05fa145/jetified-lifecycle-livedata-core-ktx-2.2.0/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-livedata-core-ktx/2.2.0/7aa8d50b21a293f7a525ec84869c421a963b0188/lifecycle-livedata-core-ktx-2.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-livedata-ktx:2.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/937bf2a3ad07aedffefb8c23841bd4b9/lifecycle-livedata-ktx-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/937bf2a3ad07aedffefb8c23841bd4b9/lifecycle-livedata-ktx-2.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/937bf2a3ad07aedffefb8c23841bd4b9/lifecycle-livedata-ktx-2.2.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/937bf2a3ad07aedffefb8c23841bd4b9/jetified-lifecycle-livedata-ktx-2.2.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/937bf2a3ad07aedffefb8c23841bd4b9/jetified-lifecycle-livedata-ktx-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/937bf2a3ad07aedffefb8c23841bd4b9/jetified-lifecycle-livedata-ktx-2.2.0/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-livedata-ktx/2.2.0/cf14c53d6d424fadcf5334860b11d1733ae8a422/lifecycle-livedata-ktx-2.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-runtime:2.1.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b8b9b24b8ca80aa20ad4d351a7bfff57/lifecycle-runtime-2.1.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b8b9b24b8ca80aa20ad4d351a7bfff57/lifecycle-runtime-2.1.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b8b9b24b8ca80aa20ad4d351a7bfff57/lifecycle-runtime-2.1.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-runtime/2.1.0/533a0cd1a095abbdfd08a49c4d34bd0713977034/lifecycle-runtime-2.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9bc547a46cd4534ed3e68d96227c7069/lifecycle-viewmodel-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9bc547a46cd4534ed3e68d96227c7069/lifecycle-viewmodel-2.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/9bc547a46cd4534ed3e68d96227c7069/lifecycle-viewmodel-2.2.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-viewmodel/2.2.0/4f90404dd52d3162217bf329db5afb32d373ec63/lifecycle-viewmodel-2.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/f28f53999825eb3813a58447076e7344/lifecycle-viewmodel-ktx-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/f28f53999825eb3813a58447076e7344/lifecycle-viewmodel-ktx-2.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/f28f53999825eb3813a58447076e7344/lifecycle-viewmodel-ktx-2.2.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/f28f53999825eb3813a58447076e7344/jetified-lifecycle-viewmodel-ktx-2.2.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/f28f53999825eb3813a58447076e7344/jetified-lifecycle-viewmodel-ktx-2.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/f28f53999825eb3813a58447076e7344/jetified-lifecycle-viewmodel-ktx-2.2.0/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.lifecycle/lifecycle-viewmodel-ktx/2.2.0/3bc5992b0bb49e2d7ce92d34c45e54e1795cc03b/lifecycle-viewmodel-ktx-2.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

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

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.savedstate:savedstate:1.0.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/fc0c8a66a760b49fb5235fd8b1759370/savedstate-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/fc0c8a66a760b49fb5235fd8b1759370/savedstate-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/fc0c8a66a760b49fb5235fd8b1759370/savedstate-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/fc0c8a66a760b49fb5235fd8b1759370/jetified-savedstate-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/fc0c8a66a760b49fb5235fd8b1759370/jetified-savedstate-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/fc0c8a66a760b49fb5235fd8b1759370/jetified-savedstate-1.0.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.savedstate/savedstate/1.0.0/e6daf87ed227a6f80bb8accb466755a5ee01a652/savedstate-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.transition:transition:1.2.0@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/da24100bb264bf73e5dde9fdbea460b1/transition-1.2.0/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/da24100bb264bf73e5dde9fdbea460b1/transition-1.2.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/da24100bb264bf73e5dde9fdbea460b1/transition-1.2.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/da24100bb264bf73e5dde9fdbea460b1/transition-1.2.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.transition/transition/1.2.0/65d2a5dab39f120d3f584fdead252ce81ec7dbee/transition-1.2.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.vectordrawable:vectordrawable:1.1.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad21947eec5ee398f5c283b0c4da9784/vectordrawable-1.1.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad21947eec5ee398f5c283b0c4da9784/vectordrawable-1.1.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/ad21947eec5ee398f5c283b0c4da9784/vectordrawable-1.1.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.vectordrawable/vectordrawable/1.1.0/1e0694477eed874c50c54b547cc3e5a62a57a62b/vectordrawable-1.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.1.0@aar">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/62ecce35880984b0c138ce475dc962aa/vectordrawable-animated-1.1.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/62ecce35880984b0c138ce475dc962aa/vectordrawable-animated-1.1.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/62ecce35880984b0c138ce475dc962aa/vectordrawable-animated-1.1.0/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.vectordrawable/vectordrawable-animated/1.1.0/871a7705cd03bc246947638c712cdd11378233ff/vectordrawable-animated-1.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

+ 20 - 0
.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml

@@ -0,0 +1,20 @@
+<component name="libraryTable">
+  <library name="Gradle: androidx.viewpager2:viewpager2:1.0.0@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/viewpager2-1.0.0/annotations.zip!/" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/jetified-viewpager2-1.0.0/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/viewpager2-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/viewpager2-1.0.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/viewpager2-1.0.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/jetified-viewpager2-1.0.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/jetified-viewpager2-1.0.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/8689124caa1430799f02cb459f46e2da/jetified-viewpager2-1.0.0/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/androidx.viewpager2/viewpager2/1.0.0/3c3569044e6969f1ee5c3aa03b08e6717a2d782f/viewpager2-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

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

@@ -0,0 +1,16 @@
+<component name="libraryTable">
+  <library name="Gradle: com.google.android.material:material:1.2.1@aar">
+    <ANNOTATIONS>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b4d8928e616b622da0060ae9d27d9276/material-1.2.1/annotations.zip!/" />
+    </ANNOTATIONS>
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b4d8928e616b622da0060ae9d27d9276/material-1.2.1/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b4d8928e616b622da0060ae9d27d9276/material-1.2.1/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/b4d8928e616b622da0060ae9d27d9276/material-1.2.1/AndroidManifest.xml" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.android.material/material/1.2.1/37d55d5141066b3d118d24232fa7025b65eb3a74/material-1.2.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: com.google.code.gson:gson:2.8.9">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.9/8a432c1d6825781e21a02db2e2c33c5fde2833b9/gson-2.8.9.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.9/a33effa02d6dcf9f096c942a7a7fbcf6d641234a/gson-2.8.9-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.9/e1167849f172a0b75d6ffe4e4b2f34b9259795bb/gson-2.8.9-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: com.google.zxing:core:3.3.3">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.zxing/core/3.3.3/b640badcc97f18867c4dfd249ef8d20ec0204c07/core-3.3.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.zxing/core/3.3.3/469db2817d5d3ffb60f0cce4cac8436dd57e920e/core-3.3.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.zxing/core/3.3.3/536b6ab3b3b4607ce86e2ff7f6643db11c473aa7/core-3.3.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 25 - 0
.idea/libraries/Gradle__com_journeyapps_zxing_android_embedded_3_6_0_aar.xml

@@ -0,0 +1,25 @@
+<component name="libraryTable">
+  <library name="Gradle: com.journeyapps:zxing-android-embedded:3.6.0@aar">
+    <CLASSES>
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/e02a187a71917c595b9d80ea65adb63f/jetified-zxing-android-embedded-3.6.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/e02a187a71917c595b9d80ea65adb63f/jetified-zxing-android-embedded-3.6.0/res" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/e02a187a71917c595b9d80ea65adb63f/jetified-zxing-android-embedded-3.6.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6dc2a11d933be12c86eecdab08cf7ede/jetified-zxing-android-embedded-3.6.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6dc2a11d933be12c86eecdab08cf7ede/jetified-zxing-android-embedded-3.6.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/6dc2a11d933be12c86eecdab08cf7ede/jetified-zxing-android-embedded-3.6.0/res" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/775537885ac9ce04491ccbb5ece1eae8/jetified-zxing-android-embedded-3.6.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/775537885ac9ce04491ccbb5ece1eae8/jetified-zxing-android-embedded-3.6.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/775537885ac9ce04491ccbb5ece1eae8/jetified-zxing-android-embedded-3.6.0/res" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3d5b040d994500ae43b1630ab775a3f0/jetified-zxing-android-embedded-3.6.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3d5b040d994500ae43b1630ab775a3f0/jetified-zxing-android-embedded-3.6.0/res" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/3d5b040d994500ae43b1630ab775a3f0/jetified-zxing-android-embedded-3.6.0/AndroidManifest.xml" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/d72dfdf32a6d908ebdb00f080194c1fb/jetified-zxing-android-embedded-3.6.0/AndroidManifest.xml" />
+      <root url="jar://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/d72dfdf32a6d908ebdb00f080194c1fb/jetified-zxing-android-embedded-3.6.0/jars/classes.jar!/" />
+      <root url="file://$USER_HOME$/.gradle/caches/transforms-2/files-2.1/d72dfdf32a6d908ebdb00f080194c1fb/jetified-zxing-android-embedded-3.6.0/res" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.journeyapps/zxing-android-embedded/3.6.0/32f275c483fab0ce2b99b4c12b0c45cf0516a294/zxing-android-embedded-3.6.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: com.squareup.okhttp3:okhttp:4.10.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/4.10.0/cd63657ac15770ed1420647154c9f44645533bef/okhttp-4.10.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/4.10.0/982fa90054d87e7b49739908beba4f50f508fbed/okhttp-4.10.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/4.10.0/4afcb4a940f3411594ba7dc899086a882293f22a/okhttp-4.10.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: com.squareup.okio:okio-jvm:3.0.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio-jvm/3.0.0/ab5a73fa2ccb4a36b0b5c69fe10b16d0255bcf8/okio-jvm-3.0.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio-jvm/3.0.0/d80a56acc76c16c3eefae15c38ac9712e3fd6ca6/okio-jvm-3.0.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio-jvm/3.0.0/73e518d3b5760645d525c24934e4efc01149060a/okio-jvm-3.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains:annotations:13.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/73368c3b0887f3adc2c2730dd1b95d7c3781aaf3/annotations-13.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/5991ca87ef1fb5544943d9abc5a9a37583fabe03/annotations-13.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.6.20">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.6.20/6cedc143badbb4f1c6b7f5a340b04edff1743208/kotlin-stdlib-1.6.20.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.6.20/5b8f86fea035328fc9e8c660773037a3401ce25f/kotlin-stdlib-1.6.20-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.6.20/bc58085192d5abb48080e3670915133715a33ce0/kotlin-stdlib-1.6.20-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20" type="kotlin.common">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.20/27b4562b6713d70f458c6d7ea39aadacb8e6a92b/kotlin-stdlib-common-1.6.20.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.20/5b8f86fea035328fc9e8c660773037a3401ce25f/kotlin-stdlib-common-1.6.20-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.20/e81e108a2817747538df29b32a151db38e5da5a2/kotlin-stdlib-common-1.6.20-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.5.31/77e0f2568912e45d26c31fd417a332458508acdf/kotlin-stdlib-jdk7-1.5.31.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.5.31/5b8f86fea035328fc9e8c660773037a3401ce25f/kotlin-stdlib-jdk7-1.5.31-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.5.31/ccdfdab71f0f3ba104191d8f673d0620e7ed2e46/kotlin-stdlib-jdk7-1.5.31-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.5.31/ff5d99aecd328872494e8921b72bf6e3af97af3e/kotlin-stdlib-jdk8-1.5.31.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.5.31/5b8f86fea035328fc9e8c660773037a3401ce25f/kotlin-stdlib-jdk8-1.5.31-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.5.31/171265ccd1f7a4307c3cb8eedd9115e662013190/kotlin-stdlib-jdk8-1.5.31-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-android/1.3.0/804a29e0b22cfb30e04487574ad1cb888daa716d/kotlinx-coroutines-android-1.3.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-android/1.3.0/a5b6897df3209e45430a0ee9cd88ec395737d302/kotlinx-coroutines-android-1.3.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-android/1.3.0/392fb03efbcff9124afe8aaa460a00aa2247880/kotlinx-coroutines-android-1.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.0/36fa8555d92456448ec19e64b00be830df9a7fb5/kotlinx-coroutines-core-1.3.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.0/8fdb244b797a9318128367d854452bf9db99c417/kotlinx-coroutines-core-1.3.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core/1.3.0/23a4e24d487cf4838494193e8bbf52f332006557/kotlinx-coroutines-core-1.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 16 - 0
.idea/misc.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+  <component name="ProjectType">
+    <option name="id" value="Android" />
+  </component>
+  <component name="SuppressABINotification">
+    <option name="modulesWithSuppressedNotConfigured">
+      <set>
+        <option value="dkmesapp.app" />
+      </set>
+    </option>
+  </component>
+</project>

+ 9 - 0
.idea/modules.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/modules/mes-pda.iml" filepath="$PROJECT_DIR$/.idea/modules/mes-pda.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/modules/app/mes-pda.app.iml" filepath="$PROJECT_DIR$/.idea/modules/app/mes-pda.app.iml" />
+    </modules>
+  </component>
+</project>

+ 94 - 0
.idea/modules/app/mes-pda.app.iml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$/../../../app" external.root.project.path="$MODULE_DIR$/../../.." external.system.id="GRADLE" external.system.module.group="mes-pda" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":app" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="4.2.0" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="4.2.0" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../app/src/main/res;file://$MODULE_DIR$/../../../app/src/debug/res;file://$MODULE_DIR$/../../../app/build/generated/res/rs/debug;file://$MODULE_DIR$/../../../app/build/generated/res/resValues/debug" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../app/src/androidTest/res;file://$MODULE_DIR$/../../../app/src/androidTestDebug/res;file://$MODULE_DIR$/../../../app/build/generated/res/rs/androidTest/debug;file://$MODULE_DIR$/../../../app/build/generated/res/resValues/androidTest/debug" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/../../../app/build/intermediates/javac/debug/classes" />
+    <output-test url="file://$MODULE_DIR$/../../../app/build/intermediates/javac/debugUnitTest/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/../../../app">
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/../../../app/build/generated/res/resValues/debug" type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../app/.gradle" />
+      <excludeFolder url="file://$MODULE_DIR$/../../../app/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 30 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Gradle: androidx.collection:collection:1.1.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.2.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.1.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.1.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.9" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:4.10.0" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okio:okio-jvm:3.0.0" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.6.20" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20" level="project" />
+    <orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout-solver:2.0.1" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.zxing:core:3.3.3" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:viewbinding:4.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.android.material:material:1.2.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout:2.0.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.viewpager2:viewpager2:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat-resources:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.transition:transition:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.activity:activity:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.core:core:1.3.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cardview:cardview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-ktx:2.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core-ktx:2.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.savedstate:savedstate:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation-experimental:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.journeyapps:zxing-android-embedded:3.6.0@aar" level="project" />
+  </component>
+</module>

+ 20 - 0
.idea/modules/mes-pda.iml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id="mes-pda" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="java-gradle" name="Java-Gradle">
+      <configuration>
+        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/../../build" />
+        <option name="BUILDABLE" value="false" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/../..">
+      <excludeFolder url="file://$MODULE_DIR$/../../.gradle" />
+      <excludeFolder url="file://$MODULE_DIR$/../../build" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 10 - 0
.idea/runConfigurations.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RunConfigurationProducerService">
+    <option name="ignoredProducers">
+      <set>
+        <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
+      </set>
+    </option>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 49 - 0
app/build.gradle

@@ -0,0 +1,49 @@
+plugins {
+    id 'com.android.application'
+}
+
+android {
+    compileSdkVersion 30
+    buildToolsVersion "30.0.3"
+
+    defaultConfig {
+        applicationId "com.dk.mes.app"
+        minSdkVersion 19
+        targetSdkVersion 30
+        versionCode 1
+        versionName "25.03.17.01"
+
+    }
+    lintOptions {
+        checkReleaseBuilds false
+        abortOnError false
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+    buildFeatures {
+        viewBinding true
+    }
+}
+
+dependencies {
+
+    implementation 'com.google.code.gson:gson:2.8.9'
+    implementation("com.squareup.okhttp3:okhttp:4.10.0")
+    implementation 'androidx.appcompat:appcompat:1.2.0'
+    implementation 'com.google.android.material:material:1.2.1'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+    implementation 'androidx.annotation:annotation:1.1.0'
+    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
+    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'
+    implementation 'com.google.zxing:core:3.3.3'
+    implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
+}

BIN
app/libs/bugly_crash_release.jar


+ 21 - 0
app/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 67 - 0
app/src/main/AndroidManifest.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.dk.mes.app">
+
+    <uses-feature
+        android:name="org.apache.http.legacy"
+        android:required="false" />
+
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.PERMISSIONS_STORAGE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <!-- Demo扫码需要 -->
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
+        tools:ignore="ProtectedPermissions" />
+    <application
+        android:allowBackup="true"
+        android:requestLegacyExternalStorage="true"
+        android:icon="@mipmap/ic_launcher"
+        android:imeOptions="actionSend|flagNoEnterAction"
+        android:label="@string/app_name"
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:roundIcon="@mipmap/ic_launcher"
+        android:theme="@android:style/Theme.Holo.Light.NoActionBar"
+        android:usesCleartextTraffic="true">
+        <activity android:name=".activity.WelcomeActivity"
+            android:screenOrientation="portrait" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name=".activity.SetActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".activity.HomeActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".activity.MainActivity"
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustResize">
+
+        </activity>
+        <activity
+            android:name="com.journeyapps.barcodescanner.CaptureActivity"
+            android:screenOrientation="fullSensor"
+            tools:replace="screenOrientation" />
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="com.dk.mes.app.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
+        <meta-data
+            android:name="preloaded_fonts"
+            android:resource="@array/preloaded_fonts" />
+    </application>
+
+</manifest>

+ 78 - 0
app/src/main/assets/400.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 400 - 请求无效-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 400 - 请求无效-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/401.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 401 - 请求无效,未授权-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 401 - 请求无效,未授权-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/403.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 403 - 禁止访问-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 403 - 禁止访问-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 102 - 0
app/src/main/assets/404.html

@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 404- 无法找到文件-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico"/>
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+
+    </style>
+    <script type="text/javascript" id="headerpagebeginjs-7384437_3035">
+        try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}
+    </script>
+    <script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true"
+            src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex"
+            charset="UTF-8"></script>
+    <link rel="stylesheet" id="headercss-7384437_3035" type="text/css"
+          href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex"
+          charset="UTF-8"></link>
+    <script type="text/javascript" id="headercssdeljs-7384437_3035">
+        var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}
+    </script>
+    <script type="text/javascript" id="sbid-secureinput" sogou-script="true"
+            src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/"
+            charset="UTF-8"></script>
+    <script type="text/javascript">
+        function toRefreshUrl() {
+            javascript:jsTest.toRefreshUrl();
+        }
+
+    </script>
+
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 404- 无法找到文件-你所浏览的页面暂时无法访问
+    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告 </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/" onclick="toRefreshUrl()">返回上一页</a>
+        <!--        <a href="/">反馈错误</a>-->
+    </div>
+</div>
+</body>
+</html>
+<script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true"
+        src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex"
+        charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">
+    try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}
+</script>

+ 78 - 0
app/src/main/assets/405.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 405 - 资源被禁止-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 405 - 资源被禁止-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/406.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 406 - 无法接受-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 406 - 无法接受-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/407.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 407 - 要求代理身份验证-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 407 - 要求代理身份验证-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/500.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 500 - 内部服务器错误-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 500 - 内部服务器错误-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回上一页</a>
+
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/501.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 501 - 页面值指定了未实现的配置-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 501 - 页面值指定了未实现的配置-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/502.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 502 - 网关错误-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 502 - 网关错误-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/503.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 503 - 服务不可用-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 503 - 服务不可用-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/504.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 504 - 网关超时-发生错误-思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 504 - 网关超时-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 78 - 0
app/src/main/assets/505.html

@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>HTTP 505 - http版本不受支持-发生错误_思源资源网www.isiyuan.net</title>
+    <meta name="robots" content="noindex,nofollow" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
+    <style>
+        * {-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+        html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,caption,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video {margin:0;padding:0;border:0;outline:0;vertical-align:baseline;background:transparent;}
+        article,aside,details,figcaption,figure,footer,header,hgroup,nav,section {display:block;}
+        html {font-size:16px;line-height:24px;width:100%;height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;overflow-y:scroll;overflow-x:hidden;}
+        img {vertical-align:middle;max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;}
+        body {min-height:100%;background:#edf1f4;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",微软雅黑,Arial,sans-serif;}
+        .clearfix {clear:both;zoom:1;}
+        .clearfix:before,.clearfix:after {content:"\0020";display:block;height:0;visibility:hidden;}
+        .clearfix:after {clear:both;}
+        body.error-page-wrapper,.error-page-wrapper.preview {background-position:center center;background-repeat:no-repeat;background-size:cover;position:relative;}
+        .error-page-wrapper .content-container {border-radius:2px;text-align:center;box-shadow:1px 1px 1px rgba(99,99,99,0.1);padding:50px;background-color:#fff;width:100%;max-width:560px;position:absolute;left:50%;top:50%;margin-top:-220px;margin-left:-280px;}
+        .error-page-wrapper .content-container.in {left:0px;opacity:1;}
+        .error-page-wrapper .head-line {transition:color .2s linear;font-size:40px;line-height:60px;letter-spacing:-1px;margin-bottom:20px;color:#777;}
+        .error-page-wrapper .subheader {transition:color .2s linear;font-size:32px;line-height:46px;color:#494949;}
+        .error-page-wrapper .hr {height:1px;background-color:#eee;width:80%;max-width:350px;margin:25px auto;}
+        .error-page-wrapper .context {transition:color .2s linear;font-size:16px;line-height:27px;color:#aaa;}
+        .error-page-wrapper .context p {margin:0;}
+        .error-page-wrapper .context p:nth-child(n+2) {margin-top:16px;}
+        .error-page-wrapper .buttons-container {margin-top:35px;overflow:hidden;}
+        .error-page-wrapper .buttons-container a {transition:text-indent .2s ease-out,color .2s linear,background-color .2s linear;text-indent:0px;font-size:14px;text-transform:uppercase;text-decoration:none;color:#fff;background-color:#2ecc71;border-radius:99px;padding:8px 0 8px;text-align:center;display:inline-block;overflow:hidden;position:relative;width:45%;}
+        .error-page-wrapper .buttons-container a:hover {text-indent:15px;}
+        .error-page-wrapper .buttons-container a:nth-child(1) {float:left;}
+        .error-page-wrapper .buttons-container a:nth-child(2) {float:right;}
+        @media screen and (max-width:580px) {
+            .error-page-wrapper {padding:30px 5%;}
+            .error-page-wrapper .content-container {padding:37px;position:static;left:0;margin-top:0;margin-left:0;}
+            .error-page-wrapper .head-line {font-size:36px;}
+            .error-page-wrapper .subheader {font-size:27px;line-height:37px;}
+            .error-page-wrapper .hr {margin:30px auto;width:215px;}
+        }
+        @media screen and (max-width:450px) {
+            .error-page-wrapper {padding:30px;}
+            .error-page-wrapper .head-line {font-size:32px;}
+            .error-page-wrapper .hr {margin:25px auto;width:180px;}
+            .error-page-wrapper .context {font-size:15px;line-height:22px;}
+            .error-page-wrapper .context p:nth-child(n+2) {margin-top:10px;}
+            .error-page-wrapper .buttons-container {margin-top:29px;}
+            .error-page-wrapper .buttons-container a {float:none !important;width:65%;margin:0 auto;font-size:13px;padding:9px 0;}
+            .error-page-wrapper .buttons-container a:nth-child(2) {margin-top:12px;}
+        }
+    </style>
+<script type="text/javascript" id="headerpagebeginjs-7384437_3035">try {window.external.pagestate(window, "window.pagebegin");var jsPageBeginNode = document.getElementById("headerpagebeginjs-7384437_3035");if (jsPageBeginNode){jsPageBeginNode.parentNode.removeChild(jsPageBeginNode);}} catch(e) {}</script>
+<script type="text/javascript" id="headerjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extheadercontentscript/?sbid=headerjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<link rel="stylesheet" id="headercss-7384437_3035" type="text/css" href="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/extcontentcss/?sbid=headercss-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></link>
+<script type="text/javascript" id="headercssdeljs-7384437_3035">var jsCSSNode = document.getElementById("headercss-7384437_3035");if (jsCSSNode){jsCSSNode.parentNode.removeChild(jsCSSNode);}var jsSelfNode = document.getElementById("headercssdeljs-7384437_3035");if (jsSelfNode){jsSelfNode.parentNode.removeChild(jsSelfNode);}</script>
+<script type="text/javascript" id="sbid-secureinput" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/secureinputjs/" charset="UTF-8"></script>
+</head>
+<body class="error-page-wrapper">
+<div class="content-container">
+    <div class="head-line">
+        <img src="http://www.yunhu111.cn/assets/img/error.svg" alt="" width="120"/>
+    </div>
+    <div class="subheader">
+        HTTP 505 - http版本不受支持-你所浏览的页面暂时无法访问    </div>
+    <div class="hr"></div>
+    <div class="context">
+
+        <p>
+            你可以返回上一页重试,或直接向我们反馈错误报告        </p>
+
+    </div>
+    <div class="buttons-container">
+        <a href="/">返回主页</a>
+        <a href="/">反馈错误</a>
+    </div>
+</div>
+</body>
+</html><script type="text/javascript" id="tailjs-7384437_3035" sogou-script="true" src="https://BCC0E825-2420-4190-AF25-ABD45D41EA3A/se/exttailcontentscript/?sbid=tailjs-7384437_3035&isTopFrame=true&url=http%3A%2F%2Fvip.321zf.cn%2Findex%2Fuser%2Findex" charset="UTF-8"></script>
+<script type="text/javascript" id="tailpageendjs-7384437_3035">try {window.external.pagestate(window, "window.pageend");var jsPageEndNode = document.getElementById("tailpageendjs-7384437_3035");if (jsPageEndNode){jsPageEndNode.parentNode.removeChild(jsPageEndNode);}} catch(e) {}</script>

+ 96 - 0
app/src/main/assets/JsTest.html

@@ -0,0 +1,96 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+    <script type="text/javascript">
+        function showToast(toast) {
+            javascript:jsTest.showToast(toast);
+        }
+        function toActivity() {
+            javascript:jsTest.toActivity();
+        }
+        function showDialog(msg1,msg2) {
+            javascript:jsTest.showDialog(msg1,msg2);
+        }
+        function toBlueActivity() {
+            javascript:jsTest.toBlueActivity();
+        }
+        function toLoginActivity() {
+            javascript:jsTest.showReLoginDialog();
+        }
+         function toWifiActivity() {
+            javascript:jsTest.toWifiActivity();
+        }
+        function sum(a,b){
+            return a+b;
+        }
+        function setColor(){
+            var a = document.getElementById('text3');
+            a.style.backgroundColor="#00FF00";
+        }
+        function setColorAndText(color,text){
+            var a = document.getElementById('text3');
+            a.style.backgroundColor=color;
+            a.innerHTML = text;
+        }
+        function only_number(e){
+            alert("only_number"  + e);
+        }
+
+        function OnInput(e){
+           // alert("OnInput"  + e);
+        }
+
+        function OnPropChanged (event){
+            alert("OnPropChanged"  + event);
+        }
+        function scanner(e){
+           var value =  jsTest.scanBarcode(e);
+            var a = document.getElementById('text4');
+            a.innerHTML = value;
+        }
+
+        //提供给Android调用的方法
+        function funFromjs(result){
+            document.getElementById("result").innerText= result;
+        }
+
+    </script>
+
+</head>
+
+<body>
+<p id="text1">text1:点击按键0 显示Toast信息</p>
+<input type="button" value="按键0" onClick="showToast('Js调用Android方法显示Toast成功!')"/>
+<p id="text2">text2:点击按键1 执行Activity跳转</p>
+<input type="button" value="按键1" onClick="toActivity()"/>
+<p>text2:点击按键2 显示弹框</p>
+<input type="button" value="按键2" onClick="showDialog('测试弹窗','测试成功')"/>
+<p id="text3">text3:点击底部按钮,修改当前文字或文字背景颜色</p>
+<input id="text4" type="text" oninput="OnInput (this.value)" onchange="OnPropChanged (this.value)"
+       value=""/>
+<a href="tel:15902409627">打电话</a>
+<p id="text5">蓝牙打印</p>
+<input type="button" value="蓝牙打开" onClick="toBlueActivity()"/>
+<input type="button" value="wifi打开" onClick="toWifiActivity()"/>
+<div id="result" style="margin:10px;"></div>
+<a onClick="TakePhoto()"><img src="images/1.png"/></a>
+<!--<p id="picpath">照片路径</p>-->
+<!--<img id="pic0" width="100%" height="100"  src="images/test.png" />-->
+<div>
+    js上传文件的事件捕获
+    <input type="file" name="fileField" id="fileField"/>
+</div>
+<div>
+    js上传文件的事件捕获
+    <!--<input type=“file” accept=“video/*;capture=camcorder”>-->
+    <!--<input type=“file” accept=“audio/*;capture=microphone”>-->
+    <input type=“file” accept=“image/*;capture=camera” name="fileField1" id="fileField1">
+</div>
+<div>
+    <input type="button" value="推出登录" onClick="toLoginActivity()"/>
+</div>
+
+
+</body>
+</html>

+ 899 - 0
app/src/main/java/com/dk/mes/app/activity/HomeActivity.java

@@ -0,0 +1,899 @@
+package com.dk.mes.app.activity;
+
+import android.Manifest;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.net.http.SslError;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.webkit.SslErrorHandler;
+import android.webkit.ValueCallback;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+import androidx.core.content.FileProvider;
+
+import com.dk.mes.app.R;
+import com.dk.mes.app.common.BasePopupWindow;
+import com.dk.mes.app.common.IBossBasePopupWindow;
+import com.dk.mes.app.common.SysApplication;
+import com.dk.mes.app.jsinterface.CustomWebView;
+import com.dk.mes.app.jsinterface.JsInterface;
+import com.dk.mes.app.network.ApiListener;
+import com.dk.mes.app.network.ApiUtil;
+import com.dk.mes.app.network.SetClientParams;
+import com.dk.mes.app.utils.CommonProgressDialog;
+import com.dk.mes.app.utils.LoadingView;
+import com.dk.mes.app.utils.NetStatusUtils;
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.google.zxing.integration.android.IntentResult;
+
+import org.json.JSONObject;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Timer;
+import java.util.TimerTask;
+
+/**
+ * 进入主页
+ */
+public class HomeActivity extends Activity {
+    private static final String TAG = "HomeActivity";
+    // WebView
+    public CustomWebView wvHome;
+    // SharedPreferences
+    private SharedPreferences sharedPreferences;
+    // 网络地址
+    private String homeUrl;
+    //loading
+    private LoadingView loading;
+    //缩放比例  设置了就走设置值  没设置默认一百六
+    private int mInitialScale = 100;
+    // 进度条
+    private ProgressDialog progressDialog;
+    // 退出
+    private BasePopupWindow basePopupWindow;
+    // 报错后的当前url
+    private String mErrorUrl = "";
+    // web当前调用文本框的ref的值
+    public String ref = "";
+    //升级版本弹出框
+    private IBossBasePopupWindow upgradeWindow;
+    //    下载窗体
+    private static CommonProgressDialog mDialog = null;
+    public static final int MAX_RETRY = 10;
+    //    InputStream
+    private InputStream input;
+    //    HttpURLConnection
+    private HttpURLConnection connection;
+    //    apk大小
+    private int contentlength;
+    // 用于决定seek方法中是否执行文件定位
+    private long cur_pos;
+    // apk安装文件目录
+    private String installFilePath;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
+                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
+
+        setContentView(R.layout.activity_home);
+        //取消状态栏
+        getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+        sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE);
+        homeUrl = sharedPreferences.getString("homeUrl", "");
+        //检查权限
+        checkPermission();
+        //初始化view
+        initView();
+        // 设置WebView的客户端
+        initWebView();
+        //检查更新
+        CheckUp();
+    }
+
+    /**
+     * 点击返回上一页面而不是退出浏览器
+     *
+     * @param keyCode
+     * @param event
+     * @return
+     */
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && wvHome.canGoBack()) {
+            String currentUrl = wvHome.getUrl();
+            if ((currentUrl.contains("/app/index")
+                    || (currentUrl.contains("/app/other") && !currentUrl.contains("/app/other-"))
+                    || (currentUrl.contains("/app/report") && !currentUrl.contains("/app/report-"))
+                    || currentUrl.contains("/app/mine"))) {
+                // 主页 弹出是否退出的窗体退出
+                this.backPressed();
+                return true;
+            } else if (currentUrl.contains("/app/login")) {
+                // 登录页 直接退出
+            } else {
+                wvHome.goBack();
+                return true;
+            }
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
+        if (result != null) {
+            if (result.getContents() == null) {
+                Toast.makeText(this, "扫描结果为空", Toast.LENGTH_SHORT).show();
+            } else {
+                String code = result.getContents();
+                if (wvHome != null) {
+                    String script = String.format("javascript:getQRCodeScan(\"" + code + "\",\"" + this.ref + "\")");    // 处理返回值
+                    wvHome.loadUrl(script);
+                    wvHome.evaluateJavascript(script, null);
+                }
+            }
+
+        }
+    }
+
+
+    /**
+     * 销毁Webview
+     */
+    @Override
+    protected void onDestroy() {
+        if (wvHome != null) {
+            wvHome.loadDataWithBaseURL(null, "", "text/html",
+                    "utf-8", null);
+            wvHome.clearHistory();
+            ((ViewGroup) wvHome.getParent()).removeView(wvHome);
+            wvHome.destroy();
+            wvHome = null;
+        }
+        super.onDestroy();
+    }
+
+    /**
+     * 退出函数
+     */
+    public void backPressed() {
+        basePopupWindow = new BasePopupWindow(HomeActivity.this, R.layout.popup_window_exit);
+        basePopupWindow.setPopUpWindowCallBack(new BasePopupWindow.IPopUpWindowCallBack() {
+
+            @Override
+            public void popUpWindowCallBack(View view) {
+                TextView tvPopupWindowMessage = (TextView) view.findViewById(R.id.tv_popup_window_message);
+                TextView tvPopupWindowTitle = (TextView) view.findViewById(R.id.tv_popup_window_title);
+                tvPopupWindowTitle.setText("退出程序");
+                try {
+                    tvPopupWindowMessage.setText("是否要退出当前登录?");
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                // 对布局文件进行初始化
+                RelativeLayout llCancel = (RelativeLayout) view.findViewById(R.id.ll_cancel);
+                // 对布局中的控件添加事件监听
+                llCancel.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        basePopupWindow.dismiss();
+                    }
+                });
+                RelativeLayout llOK = (RelativeLayout) view.findViewById(R.id.ll_ok);
+                // 对布局中的控件添加事件监听
+                llOK.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        if (basePopupWindow != null) {
+                            basePopupWindow.dismiss();
+                        }
+                        SysApplication.getInstance().exit();
+                    }
+                });
+            }
+        });
+        basePopupWindow.show(false, findViewById(R.id.layout_home_content), 0, 0);
+    }
+
+    /**
+     * 检查权限
+     */
+    private void checkPermission() {
+        if (Build.VERSION.SDK_INT >= 23) {
+            int checkCallPhonePermission = ContextCompat.checkSelfPermission(
+                    HomeActivity.this, Manifest.permission.CAMERA);
+            if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
+                ActivityCompat.requestPermissions(HomeActivity.this,
+                        new String[]{Manifest.permission.CAMERA, Manifest.permission.VIBRATE}, 333);
+                return;
+            } else {
+            }
+        } else {
+        }
+    }
+
+    /**
+     * 500毫秒后调用关闭加载的方法
+     *
+     * @param
+     */
+    private void loadingView() {//点击加载并按钮模仿网络请求
+        loading = new LoadingView(this, R.style.CustomDialog);
+        loading.show();
+        new Handler().postDelayed(new Runnable() {//定义延时任务模仿网络请求
+            @Override
+            public void run() {
+                loading.dismiss();//3秒后调用关闭加载的方法
+            }
+        }, 500);
+    }
+
+    /**
+     * 设置WebView的客户端
+     */
+    private void initWebView() {
+        WebSettings webSettings = wvHome.getSettings();
+        webSettings.setSavePassword(false);
+        webSettings.setSaveFormData(false);
+        //支持插件
+//        webSettings.setPluginsEnabled(true);
+        // 让WebView能够执行javaScript
+        webSettings.setJavaScriptEnabled(true);
+        // 让JavaScript可以自动打开windows
+        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
+        // 设置缓存模式,一共有四种模式
+//        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+        if (NetStatusUtils.isConnected(getApplicationContext())) {
+            webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//根据cache-control决定是否从网络上取数据。
+        } else {
+            webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载
+        }
+        // 设置缓存
+        webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能
+        webSettings.setAppCacheMaxSize(1024 * 1024 * 8);
+        webSettings.setAllowFileAccess(true);
+        webSettings.setDatabaseEnabled(true);   //开启 database storage API 功能
+        webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能
+        // 设置缓存路径
+//        String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
+        //取得缓存路径
+        String appCachePath = getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
+        webSettings.setAppCachePath(appCachePath);
+        //设置数据库缓存路径
+        webSettings.setDatabasePath(appCachePath);
+        // 支持缩放(适配到当前屏幕)--放得开就是支持
+//        webSettings.setSupportZoom(true);
+//        webSettings.setBuiltInZoomControls(true);
+//        webSettings.setDisplayZoomControls(false);
+        // 全屏显示
+        webSettings.setLoadWithOverviewMode(true);
+//        // 将图片调整到合适的大小 将图片调整到适合webview的大小
+        webSettings.setUseWideViewPort(true);
+        // 支持内容重新布局,一共有四种方式
+        // 默认的是NARROW_COLUMNS
+        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
+        webSettings.setLoadsImagesAutomatically(true);  //-> 是否自动加载图片
+        webSettings.setDefaultTextEncodingName("UTF-8"); //-> 设置编码格式
+        // 设置默认字体大小
+        webSettings.setDefaultFontSize(16);
+        webSettings.setTextZoom(100);
+//        在代码中设置WebView允许自动播放声音
+        webSettings.setMediaPlaybackRequiresUserGesture(false);
+        // 远程url是https协议,图片资源是http协议时。
+        // 在Android 5.0之后,WebView默认不允许Https+Http的混合使用方式,
+        // 所以当Url是Https的,图片资源是Http时,导致页面加载失败
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            wvHome.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+        }
+        String url = homeUrl;
+        // 补全http头
+        if (!url.toLowerCase().contains("http://")
+                && !url.toLowerCase().contains("https://")) {
+            url = "http://" + url;
+        }
+//        if (!url.toLowerCase().contains("app/login")) {
+//            url = new File(url, "app/login").getPath();
+//        }
+
+        wvHome.setInitialScale(mInitialScale);
+        wvHome.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+        wvHome.loadUrl(url);
+        JsInterface jsInterface = new JsInterface(HomeActivity.this);
+        wvHome.addJavascriptInterface(jsInterface, jsInterface.toString());
+        wvHome.setWebChromeClient(new WebChromeClient() {
+            //For 5.0+
+            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+            @Override
+            public boolean onShowFileChooser(WebView webView,
+                                             ValueCallback<Uri[]> filePathCallback,
+                                             WebChromeClient.FileChooserParams fileChooserParams) {
+
+                return true;
+            }
+
+            @Override
+            public void onReceivedTitle(WebView view, String title) {
+                super.onReceivedTitle(view, title);
+                // android 6.0 以下通过title获取
+                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+                    if (title.contains("404") || title.contains("500") || title.contains("Error")) {
+                        view.loadUrl("file:///android_asset/404.html");
+                    }
+                }
+            }
+
+
+        });
+        // 设置WebView的客户端
+        wvHome.setWebViewClient(new WebViewClient() {
+            private ProgressDialog progressDialog;
+            private Handler mHandler = new Handler();//超时之后的处理Handler
+            private Timer timer = new Timer();
+            ;//计时器
+            private long timeout = 3000;//超时时间
+
+            /**
+             * 网页页面开始加载的时候
+             * @param view
+             * @param url
+             * @param favicon
+             */
+            @Override
+            public void onPageStarted(WebView view, String url, Bitmap favicon) {
+                if (view == null) {
+                    return;
+                }
+                /* * 超时后,首先判断页面加载是否小于100,就执行超时后的动作 */
+                TimerTask tt = new TimerTask() {
+                    @Override
+                    public void run() {
+                        if (HomeActivity.this.wvHome.getProgress() > timeout) {
+                            mHandler.sendEmptyMessage(0x101);
+                            timer.cancel();
+                            timer.purge();
+                        }
+                    }
+                };
+                try {
+                    //页面加载中,请稍后
+                    if (progressDialog == null) {
+                        progressDialog = new ProgressDialog(view.getContext());
+                        progressDialog.setMessage("页面加载中,请稍后。。。");
+                        progressDialog.show();
+                        if (view != null) {
+                            view.setEnabled(false);// 当加载网页的时候将网页进行隐藏
+                        }
+                    }
+                } catch (Exception e) {
+
+                }
+//
+                super.onPageStarted(view, url, favicon);
+            }
+
+            // 网页加载结束的时候
+            @Override
+            public void onPageFinished(WebView view, String url) {
+                if (progressDialog != null && progressDialog.isShowing()) {
+                    progressDialog.dismiss();
+                    progressDialog = null;
+                    view.setEnabled(true);
+                }
+                timer.cancel();
+                timer.purge();
+                super.onPageFinished(view, url);
+            }
+
+            @Override
+            public boolean shouldOverrideUrlLoading(WebView view, String url) {
+                if (TextUtils.isEmpty(url.replace("file:///", "")) && !TextUtils.isEmpty(mErrorUrl)) {
+                    view.loadUrl(mErrorUrl);
+                    return true;
+                }
+                view.loadUrl(url);
+                view.reload();
+                return true;
+            }
+
+            @TargetApi(Build.VERSION_CODES.M)
+            @Override
+            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
+                super.onReceivedHttpError(view, request, errorResponse);
+                int statusCode = errorResponse.getStatusCode();
+                if (404 == statusCode || 500 == statusCode) {
+                    view.loadUrl("file:///android_asset/404.html");
+                }
+            }
+
+            @Override
+            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
+                super.onReceivedError(view, errorCode, description, failingUrl);
+                mErrorUrl = view.getUrl();
+                // 断网或者网络连接超时
+                if (errorCode == ERROR_HOST_LOOKUP || errorCode == ERROR_CONNECT || errorCode == ERROR_TIMEOUT) {
+                    view.loadUrl("file:///android_asset/404.html");
+                }
+            }
+
+            // 远程url是https协议, 证书问题,需重写onReceivedSslError方法
+            @Override
+            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+                super.onReceivedSslError(view, handler, error);
+                //https忽略证书问题
+                if (handler != null) {
+                    //表示等待证书响应
+                    handler.proceed();
+                }
+
+            }
+        });
+    }
+
+    /**
+     * 报错后的当前url
+     */
+    public void toRefreshUrl() {
+        wvHome.loadUrl(mErrorUrl);
+    }
+
+    /**
+     * 获取当前url
+     */
+    public String getHomeUrl() {
+        return homeUrl;
+    }
+
+
+    /**
+     * 获取当前版本
+     */
+    public String getVersion() {
+        try{
+            return this.getVersionName();
+        }catch (Exception e){
+            return "1.0.0.0";
+        }
+    }
+
+    /**
+     * 获取当前手机厂商
+     */
+    public String getManufacture() {
+        return Build.MANUFACTURER.toLowerCase();
+    }
+
+    /**
+     * 初始化view
+     */
+    private void initView() {
+        wvHome = (CustomWebView) findViewById(R.id.wvHome);
+    }
+
+    /**
+     * 检查更新
+     */
+    private void CheckUp() {
+        //调服务器接口查看服务器版本号
+        HashMap<String, String> params = new HashMap<>(); //参数
+        params.put("code", "webview");//原生参数
+        String url = getUpdateHomeUrl("api/mdm-server/app/mst/common/get_apk_version");
+        Log.e(TAG, "CheckUp " + url);
+        new SetClientParams(url, params).post(new ApiListener() {
+            @Override
+            public void success(ApiUtil apiUtil) throws Exception {
+                JSONObject apiUtilData = new JSONObject(apiUtil.data);
+                contentlength = apiUtilData.optInt("apksize");
+                //请求 成功
+                String serverVersionNo = apiUtilData.optString("version").replace(".", "");// 服务器上的app版本号
+                String localVersionNo = getVersionName().replace(".", ""); //本地版本号
+                boolean check = CompareServerVersion(localVersionNo, serverVersionNo); //对比老旧版本号 决定是否升级
+                if (check) { // 可以升级  弹出提示框
+                    upgradeWindow = new IBossBasePopupWindow(HomeActivity.this,
+                            R.layout.popup_window_exit);
+                    upgradeWindow.setPopUpWindowCallBack(new IBossBasePopupWindow.IPopUpWindowCallBack() {
+
+                        @Override
+                        public void popUpWindowCallBack(View view) {
+                            TextView tvPopupWindowMessage = (TextView) view
+                                    .findViewById(R.id.tv_popup_window_message);
+                            TextView tvPopupWindowTitle = (TextView) view
+                                    .findViewById(R.id.tv_popup_window_title);
+
+                            tvPopupWindowTitle.setText("提示");
+                            tvPopupWindowMessage.setText("发现新版本,请立刻升级!!! ");
+
+                            // 对布局文件进行初始化
+                            RelativeLayout llCancel = (RelativeLayout) view
+                                    .findViewById(R.id.ll_cancel);
+                            // 对布局中的控件添加事件监听
+                            TextView tvCancel = (TextView) llCancel
+                                    .findViewById(R.id.tv_popup_window_cancel);
+                            tvCancel.setText("取消");
+
+                            llCancel.setOnClickListener(new View.OnClickListener() {
+                                @Override
+                                public void onClick(View v) {
+
+                                    upgradeWindow.dismiss();
+                                }
+                            });
+                            RelativeLayout llOK = (RelativeLayout) view.findViewById(R.id.ll_ok);
+                            // 对布局中的控件添加事件监听
+
+                            TextView tvOk = (TextView) llOK.findViewById(R.id.tv_popup_window_ok);
+                            tvOk.setText("确定");
+                            llOK.setOnClickListener(new View.OnClickListener() {
+                                @Override
+                                public void onClick(View v) {
+
+                                    ShowDownloadDialog();
+                                    upgradeWindow.dismiss();
+                                }
+                            });
+                        }
+                    });
+                    upgradeWindow.show(false,  findViewById(R.id.layout_home_content), 0, 0); //不懂的 可以点击进show方法看详细说明
+                }
+
+            }
+
+            @Override
+            public void failrure(ApiUtil apiUtil) {
+                //请求失败 弹吐司
+                Log.e(apiUtil.TAG, apiUtil.toString());
+            }
+        });
+
+    }
+
+    /**
+     * 下载窗体
+     */
+    private void ShowDownloadDialog() {
+        mDialog = new CommonProgressDialog(this);
+        mDialog.setIndeterminate(false);
+        mDialog.setCanceledOnTouchOutside(false);
+        mDialog.setCancelable(false);
+        mDialog.show();
+        UpdateThread ut = new UpdateThread();
+        ut.start();
+    }
+
+    /**
+     * 下载apk的线程
+     */
+    public class UpdateThread extends Thread {
+        @Override
+        public void run() {
+            String pPath = getRootFilePath();
+            String fileDir = pPath + "/mes/";
+            File file = new File(fileDir);
+            if (!file.exists()) {
+                file.mkdir();
+            }
+            String filep = "mes.apk";
+//            File f = new File("data/data/com.dk.mes.app/mes.apk");
+            File f = new File(file.getAbsolutePath(), filep);
+            if (!f.exists()) {
+                try {
+                    f.createNewFile();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            try {
+                installFilePath = f.getAbsolutePath();
+                String url =  getUpdateHomeUrl("api/mdm-server/app/mst/common/download_apk");
+                Log.e(TAG, "downloadFileStream" + url);
+                downloadFileStream(url, installFilePath, "?code=webview");
+
+            } catch (Exception e) {
+
+                e.printStackTrace();
+                Message m = new Message();
+                m.what = 2;
+                Bundle b = new Bundle();
+                b.putString("message", "网络连接异常");
+                m.setData(b);
+                h.sendMessage(m);
+                return;
+
+            }
+
+
+        }
+    }
+
+    /**
+     * url
+     *
+     * @return
+     */
+    private String getUpdateHomeUrl(String fun) {
+        // 补全http头
+        String url = homeUrl;
+        url = new File(url.replace("/app/login", ""), fun).getPath();
+        if (!url.toLowerCase().contains("http:/")
+                && !url.toLowerCase().contains("https:/")) {
+            url = "http://" + url;
+        }
+
+        return url;
+    }
+
+    /**
+     * 下载数据流
+     *
+     * @param url
+     * @param filePath
+     * @param content
+     */
+    public void downloadFileStream(String url, String filePath, String content) {
+        FileOutputStream output = null;
+        try {
+            int retry = 0;
+            while (retry < MAX_RETRY)
+                try {
+                    seek(0, url, content);
+                    break;
+                } catch (Exception e) {
+                    retry++;
+                }
+
+            File wdFile = new File(filePath);
+            output = new FileOutputStream(wdFile);
+            input = connection.getInputStream();
+            // 这将是有用的,这样你可以显示一个典型的0-100%的进度条
+            // 下载文件
+            mDialog.mProgress.setMax(contentlength);
+            byte data[] = new byte[1024];
+            int count = 0;
+            do {
+                int numread = input.read(data);
+                count += numread;
+                Message m = new Message();
+                Bundle b = new Bundle();
+                b.putInt("process", count);
+                m.what = 3;
+                m.setData(b);
+                h.sendMessage(m);
+                if (numread <= 0) {
+                    // 下载完成通知安装
+                    h.sendEmptyMessage(4);
+                    break;
+                }
+                output.write(data, 0, numread);
+            } while (true);
+
+            output.flush();
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                output.close();
+                input.close();
+
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    /**
+     * 请求连接
+     *
+     * @param
+     * @param conurl
+     * @param content
+     * @throws IOException
+     */
+    public void seek(long start_pos, String conurl, String content)
+            throws IOException {
+        if (start_pos == cur_pos && input != null)
+            return;
+        if (connection != null) {
+            connection.disconnect();
+            connection = null;
+        }
+        if (input != null) {
+            input.close();
+            input = null;
+        }
+        URL url = new URL(conurl + content);
+        connection = (HttpURLConnection) url.openConnection();
+        connection.setRequestProperty("connection", "Keep-Alive");
+        connection.setRequestMethod("GET");
+        connection.setUseCaches(false);
+        connection.setRequestProperty("Content-Type", "application/json");
+        connection.setDoInput(true);
+        connection.setConnectTimeout(180 * 1000);
+        connection.setReadTimeout(180 * 1000);
+        connection.setDoOutput(true);
+        connection.setRequestProperty("Accept-Encoding", "identity");
+        System.setProperty("http.keepAlive", "false");
+        connection.connect();
+//        OutputStream outputStream = connection.getOutputStream();
+//        outputStream.write(content.getBytes());
+//        outputStream.close();
+        // httpConnection.setRequestProperty("Connection", "Keep-Alive");
+        int responseCode = connection.getResponseCode();
+        if (responseCode < 200 || responseCode >= 300) {
+            try {
+                Thread.sleep(500);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            throw new IOException("HTTP responseCode=" + responseCode);
+        }
+
+        input = connection.getInputStream();
+        cur_pos = start_pos;
+    }
+
+    /**
+     * 获取路径
+     *
+     * @return
+     */
+    public   String getRootFilePath() {
+        return getApplicationContext().getExternalFilesDir(null).getAbsolutePath();
+    }
+
+    /**
+     * 是否包含sd卡
+     *
+     * @return
+     */
+    public static boolean hasSDCard() {
+        String status = Environment.getExternalStorageState();
+        if (!status.equals(Environment.MEDIA_MOUNTED)) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Handler处理结构
+     */
+    Handler h = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case 2:
+                    Bundle b3 = msg.getData();
+                    String message3 = b3.getString("message");
+                    Toast.makeText(getApplicationContext(), message3, Toast.LENGTH_SHORT);
+                    break;
+
+                case 3:
+                    Bundle bu = msg.getData();
+                    int progress = bu.getInt("process");
+                    mDialog.mProgress.setProgress(progress);
+                    mDialog.setProgressNumber();
+                    mDialog.setProgressPercent();
+                    break;
+                case 4:
+                    installApk(installFilePath, HomeActivity.this);
+                    break;
+            }
+
+        }
+
+        ;
+
+    };
+
+    /**
+     * 安装apk
+     *
+     * @author Administrator
+     * @since 2016年12月7日
+     */
+    public void installApk(String installFilePath, Context context) {
+        File apkfile = new File(installFilePath);
+        if (!apkfile.exists()) {
+            return;
+        }
+        Intent intent = new Intent(Intent.ACTION_VIEW);
+        if (Build.VERSION.SDK_INT >= 24) {
+            Uri apkUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", apkfile);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
+        } else {
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            intent.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
+        }
+        context.startActivity(intent);
+        android.os.Process.killProcess(android.os.Process.myPid());
+    }
+
+
+    /**
+     * 版本比较
+     *
+     * @author Administrator
+     * @since 2016年12月7日
+     */
+    public static boolean CompareServerVersion(String localVersion, String ServerVersion) {
+        boolean b = false;
+        String localVersionNo = localVersion.replace(".", "");
+        String serverVersionNo = ServerVersion.replace(".", "");
+        if (localVersionNo.startsWith("0")) {
+            localVersionNo = localVersionNo.replaceFirst("^0*", "");
+        }
+        if (serverVersionNo.startsWith("0")) {
+            serverVersionNo = serverVersionNo.replaceFirst("^0*", "");
+        }
+
+        if (Long.parseLong(serverVersionNo) > Long.parseLong(localVersionNo)) {
+            b = true;
+        }
+        return b;
+
+    }
+
+    /**
+     * 获取app版本号
+     *
+     * @return
+     * @throws Exception
+     */
+    private String getVersionName() throws Exception {
+
+        // 获取packagemanager的实例
+        PackageManager packageManager = getPackageManager();
+        // getPackageName()是你当前类的包名,0代表是获取版本信息
+        PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);
+        String version = packInfo.versionName;
+        return version;
+    }
+}

+ 179 - 0
app/src/main/java/com/dk/mes/app/activity/MainActivity.java

@@ -0,0 +1,179 @@
+package com.dk.mes.app.activity;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
+import com.dk.mes.app.network.OkHttpUtil;
+import com.dk.mes.app.R;
+
+/**
+ * 启动页
+ */
+public class MainActivity extends Activity {
+    private static final String TAG = "MainActivity";
+    // 网络地址
+    private EditText edtIp;
+    // 保存
+    private Button btnSave;
+    // SharedPreferences
+    private SharedPreferences sharedPreferences;
+    // 网络地址
+    private String homeUrl;
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
+        setContentView(R.layout.activity_main);
+        checkPermission();
+        //初始化view
+        initView();
+        // 初始化按钮事件
+        setOnClickListener();
+        //正常应该放在SysApplication   初始化的
+        OkHttpUtil.init();
+        //获取地址的数据
+        if (getCurrentSharedPreference()&& TextUtils.isEmpty(getIntent().getStringExtra("CountDownTimer"))) {
+            //如果有地址则跳入主页
+            Intent intent = new Intent(MainActivity.this, HomeActivity.class);
+            startActivity(intent);
+            finish();
+        }
+        // 登录地址
+        edtIp.setText(homeUrl);
+    }
+
+    /**
+     * 获取地址的数据
+     *
+     * @return
+     */
+    private boolean getCurrentSharedPreference() {
+        //获取地址的数据
+        sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE);
+        homeUrl = sharedPreferences.getString("homeUrl", "");
+        if (TextUtils.isEmpty(homeUrl)) {
+            return false;
+        }
+        return true;
+    }
+
+
+
+    /**
+     * 初始化view
+     */
+    private void initView() {
+        edtIp = findViewById(R.id.edtIp);
+        btnSave = findViewById(R.id.btnSave);
+    }
+
+    /**
+     * 初始化按钮事件
+     */
+    private void setOnClickListener() {
+        // 保存
+        btnSave.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (edtIp.getText().length() == 0) {
+                    Toast.makeText(MainActivity.this, "请输入登录地址",
+                            Toast.LENGTH_SHORT).show();
+                    return;
+                }
+                SharedPreferences.Editor editor = sharedPreferences.edit();
+                editor.putString("homeUrl", edtIp.getText().toString());
+                editor.commit();
+                Intent intent = new Intent(MainActivity.this, HomeActivity.class);
+                startActivity(intent);
+                finish();
+            }
+        });
+
+    }
+
+    //检查权限
+    public void checkPermission() {
+        int targetSdkVersion = 0;
+        String[] PermissionString = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.REQUEST_INSTALL_PACKAGES};
+        try {
+            final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
+            targetSdkVersion = info.applicationInfo.targetSdkVersion;//获取应用的Target版本
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+//            Log.e("err", "检查权限_err0");
+        }
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            //Build.VERSION.SDK_INT是获取当前手机版本 Build.VERSION_CODES.M为6.0系统
+            //如果系统>=6.0
+            if (targetSdkVersion >= Build.VERSION_CODES.M) {
+                //第 1 步: 检查是否有相应的权限
+                boolean isAllGranted = checkPermissionAllGranted(PermissionString);
+                if (isAllGranted) {
+                    //Log.e("err","所有权限已经授权!");
+                    return;
+                }
+                // 一次请求多个权限, 如果其他有权限是已经授予的将会自动忽略掉
+                ActivityCompat.requestPermissions(this,
+                        PermissionString, 1);
+            }
+        }
+    }
+
+    /**
+     * 检查是否拥有指定的所有权限
+     */
+    private boolean checkPermissionAllGranted(String[] permissions) {
+        for (String permission : permissions) {
+            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
+                // 只要有一个权限没有被授予, 则直接返回 false
+                //Log.e("err","权限"+permission+"没有授权");
+                return false;
+            }
+        }
+        return true;
+    }
+
+    //申请权限结果返回处理
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        if (requestCode == 1) {
+            boolean isAllGranted = true;
+            // 判断是否所有的权限都已经授予了
+            for (int grant : grantResults) {
+                if (grant != PackageManager.PERMISSION_GRANTED) {
+                    isAllGranted = false;
+                    break;
+                }
+            }
+            if (isAllGranted) {
+                // 所有的权限都授予了
+                Log.e("err", "权限都授权了");
+            } else {
+                // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
+                //容易判断错
+                //MyDialog("提示", "某些权限未开启,请手动开启", 1) ;
+            }
+        }
+    }
+}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác