zhanghongrui 3 veckor sedan
incheckning
27b47bc028
100 ändrade filer med 6006 tillägg och 0 borttagningar
  1. 30 0
      .gitignore
  2. 8 0
      app/.gitignore
  3. 78 0
      app/build.gradle
  4. BIN
      app/libs/comprehensive-lib-release.aar
  5. 314 0
      app/proguard-rules.pro
  6. 100 0
      app/src/main/AndroidManifest.xml
  7. 8 0
      app/src/main/assets/assetlinks.json
  8. 32 0
      app/src/main/assets/map_list.json
  9. 21 0
      app/src/main/assets/supermap.cer
  10. 169 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/MainActivity.java
  11. 100 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/SplashActivity.java
  12. 36 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/MainViewModel.java
  13. 29 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/ViewPagerAdapter.java
  14. 95 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/app/App.java
  15. 176 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/BannerDataBean.java
  16. 22 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/LogInRsaBean.java
  17. 228 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/LoginBean.java
  18. 39 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/MenuMainItemBean.java
  19. 234 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/daemo/SettingUtil.java
  20. 309 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventFragment.java
  21. 112 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainFragment.java
  22. 6 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainViewModel.java
  23. 46 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MineFragment.java
  24. 607 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/header/MyClassicsHeader.java
  25. 89 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/login/ConfigActivity.java
  26. 236 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/login/LoginActivity.java
  27. 20 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/login/LoginViewModel.java
  28. 52 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/net/BannerRequest.java
  29. 52 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/net/LoginGetKeyRequest.java
  30. 52 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/net/LoginRequest.java
  31. 23 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/net/RetrofitService.java
  32. 94 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/AppSystemUtils.java
  33. 195 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/CrashHandler.java
  34. 65 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/LongClickUtils.java
  35. 57 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/RSAUtils.java
  36. 110 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/ScreenUtil.java
  37. 311 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/web/WebViewActivity.java
  38. 16 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/web/WebViewModel.java
  39. 5 0
      app/src/main/res/anim/actionsheet_dialog_in.xml
  40. 5 0
      app/src/main/res/anim/actionsheet_dialog_out.xml
  41. 7 0
      app/src/main/res/anim/activity_out.xml
  42. 11 0
      app/src/main/res/anim/pophidden_anim.xml
  43. 12 0
      app/src/main/res/anim/popshow_anim.xml
  44. 11 0
      app/src/main/res/anim/progress.xml
  45. 11 0
      app/src/main/res/anim/push_bottom_in.xml
  46. 11 0
      app/src/main/res/anim/push_bottom_out.xml
  47. BIN
      app/src/main/res/drawable-hdpi/ic_launcher_logo_siping_tsgz_small.png
  48. 170 0
      app/src/main/res/drawable-v24/ic_launcher_background.xml
  49. 30 0
      app/src/main/res/drawable-v24/ic_launcher_foreground.xml
  50. BIN
      app/src/main/res/drawable-xhdpi/default_image.png
  51. BIN
      app/src/main/res/drawable-xhdpi/ic_launcher_logo_siping_tsgz_small.png
  52. BIN
      app/src/main/res/drawable-xxhdpi/ic_launcher_logo_siping_tsgz.png
  53. BIN
      app/src/main/res/drawable-xxhdpi/icon_daily.png
  54. BIN
      app/src/main/res/drawable-xxhdpi/icon_password_small.png
  55. BIN
      app/src/main/res/drawable-xxhdpi/icon_setting_small.png
  56. BIN
      app/src/main/res/drawable-xxhdpi/icon_username_account_small.png
  57. 6 0
      app/src/main/res/drawable/bg_tsgz_blue.xml
  58. 9 0
      app/src/main/res/drawable/ic_home.xml
  59. 12 0
      app/src/main/res/drawable/ic_me.xml
  60. 9 0
      app/src/main/res/drawable/ic_periphery.xml
  61. 9 0
      app/src/main/res/drawable/ic_tsgz.xml
  62. 9 0
      app/src/main/res/drawable/round_corner_top_letf_right.xml
  63. 5 0
      app/src/main/res/drawable/selector_navigation_tab_color.xml
  64. 7 0
      app/src/main/res/drawable/shape_background_white_change.xml
  65. 10 0
      app/src/main/res/drawable/shape_login_btn_solid_black.xml
  66. 110 0
      app/src/main/res/layout/activity_config.xml
  67. 228 0
      app/src/main/res/layout/activity_login.xml
  68. 43 0
      app/src/main/res/layout/activity_main.xml
  69. 10 0
      app/src/main/res/layout/activity_splash.xml
  70. 19 0
      app/src/main/res/layout/activity_web_view.xml
  71. 427 0
      app/src/main/res/layout/fragment_main.xml
  72. 22 0
      app/src/main/res/menu/bottom_emergency_navigation_tab.xml
  73. 21 0
      app/src/main/res/menu/bottom_navigation_tab.xml
  74. 22 0
      app/src/main/res/menu/bottom_navigation_tab_tsgz.xml
  75. 16 0
      app/src/main/res/menu/drawer_header.xml
  76. 5 0
      app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  77. 5 0
      app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  78. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher.png
  79. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  80. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.png
  81. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  82. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher.png
  83. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  84. BIN
      app/src/main/res/mipmap-xxhdpi/bg_login_siping_tsgz.png
  85. BIN
      app/src/main/res/mipmap-xxhdpi/bg_login_suihua_tsgz.png
  86. BIN
      app/src/main/res/mipmap-xxhdpi/bg_splash_tsgz.jpg
  87. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  88. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  89. 28 0
      app/src/main/res/navigation/nav_graph.xml
  90. 21 0
      app/src/main/res/raw/supermap.pem
  91. 3 0
      app/src/main/res/values-land/dimens.xml
  92. 4 0
      app/src/main/res/values-night/themes.xml
  93. 3 0
      app/src/main/res/values-w1240dp/dimens.xml
  94. 3 0
      app/src/main/res/values-w600dp/dimens.xml
  95. 51 0
      app/src/main/res/values/attrs.xml
  96. 66 0
      app/src/main/res/values/colors.xml
  97. 3 0
      app/src/main/res/values/dimens.xml
  98. 183 0
      app/src/main/res/values/strings.xml
  99. 193 0
      app/src/main/res/values/styles.xml
  100. 0 0
      app/src/main/res/values/themes.xml

+ 30 - 0
.gitignore

@@ -0,0 +1,30 @@
+*.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
+.cxx
+local.properties
+/gradlew
+/gradlew.bat
+/app/.idea/
+/app/build/
+/.idea/compiler.xml
+/.idea/deploymentTargetDropDown.xml
+/.idea/gradle.xml
+/gradle/wrapper/gradle-wrapper.jar
+/gradle/wrapper/gradle-wrapper.properties
+/.idea/jarRepositories.xml
+/.idea/misc.xml
+/.idea/vcs.xml
+/.idea/
+/base-lib/build/
+/silicompressor/build/

+ 8 - 0
app/.gitignore

@@ -0,0 +1,8 @@
+/build
+*.iml
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/captures

+ 78 - 0
app/build.gradle

@@ -0,0 +1,78 @@
+plugins {
+    id 'com.android.application'
+}
+android {
+    compileSdkVersion rootProject.ext.android.compileSdkVersion
+
+    defaultConfig {
+        applicationId rootProject.ext.android.applicationId
+        minSdkVersion rootProject.ext.android.minSdkVersion
+        targetSdkVersion rootProject.ext.android.targetSdkVersion
+        versionCode rootProject.ext.android.versionCode
+        versionName rootProject.ext.android.versionName
+
+        ndk {
+            abiFilters 'armeabi-v7a','arm64-v8a'
+        }
+        manifestPlaceholders = [
+                JPUSH_PKGNAME: rootProject.ext.android.applicationId,
+                JPUSH_APPKEY : rootProject.ext.android.jpush_appkey, //JPush 上注册的包名对应的 Appkey.
+                JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
+        ]
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        javaCompileOptions {
+            annotationProcessorOptions {
+                arguments = [moduleName: project.getName()]
+            }
+        }
+    }
+
+    dataBinding {
+        enabled = true
+    }
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+            android.applicationVariants.all { variant ->
+                variant.outputs.all {
+                    outputFileName = "yitihua_sp_taishiganzhi_${buildType.name}_v${defaultConfig.versionName}_${buildTime()}.apk"
+                }
+            }
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+//    ndkVersion '22.1.7171670'
+    packagingOptions {
+        exclude 'META-INF/proguard/coroutines.pro'
+    }
+    buildFeatures {
+        viewBinding true
+    }
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar', '*.so'])
+    implementation rootProject.ext.dependencies["appcompat"]
+    implementation rootProject.ext.dependencies["design"]
+    implementation project(':base-lib')
+    implementation(fileTree("libs"))
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+    implementation 'androidx.navigation:navigation-fragment:2.3.5'
+    implementation 'androidx.navigation:navigation-ui:2.3.5'
+    implementation 'io.github.youth5201314:banner:2.2.3'
+}
+
+
+static def buildTime() {
+    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
+}
+

BIN
app/libs/comprehensive-lib-release.aar


+ 314 - 0
app/proguard-rules.pro

@@ -0,0 +1,314 @@
+# 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
+
+###################以下为华为会议混淆文件###################
+
+# 不开启优化,因为android的dex并不像Java虚拟机需要optimize(优化)和preverify(预检)两个步骤。
+-dontoptimize
+#不使用大小写混合类名,注意,windows用户必须为ProGuard指定该选项,
+#因为windows对文件的大小写是不敏感的,也就是比如a.java和A.java会认为是同一个文件。
+#如果不这样做并且你的项目中有超过26个类的话,那么ProGuard就会默认混用大小写文件名,导致class文件相互覆盖
+-dontusemixedcaseclassnames
+#指定不去忽略非公共库的类和成员
+-dontskipnonpubliclibraryclasses
+-dontskipnonpubliclibraryclassmembers
+
+
+#抛出异常时保留代码行号,方便抛出异常时定位问题
+-keepattributes SourceFile,LineNumberTable
+#重命名抛出异常时的文件名称,方便抛出异常时定位问题
+-renamesourcefileattribute SourceFile
+# 混淆后就会生成映射文件
+# 包含有类名->混淆后类名的映射关系
+# 然后可以使用printmapping指定映射文件的名称
+-verbose
+
+
+# 不做预校验,preverify是proguard的4个步骤之一
+# Android不需要preverify,去掉这一步可加快混淆速度
+-dontpreverify
+
+
+# dump.txt文件列出apk包内所有class的内部结构
+-dump class_files.txt
+# seeds.txt文件列出未混淆的类和成员
+-printseeds seeds.txt
+# usage.txt文件列出从apk中删除的代码
+-printusage usage.txt
+# mapping.txt文件列出混淆前后的映射
+-printmapping mapping.txt
+
+
+#忽略library里面非public修饰的类。
+#library里的非公开类是不能被程序使用的,忽略掉这些类可以加快混淆速度。
+#但是请注意,有一种特殊情况:有些人编写的代码与类库中的类在同一个包下,而且对该包的非public类进行了使用,在这种情况下,就不能使用该选项了。
+#-skipnonpubliclibraryclasses
+
+
+# 保留注解,因为注解是通过反射机制来实现的
+-keepattributes *Annotation*
+# 保留js接口
+-keepattributes *JavascriptInterface*
+# 保留exception
+-keepattributes Exceptions
+# 保留内部类
+-keepattributes InnerClasses
+#保留泛型
+-keepattributes Signature
+
+
+#保留本地native方法不被混淆
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+
+#保留枚举类
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+# 保留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 **.R$* {
+    public static <fields>;
+}
+# 忽略support包下的警告
+-dontwarn android.support.**
+# 保留support包下的动画
+-keep class android.support.annotation.Keep
+
+
+
+
+-keep @android.support.annotation.Keep class * {*;}
+-keepclasseswithmembers class * {
+    @android.support.annotation.Keep <methods>;
+}
+-keepclasseswithmembers class * {
+    @android.support.annotation.Keep <fields>;
+}
+-keepclasseswithmembers class * {
+    @android.support.annotation.Keep <init>(...);
+}
+#保留系统类库
+-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.content.BroadcastReceiver
+-keep public class * extends android.preference.Preference
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.view.View {
+    public <init>(android.content.Context);
+    public <init>(android.content.Context, android.util.AttributeSet);
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+    public void set*(...);
+}
+
+
+#保留华为sdk相关
+-keep class com.hianalytics.android.**{*;}
+-keep class com.huawei.updatesdk.**{*;}
+-keep class com.huawei.hms.**{*;}
+-keep class com.huawei.android.hms.agent.**{*;}
+
+
+#OKhttp 混淆配置
+#https://github.com/square/okhttp/blob/5fe3cc2d089810032671d6135ad137af6f491d28/README.md#proguard
+-dontwarn okhttp3.**
+-dontwarn okio.**
+-dontwarn javax.annotation.**
+-dontwarn org.conscrypt.**
+# A resource is loaded with a relative path so the package of this class must be preserved.
+-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
+
+
+#Eventbus 混淆配置
+#http://greenrobot.org/eventbus/documentation/proguard/
+-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);
+#}
+
+
+#配置HME java不混淆,C++ 会调用,HMW-Video.jar
+-keep class com.huawei.media.audio.AudioDeviceAndroid { *;}
+-keep class com.huawei.media.audio.AudioDeviceAndroidService { *;}
+-keep class com.huawei.media.audio.JNIAudioDeviceImpl { *;}
+-keep class com.huawei.media.audio.JNIAudioDeviceMeetingImpl { *;}
+-keep class com.huawei.media.audio.JNIAudioDeviceRtcImpl { *;}
+-keep class com.huawei.media.video.Camera2Characteristic { *;}
+-keep class com.huawei.media.video.CaptureCapabilityAndroid { *;}
+-keep class com.huawei.media.video.DeviceInfo { *;}
+-keep class com.huawei.media.video.H264Decoder { *;}
+-keep class com.huawei.media.video.HmeDefinitions { *;}
+-keep class com.huawei.media.video.JNIBridge { *;}
+-keep class com.huawei.media.video.JNIBridgeImpl { *;}
+-keep class com.huawei.media.video.JNIMeetingImpl { *;}
+-keep class com.huawei.media.video.JNIRtcImpl { *;}
+-keep class com.huawei.media.video.KirinMediaCodecEncoder { *;}
+-keep class com.huawei.media.video.LogFile { *;}
+-keep class com.huawei.media.video.MediaCodecDecoder { *;}
+-keep class com.huawei.media.video.MediaCodecEncoder { *;}
+-keep class com.huawei.media.video.ScreenCaptureImageActivity { *;}
+-keep class com.huawei.media.video.SurfaceEncoder { *;}
+-keep class com.huawei.media.video.VideoCapture { *;}
+-keep class com.huawei.media.video.VideoCapture2Android { *;}
+-keep class com.huawei.media.video.VideoCaptureAndroid { *;}
+-keep class com.huawei.media.video.VideoCaptureDeviceInfo { *;}
+-keep class com.huawei.media.video.VideoCaptureDeviceInfoAndroid { *;}
+-keep class com.huawei.media.video.VideoRender { *;}
+-keep class com.huawei.media.video.VideoRenderNoGLES { *;}
+-keep class com.huawei.media.video.ViEAndroidGLES20 { *;}
+-keep class com.huawei.media.video.ViERenderer { *;}
+-keep class com.huawei.media.video.ViESurfaceRenderer { *;}
+-keep class com.huawei.media.video.VtNativeDecoder { *;}
+
+
+#配置TUP java 不混淆,c++ 会调用
+-keep class tupsdk.Tupmedia { *;} #TupCall.jar
+-keep class com.huawei.media.data.Conference { *;}  #TupConf.jar
+
+-keep class imssdk.** { *;}
+
+# rtc sdk 混淆
+-keep class com.huawei.rtc.**{*;}
+
+-keep class com.huawei.allplatform.**{*;}
+
+## native sdk 混淆
+-keep class com.huawei.hwmsdk.**{*;}
+
+# WebViewInterface 不能混淆
+-keepclassmembers class com.huawei.hwmclink.jsbridge.model.GHConfigModel {
+  public *;
+}
+
+# API不能被混淆
+-keep public class com.huawei.**.*Api { *;}
+-keep class com.huawei.cloudlink.openapi.api.ICloudLinkOpenApi{*;}
+-keep class com.huawei.cloudlink.openapi.api.impl.CloudLinkOpenApiImpl{*;}
+-keep class com.huawei.hwmbiz.IBizOpenApi{*;}
+-keep class com.huawei.hwmbiz.impl.BizOpenApiImpl{*;}
+
+
+#micro service 不能混淆,有反射调用,参考华为云配置
+-keep public class * extends com.huawei.hwmfoundation.microservice.HCMicroService
+-keep public class * extends com.mapp.hcmobileframework.microapp.HCMicroApplicationDelegate
+-keep public class * implements com.huawei.hwmclink.jsbridge.bridge.** {*;}
+
+
+#继承自AbsCache 的类,要保留构造函数,否则构造函数会被优化掉,这里保留所有的构造函数,不论有没有在使用
+-keepclassmembers class * {
+    <init>(...);
+}
+#RXJava 不能被混淆,因为内部有hook操作
+-keep class io.reactivex.**{*;}
+#自定义注解不能被混淆
+-keep public class com.huawei.hwmbiz.aspect.CheckToken
+-keep public class com.huawei.hwmfoundation.hook.annotation.TimeConsume
+-keep public class com.huawei.hwmfoundation.hook.annotation.HookDisable
+-keep public class com.huawei.hwmfoundation.hook.annotation.HookNotNeeded
+
+
+#glide 不混淆
+-keep class com.github.bumptech.glide.**{*;}
+#需要用json转换生成javabean 不混淆
+-keep public class * extends com.huawei.hwmfoundation.base.BaseModel{*;}
+
+
+#HMS SDK不可混淆
+-ignorewarnings
+-keepattributes *Annotation*
+-keepattributes Exceptions
+-keepattributes InnerClasses
+-keepattributes Signature
+-keepattributes SourceFile,LineNumberTable
+-keep class com.hianalytics.android.**{*;}
+-keep class com.huawei.updatesdk.**{*;}
+-keep class com.huawei.hms.**{*;}
+
+
+#Androidx 混淆
+-keep class com.google.android.material.** {*;}
+-keep class androidx.** {*;}
+-keep public class * extends androidx.**
+-keep interface androidx.** {*;}
+-dontwarn com.google.android.material.**
+-dontnote com.google.android.material.**
+-dontwarn androidx.**
+#路由表不能混淆,启动会从固定package下汇总路由表
+-keep class com.huawei.cloudlink.router.routermap.** {*;}
+
+
+# crashreport混淆
+-keep public class com.huawei.crashreport.**{*;}
+
+
+# IMSDK 混淆
+-keep class com.huawei.imsdk.ECSProxy {*;}
+-keep class com.huawei.imsdk.msg.** {*;}
+
+# HWMUserState用户状态不混淆
+-keep public class com.huawei.cloudlink.openapi.model.HWMUserState{*;}
+
+# netty不混淆,投影要用到
+-keep class io.netty.**{*;}
+#以下为极光魔链混淆
+-dontwarn cn.magicwindow.**
+-keep class cn.magicwindow.** {*;}
+
+-dontwarn cn.jiguang.**
+-keep class cn.jiguang.** { *; }
+
+#极光推送
+-dontoptimize
+-dontpreverify
+-dontwarn cn.jpush.**
+-keep class cn.jpush.** { *; }
+-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
+-dontwarn cn.jiguang.**
+-keep class cn.jiguang.** { *; }
+

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

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.sjkj.appthreefloor_tsgz">
+    <!-- 允许访问网络,必选权限 -->
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 允许获取粗略位置,若用GPS实现定位小蓝点功能则必选 -->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 允许获取设备和运营商信息,用于问题排查和网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 -->
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 -->
+    <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" /> &lt;!&ndash; 允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 &ndash;&gt; -->
+    <!-- 允许访问网络,必选权限 -->
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 允许获取粗略位置,若用GPS实现定位小蓝点功能则必选 -->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 允许获取设备和运营商信息,用于问题排查和网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 -->
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 -->
+    <!--    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> &lt;!&ndash; 允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 &ndash;&gt;-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许获取wifi网络信息,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 -->
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许获取wifi状态改变,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选 -->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 允许写入扩展存储,用于数据缓存,若无此权限则写到私有目录 -->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许读设备等信息,用于问题排查 -->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- <uses-permission -->
+    <!-- android:name="android.permission.WRITE_SETTINGS" -->
+    <!-- tools:ignore="ProtectedPermissions" /> -->
+    <uses-permission
+        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
+        tools:ignore="ScopedStorage" /> <!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> -->
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- <uses-permission -->
+    <!-- android:name="android.permission.QUERY_ALL_PACKAGES" -->
+    <!-- tools:ignore="QueryAllPackagesPermission" /> -->
+    <!-- <uses-permission android:name="android.permission.GET_TASKS" /> -->
+    <!-- 以下权限为华为会议新增权限 -->
+    <!-- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> -->
+    <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- <uses-permission android:name="android.permission.WAKE_LOCK" /> -->
+    <!-- <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> -->
+    <!-- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> -->
+    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" /> -->
+    <!-- <uses-permission android:name="android.permission.GET_ACCOUNTS" /> -->
+    <!-- <uses-permission android:name="android.permission.BLUETOOTH" /> -->
+    <!-- <uses-permission android:name="android.permission.VIBRATE" /> -->
+    <uses-permission android:name="android.permission.NOTIFICATION_SERVICE" />
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+    <uses-permission android:name="${applicationId}.permission.JPUSH_MESSAGE" />
+
+    <application
+        android:name="com.sjkj.appthreefloor_tsgz.app.App"
+        android:allowBackup="true"
+        android:hardwareAccelerated="true"
+        android:label="@string/app_name"
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:requestLegacyExternalStorage="true"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme"
+        tools:replace="allowBackup">
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.SplashActivity"
+            android:noHistory="true"
+            android:theme="@style/SplashTheme">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+
+            <intent-filter android:autoVerify="true">
+                <data android:scheme="ccsjkj" />
+                <action android:name="android.intent.action.VIEW" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.login.LoginActivity"
+            android:exported="false"
+            android:label="@string/title_activity_login"
+            android:theme="@style/AppTheme.NoActionBar" />
+
+        <meta-data
+            android:name="com.sjkj.appthreefloor_tsgz.base.glide.OkHttpGlideModule"
+            android:value="AppGlideModule" />
+        <meta-data
+            android:name="ScopedStorage"
+            android:value="true" />
+
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.MainActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppNoTitleTheme"
+            android:windowSoftInputMode="adjustUnspecified|stateHidden" />
+
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.login.ConfigActivity"
+            android:screenOrientation="portrait" />
+
+
+    </application>
+</manifest>

+ 8 - 0
app/src/main/assets/assetlinks.json

@@ -0,0 +1,8 @@
+[{
+  "relation": ["delegate_permission/common.handle_all_urls"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "com.sjkj.integratedplatform_siping_tsgz",
+    "sha256_cert_fingerprints": ["63:51:4A:B4:4F:16:B1:12:45:B2:97:49:F0:FA:FE:CE:42:5B:5B:F0:92:9C:23:97:30:6E:B1:AB:15:56:FD:12"]
+  }
+}]

+ 32 - 0
app/src/main/assets/map_list.json

@@ -0,0 +1,32 @@
+{
+  "code": 200,
+  "data": {
+    "cameras": [
+      {
+        "cameraCode": "22030300001321100364",
+        "cameraFactory": "1",
+        "cameraId": "0724a48c6d4f430ca022bfb5bca8073d",
+        "cameraName": "四平市伊通县西苇乡长泡子村北",
+        "cameraRadius": "0",
+        "cameraType": "1",
+        "latitude": "43.148702",
+        "longitude": "125.329884"
+      }
+    ],
+    "detail": {
+      "企业名称": "测试1234",
+      "企业类别": "民营加油站",
+      "修改人": "孙伟",
+      "修改时间": "2023-08-03 14:54:06",
+      "创建人": "null",
+      "创建时间": "2023-08-03 14:04:02",
+      "地址": "null",
+      "备注": "",
+      "所属部门": "四平市",
+      "纬度": "23",
+      "经度": "123",
+      "联系电话": "15888888888",
+      "负责人": "测试人"
+    }
+  }
+}

+ 21 - 0
app/src/main/assets/supermap.cer

@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDizCCAnOgAwIBAgIEAZDBYDANBgkqhkiG9w0BAQsFADB2MQswCQYDVQQGEwJj
+bjEQMA4GA1UECBMHc2ljaHVhbjEOMAwGA1UEBxMFY2hpbmExEjAQBgNVBAoTCWxv
+Y2FsaG9zdDESMBAGA1UECxMJbG9jYWxob3N0MR0wGwYDVQQDExRzdXBlcm1hcC5p
+c2VydmVyLm9yZzAeFw0yMjA3MDQwNzI4MTNaFw0yMjEwMDIwNzI4MTNaMHYxCzAJ
+BgNVBAYTAmNuMRAwDgYDVQQIEwdzaWNodWFuMQ4wDAYDVQQHEwVjaGluYTESMBAG
+A1UEChMJbG9jYWxob3N0MRIwEAYDVQQLEwlsb2NhbGhvc3QxHTAbBgNVBAMTFHN1
+cGVybWFwLmlzZXJ2ZXIub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAhOcyWHXG+9PzABJujGTisDSCBdUqcPcuCkezZ7YF7qE1sU+BlXDqGnxZYLqu
+yiDLwFpagz4HqxihE3qornzj8R0DSnRrvhlFi/tnfU/1X6KagAC+LnB72H4zSMWx
+3MV0Zri/+EbNht2cZaulHkPSj7B9LtjffZT4qmspK33nSYH6hCsmtXy7H6JGFpdh
+Bh0ScHirkLNJrz9a8m6XaL6XvdKPbl/eOas2tJTt4bWMcpZ1LRTWOpd2qC9ujlQY
+P62D7kQ6KGufpMAythi8En/RtNeNyopzQzgpqNOPB1ytYcHzQGfDptjoYQeQ2ogd
+dZe56hMkZj6SZJVku4WA59zZRQIDAQABoyEwHzAdBgNVHQ4EFgQUB/9H9K038CZ2
+4lTfHidm1zu/c6swDQYJKoZIhvcNAQELBQADggEBAFvpxPAuiSq02rseN61H2WB0
+qCWcs0WtMqAIh3PiP1K0P2iITQGpBAaJ20tdk/G+CFKdZBjlQEARxn65EON9BEX+
+06cgPrz0WMFIr9ZjfVQEjzxPghGNao/BwdAKOm11PcWjxu9haIGDQCKQcE98mahi
+znlukjgtIwOCjCUFD8xYM16gzkF3ivwp310iaupF70AHp814LsANXuxZa18iGRgQ
+9yNWvS98zNMCq9Vfn95p8bFymep+tpTZCRyTdkbBZ5nl+UVBLjSmC5reYvywnwn3
+tmrShIJcOwJ4t3W2AB4TfsXmWoTO6Eu517W+5HEXH1p/cJJEyB0orEz2QI6fBYM=
+-----END CERTIFICATE-----

+ 169 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/MainActivity.java

@@ -0,0 +1,169 @@
+package com.sjkj.appthreefloor_tsgz.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.view.KeyEvent;
+import android.view.MenuItem;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.viewpager2.widget.ViewPager2;
+
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.MainViewModel;
+import com.sjkj.appthreefloor_tsgz.adapter.ViewPagerAdapter;
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityMainBinding;
+import com.sjkj.appthreefloor_tsgz.fragment.EventFragment;
+import com.sjkj.appthreefloor_tsgz.fragment.MainFragment;
+import com.sjkj.appthreefloor_tsgz.fragment.MineFragment;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseActivity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MainActivity extends BaseActivity {
+    ActivityMainBinding binding;
+    MainViewModel viewModel;
+    private MainFragment mainFragment = new MainFragment();
+    private EventFragment eventFragment = new EventFragment();
+    private MineFragment mineFragment = new MineFragment();
+    private ViewPagerAdapter pagerAdapter;
+
+    @Override
+    protected int initLayout() {
+        return R.layout.activity_main;
+    }
+
+    @Override
+    public void initBindingView(Bundle savedInstanceState) {
+        super.initBindingView(savedInstanceState);
+        if (savedInstanceState != null) {
+            Intent intent = new Intent(this, SplashActivity.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+            startActivity(intent);
+        }
+    }
+
+    @Override
+    public void initBinding() {
+        binding = (ActivityMainBinding) getViewDataBinding();
+        viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(MainViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        fragmentArrayList.add(eventFragment);
+        fragmentArrayList.add(mainFragment);
+        fragmentArrayList.add(mineFragment);
+        pagerAdapter = new ViewPagerAdapter(this, fragmentArrayList);
+        binding.viewPager.setAdapter(pagerAdapter);
+
+        binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+            @Override
+            public void onPageSelected(int position) {
+                super.onPageSelected(position);
+                binding.mNavigation.getMenu().getItem(position).setChecked(true);
+            }
+        });
+        binding.viewPager.setCurrentItem(1);
+        binding.viewPager.setUserInputEnabled(false);
+        binding.mNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
+            @Override
+            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
+                switch (item.getItemId()) {
+                    //通榆/四平
+                    case R.id.action_event:
+                        binding.viewPager.setCurrentItem(0);
+                        break;
+                    case R.id.action_main:
+                        binding.viewPager.setCurrentItem(1);
+                        break;
+
+                    case R.id.action_mine:
+                        binding.viewPager.setCurrentItem(2);
+                        break;
+                    default:
+                        break;
+                }
+                return false;
+            }
+        });
+
+
+//        AppTools.initLink(this);
+    }
+
+    @Override
+    public void loadData() {
+//        //版本信息校验
+//        VersionUtils versionUtils = new VersionUtils(AppManager.getAppManager().currentActivity());
+//        versionUtils.checkVersion(BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, new VersionUtils.CallBack() {
+//            @Override
+//            public void onError(String msg) {
+//                ToastUtils.show(msg + "");
+//            }
+//
+//            @Override
+//            public void onSuccess() {
+//            }
+//
+//            @Override
+//            public void onNewest() {
+//                ToastUtils.show("当前版本为最新版本");
+//            }
+//        });
+//        DhUtils.getInstance().initServiceInfo();
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    private List<Fragment> fragmentArrayList = new ArrayList<>();
+
+    private Boolean isExit = false;
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            exit();
+            return false;
+        } else {
+            return super.onKeyDown(keyCode, event);
+        }
+    }
+
+    public void exit() {
+        if (!isExit) {
+            isExit = true;
+            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
+            mHandler.sendEmptyMessageDelayed(0, 2000);
+        } else {
+            Intent intent = new Intent(Intent.ACTION_MAIN);
+            intent.addCategory(Intent.CATEGORY_HOME);
+            startActivity(intent);
+            System.exit(0);
+        }
+    }
+
+    Handler mHandler = new Handler() {
+
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            isExit = false;
+        }
+
+    };
+}

+ 100 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/SplashActivity.java

@@ -0,0 +1,100 @@
+package com.sjkj.appthreefloor_tsgz.activity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.login.LoginActivity;
+import com.sjkj.base_lib.permission.PermissionInterceptor;
+import com.sjkj.base_lib.permission.PermissionNameConvert;
+import com.sjkj.base_lib.utils.ToastUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SplashActivity extends AppCompatActivity {
+    private List<String> permissions = new ArrayList<>();
+    private Handler handler = new Handler();
+    private boolean isFirst = true;
+    private Runnable runnable = new Runnable() {
+        @Override
+        public void run() {
+
+            XXPermissions.with(SplashActivity.this)
+                    .permission(permissions)
+                    .interceptor(new PermissionInterceptor())
+                    .request(new OnPermissionCallback() {
+                        @Override
+                        public void onGranted(List<String> permissions, boolean allGranted) {
+                            if (allGranted) {
+                                ToastUtils.show(String.format(getString(R.string.demo_obtain_permission_success_hint), PermissionNameConvert.getPermissionString(SplashActivity.this, permissions)));
+                                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
+                                startActivity(intent);
+                                finish();
+                            } else {
+                                jumpPermissionPage();
+                            }
+
+
+                        }
+
+                        @Override
+                        public void onDenied(List<String> permissions, boolean never) {
+                            if (never) {
+                                ToastUtils.show("被永久拒绝授权,请手动授予权限");
+                                jumpPermissionPage();
+                            } else {
+                                ToastUtils.show("获取权限失败");
+                                jumpPermissionPage();
+                            }
+                        }
+                    });
+
+        }
+    };
+
+    private void jumpPermissionPage() {
+//        if (isFirst) {
+//            Intent intent = new Intent(SplashActivity.this, PermissionListActivity.class);
+//            startActivity(intent);
+//            isFirst = false;
+//            finish();
+//        }
+    }
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_splash);
+
+        permissions.add(Permission.CAMERA);
+        permissions.add(Permission.CALL_PHONE);
+        permissions.add(Permission.ACCESS_COARSE_LOCATION);
+        permissions.add(Permission.ACCESS_FINE_LOCATION);
+        permissions.add(Permission.RECORD_AUDIO);
+        permissions.add(Permission.NOTIFICATION_SERVICE);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+            permissions.add(Permission.MANAGE_EXTERNAL_STORAGE);
+        } else {
+            permissions.add(Permission.WRITE_EXTERNAL_STORAGE);
+            permissions.add(Permission.READ_EXTERNAL_STORAGE);
+        }
+        handler.postDelayed(runnable, 2000);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        handler.removeCallbacks(runnable);
+        handler = null;
+    }
+
+}

+ 36 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/MainViewModel.java

@@ -0,0 +1,36 @@
+package com.sjkj.appthreefloor_tsgz.activity.viewModel;
+
+import androidx.databinding.ObservableField;
+
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+public class MainViewModel extends BaseViewModel {
+
+    public ObservableField<String> username = new ObservableField<>("linzhiyu");
+    public ObservableField<String> password = new ObservableField<>("123456");
+//    private LoginRequest loginRequest = new LoginRequest(App.getInstance());
+
+//    public void login(){
+//        showLoadingDialog();
+//        Params params = new Params();
+//        params.put("loginType", "mobile");
+//        params.put("username", username.get());
+//        params.put("password", password.get());
+//        params.put("deviceId", AppTools.getRegistrationId());
+//        loginRequest.setParams(params);
+//        loginRequest.execute(new ProcessErrorSubscriber<LoginBean>() {
+//            @Override
+//            public void onError(Throwable e) {
+//                super.onError(e);
+//                hideLoadingDialog(LoadingDialog.LOADING_FAILED);
+//            }
+//
+//            @Override
+//            public void onNext(LoginBean data) {
+//                super.onNext(data);
+//                hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
+//            }
+//        });
+//    }
+
+}

+ 29 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/ViewPagerAdapter.java

@@ -0,0 +1,29 @@
+package com.sjkj.appthreefloor_tsgz.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import java.util.List;
+
+public class ViewPagerAdapter extends FragmentStateAdapter {
+    private List<Fragment> list;
+
+    public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<Fragment> list) {
+        super(fragmentActivity);
+        this.list = list;
+    }
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        return list.get(position);
+    }
+
+    @Override
+    public int getItemCount() {
+        return list == null ? 0 : list.size();
+    }
+
+}

+ 95 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/app/App.java

@@ -0,0 +1,95 @@
+package com.sjkj.appthreefloor_tsgz.app;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+
+import com.amap.api.maps.MapsInitializer;
+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.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.header.MyClassicsHeader;
+import com.sjkj.appthreefloor_tsgz.utils.CrashHandler;
+import com.sjkj.base_lib.app.BaseApp;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.Constants;
+import com.sjkj.base_lib.utils.PushUtils;
+
+public class App extends BaseApp {
+
+    static {
+        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
+            @NonNull
+            @Override
+            public RefreshHeader createRefreshHeader(@NonNull Context context, @NonNull RefreshLayout layout) {
+                layout.setPrimaryColorsId(R.color.white, R.color.white);//全局设置主题颜色
+                return new MyClassicsHeader(context).setAccentColor(0xff666666);
+            }
+        });
+        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
+            @NonNull
+            @Override
+            public RefreshFooter createRefreshFooter(@NonNull Context context, @NonNull RefreshLayout layout) {
+                return new ClassicsFooter(context).setDrawableSize(20);
+            }
+        });
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+//        MultiDex.install(this);
+        // 本地存储
+//        MMKV.initialize(this);
+        //极光推送
+        PushUtils.pushInit();
+        PushUtils.getRegistrationId();
+//        initHuaWeiMeeting();
+        AppTools.initLog();
+        CrashHandler.getInstance().init(getApplicationContext());
+        AppTools.setCameraType(AppTools.CAMERA_TYPE_DH);
+        AppTools.setPackageName(getPackageName());
+        MapsInitializer.updatePrivacyAgree(this,true);
+        MapsInitializer.updatePrivacyShow(this,true,true);
+        AppTools.initDefaultLatLng(Constants.DEFAULT_LOCATION_LAT, Constants.DEFAULT_LOCATION_LNG);
+    }
+
+//    /**
+//     * 以下为华为会议初始化方法
+//     */
+//    private void initHuaWeiMeeting() {//"com.sjkj.integratedplatform"  ccsjkj.top
+//        OpenSDKConfig sdkConfig = new OpenSDKConfig(this)
+//                .setAppId("3f989ae3a9664bbd8e78dde9d29a5a22")    //设置唯一App ID,可填应用英文名,使用App ID登录必须要设置
+//                .setServerAddress("meeting.huaweicloud.com"/*DBConfig.Default.getInstance().getServerAddress()*/)   //设置会议服务器地址
+//                .setServerPort("443"/*DBConfig.Default.getInstance().getServerAddress()*/);  //设置会议服务器地址
+////                .setServerPort(DBConfig.Default.getInstance().getServerPort());  //设置会议服务器端口
+//        LogUtils.e("server_address:" + sdkConfig.getServerAddress());
+//        LogUtils.e("server_port:" + sdkConfig.getServerPort());
+////        HWMSdk.setServerConfig("http://www.ccsjkj.top.com","443");
+////        HWMSdk.init(this, sdkConfig);
+//
+//        //AppKey 376325f07055e83fbda766a800e5aa580aca87e30dcd0f426058e071d00a360c
+//
+//        //登录接口
+////        HWMSdk.getOpenApi(Application).login(LoginParam, HwmCallback<LoginResult>);
+//        //入会接口
+////        HWMSdk.getOpenApi(Application).joinConf(JoinConfParam, HwmCancelableCallBack<Void>);
+//        //注销接口
+////        HWMSdk.getOpenApi(Application).logout(HwmCallback<LoginCompletedResult>);
+//    }
+
+    @Override
+    protected void attachBaseContext(Context base) {
+        super.attachBaseContext(base);
+    }
+
+    @Override
+    public void onTerminate() {
+        super.onTerminate();
+    }
+}

+ 176 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/BannerDataBean.java

@@ -0,0 +1,176 @@
+package com.sjkj.appthreefloor_tsgz.bean;
+
+import java.util.List;
+
+public class BannerDataBean {
+    /**
+     * total : 1
+     * list : [{"searchValue":null,"createBy":null,"createTime":"2022-06-23 10:04:13","updateBy":null,"updateTime":null,"remark":null,"params":{},"id":"8a8e7e544a2a4aec882da85d857ee40a","name":"eva","path":"http://119.3.201.155:8081/group1/M00/00/01/wKgA3GKzyheAP9KcAAALwPOUTJc260.jpg","ishavelink":"1","linkaddress":"https://www.baidu.com/","createName":null,"updateName":null,"dataStatus":"0"}]
+     */
+
+    private int total;
+    /**
+     * searchValue : null
+     * createBy : null
+     * createTime : 2022-06-23 10:04:13
+     * updateBy : null
+     * updateTime : null
+     * remark : null
+     * params : {}
+     * id : 8a8e7e544a2a4aec882da85d857ee40a
+     * name : eva
+     * path : http://119.3.201.155:8081/group1/M00/00/01/wKgA3GKzyheAP9KcAAALwPOUTJc260.jpg
+     * ishavelink : 1
+     * linkaddress : https://www.baidu.com/
+     * createName : null
+     * updateName : null
+     * dataStatus : 0
+     */
+
+    private List<ListBean> list;
+
+    public int getTotal() {
+        return total;
+    }
+
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    public List<ListBean> getList() {
+        return list;
+    }
+
+    public void setList(List<ListBean> list) {
+        this.list = list;
+    }
+
+    public static class ListBean {
+        private String searchValue;
+        private String createBy;
+        private String createTime;
+        private String updateBy;
+        private String updateTime;
+        private String remark;
+        private String id;
+        private String name;
+        private String path;
+        private String ishavelink;
+        private String linkaddress;
+        private String createName;
+        private String updateName;
+        private String dataStatus;
+
+        public String getSearchValue() {
+            return searchValue;
+        }
+
+        public void setSearchValue(String searchValue) {
+            this.searchValue = searchValue;
+        }
+
+        public String getCreateBy() {
+            return createBy;
+        }
+
+        public void setCreateBy(String createBy) {
+            this.createBy = createBy;
+        }
+
+        public String getCreateTime() {
+            return createTime;
+        }
+
+        public void setCreateTime(String createTime) {
+            this.createTime = createTime;
+        }
+
+        public String getUpdateBy() {
+            return updateBy;
+        }
+
+        public void setUpdateBy(String updateBy) {
+            this.updateBy = updateBy;
+        }
+
+        public String getUpdateTime() {
+            return updateTime;
+        }
+
+        public void setUpdateTime(String updateTime) {
+            this.updateTime = updateTime;
+        }
+
+        public String getRemark() {
+            return remark;
+        }
+
+        public void setRemark(String remark) {
+            this.remark = remark;
+        }
+
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getPath() {
+            return path;
+        }
+
+        public void setPath(String path) {
+            this.path = path;
+        }
+
+        public String getIshavelink() {
+            return ishavelink;
+        }
+
+        public void setIshavelink(String ishavelink) {
+            this.ishavelink = ishavelink;
+        }
+
+        public String getLinkaddress() {
+            return linkaddress;
+        }
+
+        public void setLinkaddress(String linkaddress) {
+            this.linkaddress = linkaddress;
+        }
+
+        public String getCreateName() {
+            return createName;
+        }
+
+        public void setCreateName(String createName) {
+            this.createName = createName;
+        }
+
+        public String getUpdateName() {
+            return updateName;
+        }
+
+        public void setUpdateName(String updateName) {
+            this.updateName = updateName;
+        }
+
+        public String getDataStatus() {
+            return dataStatus;
+        }
+
+        public void setDataStatus(String dataStatus) {
+            this.dataStatus = dataStatus;
+        }
+    }
+}

+ 22 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/LogInRsaBean.java

@@ -0,0 +1,22 @@
+package com.sjkj.appthreefloor_tsgz.bean;
+
+public class LogInRsaBean {
+    private String publicKey;
+    private String sessionId;
+
+    public String getPublicKey() {
+        return publicKey;
+    }
+
+    public void setPublicKey(String publicKey) {
+        this.publicKey = publicKey;
+    }
+
+    public String getSessionId() {
+        return sessionId;
+    }
+
+    public void setSessionId(String sessionId) {
+        this.sessionId = sessionId;
+    }
+}

+ 228 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/LoginBean.java

@@ -0,0 +1,228 @@
+package com.sjkj.appthreefloor_tsgz.bean;
+
+import java.util.List;
+
+public class LoginBean {
+
+    /**
+     * accessToken : eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjY1MzcyYzA3LTM5MTUtNDVkMi1iZDcxLTZmNGYwMGM5ZDMxNiIsInVzZXJuYW1lIjoiYWRtaW4ifQ.xcEM1l___5sj8Me1OZNgHFZratjdJlRIp7RrflngGZ2U4Dszpgg3fNy00i8WNs6nwb4S9AFX8oopOVekiDi7dA
+     * userinfo : {"userid":"1","username":"admin","sysUser":{"userId":"1","admin":"true","deptId":"103","deptNames":"研发部门"}}
+     */
+
+    private String accessToken;
+    /**
+     * 过期字段标识
+     */
+    private boolean updatePwd;
+    /**
+     * userid : 1
+     * username : admin
+     * sysUser : {"userId":"1","admin":"true","deptId":"103","deptNames":"研发部门"}
+     */
+
+    private UserinfoBean userinfo;
+
+    public boolean isUpdatePwd() {
+        return updatePwd;
+    }
+
+    public void setUpdatePwd(boolean updatePwd) {
+        this.updatePwd = updatePwd;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public UserinfoBean getUserinfo() {
+        return userinfo;
+    }
+
+    public void setUserinfo(UserinfoBean userinfo) {
+        this.userinfo = userinfo;
+    }
+
+    public static class UserinfoBean {
+        private String userid;
+        private String username;
+
+        /**
+         * userId : 1
+         * admin : true
+         * deptId : 103
+         * deptNames : 研发部门
+         */
+
+        private SysUserBean sysUser;
+
+        private List<SystemMenuBean> userappList;
+
+        public List<SystemMenuBean> getUserappList() {
+            return userappList;
+        }
+
+        public void setUserappList(List<SystemMenuBean> userappList) {
+            this.userappList = userappList;
+        }
+
+        public String getUserid() {
+            return userid;
+        }
+
+        public void setUserid(String userid) {
+            this.userid = userid;
+        }
+
+        public String getUsername() {
+            return username;
+        }
+
+        public void setUsername(String username) {
+            this.username = username;
+        }
+
+        public SysUserBean getSysUser() {
+            return sysUser;
+        }
+
+        public void setSysUser(SysUserBean sysUser) {
+            this.sysUser = sysUser;
+        }
+
+        public static class SysUserBean {
+            private String userId;
+            private String admin;
+            private String deptId;
+            private String deptNames;
+            private String nickName;
+            private String isWangGe;
+
+            public String getIsWangGe() {
+                return isWangGe;
+            }
+
+            public void setIsWangGe(String isWangGe) {
+                this.isWangGe = isWangGe;
+            }
+
+            public String getNickName() {
+                return nickName;
+            }
+
+            public void setNickName(String nickName) {
+                this.nickName = nickName;
+            }
+
+            public String getUserId() {
+                return userId;
+            }
+
+            public void setUserId(String userId) {
+                this.userId = userId;
+            }
+
+            public String getAdmin() {
+                return admin;
+            }
+
+            public void setAdmin(String admin) {
+                this.admin = admin;
+            }
+
+            public String getDeptId() {
+                return deptId;
+            }
+
+            public void setDeptId(String deptId) {
+                this.deptId = deptId;
+            }
+
+            public String getDeptNames() {
+                return deptNames;
+            }
+
+            public void setDeptNames(String deptNames) {
+                this.deptNames = deptNames;
+            }
+        }
+    }
+    public static class Dept{
+        private String deptId;
+        private String parentId;
+        private String deptName;
+
+        public String getDeptId() {
+            return deptId;
+        }
+
+        public void setDeptId(String deptId) {
+            this.deptId = deptId;
+        }
+
+        public String getParentId() {
+            return parentId;
+        }
+
+        public void setParentId(String parentId) {
+            this.parentId = parentId;
+        }
+
+        public String getDeptName() {
+            return deptName;
+        }
+
+        public void setDeptName(String deptName) {
+            this.deptName = deptName;
+        }
+    }
+    private List<Dept> deptList;
+
+    public List<Dept> getDeptList() {
+        return deptList;
+    }
+
+    public void setDeptList(List<Dept> deptList) {
+        this.deptList = deptList;
+    }
+
+    public static class SystemMenuBean{
+
+        /**
+         * menuId : 3
+         * menuName : 应急预案
+         * icon : 3
+         */
+
+        private long menuId;
+        private String menuName;
+        private String icon;
+
+        public long getMenuId() {
+            return menuId;
+        }
+
+        public void setMenuId(long menuId) {
+            this.menuId = menuId;
+        }
+
+        public String getMenuName() {
+            return menuName;
+        }
+
+        public void setMenuName(String menuName) {
+            this.menuName = menuName;
+        }
+
+        public String getIcon() {
+            return icon;
+        }
+
+        public void setIcon(String icon) {
+            this.icon = icon;
+        }
+    }
+}

+ 39 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/MenuMainItemBean.java

@@ -0,0 +1,39 @@
+package com.sjkj.appthreefloor_tsgz.bean;
+
+import java.io.Serializable;
+
+public class MenuMainItemBean implements Serializable {
+    public MenuMainItemBean(String menuName, long menuId, String icon) {
+        this.menuName = menuName;
+        this.menuId = menuId;
+        this.icon = icon;
+    }
+
+    private String menuName;
+    private long menuId;
+    private String icon;
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public String getMenuName() {
+        return menuName;
+    }
+
+    public void setMenuName(String menuName) {
+        this.menuName = menuName;
+    }
+
+    public long getMenuId() {
+        return menuId;
+    }
+
+    public void setMenuId(long menuId) {
+        this.menuId = menuId;
+    }
+}

+ 234 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/daemo/SettingUtil.java

@@ -0,0 +1,234 @@
+package com.sjkj.appthreefloor_tsgz.daemo;
+
+import android.annotation.SuppressLint;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.os.PowerManager;
+import android.provider.Settings;
+import android.util.Log;
+import android.widget.Toast;
+
+import androidx.annotation.RequiresApi;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+
+/**
+ * 作者:东芝(2019/8/6).
+ * 功能:Intent跳转到[自启动]页面全网最全适配机型解决方案
+ */
+public class SettingUtil {
+
+    private static HashMap<String, List<String>> hashMap = new HashMap<String, List<String>>() {
+        {
+            put("Xiaomi", Arrays.asList(
+                    "com.miui.securitycenter/com.miui.permcenter.autostart.AutoStartManagementActivity",//MIUI10_9.8.1(9.0)
+                    "com.miui.securitycenter"
+            ));
+
+            put("samsung", Arrays.asList(
+                    "com.samsung.android.sm_cn/com.samsung.android.sm.ui.ram.AutoRunActivity",
+                    "com.samsung.android.sm_cn/com.samsung.android.sm.ui.appmanagement.AppManagementActivity",
+                    "com.samsung.android.sm_cn/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity",
+                    "com.samsung.android.sm_cn/.ui.ram.RamActivity",
+                    "com.samsung.android.sm_cn/.app.dashboard.SmartManagerDashBoardActivity",
+
+                    "com.samsung.android.sm/com.samsung.android.sm.ui.ram.AutoRunActivity",
+                    "com.samsung.android.sm/com.samsung.android.sm.ui.appmanagement.AppManagementActivity",
+                    "com.samsung.android.sm/com.samsung.android.sm.ui.cstyleboard.SmartManagerDashBoardActivity",
+                    "com.samsung.android.sm/.ui.ram.RamActivity",
+                    "com.samsung.android.sm/.app.dashboard.SmartManagerDashBoardActivity",
+
+                    "com.samsung.android.lool/com.samsung.android.sm.ui.battery.BatteryActivity",
+                    "com.samsung.android.sm_cn",
+                    "com.samsung.android.sm"
+            ));
+
+
+            put("HUAWEI", Arrays.asList(
+                    "com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity",//EMUI9.1.0(方舟,9.0)
+                    "com.huawei.systemmanager/.appcontrol.activity.StartupAppControlActivity",
+                    "com.huawei.systemmanager/.optimize.process.ProtectActivity",
+                    "com.huawei.systemmanager/.optimize.bootstart.BootStartActivity",
+                    "com.huawei.systemmanager"//最后一行可以写包名, 这样如果签名的类路径在某些新版本的ROM中没找到 就直接跳转到对应的安全中心/手机管家 首页.
+            ));
+
+            put("vivo", Arrays.asList(
+                    "com.iqoo.secure/.ui.phoneoptimize.BgStartUpManager",
+                    "com.iqoo.secure/.safeguard.PurviewTabActivity",
+                    "com.vivo.permissionmanager/.activity.BgStartUpManagerActivity",
+//                    "com.iqoo.secure/.ui.phoneoptimize.AddWhiteListActivity", //这是白名单, 不是自启动
+                    "com.iqoo.secure",
+                    "com.vivo.permissionmanager"
+            ));
+
+            put("Meizu", Arrays.asList(
+                    "com.meizu.safe/.permission.SmartBGActivity",//Flyme7.3.0(7.1.2)
+                    "com.meizu.safe/.permission.PermissionMainActivity",//网上的
+                    "com.meizu.safe"
+            ));
+
+            put("OPPO", Arrays.asList(
+                    "com.coloros.safecenter/.startupapp.StartupAppListActivity",
+                    "com.coloros.safecenter/.permission.startup.StartupAppListActivity",
+                    "com.oppo.safe/.permission.startup.StartupAppListActivity",
+                    "com.coloros.oppoguardelf/com.coloros.powermanager.fuelgaue.PowerUsageModelActivity",
+                    "com.coloros.safecenter/com.coloros.privacypermissionsentry.PermissionTopActivity",
+                    "com.coloros.safecenter",
+                    "com.oppo.safe",
+                    "com.coloros.oppoguardelf"
+            ));
+
+            put("oneplus", Arrays.asList(
+                    "com.oneplus.security/.chainlaunch.view.ChainLaunchAppListActivity",
+                    "com.oneplus.security"
+            ));
+            put("letv", Arrays.asList(
+                    "com.letv.android.letvsafe/.AutobootManageActivity",
+                    "com.letv.android.letvsafe/.BackgroundAppManageActivity",//应用保护
+                    "com.letv.android.letvsafe"
+            ));
+            put("zte", Arrays.asList(
+                    "com.zte.heartyservice/.autorun.AppAutoRunManager",
+                    "com.zte.heartyservice"
+            ));
+            //金立
+            put("F", Arrays.asList(
+                    "com.gionee.softmanager/.MainActivity",
+                    "com.gionee.softmanager"
+            ));
+
+            //以下为未确定(厂商名也不确定)
+            put("smartisanos", Arrays.asList(
+                    "com.smartisanos.security/.invokeHistory.InvokeHistoryActivity",
+                    "com.smartisanos.security"
+            ));
+            //360
+            put("360", Arrays.asList(
+                    "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity",
+                    "com.yulong.android.coolsafe"
+            ));
+            //360
+            put("ulong", Arrays.asList(
+                    "com.yulong.android.coolsafe/.ui.activity.autorun.AutoRunListActivity",
+                    "com.yulong.android.coolsafe"
+            ));
+            //酷派
+            put("coolpad"/*厂商名称不确定是否正确*/, Arrays.asList(
+                    "com.yulong.android.security/com.yulong.android.seccenter.tabbarmain",
+                    "com.yulong.android.security"
+            ));
+            //联想
+            put("lenovo"/*厂商名称不确定是否正确*/, Arrays.asList(
+                    "com.lenovo.security/.purebackground.PureBackgroundActivity",
+                    "com.lenovo.security"
+            ));
+            put("htc"/*厂商名称不确定是否正确*/, Arrays.asList(
+                    "com.htc.pitroad/.landingpage.activity.LandingPageActivity",
+                    "com.htc.pitroad"
+            ));
+            //华硕
+            put("asus"/*厂商名称不确定是否正确*/, Arrays.asList(
+                    "com.asus.mobilemanager/.MainActivity",
+                    "com.asus.mobilemanager"
+            ));
+
+        }
+    };
+
+    public static void startToAutoStartSetting(Context context) {
+        Log.e("Zhr", "******************当前手机型号为:" + Build.MANUFACTURER);
+
+        Set<Map.Entry<String, List<String>>> entries = hashMap.entrySet();
+        boolean has = false;
+        for (Map.Entry<String, List<String>> entry : entries) {
+            String manufacturer = entry.getKey();
+            List<String> actCompatList = entry.getValue();
+            if (Build.MANUFACTURER.equalsIgnoreCase(manufacturer)) {
+                for (String act : actCompatList) {
+                    try {
+                        Intent intent;
+                        if (act.contains("/")) {
+                            intent = new Intent();
+                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                            ComponentName componentName = ComponentName.unflattenFromString(act);
+                            intent.setComponent(componentName);
+                        } else {
+                            //找不到? 网上的做法都是跳转到设置... 这基本上是没意义的 基本上自启动这个功能是第三方厂商自己写的安全管家类app
+                            //所以我是直接跳转到对应的安全管家/安全中心
+                            intent = context.getPackageManager().getLaunchIntentForPackage(act);
+                        }
+                        context.startActivity(intent);
+                        has = true;
+                        break;
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        if (!has) {
+            Toast.makeText(context, "兼容方案", Toast.LENGTH_SHORT).show();
+            try {
+                Intent intent = new Intent();
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
+                intent.setData(Uri.fromParts("package", context.getPackageName(), null));
+                context.startActivity(intent);
+            } catch (Exception e) {
+                e.printStackTrace();
+                Intent intent = new Intent(Settings.ACTION_SETTINGS);
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                context.startActivity(intent);
+            }
+        }
+
+
+    }
+
+
+
+    /**
+     * 判断app是否在电池管理白名单中
+     * 需要在Manifestes中添加权限配置:<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
+     *
+     * @return
+     */
+    @SuppressLint({"NewApi", "BatteryLife"})
+    @RequiresApi(api = Build.VERSION_CODES.M)
+    public static boolean isIgnoringBatteryOptimizations(Context context) {
+        boolean isIgnoring = false;
+        PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+        if (powerManager != null) {
+            isIgnoring = powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
+        }
+        return isIgnoring;
+    }
+    /**
+     * 申请加入白名单
+     */
+    public  static void requestIgnoreBatteryOptimizations(Context context) {
+        try {
+            Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
+            intent.setData(Uri.parse("package:" + context.getPackageName()));
+            context.startActivity(intent);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void requestIgnoreBattery(Context context){
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isIgnoringBatteryOptimizations(context)) {
+            requestIgnoreBatteryOptimizations(context);
+        }
+    }
+}
+

+ 309 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventFragment.java

@@ -0,0 +1,309 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.base_lib.view.BaseFragment;
+
+public class EventFragment extends BaseFragment /*implements View.OnClickListener */ {
+    @Override
+    protected int initLayout() {
+        return 0;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        return null;
+    }
+
+    @Override
+    public void initView() {
+
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+
+//    private FragmentMainBinding binding;
+//    private MainViewModel viewModel;
+//    private BannerRequest bannerRequest = new BannerRequest(App.getInstance());
+//    private List<String> banners;
+//    private MainMenuAdapter adapter;
+//
+//    @Override
+//    protected int initLayout() {
+//        return R.layout.fragment_main;
+//    }
+//
+//    @Override
+//    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+//        binding = (FragmentMainBinding) getViewDataBing(inflater, container);
+//        viewModel = new ViewModelProvider(getActivity(), new ViewModelProvider.NewInstanceFactory()).get(MainViewModel.class);
+//        binding.setViewModel(viewModel);
+//        binding.setLifecycleOwner(this);
+//        return binding.getRoot();
+//    }
+//
+//    @Override
+//    public void initView() {
+//        binding.banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
+//        binding.banner.setDelayTime(2000);
+//        binding.banner.setBannerAnimation(Transformer.Default);
+//        binding.banner.setIndicatorGravity(BannerConfig.CENTER);
+//        binding.banner.setImageLoader(new ImageLoader() {
+//            @Override
+//            public void displayImage(Context context, Object path, ImageView imageView) {
+//                if (TextUtils.equals("default", path.toString())) {
+//                    imageView.setImageResource(R.drawable.bg_tsgz_banner);
+//                    return;
+//                }
+//                Glide.with(getActivity()).load(path.toString()).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);
+//            }
+//        });
+//        binding.banner.setOnBannerListener(new OnBannerListener() {
+//            @Override
+//            public void OnBannerClick(int position) {
+////                ToastUtils.show(position + "");
+//            }
+//        });
+//        banners = new ArrayList<>();
+//        banners.add("default");
+//        binding.banner.setImages(banners);
+//        binding.banner.start();
+////        GridLayoutManager manager = new GridLayoutManager(getActivity(), 4);
+////        manager.setOrientation(RecyclerView.VERTICAL);
+////        binding.recyclerView.setLayoutManager(manager);
+//        adapter = new MainMenuAdapter(getActivity());
+//        adapter.setItemClick(new MainMenuAdapter.OnItemClick() {
+//            @Override
+//            public void onItemClick(MenuMainItemBean bean, int position) {
+//                if (bean != null) {
+//                    if ("icon_daily".equals(bean.getIcon())) {//日报管理
+//                        startActivity(new Intent(getActivity(), DailyActivity.class));
+//                    } else if ("icon_leave".equals(bean.getIcon())) {//考勤管理
+//                        startActivity(new Intent(getActivity(), WorkManagementActivity.class));
+//                    } else if ("icon_emergency".equals(bean.getIcon())) {//应急预案
+//                        startActivity(new Intent(getActivity(), EmergencyPlanActivity.class));
+//                    } else if ("icon_policy".equals(bean.getIcon())) {//政策法规
+//                        startActivity(new Intent(getActivity(), PolicyActivity.class));
+//                    } else if ("icon_file".equals(bean.getIcon())) {//文件管理
+//                        startActivity(new Intent(getActivity(), FileFolderActivity.class));
+//                    } else if ("icon_event".equals(bean.getIcon())) {//事件中心
+//                        startActivity(new Intent(getActivity(), EventCenterSystemMenuActivity.class).putExtra("menuId", bean.getMenuId()));
+////                        EventCenterActivity
+//                    } else if ("icon_task".equals(bean.getIcon())) {//任务中心
+//                        startActivity(new Intent(getActivity(), TaskCenterActivity.class));
+//                    } else if ("icon_monitor".equals(bean.getIcon())) {//监控中心
+//                        startActivity(new Intent(getActivity(), MonitoringCenterActivity.class).putExtra("titleName", getString(R.string.monitor_center)));
+//                    } else if ("icon_data_center".equals(bean.getIcon())) {//数据中心
+//                        startActivity(new Intent(getActivity(), DataCenterNewActivity.class).putExtra("menuId", bean.getMenuId()));
+//                    } else if ("icon_locus".equals(bean.getIcon())) {//轨迹
+//                        startActivity(new Intent(getActivity(), LocusTypeListActivity.class));
+//                    } else if ("icon_ziyuan".equals(bean.getIcon())) {//资源可视
+//                        startActivity(new Intent(getActivity(), TSGZDataMenuActivity.class).putExtra("menuId", bean.getMenuId()).putExtra("assort", "app"));
+//                    } else if ("icon_huiyi".equals(bean.getIcon())) {//移动会议
+//                        openAppWithPackageName("com.huawei.CloudLink");
+//                    } else if ("icon_comprehensive".equals(bean.getIcon())) {//数字综治
+//                        startActivity(new Intent(getActivity(), ComprehensiveMainActivity.class));
+//                    }
+//                }
+//            }
+//        });
+//
+//        binding.gridView.setAdapter(adapter);
+//        adapter.refreshList(AppSystemUtils.menuList);
+//    }
+//
+//    @Override
+//    public void initListener() {
+////        binding.dailyManageTv.setOnClickListener(this);
+////        binding.leaveManageTv.setOnClickListener(this);
+////        binding.emergencyManageTv.setOnClickListener(this);
+////        binding.policyManageTv.setOnClickListener(this);
+////        binding.fileManageTv.setOnClickListener(this);
+////        binding.eventCenterTv.setOnClickListener(this);
+////        binding.taskCenterTv.setOnClickListener(this);
+////        binding.monitorCenterTv.setOnClickListener(this);
+////        binding.digitalAgricultureTv.setOnClickListener(this);
+////        binding.digitalForestryTv.setOnClickListener(this);
+////        binding.digitalWaterTv.setOnClickListener(this);
+////        binding.digitalEmergencyTv.setOnClickListener(this);
+////        binding.digitalFireTv.setOnClickListener(this);
+////        binding.digitalTrafficTv.setOnClickListener(this);
+////        binding.digitalResourcesTv.setOnClickListener(this);
+////        binding.digitalEnvironmentalTv.setOnClickListener(this);
+////        binding.partyMassesServiceTv.setOnClickListener(this);
+////        binding.socialManagementTv.setOnClickListener(this);
+////        binding.partyMassesServiceTv.setOnClickListener(this);
+////        binding.locusTv.setOnClickListener(this);
+////        binding.dataCenterTv.setOnClickListener(this);
+////        binding.ziyuanTv.setOnClickListener(this);
+////        binding.huiyiTv.setOnClickListener(this);
+//    }
+//
+////    @Override
+////    public void onClick(View v) {
+////        switch (v.getId()) {
+////            case R.id.daily_manage_tv://日报管理
+////                startActivity(new Intent(getActivity(), DailyActivity.class));
+////                break;
+////            case R.id.leave_manage_tv://考勤管理
+////                startActivity(new Intent(getActivity(), WorkManagementActivity.class));
+////                break;
+////            case R.id.emergency_manage_tv://应急预案
+////                startActivity(new Intent(getActivity(), EmergencyPlanActivity.class));
+////
+////                break;
+////
+////            case R.id.huiyi_tv://移动会议
+////                openAppWithPackageName("com.huawei.CloudLink");
+////                break;
+////            case R.id.ziyuan_tv://资源可视
+////                startActivity(new Intent(getActivity(), TSGZDataMenuActivity.class));
+////                break;
+////            case R.id.policy_manage_tv://政策法规
+////                startActivity(new Intent(getActivity(), PolicyActivity.class));
+////                break;
+////            case R.id.file_manage_tv://文件管理
+////                startActivity(new Intent(getActivity(), FileFolderActivity.class));
+////                break;
+////            case R.id.event_center_tv://事件中心
+////                startActivity(new Intent(getActivity(), EventCenterActivity.class));
+////                break;
+////            case R.id.task_center_tv://任务中心
+////                startActivity(new Intent(getActivity(), TaskCenterActivity.class));
+////                break;
+////            case R.id.monitor_center_tv://监控中心
+////                startActivity(new Intent(getActivity(), MonitoringCenterActivity.class));
+////                break;
+////            case R.id.digital_agriculture_tv://农业
+////                startActivity(new Intent(getActivity(), DigitalAgricultureActivity.class));
+////                break;
+////            case R.id.digital_forestry_tv://林业
+////                startActivity(new Intent(getActivity(), DigitalForestryActivity.class));
+////                break;
+////            case R.id.digital_water_tv://水利
+////                startActivity(new Intent(getActivity(), DigitalWaterActivity.class));
+////                break;
+////            case R.id.digital_emergency_tv://应急
+//////                   startActivity(new Intent(getActivity(), EmergencyHomeActivity.class));
+////                startActivity(new Intent(getActivity(), DigitalEmergencyActivity.class));
+////                break;
+////            case R.id.digital_fire_tv://消防
+////                startActivity(new Intent(getActivity(), DigitalFiretvActivity.class));
+////
+////                break;
+////            case R.id.digital_traffic_tv://交通
+////                startActivity(new Intent(getActivity(), DigitalTrafficActivity.class));
+////                break;
+////            case R.id.digital_resources_tv://资源
+////                startActivity(new Intent(getActivity(), DigitalResourcesActivity.class));
+////                break;
+////            case R.id.digital_environmental_tv://环保
+////                startActivity(new Intent(getActivity(), DigitaEnvironmentalActivity.class));
+////                break;
+////            case R.id.party_masses_service_tv://党群社区
+////                startActivity(new Intent(getActivity(), PartyMassesMainActivity.class));
+////                break;
+////            case R.id.social_management_tv://社管通
+////                startActivity(new Intent(getActivity(), SocialMainActivity.class));
+////                break;
+////            case R.id.locus_tv://轨迹
+////                startActivity(new Intent(getActivity(), LocusTypeListActivity.class));
+////                break;
+////            case R.id.data_center_tv://数据中心
+////                startActivity(new Intent(getActivity(), DataCenterNewActivity.class));
+////                break;
+////            default:
+////                break;
+////        }
+////    }
+//
+//    @Override
+//    public void loadData() {
+//        bannerRequest.setParams(new Params());
+//        bannerRequest.execute(new ProcessErrorSubscriber<BannerDataBean>() {
+//            @Override
+//            public void onError(Throwable e) {
+//                super.onError(e);
+//            }
+//
+//            @Override
+//            public void onNext(BannerDataBean bannerDataBean) {
+//                super.onNext(bannerDataBean);
+//                if (bannerDataBean != null) {
+//                    List<BannerDataBean.ListBean> list = bannerDataBean.getList();
+//                    List<String> imgs = new ArrayList<>();
+//                    if (list != null && list.size() > 0) {
+//                        for (int i = 0; i < list.size(); i++) {
+//                            if (list.get(i) != null && !TextUtils.isEmpty(list.get(i).getPath())) {
+//                                imgs.add(list.get(i).getPath());
+//                            }
+//                        }
+//                        if (imgs.size() > 0) {
+//                            binding.banner.update(imgs);
+//                        }
+//                    }
+//
+//                }
+//            }
+//        });
+//    }
+//
+//    /**
+//     * 打开外部App
+//     *
+//     * @param packagename
+//     */
+//    private void openAppWithPackageName(String packagename) {
+//        // 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
+//        PackageInfo packageinfo = null;
+//        try {
+//            packageinfo = getActivity().getPackageManager().getPackageInfo(packagename, 0);
+//        } catch (PackageManager.NameNotFoundException e) {
+//            e.printStackTrace();
+//            ToastUtils.show("App尚未安装");
+//        }
+//        if (packageinfo == null) {
+//            return;
+//        }
+//
+//        // 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
+//        Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
+//        resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+//        resolveIntent.setPackage(packageinfo.packageName);
+//        // 通过getPackageManager()的queryIntentActivities方法遍历
+//        List<ResolveInfo> resolveinfoList = getActivity().getPackageManager()
+//                .queryIntentActivities(resolveIntent, 0);
+//
+//        if (!resolveinfoList.iterator().hasNext()) {
+//            return;
+//        }
+//        ResolveInfo resolveinfo = resolveinfoList.iterator().next();
+//        if (resolveinfo != null) {
+//            // packagename = 参数packname
+//            String packageName = resolveinfo.activityInfo.packageName;
+//            // 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
+//            String className = resolveinfo.activityInfo.name;
+//            // LAUNCHER Intent
+//            Intent intent = new Intent(Intent.ACTION_MAIN);
+//            intent.addCategory(Intent.CATEGORY_LAUNCHER);
+//            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//重点是加这个
+//
+//            // 设置ComponentName参数1:packagename参数2:MainActivity路径
+//            ComponentName cn = new ComponentName(packageName, className);
+//            intent.setComponent(cn);
+//            startActivity(intent);
+//        }
+//    }
+}

+ 112 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainFragment.java

@@ -0,0 +1,112 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.app.App;
+import com.sjkj.appthreefloor_tsgz.bean.BannerDataBean;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentMainBinding;
+import com.sjkj.appthreefloor_tsgz.net.BannerRequest;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.net.domain.interactor.ProcessErrorSubscriber;
+import com.sjkj.base_lib.view.BaseFragment;
+import com.youth.banner.adapter.BannerImageAdapter;
+import com.youth.banner.holder.BannerImageHolder;
+import com.youth.banner.indicator.CircleIndicator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MainFragment extends BaseFragment {
+    private FragmentMainBinding binding;
+    private MainViewModel viewModel;
+    private BannerRequest bannerRequest = new BannerRequest(App.getInstance());
+    private List<String> banners;
+
+    @Override
+    protected int initLayout() {
+        return R.layout.fragment_main;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        binding = (FragmentMainBinding) getViewDataBing(inflater, container);
+        viewModel = new ViewModelProvider(getActivity(), new ViewModelProvider.NewInstanceFactory()).get(MainViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+        return binding.getRoot();
+    }
+
+    @Override
+    public void initView() {
+
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void loadData() {
+        bannerRequest.setParams(new Params());
+        bannerRequest.execute(new ProcessErrorSubscriber<BannerDataBean>() {
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+
+            @Override
+            public void onNext(BannerDataBean bannerDataBean) {
+                super.onNext(bannerDataBean);
+                if (bannerDataBean != null) {
+                    List<BannerDataBean.ListBean> list = bannerDataBean.getList();
+                    List<String> imgs = new ArrayList<>();
+                    if (list != null && list.size() > 0) {
+                        for (int i = 0; i < list.size(); i++) {
+                            if (list.get(i) != null && !TextUtils.isEmpty(list.get(i).getPath())) {
+                                imgs.add(list.get(i).getPath());
+                            }
+                        }
+                        if (imgs.size() > 0) {
+                            imgs.add("https://photo.tuchong.com/250829/f/31548923.jpg");
+                            imgs.add("https://photo.tuchong.com/46728/f/20138526.jpg");
+                            imgs.add("https://photo.tuchong.com/392724/f/16858773.jpg");
+                            imgs.add("https://photo.tuchong.com/408963/f/18401047.jpg");
+                            /*
+                             *  */
+                            binding.banner.setAdapter(new BannerImageAdapter<String>(imgs) {
+                                @Override
+                                public void onBindView(BannerImageHolder holder, String data, int position, int size) {
+                                    //图片加载自己实现
+                                    Glide.with(holder.itemView)
+                                            .load(data)
+                                            .apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))
+                                            .into(holder.imageView);
+                                }
+                            });
+                            binding.banner.setLoopTime(1500);
+                           // binding.banner.setIndicator(new CircleIndicator(getActivity()));
+                            //添加画廊效果
+                            binding.banner.setBannerGalleryEffect(50, 10);
+                            //binding.banner.setBannerGalleryMZ(20);
+                        }
+                    }
+
+                }
+            }
+        });
+    }
+}
+
+
+

+ 6 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainViewModel.java

@@ -0,0 +1,6 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+public class MainViewModel extends BaseViewModel {
+}

+ 46 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MineFragment.java

@@ -0,0 +1,46 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseFragment;
+import com.sjkj.appthreefloor_tsgz.BuildConfig;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.utils.AppSystemUtils;
+
+public class MineFragment extends BaseFragment {
+
+    @Override
+    protected int initLayout() {
+        return 0;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        return null;
+    }
+
+    @Override
+    public void initView() {
+
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+}

+ 607 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/header/MyClassicsHeader.java

@@ -0,0 +1,607 @@
+package com.sjkj.appthreefloor_tsgz.header;
+
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Animatable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.LinearInterpolator;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+
+import com.scwang.smartrefresh.layout.api.RefreshHeader;
+import com.scwang.smartrefresh.layout.api.RefreshKernel;
+import com.scwang.smartrefresh.layout.api.RefreshLayout;
+import com.scwang.smartrefresh.layout.constant.RefreshState;
+import com.scwang.smartrefresh.layout.constant.SpinnerStyle;
+import com.scwang.smartrefresh.layout.internal.ProgressDrawable;
+import com.scwang.smartrefresh.layout.internal.pathview.PathsDrawable;
+import com.scwang.smartrefresh.layout.util.DensityUtil;
+import com.sjkj.appthreefloor_tsgz.R;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+@SuppressLint("RestrictedApi")
+public class MyClassicsHeader extends RelativeLayout implements RefreshHeader {
+
+    public static String REFRESH_HEADER_PULLDOWN = "下拉可以刷新";
+    public static String REFRESH_HEADER_REFRESHING = "正在刷新...";
+    public static String REFRESH_HEADER_LOADING = "正在加载...";
+    public static String REFRESH_HEADER_RELEASE = "释放立即刷新";
+    public static String REFRESH_HEADER_FINISH = "刷新完成";
+    public static String REFRESH_HEADER_FAILED = "刷新失败";
+    public static String REFRESH_HEADER_LASTTIME = "上次更新 M-d HH:mm";
+    public static String REFRESH_HEADER_SECOND_FLOOR = "释放进入二楼";
+//    public static String REFRESH_HEADER_LASTTIME = "'Last update' M-d HH:mm";
+
+    protected String KEY_LAST_UPDATE_TIME = "LAST_UPDATE_TIME";
+
+    protected Date mLastTime;
+    protected TextView mTitleText;
+    protected TextView mLastUpdateText;
+    protected ImageView mArrowView;
+    protected ImageView mProgressView;
+    protected SharedPreferences mShared;
+    protected RefreshKernel mRefreshKernel;
+    protected PathsDrawable mArrowDrawable;
+    protected ProgressDrawable mProgressDrawable;
+    protected SpinnerStyle mSpinnerStyle = SpinnerStyle.Translate;
+    protected DateFormat mFormat = new SimpleDateFormat(REFRESH_HEADER_LASTTIME, Locale.getDefault());
+    protected Integer mAccentColor;
+    protected Integer mPrimaryColor;
+    protected int mBackgroundColor;
+    protected int mFinishDuration = 500;
+    protected int mPaddingTop = 20;
+    protected int mPaddingBottom = 20;
+    protected boolean mEnableLastTime = true;
+
+    //<editor-fold desc="RelativeLayout">
+    public MyClassicsHeader(Context context) {
+        super(context);
+        this.initView(context, null);
+    }
+
+    public MyClassicsHeader(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        this.initView(context, attrs);
+    }
+
+    public MyClassicsHeader(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        this.initView(context, attrs);
+    }
+
+    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
+    public MyClassicsHeader(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        this.initView(context, attrs);
+    }
+
+    private void initView(Context context, AttributeSet attrs) {
+        DensityUtil density = new DensityUtil();
+
+        LinearLayout layout = new LinearLayout(context);
+        layout.setId(android.R.id.widget_frame);
+        layout.setGravity(Gravity.CENTER_HORIZONTAL);
+        layout.setOrientation(LinearLayout.VERTICAL);
+        mTitleText = new TextView(context);
+        mTitleText.setText(REFRESH_HEADER_PULLDOWN);
+        mTitleText.setTextColor(0xff666666);
+
+        mLastUpdateText = new TextView(context);
+        mLastUpdateText.setTextColor(0xff666666);
+        LinearLayout.LayoutParams lpHeaderText = new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
+        layout.addView(mTitleText, lpHeaderText);
+        LinearLayout.LayoutParams lpUpdateText = new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
+        layout.addView(mLastUpdateText, lpUpdateText);
+
+        LayoutParams lpHeaderLayout = new LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
+        lpHeaderLayout.addRule(CENTER_IN_PARENT);
+        addView(layout,lpHeaderLayout);
+
+        LayoutParams lpArrow = new LayoutParams(density.dip2px(20), density.dip2px(20));
+        lpArrow.addRule(CENTER_VERTICAL);
+        lpArrow.addRule(LEFT_OF, android.R.id.widget_frame);
+        mArrowView = new ImageView(context);
+        addView(mArrowView, lpArrow);
+
+        LayoutParams lpProgress = new LayoutParams((ViewGroup.LayoutParams)lpArrow);
+        lpProgress.addRule(CENTER_VERTICAL);
+        lpProgress.addRule(LEFT_OF, android.R.id.widget_frame);
+        mProgressView = new ImageView(context);
+        mProgressView.animate().setInterpolator(new LinearInterpolator());
+        addView(mProgressView, lpProgress);
+
+        if (isInEditMode()) {
+            mArrowView.setVisibility(GONE);
+            mTitleText.setText(REFRESH_HEADER_REFRESHING);
+        } else {
+            mProgressView.setVisibility(GONE);
+        }
+
+        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ClassicsHeader);
+
+        lpUpdateText.topMargin = ta.getDimensionPixelSize(R.styleable.ClassicsHeader_srlTextTimeMarginTop, density.dip2px(0));
+        lpProgress.rightMargin = ta.getDimensionPixelSize(R.styleable.ClassicsFooter_srlDrawableMarginRight, density.dip2px(20));
+        lpArrow.rightMargin = lpProgress.rightMargin;
+
+        lpArrow.width = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableArrowSize, lpArrow.width);
+        lpArrow.height = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableArrowSize, lpArrow.height);
+        lpProgress.width = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableProgressSize, lpProgress.width);
+        lpProgress.height = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableProgressSize, lpProgress.height);
+
+        lpArrow.width = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableSize, lpArrow.width);
+        lpArrow.height = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableSize, lpArrow.height);
+        lpProgress.width = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableSize, lpProgress.width);
+        lpProgress.height = ta.getLayoutDimension(R.styleable.ClassicsHeader_srlDrawableSize, lpProgress.height);
+
+        mFinishDuration = ta.getInt(R.styleable.ClassicsHeader_srlFinishDuration, mFinishDuration);
+        mEnableLastTime = ta.getBoolean(R.styleable.ClassicsHeader_srlEnableLastTime, mEnableLastTime);
+        mSpinnerStyle = SpinnerStyle.values()[ta.getInt(R.styleable.ClassicsHeader_srlClassicsSpinnerStyle,mSpinnerStyle.ordinal())];
+
+        mLastUpdateText.setVisibility(mEnableLastTime ? VISIBLE : GONE);
+
+        if (ta.hasValue(R.styleable.ClassicsHeader_srlDrawableArrow)) {
+            mArrowView.setImageDrawable(ta.getDrawable(R.styleable.ClassicsHeader_srlDrawableArrow));
+        } else {
+            mArrowDrawable = new PathsDrawable();
+            mArrowDrawable.parserColors(0xff666666);
+            mArrowDrawable.parserPaths("M20,12l-1.41,-1.41L13,16.17V4h-2v12.17l-5.58,-5.59L4,12l8,8 8,-8z");
+            mArrowView.setImageDrawable(mArrowDrawable);
+        }
+
+        if (ta.hasValue(R.styleable.ClassicsHeader_srlDrawableProgress)) {
+            mProgressView.setImageDrawable(ta.getDrawable(R.styleable.ClassicsHeader_srlDrawableProgress));
+        } else {
+            mProgressDrawable = new ProgressDrawable();
+            mProgressDrawable.setColor(0xff666666);
+            mProgressView.setImageDrawable(mProgressDrawable);
+        }
+
+        if (ta.hasValue(R.styleable.ClassicsHeader_srlTextSizeTitle)) {
+            mTitleText.setTextSize(TypedValue.COMPLEX_UNIT_PX, ta.getDimensionPixelSize(R.styleable.ClassicsHeader_srlTextSizeTitle, DensityUtil.dp2px(16)));
+        } else {
+            mTitleText.setTextSize(16);
+        }
+
+        if (ta.hasValue(R.styleable.ClassicsHeader_srlTextSizeTime)) {
+            mLastUpdateText.setTextSize(TypedValue.COMPLEX_UNIT_PX, ta.getDimensionPixelSize(R.styleable.ClassicsHeader_srlTextSizeTime, DensityUtil.dp2px(12)));
+        } else {
+            mLastUpdateText.setTextSize(12);
+        }
+
+        if (ta.hasValue(R.styleable.ClassicsHeader_srlPrimaryColor)) {
+            setPrimaryColor(ta.getColor(R.styleable.ClassicsHeader_srlPrimaryColor, 0));
+        }
+        if (ta.hasValue(R.styleable.ClassicsHeader_srlAccentColor)) {
+            setAccentColor(ta.getColor(R.styleable.ClassicsHeader_srlAccentColor, 0));
+        }
+
+        ta.recycle();
+
+        if (getPaddingTop() == 0) {
+            if (getPaddingBottom() == 0) {
+                setPadding(getPaddingLeft(), mPaddingTop = density.dip2px(20), getPaddingRight(), mPaddingBottom = density.dip2px(20));
+            } else {
+                setPadding(getPaddingLeft(), mPaddingTop = density.dip2px(20), getPaddingRight(), mPaddingBottom = getPaddingBottom());
+            }
+        } else {
+            if (getPaddingBottom() == 0) {
+                setPadding(getPaddingLeft(), mPaddingTop = getPaddingTop(), getPaddingRight(), mPaddingBottom = density.dip2px(20));
+            } else {
+                mPaddingTop = getPaddingTop();
+                mPaddingBottom = getPaddingBottom();
+            }
+        }
+
+        try {//try 不能删除-否则会出现兼容性问题
+            if (context instanceof FragmentActivity) {
+                FragmentManager manager = ((FragmentActivity) context).getSupportFragmentManager();
+                if (manager != null) {
+                    @SuppressLint("RestrictedApi")
+                    List<Fragment> fragments = manager.getFragments();
+                    if (fragments != null && fragments.size() > 0) {
+                        setLastUpdateTime(new Date());
+                        return;
+                    }
+                }
+            }
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+
+        KEY_LAST_UPDATE_TIME += context.getClass().getName();
+        mShared = context.getSharedPreferences("ClassicsHeader", Context.MODE_PRIVATE);
+        setLastUpdateTime(new Date(mShared.getLong(KEY_LAST_UPDATE_TIME, System.currentTimeMillis())));
+
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) {
+            setPadding(getPaddingLeft(), 0, getPaddingRight(), 0);
+        } else {
+            setPadding(getPaddingLeft(), mPaddingTop, getPaddingRight(), mPaddingBottom);
+        }
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+    }
+
+    //</editor-fold>
+
+    //<editor-fold desc="RefreshHeader">
+    @Override
+    public void onInitialized(@NonNull RefreshKernel kernel, int height, int extendHeight) {
+        mRefreshKernel = kernel;
+        mRefreshKernel.requestDrawBackgroundForHeader(mBackgroundColor);
+    }
+
+    @Override
+    public boolean isSupportHorizontalDrag() {
+        return false;
+    }
+
+    @Override
+    public void onHorizontalDrag(float percentX, int offsetX, int offsetMax) {
+    }
+
+    @Override
+    public void onPulling(float percent, int offset, int height, int extendHeight) {
+    }
+
+    @Override
+    public void onReleasing(float percent, int offset, int height, int extendHeight) {
+
+    }
+
+    @Override
+    public void onReleased(RefreshLayout layout, int height, int extendHeight) {
+        if (mProgressDrawable != null) {
+            mProgressDrawable.start();
+        } else {
+            Drawable drawable = mProgressView.getDrawable();
+            if (drawable instanceof Animatable) {
+                ((Animatable) drawable).start();
+            } else {
+                mProgressView.animate().rotation(36000).setDuration(100000);
+            }
+        }
+    }
+
+    @Override
+    public void onStartAnimator(@NonNull RefreshLayout layout, int height, int extendHeight) {
+
+    }
+
+    @Override
+    public int onFinish(@NonNull RefreshLayout layout, boolean success) {
+        if (mProgressDrawable != null) {
+            mProgressDrawable.stop();
+        } else {
+            Drawable drawable = mProgressView.getDrawable();
+            if (drawable instanceof Animatable) {
+                ((Animatable) drawable).stop();
+            } else {
+                mProgressView.animate().rotation(0).setDuration(300);
+            }
+        }
+        mProgressView.setVisibility(GONE);
+        if (success) {
+            mTitleText.setText(REFRESH_HEADER_FINISH);
+            if (mLastTime != null) {
+                setLastUpdateTime(new Date());
+            }
+        } else {
+            mTitleText.setText(REFRESH_HEADER_FAILED);
+        }
+        return mFinishDuration;//延迟500毫秒之后再弹回
+    }
+
+    @Override@Deprecated
+    public void setPrimaryColors(@ColorInt int ... colors) {
+        if (colors.length > 0) {
+            if (!(getBackground() instanceof BitmapDrawable) && mPrimaryColor == null) {
+                setPrimaryColor(colors[0]);
+                mPrimaryColor = null;
+            }
+            if (mAccentColor == null) {
+                if (colors.length > 1) {
+                    setAccentColor(colors[1]);
+                } else {
+                    setAccentColor(colors[0] == 0xffffffff ? 0xff666666 : 0xffffffff);
+                }
+                mAccentColor = null;
+            }
+        }
+    }
+
+    @NonNull
+    public View getView() {
+        return this;
+    }
+
+    @NonNull
+    @Override
+    public SpinnerStyle getSpinnerStyle() {
+        return mSpinnerStyle;
+    }
+
+    @Override
+    public void onStateChanged(RefreshLayout refreshLayout, RefreshState oldState, RefreshState newState) {
+        switch (newState) {
+            case None:
+                mLastUpdateText.setVisibility(mEnableLastTime ? VISIBLE : GONE);
+            case PullDownToRefresh:
+                mTitleText.setText(REFRESH_HEADER_PULLDOWN);
+                mArrowView.setVisibility(VISIBLE);
+                mProgressView.setVisibility(GONE);
+                mArrowView.animate().rotation(0);
+                break;
+            case Refreshing:
+            case RefreshReleased:
+                mTitleText.setText(REFRESH_HEADER_REFRESHING);
+                mProgressView.setVisibility(VISIBLE);
+                mArrowView.setVisibility(GONE);
+                break;
+            case ReleaseToRefresh:
+                mTitleText.setText(REFRESH_HEADER_RELEASE);
+                mArrowView.animate().rotation(180);
+                break;
+            case ReleaseToTwoLevel:
+                mTitleText.setText(REFRESH_HEADER_SECOND_FLOOR);
+                mArrowView.animate().rotation(0);
+                break;
+            case Loading:
+                mArrowView.setVisibility(GONE);
+                mProgressView.setVisibility(GONE);
+                mLastUpdateText.setVisibility(mEnableLastTime ? INVISIBLE : GONE);
+                mTitleText.setText(REFRESH_HEADER_LOADING);
+                break;
+        }
+    }
+    //</editor-fold>
+
+    //<editor-fold desc="API">
+    public MyClassicsHeader setProgressBitmap(Bitmap bitmap) {
+        mProgressDrawable = null;
+        mProgressView.setImageBitmap(bitmap);
+        return this;
+    }
+    public MyClassicsHeader setProgressDrawable(Drawable drawable) {
+        mProgressDrawable = null;
+        mProgressView.setImageDrawable(drawable);
+        return this;
+    }
+    public MyClassicsHeader setProgressResource(@DrawableRes int resId) {
+        mProgressDrawable = null;
+        mProgressView.setImageResource(resId);
+        return this;
+    }
+    public MyClassicsHeader setArrowBitmap(Bitmap bitmap) {
+        mArrowDrawable = null;
+        mArrowView.setImageBitmap(bitmap);
+        return this;
+    }
+    public MyClassicsHeader setArrowDrawable(Drawable drawable) {
+        mArrowDrawable = null;
+        mArrowView.setImageDrawable(drawable);
+        return this;
+    }
+    public MyClassicsHeader setArrowResource(@DrawableRes int resId) {
+        mArrowDrawable = null;
+        mArrowView.setImageResource(resId);
+        return this;
+    }
+
+    public MyClassicsHeader setLastUpdateTime(Date time) {
+        mLastTime = time;
+        mLastUpdateText.setText(mFormat.format(time));
+        if (mShared != null && !isInEditMode()) {
+            mShared.edit().putLong(KEY_LAST_UPDATE_TIME, time.getTime()).apply();
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setLastUpdateText(CharSequence text) {
+        mLastTime = null;
+        mLastUpdateText.setText(text);
+        return this;
+    }
+
+    public MyClassicsHeader setTimeFormat(DateFormat format) {
+        mFormat = format;
+        if (mLastTime != null) {
+            mLastUpdateText.setText(mFormat.format(mLastTime));
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setSpinnerStyle(SpinnerStyle style) {
+        this.mSpinnerStyle = style;
+        return this;
+    }
+
+    public MyClassicsHeader setPrimaryColor(@ColorInt int primaryColor) {
+        mBackgroundColor = mPrimaryColor = primaryColor;
+        if (mRefreshKernel != null) {
+            mRefreshKernel.requestDrawBackgroundForHeader(mPrimaryColor);
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setAccentColor(@ColorInt int accentColor) {
+        mAccentColor = accentColor;
+        if (mArrowDrawable != null) {
+            mArrowDrawable.parserColors(accentColor);
+        }
+        if (mProgressDrawable != null) {
+            mProgressDrawable.setColor(accentColor);
+        }
+        mTitleText.setTextColor(accentColor);
+        mLastUpdateText.setTextColor(accentColor&0x00ffffff|0xcc000000);
+        return this;
+    }
+
+    public MyClassicsHeader setPrimaryColorId(@ColorRes int colorId) {
+        setPrimaryColor(ContextCompat.getColor(getContext(), colorId));
+        return this;
+    }
+
+    public MyClassicsHeader setAccentColorId(@ColorRes int colorId) {
+        setAccentColor(ContextCompat.getColor(getContext(), colorId));
+        return this;
+    }
+
+    public MyClassicsHeader setFinishDuration(int delay) {
+        mFinishDuration = delay;
+        return this;
+    }
+
+    public MyClassicsHeader setEnableLastTime(boolean enable) {
+        mEnableLastTime = enable;
+        mLastUpdateText.setVisibility(enable ? VISIBLE : GONE);
+        if (mRefreshKernel != null) {
+            mRefreshKernel.requestRemeasureHeightForHeader();
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setTextSizeTitle(float size) {
+        mTitleText.setTextSize(size);
+        if (mRefreshKernel != null) {
+            mRefreshKernel.requestRemeasureHeightForHeader();
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setTextSizeTitle(int unit, float size) {
+        mTitleText.setTextSize(unit, size);
+        if (mRefreshKernel != null) {
+            mRefreshKernel.requestRemeasureHeightForHeader();
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setTextSizeTime(float size) {
+        mLastUpdateText.setTextSize(size);
+        if (mRefreshKernel != null) {
+            mRefreshKernel.requestRemeasureHeightForHeader();
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setTextSizeTime(int unit, float size) {
+        mLastUpdateText.setTextSize(unit, size);
+        if (mRefreshKernel != null) {
+            mRefreshKernel.requestRemeasureHeightForHeader();
+        }
+        return this;
+    }
+
+    public MyClassicsHeader setTextTimeMarginTop(float dp) {
+        return setTextTimeMarginTopPx(DensityUtil.dp2px(dp));
+    }
+
+    public MyClassicsHeader setTextTimeMarginTopPx(int px) {
+        MarginLayoutParams lp = (MarginLayoutParams)mLastUpdateText.getLayoutParams();
+        lp.topMargin = px;
+        mLastUpdateText.setLayoutParams(lp);
+        return this;
+    }
+
+    public MyClassicsHeader setDrawableMarginRight(float dp) {
+        return setDrawableMarginRightPx(DensityUtil.dp2px(dp));
+    }
+
+    public MyClassicsHeader setDrawableMarginRightPx(int px) {
+        MarginLayoutParams lpArrow = (MarginLayoutParams)mArrowView.getLayoutParams();
+        MarginLayoutParams lpProgress = (MarginLayoutParams)mProgressView.getLayoutParams();
+        lpArrow.rightMargin = lpProgress.rightMargin = px;
+        mArrowView.setLayoutParams(lpArrow);
+        mProgressView.setLayoutParams(lpProgress);
+        return this;
+    }
+
+    public MyClassicsHeader setDrawableSize(float dp) {
+        return setDrawableSizePx(DensityUtil.dp2px(dp));
+    }
+
+    public MyClassicsHeader setDrawableSizePx(int px) {
+        ViewGroup.LayoutParams lpArrow = mArrowView.getLayoutParams();
+        ViewGroup.LayoutParams lpProgress = mProgressView.getLayoutParams();
+        lpArrow.width = lpProgress.width = px;
+        lpArrow.height = lpProgress.height = px;
+        mArrowView.setLayoutParams(lpArrow);
+        mProgressView.setLayoutParams(lpProgress);
+        return this;
+    }
+
+    public MyClassicsHeader setDrawableArrowSize(float dp) {
+        return setDrawableArrowSizePx(DensityUtil.dp2px(dp));
+    }
+
+    public MyClassicsHeader setDrawableArrowSizePx(int px) {
+        ViewGroup.LayoutParams lpArrow = mArrowView.getLayoutParams();
+        lpArrow.width = px;
+        lpArrow.height = px;
+        mArrowView.setLayoutParams(lpArrow);
+        return this;
+    }
+
+    public MyClassicsHeader setDrawableProgressSize(float dp) {
+        return setDrawableProgressSizePx(DensityUtil.dp2px(dp));
+    }
+
+    public MyClassicsHeader setDrawableProgressSizePx(int px) {
+        ViewGroup.LayoutParams lpProgress = mProgressView.getLayoutParams();
+        lpProgress.width = px;
+        lpProgress.height = px;
+        mProgressView.setLayoutParams(lpProgress);
+        return this;
+    }
+
+    public ImageView getArrowView() {
+        return mArrowView;
+    }
+
+    public ImageView getProgressView() {
+        return mProgressView;
+    }
+
+    public TextView getTitleText() {
+        return mTitleText;
+    }
+
+    public TextView getLastUpdateText() {
+        return mLastUpdateText;
+    }
+
+    //</editor-fold>
+}

+ 89 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/login/ConfigActivity.java

@@ -0,0 +1,89 @@
+package com.sjkj.appthreefloor_tsgz.login;
+
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseActivity;
+
+public class ConfigActivity extends BaseActivity {
+//    private MMKV mmkv = MMKV.defaultMMKV();
+
+    @Override
+    protected int initLayout() {
+        return R.layout.activity_config;
+    }
+
+    @Override
+    public void initView() {
+        getTitleView().setText("配置");
+        EditText ipDomainEt = findViewById(R.id.ip_domain_tv);
+        EditText ipWebEt = findViewById(R.id.ip_web_tv);
+        EditText ipUploadEt = findViewById(R.id.ip_upload_tv);
+        TextView saveTv = findViewById(R.id.save_tv);
+        saveTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String domain = ipDomainEt.getText().toString().trim();
+//                String web = ipWebEt.getText().toString().trim();
+                String upload = ipUploadEt.getText().toString().trim();
+
+                if (TextUtils.isEmpty(domain)) {
+                    ToastUtils.show("服务器地址不能为空");
+                    return;
+                }
+
+                if (domain.contains(" ")) {
+                    ToastUtils.show("服务器地址不能包含空格");
+                    return;
+                }
+
+                if (!domain.endsWith("/")) {
+                    ToastUtils.show("服务器地址格式有误");
+                    return;
+                }
+
+//                if (TextUtils.isEmpty(upload)) {
+//                    ToastUtils.show("文件服务器地址不能为空");
+//                    return;
+//                }
+//
+//                if (upload.contains(" ")) {
+//                    ToastUtils.show("文件服务器地址不能包含空格");
+//                    return;
+//                }
+//
+//                if (!upload.endsWith("/")) {
+//                    ToastUtils.show("文件服务器地址格式有误");
+//                    return;
+//                }
+                AppTools.setBaseUrl(domain);
+//                AppTools.setBaseFileUrl(upload);
+                finish();
+                AppTools.restartApp();
+//                if (!TextUtils.isEmpty(domain)) {
+//                    URLConfig.getInstance().setDomain(domain);
+//                }
+//                if (!TextUtils.isEmpty(web)) {
+//                    URLConfig.getInstance().setWebView(web);
+//                }
+//                if (!TextUtils.isEmpty(upload)) {
+//                    URLConfig.getInstance().setUpload(upload);
+//                }
+//                finish();
+
+            }
+        });
+
+        ipDomainEt.setText(AppTools.getBaseUrl());
+//        ipWebEt.setText(URLConfig.getInstance().getWebView());
+//        ipUploadEt.setText(AppTools.getBaseFileUrl());
+
+    }
+
+}

+ 236 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/login/LoginActivity.java

@@ -0,0 +1,236 @@
+package com.sjkj.appthreefloor_tsgz.login;
+
+import android.content.Intent;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.TypedValue;
+import android.view.View;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import com.sjkj.appthreefloor_tsgz.BuildConfig;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.MainActivity;
+import com.sjkj.appthreefloor_tsgz.app.App;
+import com.sjkj.appthreefloor_tsgz.bean.LogInRsaBean;
+import com.sjkj.appthreefloor_tsgz.bean.LoginBean;
+import com.sjkj.appthreefloor_tsgz.bean.MenuMainItemBean;
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityLoginBinding;
+import com.sjkj.appthreefloor_tsgz.net.LoginGetKeyRequest;
+import com.sjkj.appthreefloor_tsgz.net.LoginRequest;
+import com.sjkj.appthreefloor_tsgz.utils.AppSystemUtils;
+import com.sjkj.appthreefloor_tsgz.utils.LongClickUtils;
+import com.sjkj.appthreefloor_tsgz.utils.RSAUtils;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.net.domain.interactor.ProcessErrorSubscriber;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.PushUtils;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseLoginActivity;
+import com.sjkj.base_lib.weight.LoadingDialog;
+
+import java.util.ArrayList;
+
+public class LoginActivity extends BaseLoginActivity {
+
+    private ActivityLoginBinding binding;
+    private LoginViewModel viewModel;
+
+    private LoginGetKeyRequest loginGetKeyRequest = new LoginGetKeyRequest(App.getInstance());
+    public LoginRequest loginRequest = new LoginRequest(App.getInstance());
+
+    @Override
+    public int initLayout() {
+        isLogin = true;
+        return R.layout.activity_login;
+    }
+
+    @Override
+    public void initBinding() {
+        binding = (ActivityLoginBinding) getViewDataBinding();
+        viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(LoginViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        binding.configTv.setVisibility(BuildConfig.DEBUG ? View.VISIBLE : View.INVISIBLE);
+        if (BuildConfig.DEBUG) {
+            binding.configTv.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    startActivity(new Intent(LoginActivity.this, ConfigActivity.class));
+                }
+            });
+        } else {
+            LongClickUtils.setLongClick(new Handler(), binding.configTv, 2500, new View.OnLongClickListener() {
+                @Override
+                public boolean onLongClick(View v) {
+                    startActivity(new Intent(LoginActivity.this, ConfigActivity.class));
+                    return true;
+                }
+            });
+        }
+    }
+
+    @Override
+    public void loadData() {
+        viewModel.username.set(AppTools.getUserName());
+        viewModel.password.set(AppTools.getPassword());
+    }
+
+    @Override
+    public void initListener() {
+        binding.submit.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (TextUtils.isEmpty(viewModel.username.get())) {
+                    ToastUtils.show("用户名不能为空");
+                    return;
+                }
+                if (TextUtils.isEmpty(viewModel.password.get())) {
+                    ToastUtils.show("密码不能为空");
+                    return;
+                }
+                getLoginKey();
+            }
+        });
+//        binding.forgetPwdTv.setOnClickListener(new View.OnClickListener() {
+//            @Override
+//            public void onClick(View view) {
+//                startActivity(new Intent(LoginActivity.this, UpdatePasswordActivity.class));
+//            }
+//        });
+    }
+
+    /**
+     * 获取秘钥
+     */
+    private void getLoginKey() {
+        showLoadingDialog();
+        loginGetKeyRequest.execute(new ProcessErrorSubscriber<LogInRsaBean>() {
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                hideLoadingDialog(LoadingDialog.LOADING_FAILED);
+                if (!TextUtils.isEmpty(e.getMessage()) && e.getMessage().contains("connect")) {
+                    ToastUtils.show("连接服务器失败,检查网络连接。");
+                } else {
+                    ToastUtils.show(e.getMessage() + "");
+                }
+            }
+
+            @Override
+            public void onNext(LogInRsaBean bean) {
+                super.onNext(bean);
+                //公钥加密
+                String encryptBytes = "";
+                try {
+                    encryptBytes = RSAUtils.encryptPublicKey(viewModel.password.get().getBytes(), bean.getPublicKey());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                viewModel.password2.set(encryptBytes);
+                viewModel.sessionId.set(bean.getSessionId());
+                login();
+            }
+        });
+
+    }
+
+    /**
+     * 登录接口
+     */
+    public void login() {
+//        if (TextUtils.isEmpty(viewModel.username.get())) {
+//            ToastUtils.show("用户名不能为空");
+//            return;
+//        }
+//        if (TextUtils.isEmpty(viewModel.password.get())) {
+//            ToastUtils.show("密码不能为空");
+//            return;
+//        }
+        Params params = new Params();
+//        params.put("loginType", "mobile");
+        params.put("username", viewModel.username.get());
+        params.put("password", viewModel.password2.get());
+        params.put("sessionId", viewModel.sessionId.get());
+        params.put("deviceid", PushUtils.getRegistrationId());
+        loginRequest.setParams(params);
+        loginRequest.execute(new ProcessErrorSubscriber<LoginBean>() {
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                hideLoadingDialog(LoadingDialog.LOADING_FAILED);
+                if (!TextUtils.isEmpty(e.getMessage()) && e.getMessage().contains("connect")) {
+                    ToastUtils.show("连接服务器失败,检查网络连接。");
+                } else {
+                    ToastUtils.show(e.getMessage() + "");
+                }
+            }
+
+            @Override
+            public void onNext(LoginBean data) {
+                super.onNext(data);
+                try {
+                    hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
+                    AppTools.setToken(data.getAccessToken());
+                    AppTools.setUserId(data.getUserinfo().getUserid());
+                    AppTools.setNickName(data.getUserinfo().getSysUser().getNickName());
+                    AppTools.setIsWangGe(data.getUserinfo().getSysUser().getIsWangGe());
+                    AppTools.setUserName(viewModel.username.get());
+                    AppTools.setPassword(viewModel.password.get());
+
+                    AppTools.setDeptId(data.getUserinfo().getSysUser().getDeptId());
+                    AppTools.setDeptName(data.getUserinfo().getSysUser().getDeptNames());
+                    ArrayList<MenuMainItemBean> menuList = null;
+                    AppSystemUtils.menuList.clear();
+                    if (data.getUserinfo() != null && data.getUserinfo().getUserappList() != null && data.getUserinfo().getUserappList().size() > 0) {
+                        menuList = new ArrayList<>();
+                        for (LoginBean.SystemMenuBean bean : data.getUserinfo().getUserappList()) {
+                            menuList.add(new MenuMainItemBean(bean.getMenuName(), bean.getMenuId(), bean.getIcon()));
+                        }
+                        AppSystemUtils.menuList.addAll(menuList);
+                    }
+
+
+                    if (data != null && data.isUpdatePwd()) {//过期
+                       // AppManager.getAppManager().currentActivity().startActivity(new Intent(AppManager.getAppManager().currentActivity(), UpdatePasswordActivity.class));
+                    }else{
+                        PushUtils.pushRestart();
+                        if ("四平市".equals(data.getUserinfo().getSysUser().getDeptNames()) ||
+                                "双辽市".equals(data.getUserinfo().getSysUser().getDeptNames()) ||
+                                "伊通县".equals(data.getUserinfo().getSysUser().getDeptNames()) ||
+                                "梨树县".equals(data.getUserinfo().getSysUser().getDeptNames()) ||
+                                "铁东区".equals(data.getUserinfo().getSysUser().getDeptNames()) ||
+                                "铁西区".equals(data.getUserinfo().getSysUser().getDeptNames())) {
+                            AppTools.isLeader = true;
+                            AppSystemUtils.setGhb(false);
+                           // AppManager.getAppManager().currentActivity().startActivity(new Intent(AppManager.getAppManager().currentActivity(), TSGZMainActivity.class));
+                        } else {
+                            AppTools.isLeader = false;
+//                            if (AppSystemUtils.isGhb()) {
+//                                Intent intent = new Intent(AppManager.getAppManager().currentActivity(), MainActivity_Big.class);
+//                                AppManager.getAppManager().currentActivity().startActivity(intent);
+//                            } else {
+                                Intent intent = new Intent(AppManager.getAppManager().currentActivity(), MainActivity.class);
+                                AppManager.getAppManager().currentActivity().startActivity(intent);
+                           // }
+                        }
+                        hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
+                        finish();
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+
+    }
+}

+ 20 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/login/LoginViewModel.java

@@ -0,0 +1,20 @@
+package com.sjkj.appthreefloor_tsgz.login;
+
+import androidx.databinding.ObservableField;
+import androidx.databinding.ObservableInt;
+
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+
+public class LoginViewModel extends BaseViewModel {
+
+    public ObservableInt identity = new ObservableInt(0);
+    public ObservableField<String> username = new ObservableField<>("");
+    public ObservableField<String> password = new ObservableField<>("");
+    public ObservableField<String> password2 = new ObservableField<>("");
+    public ObservableField<String> sessionId = new ObservableField<>("");
+
+    public ObservableField<String> deptName = new ObservableField<>("");
+    public ObservableField<String> deptId = new ObservableField<>("");
+
+}

+ 52 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/net/BannerRequest.java

@@ -0,0 +1,52 @@
+package com.sjkj.appthreefloor_tsgz.net;
+
+import android.content.Context;
+
+import com.sjkj.appthreefloor_tsgz.bean.BannerDataBean;
+import com.sjkj.appthreefloor_tsgz.net.RetrofitService;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.entity.ResponseBean;
+import com.sjkj.base_lib.net.RetrofitFactory;
+import com.sjkj.base_lib.net.data.exception.BusinessException;
+import com.sjkj.base_lib.net.domain.interactor.UseCase;
+
+import rx.Observable;
+import rx.functions.Func1;
+
+/**
+ * 首页轮播图
+ */
+public class BannerRequest extends UseCase {
+    private Context context;
+    private RetrofitService service;
+
+    private Params params;
+
+    public Params getParams() {
+        return params;
+    }
+
+    public void setParams(Params params) {
+        this.params = params;
+    }
+
+    public BannerRequest(Context context) {
+        this.context = context;
+        service = RetrofitFactory.getRetrofit(AppTools.getBaseUrl()).create(RetrofitService.class);
+    }
+
+    @Override
+    protected Observable buildUseCaseObservable() {
+        return service.banners(params).flatMap(new Func1<ResponseBean<BannerDataBean>, Observable<BannerDataBean>>() {
+            @Override
+            public Observable<BannerDataBean> call(ResponseBean<BannerDataBean> responseBean) {
+                if (!ResponseBean.CODE_SUCCESS.
+                        equals(responseBean.getCode())) {
+                    return Observable.error(new BusinessException(responseBean.getMsg()));
+                }
+                return Observable.just(responseBean.getData());
+            }
+        });
+    }
+}

+ 52 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/net/LoginGetKeyRequest.java

@@ -0,0 +1,52 @@
+package com.sjkj.appthreefloor_tsgz.net;
+
+import android.content.Context;
+
+import com.sjkj.appthreefloor_tsgz.bean.LogInRsaBean;
+import com.sjkj.appthreefloor_tsgz.net.RetrofitService;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.entity.ResponseBean;
+import com.sjkj.base_lib.net.RetrofitFactory;
+import com.sjkj.base_lib.net.data.exception.BusinessException;
+import com.sjkj.base_lib.net.domain.interactor.UseCase;
+
+import rx.Observable;
+import rx.functions.Func1;
+
+/**
+ * 登录获取公钥
+ */
+public class LoginGetKeyRequest extends UseCase {
+    private Context context;
+    private RetrofitService service;
+
+    private Params params;
+
+    public Params getParams() {
+        return params;
+    }
+
+    public void setParams(Params params) {
+        this.params = params;
+    }
+
+    public LoginGetKeyRequest(Context context) {
+        this.context = context;
+        service = RetrofitFactory.getRetrofit(AppTools.getBaseUrl()).create(RetrofitService.class);
+    }
+
+    @Override
+    protected Observable buildUseCaseObservable() {
+        return service.getLoginKey().flatMap(new Func1<ResponseBean<LogInRsaBean>, Observable<LogInRsaBean>>() {
+            @Override
+            public Observable<LogInRsaBean> call(ResponseBean<LogInRsaBean> responseBean) {
+                if (!ResponseBean.CODE_SUCCESS.
+                        equals(responseBean.getCode())) {
+                    return Observable.error(new BusinessException(responseBean.getMsg()));
+                }
+                return Observable.just(responseBean.getData());
+            }
+        });
+    }
+}

+ 52 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/net/LoginRequest.java

@@ -0,0 +1,52 @@
+package com.sjkj.appthreefloor_tsgz.net;
+
+import android.content.Context;
+
+import com.sjkj.appthreefloor_tsgz.bean.LoginBean;
+import com.sjkj.appthreefloor_tsgz.net.RetrofitService;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.entity.ResponseBean;
+import com.sjkj.base_lib.net.RetrofitFactory;
+import com.sjkj.base_lib.net.data.exception.BusinessException;
+import com.sjkj.base_lib.net.domain.interactor.UseCase;
+
+import rx.Observable;
+import rx.functions.Func1;
+
+/**
+ * 登录
+ */
+public class LoginRequest extends UseCase {
+    private Context context;
+    private RetrofitService service;
+
+    private Params params;
+
+    public Params getParams() {
+        return params;
+    }
+
+    public void setParams(Params params) {
+        this.params = params;
+    }
+
+    public LoginRequest(Context context) {
+        this.context = context;
+        service = RetrofitFactory.getRetrofit(AppTools.getBaseUrl()).create(RetrofitService.class);
+    }
+
+    @Override
+    protected Observable buildUseCaseObservable() {
+        return service.login(params).flatMap(new Func1<ResponseBean<LoginBean>, Observable<LoginBean>>() {
+            @Override
+            public Observable<LoginBean> call(ResponseBean<LoginBean> responseBean) {
+                if (!ResponseBean.CODE_SUCCESS.
+                        equals(responseBean.getCode())) {
+                    return Observable.error(new BusinessException(responseBean.getMsg()));
+                }
+                return Observable.just(responseBean.getData());
+            }
+        });
+    }
+}

+ 23 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/net/RetrofitService.java

@@ -0,0 +1,23 @@
+package com.sjkj.appthreefloor_tsgz.net;
+
+import com.sjkj.appthreefloor_tsgz.bean.BannerDataBean;
+import com.sjkj.appthreefloor_tsgz.bean.LogInRsaBean;
+import com.sjkj.appthreefloor_tsgz.bean.LoginBean;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.entity.ResponseBean;
+
+import retrofit2.http.Body;
+import retrofit2.http.POST;
+import retrofit2.http.QueryMap;
+import rx.Observable;
+
+public interface RetrofitService {
+    @POST("AppLoginController/login")
+    Observable<ResponseBean<LoginBean>> login(@Body Params params);
+
+    @POST("AppLoginController/getPrivateKey")
+    Observable<ResponseBean<LogInRsaBean>> getLoginKey();
+    //首页轮播图
+    @POST("AppMainPageController/getMainPageInfo")
+    Observable<ResponseBean<BannerDataBean>> banners(@QueryMap Params params);
+}

+ 94 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/AppSystemUtils.java

@@ -0,0 +1,94 @@
+package com.sjkj.appthreefloor_tsgz.utils;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+
+import androidx.appcompat.app.AlertDialog;
+
+import com.sjkj.appthreefloor_tsgz.bean.MenuMainItemBean;
+import com.sjkj.appthreefloor_tsgz.login.LoginActivity;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.PushUtils;
+import com.tencent.mmkv.MMKV;
+
+import java.util.ArrayList;
+
+public class AppSystemUtils {
+    private static MMKV mmkv = MMKV.defaultMMKV();
+    public static ArrayList<MenuMainItemBean> menuList = new ArrayList<>();
+    public static boolean isLeader = false;
+
+    public static void exitApp() {
+        try {
+            AppSystemUtils.menuList.clear();
+            AppTools.LOCUS_OPEN = false;
+            AppTools.setLogin(false);
+            AppTools.setToken("");
+            AppTools.setUserId("");
+            AppTools.setDeptId("");
+            AppTools.setDeptName("");
+            AppTools.setNickName("");
+            AppTools.setIsWangGe("");
+            //AppTools.setUserName("");
+//            AppTools.setPassword("");
+            //停止、清除登录人推送信息
+            PushUtils.pushStop();
+            //页面跳转登录页
+            Intent intent = new Intent(AppManager.getAppManager().currentActivity(), LoginActivity.class);
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+            AppManager.getAppManager().currentActivity().startActivity(intent);
+            //关闭当前页面
+            AppManager.getAppManager().currentActivity().finish();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void showDialogLoginAuth() {
+        AlertDialog alertDialog = new AlertDialog.Builder(AppManager.getAppManager().currentActivity())
+                .setTitle("提示")
+                .setMessage("登录状态失效,或已在其他设备登录!")
+                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialogInterface, int i) {
+                        AppSystemUtils.exitApp();
+                        dialogInterface.dismiss();
+                    }
+                })
+//                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
+//                    @Override
+//                    public void onClick(DialogInterface dialogInterface, int i) {
+//                     }
+//                })
+                .setCancelable(false)
+                .create();
+
+        alertDialog.show();
+
+    }
+
+    public static void setGhb(boolean isghb) {
+            mmkv.encode("isGhb", isghb);
+    }
+
+    public static boolean isGhb() {
+        return mmkv.decodeBool("isGhb", false);
+    }
+
+    public static void isGhb(GhbListener ghbListener) {
+        if (isGhb()) {
+            if (ghbListener != null)
+                ghbListener.resultYes();
+        } else {
+            if (ghbListener != null)
+                ghbListener.resultNo();
+        }
+    }
+
+    public interface GhbListener {
+        void resultYes();
+
+        void resultNo();
+    }
+}

+ 195 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/CrashHandler.java

@@ -0,0 +1,195 @@
+package com.sjkj.appthreefloor_tsgz.utils;
+
+
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Build;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.lang.reflect.Field;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接    管程序,并记录发送错误报告.
+ *
+ * @author sun
+ */
+public class CrashHandler implements UncaughtExceptionHandler {
+
+    public static final String TAG = "EEE";
+
+    // 系统默认的UncaughtException处理类
+    private UncaughtExceptionHandler mDefaultHandler;
+    // CrashHandler实例
+    private static CrashHandler INSTANCE = new CrashHandler();
+    // 程序的Context对象
+    private Context mContext;
+    // 用来存储设备信息和异常信息
+    private Map<String, String> infos = new HashMap<String, String>();
+
+    /**
+     * 保证只有一个CrashHandler实例
+     */
+    private CrashHandler() {
+    }
+
+    /**
+     * 获取CrashHandler实例 ,单例模式
+     */
+    public static CrashHandler getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * 初始化
+     *
+     * @param context
+     */
+    public void init(Context context) {
+        mContext = context;
+        // 获取系统默认的UncaughtException处理器
+        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
+        // 设置该CrashHandler为程序的默认处理器
+        Thread.setDefaultUncaughtExceptionHandler(this);
+    }
+
+    /**
+     * 当UncaughtException发生时会转入该函数来处理
+     */
+    @Override
+    public void uncaughtException(Thread thread, Throwable ex) {
+        if (!handleException(ex) && mDefaultHandler != null) {
+            // 如果用户没有处理则让系统默认的异常处理器来处理
+            mDefaultHandler.uncaughtException(thread, ex);
+        } else {
+            try {
+                Thread.sleep(3000);
+            } catch (InterruptedException e) {
+                Log.e(TAG, "error : ", e);
+            }
+            // 退出程序
+
+        }
+    }
+
+    /**
+     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
+     *
+     * @param ex
+     * @return true:如果处理了该异常信息;否则返回false.
+     */
+    private boolean handleException(Throwable ex) {
+        if (ex == null) {
+            return false;
+        }
+        // 收集设备参数信息
+        collectDeviceInfo(mContext);
+
+        // 保存日志文件
+        saveCrashInfo2File(ex);
+        return false;
+    }
+
+    /**
+     * 收集设备参数信息
+     *
+     * @param ctx
+     */
+    public void collectDeviceInfo(Context ctx) {
+        try {
+            PackageManager pm = ctx.getPackageManager();
+            PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES);
+            if (pi != null) {
+                String versionName = pi.versionName == null ? "null" : pi.versionName;
+                String versionCode = pi.versionCode + "";
+                infos.put("versionName", versionName);
+                infos.put("versionCode", versionCode);
+            }
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "an error occured when collect package info", e);
+        }
+        Field[] fields = Build.class.getDeclaredFields();
+        for (Field field : fields) {
+            try {
+                field.setAccessible(true);
+                infos.put(field.getName(), field.get(null).toString());
+                Log.d(TAG, field.getName() + " : " + field.get(null));
+            } catch (Exception e) {
+                Log.e(TAG, "an error occured when collect crash info", e);
+            }
+        }
+    }
+
+    /**
+     * 保存错误信息到文件中
+     *
+     * @param ex
+     * @return 返回文件名称, 便于将文件传送到服务器
+     */
+    private String saveCrashInfo2File(Throwable ex) {
+        Log.e(TAG, ex.getMessage());
+        StringBuffer sb = new StringBuffer();
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+        int month = calendar.get(Calendar.MONTH) + 1;
+        int day = calendar.get(Calendar.DAY_OF_MONTH);
+        int hour = calendar.get(Calendar.HOUR_OF_DAY);
+        int minute = calendar.get(Calendar.MINUTE);
+        int second = calendar.get(Calendar.SECOND);
+        String time = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
+        sb.append("\r\n");
+        sb.append("\r\n");
+        sb.append("\r\n");
+        sb.append("************************************************"+time+"****************************************"+"\r\n");
+        sb.append("\r\n");
+        for (Map.Entry<String, String> entry : infos.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            sb.append(key + "=" + value + "\n");
+        }
+
+        Writer writer = new StringWriter();
+        PrintWriter printWriter = new PrintWriter(writer);
+        ex.printStackTrace(printWriter);
+        Throwable cause = ex.getCause();
+        while (cause != null) {
+            cause.printStackTrace(printWriter);
+            cause = cause.getCause();
+        }
+        printWriter.close();
+        String result = writer.toString();
+        sb.append(result);
+        try {
+            String fileName = "errorLog.txt";
+            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+                String path = Environment.getExternalStorageDirectory() + "/errorLog";
+                Log.e(TAG, path);
+                File dir = new File(path);
+                if (!dir.exists()) {
+                    dir.mkdir();
+                }
+                File file = new File(path + File.separator + fileName);
+                if (!file.exists()) {
+                    file.createNewFile();
+                }
+                FileWriter fileWriter = new FileWriter(file, true);
+                fileWriter.write(sb.toString());
+                fileWriter.close();
+            }
+            return fileName;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}

+ 65 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/LongClickUtils.java

@@ -0,0 +1,65 @@
+package com.sjkj.appthreefloor_tsgz.utils;
+
+import android.os.Handler;
+import android.view.MotionEvent;
+import android.view.View;
+
+public class LongClickUtils {
+
+    private static final String TAG = "LongClickUtils";
+
+    /**
+     * @param handler           外界handler(为了减少handler的泛滥使用,最好全局传handler引用,如果没有就直接传 new Handler())
+     * @param longClickView     被长按的视图(任意控件)
+     * @param delayMillis       长按时间,毫秒
+     * @param longClickListener 长按回调的返回事件
+     */
+    public static void setLongClick(final Handler handler, final View longClickView, final long delayMillis, final View.OnLongClickListener longClickListener) {
+        longClickView.setOnTouchListener(new View.OnTouchListener() {
+            private int TOUCH_MAX = 50;
+            private int mLastMotionX;
+            private int mLastMotionY;
+
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                int x = (int) event.getX();
+                int y = (int) event.getY();
+
+                switch (event.getAction()) {
+                    case MotionEvent.ACTION_UP:
+                        // 抬起时,移除已有Runnable回调,抬起就算长按了(不需要考虑用户是否长按了超过预设的时间)
+                        handler.removeCallbacks(r);
+                        break;
+                    case MotionEvent.ACTION_MOVE:
+                        if (Math.abs(mLastMotionX - x) > TOUCH_MAX
+                                || Math.abs(mLastMotionY - y) > TOUCH_MAX) {
+                            // 移动误差阈值
+                            // xy方向判断
+                            // 移动超过阈值,则表示移动了,就不是长按(看需求),移除 已有的Runnable回调
+                            handler.removeCallbacks(r);
+                        }
+                        break;
+                    case MotionEvent.ACTION_DOWN:
+                        // 每次按下重新计时
+                        // 按下前,先移除 已有的Runnable回调,防止用户多次单击导致多次回调长按事件的bug
+                        handler.removeCallbacks(r);
+                        mLastMotionX = x;
+                        mLastMotionY = y;
+                        // 按下时,开始计时
+                        handler.postDelayed(r, delayMillis);
+                        break;
+                }
+                return true;//onclick等其他事件不能用请改这里
+            }
+
+            private Runnable r = new Runnable() {
+                @Override
+                public void run() {
+                    if (longClickListener != null) {// 回调给用户,用户可能传null,需要判断null
+                        longClickListener.onLongClick(longClickView);
+                    }
+                }
+            };
+        });
+    }
+}

+ 57 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/RSAUtils.java

@@ -0,0 +1,57 @@
+package com.sjkj.appthreefloor_tsgz.utils;
+
+import android.util.Base64;
+
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
+import java.security.spec.X509EncodedKeySpec;
+
+import javax.crypto.Cipher;
+
+/**
+ * Created by LG on 2018/9/21.
+ */
+
+public class RSAUtils {
+
+    public static final String KEY_ALGORITHM = "RSA";
+    private static KeyFactory keyFactory = null;
+
+    static {
+        try {
+            keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
+    /**
+     * 公钥加密
+     *
+     * @param data 待加密数据
+     * @param key  密钥
+     * @return byte[] 加密数据
+     */
+    public static String encryptPublicKey(byte[] data, String key) throws Exception {
+        //解密密钥
+        byte[] keyBytes = Base64.decode(key, Base64.NO_WRAP);
+        //实例化密钥工厂
+        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
+        //初始化公钥
+        //密钥材料转换
+        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
+        //产生公钥
+        PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
+
+        //数据加密
+        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");//Android端使用
+        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
+        byte[] bytes = cipher.doFinal(data);
+        return new String(Base64.encode(bytes, Base64.NO_WRAP));
+    }
+
+
+}

+ 110 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/ScreenUtil.java

@@ -0,0 +1,110 @@
+package com.sjkj.appthreefloor_tsgz.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.WindowManager;
+
+public class ScreenUtil {
+
+    private ScreenUtil() {
+        throw new UnsupportedOperationException("cannot be instantiated");
+    }
+
+    /**
+     * 获得屏幕高度
+     */
+    public static int getScreenWidth(Context context) {
+        WindowManager wm = (WindowManager) context
+                .getSystemService(Context.WINDOW_SERVICE);
+        DisplayMetrics outMetrics = new DisplayMetrics();
+        wm.getDefaultDisplay().getMetrics(outMetrics);
+        return outMetrics.widthPixels;
+    }
+
+    /**
+     * 获得屏幕宽度
+     */
+    public static int getScreenHeight(Context context) {
+        WindowManager wm = (WindowManager) context
+                .getSystemService(Context.WINDOW_SERVICE);
+        DisplayMetrics outMetrics = new DisplayMetrics();
+        wm.getDefaultDisplay().getMetrics(outMetrics);
+        return outMetrics.heightPixels;
+    }
+
+    /**
+     * 获得状态栏的高度
+     */
+    public static int getStatusHeight(Context context) {
+
+        int statusHeight = -1;
+        try {
+            Class<?> clazz = Class.forName("com.android.internal.R$dimen");
+            Object object = clazz.newInstance();
+            int height = Integer.parseInt(clazz.getField("status_bar_height")
+                    .get(object).toString());
+            statusHeight = context.getResources().getDimensionPixelSize(height);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return statusHeight;
+    }
+
+    /**
+     * 获取当前屏幕截图,包含状态栏
+     */
+    public static Bitmap snapShotWithStatusBar(Activity activity) {
+        View view = activity.getWindow().getDecorView();
+        view.setDrawingCacheEnabled(true);
+        view.buildDrawingCache();
+        Bitmap bmp = view.getDrawingCache();
+        int width = getScreenWidth(activity);
+        int height = getScreenHeight(activity);
+        Bitmap bp = null;
+        bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
+        view.destroyDrawingCache();
+        return bp;
+
+    }
+
+    /**
+     * 获取当前屏幕截图,不包含状态栏
+     */
+    public static Bitmap snapShotWithoutStatusBar(Activity activity) {
+        View view = activity.getWindow().getDecorView();
+        view.setDrawingCacheEnabled(true);
+        view.buildDrawingCache();
+        Bitmap bmp = view.getDrawingCache();
+        Rect frame = new Rect();
+        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
+        int statusBarHeight = frame.top;
+
+        int width = getScreenWidth(activity);
+        int height = getScreenHeight(activity);
+        Bitmap bp = null;
+        bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
+                - statusBarHeight);
+        view.destroyDrawingCache();
+        return bp;
+    }
+
+    /**
+     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
+     */
+    public static int dip2px(Context context, float dpValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (dpValue * scale + 0.5f);
+    }
+
+    /**
+     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
+     */
+    public static int px2dip(Context context, float pxValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (pxValue / scale + 0.5f);
+    }
+}

+ 311 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/web/WebViewActivity.java

@@ -0,0 +1,311 @@
+package com.sjkj.appthreefloor_tsgz.web;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.provider.Settings;
+import android.webkit.JavascriptInterface;
+import android.webkit.PermissionRequest;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.king.zxing.util.LogUtils;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityWebViewBinding;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseActivity;
+import com.sjkj.base_lib.app.AppManager;
+import com.tencent.mmkv.MMKV;
+import com.zhihu.matisse.Matisse;
+import com.zhihu.matisse.MimeType;
+import com.zhihu.matisse.engine.impl.GlideEngine;
+import com.zhihu.matisse.internal.entity.CaptureStrategy;
+
+import java.util.List;
+
+public class WebViewActivity extends BaseActivity {
+
+    private WebViewModel model;
+    private ActivityWebViewBinding binding;
+    private String url;
+    private String enterpriseId, dangerSource;
+    private MMKV mmkv = MMKV.defaultMMKV();
+
+    @Override
+    public int initLayout() {
+        return R.layout.activity_web_view;
+    }
+
+    @Override
+    public void initBinding() {
+        binding = (ActivityWebViewBinding) getViewDataBinding();
+        model = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(WebViewModel.class);
+        binding.setLifecycleOwner(this);
+    }
+
+    @Override
+    public void initView() {
+        url = getIntent().getStringExtra("url");
+        if (getIntent().hasExtra("enterpriseId")) {
+            enterpriseId = getIntent().getStringExtra("enterpriseId");
+        }
+        binding.webView.addJavascriptInterface(this, "$App");
+        //localStorage  允许存储
+        binding.webView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);//存储的最大容量
+        String appCachePath = getCacheDir().getAbsolutePath();
+        binding.webView.getSettings().setAppCachePath(appCachePath);
+        binding.webView.getSettings().setAllowFileAccess(true);
+        binding.webView.getSettings().setAppCacheEnabled(true);
+
+        WebSettings webSettings = binding.webView.getSettings();
+        //如果访问的页面中要与Javascript交互,则webView必须设置支持Javascript
+        webSettings.setJavaScriptEnabled(true);
+        //设置自适应屏幕,两者合用
+        webSettings.setUseWideViewPort(true); //将图片调整到适合webView的大小
+        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
+        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
+        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
+        webSettings.setGeolocationEnabled(true);
+        webSettings.setDomStorageEnabled(true);
+        //缩放操作
+        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
+        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
+        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
+        //其他细节操作
+        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //关闭webView中缓存
+        webSettings.setAllowFileAccess(true); //设置可以访问文件
+        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
+        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
+        webSettings.setAllowFileAccessFromFileURLs(true);
+        webSettings.setAllowUniversalAccessFromFileURLs(true);
+        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
+        binding.webView.setScrollContainer(true);
+
+        binding.webView.loadUrl(url);
+
+        binding.webView.requestFocus();
+//        binding.webView.setScrollBarStyle(0);
+        binding.webView.setWebViewClient(new WebViewClient() {
+            @Override
+            public boolean shouldOverrideUrlLoading(WebView view, String url) {
+                try {
+                    if (url.startsWith("http:") || url.startsWith("https:")) {
+                        view.loadUrl(url);
+                    } else {
+                    }
+                    return true;
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    return false;
+                }
+            }
+
+        });
+        binding.webView.setWebChromeClient(new WebChromeClient() {
+            @Override
+            public void onPermissionRequest(PermissionRequest request) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                    request.grant(request.getResources());
+                }
+//                super.onPermissionRequest(request);
+            }
+
+            @Override
+            public void onPermissionRequestCanceled(PermissionRequest request) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+                    LogUtils.e("TAG" + "取消的权限" + request.getResources().length);
+                }
+//                super.onPermissionRequestCanceled(request);
+            }
+        });
+    }
+
+
+    @Override
+    public void initListener() {
+    }
+
+    @Override
+    public void loadData() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            // 先判断有没有权限
+            if (Environment.isExternalStorageManager()) {
+
+            } else {
+//                RequestPermissions.obtainPermission(this, ConstantPermission.MANAGE_EXTERNAL_STORAGE, new PermissionCallback() {
+//                @Override
+//                public void onSuccess() {
+//
+//                }
+//
+//                @Override
+//                public void onFailure() {
+//
+//                }
+//            });
+                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
+                intent.setData(Uri.parse("package:" + this.getPackageName()));
+                startActivityForResult(intent, 1111);
+            }
+        }
+
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+//        if (requestCode == 100 && resultCode == RESULT_OK) {
+//            List<Uri> result = Matisse.obtainResult(data);
+//            uploadFile(result.get(0));
+//        }
+    }
+
+    @JavascriptInterface
+    public void obtainImage() {
+        XXPermissions.with(this)
+                .permission(Permission.CAMERA)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(List<String> permissions, boolean all) {
+                        if (all) {
+                            Matisse.from(WebViewActivity.this)
+                                    .choose(MimeType.ofImage())//图片类型
+                                    .countable(true)//true:选中后显示数字;false:选中后显示对号
+                                    .maxSelectable(1)//可选的最大数
+                                    .capture(true)//选择照片时,是否显示拍照
+                                    .captureStrategy(new CaptureStrategy(false, AppTools.getPackageNameProvider()))//参数1 true表示拍照存储在共有目录,false表示存储在私有目录;参数2与 AndroidManifest中authorities值相同,用于适配7.0系统 必须设置
+                                    .imageEngine(new GlideEngine())//图片加载引擎
+                                    .forResult(100);
+                        } else {
+                            ToastUtils.show("获取部分权限成功,但部分权限未正常授予");
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(List<String> permissions, boolean never) {
+                        if (never) {
+                            ToastUtils.show("被永久拒绝授权,请手动授予权限");
+                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
+                            XXPermissions.startPermissionActivity(AppManager.getAppManager().currentActivity(), permissions);
+                        } else {
+                            ToastUtils.show("获取权限失败");
+                        }
+                    }
+                });
+
+    }
+
+//    //下载打开文件
+//    @JavascriptInterface
+//    public void downloadFileAndOpen(String fileUrl) {
+////        String pathString = "http://202.111.178.254:9004/efa310bd-28d9-4978-8f4d-02020bb87e29.doc";
+//        if (TextUtils.isEmpty(fileUrl)) {
+//            ToastUtils.show("文件路径有误");
+//            return;
+//        }
+//        try {
+//            String currentFileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1, fileUrl.length());
+//            HttpTools.downloadFile(WebViewActivity.this, fileUrl, currentFileName);
+//        } catch (Exception e) {
+//            ToastUtils.show("文件加载失败,请重试");
+//            e.printStackTrace();
+//        }
+//    }
+
+//    private void uploadFile(Uri uri) {
+//        String path = RealPathFromUriUtils.getRealPathFromUri(this, uri);
+//        File file = new File(path);
+//        if (file.exists()) {
+//            ProgressHelper.show(this);
+//            HttpTools.uploadFile(this, URLConfig.getInstance().getUpload() + "upload", file, new UploadResponseListener() {
+//                @Override
+//                public void onSuccess(JSONObject response) {
+//                    ProgressHelper.hide();
+//                    try {
+//                        if (TextUtils.equals("200", response.optString("code"))) {
+//                            String url = response.optJSONObject("data").optString("url");
+//                            String webUrl = response.optJSONObject("data").optString("webUrl");
+//                            LogUtils.e("uploadFile_" + webUrl);
+//                            callBack(url, webUrl);
+//                        }
+//                    } catch (Exception e) {
+//                        e.printStackTrace();
+//                        ToastUtils.show("上传文件失败");
+//                    }
+//                }
+//
+//                @Override
+//                public void onProgress() {
+//
+//                }
+//
+//                @Override
+//                public void onFailure(String result) {
+//                    ProgressHelper.hide();
+////                    ToastUtils.show(result);
+//                    ToastUtils.show("上传文件失败");
+//                }
+//            });
+//        } else {
+//            ToastUtils.show("上传文件失败");
+//        }
+//    }
+
+    public void callBack(String url, String webUrl) {
+        binding.webView.post(() -> binding.webView.loadUrl("javascript:onImagePath('" + url + "','" + webUrl + "')"));
+    }
+//
+//    @JavascriptInterface
+//    public void inspectionFinishPage(String dangerSourceId, String information) {
+//        startActivity(new Intent(this, SuccessInspectionActivity.class)
+//                .putExtra("enterpriseId", enterpriseId)
+//                .putExtra("information", information)
+//                .putExtra("dangerSourceId", dangerSourceId));
+//        finish();
+//    }
+
+    @JavascriptInterface
+    public void finishPage() {
+        finish();
+    }
+
+    @JavascriptInterface
+    public void getDeptId() {
+//        ToastUtils.show( "deptId:"+mmkv.decodeString("deptId") );
+        if (mmkv != null) {
+            binding.webView.post(() -> binding.webView.loadUrl("javascript:deptIdResult('" + mmkv.decodeString("deptId") + "')"));
+        }
+    }
+
+    @JavascriptInterface
+    public void getAccessToken() {
+//        ToastUtils.show( "access_token:"+mmkv.decodeString(ACCESS_TOKEN) );
+        if (mmkv != null) {
+            binding.webView.post(() -> binding.webView.loadUrl("javascript:accessTokenResult('" + mmkv.decodeString(AppTools.ACCESS_TOKEN) + "')"));
+        }
+    }
+
+//    @JavascriptInterface
+//    public void startNavLocation() {
+//        LocationUtil.getInstance().startLocation(aMapLocation -> {
+////            double userLat = Constant.DEFAULT_LAT, userLog = Constant.DEFAULT_LON;
+////            String address = "";
+////            ToastUtils.show(aMapLocation.getLatitude() + "," + aMapLocation.getLongitude() + "," + aMapLocation.getAddress());
+//            try {
+//                binding.webView.post(() -> binding.webView.loadUrl("javascript:navLocationResult('" + aMapLocation.getLatitude() + "','" + aMapLocation.getLongitude() + "','" + aMapLocation.getAddress() + "')"));
+//            } catch (Exception e) {
+//                ToastUtils.show(e.getMessage());
+//                e.printStackTrace();
+//            }
+//        }, true);
+//    }
+}

+ 16 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/web/WebViewModel.java

@@ -0,0 +1,16 @@
+package com.sjkj.appthreefloor_tsgz.web;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.webkit.WebView;
+
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+public class WebViewModel extends BaseViewModel {
+
+    @SuppressLint("JavascriptInterface")
+    protected void initWebView(Activity activity, WebView view) {
+
+
+    }
+}

+ 5 - 0
app/src/main/res/anim/actionsheet_dialog_in.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<translate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:duration="200"
+    android:fromYDelta="100%"
+    android:toYDelta="0" />

+ 5 - 0
app/src/main/res/anim/actionsheet_dialog_out.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<translate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:duration="200"
+    android:fromYDelta="0"
+    android:toYDelta="100%" />

+ 7 - 0
app/src/main/res/anim/activity_out.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <alpha
+        android:duration="150"
+        android:fromAlpha="1.0"
+        android:toAlpha="1.0"/>
+</set>

+ 11 - 0
app/src/main/res/anim/pophidden_anim.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromYDelta="0"
+        android:toYDelta="50%p" />
+    <alpha
+        android:duration="500"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0" />
+</set>

+ 12 - 0
app/src/main/res/anim/popshow_anim.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="500"
+        android:fromYDelta="100%p"
+        android:toYDelta="0" />
+
+    <alpha
+        android:duration="500"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0" />
+</set>

+ 11 - 0
app/src/main/res/anim/progress.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <rotate
+        android:duration="1000"
+        android:fromDegrees="0"
+        android:pivotX="50%"
+        android:pivotY="50%"
+        android:repeatCount="infinite"
+        android:interpolator="@android:anim/linear_interpolator"
+        android:toDegrees="360" />
+</set>

+ 11 - 0
app/src/main/res/anim/push_bottom_in.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 -->
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="200"
+        android:fromYDelta="100%p"
+        android:toYDelta="0" />
+    <alpha
+        android:duration="200"
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0" />
+</set>

+ 11 - 0
app/src/main/res/anim/push_bottom_out.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?><!-- 上下滑入式 -->
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:duration="200"
+        android:fromYDelta="0"
+        android:toYDelta="50%p" />
+    <alpha
+        android:duration="200"
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0" />
+</set>

BIN
app/src/main/res/drawable-hdpi/ic_launcher_logo_siping_tsgz_small.png


+ 170 - 0
app/src/main/res/drawable-v24/ic_launcher_background.xml

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportWidth="108"
+    android:viewportHeight="108">
+    <path
+        android:fillColor="#3DDC84"
+        android:pathData="M0,0h108v108h-108z" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M9,0L9,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,0L19,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,0L29,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,0L39,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,0L49,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,0L59,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,0L69,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,0L79,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M89,0L89,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M99,0L99,108"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,9L108,9"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,19L108,19"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,29L108,29"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,39L108,39"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,49L108,49"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,59L108,59"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,69L108,69"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,79L108,79"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,89L108,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,99L108,99"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,29L89,29"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,39L89,39"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,49L89,49"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,59L89,59"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,69L89,69"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,79L89,79"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,19L29,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,19L39,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,19L49,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,19L59,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,19L69,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,19L79,89"
+        android:strokeWidth="0.8"
+        android:strokeColor="#33FFFFFF" />
+</vector>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 30 - 0
app/src/main/res/drawable-v24/ic_launcher_foreground.xml


BIN
app/src/main/res/drawable-xhdpi/default_image.png


BIN
app/src/main/res/drawable-xhdpi/ic_launcher_logo_siping_tsgz_small.png


BIN
app/src/main/res/drawable-xxhdpi/ic_launcher_logo_siping_tsgz.png


BIN
app/src/main/res/drawable-xxhdpi/icon_daily.png


BIN
app/src/main/res/drawable-xxhdpi/icon_password_small.png


BIN
app/src/main/res/drawable-xxhdpi/icon_setting_small.png


BIN
app/src/main/res/drawable-xxhdpi/icon_username_account_small.png


+ 6 - 0
app/src/main/res/drawable/bg_tsgz_blue.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="10dp"/>
+    <solid android:color="#3870c8"/>
+</shape>

+ 9 - 0
app/src/main/res/drawable/ic_home.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="64dp"
+    android:height="64dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M419.2,905.6v-278.4h185.6v278.4h230.4V534.4h140.8L512,118.4l-464,416h137.6v371.2h233.6z"
+      android:fillColor="#508cef"/>
+</vector>

+ 12 - 0
app/src/main/res/drawable/ic_me.xml

@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="64dp"
+    android:height="64dp"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+  <path
+      android:pathData="M722.08,514.36c-14.28,-5.84 -29.03,-10.97 -44.05,-15.58C637.06,544.28 577.9,573.1 512,573.1c-66.22,0 -125.63,-29.09 -166.61,-74.97 -16.08,4.87 -31.87,10.3 -47.08,16.61 -76.06,31.51 -123.54,108.13 -120.34,190.4l3.73,96.03c1.15,29.67 25.54,53.12 55.22,53.12h547c31.53,0 57.43,-24.92 58.64,-56.44l3.51,-91.71c3.16,-83.06 -46.66,-160.13 -123.99,-191.78z"
+      android:fillColor="#508cef"/>
+  <path
+      android:pathData="M512,169.72c-99.1,0 -179.72,80.63 -179.72,179.73S412.9,529.17 512,529.17s179.73,-80.62 179.73,-179.72S611.1,169.72 512,169.72z"
+      android:fillColor="#508cef"/>
+</vector>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 9 - 0
app/src/main/res/drawable/ic_periphery.xml


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 9 - 0
app/src/main/res/drawable/ic_tsgz.xml


+ 9 - 0
app/src/main/res/drawable/round_corner_top_letf_right.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#FFFFFF" /> <!-- 白色背景 -->
+    <corners
+        android:bottomLeftRadius="0dp"
+        android:bottomRightRadius="0dp"
+        android:topLeftRadius="40dp"
+        android:topRightRadius="40dp" />
+</shape>

+ 5 - 0
app/src/main/res/drawable/selector_navigation_tab_color.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="@color/main_blue_color" android:state_checked="true" />
+    <item android:color="@color/color_gray_text" android:state_checked="false" />
+</selector>

+ 7 - 0
app/src/main/res/drawable/shape_background_white_change.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_white" />
+    <corners
+        android:bottomLeftRadius="50dp"
+        android:topLeftRadius="50dp" />
+</shape>

+ 10 - 0
app/src/main/res/drawable/shape_login_btn_solid_black.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/main_blue_color" />
+    <corners
+        android:bottomLeftRadius="30dp"
+        android:bottomRightRadius="30dp"
+        android:topLeftRadius="30dp"
+        android:topRightRadius="30dp" />
+</shape>

+ 110 - 0
app/src/main/res/layout/activity_config.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="30dp">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:layout_marginBottom="10dp"
+            android:text="后台服务器地址"
+            android:textColor="@color/color_black_text"
+            android:textSize="12dp" />
+
+        <EditText
+            android:id="@+id/ip_domain_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@null"
+            android:hint="http://xx.xx.xx.xx:xxxx/"
+            android:inputType="textNoSuggestions"
+            android:lines="1"
+            android:text=""
+            android:textColor="@color/color_gray_text"
+            android:textColorHint="@color/color_gray_text"
+            android:textSize="12dp" />
+
+        <View
+            style="@style/gray_line"
+            android:layout_marginTop="8dp" />
+
+        <TextView
+            android:visibility="gone"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="10dp"
+            android:text="前端服务器地址"
+            android:textColor="@color/color_black_text"
+            android:textSize="12dp" />
+
+        <EditText
+            android:visibility="gone"
+            android:id="@+id/ip_web_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@null"
+            android:hint="http://xx.xx.xx.xx:xxxx/"
+            android:inputType="textNoSuggestions"
+            android:lines="1"
+            android:text=""
+            android:textColor="@color/color_gray_text"
+            android:textColorHint="@color/color_gray_text"
+            android:textSize="12dp" />
+
+        <View
+            android:visibility="gone"
+            style="@style/gray_line"
+            android:layout_marginTop="10dp" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="14dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="10dp"
+            android:text="文件服务器地址"
+            android:textColor="@color/color_black_text"
+            android:textSize="12dp"
+            android:visibility="gone" />
+
+        <EditText
+            android:visibility="gone"
+            android:id="@+id/ip_upload_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@null"
+            android:hint="http://xx.xx.xx.xx:xxxx/"
+            android:lines="1"
+            android:text=""
+            android:textColor="@color/color_gray_text"
+            android:textColorHint="@color/color_gray_text"
+            android:textSize="12dp" />
+
+        <View
+            android:visibility="gone"
+            style="@style/gray_line"
+            android:layout_marginTop="10dp" />
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+        <Button
+            android:id="@+id/save_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="100dp"
+            android:background="@drawable/shape_login_btn_solid_black"
+            android:text="保存"
+            android:textColor="@color/color_white" />
+    </LinearLayout>
+</LinearLayout>

+ 228 - 0
app/src/main/res/layout/activity_login.xml

@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.login.LoginViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <androidx.core.widget.NestedScrollView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical">
+
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="390dp"
+                    android:background="@mipmap/bg_login_siping_tsgz" />
+
+                <!--            <RelativeLayout-->
+                <!--                android:id="@+id/rl_scan"-->
+                <!--                android:layout_width="30dp"-->
+                <!--                android:layout_height="30dp"-->
+                <!--                android:layout_alignParentRight="true"-->
+                <!--                android:layout_marginStart="10dp"-->
+                <!--                android:layout_marginTop="10dp"-->
+                <!--                android:layout_marginEnd="10dp"-->
+                <!--                android:layout_marginBottom="10dp"-->
+                <!--                android:background="@drawable/ic_scan2"-->
+                <!--                android:visibility="gone">-->
+
+                <!--            </RelativeLayout>-->
+
+                <!--            <View-->
+                <!--                android:id="@+id/view_setting"-->
+                <!--                android:layout_width="30dp"-->
+                <!--                android:layout_height="30dp"-->
+                <!--                android:layout_alignParentRight="true"-->
+                <!--                android:layout_centerVertical="true"-->
+                <!--                android:background="@null" />-->
+
+                <!--        </View>-->
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical"
+                    android:padding="30dp">
+
+                    <TextView
+                        android:id="@+id/username_tv"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="15dp"
+                        android:layout_marginTop="15dp"
+                        android:text="用户名"
+                        android:textColor="@color/color_black_text"
+                        android:textSize="12dp" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="8dp"
+                        android:gravity="center_vertical"
+                        android:orientation="horizontal">
+
+                        <EditText
+                            android:id="@+id/userName_et"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:background="@null"
+                            android:drawableLeft="@drawable/icon_username_account_small"
+                            android:drawablePadding="15dp"
+                            android:hint="请输入用户名"
+                            android:inputType="textNoSuggestions"
+                            android:padding="15dp"
+                            android:text="@={viewModel.username}"
+                            android:textColor="@color/color_gray_text"
+                            android:textColorHint="@color/color_gray_text"
+                            android:textSize="12dp"
+                            tools:ignore="TouchTargetSizeCheck" />
+
+                    </LinearLayout>
+
+                    <View
+                        style="@style/gray_line"
+                        android:layout_marginTop="8dp" />
+
+                    <TextView
+                        android:id="@+id/password_tv"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="15dp"
+                        android:layout_marginTop="15dp"
+                        android:text="密码"
+                        android:textColor="@color/color_black_text"
+                        android:textSize="12dp" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="8dp"
+                        android:gravity="center_vertical"
+                        android:orientation="horizontal">
+
+
+                        <EditText
+                            android:id="@+id/userPassword_et"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:background="@null"
+                            android:drawableLeft="@drawable/icon_password_small"
+                            android:drawablePadding="15dp"
+                            android:hint="请输入6-16密码"
+                            android:inputType="textPassword"
+                            android:padding="15dp"
+                            android:text="@={viewModel.password}"
+                            android:textColor="@color/color_gray_text"
+                            android:textColorHint="@color/color_gray_text"
+                            android:textSize="12dp"
+                            tools:ignore="TouchTargetSizeCheck" />
+
+                    </LinearLayout>
+
+                    <View
+                        style="@style/gray_line"
+                        android:layout_marginTop="8dp" />
+
+                    <!--                    <TextView-->
+                    <!--                        android:id="@+id/forget_pwd_tv"-->
+                    <!--                        android:layout_width="wrap_content"-->
+                    <!--                        android:layout_height="wrap_content"-->
+                    <!--                        android:layout_marginTop="10dp"-->
+                    <!--                        android:layout_gravity="right"-->
+                    <!--                        android:drawablePadding="5dp"-->
+                    <!--                        android:text="忘记密码 ?"-->
+                    <!--                        android:textColor="#8a8a8a"-->
+                    <!--                        android:textSize="12dp"/>-->
+=======
+<!--                    <TextView-->
+<!--                        android:id="@+id/forget_pwd_tv"-->
+<!--                        android:layout_width="wrap_content"-->
+<!--                        android:layout_height="wrap_content"-->
+<!--                        android:layout_marginTop="10dp"-->
+<!--                        android:layout_gravity="right"-->
+<!--                        android:drawablePadding="5dp"-->
+<!--                        android:text="忘记密码 ?"-->
+<!--                        android:textColor="#8a8a8a"-->
+<!--                        android:textSize="12dp"/>-->
+>>>>>>> 0d1bdea6e8e3fd210d3de0280363f663d60405bc
+
+                    <TextView
+                        android:id="@+id/config_tv"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="10dp"
+                        android:layout_gravity="right"
+                        android:drawableLeft="@drawable/icon_setting_small"
+                        android:drawablePadding="5dp"
+                        android:text="配置"
+                        android:textColor="#8a8a8a"
+                        android:textSize="12dp" />
+
+                    <View
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:minHeight="300dp" />
+
+                    <!--            <RadioGroup-->
+                    <!--                android:id="@+id/radioGroup"-->
+                    <!--                android:layout_gravity="right"-->
+                    <!--                android:layout_marginTop="10dp"-->
+                    <!--                android:orientation="vertical"-->
+                    <!--                android:layout_width="wrap_content"-->
+                    <!--                android:layout_height="wrap_content">-->
+                    <!--                <RadioButton-->
+                    <!--                    android:id="@+id/radio_01"-->
+                    <!--                    android:text="航管局身份"-->
+                    <!--                    android:checked="false"-->
+                    <!--                    android:textColor="@color/color_black_text"-->
+                    <!--                    android:textSize="12dp"-->
+                    <!--                    android:layout_width="wrap_content"-->
+                    <!--                    android:layout_height="wrap_content"/>-->
+                    <!--                <RadioButton-->
+                    <!--                    android:id="@+id/radio_02"-->
+                    <!--                    android:text="领导身份"-->
+                    <!--                    android:checked="false"-->
+                    <!--                    android:textColor="@color/color_black_text"-->
+                    <!--                    android:textSize="12dp"-->
+                    <!--                    android:layout_width="wrap_content"-->
+                    <!--                    android:layout_height="wrap_content"/>-->
+                    <!--            </RadioGroup>-->
+
+
+                </LinearLayout>
+            </LinearLayout>
+        </androidx.core.widget.NestedScrollView>
+
+        <TextView
+            android:id="@+id/submit"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom"
+            android:layout_marginLeft="22dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="22dp"
+            android:layout_marginBottom="20dp"
+            android:background="@drawable/shape_fillet_bg_blue"
+            android:gravity="center"
+            android:paddingTop="10dp"
+            android:paddingBottom="10dp"
+            android:text="登录"
+            android:textColor="@color/color_white"
+            android:textSize="15dp" />
+    </LinearLayout>
+</layout>

+ 43 - 0
app/src/main/res/layout/activity_main.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.MainViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <androidx.viewpager2.widget.ViewPager2
+            android:id="@+id/view_pager"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+        <!--        <FrameLayout-->
+        <!--            android:id="@+id/mFrameLayout"-->
+        <!--            android:layout_width="match_parent"-->
+        <!--            android:layout_height="0dp"-->
+        <!--            android:layout_weight="1" />-->
+
+        <com.google.android.material.bottomnavigation.BottomNavigationView
+            android:id="@+id/mNavigation"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/color_white"
+            app:itemIconTint="@drawable/selector_navigation_tab_color"
+            app:itemTextAppearanceActive="@style/bottom_tab_title_active"
+            app:itemTextAppearanceInactive="@style/bottom_tab_title_inactive"
+            app:itemTextColor="@drawable/selector_navigation_tab_color"
+            app:labelVisibilityMode="labeled"
+            app:menu="@menu/bottom_navigation_tab" />
+
+    </LinearLayout>
+</layout>

+ 10 - 0
app/src/main/res/layout/activity_splash.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" android:fitsSystemWindows="true">
+<!--    <Button-->
+<!--        android:id="@+id/btn"-->
+<!--        android:text="测试"-->
+<!--        android:layout_width="match_parent"-->
+<!--        android:layout_height="wrap_content"/>-->
+</RelativeLayout>

+ 19 - 0
app/src/main/res/layout/activity_web_view.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.web.WebViewModel" />
+    </data>
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <WebView
+            android:id="@+id/webView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </RelativeLayout>
+</layout>

+ 427 - 0
app/src/main/res/layout/fragment_main.xml

@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.fragment.MainViewModel" />
+    </data>
+
+    <!--    <androidx.core.widget.NestedScrollView-->
+    <!--        android:layout_width="match_parent"-->
+    <!--        android:layout_height="match_parent"-->
+    <!--        android:orientation="vertical"-->
+    <!--        android:overScrollMode="never"-->
+    <!--        android:scrollbars="none">-->
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="550dp">
+
+                <ImageView
+                    android:layout_width="match_parent"
+                    android:layout_height="350dp"
+                    android:background="@mipmap/bg_login_siping_tsgz">
+
+                </ImageView>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom"
+                    android:background="@drawable/round_corner_top_letf_right"
+                    android:orientation="vertical">
+
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="10dp"
+                        android:orientation="horizontal"
+                        android:padding="12dp">
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="摄像头"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="传感器"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="取水口"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="水鹤"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+
+                    </LinearLayout>
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="10dp"
+                        android:orientation="horizontal"
+                        android:padding="12dp">
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="水源"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="一级"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="二级"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:layout_width="0dp"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_weight="1"
+                            android:gravity="center_horizontal"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:background="@drawable/bg_tsgz_blue"
+                                android:padding="10dp"
+                                android:src="@drawable/icon_daily">
+
+                            </ImageView>
+
+                            <TextView
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:layout_gravity="center_horizontal"
+                                android:layout_marginTop="8dp"
+                                android:gravity="center"
+                                android:text="更多"
+                                android:textColor="@color/color_black_text"
+                                android:textSize="14dp" />
+                        </LinearLayout>
+
+
+                    </LinearLayout>
+                </LinearLayout>
+            </FrameLayout>
+
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="@color/C11">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:layout_width="70dp"
+                        android:layout_height="70dp"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginLeft="30dp"
+                        android:background="@drawable/icon_daily">
+
+                    </ImageView>
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginLeft="15dp"
+                        android:layout_marginTop="15dp"
+                        android:layout_marginRight="30dp"
+                        android:layout_marginBottom="15dp"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="0dp"
+                            android:layout_weight="1"
+                            android:ellipsize="end"
+                            android:gravity="center_vertical"
+                            android:singleLine="true"
+                            android:text="333333333"
+                            android:textColor="@color/black" />
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="0dp"
+                            android:layout_weight="1"
+                            android:ellipsize="end"
+                            android:gravity="center_vertical"
+                            android:singleLine="true"
+                            android:text="4444"
+                            android:textColor="@color/black" />
+                    </LinearLayout>
+
+                </LinearLayout>
+
+
+            </LinearLayout>
+
+            
+
+            <com.youth.banner.Banner
+                android:id="@+id/banner"
+                android:layout_width="match_parent"
+                android:layout_height="150dp"
+                android:layout_marginTop="15dp"
+                app:banner_indicator_normal_color="@color/transparent_click"
+                app:banner_indicator_selected_color="@color/transparent_click" />
+
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_gravity="center_vertical"
+                android:layout_marginTop="15dp">
+
+                <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_centerInParent="true"
+                    android:layout_marginLeft="15dp"
+                    android:layout_toLeftOf="@+id/tv_all"
+                    android:text="一级标题"
+                    android:textColor="@color/black"
+                    android:textSize="14dp" />
+
+                <TextView
+                    android:id="@+id/tv_all"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginRight="15dp"
+                    android:drawableRight="@drawable/icon_arrow_right"
+
+                    android:text="全部"
+                    android:textColor="@color/text_gray"
+                    android:textSize="12dp"></TextView>
+            </RelativeLayout>
+
+            <LinearLayout
+                android:layout_marginTop="10dp"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="horizontal">
+
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="150dp"
+                    android:layout_weight="1"
+                    android:background="@color/black">
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="150dp"
+                    android:layout_weight="1"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="0dp"
+                        android:layout_weight="1"
+                        android:background="@color/red_color" />
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="0dp"
+                        android:layout_weight="1"
+                        android:background="@color/C11" />
+                </LinearLayout>
+            </LinearLayout>
+        </LinearLayout>
+    </ScrollView>
+
+    <!--    </androidx.core.widget.NestedScrollView>-->
+</layout>

+ 22 - 0
app/src/main/res/menu/bottom_emergency_navigation_tab.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/action_map"
+        android:title="@string/navigation_emergency_1"
+        app:showAsAction="ifRoom" />
+    <item
+        android:id="@+id/action_periphery"
+        android:title="@string/navigation_emergency_2"
+        android:icon="@drawable/ic_periphery"
+        app:showAsAction="ifRoom" />
+    <item
+        android:id="@+id/action_central_control"
+        android:title="@string/navigation_emergency_3"
+        app:showAsAction="ifRoom" />
+<!--    <item-->
+<!--        android:id="@+id/action_message"-->
+<!--        android:title="@string/navigation_emergency_4"-->
+<!--        android:icon="@drawable/ic_msg"-->
+<!--        app:showAsAction="ifRoom" />-->
+</menu>

+ 21 - 0
app/src/main/res/menu/bottom_navigation_tab.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/action_event"
+        android:icon="@drawable/ic_home"
+        android:title="@string/navigation_1"
+        app:showAsAction="ifRoom" />
+    <item
+        android:id="@+id/action_main"
+        android:icon="@drawable/ic_periphery"
+        android:title="@string/navigation_2"
+        app:showAsAction="ifRoom" />
+
+
+    <item
+        android:id="@+id/action_mine"
+        android:icon="@drawable/ic_me"
+        android:title="@string/navigation_3"
+        app:showAsAction="ifRoom" />
+</menu>

+ 22 - 0
app/src/main/res/menu/bottom_navigation_tab_tsgz.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/action_01"
+        android:title="@string/navigation_tsgz_1"
+        app:showAsAction="ifRoom" />
+    <item
+        android:id="@+id/action_02"
+        android:title="@string/navigation_tsgz_2"
+        app:showAsAction="ifRoom" />
+    <item
+        android:id="@+id/action_03"
+        android:title="@string/navigation_tsgz_3"
+        android:icon="@drawable/ic_tsgz"
+        app:showAsAction="ifRoom" />
+    <item
+        android:id="@+id/action_04"
+        android:title="@string/navigation_tsgz_4"
+        android:icon="@drawable/ic_me"
+        app:showAsAction="ifRoom" />
+</menu>

+ 16 - 0
app/src/main/res/menu/drawer_header.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/action_event"
+        android:title="@string/navigation_1" />
+    <item
+        android:id="@+id/action_main"
+        android:title="@string/navigation_1" />
+    <item
+        android:id="@+id/action_message"
+        android:title="@string/navigation_2" />
+    <item
+        android:id="@+id/action_mine"
+        android:title="@string/navigation_3" />
+</menu>

+ 5 - 0
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background" />
+    <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>

+ 5 - 0
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_logo_siping_tsgz" />
+    <foreground android:drawable="@drawable/ic_launcher_logo_siping_tsgz" />
+</adaptive-icon>

BIN
app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


BIN
app/src/main/res/mipmap-xxhdpi/bg_login_siping_tsgz.png


BIN
app/src/main/res/mipmap-xxhdpi/bg_login_suihua_tsgz.png


BIN
app/src/main/res/mipmap-xxhdpi/bg_splash_tsgz.jpg


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


+ 28 - 0
app/src/main/res/navigation/nav_graph.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/nav_graph"
+    app:startDestination="@id/FirstFragment">
+
+    <fragment
+        android:id="@+id/FirstFragment"
+        android:name="com.sjkj.appthreefloor_tsgz.login.FirstFragment"
+        android:label="@string/first_fragment_label"
+        tools:layout="@layout/fragment_first">
+
+        <action
+            android:id="@+id/action_FirstFragment_to_SecondFragment"
+            app:destination="@id/SecondFragment" />
+    </fragment>
+    <fragment
+        android:id="@+id/SecondFragment"
+        android:name="com.sjkj.appthreefloor_tsgz.login.SecondFragment"
+        android:label="@string/second_fragment_label"
+        tools:layout="@layout/fragment_second">
+
+        <action
+            android:id="@+id/action_SecondFragment_to_FirstFragment"
+            app:destination="@id/FirstFragment" />
+    </fragment>
+</navigation>

+ 21 - 0
app/src/main/res/raw/supermap.pem

@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDizCCAnOgAwIBAgIEJ3OCdTANBgkqhkiG9w0BAQsFADB2MQswCQYDVQQGEwJj
+bjEQMA4GA1UECBMHc2ljaHVhbjEOMAwGA1UEBxMFY2hpbmExEjAQBgNVBAoTCWxv
+Y2FsaG9zdDESMBAGA1UECxMJbG9jYWxob3N0MR0wGwYDVQQDExRzdXBlcm1hcC5p
+c2VydmVyLm9yZzAeFw0yMjA3MDQwNzE1MTBaFw0yMjEwMDIwNzE1MTBaMHYxCzAJ
+BgNVBAYTAmNuMRAwDgYDVQQIEwdzaWNodWFuMQ4wDAYDVQQHEwVjaGluYTESMBAG
+A1UEChMJbG9jYWxob3N0MRIwEAYDVQQLEwlsb2NhbGhvc3QxHTAbBgNVBAMTFHN1
+cGVybWFwLmlzZXJ2ZXIub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA2JS4BHNn1iUpjGmyB7uzIQk0g2yX9w2r4Q3ZesKlEsWKhMa0Jpd5uiiAn0bc
+B3qGWT2Cm5jpu/QXvzaWZ0uoC3DH3jd8QCZz4pMJXJJWNE67nsewdsBDIULX4Ewq
+Nj++ZUJSJ1kPU+ID1OPSpagwclX/wPuUoHjcey96coDcLqzdvcC63T3iqzJoEwoS
+432Jiq5y7zl4ScAXkG5NlNaY5Zj2bL8mQ9zNyTLnVRE7NvBPXiID7px/ood51aBr
+KH8Gqa1voI8B86y+4PX2c8W4RNfijinYj42DsMMYa9LpmGRyvDiSiHyfmUZjS7bv
+ovURAs5hBu1pC4SWbmT+IvXwQQIDAQABoyEwHzAdBgNVHQ4EFgQU0LKRa8xol1GE
+boqgo1OI/2e3lDkwDQYJKoZIhvcNAQELBQADggEBADIAhUFSkU0nPM5J8S+XzxQ6
+INFWXVRZS3YZRQr+E3A9lhs7bqAKHMUzUeYHjfatd2vONSDToXTpFwJjHouyEyT8
+pmr4uMlR7j/RRo9wdar48NBAU4NjxPK1TN7G8VSgnlWUAK+++N9Rh8/WbMHYKGj6
+jsTMku4wEhPyHMGEocnl+lv8ue5ZoP/0nf2LXk8dTGbJNKvjGXJ0q0doQ6+NGD1A
+ZpVRvqaWt00JWPmx9u7NtG3vcG2EaOOrUiK0hgfk0LnawTq/ccAytPjFRFyvdNrv
+VYRWtetPlH9oUIixy7VbR93YJ8iOQGYDJRhiTSr1z/z2aNVhpPJ2FuS6uV9vamQ=
+-----END CERTIFICATE-----

+ 3 - 0
app/src/main/res/values-land/dimens.xml

@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">48dp</dimen>
+</resources>

+ 4 - 0
app/src/main/res/values-night/themes.xml

@@ -0,0 +1,4 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+    <!-- Base application theme. -->
+
+</resources>

+ 3 - 0
app/src/main/res/values-w1240dp/dimens.xml

@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">200dp</dimen>
+</resources>

+ 3 - 0
app/src/main/res/values-w600dp/dimens.xml

@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">48dp</dimen>
+</resources>

+ 51 - 0
app/src/main/res/values/attrs.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <declare-styleable name="CircleImageView">
+        <attr name="border_width" format="dimension"/>
+        <attr name="border_color" format="color"/>
+        <attr name="border_overlay" format="boolean"/>
+    </declare-styleable>
+    <declare-styleable name="RequiredTextView">
+        <attr name="android:text" />
+        <attr name="prefix" format="string|reference" />
+        <attr name="prefix_color" format="color|reference" />
+    </declare-styleable>
+    <declare-styleable name="TimelineView" >
+        <attr name="timeline_marker" format="color|reference"/>
+        <attr name="timeline_marker_size" format="dimension"/>
+        <attr name="timeline_marker_padding_top" format="dimension"/>
+        <attr name="timeline_marker_padding_bottom" format="dimension"/>
+        <attr name="timeline_marker_in_center" format="boolean"/>
+        <attr name="timeline_start_line_color" format="color"/>
+        <attr name="timeline_end_line_color" format="color"/>
+        <attr name="timeline_marker_color" format="color"/>
+        <attr name="timeline_line_width" format="dimension"/>
+        <attr name="timeline_line_style" format="enum">
+            <enum name="normal" value="0" />
+            <enum name="dash" value="1" />
+        </attr>
+        <attr name="timeline_line_style_dash_gap" format="dimension" />
+        <attr name="timeline_line_style_dash_length" format="dimension" />
+        <attr name="timeline_line_orientation" format="enum">
+            <enum name="horizontal" value="0"/>
+            <enum name="vertical" value="1"/>
+        </attr>
+        <attr name="timeline_line_padding" format="dimension"/>
+    </declare-styleable>
+    <declare-styleable name="RockerView">
+        <attr name="areaBackground" format="color|reference" />
+        <attr name="rockerBackground" format="color|reference" />
+        <attr name="rockerRadius" format="dimension" />
+    </declare-styleable>
+<!--    <declare-styleable name="RockerView">-->
+<!--        <attr name="areaBackground" format="color|reference" />-->
+<!--        <attr name="rockerBackground" format="color|reference" />-->
+<!--        <attr name="rockerScale" format="float"/>-->
+<!--        <attr name="rockerSpeedLevel" format="integer" />-->
+<!--        <attr name="rockerCallBackMode">-->
+<!--            <flag name="CALL_BACK_MODE_MOVE" value="0" />-->
+<!--            <flag name="CALL_BACK_MODE_STATE_CHANGE" value="1" />-->
+<!--        </attr>-->
+<!--    </declare-styleable>-->
+</resources>

+ 66 - 0
app/src/main/res/values/colors.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="colorPrimary">#225298</color>
+    <color name="colorPrimaryDark">#225298</color>
+    <color name="colorAccent">#5394ff</color>
+    <color name="color_input_red">#D81B60</color>
+
+    <color name="color_gray">#8a8a8a</color>
+    <color name="main_blue_color">#5394ff</color>
+    <color name="color_white">#fff</color>
+    <color name="color_black">#000</color>
+    <color name="color_blue_light">#0368ff</color>
+    <color name="line_DDDDDD">#DDDDDD</color>
+
+    <color name="gray">#dedede</color>
+    <color name="text_gray">#999999</color>
+    <color name="text_gray2">#666666</color>
+    <color name="divider_color">#E5E5E5</color>
+    <color name="color_blue">#5394ff</color>
+    <color name="bg_color">#F4F4F4</color>
+    <color name="divider">#ffd2d2d2</color>
+    <color name="color_black_3">#333333</color>
+    <color name="color_gray_background">#cccccc</color>
+    <color name="color_gray_light_bg">#F1F1F1</color>
+    <color name="color_black_text">#333333</color>
+    <color name="color_black_text55">#555555</color>
+    <color name="color_gray_text">#999999</color>
+    <color name="color_gray_light_text">#ffd2d2d2</color>
+    <color name="transparent_click">#00000000</color>
+    <color name="light_gray_10">#e1e1e1</color>
+    <color name="light_gray_12">#EDEDED</color>
+    <drawable name="gray">#D8D8D8</drawable>
+    <color name="color_transparent00">#00000000</color>
+
+    <color name="C0">#FFFFFF</color>
+    <color name="C00">#000000</color>
+    <color name="C1">#2c2c2c</color>
+    <color name="C2">#7f7f7f</color>
+    <color name="C3">#b5b5b5</color>
+    <color name="C4">#e6000000</color>
+    <color name="C5">#b3000000</color>
+    <color name="C6">#4d000000</color>
+    <color name="C7">#e2e2e2</color>
+    <color name="C8">#ecedee</color>
+    <color name="C9">#3996fe</color>
+    <color name="C9_1">#3387e4</color>
+    <color name="C10">#ff222f</color>
+    <color name="C11">#dfecff</color>
+    <color name="line_gray_1">#EDEEEF</color>
+    <color name="light_gray_13">#7c7c7c</color>
+    <color name="g_fff3e8">#FFF3E8</color>
+    <color name="g_DD7487">#DD7487</color>
+    <color name="color_bg_gray">#f9f9f9</color>
+    <color name="color_bg_input">#EDEDED</color>
+    <color name="color_sex_0">#5394ff</color>
+    <color name="color_sex_1">#E91E63</color>
+    <color name="color_sex_3">#b5b5b5</color>
+    <color name="color_light_red">#FEE2E7</color>
+    <color name="color_dark_red">#E48C9C</color>
+    <color name="color_light_blue">#ADD8E6</color>
+    <color name="color_red">#F4385A</color>
+    <color name="color_green">#1FD312</color>
+    <color name="color_orange">#FF9800</color>
+    <color name="color_bg_gray_input">#F6F6F6</color>
+
+</resources>

+ 3 - 0
app/src/main/res/values/dimens.xml

@@ -0,0 +1,3 @@
+<resources>
+    <dimen name="fab_margin">16dp</dimen>
+</resources>

+ 183 - 0
app/src/main/res/values/strings.xml

@@ -0,0 +1,183 @@
+<resources>
+    <string name="app_name">态势感知</string>
+    <!--    <string name="app_name">绥化态势感知</string>-->
+    <!--    <string name="app_name">智慧林业</string>-->
+    <!-- TODO: Remove or change this placeholder text -->
+    <string name="hello_blank_fragment">Hello blank fragment</string>
+    <string name="navigation_1">事件</string>
+    <string name="navigation_2">驾驶舱</string>
+    <string name="navigation_3">我的</string>
+
+    <string name="navigation_4">统计</string>
+    <string name="navigation_tsgz_1">市域管理</string>
+    <string name="navigation_tsgz_2">事件统计</string>
+    <string name="navigation_tsgz_3">态势感知</string>
+    <string name="navigation_tsgz_4">个人中心</string>
+    <string name="search">搜索</string>
+    <string name="details">详情</string>
+    <string name="search_hint_company">搜索企业</string>
+    <string name="search_hint_patrol_point">搜索巡更点</string>
+    <string name="sign_success">巡更成功</string>
+    <string name="security_danger">安全隐患</string>
+    <string name="continue_str">继续</string>
+    <string name="qr_code">扫描条形码</string>
+    <string name="details_name">名称:%s</string>
+    <string name="details_address">地址:%s</string>
+    <string name="details_address_1">地址:</string>
+    <string name="details_log">经度:%s</string>
+    <string name="details_lat">纬度:%s</string>
+    <string name="details_type">类型:%s</string>
+    <string name="details_code">编码:%s</string>
+    <string name="enterprise">企业</string>
+    <string name="patrol">巡更点</string>
+    <string name="patrol_record">巡更记录</string>
+    <string name="inspection_record">巡检记录</string>
+    <string name="danger_record">隐患记录</string>
+    <string name="phone_list">通讯录</string>
+    <string name="check_edition">检查新版本</string>
+    <string name="now_location">当前位置</string>
+    <string name="cancel">取消</string>
+    <string name="determine">确定</string>
+    <string name="unbound">该条形码还未绑定站点,请先绑定后再扫描</string>
+    <string name="to_bing">去绑定</string>
+    <string name="temporary_to_bing">暂不绑定</string>
+    <string name="new_patrol_record">近期巡更记录</string>
+    <string name="search_keyword">搜索关键字</string>
+    <string name="setting">设置</string>
+    <string name="join_meeting">加入会议</string>
+    <string name="join_meeting_list">会议列表</string>
+    <string name="exit_login">退出登录</string>
+    <string name="business_title">综合业务</string>
+    <string name="digital_title">数字监管</string>
+    <string name="grid_title">网格管理</string>
+    <string name="digital_rural">数字乡村</string>
+    <string name="daily_manage">日报管理</string>
+    <string name="leave_manage">考勤管理</string>
+    <string name="emergency_manage">应急预案</string>
+    <string name="policy_manage">政策法规</string>
+    <string name="file_manage">文件管理</string>
+    <string name="locus_manage">巡查管理</string>
+    <string name="event_center">事件中心</string>
+    <string name="event_details">事件详情</string>
+    <string name="task_center">任务中心</string>
+    <string name="task_list">任务列表</string>
+    <string name="task_details">任务详情</string>
+    <string name="monitor_center">监控中心</string>
+    <string name="monitoring_probe">监控探头</string>
+
+    <string name="digital_agriculture">数字农业</string>
+    <string name="digital_forestry">数字林业</string>
+    <string name="digital_water">数字水利</string>
+    <string name="digital_emergency">数字应急</string>
+    <string name="digital_fire">数字消防</string>
+    <string name="digital_traffic">数字交通</string>
+    <string name="digital_resources">数字资源</string>
+    <string name="digital_environmental">数字环保</string>
+    <string name="digital_weather">数字气象</string>
+    <string name="digital_rural_vitalization">乡村振兴</string>
+    <string name="newly_added">上报</string>
+    <string name="report_event">上报事件</string>
+    <string name="input_content">输入</string>
+
+    <string name="party_masses_service">党群社区</string>
+    <string name="social_management">社管通</string>
+
+    <string name="report_event_title">事件标题:</string>
+    <string name="report_event_content">事件内容:</string>
+    <string name="report_event_from">事件来源:</string>
+
+    <string name="report_task_title">任务标题 :</string>
+    <string name="report_task_content">任务内容 :</string>
+    <string name="report_task_from">任务来源 :</string>
+    <string name="report_task_type">任务类型 :</string>
+    <string name="report_task_state">任务状态 :</string>
+    <string name="dept_type">部门选择:</string>
+    <string name="report_type">事件类型:</string>
+    <string name="report_state">事件状态:</string>
+    <string name="report_time">上报时间:</string>
+    <string name="task_time">任务时间 :</string>
+    <string name="report_user">上报点位:</string>
+    <string name="geographical_position">地理位置</string>
+    <string name="proximity_probe">附近探头</string>
+    <string name="find_time">发现时间:</string>
+    <string name="find_position">发现位置:</string>
+    <string name="wind_direction">风 向 :</string>
+    <string name="details_content">详细内容:</string>
+    <string name="add_image">添加图片:</string>
+    <string name="submit_event">提交事件</string>
+    <string name="submit">提交</string>
+    <string name="please_select">请选择</string>
+    <string name="punch_the_clock">打卡</string>
+    <string name="start_forest_patrol">开始巡林</string>
+    <string name="end_forest_patrol">结束巡林</string>
+    <string name="data_center_str">数 据 中 心</string>
+    <string name="data_center">数据中心</string>
+    <string name="event_total_count">事件总数</string>
+    <string name="calendar_dialog_Mon">M</string>
+    <string name="calendar_dialog_Tues">T</string>
+    <string name="calendar_dialog_Wed">W</string>
+    <string name="calendar_dialog_Thur">T</string>
+    <string name="calendar_dialog_Fri">F</string>
+    <string name="calendar_dialog_Sat">S</string>
+    <string name="calendar_dialog_Sun">S</string>
+    <string name="calendar_date_day" formatted="false">%04d-%02d-%02d</string>
+    <string name="navigation_emergency_1">地图</string>
+    <string name="navigation_emergency_2">周边</string>
+    <string name="navigation_emergency_3">中控</string>
+    <string name="navigation_emergency_4">消息</string>
+    <string name="event_serch">筛选</string>
+    <string name="receive_task">领取任务</string>
+    <string name="refuse_task">拒绝任务</string>
+    <string name="tsgz_daibanjian">未签件</string>
+    <string name="tsgz_chulijian">处理件</string>
+    <string name="tsgz_chaoshijian">办结件</string>
+    <string name="tsgz_guidangjian">归档件</string>
+    <string name="delete">删除</string>
+    <string name="tsgz_ziyuan">资源可视</string>
+
+    <string name="demo_obtain_permission_success_hint">获取%s成功</string>
+    <string name="demo_return_activity_result_hint">检测到你刚刚从权限设置界面返回回来</string>
+    <string name="demo_android_12_bluetooth_permission_hint">当前版本不是 Android 12 及以上,旧版本的需要定位权限才能进行扫描蓝牙</string>
+    <string name="demo_android_13_wifi_permission_hint">当前版本不是 Android 13 及以上,旧版本的需要定位权限才能进行扫描 WIFI</string>
+    <string name="demo_android_10_read_media_location_permission_hint">当前版本不是 Android 10 及以上,旧版本的需要读取存储权限才能获取媒体位置权限</string>
+    <string name="demo_android_13_read_media_permission_hint">当前版本不是 Android 13 及以上,会自动变更为旧版的请求方式</string>
+    <string name="demo_android_11_manage_storage_permission_hint">当前版本不是 Android 11 及以上,会自动变更为旧版的请求方式</string>
+    <string name="demo_android_13_post_notification_permission_hint">当前版本不是 Android 13 及以上,会自动变更为旧版的请求方式</string>
+    <string name="demo_notification_listener_toast">监听到新的通知消息,标题为:%s,内容为:%s</string>
+
+    <string name="demo_request_single_dangerous_permission">申请单个危险权限</string>
+    <string name="demo_request_multiple_dangerous_permission">申请多个危险权限</string>
+    <string name="demo_request_location_permission">申请定位权限</string>
+    <string name="demo_request_sensors_permission">申请传感器权限</string>
+    <string name="demo_request_activity_recognition_permission">申请身体活动权限</string>
+    <string name="demo_request_bluetooth_permission">申请蓝牙权限</string>
+    <string name="demo_request_wifi_permission">申请 WIFI 权限</string>
+    <string name="demo_request_media_location_permission">申请读取图片位置权限</string>
+    <string name="demo_request_media_read_permission">申请媒体文件读取权限</string>
+    <string name="demo_request_all_file_access_permission">申请所有文件管理权限</string>
+    <string name="demo_request_install_unknown_apps_permission">申请安装包权限</string>
+    <string name="demo_request_display_over_other_apps_permission">申请悬浮窗权限</string>
+    <string name="demo_request_modify_system_settings_permission">申请系统设置权限</string>
+    <string name="demo_request_allow_notifications_permission">申请通知权限</string>
+    <string name="demo_request_send_notifications_permission_api33">申请新版通知权限</string>
+    <string name="demo_request_allow_notifications_access_permission">申请通知栏监听权限</string>
+    <string name="demo_request_apps_with_usage_access_permission">申请使用统计权限</string>
+    <string name="demo_request_alarms_reminders_permission">申请闹钟提醒权限</string>
+    <string name="demo_request_do_not_disturb_access_permission">申请勿扰权限</string>
+    <string name="demo_request_ignore_battery_optimize_permission">申请忽略电池优化权限</string>
+    <string name="demo_request_picture_in_picture_permission">申请画中画权限</string>
+    <string name="demo_request_vpn_permission">申请 VPN 权限</string>
+    <string name="demo_request_get_installed_apps_permission">申请读取应用列表</string>
+    <string name="demo_start_app_details_activity">跳转到应用详情页</string>
+    <string name="title_activity_login">LoginActivity</string>
+    <!-- Strings used for fragments for navigation -->
+    <string name="first_fragment_label">First Fragment</string>
+    <string name="second_fragment_label">Second Fragment</string>
+    <string name="next">Next</string>
+    <string name="previous">Previous</string>
+
+    <string name="hello_first_fragment">Hello first fragment</string>
+    <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
+=======
+>>>>>>> 0d1bdea6e8e3fd210d3de0280363f663d60405bc
+</resources>

+ 193 - 0
app/src/main/res/values/styles.xml

@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+        <item name="android:actionBarSize">50dp</item>
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+
+    <style name="AppNoTitleTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
+        <item name="android:windowIsTranslucent">false</item>
+        <item name="android:statusBarColor">@color/colorPrimaryDark</item>
+        <item name="android:actionBarSize">0dp</item>
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+
+    <style name="SplashTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
+        <!-- 将splash图片设置在这,这样这张图片取代白屏或黑屏 -->
+<!--        <item name="android:windowNoTitle">true</item>-->
+<!--        <item name="android:windowBackground">@mipmap/bg_splash_tsgz</item>-->
+<!--        <item name="android:windowFullscreen">true</item>-->
+        <item name="android:windowBackground">@mipmap/bg_splash_tsgz</item>
+
+    </style>
+
+    <style name="FullTheme" parent="android:Theme.Black.NoTitleBar">
+        <!-- 将splash图片设置在这,这样这张图片取代白屏或黑屏 -->
+<!--        <item name="android:windowNoTitle">true</item>-->
+<!--        <item name="android:windowBackground">@mipmap/bg_splash_tsgz</item>-->
+<!--        <item name="android:windowFullscreen">true</item>-->
+    </style>
+
+    <style name="gray_line">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">0.8dp</item>
+        <item name="android:background">@color/line_gray_1</item>
+    </style>
+
+    <style name="LoadThemeNoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <style name="LoadingDialogStyle" parent="@android:style/Theme.Dialog">
+        <!-- 背景透明 -->
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <!-- 浮于Activity之上 -->
+        <item name="android:windowIsFloating">true</item>
+        <!-- 边框 -->
+        <item name="android:windowFrame">@null</item>
+        <!-- Dialog以外的区域模糊效果 -->
+        <item name="android:backgroundDimEnabled">true</item>
+        <!-- 无标题 -->
+        <item name="android:windowNoTitle">true</item>
+        <!-- 半透明 -->
+        <item name="android:windowIsTranslucent">true</item>
+        <!-- Dialog进入及退出动画 -->
+        <!--<item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>-->
+    </style>
+
+    <style name="daily_text">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:layout_marginLeft">8dp</item>
+        <item name="android:gravity">center_vertical</item>
+        <item name="android:textSize">16dp</item>
+        <item name="android:textColor">@color/color_black_3</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+    <style name="daily_text_big">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:layout_marginLeft">8dp</item>
+        <item name="android:gravity">center_vertical</item>
+        <item name="android:textSize">24dp</item>
+        <item name="android:textColor">@color/color_black_3</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="daily_linearLayout_1">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:orientation">vertical</item>
+        <item name="android:padding">15dp</item>
+    </style>
+
+    <style name="daily_text_1">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:textSize">14dp</item>
+        <item name="android:textColor">@color/color_black_3</item>
+    </style>
+    <style name="daily_text_1_big">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:textSize">24dp</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">@color/color_black_3</item>
+    </style>
+
+    <!-- ActionSheet进出动画 -->
+    <style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">
+        <item name="android:windowEnterAnimation">@anim/actionsheet_dialog_in</item>
+        <item name="android:windowExitAnimation">@anim/actionsheet_dialog_out</item>
+    </style>
+    <!--ActionSheet Dialog样式-->
+    <style name="ActionSheetDialogStyle" parent="@android:style/Theme.Dialog">
+        <!-- 背景透明 -->
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <!-- 浮于Activity之上 -->
+        <item name="android:windowIsFloating">true</item>
+        <!-- 边框 -->
+        <item name="android:windowFrame">@null</item>
+        <!-- Dialog以外的区域模糊效果 -->
+        <item name="android:backgroundDimEnabled">true</item>
+        <!-- 无标题 -->
+        <item name="android:windowNoTitle">true</item>
+        <!-- 半透明 -->
+        <item name="android:windowIsTranslucent">true</item>
+        <!-- Dialog进入及退出动画 -->
+        <item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
+    </style>
+
+    <style name="TabLayoutStyle" parent="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse">
+        <item name="android:textSize">14dp</item>
+        <item name="android:textColor">@color/color_blue</item>
+    </style>
+    <style name="TabLayoutStyle_big" parent="TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse">
+        <item name="android:textSize">18dp</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">@color/color_blue</item>
+    </style>
+    <!--选中的样式,可以设置选择的字体颜色,这里只是为了改变选择时的字体大小-->
+    <style name="bottom_tab_title_active">
+        <item name="android:textSize">14sp</item>
+    </style>
+    <!--选中的样式,可以设置选择的字体颜色,这里只是为了改变选择时的字体大小-->
+    <style name="bottom_tab_title_active_big">
+        <item name="android:textSize">18sp</item>
+    </style>
+
+    <!--没有选中的样式,导航默认的字体大小就是12sp-->
+    <style name="bottom_tab_title_inactive">
+        <item name="android:textSize">12sp</item>
+    </style>
+    <!--没有选中的样式,导航默认的字体大小就是12sp-->
+    <style name="bottom_tab_title_inactive_big">
+        <item name="android:textSize">16sp</item>
+    </style>
+    <style name="MyRadioButton" parent="Theme.AppCompat.Light">
+        <item name="colorControlNormal">#ffffff</item>
+        <item name="colorControlActivated">#6D88E9</item>
+    </style>
+    <style name="mypopwindow_anim_style">
+        <item name="android:windowEnterAnimation">@anim/popshow_anim</item>
+        <!-- 指定显示的动画xml -->
+        <item name="android:windowExitAnimation">@anim/pophidden_anim</item>
+        <!-- 指定消失的动画xml -->
+    </style>
+    <style name="AppStyleTextInputLayout"  parent="@android:style/TextAppearance">
+        <item name="android:textColor">@color/color_input_red</item>
+        <item name="android:textSize">12sp</item>
+    </style>
+    <style name="change_radio_button">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">40dp</item>
+        <item name="android:gravity">center</item>
+        <item name="android:textSize">14dp</item>
+    </style>
+    <style name="AnimBottom">
+        <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
+        <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
+    </style>
+
+    <style name="dialog_success_text_view">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">16dp</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+    <style name="switch_text_color_white" parent="@android:style/TextAppearance.Small">
+        <item name="android:textColor">@color/main_blue_color</item>
+    </style>
+</resources>

+ 0 - 0
app/src/main/res/values/themes.xml


Vissa filer visades inte eftersom för många filer har ändrats