Procházet zdrojové kódy

已换TX TRTC 直播推拉流

doctors před 5 měsíci
revize
d2b04d01c6
100 změnil soubory, kde provedl 6502 přidání a 0 odebrání
  1. 13 0
      App/KLCZbYy/Mugo/.gitignore
  2. 6 0
      App/KLCZbYy/Mugo/.idea/compiler.xml
  3. 10 0
      App/KLCZbYy/Mugo/.idea/deploymentTargetDropDown.xml
  4. 18 0
      App/KLCZbYy/Mugo/.idea/deploymentTargetSelector.xml
  5. 61 0
      App/KLCZbYy/Mugo/.idea/gradle.xml
  6. 8 0
      App/KLCZbYy/Mugo/.idea/inspectionProfiles/Project_Default.xml
  7. 135 0
      App/KLCZbYy/Mugo/.idea/jarRepositories.xml
  8. 10 0
      App/KLCZbYy/Mugo/.idea/migrations.xml
  9. 6 0
      App/KLCZbYy/Mugo/.idea/misc.xml
  10. 0 0
      App/KLCZbYy/Mugo/.idea/shelf/Uncommitted_changes_before_Checkout_at_2023_7_16_19_57_[Changes]/shelved.patch
  11. 191 0
      App/KLCZbYy/Mugo/.idea/shelf/Uncommitted_changes_before_Checkout_at_2023_7_16_19_57_[Changes]1/shelved.patch
  12. 6 0
      App/KLCZbYy/Mugo/.idea/vcs.xml
  13. binární
      App/KLCZbYy/Mugo/MugoLive.jks
  14. 1 0
      App/KLCZbYy/Mugo/app/.gitignore
  15. 161 0
      App/KLCZbYy/Mugo/app/build.gradle
  16. binární
      App/KLCZbYy/Mugo/app/mugo/release/mugo_1.0_0726_0101.apk
  17. 18 0
      App/KLCZbYy/Mugo/app/mugo/release/output-metadata.json
  18. 22 0
      App/KLCZbYy/Mugo/app/proguard-rules.pro
  19. 131 0
      App/KLCZbYy/Mugo/app/src/main/AndroidManifest.xml
  20. 118 0
      App/KLCZbYy/Mugo/app/src/main/java/com/mugo/live/AppContext.java
  21. 14 0
      App/KLCZbYy/Mugo/app/src/main/java/com/mugo/live/activity/LauncherActivity.java
  22. 51 0
      App/KLCZbYy/Mugo/app/src/main/java/com/mugo/live/wxapi/WXPayEntryActivity.java
  23. 27 0
      App/KLCZbYy/Mugo/app/src/main/res/drawable/launch_bg.xml
  24. binární
      App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/bg_login.png
  25. binární
      App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  26. binární
      App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/screen.png
  27. binární
      App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/screen_txt.png
  28. 15 0
      App/KLCZbYy/Mugo/app/src/main/res/values/BaseConfig.xml
  29. 14 0
      App/KLCZbYy/Mugo/app/src/main/res/values/anchor_center_names.xml
  30. 6 0
      App/KLCZbYy/Mugo/app/src/main/res/values/colors.xml
  31. 32 0
      App/KLCZbYy/Mugo/app/src/main/res/values/me_bottom_resource.xml
  32. 24 0
      App/KLCZbYy/Mugo/app/src/main/res/values/me_top_resource.xml
  33. 3 0
      App/KLCZbYy/Mugo/app/src/main/res/values/strings.xml
  34. 7 0
      App/KLCZbYy/Mugo/app/src/main/res/values/styles.xml
  35. 27 0
      App/KLCZbYy/Mugo/app/src/main/res/xml/file_paths.xml
  36. 4 0
      App/KLCZbYy/Mugo/app/src/main/res/xml/network_security_config.xml
  37. 14 0
      App/KLCZbYy/Mugo/app/tpns-configs.json
  38. 50 0
      App/KLCZbYy/Mugo/build.gradle
  39. 23 0
      App/KLCZbYy/Mugo/gradle.properties
  40. binární
      App/KLCZbYy/Mugo/gradle/wrapper/gradle-wrapper.jar
  41. 6 0
      App/KLCZbYy/Mugo/gradle/wrapper/gradle-wrapper.properties
  42. 172 0
      App/KLCZbYy/Mugo/gradlew
  43. 84 0
      App/KLCZbYy/Mugo/gradlew.bat
  44. 92 0
      App/KLCZbYy/Mugo/settings.gradle
  45. 58 0
      App/KLCZbYy/Mugo/tmpmob/ShareSDK/assets/ShareSDK.xml
  46. 9 0
      App/KLCZbYy/Mugo/tmpmob/assets/ShareSDK.xml
  47. 1 0
      LibBase/KlcBase/.gitignore
  48. 184 0
      LibBase/KlcBase/LibBase-MXDBase.iml
  49. 184 0
      LibBase/KlcBase/TCAndroid-LibBase-MXDBase.iml
  50. 63 0
      LibBase/KlcBase/build.gradle
  51. 439 0
      LibBase/KlcBase/proguard-rules.pro
  52. 2 0
      LibBase/KlcBase/src/main/AndroidManifest.xml
  53. 33 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/ActivityManage.java
  54. 358 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/BaseActivity.java
  55. 214 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/BaseApplication.java
  56. 111 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/BaseMVVMActivity.java
  57. 163 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/GenerateValueFiles.java
  58. 132 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BaseAdapter.java
  59. 57 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BaseFragmentAdapter.java
  60. 57 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BaseFragmentAdapter2.java
  61. 106 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BasePagerAdapter.java
  62. 155 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleImgAdapter.java
  63. 188 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleImgTextAdapter.java
  64. 95 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleTextAdapter.java
  65. 96 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleTextAdapter2.java
  66. 123 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseDialog.java
  67. 84 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseFragment.java
  68. 168 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseMVVMFragment.java
  69. 95 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseMVVMViewHolder.java
  70. 12 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseModel.java
  71. 100 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseViewHolder.java
  72. 37 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/bean/SimpleImageUrlTextBean.java
  73. 18 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/bean/SimpleImgBean.java
  74. 24 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/bean/SimpleTextBean.java
  75. 19 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/camera/CameraConfig.java
  76. 770 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/ARouterPath.java
  77. 115 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/ARouterValueNameConfig.java
  78. 23 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/AppConstants.java
  79. 40 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/FilePathConstants.java
  80. 31 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/HttpConstants.java
  81. 33 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/JsonServiceImpl.java
  82. 244 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/LiveConstants.java
  83. 41 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/config/RouterInterceptor.java
  84. 7 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/AccountDisableEvent.java
  85. 8 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/AnchorRequestEvent.java
  86. 14 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/FamilyFirstUserEvent.java
  87. 8 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/GpsEvent.java
  88. 12 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/GuardBuySuccessEvent.java
  89. 8 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomePageGoTrendEvent.java
  90. 12 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomePageRefreshEvent.java
  91. 12 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomeRewardFirstChargeEvent.java
  92. 21 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomeRewardOne2OneEvent.java
  93. 8 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImClearEvent.java
  94. 12 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImDeleteMsgEvent.java
  95. 60 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImMsgStatusChangeEvent.java
  96. 8 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReadAllEvent.java
  97. 16 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReadEvent.java
  98. 19 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReadMsgEvent.java
  99. 7 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReceiveManyMsgEvent.java
  100. 8 0
      LibBase/KlcBase/src/main/java/com/kalacheng/base/event/KickOutRoomEvent.java

+ 13 - 0
App/KLCZbYy/Mugo/.gitignore

@@ -0,0 +1,13 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild

+ 6 - 0
App/KLCZbYy/Mugo/.idea/compiler.xml

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

+ 10 - 0
App/KLCZbYy/Mugo/.idea/deploymentTargetDropDown.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="deploymentTargetDropDown">
+    <value>
+      <entry key="app">
+        <State />
+      </entry>
+    </value>
+  </component>
+</project>

+ 18 - 0
App/KLCZbYy/Mugo/.idea/deploymentTargetSelector.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="deploymentTargetSelector">
+    <selectionStates>
+      <SelectionState runConfigName="app">
+        <option name="selectionMode" value="DROPDOWN" />
+        <DropdownSelection timestamp="2024-06-08T19:28:32.525358Z">
+          <Target type="DEFAULT_BOOT">
+            <handle>
+              <DeviceId pluginId="LocalEmulator" identifier="path=/Users/doctors/.android/avd/Pixel_3a_API_34_extension_level_7_arm64-v8a.avd" />
+            </handle>
+          </Target>
+        </DropdownSelection>
+        <DialogSelection />
+      </SelectionState>
+    </selectionStates>
+  </component>
+</project>

+ 61 - 0
App/KLCZbYy/Mugo/.idea/gradle.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="gradleHome" value="$USER_HOME$/.gradle/wrapper/dists/gradle-6.5-all/1ml5nck4xpq5ww8v92lqs07nc/gradle-6.5" />
+        <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/app" />
+            <option value="$PROJECT_DIR$/../../../LibBase/KlcBase" />
+            <option value="$PROJECT_DIR$/../../../LibBase/KlcBeans" />
+            <option value="$PROJECT_DIR$/../../../LibBase/KlcCommonView" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcAnchorCenter" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcFans" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcHome" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcHomePage" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcImJmessage" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcInvitation" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcLogin" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcLoginPage" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMain" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMainPage" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMe" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMessage" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMoney" />
+            <option value="$PROJECT_DIR$/../../../LibBasic/KlcRanking" />
+            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcLive" />
+            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcLiveCommon" />
+            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcShopping" />
+            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcVoiceLive" />
+            <option value="$PROJECT_DIR$/../../../LibCore/VideoFunction/KlcShortVideo" />
+            <option value="$PROJECT_DIR$/../../../LibCore/VideoFunction/KlcTrend" />
+            <option value="$PROJECT_DIR$/../../../LibCore/VideoFunction/KlcVideoCommon" />
+            <option value="$PROJECT_DIR$/../../../LibNull/KlcAdvance" />
+            <option value="$PROJECT_DIR$/../../../LibTools/KlcBeauty" />
+            <option value="$PROJECT_DIR$/../../../LibTools/KlcMap" />
+            <option value="$PROJECT_DIR$/../../../LibTools/KlcPush" />
+            <option value="$PROJECT_DIR$/../../../LibTools/KlcTiUi" />
+            <option value="$PROJECT_DIR$/../../../LibTools/KlcUtils" />
+            <option value="$PROJECT_DIR$/../../../LibTools/libIm" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/All/KlcLiveCloud" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/All/libCamera" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/All/libLiveCloud" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/All/tuilivekit" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AlivcMedia" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunCrop" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunRecorder" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunSVideoBase" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunVideoCommon" />
+            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/libStorage" />
+          </set>
+        </option>
+        <option name="resolveExternalAnnotations" value="false" />
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>

+ 8 - 0
App/KLCZbYy/Mugo/.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,8 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="AndroidDomInspection" enabled="false" level="ERROR" enabled_by_default="false" />
+    <inspection_tool class="AndroidNonConstantResIdsInSwitch" enabled="false" level="ERROR" enabled_by_default="false" />
+    <inspection_tool class="AndroidUnresolvableTag" enabled="false" level="ERROR" enabled_by_default="false" />
+  </profile>
+</component>

+ 135 - 0
App/KLCZbYy/Mugo/.idea/jarRepositories.xml

@@ -0,0 +1,135 @@
+<?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="maven2" />
+      <option name="name" value="maven2" />
+      <option name="url" value="http://developer.huawei.com/repo/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven3" />
+      <option name="name" value="maven3" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/repositories/releases/" />
+    </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="maven" />
+      <option name="name" value="maven" />
+      <option name="url" value="https://jitpack.io" />
+    </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="MobSDK" />
+      <option name="name" value="MobSDK" />
+      <option name="url" value="https://mvn.mob.com/android" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:/$PROJECT_DIR$/../../../LiveProject/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:/$PROJECT_DIR$/../../../repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenLocal" />
+      <option name="name" value="MavenLocal" />
+      <option name="url" value="file:/$USER_HOME$/.m2/repository/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="http://mvn.mob.com/android" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven3" />
+      <option name="name" value="maven3" />
+      <option name="url" value="https://maven.aliyun.com/nexus/content/repositories/releases/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven2" />
+      <option name="name" value="maven2" />
+      <option name="url" value="https://developer.huawei.com/repo/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../LiveProject/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../LiveProject/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../LiveProject/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../LiveProject/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:$PROJECT_DIR$/../../../repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenLocal" />
+      <option name="name" value="MavenLocal" />
+      <option name="url" value="file:$USER_HOME$/.m2/repository/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:/$PROJECT_DIR$/../../../../../../PC%201/Desktop/NewMugo/LiveProject/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="maven4" />
+      <option name="name" value="maven4" />
+      <option name="url" value="file:/$PROJECT_DIR$/../../../../../../PC%201/Desktop/NewMugo/repo" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenLocal" />
+      <option name="name" value="MavenLocal" />
+      <option name="url" value="file:/$PROJECT_DIR$/../../../../../../PC%201/.m2/repository/" />
+    </remote-repository>
+  </component>
+</project>

+ 10 - 0
App/KLCZbYy/Mugo/.idea/migrations.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectMigrations">
+    <option name="MigrateToGradleLocalJavaHome">
+      <set>
+        <option value="$PROJECT_DIR$" />
+      </set>
+    </option>
+  </component>
+</project>

+ 6 - 0
App/KLCZbYy/Mugo/.idea/misc.xml

@@ -0,0 +1,6 @@
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="temurin-1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+</project>

+ 0 - 0
App/KLCZbYy/Mugo/.idea/shelf/Uncommitted_changes_before_Checkout_at_2023_7_16_19_57_[Changes]/shelved.patch


+ 191 - 0
App/KLCZbYy/Mugo/.idea/shelf/Uncommitted_changes_before_Checkout_at_2023_7_16_19_57_[Changes]1/shelved.patch

@@ -0,0 +1,191 @@
+Index: .idea/gradle.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/gradle.xml b/.idea/gradle.xml
+new file mode 100644
+--- /dev/null	(date 1689508578545)
++++ b/.idea/gradle.xml	(date 1689508578545)
+@@ -0,0 +1,61 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project version="4">
++  <component name="GradleSettings">
++    <option name="linkedExternalProjectsSettings">
++      <GradleProjectSettings>
++        <option name="testRunner" value="GRADLE" />
++        <option name="distributionType" value="DEFAULT_WRAPPED" />
++        <option name="externalProjectPath" value="$PROJECT_DIR$" />
++        <option name="gradleHome" value="$USER_HOME$/.gradle/wrapper/dists/gradle-6.5-all/1ml5nck4xpq5ww8v92lqs07nc/gradle-6.5" />
++        <option name="gradleJvm" value="#JAVA_HOME" />
++        <option name="modules">
++          <set>
++            <option value="$PROJECT_DIR$" />
++            <option value="$PROJECT_DIR$/app" />
++            <option value="$PROJECT_DIR$/../../../LibBase/KlcBase" />
++            <option value="$PROJECT_DIR$/../../../LibBase/KlcBeans" />
++            <option value="$PROJECT_DIR$/../../../LibBase/KlcCommonView" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcAnchorCenter" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcFans" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcHome" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcHomePage" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcImJmessage" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcInvitation" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcLogin" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcLoginPage" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMain" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMainPage" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMe" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMessage" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcMoney" />
++            <option value="$PROJECT_DIR$/../../../LibBasic/KlcRanking" />
++            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcLive" />
++            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcLiveCommon" />
++            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcShopping" />
++            <option value="$PROJECT_DIR$/../../../LibCore/LiveFunction/KlcVoiceLive" />
++            <option value="$PROJECT_DIR$/../../../LibCore/VideoFunction/KlcShortVideo" />
++            <option value="$PROJECT_DIR$/../../../LibCore/VideoFunction/KlcTrend" />
++            <option value="$PROJECT_DIR$/../../../LibCore/VideoFunction/KlcVideoCommon" />
++            <option value="$PROJECT_DIR$/../../../LibNull/KlcAdvance" />
++            <option value="$PROJECT_DIR$/../../../LibTools/KlcBeauty" />
++            <option value="$PROJECT_DIR$/../../../LibTools/KlcMap" />
++            <option value="$PROJECT_DIR$/../../../LibTools/KlcMob" />
++            <option value="$PROJECT_DIR$/../../../LibTools/KlcPush" />
++            <option value="$PROJECT_DIR$/../../../LibTools/KlcTiUi" />
++            <option value="$PROJECT_DIR$/../../../LibTools/KlcUtils" />
++            <option value="$PROJECT_DIR$/../../../LibTools/libIm" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/All/KlcLiveCloud" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/All/libCamera" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/All/libLiveCloud" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AlivcMedia" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunCrop" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunRecorder" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunSVideoBase" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/AliyunVideoCommon" />
++            <option value="$PROJECT_DIR$/../../../LiveProject/mugo/libStorage" />
++          </set>
++        </option>
++      </GradleProjectSettings>
++    </option>
++  </component>
++</project>
+\ No newline at end of file
+Index: .idea/compiler.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/compiler.xml b/.idea/compiler.xml
+new file mode 100644
+--- /dev/null	(date 1689508578494)
++++ b/.idea/compiler.xml	(date 1689508578494)
+@@ -0,0 +1,6 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project version="4">
++  <component name="CompilerConfiguration">
++    <bytecodeTargetLevel target="1.8" />
++  </component>
++</project>
+\ No newline at end of file
+Index: .idea/vcs.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/vcs.xml b/.idea/vcs.xml
+new file mode 100644
+--- /dev/null	(date 1689508558546)
++++ b/.idea/vcs.xml	(date 1689508558546)
+@@ -0,0 +1,6 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project version="4">
++  <component name="VcsDirectoryMappings">
++    <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
++  </component>
++</project>
+\ No newline at end of file
+Index: .idea/misc.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/.idea/misc.xml b/.idea/misc.xml
+new file mode 100644
+--- /dev/null	(date 1689508578482)
++++ b/.idea/misc.xml	(date 1689508578482)
+@@ -0,0 +1,5 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project version="4">
++  <component name="ExternalStorageConfigurationManager" enabled="true" />
++  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
++</project>
+\ No newline at end of file
+Index: ../../../.idea/MugoAndroid.iml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/../../../.idea/MugoAndroid.iml b/../../../.idea/MugoAndroid.iml
+new file mode 100644
+--- /dev/null	(date 1689508522064)
++++ b/../../../.idea/MugoAndroid.iml	(date 1689508522064)
+@@ -0,0 +1,9 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<module type="JAVA_MODULE" version="4">
++  <component name="NewModuleRootManager" inherit-compiler-output="true">
++    <exclude-output />
++    <content url="file://$MODULE_DIR$" />
++    <orderEntry type="inheritedJdk" />
++    <orderEntry type="sourceFolder" forTests="false" />
++  </component>
++</module>
+\ No newline at end of file
+Index: ../../../.idea/.gitignore
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/../../../.idea/.gitignore b/../../../.idea/.gitignore
+new file mode 100644
+--- /dev/null	(date 1689508527593)
++++ b/../../../.idea/.gitignore	(date 1689508527593)
+@@ -0,0 +1,3 @@
++# Default ignored files
++/shelf/
++/workspace.xml
+Index: ../../../.idea/vcs.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/../../../.idea/vcs.xml b/../../../.idea/vcs.xml
+new file mode 100644
+--- /dev/null	(date 1689508522071)
++++ b/../../../.idea/vcs.xml	(date 1689508522071)
+@@ -0,0 +1,6 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project version="4">
++  <component name="VcsDirectoryMappings">
++    <mapping directory="" vcs="Git" />
++  </component>
++</project>
+\ No newline at end of file
+Index: ../../../.idea/modules.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/../../../.idea/modules.xml b/../../../.idea/modules.xml
+new file mode 100644
+--- /dev/null	(date 1689508522067)
++++ b/../../../.idea/modules.xml	(date 1689508522067)
+@@ -0,0 +1,8 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<project version="4">
++  <component name="ProjectModuleManager">
++    <modules>
++      <module fileurl="file://$PROJECT_DIR$/.idea/MugoAndroid.iml" filepath="$PROJECT_DIR$/.idea/MugoAndroid.iml" />
++    </modules>
++  </component>
++</project>
+\ No newline at end of file

+ 6 - 0
App/KLCZbYy/Mugo/.idea/vcs.xml

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

binární
App/KLCZbYy/Mugo/MugoLive.jks


+ 1 - 0
App/KLCZbYy/Mugo/app/.gitignore

@@ -0,0 +1 @@
+/build

+ 161 - 0
App/KLCZbYy/Mugo/app/build.gradle

@@ -0,0 +1,161 @@
+apply plugin: 'com.android.application'
+apply plugin: 'android-aspectjx'
+apply plugin: 'com.huawei.agconnect'      // HMS SDK gradle 插件
+apply plugin: "com.tencent.android.tpns"
+
+def releaseTime() {
+    return new Date().format("MMdd_HHmm", TimeZone.getTimeZone("GMT+8:00"))
+}
+
+android {
+    compileSdkVersion 31
+    buildToolsVersion "29.0.3"
+
+    defaultConfig {
+        minSdkVersion 21
+        targetSdkVersion 29
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        javaCompileOptions {
+            annotationProcessorOptions {
+                arguments = [AROUTER_MODULE_NAME: project.getName()]
+            }
+        }
+        multiDexEnabled true
+        flavorDimensions "default"
+        ndk {
+            // 设置支持的SO库架构
+            abiFilters 'arm64-v8a', 'x86_64', 'armeabi-v7a'//, 'x86_64',  'armeabi-v7a', 'x86',
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    signingConfigs {
+        config {
+            keyAlias 'key'
+            keyPassword 'Hx6248**'
+            storeFile file('../mugolive.jks')
+            storePassword 'Hx6248**'
+        }
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled true//混淆
+            shrinkResources true //删除无效引用
+            signingConfig signingConfigs.config
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+        debug {
+            minifyEnabled false//混淆
+            signingConfig signingConfigs.config
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
+    lintOptions {
+        disable 'GoogleAppIndexingWarning'//忽略 Google Search(放于每个module的build.gradle文件中)
+    }
+
+    buildFeatures{
+        dataBinding = true
+    }
+
+    productFlavors {
+        //Mugo
+        mugo {
+            applicationId "com.mugo.live"
+            versionCode 1
+            versionName "1.0"
+            manifestPlaceholders = [
+                    OpenInstallAppKey: "a4p4z6",//OpenInstall
+                    JPUSH_PKGNAME    : applicationId,//极光
+                    JPUSH_CHANNEL    : "developer-default",
+                    JPUSH_APPKEY     : "84fdb198614f114ca8be6738",
+                    Tencent_BUGLY    : "12289a52b6",//腾讯bugly
+                    Tencent_Map      : "TYPBZ-FGGWJ-5JQFS-FLH5R-WXK5V-NSFGQ",//腾讯地图
+                    WX_PAY_APP_ID    : "wx9477e94703095c92",//微信支付,AppId
+                    XG_ACCESS_ID     : "1580010621",//腾讯TPNS accessid
+                    XG_ACCESS_KEY    : "AW9JXX7NHY6M",//腾讯TPNS accesskey
+                    MI_APPID         : "",//小米 AppID
+                    MI_APPKEY        : "",//小米 AppKey
+                    VIVO_APPID       : "",// vivo AppID
+                    VIVO_APPKEY      : "",// vivo AppKey
+                    OPPO_APPID       : "",// oppo AppID
+                    OPPO_APPKEY      : ""// oppo AppKey
+            ]
+
+                    buildConfigField 'String', 'SERVER_URL', '"http://yydsappapi.samsunghook.com"'
+//                    buildConfigField 'String', 'SERVER_URL', '"http://samsunghook.pro"'
+
+
+        }
+
+    }
+
+    applicationVariants.all { variant ->
+        variant.outputs.all {
+            def fileName = productFlavors.name[0] + "_" + productFlavors.versionName[0] + "_" + releaseTime() + ".apk"
+            outputFileName = fileName
+        }
+    }
+
+}
+repositories {
+    flatDir {
+        dirs 'libs', '../libs'
+    }
+    maven {
+        url "https://mvn.mob.com/android"
+    }
+}
+aspectjx {
+    //排除所有package路径中包含`android.support`的class文件及库(jar文件)
+    //消除Aspectj对支付宝影响
+    exclude 'com.alipay', 'com.google'
+}
+
+dependencies {
+    implementation fileTree(include: ['*.jar'], dir: 'libs')
+    //noinspection GradleCompatible
+    implementation 'com.android.support:design:23.1.1'
+    implementation 'androidx.appcompat:appcompat:1.1.0'
+    testImplementation 'junit:junit:4.12'
+    androidTestImplementation 'androidx.test:runner:1.2.0'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+    implementation project(':KlcVoiceLive')
+    implementation project(':KlcLive')
+    implementation project(':KlcUtils')
+    implementation project(':KlcBase')
+    implementation project(':KlcBeans')
+    implementation project(':KlcLive')
+    implementation project(':KlcLogin')
+    implementation project(':KlcLoginPage')
+    implementation project(':KlcTrend')
+    implementation project(':KlcFans')
+    implementation project(':KlcMoney')
+    implementation project(':KlcLiveCommon')
+    implementation project(':KlcVideoCommon')
+    implementation project(':KlcCommonView')
+    implementation project(':KlcMain')
+    implementation project(':KlcMainPage')
+    implementation project(':KlcMessage')
+    implementation project(':KlcImJmessage')
+    implementation project(':KlcShortVideo')
+    implementation project(':KlcHomePage')
+    implementation project(':KlcInvitation')
+    implementation project(':KlcMe')
+    implementation project(':KlcPush')
+    implementation project(':KlcShopping')
+
+    annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'
+    api 'com.alibaba:arouter-api:1.5.2'
+
+}

binární
App/KLCZbYy/Mugo/app/mugo/release/mugo_1.0_0726_0101.apk


+ 18 - 0
App/KLCZbYy/Mugo/app/mugo/release/output-metadata.json

@@ -0,0 +1,18 @@
+{
+  "version": 2,
+  "artifactType": {
+    "type": "APK",
+    "kind": "Directory"
+  },
+  "applicationId": "com.mugo.live",
+  "variantName": "processMugoReleaseResources",
+  "elements": [
+    {
+      "type": "SINGLE",
+      "filters": [],
+      "versionCode": 1,
+      "versionName": "1.0",
+      "outputFile": "mugo_1.0_0726_0101.apk"
+    }
+  ]
+}

+ 22 - 0
App/KLCZbYy/Mugo/app/proguard-rules.pro

@@ -0,0 +1,22 @@
+# 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
+

+ 131 - 0
App/KLCZbYy/Mugo/app/src/main/AndroidManifest.xml

@@ -0,0 +1,131 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.mugo.live">
+
+    <!-- 【必须】 移动推送 TPNS SDK VIP版本所需权限 -->
+    <permission
+        android:name="${applicationId}.permission.XGPUSH_RECEIVE"
+        android:protectionLevel="signature" />
+    <uses-permission android:name="${applicationId}.permission.XGPUSH_RECEIVE" />
+    <!-- 指定微信包名 -->
+    <queries>
+        <package android:name="com.tencent.mm" />
+    </queries>
+
+    <application
+        android:name="com.mugo.live.AppContext"
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:requestLegacyExternalStorage="true"
+        android:resizeableActivity="false"
+        android:theme="@style/AppTheme"
+        android:usesCleartextTraffic="true"
+        tools:replace="label|android:allowBackup">
+        <!--         android:largeHeap="true"
+               android:hardwareAccelerated="false"
+
+                      android:supportsRtl="true"-->
+        <!--        -->
+        <activity
+            android:name="com.mugo.live.activity.LauncherActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/launcher">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+
+                <data android:scheme="${OpenInstallAppKey}" />
+            </intent-filter>
+        </activity>
+
+
+        <!--微信支付回调页面-->
+        <activity
+            android:name=".wxapi.WXPayEntryActivity"
+            android:exported="true"
+            android:launchMode="singleTop"
+            android:theme="@android:style/Theme.Translucent.NoTitleBar"
+            tools:ignore="MissingClass">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:scheme="${WX_PAY_APP_ID}" />
+            </intent-filter>
+        </activity>
+
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            android:exported="false"
+            tools:replace="android:authorities"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                tools:replace="android:resource"
+                android:resource="@xml/file_paths" />
+        </provider>
+
+        <!-- 腾讯bugly -->
+        <meta-data
+            android:name="BUGLY_APPID"
+            android:value="${Tencent_BUGLY}" />
+        <meta-data
+            android:name="BUGLY_APP_CHANNEL"
+            android:value="${applicationId}" />
+        <meta-data
+            android:name="BUGLY_ENABLE_DEBUG"
+            android:value="true" />
+        <!-- 腾讯地图 -->
+        <meta-data
+            android:name="TencentMapSDK"
+            android:value="${Tencent_Map}" />
+        <!-- OpenInstall -->
+        <meta-data
+            android:name="com.openinstall.APP_KEY"
+            android:value="${OpenInstallAppKey}" />
+        <!--腾讯TPush,接入点为 上海-->
+        <meta-data
+            android:name="XG_SERVER_SUFFIX"
+            android:value="tpns.sh.tencent.com" />
+        <!--小米 AppId-->
+        <meta-data
+            android:name="MI_PUSH_APP_ID"
+            android:value="${MI_APPID}" />
+        <!--小米 AppKey-->
+        <meta-data
+            android:name="MI_PUSH_APP_KEY"
+            android:value="${MI_APPKEY}" />
+        <!--VIVO AppId-->
+        <meta-data
+            android:name="VIVO_PUSH_APP_ID"
+            android:value="${VIVO_APPID}" />
+        <!--VIVO AppKey-->
+        <meta-data
+            android:name="VIVO_PUSH_APP_KEY"
+            android:value="${VIVO_APPKEY}" />
+        <!--OPPO AppId-->
+        <meta-data
+            android:name="OPPO_PUSH_APP_ID"
+            android:value="${OPPO_APPID}" />
+        <!--OPPO AppKey-->
+        <meta-data
+            android:name="OPPO_PUSH_APP_KEY"
+            android:value="${OPPO_APPKEY}" />
+        <meta-data
+            android:name="Mob-AppKey"
+            android:value="37cdd17cf59dd" />
+
+        <meta-data
+            android:name="Mob-AppSecret"
+            android:value="25533743fe62efc8d5eecada8e5bf8fd" />
+    </application>
+</manifest>

+ 118 - 0
App/KLCZbYy/Mugo/app/src/main/java/com/mugo/live/AppContext.java

@@ -0,0 +1,118 @@
+package com.mugo.live;
+
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.util.Log;
+
+import com.kalacheng.base.http.HttpClient;
+import com.kalacheng.base.utils.SpUtil;
+import com.kalacheng.commonview.application.CommonApplication;
+import com.kalacheng.main.MainFragmentConfig;
+import com.kalacheng.main.fragment.FollowLiveFragment;
+import com.kalacheng.main.fragment.MainFragment;
+import com.kalacheng.main.fragment.NearFragment;
+import com.kalacheng.main.fragment.RecommendFragment;
+import com.kalacheng.main.fragment.SquareFragment;
+import com.kalacheng.main.fragment.TrendContainFragment;
+import com.kalacheng.main.fragment.VoiceChatFragment;
+import com.kalacheng.me.fragment.MeFragment;
+import com.kalacheng.message.fragment.MsgSimpleFragment;
+import com.kalacheng.shortvideo.fragment.ShortVideoContainFragment;
+import com.kalacheng.util.utils.AppUtil;
+import com.kalacheng.util.utils.WordUtil;
+
+
+public class AppContext extends CommonApplication {
+
+    SharedPreferences Sp;
+    private String country;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        Sp = getSharedPreferences("com.mugo.live", Context.MODE_PRIVATE);
+        Requiment();
+        AppUtil.changeLanguage(getBaseContext(), Sp.getString("lang", null));
+        if (isMainProcess()) {
+            String crashTag = AppUtil.getVersionName() + "_" + BuildConfig.FLAVOR + (BuildConfig.DEBUG ? "_debug" : "");
+            SpUtil.getInstance().put(SpUtil.OTHER_CRASH_TAG, crashTag);
+
+            HttpClient.getInstance().init(this);
+            HttpClient.getInstance().setUrl(BuildConfig.SERVER_URL);
+            MainFragmentConfig.FRAGMENTCOMPONENT = new Class[]{ShortVideoContainFragment.class, MainFragment.class, TrendContainFragment.class, MsgSimpleFragment.class, MeFragment.class};
+            MainFragmentConfig.MAINCOMPONENT = new Class[]{FollowLiveFragment.class, RecommendFragment.class, SquareFragment.class, /*LiveBuyFragment.class,*/ VoiceChatFragment.class, NearFragment.class};
+            MainFragmentConfig.MAININDICATOR = new String[]{
+                    WordUtil.getString(R.string.common_follow),
+                    WordUtil.getString(R.string.recommend),
+                    WordUtil.getString(R.string.living_chinese),
+                    //WordUtil.getString(R.string.live_buy),
+                    WordUtil.getString(R.string.party),
+                    WordUtil.getString(R.string.main_near)};
+        }
+    }
+
+    private void Requiment() {
+         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            country = getApplicationContext().getResources().getConfiguration().getLocales().get(0).getCountry();
+            Log.d("country",country);
+        } else {
+            country = getApplicationContext().getResources().getConfiguration().locale.getCountry();
+            Log.d("country",country);
+        }
+        String systemLanguage = AppUtil.getSystemLanguage();
+
+        switch (systemLanguage) {
+            case "ar":
+                Sp.edit().putString("lang", "ar").apply();
+                AppUtil.changeLanguage(getBaseContext(), "ar");
+                break;
+            case "tr":
+                Sp.edit().putString("lang", "tr").apply();
+                AppUtil.changeLanguage(getBaseContext(), "tr");
+                break;
+            case "en":
+                Sp.edit().putString("lang", "en").apply();
+                AppUtil.changeLanguage(getBaseContext(), "en");
+                break;
+            case "zh":
+                if (country.equals("HK")){
+                    Sp.edit().putString("lang", "hk").apply();
+                    AppUtil.changeLanguage(getBaseContext(),"hk");
+                }else{
+                    Sp.edit().putString("lang", "zh").apply();
+                    AppUtil.changeLanguage(getBaseContext(), "zh");
+                }
+                break;
+            default:
+                Sp.edit().putString("lang", "zh").apply();
+                AppUtil.changeLanguage(getBaseContext(), "zh");
+                break;
+        }
+
+// FIXME
+//        if (!Sp.contains("lang")) {
+//            if(country.equals("SA") || country.equals("SY") || country.equals("SA") || country.equals("TN") || country.equals("AE") || country.equals("YE") || country.equals("KW") || country.equals("LB") || country.equals("LB") || country.equals("QA") || country.equals("EG") || country.equals("JO") || country.equals("IO") || country.equals("DZ")) {
+//                Sp.edit().putString("lang", "ar").apply();
+//                AppUtil.changeLanguage(getBaseContext(),"ar");
+//            } else if(country.equals("TR")){
+//                Sp.edit().putString("lang", "tr").apply();
+//                AppUtil.changeLanguage(getBaseContext(),"tr");
+//            } else if(country.equals("en_EN")) {
+//                Sp.edit().putString("lang", "en").apply();
+//                AppUtil.changeLanguage(getBaseContext(),"en");
+//            } else if(country.equals("hk_HK")) {
+//                Sp.edit().putString("lang", "hk").apply();
+//                AppUtil.changeLanguage(getBaseContext(),"hk");
+//            } else {
+//                Sp.edit().putString("lang", "zh").apply();
+//                AppUtil.changeLanguage(getBaseContext(),"zh");
+//            }
+//        } else {
+//            AppUtil.changeLanguage(getBaseContext(),Sp.getString("lang",null));
+//        }
+
+    }
+
+}

+ 14 - 0
App/KLCZbYy/Mugo/app/src/main/java/com/mugo/live/activity/LauncherActivity.java

@@ -0,0 +1,14 @@
+package com.mugo.live.activity;
+
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.kalacheng.base.config.ARouterPath;
+import com.kalacheng.login.activity.BaseLauncherActivity;
+
+/**
+ * Created by hgy on 2019/9/17.
+ */
+@Route(path = ARouterPath.LauncherActivity)
+public class LauncherActivity extends BaseLauncherActivity {
+
+}

+ 51 - 0
App/KLCZbYy/Mugo/app/src/main/java/com/mugo/live/wxapi/WXPayEntryActivity.java

@@ -0,0 +1,51 @@
+package com.mugo.live.wxapi;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.kalacheng.money.pay.WxApiWrapper;
+import com.tencent.mm.opensdk.modelbase.BaseReq;
+import com.tencent.mm.opensdk.modelbase.BaseResp;
+import com.tencent.mm.opensdk.openapi.IWXAPI;
+import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
+
+import org.greenrobot.eventbus.EventBus;
+
+
+/**
+ * 微信支付的回调页面
+ */
+public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
+
+    private IWXAPI api;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        api = WxApiWrapper.getInstance().getWxApi();
+        if (api != null) {
+            api.handleIntent(getIntent(), this);
+        }
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        setIntent(intent);
+        if (api != null) {
+            api.handleIntent(intent, this);
+        }
+    }
+
+    @Override
+    public void onReq(BaseReq req) {
+    }
+
+    @Override
+    public void onResp(BaseResp resp) {
+        EventBus.getDefault().post(resp);
+        finish();
+    }
+
+}

+ 27 - 0
App/KLCZbYy/Mugo/app/src/main/res/drawable/launch_bg.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape android:shape="rectangle">
+            <gradient
+                android:endColor="#FFFFFF"
+                android:startColor="#FFFFFF" />
+        </shape>
+    </item>
+
+    <!-- 顶部 -->
+    <item android:top="110dp">
+        <bitmap
+            android:gravity="top|center_horizontal"
+            android:scaleType="center"
+            android:src="@mipmap/screen" />
+    </item>
+
+    <!-- 底部 -->
+    <item android:bottom="84dp">
+        <bitmap
+            android:gravity="bottom|center_horizontal"
+            android:scaleType="center"
+            android:src="@mipmap/screen_txt" />
+    </item>
+
+</layer-list>

binární
App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/bg_login.png


binární
App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


binární
App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/screen.png


binární
App/KLCZbYy/Mugo/app/src/main/res/mipmap-xxhdpi/screen_txt.png


+ 15 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/BaseConfig.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <bool name="containLive">true</bool>//是否包含直播
+    <bool name="containOne2One">false</bool>//是否包含1对1
+    <bool name="containShortVideo">true</bool>//是否包含短视频
+    <bool name="containVoice">true</bool>//是否包含语音
+    <bool name="containShopping">false</bool>//是否包含直播购
+
+    <string name="judgeLoginStatusTab">3,4</string>//游客模式,主界面Tab按钮,哪几个位置,判断是否登录状态,例如 2,3
+    <integer name="mainVideoPosition">1</integer>
+    <integer name="mainStatusBarWhite0">0</integer>//MainActivity时,状态栏颜色,-1 自定义;0 白色字体;1 黑色字体
+    <bool name="canPublishWord">true</bool>//动态是否可以只发文字
+    <bool name="isShowAliSV">false</bool>// 使用阿里短视频
+
+</resources>

+ 14 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/anchor_center_names.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string-array name="anchor_center_names">
+        <item>@string/Live_data</item>
+        <item>@string/Fan_Club</item>
+        <item>@string/contrubution_list</item>
+    </string-array>
+
+    <integer-array name="anchor_center_ids">
+        <item>@mipmap/icon_me_live_data</item>
+        <item>@mipmap/drawicon_anchor_center_fans</item>
+        <item>@mipmap/icon_anchor_center_leaderboard</item>
+    </integer-array>
+</resources>

+ 6 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/colors.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="colorPrimary">@color/global</color>
+    <color name="colorPrimaryDark">@color/global</color>
+    <color name="colorAccent">@color/global</color>
+</resources>

+ 32 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/me_bottom_resource.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string-array name="me_bottom_names">
+        <item>@string/icon_me_rank</item>
+        <item>@string/mine_power_setting_title</item>
+<!--        <item>@string/im_type_shop_order</item>-->
+        <item>@string/icon_me_anchor_center_b</item>
+        <item>@string/icon_me_guild</item>
+<!--        <item>@string/icon_me_official_shop</item>-->
+        <item>@string/icon_me_time_axis</item>
+        <item>@string/icon_me_beauty_setting</item>
+        <item>@string/me_anchor_center</item>
+        <item>@string/icon_me_customer_service</item>
+        <item>@string/icon_me_customer_online</item>
+        <item>@string/beauty_setup</item>
+    </string-array>
+
+    <integer-array name="me_bottom_ids">
+        <item>@mipmap/icon_me_rank</item>
+        <item>@mipmap/icon_me_power_setting</item>
+<!--        <item>@mipmap/icon_me_order</item>-->
+        <item>@mipmap/icon_me_anchor_center_b</item>
+        <item>@mipmap/icon_me_guild</item>
+<!--        <item>@mipmap/icon_me_official_shop</item>-->
+        <item>@mipmap/icon_me_time_axis</item>
+        <item>@mipmap/icon_me_beauty_setting</item>
+        <item>@mipmap/icon_me_anchor_center</item>
+        <item>@mipmap/icon_me_customer_service</item>
+        <item>@mipmap/icon_me_customer_online</item>
+        <item>@mipmap/icon_me_setting</item>
+    </integer-array>
+</resources>

+ 24 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/me_top_resource.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string-array name="me_top_names">
+        <item>@string/icon_me_code</item>
+        <item>@string/icon_me_shop</item>
+        <item>@string/icon_me_guard</item>
+        <item>@string/icon_me_privilege</item>
+        <item>@string/my_coin_name</item>
+        <item>@string/icon_me_mission_center</item>
+        <item>@string/icon_me_gu</item>
+        <item>@string/icon_profit</item>
+    </string-array>
+
+    <integer-array name="me_top_ids">
+        <item>@mipmap/icon_me_code</item>
+        <item>@mipmap/icon_me_shop</item>
+        <item>@mipmap/icon_me_guard</item>
+        <item>@mipmap/icon_me_privilege</item>
+        <item>@mipmap/icon_me_account</item>
+        <item>@mipmap/icon_me_mission_center</item>
+        <item>@mipmap/icon_me_noble</item>
+        <item>@mipmap/icon_profit</item>
+    </integer-array>
+</resources>

+ 3 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name" translatable="false">熊猫TV</string>
+</resources>

+ 7 - 0
App/KLCZbYy/Mugo/app/src/main/res/values/styles.xml

@@ -0,0 +1,7 @@
+<resources>
+
+    <style name="launcher" parent="AppTheme">
+        <item name="android:windowBackground">@drawable/launch_bg</item>
+    </style>
+
+</resources>

+ 27 - 0
App/KLCZbYy/Mugo/app/src/main/res/xml/file_paths.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths>
+    <external-path
+        name="external_files"
+        path="." />
+
+    <root-path
+        name="root"
+        path="" />
+    <files-path
+        name="files"
+        path="" />
+    <cache-path
+        name="cache"
+        path="" />
+    <external-files-path
+        name="external_file_path"
+        path="" />
+    <external-cache-path
+        name="external_cache_path"
+        path="" />
+    <!--external-path标签用来指定Uri共享的,name属性的值可以自定义,
+    path属性的值表示共享的具体位置,设置为空,就表示共享整个SD卡-->
+    <!--    <external-path-->
+    <!--        name="external"-->
+    <!--        path="phonelive" />-->
+</paths>

+ 4 - 0
App/KLCZbYy/Mugo/app/src/main/res/xml/network_security_config.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <base-config cleartextTrafficPermitted="true" />
+</network-security-config>

+ 14 - 0
App/KLCZbYy/Mugo/app/tpns-configs.json

@@ -0,0 +1,14 @@
+{
+    "tpns": {
+        "access_id": "",
+        "access_key": ""
+    },
+    "com.mugo.live": {
+        "channel": {
+            "enable": true
+        }
+    },
+    "upgrade": false,
+    "debug": false,
+    "version": "1.2.3.0"
+}

+ 50 - 0
App/KLCZbYy/Mugo/build.gradle

@@ -0,0 +1,50 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+    repositories {
+        mavenCentral()
+        google()
+        jcenter()
+        maven { url 'https://developer.huawei.com/repo/' }     // 华为 maven 仓库地址
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:4.2.2'
+        classpath 'com.google.gms:google-services:4.3.3'
+        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
+        classpath "com.tencent.android.tpns:tpnsplugin:1.7.0" //tpns集成插件
+        classpath 'com.huawei.agconnect:agcp:1.3.1.300'     // 华为推送 gradle 插件依赖
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+    configurations.all {
+        resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
+        maven { url "https://jitpack.io" }
+        maven { url 'https://developer.huawei.com/repo/' }     // 华为 maven 仓库地址
+
+        maven {
+            url 'https://maven.aliyun.com/nexus/content/repositories/releases/'
+        } // 阿里短视频
+
+        flatDir {
+            //所有的module的repositories下把library module中的libs目录添加到依赖关系中
+            dirs project(':KlcUtils').file('libs')
+            dirs project(':KlcBase').file('libs')
+            dirs project(':libLiveCloud').file('libs')
+            dirs project(':KlcLiveCloud').file('libs')
+			dirs project(':libStorage').file('libs')
+			dirs project(':libCamera').file('libs')
+        }
+    }
+}
+
+
+task clean(type: Delete) {
+    delete rootProject.buildDir
+}

+ 23 - 0
App/KLCZbYy/Mugo/gradle.properties

@@ -0,0 +1,23 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx28192m -XX:MaxPermSize=24192m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+org.gradle.parallel=true
+org.gradel.daemon=true
+org.gradel.configureondemand=true
+MobSDK.spEdition=FP

binární
App/KLCZbYy/Mugo/gradle/wrapper/gradle-wrapper.jar


+ 6 - 0
App/KLCZbYy/Mugo/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,6 @@
+#Wed Aug 30 00:29:23 CST 2023
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME

+ 172 - 0
App/KLCZbYy/Mugo/gradlew

@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"

+ 84 - 0
App/KLCZbYy/Mugo/gradlew.bat

@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 92 - 0
App/KLCZbYy/Mugo/settings.gradle

@@ -0,0 +1,92 @@
+include ':app', ':libLiveCloud', ':KlcLiveCloud', ':KlcBase', ':KlcBeans', ':KlcLive', ':KlcVideoCommon', ':KlcMain', 'KlcMainPage', ":KlcVoiceLive", ":KlcUtils",
+        ':KlcFans', ':KlcMoney', ':KlcTrend', ':KlcLiveCommon',  ':KlcMessage', ':KlcMap', ':KlcTiUi', ":KlcLoginPage", ":KlcImJmessage", ":KlcLogin",
+        ':KlcCommonView', 'KlcShortVideo', ':KlcHomePage', 'KlcPush', 'KlcInvitation', 'KlcRanking', 'KlcAnchorCenter', 'KlcMe', 'KlcHome', ':KlcBeauty',
+        ':KlcAdvance', ':libStorage', ':libCamera', ':libIm', ':KlcShopping', ':AlivcMedia', ':AliyunCrop', ':AliyunRecorder',
+        ':AliyunSVideoBase', ':AliyunVideoCommon',':tuilivekit'//':KlcMob',
+
+//工具类
+project(':KlcUtils').projectDir = new File("../../../LibTools/", "KlcUtils")
+//基础类
+project(':KlcBase').projectDir = new File("../../../LibBase/", "KlcBase")
+//网络请求类
+project(':KlcBeans').projectDir = new File("../../../LibBase/", "KlcBeans")
+//公共组件
+project(':KlcCommonView').projectDir = new File("../../../LibBase/", "KlcCommonView")
+
+//直播,声网
+project(':libLiveCloud').projectDir = new File("../../../LiveProject/All/", "libLiveCloud")
+project(':tuilivekit').projectDir = new File("../../../LiveProject/All/", "tuilivekit")
+//直播云
+project(':KlcLiveCloud').projectDir = new File("../../../LiveProject/All/", "KlcLiveCloud")
+//美颜
+project(':KlcBeauty').projectDir = new File("../../../LibTools/", "KlcBeauty")
+//轩嗵云美颜
+project(':KlcTiUi').projectDir = new File("../../../LibTools/", "KlcTiUi")
+//直播相关公共架包
+project(':KlcLiveCommon').projectDir = new File("../../../LibCore/LiveFunction/", "KlcLiveCommon")
+//多人直播
+project(':KlcLive').projectDir = new File("../../../LibCore/LiveFunction/", "KlcLive")
+//多人语音
+project(':KlcVoiceLive').projectDir = new File("../../../LibCore/LiveFunction/", "KlcVoiceLive")
+//直播购
+project(':KlcShopping').projectDir = new File("../../../LibCore/LiveFunction/", "KlcShopping")
+
+//视频上传
+project(':KlcVideoCommon').projectDir = new File("../../../LibCore/VideoFunction/", "KlcVideoCommon")
+//动态展示
+project(':KlcTrend').projectDir = new File("../../../LibCore/VideoFunction/", "KlcTrend")
+//短视频
+project(':KlcShortVideo').projectDir = new File("../../../LibCore/VideoFunction/", "KlcShortVideo")
+
+//腾讯IM
+project(':libIm').projectDir = new File("../../../LibTools/", "libIm")
+//存储
+project(':libStorage').projectDir = new File("../../../LiveProject/mugo/", "libStorage")
+//拍照
+project(':libCamera').projectDir = new File("../../../LiveProject/All/", "libCamera")
+//地图
+project(':KlcMap').projectDir = new File("../../../LibTools/", "KlcMap")
+//分享
+//project(':KlcMob').projectDir = new File("../../../LibTools/", "KlcMob")
+//推送
+project(':KlcPush').projectDir = new File("../../../LibTools/", "KlcPush")
+//邀请赚钱
+project(':KlcInvitation').projectDir = new File("../../../LibBasic/", "KlcInvitation")
+//资金
+project(':KlcMoney').projectDir = new File("../../../LibBasic/", "KlcMoney")
+//搜索、粉丝、关注
+project(':KlcFans').projectDir = new File("../../../LibBasic/", "KlcFans")
+//排行榜
+project(':KlcRanking').projectDir = new File("../../../LibBasic/", "KlcRanking")
+//消息
+project(':KlcMessage').projectDir = new File("../../../LibBasic/", "KlcMessage")
+//私信
+project(':KlcImJmessage').projectDir = new File("../../../LibBasic/", "KlcImJmessage")
+//主播中心
+project(':KlcAnchorCenter').projectDir = new File("../../../LibBasic/", "KlcAnchorCenter")
+//登录、注册
+project(':KlcLogin').projectDir = new File("../../../LibBasic/", "KlcLogin")
+//登录页
+project(':KlcLoginPage').projectDir = new File("../../../LibBasic/", "KlcLoginPage")
+//我的
+project(':KlcMe').projectDir = new File("../../../LibBasic/", "KlcMe")
+//主界面基类
+project(':KlcMain').projectDir = new File("../../../LibBasic/", "KlcMain")
+//主界面实现类
+project(':KlcMainPage').projectDir = new File("../../../LibBasic/", "KlcMainPage")
+//个人主页基类
+project(':KlcHome').projectDir = new File("../../../LibBasic/", "KlcHome")
+//个人主页实现类
+project(':KlcHomePage').projectDir = new File("../../../LibBasic/", "KlcHomePage")
+
+//占位符
+//Advance广告聚合
+project(':KlcAdvance').projectDir = new File("../../../LibNull/", "KlcAdvance")
+
+// 阿里短视频SDK
+project(':AlivcMedia').projectDir = new File("../../../LiveProject/mugo/", "AlivcMedia")
+project(':AliyunCrop').projectDir = new File("../../../LiveProject/mugo/", "AliyunCrop")
+project(':AliyunRecorder').projectDir = new File("../../../LiveProject/mugo/", "AliyunRecorder")
+project(':AliyunSVideoBase').projectDir = new File("../../../LiveProject/mugo/", "AliyunSVideoBase")
+project(':AliyunVideoCommon').projectDir = new File("../../../LiveProject/mugo/", "AliyunVideoCommon")
+

+ 58 - 0
App/KLCZbYy/Mugo/tmpmob/ShareSDK/assets/ShareSDK.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<DevInfor>
+    <SinaWeibo Enable="false" />
+    <TencentWeibo Enable="false" />
+    <Douban Enable="false" />
+    <QZone AppId="101992406" AppKey="496b815fdf15185b4f86685e607f51b3" ShareByAppClient="true" />
+    <Renren Enable="false" />
+    <KaiXin Enable="false" />
+    <Facebook Id="8" SortId="8" ShareByAppClient="true" Enable="true" FaceBookLoginProtocolScheme="fb6332331506806101" OfficialVersion="default" FaceBookAppType="game" ConsumerKey="6332331506806101" ConsumerSecret="2e45a8398f2dd2dc1bc6cedb1e363994" RedirectUrl="https://www.baidu.com" />
+    <Twitter Enable="false" />
+    <Evernote Enable="false" />
+    <FourSquare Enable="false" />
+    <GooglePlus ClientID="413722939948-f28m6le95op92v8vrls4se4inc8msr26.apps.googleusercontent.com" RedirectUrl="http://localhost" />
+    <Instagram Enable="false" />
+    <LinkedIn Enable="false" />
+    <Tumblr Enable="false" />
+    <Email Enable="false" />
+    <ShortMessage Enable="false" />
+    <Wechat AppId="wxf719c9285617f17f" AppSecret="9bb711b30fb90b70e61388005c9af1e9" />
+    <WechatMoments AppId="wxf719c9285617f17f" AppSecret="9bb711b30fb90b70e61388005c9af1e9" />
+    <QQ AppId="101992406" AppKey="496b815fdf15185b4f86685e607f51b3" ShareByAppClient="true" />
+    <Instapaper Enable="false" />
+    <Pocket Enable="false" />
+    <YouDao Enable="false" />
+    <Pinterest Enable="false" />
+    <Flickr Enable="false" />
+    <Dropbox Enable="false" />
+    <VKontakte Enable="false" />
+    <WechatFavorite Enable="false" />
+    <Yixin Enable="false" />
+    <YixinMoments Enable="false" />
+    <Mingdao Enable="false" />
+    <Line Enable="false" />
+    <WhatsApp Enable="false" />
+    <KakaoTalk Enable="false" />
+    <KakaoStory Enable="false" />
+    <FacebookMessenger Enable="false" />
+    <Alipay Enable="false" />
+    <AlipayMoments Enable="false" />
+    <Dingding Enable="false" />
+    <Youtube Enable="false" />
+    <Meipai Enable="false" />
+    <Telegram Enable="false" />
+    <Cmcc Enable="false" />
+    <Reddit Enable="false" />
+    <Telecom Enable="false" />
+    <Accountkit Enable="false" />
+    <Douyin Enable="false" />
+    <Wework Enable="false" />
+    <HWAccount Enable="false" />
+    <Oasis Enable="false" />
+    <XMAccount Enable="false" />
+    <SnapChat Enable="false" />
+    <Kuaishou Enable="false" />
+    <Littleredbook Enable="false" />
+    <Watermelonvideo Enable="false" />
+    <Tiktok Enable="false" />
+</DevInfor>

+ 9 - 0
App/KLCZbYy/Mugo/tmpmob/assets/ShareSDK.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<DevInfor>
+<QQ AppId="101992406" AppKey="496b815fdf15185b4f86685e607f51b3" ShareByAppClient="true" />
+<QZone AppId="101992406" AppKey="496b815fdf15185b4f86685e607f51b3" ShareByAppClient="true" />
+<Wechat AppId="wx9477e94703095c92" AppSecret="899feb1374da97f4b7d89f8d2880bef6" />
+<WechatMoments AppId="wx9477e94703095c92" AppSecret="899feb1374da97f4b7d89f8d2880bef6" />
+<GooglePlus Id="21" SortId="21" ShareByAppClient="true" Enable="true" OfficialVersion="default" ClientID="413722939948-f28m6le95op92v8vrls4se4inc8msr26.apps.googleusercontent.com" RedirectUrl="http://localhost" />
+<Facebook Id="8" SortId="8" ShareByAppClient="true" Enable="true" FaceBookLoginProtocolScheme="fb6332331506806101" OfficialVersion="default" FaceBookAppType="game" ConsumerKey="6332331506806101" ConsumerSecret="2e45a8398f2dd2dc1bc6cedb1e363994" RedirectUrl="https://www.baidu.com" />
+</DevInfor>

+ 1 - 0
LibBase/KlcBase/.gitignore

@@ -0,0 +1 @@
+/build

+ 184 - 0
LibBase/KlcBase/LibBase-MXDBase.iml

@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":MXDBase" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../../App/MXD3v/mx3v1" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":MXDBase" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.5.3" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="3.5.3" />
+      </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$/src/main/res;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+        <option name="PROJECT_TYPE" value="1" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-core:3.2.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.2.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.2.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-idling-resource:3.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.alibaba:fastjson:1.2.68@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.trello.rxlifecycle2:rxlifecycle:2.2.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.greenrobot:eventbus:3.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:databinding-common:3.5.3@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.3.0-alpha03@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.collection:collection:1.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.2.0-alpha01@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.socket:socket.io-client:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.socket:engine.io-client:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.9.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.13.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.1.17@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.9.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.9.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.alibaba:arouter-annotation:1.0.4@jar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:D./workbranch/TCAndroid/Libs/IMSocket.aar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.jaeger.statusbarutil:library:1.5.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.lzy.net:okgo:3.0.4@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.trello.rxlifecycle2:rxlifecycle-components:2.2.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.trello.rxlifecycle2:rxlifecycle-android:2.2.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-extensions:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:okhttp3-integration:4.9.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.9.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.makeramen:roundedimageview:2.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.SherlockGougou:BigImageViewPager:v4_4.0.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: jp.wasabeef:glide-transformations:4.0.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.tencent.bugly:crashreport:2.6.6@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.scwang.smartrefresh:SmartRefreshLayout:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.scwang.smartrefresh:SmartRefreshHeader:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: pl.droidsonroids.gif:android-gif-drawable:1.2.15@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.yyued:SVGAPlayer-Android:2.4.7@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.alibaba:arouter-api:1.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:databinding-adapters:3.5.3@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:databinding-runtime:3.5.3@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.android.material:material:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.3.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-process:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-service:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v4: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.3.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.transition:transition:1.0.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.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.media:media:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout: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.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.core:core:1.4.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.3.0-alpha03@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.3.0-alpha03@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder:4.9.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.davemorrissey.labs:subsampling-scale-image-view:3.10.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.1.0@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.interpolator:interpolator:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.exifinterface:exifinterface:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.savedstate:savedstate:1.1.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.2@aar" level="project" />
+    <orderEntry type="module" module-name="LibTools-libsocket" />
+  </component>
+</module>

+ 184 - 0
LibBase/KlcBase/TCAndroid-LibBase-MXDBase.iml

@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":MXDBase" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../../App/MXD1v1/mx1v1" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":MXDBase" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.5.3" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="3.5.3" />
+      </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$/src/main/res;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+        <option name="PROJECT_TYPE" value="1" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-core:3.2.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.2.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.2.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-idling-resource:3.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.alibaba:fastjson:1.2.68@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.trello.rxlifecycle2:rxlifecycle:2.2.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.greenrobot:eventbus:3.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:databinding-common:3.5.3@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.3.0-alpha03@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.collection:collection:1.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.2.0-alpha01@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.socket:socket.io-client:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.socket:engine.io-client:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.9.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.13.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.1.17@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:disklrucache:4.9.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.9.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.alibaba:arouter-annotation:1.0.4@jar" level="project" />
+    <orderEntry type="library" name="Gradle: __local_aars__:D./work/TCAndroid/Libs/IMSocket.aar:unspecified@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.jaeger.statusbarutil:library:1.5.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.lzy.net:okgo:3.0.4@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.trello.rxlifecycle2:rxlifecycle-components:2.2.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.trello.rxlifecycle2:rxlifecycle-android:2.2.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-extensions:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:okhttp3-integration:4.9.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:glide:4.9.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.makeramen:roundedimageview:2.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.SherlockGougou:BigImageViewPager:v4_4.0.2@aar" level="project" />
+    <orderEntry type="library" name="Gradle: jp.wasabeef:glide-transformations:4.0.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.tencent.bugly:crashreport:2.6.6@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.scwang.smartrefresh:SmartRefreshLayout:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.scwang.smartrefresh:SmartRefreshHeader:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: pl.droidsonroids.gif:android-gif-drawable:1.2.15@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.yyued:SVGAPlayer-Android:2.4.7@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.alibaba:arouter-api:1.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:databinding-adapters:3.5.3@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.databinding:databinding-runtime:3.5.3@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.android.material:material:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.3.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-process:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-service:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v4: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.3.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.transition:transition:1.0.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.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.media:media:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout: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.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.core:core:1.4.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.3.0-alpha03@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.3.0-alpha03@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.bumptech.glide:gifdecoder:4.9.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.davemorrissey.labs:subsampling-scale-image-view:3.10.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.1.0@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.interpolator:interpolator:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.exifinterface:exifinterface:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.savedstate:savedstate:1.1.0-alpha01@aar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.0.2@aar" level="project" />
+    <orderEntry type="module" module-name="TCAndroid-LibTools-libsocket" />
+  </component>
+</module>

+ 63 - 0
LibBase/KlcBase/build.gradle

@@ -0,0 +1,63 @@
+apply plugin: 'com.android.library'
+
+android {
+    compileSdkVersion 29
+    buildToolsVersion "29.0.3"
+
+    defaultConfig {
+        minSdkVersion 19
+        targetSdkVersion 29
+        versionCode 1
+        versionName "1.0"
+        multiDexEnabled true
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        javaCompileOptions {
+            annotationProcessorOptions {
+                arguments = [AROUTER_MODULE_NAME: project.getName()]
+            }
+        }
+
+    }
+
+    buildTypes {
+        release {
+            consumerProguardFiles 'proguard-rules.pro'
+        }
+    }
+
+    //.so文件引用
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
+
+    buildFeatures {
+        dataBinding = true
+    }
+
+}
+
+repositories {
+    flatDir {
+        dirs 'libs', '../libs'
+    }
+}
+
+dependencies {
+    implementation fileTree(include: ['*.jar'], dir: 'libs')
+    implementation 'androidx.appcompat:appcompat:1.3.1'
+    testImplementation 'junit:junit:4.12'
+    androidTestImplementation 'androidx.test:runner:1.2.0'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+
+    annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'
+    api 'com.alibaba:arouter-api:1.5.2'
+
+    api project(':KlcLiveCloud')
+    api project(':KlcUtils')
+    api project(':KlcBeauty')
+    api project(':KlcAdvance')
+
+}

+ 439 - 0
LibBase/KlcBase/proguard-rules.pro

@@ -0,0 +1,439 @@
+# 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
+
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontskipnonpubliclibraryclassmembers
+-dontpreverify
+-verbose
+-ignorewarnings
+
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+-keepattributes EnclosingMethod
+-keepattributes SourceFile,LineNumberTable
+-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.app.IntentService
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class com.android.vending.licensing.ILicensingService
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.view.View
+
+-keepattributes *Annotation*
+-keep public class * extends android.app.backup.BackupAgent
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.app.Fragment
+-keep public class * extends androidx.fragment.app.**
+-keep public class * extends android.support.v4.**
+-keep public class * extends android.support.v7.**
+-keep public class * extends android.support.annotation.**
+-keep public class * extends androidx.lifecycle.**
+
+# 保留support下的所有类及其内部类
+-keep class android.support.** {*;}
+
+#Base
+-keep class com.kalacheng.commonview.bean.*{*;}
+-keep class * extends com.kalacheng.base.base.BaseFragment { *; }
+-keep class * extends com.kalacheng.base.base.BaseMVVMFragment { *; }
+-keep class * extends com.kalacheng.base.base.BaseViewHolder { *; }
+-keep class * extends com.kalacheng.base.base.BaseMVVMViewHolder { *; }
+
+#Beans
+-keep class com.kalacheng.baseLive.**{*;}
+-keep class com.kalacheng.busappsupport.**{*;}
+-keep class com.kalacheng.busbasconfig.**{*;}
+-keep class com.kalacheng.busblindbox.**{*;}
+-keep class com.kalacheng.buschatroom.**{*;}
+-keep class com.kalacheng.buscommon.**{*;}
+-keep class com.kalacheng.busdynamiccircle.**{*;}
+-keep class com.kalacheng.busfinance.**{*;}
+-keep class com.kalacheng.busgame.**{*;}
+-keep class com.kalacheng.busgraderight.**{*;}
+-keep class com.kalacheng.buslive.**{*;}
+-keep class com.kalacheng.buslivebas.**{*;}
+-keep class com.kalacheng.busliveplugin.**{*;}
+-keep class com.kalacheng.busmsgcenter.**{*;}
+-keep class com.kalacheng.busnobility.**{*;}
+-keep class com.kalacheng.busooolive.**{*;}
+-keep class com.kalacheng.busoperation.**{*;}
+-keep class com.kalacheng.buspersonalcenter.**{*;}
+-keep class com.kalacheng.busplugin.**{*;}
+-keep class com.kalacheng.busseek.**{*;}
+-keep class com.kalacheng.busshop.**{*;}
+-keep class com.kalacheng.busshortvideo.**{*;}
+-keep class com.kalacheng.bususer.**{*;}
+-keep class com.kalacheng.busvoicelive.**{*;}
+-keep class com.kalacheng.finance.**{*;}
+-keep class com.kalacheng.game.**{*;}
+-keep class com.kalacheng.libbas.**{*;}
+-keep class com.kalacheng.libuser.**{*;}
+-keep class com.kalacheng.shop.**{*;}
+-keep class com.kalacheng.shortvideo.**{*;}
+-keep class com.kalacheng.template.**{*;}
+
+#直播购添加地址对象
+-keep class com.kalacheng.shopping.buyer.bean.AddressBean{*;}
+-keep class com.kalacheng.shopping.buyer.bean.AddressBean$CitiesBean{*;}
+-keep class com.kalacheng.shopping.buyer.bean.AddressBean$CitiesBean$CountiesBean{*;}
+
+#消息
+-keep class com.kalacheng.message.bean.*{*;}
+-keep class com.kalacheng.imjmessage.bean.*{*;}
+-keep class com.kalacheng.imjmessage.event.*{*;}
+
+#地图
+-keep class com.kalacheng.map.bean.*{*;}
+
+#glide
+-dontwarn com.bumptech.glide.**
+
+#知乎Matisse额外规则
+-dontwarn com.squareup.picasso.**
+-keep class com.zhihu.matisse.**{*;}
+
+#微信开放平台
+-keep class com.tencent.mm.opensdk.** {
+*;
+}
+-keep class com.tencent.wxop.** {
+*;
+}
+-keep class com.tencent.mm.sdk.** {
+*;
+}
+
+#ucrop
+-dontwarn com.yalantis.ucrop**
+-keep class com.yalantis.ucrop** { *; }
+-keep interface com.yalantis.ucrop** { *; }
+
+#腾讯实时音视频
+-keep class com.tencent.**{*;}
+-dontwarn com.tencent.**
+-keep class tencent.**{*;}
+-dontwarn tencent.**
+-keep class qalsdk.**{*;}
+-dontwarn qalsdk.**
+
+#支付宝支付
+-keep class com.alipay.android.app.IAlixPay{*;}
+-keep class com.alipay.android.app.IAlixPay$Stub{*;}
+-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
+-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
+-keep class com.alipay.sdk.app.PayTask{ public *;}
+-keep class com.alipay.sdk.app.AuthTask{ public *;}
+-keep class com.alipay.sdk.app.H5PayCallback {
+    <fields>;
+    <methods>;
+}
+-keep class com.alipay.android.phone.mrpc.core.** { *; }
+-keep class com.alipay.apmobilesecuritysdk.** { *; }
+-keep class com.alipay.mobile.framework.service.annotation.** { *; }
+-keep class com.alipay.mobilesecuritysdk.face.** { *; }
+-keep class com.alipay.tscenter.biz.rpc.** { *; }
+-keep class org.json.alipay.** { *; }
+-keep class com.alipay.tscenter.** { *; }
+-keep class com.ta.utdid2.** { *;}
+-keep class com.ut.device.** { *;}
+
+#Mina
+-keep class org.apache.mina.** { *; }
+-keep class org.slf4j.** { *; }
+#Socket
+-keep class com.wengying666.imsocket.** { *; }
+
+#极光
+-dontoptimize
+-dontpreverify
+-dontwarn cn.jpush.**
+-keep class cn.jpush.** { *; }
+-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
+-dontwarn cn.jiguang.**
+-keep class cn.jiguang.** { *; }
+
+#极光im  --- start----
+-keepattributes  EnclosingMethod,Signature
+
+ -dontwarn cn.jpush.**
+ -keep class cn.jpush.** { *; }
+
+ -dontwarn cn.jiguang.**
+ -keep class cn.jiguang.** { *; }
+
+ -dontwarn cn.jmessage.**
+ -keep class cn.jmessage.**{ *; }
+
+ -keepclassmembers class ** {
+     public void onEvent*(**);
+ }
+
+#极光认证
+-dontwarn cn.com.chinatelecom.**
+-keep class cn.com.chinatelecom.** { *; }
+-dontwarn com.ct.**
+-keep class com.ct.** { *; }
+-dontwarn a.a.**
+-keep class a.a.** { *; }
+-dontwarn com.cmic.**
+-keep class com.cmic.** { *; }
+-dontwarn com.unicom.**
+-keep class com.unicom.** { *; }
+-dontwarn com.sdk.**
+-keep class com.sdk.** { *; }
+
+-dontwarn com.sdk.**
+-keep class com.sdk.** { *; }
+
+ #========================gson================================
+ -dontwarn com.google.**
+ -keep class com.google.gson.** {*;}
+
+ #========================protobuf================================
+ -keep class com.google.protobuf.** {*;}
+
+#极光im  --- end----
+
+#Bugly
+-dontwarn com.tencent.bugly.**
+-keep public class com.tencent.bugly.**{*;}
+
+#JobService
+-keep public class * extends android.app.job.JobService
+
+#MTA
+-keep class com.tencent.stat.*{*;}
+-keep class com.tencent.mid.*{*;}
+
+#枚举
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+#高德地图 3D 地图 V5.0.0之后:
+-keep   class com.amap.api.maps.**{*;}
+-keep   class com.autonavi.**{*;}
+-keep   class com.amap.api.trace.**{*;}
+#定位
+-keep class com.amap.api.location.**{*;}
+-keep class com.amap.api.fence.**{*;}
+-keep class com.autonavi.aps.amapapi.model.**{*;}
+
+#美颜
+-keep class cn.tillusory.**{*;}
+-keep class com.hwangjr.**{*;}
+-keep class rx.**{*;}
+
+#mob
+-keep class cn.sharesdk.**{*;}
+-keep class com.sina.**{*;}
+-keep class **.R$* {*;}
+-keep class **.R{*;}
+-keep class com.mob.**{*;}
+-keep class m.framework.**{*;}
+-keep class com.bytedance.**{*;}
+-dontwarn cn.sharesdk.**
+-dontwarn com.sina.**
+-dontwarn com.mob.**
+-dontwarn **.R$*
+
+#Parcelable
+-keep class * implements android.os.Parcelable {
+public static final android.os.Parcelable$Creator *;
+}
+
+# 保留Serializable序列化的类不被混淆
+-keepclassmembers class * implements java.io.Serializable {
+    static final long serialVersionUID;
+    private static final java.io.ObjectStreamField[] serialPersistentFields;
+    !static !transient <fields>;
+    !private <fields>;
+    !private <methods>;
+    private void writeObject(java.io.ObjectOutputStream);
+    private void readObject(java.io.ObjectInputStream);
+    java.lang.Object writeReplace();
+    java.lang.Object readResolve();
+}
+
+-keepclassmembers class * {
+    @org.greenrobot.eventbus.Subscribe <methods>;
+}
+-keep enum org.greenrobot.eventbus.ThreadMode { *; }
+# Only required if you use AsyncExecutor
+-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
+    <init>(java.lang.Throwable);
+}
+
+#ARouter
+-keep public class com.alibaba.android.arouter.routes.**{*;}
+-keep public class com.alibaba.android.arouter.facade.**{*;}
+-keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}
+# If you use the byType method to obtain Service, add the following rules to protect the interface:
+-keep interface * implements com.alibaba.android.arouter.facade.template.IProvider
+# If single-type injection is used, that is, no interface is defined to implement IProvider, the following rules need to be added to protect the implementation
+#-keep class * implements com.alibaba.android.arouter.facade.template.IProvider
+
+#MVVM
+-keep class **.*Binding {*;}
+-keep class **.*BindingImpl {*;}
+
+#rxjava rxandroid
+-dontwarn sun.misc.**
+-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
+    long producerIndex;
+    long consumerIndex;
+}
+-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
+    rx.internal.util.atomic.LinkedQueueNode producerNode;
+}
+-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
+    rx.internal.util.atomic.LinkedQueueNode consumerNode;
+}
+-dontnote rx.internal.util.PlatformDependent
+
+# 保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+# 保留在Activity中的方法参数是view的方法,
+# 这样以来我们在layout中写的onClick就不会被影响
+-keepclassmembers class * extends android.app.Activity{
+    public void *(android.view.View);
+}
+
+# 保留我们自定义控件(继承自View)不被混淆
+-keep public class * extends android.view.View{
+    *** get*();
+    void set*(***);
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
+-keepclassmembers class * {
+    void *(**On*Event);
+    void *(**On*Listener);
+}
+
+# webView处理,项目中没有使用到webView忽略即可
+-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+    public *;
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
+    public boolean *(android.webkit.WebView, java.lang.String);
+}
+-keepclassmembers class * extends android.webkit.webViewClient {
+    public void *(android.webkit.webView, jav.lang.String);
+}
+
+#----------retrofit--------------
+#-keepclassmembernames,allowobfuscation interface * {
+#    @retrofit2.http.* <methods>;
+#}
+#-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
+#
+-keep class retrofit2.** { *; }
+-dontwarn retrofit2.**
+-keepattributes Signature
+-keepattributes Exceptions
+-dontwarn okio.**
+-dontwarn javax.annotation.**
+
+-dontoptimize
+-dontpreverify
+-keepattributes  EnclosingMethod,Signature
+-dontwarn cn.jpush.**
+-keep class cn.jpush.** { *; }
+
+-dontwarn cn.jiguang.**
+-keep class cn.jiguang.** { *; }
+
+-dontwarn cn.jmessage.**
+-keep class cn.jmessage.**{ *; }
+
+-keepclassmembers class ** {
+    public void onEvent*(**);
+}
+
+#========================gson================================
+-dontwarn com.google.**
+-keep class com.google.gson.** {*;}
+
+#========================protobuf================================
+-keep class com.google.protobuf.** {*;}
+
+#========================声望================================
+-keep class io.agora.**{*;}
+
+-keep public class com.xuantongyun.storagecloud.**{*;}
+
+#叭叭云
+-keep class com.qiniu.**{*;}
+-keep class com.qiniu.**{public <init>();}
+
+#叭叭美颜2
+-keep class com.faceunity.wrapper.faceunity {*;}
+
+#移动安全联盟
+-keep class com.bun.miitmdid.core.** {*;}
+-keep class XI.CA.XI.**{*;}
+-keep class XI.K0.XI.**{*;}
+-keep class XI.XI.K0.**{*;}
+-keep class XI.xo.XI.XI.**{*;}
+-keep class com.asus.msa.SupplementaryDID.**{*;}
+-keep class com.asus.msa.sdid.**{*;}
+-keep class com.bun.lib.**{*;}
+-keep class com.bun.miitmdid.**{*;}
+-keep class com.huawei.hms.ads.identifier.**{*;}
+-keep class com.samsung.android.deviceidservice.**{*;}
+-keep class com.zui.opendeviceidlibrary.**{*;}
+-keep class org.json.**{*;}
+-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}
+
+#腾讯IM
+-keep class com.tencent.imsdk.** { *; }
+-keep class com.kalacheng.tim.event.*{*;}
+-keep class com.kalacheng.tim.bean.*{*;}
+
+#阿里云存储
+-keep class com.alibaba.sdk.android.oss.** { *; }
+-dontwarn okio.**
+-dontwarn org.apache.commons.codec.binary.**
+
+
+######################短视频混淆配置#########################
+-keep class com.aliyun.**{*;}
+-keep class com.duanqu.**{*;}
+-keep class com.qu.**{*;}
+-keep class com.alibaba.**{*;}
+-keep class component.alivc.**{*;}
+-keep class com.alivc.**{*;}
+-keep class org.webrtc.**{*;}
+-keep class org.ugsv.**{*;}

+ 2 - 0
LibBase/KlcBase/src/main/AndroidManifest.xml

@@ -0,0 +1,2 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.base" />

+ 33 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/ActivityManage.java

@@ -0,0 +1,33 @@
+package com.kalacheng.base.activty;
+
+/**
+ * Activity管理接口
+ * Created by ysj on 2016/11/18.
+ */
+
+public interface ActivityManage {
+    /**
+     * 获取当前Activity索引
+     */
+    public int getIndex();
+
+    /**
+     * 设置当前Activity索引
+     */
+    public void setIndex(int index);
+
+    /**
+     * 获取当前Activity是否正在运行
+     */
+    public boolean isRun();
+
+    /**
+     * 手动恢复Activity运行状态
+     */
+    public void restore();
+
+    /**
+     * 关闭Activity
+     */
+    public void close();
+}

+ 358 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/BaseActivity.java

@@ -0,0 +1,358 @@
+package com.kalacheng.base.activty;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.graphics.Color;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.webkit.WebView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.IdRes;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.example.base.R;
+import com.kalacheng.base.camera.CameraConfig;
+import com.kalacheng.base.livecloud.LiveConfig;
+import com.kalacheng.base.upload.UploadConfig;
+import com.kalacheng.livecloud.config.KlcLiveConfigUtils;
+import com.kalacheng.util.utils.ConfigUtil;
+import com.kalacheng.util.utils.DpUtil;
+import com.kalacheng.util.utils.LanguageUtils;
+import com.kalacheng.util.utils.LogUtil;
+import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
+import com.xuantongyun.camera.CameraUtil;
+import com.xuantongyun.storagecloud.upload.UploadUtil;
+
+
+/**
+ * Created by ysj on 2016/11/18.
+ */
+
+public abstract class BaseActivity extends RxAppCompatActivity implements ActivityManage {
+    //Activity是否运行中
+    private boolean run = false;
+    //当前Activity索引标志
+    private int index = -1;
+    protected Context mContext;
+    protected Fragment currentFragment;
+    //全面屏,显示在摄像头之下,主要用于横屏模式
+    private boolean mFullScreen;
+    //状态栏字体为白色
+    private boolean mStatusBarWhite;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        new WebView(this).destroy();
+        LanguageUtils.setApplicationLanguage(this, getSharedPreferences( "com.mugo.live", Context.MODE_PRIVATE).getString("lang","zh"));
+        LogUtil.e("Activity -> " + this.getLocalClassName());
+        LogUtil.e("Activity -> " + getClass().getName());
+        LogUtil.e("Activity -> " + getClass().getSimpleName());
+        setRequestedOrientation(getOrientation());
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            getWindow().setNavigationBarColor(setNavigationBarColor());
+        }
+        setActivityBackgroundResource();
+        mFullScreen = isFullScreen();
+        setFullScreen();
+        mStatusBarWhite = isStatusBarWhite();
+        setStatusBar();
+        if (ConfigUtil.getBoolValue(R.bool.forbidScreenCap)) {
+            // 禁止录屏
+            getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
+        }
+
+        run = true;
+        mContext = this;
+        index = BaseApplication.getListActivitys().size();
+        BaseApplication.getListActivitys().add(this);
+        ARouter.getInstance().inject(this);
+
+        if (setBaseActivityView()) {
+            int viewId = initContentView(savedInstanceState);
+            if (viewId != 0) {
+                setContentView(viewId);
+                View viewStatusBar = findViewById(R.id.viewStatusBar);
+                if (viewStatusBar != null) {
+                    if (viewStatusBar.getLayoutParams() instanceof LinearLayout.LayoutParams) {
+                        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewStatusBar.getLayoutParams();
+                        layoutParams.height = DpUtil.getStatusHeight();
+                        viewStatusBar.setLayoutParams(layoutParams);
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        run = true;
+
+        //防止单例对象被回收,造成null
+        if (UploadUtil.getInstance().getConfig() == null) {
+            UploadUtil.getInstance().initConfig(new UploadConfig());
+        }
+        if (CameraUtil.getInstance().getConfig() == null) {
+            CameraUtil.getInstance().initConfig(new CameraConfig());
+        }
+        if (KlcLiveConfigUtils.getInstance().getConfig() == null) {
+            KlcLiveConfigUtils.getInstance().initConfig(new LiveConfig());
+        }
+        // 重新更新Activity
+        BaseApplication.getListActivitys().set(index, this);
+    }
+
+    @Override
+    protected void onDestroy() {
+        BaseApplication.getListActivitys().remove(index);
+        for (int i = index; i < BaseApplication.getListActivitys().size(); ++i) {
+            int selIndex = BaseApplication.getListActivitys().get(i).getIndex();
+            BaseApplication.getListActivitys().get(i).setIndex(--selIndex);
+        }
+        super.onDestroy();
+    }
+
+    @Override
+    public void finish() {
+        run = false;
+        super.finish();
+    }
+
+    @Override
+    public boolean isRun() {
+        return run;
+    }
+
+    @Override
+    public int getIndex() {
+        return index;
+    }
+
+    @Override
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    @Override
+    public void restore() {
+        run = true;
+        BaseApplication.getListActivitys().set(index, this);
+    }
+
+    @Override
+    public void close() {
+        finish();
+    }
+
+    @Override
+    public void startActivity(Intent intent) {
+        if (run) {
+            super.startActivity(intent);
+            run = false;
+        }
+    }
+
+    @Override
+    public void startActivityForResult(Intent intent, int requestCode) {
+        if (run) {
+            run = false;
+            super.startActivityForResult(intent, requestCode);
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        run = true;
+        super.onActivityResult(requestCode, resultCode, data);
+    }
+
+    /**
+     * 设置navigation bar颜色(底部虚拟键背景色)
+     */
+    protected int setNavigationBarColor() {
+        return Color.WHITE;
+    }
+
+    /**
+     * 设置Activity背景色
+     */
+    protected void setActivityBackgroundResource() {
+        //Activity的布局最终会添加在DecorView中,这个View会中的背景是不是就没有必要了
+//        getWindow().setBackgroundDrawable(null);
+        getWindow().setBackgroundDrawableResource(android.R.color.white);
+    }
+
+    /**
+     * 设置全面屏
+     */
+    private void setFullScreen() {
+        if (mFullScreen) {
+            requestWindowFeature(Window.FEATURE_NO_TITLE);
+            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                // 延伸显示区域到刘海
+                WindowManager.LayoutParams lp = getWindow().getAttributes();
+                lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
+                getWindow().setAttributes(lp);
+                // 设置页面全屏显示
+                final View decorView = getWindow().getDecorView();
+                decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+            }
+
+            setDecorVisible();
+        }
+    }
+
+    /**
+     * 隐藏状态栏
+     */
+    protected void hideStatusBar() {
+        View decorView = getWindow().getDecorView();
+        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+        decorView.setSystemUiVisibility(uiOptions);
+    }
+
+    /**
+     * 恢复为不全屏状态
+     */
+    protected void setDecorVisible() {
+        View decorView = getWindow().getDecorView();
+        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
+        decorView.setSystemUiVisibility(uiOptions);
+    }
+
+    /**
+     * 设置透明状态栏
+     */
+    private void setStatusBar() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            Window window = getWindow();
+            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+            if (mStatusBarWhite) {
+                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+            } else {
+                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+            }
+            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+            window.setStatusBarColor(0);
+        }
+    }
+
+    /**
+     * 屏幕方向,竖屏
+     */
+    protected int getOrientation() {
+        return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+//        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE//横屏
+    }
+
+    /**
+     * 是否全面屏
+     */
+    protected boolean isFullScreen() {
+        return false;
+    }
+
+    /**
+     * 状态栏字体为白色
+     */
+    protected boolean isStatusBarWhite() {
+        return true;
+    }
+
+    /**
+     * 修改状态栏字体颜色
+     */
+    public void setStatusBarWhite(boolean white) {
+        mStatusBarWhite = white;
+        setStatusBar();
+    }
+
+    /**
+     * 添加fragment
+     */
+    protected void addFragment(Fragment fragment, @IdRes int frameId) {
+        if (null != fragment) {
+            currentFragment = fragment;
+            getSupportFragmentManager().beginTransaction().add(frameId, fragment, fragment.getClass().getSimpleName()).commitAllowingStateLoss();
+        }
+    }
+
+    /**
+     * 显示fragment
+     */
+    protected void showFragment(Fragment fragment, @IdRes int frameId) {
+        if (currentFragment != fragment) {//  判断传入的fragment是不是当前的currentFragment
+            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+            if (null != currentFragment) {
+                transaction.hide(currentFragment);//  不是则隐藏
+                currentFragment.onPause();
+            }
+            currentFragment = fragment;  //  然后将传入的fragment赋值给currentFragment
+            if (!fragment.isAdded()) { //  判断传入的fragment是否已经被add()过
+                transaction.add(frameId, fragment, fragment.getClass().getSimpleName()).show(fragment).commitAllowingStateLoss();
+            } else {
+                transaction.show(fragment).commitAllowingStateLoss();
+                fragment.onResume();
+            }
+        }
+    }
+
+    /**
+     * 隐藏fragment
+     */
+    protected void hideFragment(Fragment fragment) {
+        if (null != fragment) {
+            getSupportFragmentManager().beginTransaction().hide(fragment).commitAllowingStateLoss();
+        }
+    }
+
+    /**
+     * 弹出栈顶部的Fragment
+     */
+    protected void popFragment() {
+        if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
+            getSupportFragmentManager().popBackStack();
+        } else {
+            finish();
+        }
+    }
+
+    public void backClick(View v) {
+        finish();
+    }
+
+    protected void setTitle(String title) {
+        TextView titleView = findViewById(R.id.titleView);
+        if (titleView != null) {
+            titleView.setText(title);
+        }
+    }
+
+    /**
+     * 设置BaseActivity的布局
+     */
+    protected boolean setBaseActivityView() {
+        return true;
+    }
+
+    /**
+     * 初始化根布局
+     *
+     * @return 布局layout的id
+     */
+    public abstract int initContentView(Bundle savedInstanceState);
+
+}

+ 214 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/BaseApplication.java

@@ -0,0 +1,214 @@
+package com.kalacheng.base.activty;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.content.Context;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.example.base.BuildConfig;
+import com.example.base.R;
+import com.kalacheng.beauty.framework.KlcBeautyPreprocessor;
+import com.kalacheng.util.utils.ApplicationUtil;
+import com.kalacheng.util.utils.LogUtil;
+import com.scwang.smartrefresh.layout.SmartRefreshLayout;
+import com.scwang.smartrefresh.layout.api.DefaultRefreshFooterCreator;
+import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreator;
+import com.scwang.smartrefresh.layout.api.RefreshFooter;
+import com.scwang.smartrefresh.layout.api.RefreshHeader;
+import com.scwang.smartrefresh.layout.api.RefreshLayout;
+import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
+import com.scwang.smartrefresh.layout.header.ClassicsHeader;
+
+import java.util.ArrayList;
+
+import io.agora.capture.video.camera.CameraVideoManager;
+import io.agora.capture.video.camera.VideoCapture;
+
+
+/**
+ * Created by ysj on 2016/11/18.
+ */
+
+public class BaseApplication extends ApplicationUtil {
+    private CameraVideoManager mVideoManager;
+
+    /**
+     * Activity跟踪结构
+     */
+    private static ArrayList<ActivityManage> listActivitys = new ArrayList<ActivityManage>();
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        if (isMainProcess()) {
+            sDeBug = BuildConfig.DEBUG;
+            if (BuildConfig.DEBUG) {           // These two lines must be written before init, otherwise these configurations will be invalid in the init process
+                ARouter.openLog();     // Print log
+                ARouter.openDebug();   // Turn on debugging mode (If you are running in InstantRun mode, you must turn on debug mode! Online version needs to be closed, otherwise there is a security risk)
+            }
+            ARouter.init(this);
+
+//            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+//                String processName = getProcessName();
+//                String packageName = this.getPackageName();
+//                if (!packageName.equals(processName)) {
+//                    WebView.setDataDirectorySuffix(processName);
+//                }
+//            }
+
+        }
+    }
+
+    /**
+     * 获取最顶层Activity
+     */
+    public static AppCompatActivity getTopActivity() {
+        if (listActivitys != null && listActivitys.size() > 0) {
+            return (AppCompatActivity) listActivitys.get(listActivitys.size() - 1);
+        }
+        return null;
+    }
+
+    /**
+     * 获取Activity跟踪结构
+     */
+    public static ArrayList<ActivityManage> getListActivitys() {
+        return listActivitys;
+    }
+
+    /**
+     * 获取Activity数量
+     */
+    public static int getListActivitySize() {
+        if (listActivitys != null) {
+            return listActivitys.size();
+        }
+        return 0;
+    }
+
+    /**
+     * 退出程序
+     */
+    public static void exit() {
+        for (ActivityManage activity : listActivitys) {
+            activity.close();
+        }
+//        System.exit(0);
+    }
+
+    /**
+     * 关闭某个Activity外的其他所有界面
+     */
+    public static void closeOthers(ActivityManage activity) {
+        for (ActivityManage otherActivity : listActivitys) {
+            if (otherActivity != activity) {
+                otherActivity.close();
+            }
+        }
+    }
+
+    /**
+     * 某个Activity是否正在运行
+     */
+    public static boolean containsActivity(ActivityManage activity) {
+        for (ActivityManage otherActivity : listActivitys) {
+            if (otherActivity == activity) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 某个Activity是否正在运行
+     */
+    public static boolean containsActivity(String activityName) {
+        for (ActivityManage otherActivity : listActivitys) {
+            Activity activity = (Activity) otherActivity;
+            if (activity.getClass().getSimpleName().equals(activityName)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 根据名称判断某个Activity 是否在运行并关闭
+     */
+    public static void closeActivity(String activityName) {
+        for (ActivityManage otherActivity : listActivitys) {
+            Activity activity = (Activity) otherActivity;
+            if (activity.getClass().getSimpleName().equals(activityName)) {
+                activity.finish();
+                LogUtil.e(activityName + "  在运行。。。。。。。。");
+            }
+        }
+    }
+
+    static {
+        //设置全局的Header构建器
+        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
+            @Override
+            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
+                layout.setPrimaryColorsId(R.color.smart_refresh_bg, R.color.smart_refresh_text);//全局设置主题颜色,下拉刷新背景色、字体颜色
+                return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
+            }
+        });
+        //设置全局的Footer构建器
+        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
+            @Override
+            public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
+                //指定为经典Footer,默认是 BallPulseFooter
+                return new ClassicsFooter(context).setDrawableSize(20);
+            }
+        });
+    }
+
+    public CameraVideoManager getCameraVideoManager() {
+        return mVideoManager;
+    }
+
+
+    public void initVideoCaptureAsync() {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                Context application = getApplicationContext();
+                mVideoManager = new CameraVideoManager(application, new KlcBeautyPreprocessor(application));
+                mVideoManager.setCameraStateListener(new VideoCapture.VideoCaptureStateListener() {
+                    @Override
+                    public void onFirstCapturedFrame(int width, int height) {
+
+                    }
+
+                    @Override
+                    public void onCameraCaptureError(int error, String msg) {
+                        if (mVideoManager != null) {
+                            // When there is a camera error, the capture should
+                            // be stopped to reset the internal states.
+                            mVideoManager.stopCapture();
+                        }
+                    }
+                });
+            }
+        }).start();
+    }
+
+    /**
+     * 当应用存在多个进程时,确保只在主进程进行初始化 OpenInstall
+     */
+    public boolean isMainProcess() {
+        int pid = android.os.Process.myPid();
+        ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+        if (activityManager != null) {
+            for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
+                if (appProcess.pid == pid) {
+                    return getApplicationInfo().packageName.equals(appProcess.processName);
+                }
+            }
+        }
+        return false;
+    }
+}

+ 111 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/BaseMVVMActivity.java

@@ -0,0 +1,111 @@
+package com.kalacheng.base.activty;
+
+
+import android.os.Bundle;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.databinding.DataBindingUtil;
+import androidx.databinding.ViewDataBinding;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.example.base.BR;
+import com.example.base.R;
+import com.kalacheng.util.utils.DpUtil;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+
+/**
+ * 一个拥有DataBinding框架的基Activity
+ * 这里根据项目业务可以换成你自己熟悉的BaseActivity, 但是需要继承RxAppCompatActivity,方便LifecycleProvider管理生命周期
+ */
+public abstract class BaseMVVMActivity<V extends ViewDataBinding, VM extends AndroidViewModel> extends BaseActivity {
+    protected V binding;
+    protected VM viewModel;
+    private int viewModelId;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        //私有的初始化Databinding和ViewModel方法
+        initViewDataBinding(savedInstanceState);
+        View viewStatusBar = findViewById(R.id.viewStatusBar);
+        if (viewStatusBar != null) {
+            if (viewStatusBar.getLayoutParams() instanceof LinearLayout.LayoutParams) {
+                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewStatusBar.getLayoutParams();
+                layoutParams.height = DpUtil.getStatusHeight();
+                viewStatusBar.setLayoutParams(layoutParams);
+            }
+        }
+        //页面数据初始化方法
+        initData();
+        //页面事件监听的方法,一般用于ViewModel层转到View层的事件注册
+        initViewObservable();
+    }
+
+    /**
+     * @Override protected void onDestroy() {
+     * super.onDestroy();
+     * if (binding != null) {
+     * binding.unbind();
+     * }
+     * }
+     * <p>
+     * /**
+     * 注入绑定
+     */
+    private void initViewDataBinding(Bundle savedInstanceState) {
+        //DataBindingUtil类需要在project的build中配置 dataBinding {enabled true }, 同步后会自动关联android.databinding包
+        binding = DataBindingUtil.setContentView(this, initContentView(savedInstanceState));
+        viewModelId = BR.viewModel;
+        if (viewModel == null) {
+            Class modelClass = null;
+            Type type = getClass().getGenericSuperclass();
+            if (type instanceof ParameterizedType) {
+                modelClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
+            }
+            viewModel = (VM) createViewModel(this, modelClass);
+        }
+        //关联ViewModel
+        binding.setVariable(viewModelId, viewModel);
+    }
+
+    //刷新布局
+    public void refreshLayout() {
+        if (viewModel != null) {
+            binding.setVariable(viewModelId, viewModel);
+        }
+    }
+
+    /**
+     * 设置BaseActivity的布局(否)
+     */
+    @Override
+    protected boolean setBaseActivityView() {
+        return false;
+    }
+
+    /**
+     * 初始化ViewModel
+     *
+     * @return 继承BaseViewModel的ViewModel
+     */
+    public abstract void initData();
+
+    public void initViewObservable() {
+
+    }
+
+    /**
+     * 创建ViewModel
+     */
+    public <T extends ViewModel> T createViewModel(FragmentActivity activity, Class<T> cls) {
+        return ViewModelProviders.of(activity).get(cls);
+    }
+
+}

+ 163 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/activty/GenerateValueFiles.java

@@ -0,0 +1,163 @@
+package com.kalacheng.base.activty;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+
+public class GenerateValueFiles {
+    private int baseW;
+    private int baseH;
+
+    private String dirStr = "./res";
+
+    private final static String WTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n";
+    private final static String HTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n";
+
+    /**
+     * {0}-HEIGHT
+     */
+    private final static String VALUE_TEMPLATE = "values-{0}x{1}";
+
+    private static final String SUPPORT_DIMESION = "360,640;480,800;480,854;540,960;600,1024;720,1184;720,1196;720,1280;768,1024;768,1280;800,1280;1080,1812;1080,1920;1440,2560;";
+
+    private String supportStr = SUPPORT_DIMESION;
+
+    public GenerateValueFiles(int baseX, int baseY, String supportStr) {
+        this.baseW = baseX;
+        this.baseH = baseY;
+
+        if (!this.supportStr.contains(baseX + "," + baseY)) {
+            this.supportStr += baseX + "," + baseY + ";";
+        }
+
+        this.supportStr += validateInput(supportStr);
+
+        System.out.println(supportStr);
+
+        File dir = new File(dirStr);
+        if (!dir.exists()) {
+            dir.mkdir();
+
+        }
+        System.out.println(dir.getAbsoluteFile());
+
+    }
+
+    /**
+     * @param supportStr
+     *            w,h_...w,h;
+     * @return
+     */
+    private String validateInput(String supportStr) {
+        StringBuffer sb = new StringBuffer();
+        String[] vals = supportStr.split("_");
+        int w = -1;
+        int h = -1;
+        String[] wh;
+        for (String val : vals) {
+            try {
+                if (val == null || val.trim().length() == 0)
+                    continue;
+
+                wh = val.split(",");
+                w = Integer.parseInt(wh[0]);
+                h = Integer.parseInt(wh[1]);
+            } catch (Exception e) {
+                System.out.println("skip invalidate params : w,h = " + val);
+                continue;
+            }
+            sb.append(w + "," + h + ";");
+        }
+
+        return sb.toString();
+    }
+
+    public void generate() {
+        String[] vals = supportStr.split(";");
+        for (String val : vals) {
+            String[] wh = val.split(",");
+            generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]));
+        }
+
+    }
+
+    private void generateXmlFile(int w, int h) {
+
+        StringBuffer sbForWidth = new StringBuffer();
+        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+        sbForWidth.append("<resources>");
+        float cellw = w * 1.0f / baseW;
+
+        System.out.println("width : " + w + "," + baseW + "," + cellw);
+        for (int i = 1; i < baseW; i++) {
+            sbForWidth.append(WTemplate.replace("{0}", i + "").replace("{1}",
+                    change(cellw * i) + ""));
+        }
+        sbForWidth.append(WTemplate.replace("{0}", baseW + "").replace("{1}",
+                w + ""));
+        sbForWidth.append("</resources>");
+
+        StringBuffer sbForHeight = new StringBuffer();
+        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+        sbForHeight.append("<resources>");
+        float cellh = h *1.0f/ baseH;
+        System.out.println("height : "+ h + "," + baseH + "," + cellh);
+        for (int i = 1; i < baseH; i++) {
+            sbForHeight.append(HTemplate.replace("{0}", i + "").replace("{1}",
+                    change(cellh * i) + ""));
+        }
+        sbForHeight.append(HTemplate.replace("{0}", baseH + "").replace("{1}",
+                h + ""));
+        sbForHeight.append("</resources>");
+
+        File fileDir = new File(dirStr + File.separator
+                + VALUE_TEMPLATE.replace("{0}", h + "")//
+                .replace("{1}", w + ""));
+        fileDir.mkdir();
+
+        File layxFile = new File(fileDir.getAbsolutePath(), "lay_x.xml");
+        File layyFile = new File(fileDir.getAbsolutePath(), "lay_y.xml");
+        try {
+            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
+            pw.print(sbForWidth.toString());
+            pw.close();
+            pw = new PrintWriter(new FileOutputStream(layyFile));
+            pw.print(sbForHeight.toString());
+            pw.close();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static float change(float a) {
+        int temp = (int) (a * 100);
+        return temp / 100f;
+    }
+
+    public static void main(String[] args) {
+        int baseW = 360;
+        int baseH = 640;
+        String addition = "";
+        try {
+            if (args.length >= 3) {
+                baseW = Integer.parseInt(args[0]);
+                baseH = Integer.parseInt(args[1]);
+                addition = args[2];
+            } else if (args.length >= 2) {
+                baseW = Integer.parseInt(args[0]);
+                baseH = Integer.parseInt(args[1]);
+            } else if (args.length >= 1) {
+                addition = args[0];
+            }
+        } catch (NumberFormatException e) {
+
+            System.err
+                    .println("right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;");
+            e.printStackTrace();
+            System.exit(-1);
+        }
+
+        new GenerateValueFiles(baseW, baseH, addition).generate();
+    }
+}

+ 132 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BaseAdapter.java

@@ -0,0 +1,132 @@
+package com.kalacheng.base.adapter;
+
+import android.content.Context;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.kalacheng.base.listener.OnItemClickListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class BaseAdapter<T> extends RecyclerView.Adapter {
+    protected Context mContext;
+    protected List<T> mList = new ArrayList<>();
+    protected RecyclerView mRecyclerView;
+    protected OnItemClickListener<T> mOnItemClickListener;
+
+    public BaseAdapter(Context context) {
+        mContext = context;
+        setHasStableIds(true);
+    }
+
+    public void setOnItemClickListener(OnItemClickListener<T> onItemClickListener) {
+        mOnItemClickListener = onItemClickListener;
+    }
+
+    @Override
+    public int getItemCount() {
+        if (mList != null) {
+            return mList.size();
+        }
+        return 0;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
+        mRecyclerView = recyclerView;
+    }
+
+    public RecyclerView getRecyclerView() {
+        return mRecyclerView;
+    }
+
+    public void setList(List<T> list) {
+        mList.clear();
+        if (list != null && list.size() > 0) {
+            mList.addAll(list);
+        }
+        notifyDataSetChanged();
+    }
+
+    /**
+     * 插入
+     */
+    public void insertList(T item) {
+        if (item != null) {
+            int p = mList.size();
+            mList.add(item);
+            notifyItemRangeInserted(p, 1);
+        }
+    }
+
+    /**
+     * 插入
+     */
+    public void insertList(List<T> list) {
+        if (list != null && list.size() > 0) {
+            int p = mList.size();
+            mList.addAll(list);
+            notifyItemRangeInserted(p, list.size());
+        }
+    }
+
+    /**
+     * 插入
+     */
+    public void insertList(int position, T item) {
+        if (item != null) {
+            mList.add(position, item);
+            notifyDataSetChanged();
+        }
+    }
+
+    /**
+     * 插入
+     */
+    public void insertList(int position, List<T> list) {
+        if (list != null && list.size() > 0) {
+            mList.addAll(position, list);
+            notifyDataSetChanged();
+        }
+    }
+
+    public void clearList() {
+        mList.clear();
+        notifyDataSetChanged();
+    }
+
+    public List<T> getList() {
+        return mList;
+    }
+
+    public T getItem(int position) {
+        if (mList.size() > position) {
+            return mList.get(position);
+        }
+        return null;
+    }
+
+    /**
+     * 替换
+     */
+    public void replaceItem(int position, T data) {
+        if (mList.size() > position) {
+            mList.set(position, data);
+            notifyDataSetChanged();
+        }
+    }
+
+    public void removeItem(int position) {
+        if (mList.size() > position) {
+            mList.remove(position);
+            notifyDataSetChanged();
+        }
+    }
+
+}

+ 57 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BaseFragmentAdapter.java

@@ -0,0 +1,57 @@
+package com.kalacheng.base.adapter;
+
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * androidx.viewpager.widget.ViewPager
+ */
+public class BaseFragmentAdapter extends FragmentStatePagerAdapter {
+    private List<Fragment> mFragmentList = new ArrayList<>();
+
+    public BaseFragmentAdapter(FragmentManager fm) {
+        super(fm);
+    }
+
+    public BaseFragmentAdapter(FragmentManager fm, List<Fragment> fragments) {
+        super(fm);
+        if (null != fragments) {
+            this.mFragmentList.addAll(fragments);
+        }
+    }
+
+    public void setData(List<Fragment> fragments) {
+        if (null != fragments) {
+            mFragmentList.clear();
+            mFragmentList.addAll(fragments);
+            notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    public Fragment getItem(int position) {
+        return mFragmentList.get(position);
+    }
+
+    @Override
+    public int getCount() {
+        return mFragmentList != null ? mFragmentList.size() : 0;
+    }
+
+    @Override
+    public int getItemPosition(Object object) {
+        return super.getItemPosition(object);
+    }
+
+    @Nullable
+    @Override
+    public CharSequence getPageTitle(int position) {
+        return super.getPageTitle(position);
+    }
+}

+ 57 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BaseFragmentAdapter2.java

@@ -0,0 +1,57 @@
+package com.kalacheng.base.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * androidx.viewpager2.widget.ViewPager2
+ */
+public class BaseFragmentAdapter2 extends FragmentStateAdapter {
+
+    private List<Fragment> mFragmentList = new ArrayList<>();
+
+    public BaseFragmentAdapter2(@NonNull FragmentActivity fragmentActivity) {
+        super(fragmentActivity);
+    }
+
+    public BaseFragmentAdapter2(@NonNull FragmentActivity fragmentActivity, List<Fragment> fragments) {
+        super(fragmentActivity);
+        if (null != fragments) {
+            mFragmentList.addAll(fragments);
+        }
+    }
+
+    public void setData(List<Fragment> fragments) {
+        if (null != fragments) {
+            this.mFragmentList.addAll(fragments);
+            notifyDataSetChanged();
+        }
+    }
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        return mFragmentList.get(position);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mFragmentList.size();
+    }
+
+    public Fragment getItem(int position) {
+        if (mFragmentList.size() > position) {
+            return mFragmentList.get(position);
+        }
+        return null;
+    }
+
+    public List<Fragment> getList() {
+        return mFragmentList;
+    }
+}

+ 106 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/BasePagerAdapter.java

@@ -0,0 +1,106 @@
+package com.kalacheng.base.adapter;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.PagerAdapter;
+
+import java.util.List;
+
+/**
+ * ViewPager所需Adapter(可实现循环)
+ *
+ * @version <android.support.v4.view.ViewPager android:id="@+id/img_advert"
+ * android:layout_width="match_parent"
+ * android:layout_height="match_parent" />
+ * <p>
+ * private ViewPager viewPager;
+ * private BasePagerAdapter adapter;
+ * private List<View> viewList = new ArrayList<View>();
+ * <p>
+ * adapter = new BasePagerAdapter(viewList);
+ * adapter.isCycleFlow(true);
+ * viewPager.setAdapter(adapter);
+ * viewPager.setCurrentItem(viewPager.getAdapter().getCount() / 2 - viewPager.getAdapter().getCount() / 2 % viewList.size());
+ * viewPager.setOnPageChangeListener(new GuidePageChangeListener());
+ * class GuidePageChangeListener implements OnPageChangeListener {
+ * @Override public void onPageScrollStateChanged(int arg0) {
+ * }
+ * @Override public void onPageScrolled(int arg0, float arg1, int arg2) {
+ * }
+ * @Override public void onPageSelected(int arg0) {
+ * Toast.makeText(MainActivity.this, adapter.getRealPosition(arg0) + "", Toast.LENGTH_SHORT).show();
+ * }
+ * }
+ * <p>
+ * Created by ysj on 2016/11/18.
+ */
+
+public class BasePagerAdapter extends PagerAdapter {
+    private final List<View> viewCache;
+    private boolean isCycleFlow = false;
+
+    public BasePagerAdapter(List<View> views) {
+        this.viewCache = views;
+    }
+
+    /**
+     * 是否循环滚动,默认false
+     *
+     * @param isCycleFlow
+     */
+    public void isCycleFlow(boolean isCycleFlow) {
+        this.isCycleFlow = isCycleFlow;
+    }
+
+    public int getRealCount() {
+        return viewCache.size();
+    }
+
+    public int getRealPosition(int position) {
+        return position % getRealCount();
+    }
+
+    @Override
+    public int getCount() {
+        int count = viewCache.size();
+        if (isCycleFlow) {
+            if (count > 1) {
+                // 做循环时count值不能过大,否则在调用setcurrentItem方法时会假死
+                count = Short.MAX_VALUE;
+            }
+        }
+        return count;
+    }
+
+    @Override
+    public Object instantiateItem(ViewGroup container, int position) {
+        View view = viewCache.get(getRealPosition(position));
+        if (isCycleFlow) {
+            ViewGroup p = (ViewGroup) view.getParent();
+            if (p != null) {
+                p.removeView(view);
+            }
+        }
+        container.addView(view);
+        return view;
+    }
+
+    @Override
+    public void destroyItem(ViewGroup container, int position, Object object) {
+        if (!isCycleFlow) {
+            container.removeView((View) object);
+        }
+    }
+
+    @Override
+    public boolean isViewFromObject(View view, Object obj) {
+        return view == obj;
+    }
+
+    @Override
+    public int getItemPosition(@NonNull Object object) {
+        return POSITION_NONE;
+    }
+}

+ 155 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleImgAdapter.java

@@ -0,0 +1,155 @@
+package com.kalacheng.base.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.base.R;
+import com.example.base.databinding.SimpleImageBinding;
+import com.kalacheng.base.bean.SimpleImgBean;
+import com.kalacheng.util.listener.OnBeanCallback;
+import com.kalacheng.util.utils.DpUtil;
+import com.kalacheng.util.glide.ImageLoader;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by hgy on 2019/10/10.
+ * 圆型img
+ */
+
+public class SimpleImgAdapter extends RecyclerView.Adapter<SimpleImgAdapter.ViewHolder> {
+
+    private List<SimpleImgBean> mList = new ArrayList<>();
+    private int widthDp;
+    private int heightDp;
+    private boolean mOval;//是否切圆
+    private ImageView.ScaleType mScaleType;//剪裁类型
+    private int mPaddingLeft;
+    private int mPaddingTop;
+    private int mPaddingRight;
+    private int mPaddingBottom;
+    private OnBeanCallback<SimpleImgBean> itemClickCallback;
+    private boolean forbidClick;//是否禁止点击
+
+    public SimpleImgAdapter() {
+
+    }
+
+    public void setData(List<SimpleImgBean> list) {
+        mList.clear();
+        mList.addAll(list);
+        notifyDataSetChanged();
+    }
+
+    public void addData(List<SimpleImgBean> list) {
+        mList.addAll(list);
+        notifyDataSetChanged();
+    }
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        SimpleImageBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.simple_image, parent, false);
+        return new ViewHolder(binding);
+    }
+
+    @Override
+    public void onBindViewHolder(ViewHolder holder, final int position) {
+        holder.binding.layoutIcon.setPadding(mPaddingLeft, mPaddingTop, mPaddingRight, mPaddingBottom);
+        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) holder.binding.icon.getLayoutParams();
+        if (widthDp != 0)
+            layoutParams.width = DpUtil.dp2px(widthDp);
+        if (heightDp != 0)
+            layoutParams.height = DpUtil.dp2px(heightDp);
+        holder.binding.setBean(mList.get(position));
+        holder.binding.executePendingBindings();
+
+        holder.binding.icon.setOval(mOval);
+        if (mScaleType != null) {
+            holder.binding.icon.setScaleType(mScaleType);
+        }
+        if (mList.get(position).src != 0) {
+            ImageLoader.display(mList.get(position).src, holder.binding.icon);
+        } else {
+            ImageLoader.display(mList.get(position).url, holder.binding.icon);
+        }
+        if (!forbidClick) {
+            holder.binding.layoutIcon.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    if (itemClickCallback != null) {
+                        itemClickCallback.onClick(mList.get(position));
+                    }
+                }
+            });
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        return mList == null ? 0 : mList.size();
+    }
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        SimpleImageBinding binding;
+
+        public ViewHolder(SimpleImageBinding binding) {
+            super(binding.getRoot());
+            this.binding = binding;
+        }
+    }
+
+    /**
+     * 设置宽高
+     */
+    public void setImgWidthHeight(int widthDp, int heightDp) {
+        this.widthDp = widthDp;
+        this.heightDp = heightDp;
+    }
+
+    /**
+     * 是否切圆
+     */
+    public void setOval(boolean oval) {
+        mOval = oval;
+    }
+
+    /**
+     * 设置剪裁类型
+     */
+    public void setScaleType(ImageView.ScaleType scaleType) {
+        mScaleType = scaleType;
+    }
+
+    /**
+     * 设置边界
+     */
+    public void setPadding(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) {
+        mPaddingLeft = paddingLeft == 0 ? 0 : DpUtil.dp2px(paddingLeft);
+        mPaddingTop = paddingTop == 0 ? 0 : DpUtil.dp2px(paddingTop);
+        mPaddingRight = paddingRight == 0 ? 0 : DpUtil.dp2px(paddingRight);
+        mPaddingBottom = paddingBottom == 0 ? 0 : DpUtil.dp2px(paddingBottom);
+    }
+
+    /**
+     * 设置点击回调
+     */
+    public void setOnItemClickCallback(OnBeanCallback<SimpleImgBean> clickCallback) {
+        this.itemClickCallback = clickCallback;
+    }
+
+    /**
+     * 禁止点击事件
+     */
+    public void setForbidClick(boolean forbidClick) {
+        this.forbidClick = forbidClick;
+    }
+}

+ 188 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleImgTextAdapter.java

@@ -0,0 +1,188 @@
+package com.kalacheng.base.adapter;
+
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.base.R;
+import com.example.base.databinding.SimpleImageurlTextBinding;
+import com.kalacheng.base.bean.SimpleImageUrlTextBean;
+import com.kalacheng.util.listener.OnBeanCallback;
+import com.kalacheng.util.utils.CheckDoubleClick;
+import com.kalacheng.util.utils.DpUtil;
+import com.kalacheng.util.glide.ImageLoader;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by hgy on 2019/10/10.
+ */
+public class SimpleImgTextAdapter extends RecyclerView.Adapter<SimpleImgTextAdapter.ViewHolder> {
+
+    private List<SimpleImageUrlTextBean> mList = new ArrayList<>();
+    private boolean mLayoutWidthWrapContent;//布局宽度自适应
+    private int mLayoutWidthDp;//布局宽度
+    private int widthDp;
+    private int heightDp;
+    private boolean mOval;//是否切圆
+    private ImageView.ScaleType mScaleType;//剪裁类型
+    private int mPaddingLeft;
+    private int mPaddingTop;
+    private int mPaddingRight;
+    private int mPaddingBottom;
+    private String mTextColor;//字体颜色
+    private int mTextSize;//字体大小
+    private OnBeanCallback itemClickCallback;
+
+    public SimpleImgTextAdapter(List<SimpleImageUrlTextBean> list) {
+        mList.clear();
+        mList.addAll(list);
+    }
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        SimpleImageurlTextBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.simple_imageurl_text, parent, false);
+        return new ViewHolder(binding);
+    }
+
+    @Override
+    public void onBindViewHolder(ViewHolder holder, final int position) {
+        if (mLayoutWidthWrapContent) {
+            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+            holder.binding.layoutIcon.setLayoutParams(params);
+        } else if (mLayoutWidthDp != 0) {
+            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DpUtil.dp2px(mLayoutWidthDp), LinearLayout.LayoutParams.WRAP_CONTENT);
+            holder.binding.layoutIcon.setLayoutParams(params);
+        }
+        holder.binding.layoutIcon.setPadding(mPaddingLeft, mPaddingTop, mPaddingRight, mPaddingBottom);
+        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) holder.binding.icon.getLayoutParams();
+        if (widthDp != 0) {
+            layoutParams.width = DpUtil.dp2px(widthDp);
+        }
+        if (heightDp != 0) {
+            layoutParams.height = DpUtil.dp2px(heightDp);
+        }
+        holder.binding.setBean(mList.get(position));
+        holder.binding.executePendingBindings();
+        holder.binding.icon.setOval(mOval);
+        if (mScaleType != null) {
+            holder.binding.icon.setScaleType(mScaleType);
+        }
+        if (!TextUtils.isEmpty(mTextColor)) {
+            holder.binding.name.setTextColor(Color.parseColor(mTextColor));
+        }
+        if (mTextSize != 0) {
+            holder.binding.name.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTextSize);
+        }
+
+        if (mList.get(position).src != 0) {
+            ImageLoader.display(mList.get(position).src, holder.binding.icon);
+        } else {
+            ImageLoader.display(mList.get(position).url, holder.binding.icon);
+        }
+
+        holder.binding.layoutIcon.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (CheckDoubleClick.isFastDoubleClick()) {
+                    return;
+                }
+                if (itemClickCallback != null) {
+                    itemClickCallback.onClick(mList.get(position));
+                }
+            }
+        });
+    }
+
+    @Override
+    public int getItemCount() {
+        return mList == null ? 0 : mList.size();
+    }
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        SimpleImageurlTextBinding binding;
+
+        public ViewHolder(SimpleImageurlTextBinding binding) {
+            super(binding.getRoot());
+            this.binding = binding;
+        }
+    }
+
+    /**
+     * 设置布局宽度自适应
+     */
+    public void setLayoutWidthWrapContent() {
+        mLayoutWidthWrapContent = true;
+    }
+
+    /**
+     * 设置布局宽度
+     */
+    public void setLayoutWidth(int layoutWidthDp) {
+        mLayoutWidthDp = layoutWidthDp;
+    }
+
+    /**
+     * 设置宽高
+     */
+    public void setImgWidthHeight(int widthDp, int heightDp) {
+        this.widthDp = widthDp;
+        this.heightDp = heightDp;
+    }
+
+    /**
+     * 是否切圆
+     */
+    public void setOval(boolean oval) {
+        mOval = oval;
+    }
+
+    /**
+     * 设置剪裁类型
+     */
+    public void setScaleType(ImageView.ScaleType scaleType) {
+        mScaleType = scaleType;
+    }
+
+    /**
+     * 设置边界
+     */
+    public void setPadding(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) {
+        mPaddingLeft = paddingLeft == 0 ? 0 : DpUtil.dp2px(paddingLeft);
+        mPaddingTop = paddingTop == 0 ? 0 : DpUtil.dp2px(paddingTop);
+        mPaddingRight = paddingRight == 0 ? 0 : DpUtil.dp2px(paddingRight);
+        mPaddingBottom = paddingBottom == 0 ? 0 : DpUtil.dp2px(paddingBottom);
+    }
+
+    /**
+     * 设置字体颜色
+     */
+    public void setTextColor(String textColor) {
+        mTextColor = textColor;
+    }
+
+    /**
+     * 设置字体大小
+     */
+    public void setTextSize(int textSize) {
+        mTextSize = textSize;
+    }
+
+    /**
+     * 设置点击回调
+     */
+    public void setOnItemClickCallback(OnBeanCallback clickCallback) {
+        this.itemClickCallback = clickCallback;
+    }
+}

+ 95 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleTextAdapter.java

@@ -0,0 +1,95 @@
+package com.kalacheng.base.adapter;
+
+import android.graphics.Color;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.base.R;
+import com.example.base.databinding.SimpleTextBinding;
+import com.kalacheng.base.bean.SimpleTextBean;
+import com.kalacheng.util.listener.OnBeanCallback;
+import com.kalacheng.util.utils.DpUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by hgy on 2019/10/10.
+ */
+
+public class SimpleTextAdapter extends RecyclerView.Adapter<SimpleTextAdapter.ViewHolder> {
+
+    private List<SimpleTextBean> mList = new ArrayList<>();
+    int widthDp;
+    int hightDp;
+    OnBeanCallback itemClickCallback;
+
+    public SimpleTextAdapter(List<SimpleTextBean> list) {
+        mList.clear();
+        mList.addAll(list);
+    }
+
+    public void setData(List<SimpleTextBean> list) {
+        mList.clear();
+        mList.addAll(list);
+        notifyDataSetChanged();
+    }
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        SimpleTextBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.simple_text, parent, false);
+        binding.setCallback(new OnBeanCallback<SimpleTextBean>() {
+            @Override
+            public void onClick(SimpleTextBean bean) {
+                if (null != itemClickCallback)
+                    itemClickCallback.onClick(bean);
+            }
+        });
+        return new ViewHolder(binding);
+    }
+
+    @Override
+    public void onBindViewHolder(ViewHolder holder, int position) {
+        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) holder.binding.text.getLayoutParams();
+        if (widthDp != 0)
+            layoutParams.width = DpUtil.dp2px(widthDp);
+        if (hightDp != 0)
+            layoutParams.height = DpUtil.dp2px(hightDp);
+        holder.binding.setBean(mList.get(position));
+        holder.binding.executePendingBindings();
+        if (mList.get(position).name.contains("靓号")) {
+            holder.binding.text.setTextColor(Color.parseColor("#F6B86A"));
+        } else {
+            holder.binding.text.setTextColor(Color.parseColor("#999999"));
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        return mList == null ? 0 : mList.size();
+    }
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        SimpleTextBinding binding;
+
+        public ViewHolder(SimpleTextBinding binding) {
+            super(binding.getRoot());
+            this.binding = binding;
+        }
+    }
+
+    public void setTextWidthHight(int widthDp, int hightDp) {
+        this.widthDp = widthDp;
+        this.hightDp = hightDp;
+    }
+
+    public void setOnItemClickCallback(OnBeanCallback clickCallback) {
+        this.itemClickCallback = clickCallback;
+    }
+}

+ 96 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/adapter/SimpleTextAdapter2.java

@@ -0,0 +1,96 @@
+package com.kalacheng.base.adapter;
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.base.R;
+import com.example.base.databinding.SimpleText2Binding;
+import com.kalacheng.base.bean.SimpleTextBean;
+import com.kalacheng.util.listener.OnBeanCallback;
+import com.kalacheng.util.utils.DpUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by hgy on 2019/10/10.
+ */
+
+public class SimpleTextAdapter2 extends RecyclerView.Adapter<SimpleTextAdapter2.ViewHolder> {
+
+    private List<SimpleTextBean> mList = new ArrayList<>();
+    int widthDp;
+    int hightDp;
+    OnBeanCallback itemClickCallback;
+
+    public SimpleTextAdapter2(List<SimpleTextBean> list) {
+        mList.clear();
+        mList.addAll(list);
+    }
+
+    public void setData(List<SimpleTextBean> list) {
+        mList.clear();
+        mList.addAll(list);
+        notifyDataSetChanged();
+    }
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        SimpleText2Binding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.simple_text2, parent, false);
+        binding.setCallback(new OnBeanCallback<SimpleTextBean>() {
+            @Override
+            public void onClick(SimpleTextBean bean) {
+                if (null != itemClickCallback)
+                    itemClickCallback.onClick(bean);
+            }
+        });
+        return new ViewHolder(binding);
+    }
+
+    @Override
+    public void onBindViewHolder(ViewHolder holder, int position) {
+        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) holder.binding.text.getLayoutParams();
+        LinearLayout.LayoutParams layoutParams2 = (LinearLayout.LayoutParams) holder.binding.text2.getLayoutParams();
+        if (widthDp != 0) {
+            layoutParams.width = DpUtil.dp2px(widthDp);
+            layoutParams2.width = DpUtil.dp2px(widthDp);
+        }
+        if (hightDp != 0) {
+            layoutParams.height = DpUtil.dp2px(hightDp);
+            layoutParams2.height = DpUtil.dp2px(hightDp);
+
+        }
+        holder.binding.setBean(mList.get(position));
+        holder.binding.executePendingBindings();
+
+    }
+
+    @Override
+    public int getItemCount() {
+        return mList == null ? 0 : mList.size();
+    }
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        SimpleText2Binding binding;
+
+        public ViewHolder(SimpleText2Binding binding) {
+            super(binding.getRoot());
+            this.binding = binding;
+        }
+    }
+
+    public void setTextWidthHight(int widthDp, int hightDp) {
+        this.widthDp = widthDp;
+        this.hightDp = hightDp;
+    }
+
+    public void setOnItemClickCallback(OnBeanCallback clickCallback) {
+        this.itemClickCallback = clickCallback;
+    }
+}

+ 123 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseDialog.java

@@ -0,0 +1,123 @@
+package com.kalacheng.base.base;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+
+public abstract class BaseDialog extends DialogFragment {
+
+    protected Context mContext;
+    protected View mRootView;
+
+    public BaseDialog() {
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        mContext = getActivity();
+        mRootView = LayoutInflater.from(mContext).inflate(getLayoutId(), null);
+        Dialog dialog = new Dialog(mContext, getDialogStyle());
+        dialog.setContentView(mRootView);
+        dialog.setCancelable(canCancel());
+        dialog.setCanceledOnTouchOutside(canCancel());
+        setWindowAttributes(dialog.getWindow());
+        return dialog;
+    }
+
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+    }
+
+    protected abstract int getLayoutId();
+
+    protected abstract int getDialogStyle();
+
+    protected abstract boolean canCancel();
+
+    protected abstract void setWindowAttributes(Window window);
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+   /* public void show(FragmentManager manager, String tag) {
+        FragmentTransaction ft = manager.beginTransaction();
+        ft.add(this, tag);
+        ft.commitAllowingStateLoss();
+    }*/
+
+    /*public void showAllowingStateLoss(FragmentManager manager, String tag){
+        try {
+            Field dismissed = DialogFragment.class.getDeclaredField("mDismissed");
+            dismissed.setAccessible(true);
+            dismissed.set(this, false);
+        } catch (NoSuchFieldException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        try {
+            Field shown = DialogFragment.class.getDeclaredField("mShownByMe");
+            shown.setAccessible(true);
+            shown.set(this, true);
+        } catch (NoSuchFieldException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        FragmentTransaction ft = manager.beginTransaction();
+        ft.add(this, tag);
+        ft.commitAllowingStateLoss();
+    }*/
+    //处理  java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 异常
+
+    /**
+     * 用于判断 是那一个弹出框
+     */
+    public String tag;
+
+    @Override
+    public void show(FragmentManager manager, String tag) {
+//        super.show(manager, tag);
+        this.tag = tag;
+        try {
+            Class c = Class.forName("android.support.v4.app.DialogFragment");
+            Constructor con = c.getConstructor();
+            Object obj = con.newInstance();
+            Field dismissed = c.getDeclaredField("mDismissed");
+            dismissed.setAccessible(true);
+            dismissed.set(obj, false);
+            Field shownByMe = c.getDeclaredField("mShownByMe");
+            shownByMe.setAccessible(true);
+            shownByMe.set(obj, false);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        FragmentTransaction ft = manager.beginTransaction();
+        ft.add(this, tag);
+        ft.commitAllowingStateLoss();
+    }
+
+    @Override
+    public void dismiss() {
+//        super.dismiss();
+        dismissAllowingStateLoss();
+    }
+
+
+}

+ 84 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseFragment.java

@@ -0,0 +1,84 @@
+package com.kalacheng.base.base;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.example.base.R;
+import com.kalacheng.util.utils.LogUtil;
+
+public abstract class BaseFragment extends Fragment {
+    protected boolean mFirstLoadData = true;
+    protected boolean mShowed;//是否切换到了当前页面
+    protected boolean mPaused;//生命周期暂停
+
+    protected View mParentView;
+    protected int currentPosition = 0;
+
+    public BaseFragment() {
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        mParentView = inflater.inflate(getLayoutId(), container, false);
+        return mParentView;
+    }
+
+    @Override
+    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        initView();
+        initData();
+        LogUtil.e("Fragment -> " + getClass().getName());
+    }
+
+    protected abstract int getLayoutId();
+
+    protected abstract void initView();
+
+    protected abstract void initData();
+
+    protected void setTitle(String title) {
+        TextView titleView = (TextView) mParentView.findViewById(R.id.titleView);
+        if (titleView != null) {
+            titleView.setText(title);
+        }
+    }
+
+    public void refreshData() {
+
+    }
+
+    public void loadData() {
+    }
+
+    public void onPauseFragment() {
+    }
+
+    public void onResumeFragment() {
+    }
+
+    public void getUserVisibleHintFragment(){
+    }
+
+    protected boolean isFirstLoadData() {
+        if (mFirstLoadData) {
+            mFirstLoadData = false;
+            return true;
+        }
+        return false;
+    }
+
+    public void setShowed(boolean showed) {
+        mShowed = showed;
+        getUserVisibleHintFragment();
+    }
+
+}

+ 168 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseMVVMFragment.java

@@ -0,0 +1,168 @@
+package com.kalacheng.base.base;
+
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.Nullable;
+import androidx.databinding.DataBindingUtil;
+import androidx.databinding.ViewDataBinding;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.example.base.BR;
+import com.kalacheng.util.utils.LogUtil;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+/**
+ * 一个拥有DataBinding框架的基Activity
+ * 这里根据项目业务可以换成你自己熟悉的BaseActivity, 但是需要继承RxAppCompatActivity,方便LifecycleProvider管理生命周期
+ */
+public abstract class BaseMVVMFragment<V extends ViewDataBinding, VM extends AndroidViewModel> extends Fragment {
+    protected boolean mShowed;//是否切换到了当前页面
+    protected boolean mFirstLoadData = true;
+    protected V binding;
+    protected VM viewModel;
+    private int viewModelId;
+    protected Context mContext;
+    protected View mParentView;
+
+    public BaseMVVMFragment(Context context, ViewGroup parentView) {
+        mContext = context;
+    }
+
+    public BaseMVVMFragment() {
+
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        initParam();
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        binding = DataBindingUtil.inflate(inflater, initContentView(inflater, container, savedInstanceState), container, false);
+        mParentView = binding.getRoot();
+        return mParentView;
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        //页面接受的参数方法
+        initParam();
+        //私有的初始化Databinding和ViewModel方法
+        initViewDataBinding(savedInstanceState);
+        //页面数据初始化方法
+        initData();
+        //页面事件监听的方法,一般用于ViewModel层转到View层的事件注册
+        initViewObservable();
+        LogUtil.e("Fragment -> " + getClass().getName());
+    }
+
+    @Override
+    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (binding != null) {
+            binding.unbind();
+        }
+    }
+
+    /**
+     * 注入绑定
+     */
+    private void initViewDataBinding(Bundle savedInstanceState) {
+        //DataBindingUtil类需要在project的build中配置 dataBinding {enabled true }, 同步后会自动关联android.databinding包
+//        binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), getLayoutId(), mParentView, false);
+        viewModelId = BR.viewModel;
+//        viewModel = initViewModel();
+        if (viewModel == null) {
+            Class modelClass = null;
+            Type type = getClass().getGenericSuperclass();
+            if (type instanceof ParameterizedType) {
+                modelClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
+            }
+            viewModel = (VM) createViewModel((Fragment) this, modelClass);
+        }
+        //关联ViewModel
+        binding.setVariable(viewModelId, viewModel);
+    }
+
+    //刷新布局
+    public void refreshLayout() {
+        if (viewModel != null) {
+            binding.setVariable(viewModelId, viewModel);
+        }
+    }
+
+    public void initParam() {
+
+    }
+
+    /**
+     * 初始化根布局
+     *
+     * @return 布局layout的id
+     */
+    public abstract int initContentView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState);
+
+    /**
+     * 初始化ViewModel
+     *
+     * @return 继承BaseViewModel的ViewModel
+     */
+    public abstract void initData();
+
+    public void initViewObservable() {
+
+    }
+
+    public void onPauseFragment() {
+    }
+
+    public void onResumeFragment() {
+    }
+
+    /**
+     * 创建ViewModel
+     */
+    public <T extends ViewModel> T createViewModel(Fragment fragment, Class<T> cls) {
+        return ViewModelProviders.of(fragment).get(cls);
+    }
+
+    protected boolean isFirstLoadData() {
+        if (mFirstLoadData) {
+            mFirstLoadData = false;
+            return true;
+        }
+        return false;
+    }
+
+    public void setShowed(boolean showed) {
+        mShowed = showed;
+    }
+
+    public void loadData() {
+
+    }
+
+    public void refreshData() {
+
+    }
+}

+ 95 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseMVVMViewHolder.java

@@ -0,0 +1,95 @@
+package com.kalacheng.base.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.databinding.DataBindingUtil;
+import androidx.databinding.ViewDataBinding;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.example.base.BR;
+import com.kalacheng.util.utils.LogUtil;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+public abstract class BaseMVVMViewHolder<V extends ViewDataBinding, VM extends AndroidViewModel> {
+    protected V binding;
+    protected Context mContext;
+    protected ViewGroup mParentView;
+    protected VM viewModel;
+    protected String mGroupName;//Class名称,用于socket分组
+
+    public BaseMVVMViewHolder(Context context, ViewGroup parentView) {
+        mContext = context;
+        mParentView = parentView;
+        binding = DataBindingUtil.inflate(LayoutInflater.from(context), getLayoutId(), mParentView, false);
+        initViewDataBinding();
+        if (mContext != null && mContext instanceof Activity) {
+            mGroupName = ((Activity) mContext).getLocalClassName();
+        }
+        init();
+    }
+
+    private void initViewDataBinding() {
+        if (viewModel == null) {
+            Class modelClass = null;
+            Type type = getClass().getGenericSuperclass();
+            if (type instanceof ParameterizedType) {
+                modelClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
+            }
+            viewModel = (VM) createViewModel((FragmentActivity) mContext, modelClass);
+        }
+        //关联ViewModel
+        binding.setVariable(BR.viewModel, viewModel);
+    }
+
+    protected abstract int getLayoutId();
+
+    protected abstract void init();
+
+    /**
+     * 创建ViewModel
+     */
+    public <T extends ViewModel> T createViewModel(FragmentActivity activity, Class<T> cls) {
+        return ViewModelProviders.of(activity).get(cls);
+    }
+
+    public void addToParent() {
+        if (binding.getRoot() != null) {
+            ViewGroup parentViewGroup = (ViewGroup) binding.getRoot().getParent();
+            if (parentViewGroup != null) {
+                parentViewGroup.removeView(binding.getRoot());
+            }
+        }
+        mParentView.addView(binding.getRoot());
+        LogUtil.e("ViewHolder = " + getClass().getSimpleName());
+    }
+
+    public void removeFromParent() {
+        if (null != mParentView && null != binding.getRoot()) {
+            mParentView.removeView(binding.getRoot());
+        }
+        if (binding != null) {
+            binding.unbind();
+        }
+
+    }
+
+    //隐藏
+    public void setGONE(View viewGroup) {
+        viewGroup.setVisibility(View.GONE);
+    }
+
+    //显示
+    public void setVisibility(View viewGroup) {
+        viewGroup.setVisibility(View.VISIBLE);
+    }
+
+}

+ 12 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseModel.java

@@ -0,0 +1,12 @@
+package com.kalacheng.base.base;
+
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.AndroidViewModel;
+
+public class BaseModel extends AndroidViewModel {
+    public BaseModel(@NonNull Application application) {
+        super(application);
+    }
+}

+ 100 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/base/BaseViewHolder.java

@@ -0,0 +1,100 @@
+package com.kalacheng.base.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+
+import com.kalacheng.util.utils.LogUtil;
+
+public abstract class BaseViewHolder {
+    protected Context mContext;
+    protected ViewGroup mParentView;
+    protected View mContentView;
+    protected String mGroupName;//Class名称,用于socket分组
+
+    public BaseViewHolder(Context context, ViewGroup parentView) {
+        mContext = context;
+        mParentView = parentView;
+        mContentView = LayoutInflater.from(context).inflate(getLayoutId(), mParentView, false);
+        if (mContext != null && mContext instanceof Activity) {
+            mGroupName = ((Activity) mContext).getLocalClassName();
+        }
+        init();
+    }
+
+    public BaseViewHolder(Context context, ViewGroup parentView, Object... args) {
+        processArguments(args);
+        mContext = context;
+        mParentView = parentView;
+        mContentView = LayoutInflater.from(context).inflate(getLayoutId(), mParentView, false);
+        if (mContext != null && mContext instanceof Activity) {
+            mGroupName = ((Activity) mContext).getLocalClassName();
+        }
+        init();
+    }
+
+    protected void processArguments(Object... args) {
+
+    }
+
+    protected abstract int getLayoutId();
+
+    protected abstract void init();
+
+    protected View findViewById(int res) {
+        return mContentView.findViewById(res);
+    }
+
+    public void addToParent() {
+        if (getChildA(mContentView)) {
+            removeFromParent();
+        }
+        if (mParentView != null && mContentView != null) {
+            mParentView.addView(mContentView);
+        }
+        LogUtil.e("ViewHolder = " + getClass().getSimpleName());
+
+    }
+
+    public void removeFromParent() {
+        ViewParent parent = mContentView.getParent();
+        if (parent != null) {
+            ((ViewGroup) parent).removeView(mContentView);
+        }
+    }
+
+    //是否存在这个子viewA,返回true就是有,false就是没有
+    private Boolean getChildA(View view) {
+        Boolean a = false;
+        if (view instanceof ViewGroup) {
+            ViewGroup vp = (ViewGroup) view;
+            //里面的1000即为需要找View的tag
+            if (vp.getTag() != null && String.valueOf(vp.getTag()).equals("LiveMessageComponent")) {
+                Log.i("已存在", String.valueOf(vp.getTag()));
+                a = true;
+            } else {
+                a = false;
+            }
+        }
+        return a;
+    }
+
+    //显示
+    public void setVisibility() {
+        if (mContentView != null) {
+            mContentView.setVisibility(View.VISIBLE);
+        }
+    }
+
+    //隐藏
+    public void setGone() {
+        if (mContentView != null) {
+            mContentView.setVisibility(View.GONE);
+        }
+    }
+
+}

+ 37 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/bean/SimpleImageUrlTextBean.java

@@ -0,0 +1,37 @@
+package com.kalacheng.base.bean;
+
+/**
+ * Created by hgy on 2019/10/10.
+ * 简单的上下结构imageText类
+ */
+
+public class SimpleImageUrlTextBean {
+    public long id;
+    public String url;
+    public String text;
+    public String text2;
+    public int src;
+
+    public SimpleImageUrlTextBean(String url, String text) {
+        this.url = url;
+        this.text = text;
+    }
+
+    public SimpleImageUrlTextBean(int src, String text) {
+        this.src = src;
+        this.text = text;
+    }
+
+    public SimpleImageUrlTextBean(long id, String url, String text, String text2) {
+        this.id = id;
+        this.url = url;
+        this.text = text;
+        this.text2 = text2;
+    }
+
+    public SimpleImageUrlTextBean(long id, String url, String text) {
+        this.id = id;
+        this.url = url;
+        this.text = text;
+    }
+}

+ 18 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/bean/SimpleImgBean.java

@@ -0,0 +1,18 @@
+package com.kalacheng.base.bean;
+
+public class SimpleImgBean {
+    public long id;
+    public int src;
+    public String url;
+    public boolean isChecked;
+
+    public SimpleImgBean(long id, int src) {
+        this.id = id;
+        this.src = src;
+    }
+
+    public SimpleImgBean(long id, String url) {
+        this.id = id;
+        this.url = url;
+    }
+}

+ 24 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/bean/SimpleTextBean.java

@@ -0,0 +1,24 @@
+package com.kalacheng.base.bean;
+
+public class SimpleTextBean {
+    public String name;
+    public String value;
+    public long id;
+    public String IdStr;
+    public boolean isChecked;
+
+    public SimpleTextBean(String name) {
+        this.name = name;
+    }
+
+    public SimpleTextBean(long id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public SimpleTextBean(String IdStr, String name, String value) {
+        this.IdStr = IdStr;
+        this.name = name;
+        this.value = value;
+    }
+}

+ 19 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/camera/CameraConfig.java

@@ -0,0 +1,19 @@
+package com.kalacheng.base.camera;
+
+import com.kalacheng.base.activty.BaseApplication;
+import com.kalacheng.base.utils.SpUtil;
+import com.xuantongyun.camera.IGetCameraConfig;
+
+public class CameraConfig implements IGetCameraConfig {
+
+    @Override
+    public String getApplicationId() {
+        return BaseApplication.getInstance().getPackageName();
+    }
+
+    @Override
+    public String getVideoClipsKey() {
+        return (String) SpUtil.getInstance().getSharedPreference(SpUtil.CONFIG_VIDEO_CLIP_KEY, "");
+    }
+
+}

+ 770 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/ARouterPath.java

@@ -0,0 +1,770 @@
+package com.kalacheng.base.config;
+
+import com.kalacheng.base.http.HttpApiCallBackConvert;
+
+/**
+ * 路由path
+ */
+public class ARouterPath {
+
+    /**
+     * 推送点击空白页,占位符
+     */
+    public static final String PushBlankActivity = "/KlcPush/PushBlankActivity";
+
+    /**
+     * 启动页
+     */
+    public static final String LauncherActivity = "/App/LauncherActivity";
+    /**
+     * 唛唛,女神/男神
+     */
+    public static final String MmGoddessActivity = "/App/MmGoddessActivity";
+
+    /**
+     * 主页
+     */
+    public static final String MainActivity = "/KlcMainPage/MainActivity";
+    /**
+     * 单人匹配
+     */
+    public static final String MeetAudienceSingleActivity = "/KlcMain/MeetAudienceSingleActivity";
+    /**
+     * 视频速配 多人匹配
+     */
+    public static final String MeetAudienceManyActivity = "/KlcMain/MeetAudienceManyActivity";
+    /**
+     * 1v1通话
+     */
+    public static final String MeetAnchorActivity = "/KlcMain/MeetAnchorActivity";
+    /**
+     * 抢聊(男)
+     */
+    public static final String FirstLoveRobManActivity = "/KlcMain/FirstLoveRobManActivity";
+    /**
+     * 抢聊(女)
+     */
+    public static final String FirstLoveRobWomanActivity = "/KlcMain/FirstLoveRobWomanActivity";
+    /**
+     * 求聊
+     */
+    public static final String FirstLoveSeekChatActivity = "/KlcMain/FirstLoveSeekChatActivity";
+    /**
+     * 女聊场
+     */
+    public static final String ChatLocalActivity = "/KlcMain/ChatLocalActivity";
+    /**
+     * 直播推荐页(主播休息中)
+     */
+    public static final String LiveRecommendActivity = "/KlcMain/LiveRecommendActivity";
+    /**
+     * 直播分类
+     */
+    public static final String SquareTagActivity = "/KlcMain/SquareTagActivity";
+    /**
+     * 用户列表
+     */
+    public static final String OnlineUserActivity = "/KlcMain/OnlineUserActivity";
+    /**
+     * 推荐页
+     */
+    public static final String MainRecommendActivity = "/KlcMain/MainRecommendActivity";
+
+    /**
+     * 登录
+     */
+    public static final String LoginActivity = HttpApiCallBackConvert.LOGIN_AROUTER;
+
+    /**
+     * 注册
+     */
+    public static final String RegisterActivity = "/KlcLogin/RegisterActivity";
+    /**
+     * 修改密码
+     */
+    public static final String ChangePassword = "/KlcLogin/ChangePasswordActivity";
+    /**
+     * 注册设置个人信息
+     */
+    public static final String RequiredInfoActivity = "/KlcLogin/RequiredInfoActivity";
+
+    /**
+     * 主播直播
+     */
+    public static final String LiveAnchorActivity = "/KlcLive/LiveAnchorActivity";
+    /**
+     * 观众直播
+     */
+    public static final String LiveAudienceActivity = "/KlcLive/LiveAudienceActivity";
+    /**
+     * 关闭直播
+     */
+    public static final String LiveEndActivity = "/KlcLive/LiveEndActivity";
+
+    /**
+     * 设置
+     */
+    public static final String SettingAppActivity = "/KlcMe/SettingAppActivity";
+    /**
+     * 权限设置
+     */
+    public static final String PowerSettingActivity = "/KlcMe/PowerSettingActivity";
+    /**
+     * 关于我们
+     */
+    public static final String AboutUsActivity = "/KlcMe/AboutUsActivity";
+    /**
+     * 隐私设置
+     */
+    public static final String PrivacySettingActivity = "/KlcMe/PrivacySettingActivity";
+    /**
+     * 更改语言
+     */
+    public static final String SettinglanguageActivity = "/KlcMe/SettinglanguageActivity";
+    /**
+     * 消息设置
+     */
+    public static final String MsgSetting = "/KlcMe/MsgSettingActivity";
+    /**
+     * 用户注销
+     */
+    public static final String AccountCancellationActivity = "/KlcMe/AccountCancellationActivity";
+    /**
+     * 账户验证
+     */
+    public static final String AccountCancellationConfirmActivity = "/KlcMe/AccountCancellationConfirmActivity";
+    /**
+     * 联系客服
+     */
+    public static final String CustomerServeActivity = "/KlcMe/CustomerServeActivity";
+    /**
+     * 在线客服
+     */
+    public static final String CustomerOnlineActivity = "/KlcMe/CustomerOnlineActivity";
+    /**
+     * 装扮中心
+     */
+    public static final String DressingCenterActivity = "/KlcMe/DressingCenterActivity";
+    /**
+     * 等级特权
+     */
+    public static final String MyPrivilegeActivity = "/KlcMe/MyPrivilegeActivity";
+    /**
+     * 我的时间轴
+     */
+    public static final String MyTimeAxisActivity = "/KlcMe/MyTimeAxisActivity";
+    /**
+     * 青少年模式
+     */
+    public static final String YoungPatternActivity = "/KlcMe/YoungPatternActivity";
+    /**
+     * 青少年模式设置密码
+     */
+    public static final String YoungPatternSetPassWordActivity = "/KlcMe/YoungPatternSetPassWordActivity";
+    /**
+     * 青少年模式确认密码
+     */
+    public static final String YoungPatternConfirmPassWordActivity = "/KlcMe/YoungPatternConfirmPassWordActivity";
+    /**
+     * 美颜设置
+     */
+    public static final String BeautySettingActivity = "/KlcMe/BeautySettingActivity";
+    /**
+     * 我赞过的
+     */
+    public static final String MyZanActivity = "/KlcMe/MyZanActivity";
+
+    /**
+     * 主播中心
+     */
+    public static final String AnchorCenterActivity = "/KlcAnchorCenter/AnchorCenterActivity";
+    /**
+     * 形象展示设置
+     */
+    public static final String One2OneCallActivity = "/KlcAnchorCenter/One2OneCallActivity";
+    /**
+     * 通话记录
+     */
+    public static final String One2OneCallRecordActivity = "/KlcAnchorCenter/One2OneCallRecordActivity";
+    /**
+     * 粉丝团
+     */
+    public static final String FansGroupActivity = "/KlcAnchorCenter/FansGroupActivity";
+    /**
+     * 直播数据
+     */
+    public static final String FansLiveDataActivity = "/KlcAnchorCenter/FansLiveDataActivity";
+    /**
+     * 付费设置
+     */
+    public static final String PaySettingActivity = "/KlcAnchorCenter/PaySettingActivity";
+    /**
+     * 主播认证
+     */
+    public static final String ApplyAnchorActivity = "/KlcAnchorCenter/ApplyAnchorActivity";
+    /**
+     * 附加信息
+     */
+    public static final String AnchorRemarkActivity = "/KlcAnchorCenter/AnchorRemarkActivity";
+    /**
+     * 上传证件照片
+     */
+    public static final String UpLoadIdCardActivity = "/KlcAnchorCenter/UpLoadIdCardActivity";
+    /**
+     * 视频认证
+     */
+    public static final String AnchorVideoRecordActivity = "/KlcAnchorCenter/AnchorVideoRecordActivity";
+    /**
+     * 一对一视频预览
+     */
+    public static final String One2OneVideo = "/KlcAnchorCenter/One2OneVideo";
+    /**
+     * 录制声音
+     */
+    public static final String MyVoiceActivity = "/KlcAnchorCenter/MyVoiceActivity";
+    /**
+     * 任务中心
+     */
+    public static final String TaskCenterActivity = "/KlcAnchorCenter/TaskCenterActivity";
+    /**
+     * 认证中心,短视频
+     */
+    public static final String ShortVideoAnchorCenterActivity = "/KlcAnchorCenter/ShortVideoAnchorCenterActivity";
+    /**
+     * 任务中心(用户)
+     */
+    public static final String TaskCenterUserActivity = "/KlcAnchorCenter/TaskCenterUserActivity";
+
+    /**
+     * 个人主页
+     */
+    public static final String HomePage = "/KlcHomePage/HomePageActivity";
+
+    /**
+     * 搜索
+     */
+    public static final String SearchActivity = "/KlcFans/SearchActivity";
+    /**
+     * 粉丝列表
+     */
+    public static final String FansActivity = "/KlcFans/FansActivity";
+    /**
+     * 谁看过我
+     */
+    public static final String BrowseActivity = "/KlcFans/BrowseActivity";
+
+    /**
+     * 房间管理
+     */
+    public static final String AdminList = "/KlcLiveCommon/RoomManagerActivity ";
+
+    /**
+     * WebView
+     */
+    public static final String WebViewActivity = "/KlcMoney/WebViewActivity";
+    /**
+     * 充值中心
+     */
+    public static final String MyCoinActivity = "/KlcMoney/MyCoinActivity";
+    /**
+     * SVIP
+     */
+    public static final String SvipActivity = "/KlcMoney/SvipActivity";
+    /**
+     * 提现账户
+     */
+    public static final String CashAccountActivity = "/KlcMoney/CashAccountActivity";
+    /**
+     * 添加新账户
+     */
+    public static final String CashAccountAddActivity = "/KlcMoney/CashAccountAddActivity";
+    /**
+     * 守护中心
+     */
+    public static final String GuardActivity = "/KlcMoney/GuardActivity";
+    /**
+     * 守护特权
+     */
+    public static final String GuardPrivilegeActivity = "/KlcMoney/GuardPrivilegeActivity";
+    /**
+     * 开通守护
+     */
+    public static final String GuardOpenActivity = "/KlcMoney/GuardOpenActivity";
+    /**
+     * Ta的守护
+     */
+    public static final String GuardTaActivity = "/KlcMoney/GuardTaActivity";
+    /**
+     * Ta的守护,样式2
+     */
+    public static final String GuardTaActivity2 = "/KlcMoney/GuardTaActivity2";
+    /**
+     * 守护列表
+     */
+    public static final String GuardTaListActivity = "/KlcMoney/GuardTaListActivity";
+
+    /**
+     * 礼物排行榜
+     */
+    public static final String GiftContribution = "/KlcRanking/GiftContribution";
+    /**
+     * 贡献榜
+     */
+    public static final String FansContributionActivity = "/KlcRanking/FansContributionActivity";
+    /**
+     * 排行榜
+     */
+    public static final String RankActivity = "/KlcRanking/RankActivity";
+    /**
+     * 家族贡献榜
+     */
+    public static final String FamilyContributionActivity = "/KlcRanking/FamilyContributionActivity";
+
+    /**
+     * 发布短视频
+     */
+    public static final String VideoPublish = "/KlcVideoCommon/VideoPublish";
+    /**
+     * 发布动态
+     */
+    public static final String TrendPublishActivity = "/KlcVideoCommon/TrendPublishActivity";
+    /**
+     * 发布动态,008项目
+     */
+    public static final String EightTrendActivity = "/App/EightTrendActivity";
+    /**
+     * 发布短视频,008项目
+     */
+    public static final String EightVideoActivity = "/App/EightVideoActivity";
+
+    /**
+     * 动态播放
+     */
+    public static final String TrendPlayActivity = "/KlcTrend/TrendPlayActivity";
+    /**
+     * 动态话题页
+     */
+    public static final String TrendTopicActivity = "/KlcTrend/TrendTopicActivity";
+    /**
+     * 动态举报
+     */
+    public static final String TrendReportActivity = "/KlcTrend/TrendReportActivity";
+
+    /**
+     * 发布旅途
+     */
+    public static final String TripPublishActivity = "/KlcTrip/TripPublishActivity";
+    /**
+     * 旅途,详情页
+     */
+    public static final String TripDetailsActivity = "/KlcTrip/TripDetailsActivity";
+    /**
+     * 旅途,展示图片
+     */
+    public static final String TripPlayPictureActivity = "/KlcTrip/TripPlayPictureActivity";
+    /**
+     * 旅途,展示视频
+     */
+    public static final String TripPlayVideoActivity = "/KlcTrip/TripPlayVideoActivity";
+    /**
+     * 旅途,收藏列表
+     */
+    public static final String TripCollectActivity = "/KlcTrip/TripCollectActivity";
+    /**
+     * 旅途,搜索
+     */
+    public static final String TripSearchActivity = "/KlcTrip/TripSearchActivity";
+
+    /**
+     * 语音直播,主播端
+     */
+    public static final String VoiceLiveAnchorActivity = "/KlcVoiceLive/VoiceLiveAnchorActivity";
+    /**
+     * 语音背景图
+     */
+    public static final String ChoiceBGActivity = "/KlcVoiceLive/ChoiceBGActivity";
+    /**
+     * 语音房间,观众端
+     */
+    public static final String VoiceLiveAudienceActivity = "/KlcVoiceLive/VoiceLiveAudienceActivity";
+
+    /**
+     * 加入一对一语音
+     */
+    public static final String SingleVoiceActivity = "/KlcOneVoiceLive/SingleVoiceActivity";
+
+    /**
+     * 加入一对一视频
+     */
+    public static final String SingleVideoActivity = "/KlcOne2OneSvipLive/SingleVideoActivity";
+
+    /**
+     * 编辑资料
+     */
+    public static final String EditInformationActivity = "/KlcHome/EditInformationActivity";
+    /**
+     * 修改名字
+     */
+    public static final String NameActivity = "/KlcHome/NameActivity";
+    /**
+     * 个性签名
+     */
+    public static final String PersonalActivity = "/KlcHome/PersonalActivity";
+    /**
+     * 我的标签
+     */
+    public static final String TagActivity = "/KlcHome/TagActivity";
+    /**
+     * 礼物墙
+     */
+    public static final String GiftActivity = "/KlcHome/GiftActivity";
+    /**
+     * 勋章墙
+     */
+    public static final String HonorActivity = "/KlcHome/HonorActivity";
+    /**
+     * 用户举报
+     */
+    public static final String UserReportActivity = "/KlcHome/UserReportActivity";
+    /**
+     * 备注
+     */
+    public static final String RemarksActivity = "/KlcHome/RemarksActivity";
+
+    /**
+     * 邀请赚钱
+     */
+    public static final String InvitationCodeActivity = "/KlcInvitation/InvitationCodeActivity";
+    /**
+     * 收入排行
+     */
+    public static final String InvitationRankActivity = "/KlcInvitation/InvitationSortActivity";
+    /**
+     * 图片分享
+     */
+    public static final String InvitationSharePictureActivity = "/KlcInvitation/InvitationSharePictureActivity";
+    /**
+     * 佣金提现
+     */
+    public static final String InvitationExtractActivity = "/KlcInvitation/InvitationExtractActivity";
+    /**
+     * 邀请记录
+     */
+    public static final String InvitationRecordActivity = "/KlcInvitation/InvitationRecordActivity";
+
+    /**
+     * 地图
+     */
+    public static final String MapActivity = "/KlcMap/MapActivity";
+    /**
+     * 寻觅,选择邀约地点
+     */
+    public static final String SeekMapActivity = "/KlcMap/SeekMapActivity";
+    /**
+     * 寻觅,约会地点
+     */
+    public static final String SeekMapAddressActivity = "/KlcMap/SeekMapAddressActivity";
+
+    /**
+     * 私信
+     */
+    public static final String ChatRoomActivity = "/KlcImJmessage/ChatRoomActivity";
+    /**
+     * 私信,拍照预览
+     */
+    public static final String ChatCameraPreviewActivity = "/KlcImJmessage/ChatCameraPreviewActivity";
+    /**
+     * 私信列表(单独打开一个activity进行展示)
+     */
+    public static final String ConversationListActivity = "/KlcImJmessage/ConversationListActivity";
+    /**
+     * 我加入的群组
+     */
+    public static final String MyJoinGroupActivity = "/KlcImJmessage/MyJoinGroupActivity";
+    /**
+     * 聊天设置
+     */
+    public static final String ChatSettingActivity = "/KlcImJmessage/ChatSettingActivity";
+    /**
+     * 聊天广场
+     */
+    public static final String ChatSquareActivity = "/KlcImJmessage/ChatSquareActivity";
+    /**
+     * 群成员
+     */
+    public static final String GroupMemberActivity = "/KlcImJmessage/GroupMemberActivity";
+    /**
+     * 阅后即焚
+     */
+    public static final String BurnActivity = "/KlcImJmessage/BurnActivity";
+
+    /**
+     * 评论列表
+     */
+    public static final String ReviewsListActivity = "/KlcMessage/ReviewsListActivity";
+    /**
+     * 通知
+     */
+    public static final String NotifyListActivity = "/KlcMessage/NotifyListActivity";
+    /**
+     * 通知,二级列表界面
+     */
+    public static final String NotifyDetailsListActivity = "/KlcMessage/NotifyDetailsListActivity";
+    /**
+     * 官方消息列表
+     */
+    public static final String OfficialNewsActivity = "/KlcMessage/OfficialNewsActivity";
+    /**
+     * 官方消息详情
+     */
+    public static final String OfficialNewsDetailsActivity = "/KlcMessage/OfficialNewsDetailsActivity";
+    /**
+     * 黑名单管理
+     */
+    public static final String BlockListActivity = "/KlcMessage/BlockListActivity";
+
+    /**
+     * 我的视图
+     */
+    public static final String MyViewActivity = "/KlcShortVideo/MyViewActivity";
+    /**
+     * 看点 - 分类 (最多观看、最多评论、最多点赞、最多付费)
+     */
+    public static final String VideoClassifyActivity = "/KlcShortVideo/VideoClassifyActivity";
+    /**
+     * 短视频播放
+     */
+    public static final String VideoPlayActivity = "/KlcShortVideo/VideoPlayActivity";
+    /**
+     * 短视频举报
+     */
+    public static final String VideoReportActivity = "/KlcShortVideo/VideoReportActivity";
+
+    /**
+     * 入驻协议
+     */
+    public static final String MoveInAgreeActivity = "/KlcShopping/MoveInAgreeActivity";
+    /**
+     * 商家简介
+     */
+    public static final String UpShopDataActivity = "/KlcShopping/UpShopDataActivity";
+    /**
+     * 官方小店
+     */
+    public static final String ShopManageActivity = "/KlcShopping/ShopManageActivity";
+    /**
+     * 我的收入
+     */
+    public static final String MyIncomeActivity = "/KlcShopping/MyIncomeActivity";
+    /**
+     * 添加商品
+     */
+    public static final String AddGoodsActivity = "/KlcShopping/AddGoodsActivity";
+    /**
+     * 商品分类
+     */
+    public static final String GoodsClassifyActivity = "/KlcShopping/GoodsClassifyActivity";
+    /**
+     * 商品属性
+     */
+    public static final String GoodsAttributeActivity = "/KlcShopping/GoodsAttributeActivity";
+    /**
+     * 编辑属性价格
+     */
+    public static final String EditPriceActivity = "/KlcShopping/EditPriceActivity";
+    /**
+     * 商品管理
+     */
+    public static final String GoodsManageActivity = "/KlcShopping/GoodsManageActivity";
+    /**
+     * 直播预告
+     */
+    public static final String LiveBuyNoticeActivity = "/KlcShopping/LiveBuyNoticeActivity";
+    /**
+     * 提现
+     */
+    public static final String ShopCashActivity = "/KlcShopping/ShopCashActivity";
+    /**
+     * 商品详情
+     */
+    public static final String GoodsDetailsActivity = "/KlcShopping/GoodsDetailsActivity";
+    /**
+     * 购物车
+     */
+    public static final String ShoppingCartActivity = "/KlcShopping/ShoppingCartActivity";
+    /**
+     * 确认订单
+     */
+    public static final String SubmitOrderActivity = "/KlcShopping/SubmitOrderActivity";
+    /**
+     * 添加收货地址
+     */
+    public static final String AddAddressActivity = "/KlcShopping/AddAddressActivity";
+    /**
+     * 收货地址
+     */
+    public static final String AddressListActivity = "/KlcShopping/AddressListActivity";
+    /**
+     * 购物订单 - 买家
+     */
+    public static final String OrderManageActivity1 = "/KlcShopping/OrderManageActivity1";
+    /**
+     * 全部订单 - 卖家
+     */
+    public static final String OrderManageActivity2 = "/KlcShopping/OrderManageActivity2";
+    /**
+     * 小店预览
+     */
+    public static final String ShopActivity = "/KlcShopping/ShopActivity";
+    /**
+     * 订单详情
+     */
+    public static final String OrderDetailsActivity = "/KlcShopping/OrderDetailsActivity";
+    /**
+     * 物流详情
+     */
+    public static final String LogisdticsDetailsActivity = "/KlcShopping/LogisdticsDetailsActivity";
+    /**
+     * 选择物流
+     */
+    public static final String ChooseLogisticsActivity = "/KlcShopping/ChooseLogisticsActivity";
+    /**
+     * 审核退款申请
+     */
+    public static final String ReviewRefundActivity = "/KlcShopping/ReviewRefundActivity";
+
+    /**
+     * 申请顾问
+     */
+    public static final String SeekAuthActivity = "/KlcSeek/SeekAuthActivity";
+    /**
+     * 技能列表
+     */
+    public static final String AnchorSkillListActivity = "/KlcSeek/AnchorSkillListActivity";
+    /**
+     * 选择技能
+     */
+    public static final String SkillSelectActivity = "/KlcSeek/SkillSelectActivity";
+    /**
+     * 编辑技能价格
+     */
+    public static final String SkillPriceActivity = "/KlcSeek/SkillPriceActivity";
+    /**
+     * 完善技能介绍
+     */
+    public static final String SkillEditActivity = "/KlcSeek/SkillEditActivity";
+    /**
+     * 设置档期
+     */
+    public static final String SkillTimeActivity = "/KlcSeek/SkillTimeActivity";
+    /**
+     * 选择技能标签
+     */
+    public static final String SkillLabelActivity = "/KlcSeek/SkillLabelActivity";
+    /**
+     * 编辑技能文字介绍
+     */
+    public static final String SkillWordActivity = "/KlcSeek/SkillWordActivity";
+    /**
+     * 技能保存完成
+     */
+    public static final String SkillCompleteActivity = "/KlcSeek/SkillCompleteActivity";
+    /**
+     * 技能详情
+     */
+    public static final String SkillOverviewActivity = "/KlcSeek/SkillOverviewActivity";
+    /**
+     * 全部分类
+     */
+    public static final String SeekAllTypeActivity = "/KlcSeek/SeekAllTypeActivity";
+    /**
+     * 寻觅,人员技能列表
+     */
+    public static final String SeekSkillListActivity = "/KlcSeek/SeekSkillListActivity";
+    /**
+     * 订单,选择主题
+     */
+    public static final String SeekOrderSelectSkillActivity = "/KlcSeek/SeekOrderSelectSkillActivity";
+    /**
+     * 订单,下单
+     */
+    public static final String SeekOrderBookActivity = "/KlcSeek/SeekOrderBookActivity";
+    /**
+     * 邀约详情
+     */
+    public static final String SeekOrderDetailsActivity = "/KlcSeek/SeekOrderDetailsActivity";
+    /**
+     * 我的档期
+     */
+    public static final String SeekOrderListActivity = "/KlcSeek/SeekOrderListActivity";
+    /**
+     * 拒绝邀约,选择理由
+     */
+    public static final String SeekOrderRefuseActivity = "/KlcSeek/SeekOrderRefuseActivity";
+    /**
+     * 取消预约
+     */
+    public static final String SeekOrderCancelActivity = "/KlcSeek/SeekOrderCancelActivity";
+    /**
+     * 申诉
+     */
+    public static final String SeekOrderAppealActivity = "/KlcSeek/SeekOrderAppealActivity";
+    /**
+     * 评价
+     */
+    public static final String SeekOrderEvaluateActivity = "/KlcSeek/SeekOrderEvaluateActivity";
+    /**
+     * 订单评论
+     */
+    public static final String SeekOrderEvaluateListActivity = "/KlcSeek/SeekOrderEvaluateListActivity";
+
+    /**
+     * 家族
+     */
+    public static final String FamilyHomeActivity = "/KlcFamily/FamilyHomeActivity";
+    /**
+     * 创建家族
+     */
+    public static final String FamilyCreateActivity = "/KlcFamily/FamilyCreateActivity";
+    /**
+     * 搜索
+     */
+    public static final String FamilySearchActivity = "/KlcFamily/FamilySearchActivity";
+    /**
+     * 家族详情
+     */
+    public static final String FamilyDetailsActivity = "/KlcFamily/FamilyDetailsActivity";
+    /**
+     * 管理家族
+     */
+    public static final String FamilyManageActivity = "/KlcFamily/FamilyManageActivity";
+    /**
+     * 家族公告
+     */
+    public static final String FamilyNoticeActivity = "/KlcFamily/FamilyNoticeActivity";
+    /**
+     * 举报
+     */
+    public static final String FamilyReportActivity = "/KlcFamily/FamilyReportActivity";
+    /**
+     * 家族成员
+     */
+    public static final String FamilyMemberActivity = "/KlcFamily/FamilyMemberActivity";
+    /**
+     * 申请列表
+     */
+    public static final String FamilyReviewedActivity = "/KlcFamily/FamilyReviewedActivity";
+
+    /**
+     * 剧集播放
+     */
+    public static final String DramaPlayActivity = "/KlcDrama/DramaPlayActivity";
+    /**
+     * 剧集搜索
+     */
+    public static final String DramaSearchActivity = "/KlcDrama/DramaSearchActivity";
+    /**
+     * 我的剧集
+     */
+    public static final String DramaMyActivity = "/KlcDrama/DramaMyActivity";
+}

+ 115 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/ARouterValueNameConfig.java

@@ -0,0 +1,115 @@
+package com.kalacheng.base.config;
+
+
+/**
+ * 路由跳转传值的key的名称
+ */
+public class ARouterValueNameConfig {
+    public static final String USER_ID = "userId";
+    public static final String POSITION = "position";
+    public static final String ID = "id";
+    public static final String TITLE = "title";
+    public static final String CONTENT = "content";
+    public static final String Beans = "beans";
+    public static final String TYPE = "TYPE";
+    public static final String FROM_TYPE = "fromType";
+
+    //多人语音
+    public static final String isSmall = "isSmall";//加入语音房间是否是最小化
+
+    //多人直播
+    public static final String LIVE_SLIDE_TYPE = "slideType";
+    public static final String LIVE_CHANNEL_ID = "channelId";
+    public static final String LIVE_CITY = "city";
+    public static final String LIVE_FIND_TYPE = "findType";
+    public static final String LIVE_GUILD_ID = "guildId";
+    public static final String LIVE_HOT_SORT_ID = "hotSortId";
+    public static final String LIVE_IS_ATTENTION = "isAttention";
+
+    //拍摄
+    public static final String DYNAMIC_RESULT_TYPE = "dynamicResultType";//拍摄返回类型,0 图片;1 视频
+    public static final String PICTURE_LIST = "pictureList";//图片上传
+    public static final String VIDEO_DURATION = "videoDuration";
+    public static final String VIDEO_PATH = "videoPath";
+    public static final String VOICE_PATH = "voicePath";
+    public static final String VOICE_TIME = "voiceTime";
+
+    //短视频、动态
+    public static final String VIDEO_TYPE = "videoType";
+    public static final String MESSAGE_TYPE = "messageType";// 来源-1查看详情1消息评论2消息点赞
+    public static final String COMMENT_ID = "commentId";// 评论id(通知列表的commentId)没有则传-1
+    public static final String VIDEO_PAGE = "videoPage";
+    public static final String CLASSIFY_ID = "classifyId";
+    public static final String VIDEO_SORT = "videoSort";
+    public static final String VIDEO_WORKS_TYPE = "videoWorksType";
+    public static final String COMMUNITY_TYPE = "communityType";
+    public static final String COMMUNITY_HOT_ID = "communityHotId";
+    public static final String COMMUNITY_UID = "communityUid";
+
+    //定位
+    public static final String LATITUDE = "latitude";
+    public static final String LONGITUDE = "longitude";
+    public static final String STORE = "store";
+    public static final String ADDRESS = "ADDRESS";
+    public static final String CITY = "city";
+
+    //私信
+    public static final String IS_SINGLE = "isSingle";//是否为私聊
+    public static final String CHAT_GROUP_TYPE = "chatGroupType";//群聊类型
+
+    //排行榜
+    public static final String RANK_SUPER_INDEX = "rankSuperIndex";//一级界面选中第几项
+    public static final String RANK_SECOND_INDEX = "rankSecondIndex";//二级界面选中第几项
+
+    //WebView
+    public static final String WEB_URL = "webUrl";
+    public static final String WebActivityType = "WebActivityType";//WebViewActivity特殊类型
+
+    //直播购
+    public static final String AuditStatus = "AuditStatus"; // 官方小店审核状态
+    public static final String AuditRemake = "AuditRemake"; // 官方小店审核内容
+    public static final String isUp = "isUp";
+    public static final String goodsId = "goodsId";
+    public static final String shopCarBeans = "shopCarBeans";
+    public static final String shopAddress = "shopAddress";
+    public static final String businessId = "businessId";
+    public static final String shopGoods = "shopGoods";
+    public static final String ShopAttrList = "ShopAttrList";
+    public static final String orderId = "orderId";
+    public static final String addressId = "addressId";
+    public static final String addressBean = "addressBean";
+    public static final String orderNo = "orderNo";
+    public static final String logisticsNumber = "logisticsNumber";
+
+    //寻觅
+    public static final String SKILL_EDIT_TYPE = "skillEditType";//技能提交类型 0 新增;1 修改
+    public static final String SKILL_TYPE = "skillType";//技能类型
+    public static final String SKILL_PRICE = "skillPrice";//技能价格
+    public static final String SKILL_HIGHEST_PRICE = "skillHighestPrice";//技能最高价格
+    public static final String SKILL_LOWEST_PRICE = "skillLowestPrice";//技能最低价格
+    public static final String SKILL_TYPE_ID = "skillTypeId";//技能类型ID
+    public static final String SKILL_TYPE_NAME = "skillTypeName";//技能类型名称
+    public static final String SKILL_TIME_IDS = "skillTimeIds";//档期
+    public static final String SKILL_TIME_NAMES = "skillTimeNames";//档期名称
+    public static final String SKILL_LABEL_IDS = "skillLabelIds";//技能标签ids
+    public static final String SKILL_LABEL_NAMES = "skillLabelNames";//技能标签名称
+    public static final String SKILL_WORD = "skillWord";//技能介绍
+    public static final String SKILL_VO = "skillVo";//用户技能VO
+    public static final String SKILL_IMG_URL = "skillImgUrl";//图片地址
+    public static final String USER_SKILL_LIST = "userSkillList";//用户技能列表
+    public static final String SEEK_ORDER_ID = "seekOrderId";//寻觅,订单ID
+    public static final String SEEK_PICTURE_FRONT = "seekPictureFront";//身份证正面
+    public static final String SEEK_PICTURE_REVERSE = "seekPictureReverse";//身份证背面
+    public static final String SEEK_PICTURE_HAND = "seekPictureHand";//身份证手持
+
+    //家族
+    public static final String FAMILY_ID = "familyId";//家族ID
+    public static final String FAMILY_ROLE = "familyRole";//家族角色
+    public static final String FAMILY_INFO = "familyInfo";//家族对象
+    public static final String FAMILY_MEMBER_ROLE_SHOW = "familyMemberRoleShow";//家族成员,显示角色
+
+    //剧集
+    public static final String DRAMA_PLAY_TYPE = "dramaPlayType";//电视播放类型,0 电视剧id;1 剧集id
+    public static final String DRAMA_ID = "dramaId";//电视剧id
+    public static final String DRAMA_ANTHOLOGY_ID = "dramaAnthologyId";//剧集id
+}

+ 23 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/AppConstants.java

@@ -0,0 +1,23 @@
+package com.kalacheng.base.config;
+
+import com.kalacheng.util.utils.DpUtil;
+
+/**
+ * App常量
+ */
+public class AppConstants {
+
+    public static boolean isJump = false;// 判断是否推送点进来。
+    public static boolean isIntegralJump = false;//是否由“积分APP”点击跳转而来
+    public static boolean isDisplayRobChat = false;//1V1,显示抢单的弹框,false 显示;true 不显示
+    public static double VIDEORATIO = 0.32;
+    public static final float mVideoRadio = 1.6f;//视频宽高比
+
+    /**
+     * 视频高度
+     */
+    public static int getVideoHeight() {
+        return (int) (DpUtil.getScreenWidth() / 2 * mVideoRadio);
+    }
+
+}

+ 40 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/FilePathConstants.java

@@ -0,0 +1,40 @@
+package com.kalacheng.base.config;
+
+
+import android.os.Environment;
+
+import com.kalacheng.base.activty.BaseApplication;
+
+/**
+ * 文件保存路径
+ */
+public class FilePathConstants {
+
+    //android 6.0以下外部sd卡
+    public static final String DCIM_PATH_SYSTEM_6 = Environment.getExternalStorageDirectory().getAbsolutePath();
+    //android 6.0以上外部sd卡
+    public static final String DCIM_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
+    //内部存储 /data/data/<application package>/files目录
+    public static final String INNER_PATH = BaseApplication.getInstance().getFilesDir().getAbsolutePath();
+    //文件夹名字
+    private static final String DIR_NAME = "klc";
+
+    //保存视频的时候,在sd卡存储短视频的路径DCIM下
+    public static final String VOICE_PATH = DCIM_PATH + "/" + DIR_NAME + "/voice/";
+    //下载音乐的时候保存的路径
+    public static final String MUSIC_PATH = DCIM_PATH + "/" + DIR_NAME + "/music/";
+    //拍照时图片保存路径6.0以上
+    public static final String CAMERA_IMAGE_PATH = DCIM_PATH + "/" + DIR_NAME + "/camera/";
+    //拍照时图片保存路径6.0以下
+    public static final String CAMERA_IMAGE_PATH_SYSTEM_6 = DCIM_PATH + "/" + DIR_NAME + "/camera/";
+
+    //礼物特效,放在内部存储中,不需要存储权限
+    public static final String GIF_PATH = INNER_PATH + "/" + DIR_NAME + "/gif/";
+    //音效路径
+    public static final String AIR_PATH = INNER_PATH + "/" + DIR_NAME + "/air/";
+    //下载头像位置(三方登录头像先下载后再上传,防止路径过长)
+    public static final String AVATAR_PATH = INNER_PATH + "/" + DIR_NAME + "/avatar/";
+
+    public static final String PIC_PATH = DCIM_PATH + "/" + DIR_NAME + "/pic/";
+
+}

+ 31 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/HttpConstants.java

@@ -0,0 +1,31 @@
+package com.kalacheng.base.config;
+
+import com.example.base.R;
+import com.kalacheng.util.utils.ConfigUtil;
+
+public class HttpConstants {
+    //网络请求每页数量
+    public static final int PAGE_SIZE = 30;
+    //默认经度
+    public static final float LNG = 114.42173f;
+    //默认纬度
+    public static final float LAT = 30.471287f;
+
+    //下载tag
+    public static final String DOWNLOAD_GIF = "downloadGif";
+    public static final String DOWNLOAD_AIR = "downloadAir";
+    public static final String DOWNLOAD_AVATAR = "downloadAvatar";
+    public static final String DOWNLOAD_PIC = "downloadPic";
+    public static final String DOWNLOAD_MUSIC = "downloadMusic";
+
+    //贵族H5地址
+    public static String URL_NOBLE = "/pub/h5page/index.html#/noblePrivilege?";
+
+    static {
+        if (ConfigUtil.getIntValue(R.integer.vipModel) == 0) {
+            URL_NOBLE = "/pub/h5page/index.html#/noblePrivilege?";
+        } else if (ConfigUtil.getIntValue(R.integer.vipModel) == 1) {
+            URL_NOBLE = "/pub/h5page/index.html#/openMembership?";
+        }
+    }
+}

+ 33 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/JsonServiceImpl.java

@@ -0,0 +1,33 @@
+package com.kalacheng.base.config;
+
+
+import android.content.Context;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.facade.service.SerializationService;
+import com.alibaba.fastjson.JSON;
+
+import java.lang.reflect.Type;
+
+@Route(path = "/service/json")
+public class JsonServiceImpl implements SerializationService {
+    @Override
+    public void init(Context context) {
+
+    }
+
+    @Override
+    public <T> T json2Object(String text, Class<T> clazz) {
+        return JSON.parseObject(text, clazz);
+    }
+
+    @Override
+    public String object2Json(Object instance) {
+        return JSON.toJSONString(instance);
+    }
+
+    @Override
+    public <T> T parseObject(String input, Type clazz) {
+        return JSON.parseObject(input, clazz);
+    }
+}

+ 244 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/LiveConstants.java

@@ -0,0 +1,244 @@
+package com.kalacheng.base.config;
+
+/**
+ * 直播相关数据
+ */
+public class LiveConstants {
+    public static long sRoomId;
+    public static long sAnchorId;
+    public static ROLE sRole;//角色
+    public static STATUS sStatus;//状态
+    public static long sLinkSessionId;//会话ID,用于连麦、互动、PK的整个过程
+    public static boolean sVoiceAnchorInvitation = false;//判断是否是主播邀请(多人语音)
+    public static boolean sIsOOOSend;//一对一邀请,是否为发起者
+    public static long sOOOSessionId;//一对一会话ID
+    public static long sOOOFeeUid;//一对一消费者id
+
+    public static boolean sSmall = false;//语音直播间 是否是最小化
+    public static boolean isPlayMusic = false;//判断是否在播放音乐
+
+    //一对一,全局变量
+    public static boolean sOOOCloseLocalCamera = false;//一对一,本地摄像头是否关闭
+    public static boolean sOOOMuteMike = false;//一对一,麦克风是否关闭
+    public static boolean sOOOMuteRemoteAudio = false;//一对一,是否静音
+
+    //多人直播,全局变量
+    public static boolean sLiveMuteRemoteAudio = false;//多人直播,是否静音
+
+    //多人语音,全局变量
+    public static boolean sVoiceMuteMike = false;//多人语音,麦克风是否关闭
+    public static boolean sVoiceMuteRemoteAudio = false;//是否静音
+    public static boolean isDesktopLive = false; // 是否电脑直播
+
+    public enum STATUS {
+        ANCHOR("主播,多人语音在主持位"), AUDIENCE("用户,多人语音在麦下"), BROADCAST("SVIP副播,多人语音在麦上,多人直播观众连麦"), AUDIENCE_ONE2ONE("一对一俩用户打电话");
+
+        private String desc;
+
+        /**
+         * 私有构造,防止被外部调用
+         */
+        private STATUS(String desc) {
+            this.desc = desc;
+        }
+
+        /**
+         * 定义方法,返回描述,跟常规类的定义没区别
+         */
+        public String getDesc() {
+            return desc;
+        }
+    }
+
+    public enum ROLE {
+        OWNER("主播,所有者"), ADMIN("管理员"), USER("用户");
+
+        private String desc;
+
+        private ROLE(String desc) {
+            this.desc = desc;
+        }
+
+        public String getDesc() {
+            return desc;
+        }
+    }
+
+    public static String LM_VoiceToSmall = "LM_VoiceToSmall";//多人语音房间,进入最小化
+    public static String LM_isSmall = "LM_isSmall";//从最小化进入 (用于跳转到观众Activity 通知Component 是最小化跳转进来)
+    public static String LM_PhoneBack = "LM_PhoneBack";//手机回退按钮事件
+    public static String LM_ExitRoom = "LM_ExitRoom";//关闭Activity界面
+    public static String LM_FrontAndRearCameras = "LM_FrontAndRearCameras";//设置前后摄像头
+    public static String LM_HttpCloseLive = "LM_HttpCloseLive";//多人直播、多人语音,网络请求挂断
+    public static String LM_OOOCallEnd = "LM_OOOCallEnd";//一对一,网络请求挂断
+
+    //公共部分
+    public static String LM_LIFT = "LM_LIFT";//滑动屏幕的方向,左
+    public static String LM_RIGHT = "LM_RIGHT";//滑动屏幕的方向,右
+
+    //多人视频
+    public static String LM_LiveSlide = "LM_LiveSlide";//视频直播间,上下滑动数据
+    public static String LM_LiveOpenParameter = "LM_LiveOpenParameter";//视频直播间,开播参数
+    public static String LM_LiveActivityStart = "LM_LiveActivityStart";//视频直播间,onStart生命周期
+    public static String LM_LiveActivityStop = "LM_LiveActivityStop";//视频直播间,onStop生命周期
+    public static String RoomInfoList = "RoomInfoList"; // AppJoinRoomVO App 加入直播间响应
+    public static String LM_OpenLiveMsg = "LM_OpenLiveMsg";//视频直播,开播成功
+    public static String LM_ChoiceLiveType = "LM_ChoiceLiveType";//选择直播类型
+    public static String LM_ChoiceLiveTypeValue = "LM_ChoiceLiveTypeValue";//选择直播类型值
+    public static String LM_ChoiceChannelType = "LM_ChoiceChannelType";//选择直播频道
+    public static String LM_ChoiceChannelTypeValue = "LM_ChoiceChannelTypeValue";//选择直播频道类型值
+    public static String LM_LookNumber = "LM_LookNumber";//视频直播查看观看人数
+    public static String LM_LiveMore = "LM_LiveMore";//视频直播间更多弹窗
+    public static String LM_LiveSetting = "LM_LiveSetting";//视频主播设置
+    public static String LM_RoomTitleChange = "LM_RoomTitleChange";//修改房间名称
+    public static String LM_LiveForbidden = "LM_LiveForbidden";//主播禁言列表
+    public static String LM_LiveAdministrators = "LM_LiveAdministrators";//主播管理员列表
+    public static String LM_KickList = "LM_KickList";//踢人列表
+    public static String LM_SendGift = "LM_SendGift";//赠送礼物
+    public static String LM_AddFansGroup = "LM_AddFansGroup";//加入粉丝团
+    public static String LM_ModifyRoomNotice = "LM_ModifyRoomNotice";//主播修改直播公告
+    public static String LM_ChoiceLiveTypeSusser = "LM_ChoiceLiveTypeSusser";//主播修改直播类型成功
+    public static String LM_LiveTime = "LM_LiveTime";//直播时长
+    public static String LM_UserFollow = "LM_UserFollow";//用户关注
+    public static String LM_UserFollowSuccess = "LM_UserFollowSuccess";//用户关注成功
+    public static String LM_NoMoney = "LM_NoMoney";//余额不足充值
+    public static String LM_LiveHot = "LM_LiveHot";//火力值
+    public static String LM_TipsAddFansGroup = "LM_TipsAddFansGroup";//提示用户加入粉丝团
+    public static String LM_AddFansGroupSuccess = "LM_AddFansGroupSuccess";//加入粉丝团成功
+    public static String LM_GetMapAddress = "LM_GetMapAddress";//获取地图定位
+    public static String LM_EnableLocalVideo = "LM_EnableLocalVideo";//本地视频打开或关闭事件
+    public static String LM_ReceiveStartLinkMic = "LM_ReceiveStartLinkMic"; // 主播同意连麦 (自己身份为用户)
+    public static String LM_LaunchCloseLinkMic = "LM_LaunchCloseLinkMic"; // 观众退出连麦
+    public static String LM_LaunchInteraction = "LM_LaunchInteraction";//邀请互动
+    public static String LM_ReceiveCloseInteraction = "LM_ReceiveCloseInteraction";//主播PK连麦断开
+    public static String LM_StartInteraction = "LM_StartInteraction";//对方主播同意互动
+    public static String LM_StopAndPlayMedia = "LM_StopAndPlayMedia"; // 房间暂停或播放 (暂停直播 视频和声音 用于控制播放)
+    public static String LM_Deduction = "LM_Deduction"; // 扣费验证 (付费房间 门票房间 VIP房间  用于扣费)
+    public static String LM_OpenChat = "LM_OpenChat";//@TA
+    public static String Information = "Information";//直播间查看个人信息卡片
+    public static String LiveShare = "LiveShare";//直播间分享
+    public static String LM_BeautyShow = "LM_BeautyShow";//美颜弹窗
+    public static String LM_MessageForGift = "LM_MessageForGift";//火力值修改
+    public static String LM_GiftMsg = "LM_GiftMsg";//送礼物消息
+    public static String LM_MusicAdd = "LM_MusicAdd";//音乐控件添加
+    public static String LM_MusicDelete = "LM_MusicDelete";//音乐控件删除
+    public static String LM_Music = "LM_Music";//音乐
+    public static String LM_Music_UpLoad = "LM_Music_UpLoad";//上传音乐
+    public static String LM_WishList = "LM_WishList";//心愿单
+    public static String LM_AddWishList = "LM_AddWishList";//心愿单
+    public static String LM_AskReward = "LM_AskReward";//求赏
+    public static String LM_AddWishListSuccess = "LM_AddWishListSuccess";//心愿单成功
+    public static String LM_MusicVoice = "LM_MusicVoice";//音乐声音
+    public static String LM_LiveFamily = "LM_LiveFamily";//家族
+    public static String LM_RedEnvelopeAdd = "LM_RedEnvelopeAdd";//发红包
+    public static String LM_RedEnvelopeOpen = "LM_RedEnvelopeOpen";//打开红包
+    public static String LM_LivePkTimeSelect = "LM_LivePkTimeSelect";//视频直播,PK时长选择
+    public static String LM_LivePkTimeSelectResult = "LM_LivePkTimeSelectResult";//视频直播,PK时长选择结果
+    public static String LM_VoiceGiveBeautifulNumber = "LM_VoiceGiveBeautifulNumber";//赠送靓号
+    public static String LM_OPEN_CLOSE_MIC = "LM_OpenCloseMic"; // 是否开启麦克风
+    public static String LM_BuyVipSeats = "LM_BuyVipSeats";//贵宾席弹窗
+    public static String LM_BuyVipSeatsSuccess = "LM_BuyVipSeatsSuccess";//购买贵宾席成功
+    public static String LM_LiveAdsList = "LM_LiveAdsList";//直播间二级广告
+    public static String LM_LiveAdsWebUrl = "LM_LiveAdsWebUrl";//直播间广告,url
+    public static String LM_LiveSendContactInfo = "LM_LiveSendContactInfo";//发送联系方式
+    public static String LM_LiveReceiveContactInfo = "LM_LiveReceiveContactInfo";//接收联系方式
+
+    //多人语音
+    public static String LM_VoiceOpenParameter = "LM_VoiceOpenParameter";//语音直播间,开播参数
+    public static String LM_VoiceEnterPkNone = "LM_VoiceEnterPkNone";//进入语音房间时,直播间无PK状态样式
+    public static String LM_VoiceBgChoice = "LM_VoiceBgChoice";//房间背景图片选择
+    public static String LM_VoiceNotice = "LM_VoiceNotice";//语音公告
+    public static String LM_VOICE_LIVE_AIR = "LM_voiceLiveAir";//音效氛围
+    public static String LM_VOICE_LIVE_EMJ = "LM_VoiceLiveEmj";//表情包
+    public static String LM_OpenVoiceLiveTime = "LM_OpenVoiceLiveTime";//语音开播倒计时
+    public static String LM_VoicePkDialog = "LM_VoicePkDialog";//语音房间选择PK模式弹窗
+    public static String LM_VoicePkMatchDialog = "LM_VoicePkMatchDialog";//pk (正在匹配 / 即将进入)
+    public static String LM_VoiceConnectionManage = "LM_VoiceConnectionManage";//连麦管理
+    public static String LM_VoicePKConnection = "LM_VoicePKConnection";//连麦
+    public static String LM_VoiceMore = "LM_VoiceMore";//更多
+    public static String LM_UserApplyConnectMike = "LM_UserApplyConnectMike";//直播间内游客申请上麦,给主播发送申请通知信息
+    public static String LM_AnchorOperationMike = "LM_AnchorOperationMike";//主播操作麦上的人
+    public static String LM_AnchorSticker = "LM_AnchorSticker";//主播动态表情
+    public static String LM_UpMike = "LM_UpMike";//上麦
+    public static String LM_DownMike = "LM_DownMike";//下麦
+    public static String LM_OffMike = "LM_CloseMike";//开关麦(音量)操作
+    public static String LM_AnchorOffMike = "LM_AnchorOffMike";//主播开关麦(音量)操作
+    public static String LM_VolumeValue = "LM_VolumeValue";//多人语音音量值
+    public static String LM_BGImage = "LM_BGImage";//更改背景图片
+    public static String LM_VoiceOBOPkUpData = "LM_VoiceOBOPkUpData";//单人pk中更新数据
+    public static String LM_VoicePkMatchOBO = "LM_VoicePkMatchOBO";//单人pk准备
+    public static String LM_VoicePKOBOPunishment = "LM_VoicePKOBOPunishment";//语音一对一pk惩罚
+    public static String LM_VoicePkOBOStart = "LM_VoicePkStart";//语音一对一pk开始
+    public static String LM_VoiceOBOCancelPK = "LM_VoiceOBOCancelPK";//退出一对一pk
+    public static String LM_VoicePKOBOGiftValue = "LM_VoicePKOBOGiftValue";//一对一pk送礼数据
+    public static String LM_VoicePKOBOExpression = "LM_VoicePKOBOExpression";//一对一pk表情表
+    public static String LM_VoiceRoomPkUpData = "LM_VoiceRoomPkUpData";//房间内pk中更新数据
+    public static String LM_VoicePkMatchRoom = "LM_VoicePkMatchRoom";//房间内pk准备
+    public static String LM_VoiceRoomPK = "LM_VoiceRoomPK";//语音房间内pk
+    public static String LM_VoiceRoomPKWin = "LM_VoiceRoomPKWin";//语音房间内pk胜利
+    public static String LM_VoicePKRoomPunishment = "LM_VoicePKRoomPunishment";//语音房间内pk惩罚
+    public static String LM_VoicePkRoomStart = "LM_VoicePkRoomStart";//语音房间pk开始
+    public static String LM_VoiceRoomCancelPK = "LM_VoiceRoomCancelPK";//退出房间pk
+    public static String LM_VoicePKRoomGiftValue = "LM_VoicePKRoomGiftValue";//房间pk送礼数据
+    public static String LM_VoiceRoomPkUpExpression = "LM_VoiceRoomPkUpExpression";//房间pk更新表情
+    public static String LM_VoiceMikeLayoutAdd = "LM_VoiceMikeLayoutAdd";//正常房间布局添加
+    public static String LM_VoiceOboPkLayoutAdd = "LM_VoiceOboPkLayoutAdd";//单人PK布局添加
+    public static String LM_VoiceTeamPkLayoutAdd = "LM_VoiceTeamPkLayoutAdd";//激情团战布局添加
+    public static String LM_VoiceRoomPkLayoutAdd = "LM_VoiceRoomPkLayoutAdd";//房间PK布局添加
+    public static String LM_VoicePKSelfSendGift = "LM_VoicePKSelfSendGift";//自己pk送礼
+    public static String LM_VoicePKOtherSendGift = "LM_VoicePKOtherSendGift";//对方pk送礼
+    public static String LM_VoicePkMatchTeam = "LM_VoicePkMatchTeam";//激情团队pk(直播间对直播间)准备
+    public static String LM_VoicePKTeamPunishment = "LM_VoicePKTeamPunishment";//激情团队pk惩罚
+    public static String LM_VoicePkTeamStart = "LM_VoicePkTeamStart";//激情团队pk开始
+    public static String LM_VoiceTeamCancelPK = "LM_VoiceTeamCancelPK";//退出激情团队pk
+    public static String LM_VoiceTeamPkUpData = "LM_VoiceTeamPkUpData";//激情团战更新数据
+    public static String LM_VoicePKTeamGiftValue = "LM_VoicePKTeamGiftValue";//激情团战pk送礼数据
+    public static String LM_VoicePkUserKicked = "LM_VoicePkUserKicked";//语音pk时用户退出连麦
+    public static String LM_VoicePKPunishmentEnd = "LM_VoicePKPunishmentEnd";//语音pk惩罚结束
+    public static String LM_VoicePkTimeOut = "LM_VoicePkTimeOut";//语音pk超时
+    public static String LM_VoicePresenter = "LM_VoicePresenter";//语音房间,主持人信息
+    public static String LM_VoiceRefreshPresenter = "LM_VoiceRefreshPresenter";//语音房间,主持人信息刷新,火力值变化触发
+    public static String LM_VoiceRoomTotalVotes = "LM_VoiceRoomTotalVotes";//语音房间,总火力值变化
+    public static String LM_VoiceMikeList = "LM_VoiceMikeList";//一般模式下,麦序列表刷新
+    public static String LM_VoiceRoleChange = "LM_VoiceRoleChange";//房间角色变化
+    public static String LM_VoiceReplyToBePresenter = "LM_VoiceReplyToBePresenter";//主持人回复上主持位请求
+    public static String LM_VoiceReplyAuthorInvite = "LM_VoiceReplyAuthorInvite";//用户回复邀请上麦
+
+    //一对一视频、语音
+    public static String LM_OneVoiceVolume = "LM_OneVoiceVolume";//邀请失败
+    public static String LM_OOOStartCall = "LM_OOOStartCall";//发起通话
+    public static String LM_OOOLiveHangUp = "LM_OOOLiveHangUp";//挂断
+    public static String LM_OOOLiveLinkOK = "LM_OOOLiveLinkOK";//视频接通
+    public static String LM_OOOLiveEstablish = "LM_OOOLiveEstablish";//创建直播云回调
+    public static String LM_OOOLiveMore = "LM_OOOLiveMore";//更多
+    public static String LM_OOOLiveSendGift = "LM_OOOLiveSendGift";//一对一视频送礼
+    public static String LM_OOOErrorHangUp = "LM_OOOErrorHangUp";//直播云异常退出
+    public static String LM_OOOEndRequest = "LM_OOOEndRequest";//通话结束请求
+    public static String LM_OOOEndRequestGetTime = "LM_OOOEndRequestGetTime";//通话结束请求获取时间
+    public static String LM_OOOGoldInsufficient = "LM_OOOGoldInsufficient";//通话金额不足
+    public static String LM_OOOUpDataGold = "LM_OOOUpDataGold";//通话金额不足
+    public static String LM_OOOLiveOpenSVip = "LM_OOOLiveOpenSVip";//开通超级svip
+    public static String LM_OOOLiveChoiceSVip = "LM_OOOLiveChoiceSVip";//打开主播列表svip
+    public static String LM_OOOLiveSVipIsKickOut = "LM_OOOLiveSVipIsKickOut";//svip是否踢出邀请人
+    public static String LM_OOOLiveSVipJoinSuccess = "LM_OOOLiveSVipJoinSuccess";//svip副播加入成功
+    public static String LM_OOOLiveSVipSSideshowignOut = "LM_OOOLiveSVipSSideshowignOut";//svip副播退出或者踢出成功
+    public static String LM_OOOAudienceNoVip = "LM_OOOAudienceNoVip";//用户没有vip提示
+    public static String LM_OOOTimeTips = "LM_OOOTimeTips"; //到了规定时间 观众弹出 (喜欢就为我送礼物吧~)
+    public static String LM_OOOLiveAnchorWx = "LM_OOOLiveAnchorWx";//查看主播微信信息
+    public static String LM_OOOLiveMute = "LM_OOOLiveMute";//静音,目前只针对一对一视频,底部图标变化
+    public static String LM_OOOLiveSVipEstoppelSpeak = "LM_OOOLiveSVipEstoppelSpeak";//svip禁止某人发言
+    public static String LM_OOOLiveSVipSwitchSmallTOBig = "LM_OOOLiveSVipSwitchSmallTOBig";//svip大小图切换,小去大
+    public static String LM_OOOLiveSVipSwitchBigTOSmall = "LM_OOOLiveSVipSwitchBigTOSmall";//svip大小图切换,大去小
+    public static String LM_OOOLiveSvipCustom = "LM_OOOLiveSvipCustom";//一对一视频,点击SVIP按钮
+    public static String LM_OOOMonitoringTip = "LM_OOOMonitoringTip";//一对一,鉴黄提示
+
+    //直播购
+    public static String LM_LiveGoodsWindow = "LM_LiveGoodsWindow";//设置商品橱窗
+    public static String LM_LiveGoodsActivity = "LM_LiveGoodsActivity";//设置直播购活动
+    public static String LM_LiveGoodsList = "LM_LiveGoodsList";//设置直播购商品列表
+    public static String LM_UPDATE_LIVE_STATUS = "LM_UpdateLiveStatus"; // 切换普通直播和带货直播 type
+
+    //游戏
+    public static String LM_LiveTreasureChest = "LM_LiveTreasureChest";//百宝箱
+
+}

+ 41 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/config/RouterInterceptor.java

@@ -0,0 +1,41 @@
+package com.kalacheng.base.config;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.alibaba.android.arouter.facade.Postcard;
+import com.alibaba.android.arouter.facade.annotation.Interceptor;
+import com.alibaba.android.arouter.facade.callback.InterceptorCallback;
+import com.alibaba.android.arouter.facade.template.IInterceptor;
+
+/**
+ * <p>
+ * 比较经典的应用就是在跳转过程中处理登陆事件,这样就不需要在目标页重复做登陆检查
+ * 拦截器会在跳转之前执行,多个拦截器会按优先级顺序依次执行
+ * <p>
+ * priority就是优先级 可以设置多个级别的拦截器都活一次执行
+ * 创建一个实现IInterceptor接口的类就是一个拦截器,不用做额外的配置了
+ */
+@Interceptor(priority = 8, name = "测试用拦截器")
+public class RouterInterceptor implements IInterceptor {
+    @Override
+    public void process(Postcard postcard, InterceptorCallback callback) {
+
+        if (postcard.getPath().contains(ARouterPath.MainActivity)) {
+            Log.d("danxx", "拦截到向FragmentGirls跳转");
+            //自定义处理
+        } else {
+            Log.d("danxx", "非拦截跳转执行path: " + postcard.getPath());
+        }
+
+        callback.onContinue(postcard);  // 处理完成,交还控制权
+        // callback.onInterrupt(new RuntimeException("我觉得有点异常"));   // 觉得有问题,中断路由流程
+        // 以上两种至少需要调用其中一种,否则不会继续路由
+    }
+
+    @Override
+    public void init(Context context) {
+        // 拦截器的初始化,会在sdk初始化的时候调用该方法,仅会调用一次
+        Log.d("danxx", "RouterInterceptor init");
+    }
+}

+ 7 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/AccountDisableEvent.java

@@ -0,0 +1,7 @@
+package com.kalacheng.base.event;
+/*
+* 账号禁用
+* */
+public class AccountDisableEvent {
+    public String obj;
+}

+ 8 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/AnchorRequestEvent.java

@@ -0,0 +1,8 @@
+package com.kalacheng.base.event;
+
+/**
+ * 需要进行主播认证事件
+ */
+public class AnchorRequestEvent {
+
+}

+ 14 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/FamilyFirstUserEvent.java

@@ -0,0 +1,14 @@
+package com.kalacheng.base.event;
+
+/**
+ * 聊天室排名第一的用户头像(日榜贡献榜)
+ */
+public class FamilyFirstUserEvent {
+    public long familyId;
+    public String contributionFirstAvatar;
+
+    public FamilyFirstUserEvent(long familyId, String contributionFirstAvatar) {
+        this.familyId = familyId;
+        this.contributionFirstAvatar = contributionFirstAvatar;
+    }
+}

+ 8 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/GpsEvent.java

@@ -0,0 +1,8 @@
+package com.kalacheng.base.event;
+
+/**
+ * 打开GPS
+ */
+public class GpsEvent {
+
+}

+ 12 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/GuardBuySuccessEvent.java

@@ -0,0 +1,12 @@
+package com.kalacheng.base.event;
+
+/**
+ * 守护购买成功
+ */
+public class GuardBuySuccessEvent {
+    public long userId;
+
+    public GuardBuySuccessEvent(long userId) {
+        this.userId = userId;
+    }
+}

+ 8 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomePageGoTrendEvent.java

@@ -0,0 +1,8 @@
+package com.kalacheng.base.event;
+
+/**
+ * 个人主页,跳转至“动态”项
+ */
+public class HomePageGoTrendEvent {
+
+}

+ 12 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomePageRefreshEvent.java

@@ -0,0 +1,12 @@
+package com.kalacheng.base.event;
+
+/**
+ * 个人主页刷新
+ */
+public class HomePageRefreshEvent {
+    public int type;//0 编辑资料;
+
+    public HomePageRefreshEvent(int type) {
+        this.type = type;
+    }
+}

+ 12 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomeRewardFirstChargeEvent.java

@@ -0,0 +1,12 @@
+package com.kalacheng.base.event;
+
+/**
+ * 首充奖励
+ */
+public class HomeRewardFirstChargeEvent {
+    public boolean show;
+
+    public HomeRewardFirstChargeEvent(boolean show) {
+        this.show = show;
+    }
+}

+ 21 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/HomeRewardOne2OneEvent.java

@@ -0,0 +1,21 @@
+package com.kalacheng.base.event;
+
+/**
+ * 一对一奖励
+ */
+public class HomeRewardOne2OneEvent {
+    /**
+     * 注册赠送通话时间(单位为分钟)
+     */
+    public int registerCallTime;
+
+    /**
+     * 剩余的注册赠送通话次数
+     */
+    public int registerCallSecond;
+
+    public HomeRewardOne2OneEvent(int registerCallTime, int registerCallSecond) {
+        this.registerCallTime = registerCallTime;
+        this.registerCallSecond = registerCallSecond;
+    }
+}

+ 8 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImClearEvent.java

@@ -0,0 +1,8 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,清空
+ */
+public class ImClearEvent {
+
+}

+ 12 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImDeleteMsgEvent.java

@@ -0,0 +1,12 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,删除某人的所有消息
+ */
+public class ImDeleteMsgEvent {
+    public long chat_UGID;
+
+    public ImDeleteMsgEvent(long chat_UGID) {
+        this.chat_UGID = chat_UGID;
+    }
+}

+ 60 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImMsgStatusChangeEvent.java

@@ -0,0 +1,60 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,消息发送状态
+ */
+public class ImMsgStatusChangeEvent {
+    private int code;//1发送成功;4发送超时
+    private long msgCId;
+    private long groupOrUid;
+    private boolean isGroupMsg;
+    private String note;
+
+    public ImMsgStatusChangeEvent(int code, long msgCId, long groupOrUid, boolean isGroupMsg, String note) {
+        this.code = code;
+        this.msgCId = msgCId;
+        this.groupOrUid = groupOrUid;
+        this.isGroupMsg = isGroupMsg;
+        this.note = note;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public long getMsgCId() {
+        return msgCId;
+    }
+
+    public void setMsgCId(long msgCId) {
+        this.msgCId = msgCId;
+    }
+
+    public long getGroupOrUid() {
+        return groupOrUid;
+    }
+
+    public void setGroupOrUid(long groupOrUid) {
+        this.groupOrUid = groupOrUid;
+    }
+
+    public boolean isGroupMsg() {
+        return isGroupMsg;
+    }
+
+    public void setGroupMsg(boolean groupMsg) {
+        isGroupMsg = groupMsg;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+}

+ 8 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReadAllEvent.java

@@ -0,0 +1,8 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,一键已读
+ */
+public class ImReadAllEvent {
+
+}

+ 16 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReadEvent.java

@@ -0,0 +1,16 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,发送的消息已读
+ */
+public class ImReadEvent {
+    public long msgCId;
+    public long groupOrUid;
+    public boolean isGroup;
+
+    public ImReadEvent(long msgCId, long groupOrUid, boolean isGroup) {
+        this.msgCId = msgCId;
+        this.groupOrUid = groupOrUid;
+        this.isGroup = isGroup;
+    }
+}

+ 19 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReadMsgEvent.java

@@ -0,0 +1,19 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,已读某人的所有消息,ChatRoomActivity退出时抛出
+ */
+public class ImReadMsgEvent {
+    //chat_UGID,指会话的UGID
+    //如果是用户  chat_UGID   =userId*2;
+    //如果是家族  chat_UGID   =group*2+1;
+    //粉丝团的IM的UGID是 (5亿+粉丝团ID)*2+1;粉丝团的groupId是 5亿+粉丝团ID(主要是防止和家族ID冲突),500000000
+
+    // sender_UGID,群聊的时候的发送消息的人的UGID
+
+    public long chat_UGID;
+
+    public ImReadMsgEvent(long chat_UGID) {
+        this.chat_UGID = chat_UGID;
+    }
+}

+ 7 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/ImReceiveManyMsgEvent.java

@@ -0,0 +1,7 @@
+package com.kalacheng.base.event;
+
+/**
+ * IM,收到了若干条消息
+ */
+public class ImReceiveManyMsgEvent {
+}

+ 8 - 0
LibBase/KlcBase/src/main/java/com/kalacheng/base/event/KickOutRoomEvent.java

@@ -0,0 +1,8 @@
+package com.kalacheng.base.event;
+
+/**
+ * socket长时间断开,被踢出房间
+ */
+public class KickOutRoomEvent {
+
+}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů