ソースを参照

init project.

renevy 5 年 前
コミット
772c3b6a01
100 ファイル変更6567 行追加36 行削除
  1. 3 34
      .gitignore
  2. 1 0
      DialogUtilsLibrary/.gitignore
  3. 122 0
      DialogUtilsLibrary/DialogUtilsLibrary.iml
  4. 29 0
      DialogUtilsLibrary/build.gradle
  5. 25 0
      DialogUtilsLibrary/proguard-rules.pro
  6. 10 0
      DialogUtilsLibrary/src/main/AndroidManifest.xml
  7. 682 0
      DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/SYSDiaLogUtils.java
  8. 219 0
      DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/progressbar/horizontal/HorizontalWithNumberProgressBar.java
  9. 119 0
      DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/progressbar/round/RoundWidthNumberProgressBar.java
  10. 66 0
      DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/utils/SupDialogStaticUtils.java
  11. BIN
      DialogUtilsLibrary/src/main/res/drawable-hdpi/dialog_error.png
  12. BIN
      DialogUtilsLibrary/src/main/res/drawable-hdpi/dialog_success.png
  13. BIN
      DialogUtilsLibrary/src/main/res/drawable-hdpi/dialog_tip.png
  14. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_error_red.xml
  15. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_error_red_dark.xml
  16. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_gray.xml
  17. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_gray_dark.xml
  18. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_green.xml
  19. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_green_dark.xml
  20. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_tip.xml
  21. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_tip_dark.xml
  22. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_white.xml
  23. 22 0
      DialogUtilsLibrary/src/main/res/drawable/drawable_round_white_dd.xml
  24. 6 0
      DialogUtilsLibrary/src/main/res/drawable/selector_error_red.xml
  25. 6 0
      DialogUtilsLibrary/src/main/res/drawable/selector_gray.xml
  26. 6 0
      DialogUtilsLibrary/src/main/res/drawable/selector_green.xml
  27. 6 0
      DialogUtilsLibrary/src/main/res/drawable/selector_tip_color.xml
  28. 69 0
      DialogUtilsLibrary/src/main/res/layout/dialog_alert_view.xml
  29. 109 0
      DialogUtilsLibrary/src/main/res/layout/dialog_confirm_alert_view.xml
  30. 69 0
      DialogUtilsLibrary/src/main/res/layout/dialog_horizontal_progressbar_view.xml
  31. 51 0
      DialogUtilsLibrary/src/main/res/layout/dialog_progress_view.xml
  32. 61 0
      DialogUtilsLibrary/src/main/res/layout/dialog_round_progressbar_view.xml
  33. 24 0
      DialogUtilsLibrary/src/main/res/values/attr_progressbar.xml
  34. 30 0
      DialogUtilsLibrary/src/main/res/values/colors.xml
  35. 3 0
      DialogUtilsLibrary/src/main/res/values/strings.xml
  36. 22 0
      DialogUtilsLibrary/src/main/res/values/styles.xml
  37. 19 0
      MaintainApp.iml
  38. 41 2
      README.md
  39. 1 0
      app/.gitignore
  40. 178 0
      app/app.iml
  41. 89 0
      app/build.gradle
  42. 21 0
      app/proguard-rules.pro
  43. 26 0
      app/src/androidTest/java/com/ifastore/maintain/ExampleInstrumentedTest.java
  44. 50 0
      app/src/main/AndroidManifest.xml
  45. 69 0
      app/src/main/assets/logback.xml
  46. 20 0
      app/src/main/java/com/ifastore/maintain/App.java
  47. 31 0
      app/src/main/java/com/ifastore/maintain/common/BaseUrlAdress.java
  48. 27 0
      app/src/main/java/com/ifastore/maintain/common/Contants.java
  49. 30 0
      app/src/main/java/com/ifastore/maintain/models/AlertsBean.java
  50. 193 0
      app/src/main/java/com/ifastore/maintain/models/CloseBean.java
  51. 40 0
      app/src/main/java/com/ifastore/maintain/models/GoodsDetail.java
  52. 52 0
      app/src/main/java/com/ifastore/maintain/models/GratingsBean.java
  53. 30 0
      app/src/main/java/com/ifastore/maintain/models/LoginBean.java
  54. 79 0
      app/src/main/java/com/ifastore/maintain/models/OpenBean.java
  55. 275 0
      app/src/main/java/com/ifastore/maintain/models/PermissionBean.java
  56. 51 0
      app/src/main/java/com/ifastore/maintain/models/PowerBean.java
  57. 27 0
      app/src/main/java/com/ifastore/maintain/models/Reqmsg.java
  58. 37 0
      app/src/main/java/com/ifastore/maintain/models/ResultInfo.java
  59. 60 0
      app/src/main/java/com/ifastore/maintain/models/StatusBean.java
  60. 83 0
      app/src/main/java/com/ifastore/maintain/models/TallyBean.java
  61. 28 0
      app/src/main/java/com/ifastore/maintain/models/TempBean.java
  62. 59 0
      app/src/main/java/com/ifastore/maintain/models/WeightSensorBean.java
  63. 91 0
      app/src/main/java/com/ifastore/maintain/repository/Repository.java
  64. 32 0
      app/src/main/java/com/ifastore/maintain/repository/local/db/AppDatabase.java
  65. 75 0
      app/src/main/java/com/ifastore/maintain/repository/local/db/goodsinfo/GoodsBean.java
  66. 34 0
      app/src/main/java/com/ifastore/maintain/repository/local/db/goodsinfo/GoodsDao.java
  67. 28 0
      app/src/main/java/com/ifastore/maintain/repository/local/sharedpreferences/SharedpreferenceManager.java
  68. 86 0
      app/src/main/java/com/ifastore/maintain/repository/remote/http/ApiServer.java
  69. 73 0
      app/src/main/java/com/ifastore/maintain/repository/remote/http/Constants.java
  70. 188 0
      app/src/main/java/com/ifastore/maintain/repository/remote/http/NetworkClient.java
  71. 32 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/Constants.java
  72. 208 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/MqttClient.java
  73. 106 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/MqttManager.java
  74. 655 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/MaintainFlatHandler.java
  75. 2 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/readme.md
  76. 153 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/schema/weight.fbs
  77. 63 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/AdjustZero.java
  78. 39 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/AdjustZeroEvent.java
  79. 47 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Alerts.java
  80. 63 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Calibration.java
  81. 78 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Close.java
  82. 51 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Eventdata.java
  83. 47 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Evtdata.java
  84. 49 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Extradata.java
  85. 62 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Gratings.java
  86. 41 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Monitoring.java
  87. 71 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Open.java
  88. 47 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Payload.java
  89. 30 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Payloads.java
  90. 57 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Reboot.java
  91. 47 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Remaindata.java
  92. 14 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Result.java
  93. 37 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/SensorEvent.java
  94. 63 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/SetWeightThreshold.java
  95. 45 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Setup.java
  96. 57 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Shutdown.java
  97. 63 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Status.java
  98. 65 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Tally.java
  99. 45 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/TempStatus.java
  100. 49 0
      app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Upgrade.java

+ 3 - 34
.gitignore

@@ -1,34 +1,3 @@
-# ---> Android
-# Built application files
-*.apk
-*.ap_
-
-# Files for the Dalvik VM
-*.dex
-
-# Java class files
-*.class
-
-# Generated files
-bin/
-gen/
-
-# Gradle files
-.gradle/
-build/
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-# Proguard folder generated by Eclipse
-proguard/
-
-# Log Files
-*.log
-
-# Android Studio Navigation editor temp files
-.navigation/
-
-# Android Studio captures folder
-captures/
-
+/build
+.gradle
+.idea

+ 1 - 0
DialogUtilsLibrary/.gitignore

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

+ 122 - 0
DialogUtilsLibrary/DialogUtilsLibrary.iml

@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":DialogUtilsLibrary" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":DialogUtilsLibrary" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.6.4" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="3.6.4" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+        <option name="PROJECT_TYPE" value="1" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+    <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Gradle: androidx.collection:collection:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.core:core:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" />
+  </component>
+</module>

+ 29 - 0
DialogUtilsLibrary/build.gradle

@@ -0,0 +1,29 @@
+apply plugin: 'com.android.library'
+
+apply plugin: 'com.github.dcendents.android-maven'
+group='com.github.fingerth'
+
+android {
+    compileSdkVersion 28
+
+    defaultConfig {
+        minSdkVersion 14
+        targetSdkVersion 28
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    implementation 'com.android.support:appcompat-v7:28.0.0'
+}

+ 25 - 0
DialogUtilsLibrary/proguard-rules.pro

@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in D:\AndroidStudio\sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# 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

+ 10 - 0
DialogUtilsLibrary/src/main/AndroidManifest.xml

@@ -0,0 +1,10 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+
+    package="com.fingerth.supdialogutils">
+
+    <application android:allowBackup="true" android:label="@string/app_name"
+        android:supportsRtl="true">
+
+    </application>
+
+</manifest>

+ 682 - 0
DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/SYSDiaLogUtils.java

@@ -0,0 +1,682 @@
+package com.fingerth.supdialogutils;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AlertDialog;
+
+import com.fingerth.supdialogutils.progressbar.horizontal.HorizontalWithNumberProgressBar;
+import com.fingerth.supdialogutils.utils.SupDialogStaticUtils;
+
+
+
+/**
+ * ======================================================
+ * Created by Administrator able_fingerth on 2016/10/28.
+ * <p/>
+ * 版权所有,违者必究!
+ * <详情描述/>
+ */
+public class SYSDiaLogUtils {
+
+
+    ////1.成功  2.提示   3.錯誤  確認
+    private static String loadingStr = "正在加載...";
+    private static String successStr = "成功";
+    private static String tipStr = "提示";
+    private static String errorStr = "錯誤";
+    private static String confirmStr = "確認";
+    private static String cancelStr = "取消";
+    private static ProgressDialog progressDialog;
+    private static AlertDialog progressAlertDialog;
+    private static HorizontalWithNumberProgressBar horizontalProgressBar;
+
+    //4 取消 確認 對話框
+    private static AlertDialog confirmDialog;
+
+    public enum SYSDiaLogType {
+        DefaultTpye,//默認的樣式,系統樣式
+        IosType,//ios風格的
+        HorizontalWithNumberProgressBar,  // 進度條
+        RoundWidthNumberProgressBar,     // 圓形進度條
+        ;
+    }
+
+    public enum SYSConfirmType {
+        Success,//成功 綠色
+        Tip,//提示  黃黃的
+        Warning //警告 紅色
+    }
+
+
+    /**
+     * 語言適配
+     */
+    public static void setLangStr(String loadingStr, String successStr, String tipStr, String errorStr, String confirmStr, String cancelStr) {
+        SYSDiaLogUtils.loadingStr = loadingStr;
+        SYSDiaLogUtils.successStr = successStr;
+        SYSDiaLogUtils.tipStr = tipStr;
+        SYSDiaLogUtils.errorStr = errorStr;
+        SYSDiaLogUtils.confirmStr = confirmStr;
+        SYSDiaLogUtils.cancelStr = cancelStr;
+    }
+
+    /**
+     * 1.加載對話框部分
+     */
+    private static ProgressDialog pDialog;
+    private static AlertDialog pAlertDialog;
+
+    /**
+     * @param context
+     * @param canceledOnTouchOutside 遮罩下面控件点击是否可以點擊
+     */
+    private static void showDefaultProgressDialog(Activity context, SYSDiaLogType type, String title, String msg,
+                                                  boolean canceledOnTouchOutside, boolean cancelable, DialogInterface.OnCancelListener listener) {
+        if (context == null || context.isFinishing()) {
+            return;
+        }
+        closeKeyboardHidden(context);
+        initDialog();
+
+        if (TextUtils.isEmpty(title)) {
+            title = "";
+        }
+        switch (type) {
+            case IosType:
+                AlertDialog.Builder progressBuilder = new AlertDialog.Builder(context, R.style.AlertDialog_Styles);
+                View dialogView = View.inflate(context, R.layout.dialog_progress_view, null);
+                LinearLayout dialog_progress_layout = (LinearLayout) dialogView.findViewById(R.id.dialog_progress_layout);
+                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) dialog_progress_layout.getLayoutParams();
+                params.width = SupDialogStaticUtils.getScreenWidth(context) * 4 / 9;
+                params.height = SupDialogStaticUtils.getScreenWidth(context) * 4 / 9;
+                dialog_progress_layout.setLayoutParams(params);
+                TextView message_tv = (TextView) dialogView.findViewById(R.id.message_tv);
+                if (TextUtils.isEmpty(msg)) {
+                    message_tv.setVisibility(View.GONE);
+                } else {
+                    message_tv.setText(msg);
+                }
+                progressBuilder.setView(dialogView);
+                pAlertDialog = progressBuilder.create();
+                pAlertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+                pAlertDialog.setCancelable(cancelable);
+                if (listener != null && cancelable) {
+                    pAlertDialog.setOnCancelListener(listener);
+                }
+                pAlertDialog.show();
+                break;
+            case DefaultTpye:
+            default:
+                if (TextUtils.isEmpty(msg)) {
+                    msg = loadingStr;
+                }
+                pDialog = ProgressDialog.show(context, title, msg);
+                pDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+                pDialog.setCancelable(cancelable);
+                if (listener != null && cancelable) {
+                    pDialog.setOnCancelListener(listener);
+                }
+                break;
+        }
+
+
+    }
+
+    public static void dismissProgress() {
+        initDialog();
+    }
+
+    public static void showSystemProgressDialog(Activity context, String title, String msg, boolean canceledOnTouchOutside, DialogInterface.OnCancelListener listener) {
+        showDefaultProgressDialog(context, SYSDiaLogType.DefaultTpye, title, msg, canceledOnTouchOutside, true, listener);
+    }
+
+    public static void showSystemProgressDialog(Activity context, String title, String msg, boolean canceledOnTouchOutside, boolean cancelable) {
+        showDefaultProgressDialog(context, SYSDiaLogType.DefaultTpye, title, msg, canceledOnTouchOutside, cancelable, null);
+    }
+
+    public static void showSystemProgressDialog(Activity context, String title, String msg) {
+        showDefaultProgressDialog(context, SYSDiaLogType.DefaultTpye, title, msg, false, true, null);
+    }
+
+    public static void showSystemProgressDialog(Activity context, String msg) {
+        showDefaultProgressDialog(context, SYSDiaLogType.DefaultTpye, "", msg, false, true, null);
+    }
+
+    public static void showSystemProgressDialog(Activity context) {
+        showDefaultProgressDialog(context, SYSDiaLogType.DefaultTpye, "", "", false, true, null);
+    }
+
+    public static void showProgressDialog(Activity context, SYSDiaLogType type, String msg, boolean canceledOnTouchOutside, DialogInterface.OnCancelListener listener) {
+        showDefaultProgressDialog(context, type, "", msg, canceledOnTouchOutside, true, listener);
+    }
+
+    public static void showProgressDialog(Activity context, SYSDiaLogType type, String msg, boolean canceledOnTouchOutside, boolean cancelable) {
+        showDefaultProgressDialog(context, type, "", msg, canceledOnTouchOutside, cancelable, null);
+    }
+
+    public static void showProgressDialog(Activity context, SYSDiaLogType type, String msg) {
+        showDefaultProgressDialog(context, type, "", msg, false, true, null);
+    }
+
+    public static void showProgressDialog(Activity context, SYSDiaLogType type) {
+        showDefaultProgressDialog(context, type, "", "", false, true, null);
+    }
+
+
+    /**
+     * 隐藏软键盘
+     **/
+    private static void closeKeyboardHidden(Activity context) {
+        View view = context.getWindow().peekDecorView();
+        if (view != null) {
+            InputMethodManager inputmanger = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+            inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
+        }
+    }
+
+    /**
+     * 新的對話框彈出之前,先把舊的清除掉
+     */
+    private static void initDialog() {
+        if (pDialog != null && pDialog.isShowing()) {
+            pDialog.dismiss();
+            pDialog = null;
+        }
+        if (tDialog != null && tDialog.isShowing()) {
+            tDialog.dismiss();
+            tDialog = null;
+        }
+        if (pAlertDialog != null && pAlertDialog.isShowing()) {
+            pAlertDialog.dismiss();
+            pAlertDialog = null;
+        }
+        if (progressDialog != null && progressDialog.isShowing()) {
+            progressDialog.dismiss();
+            progressDialog = null;
+        }
+        if (progressAlertDialog != null && progressAlertDialog.isShowing()) {
+            progressAlertDialog.dismiss();
+            progressAlertDialog = null;
+        }
+        if (confirmDialog != null && confirmDialog.isShowing()) {
+            confirmDialog.dismiss();
+            confirmDialog = null;
+        }
+    }
+
+    /**
+     * 2.提示對話框部分
+     */
+    private static AlertDialog tDialog;
+
+    private static void showAlertDialog(Activity context, String title, String msg, String confirmStr, int type, boolean canceledOnTouchOutside) {
+        if (context == null || context.isFinishing()) {
+            return;
+        }
+        closeKeyboardHidden(context);
+        initDialog();
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialog_Styles);
+        View dialogView = View.inflate(context, R.layout.dialog_alert_view, null);
+        LinearLayout dialog_view_layout = (LinearLayout) dialogView.findViewById(R.id.dialog_view_layout);
+        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) dialog_view_layout.getLayoutParams();
+        params.width = SupDialogStaticUtils.getScreenWidth(context) * 2 / 3;
+        dialog_view_layout.setLayoutParams(params);
+        ImageView dialog_icon = (ImageView) dialogView.findViewById(R.id.dialog_icon);
+
+        TextView confirm = (TextView) dialogView.findViewById(R.id.confirm);
+        if (TextUtils.isEmpty(confirmStr)) {
+            confirmStr = SYSDiaLogUtils.confirmStr;
+        }
+        confirm.setText(confirmStr);
+        confirm.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (tDialog != null && tDialog.isShowing()) {
+                    tDialog.dismiss();
+                }
+            }
+        });
+        //1.成功  2.提示   3.錯誤
+        switch (type) {
+            case 1:
+                if (TextUtils.isEmpty(title)) {
+                    title = SYSDiaLogUtils.successStr;
+                }
+                dialog_icon.setImageDrawable(context.getResources().getDrawable(R.drawable.dialog_success));
+                //selector_green
+                confirm.setBackgroundResource(R.drawable.selector_green);
+                //confirm.setBackground(context.getResources().getDrawable(R.drawable.selector_green));
+                break;
+            case 2:
+                if (TextUtils.isEmpty(title)) {
+                    title = SYSDiaLogUtils.tipStr;
+                }
+                dialog_icon.setImageDrawable(context.getResources().getDrawable(R.drawable.dialog_tip));
+                confirm.setBackgroundResource(R.drawable.selector_tip_color);
+                //confirm.setBackground(context.getResources().getDrawable(R.drawable.selector_tip_color));
+                break;
+            case 3:
+                if (TextUtils.isEmpty(title)) {
+                    title = SYSDiaLogUtils.errorStr;
+                }
+                dialog_icon.setImageDrawable(context.getResources().getDrawable(R.drawable.dialog_error));
+                confirm.setBackgroundResource(R.drawable.selector_error_red);
+                //confirm.setBackground(context.getResources().getDrawable(R.drawable.selector_error_red));
+                break;
+            default:
+                break;
+        }
+        TextView title_tv = (TextView) dialogView.findViewById(R.id.title_tv);
+        title_tv.setText(title);
+        TextView message_tv = (TextView) dialogView.findViewById(R.id.message_tv);
+        if (TextUtils.isEmpty(msg)) {
+            message_tv.setVisibility(View.GONE);
+        } else {
+            message_tv.setText(msg);
+        }
+
+
+        builder.setView(dialogView);
+        tDialog = builder.create();
+        tDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+        tDialog.show();
+
+        //所需要的文件
+        //<style name="AlertDialog_Styles" parent="Theme.AppCompat.Light.Dialog" />
+    }
+
+    public static void showSuccessDialog(Activity context, String title, String msg, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, title, msg, confirmStr, 1, canceledOnTouchOutside);
+    }
+
+    public static void showSuccessDialog(Activity context, String title, String confirmStr, boolean canceledOnTouchOutside) {
+        Log.d("TEST", " >>> showSuccessDialog");
+        showAlertDialog(context, title, "", confirmStr, 1, canceledOnTouchOutside);
+    }
+
+    public static void showSuccessDialog(Activity context, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, "", "", confirmStr, 1, canceledOnTouchOutside);
+    }
+
+    public static void showSuccessDialog(Activity context, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, "", "", "", 1, canceledOnTouchOutside);
+    }
+
+    public static void showInfoDialog(Activity context, String title, String msg, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, title, msg, confirmStr, 2, canceledOnTouchOutside);
+    }
+
+    public static void showInfoDialog(Activity context, String title, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, title, "", confirmStr, 2, canceledOnTouchOutside);
+    }
+
+    public static void showInfoDialog(Activity context, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, "", "", confirmStr, 2, canceledOnTouchOutside);
+    }
+
+    public static void showInfoDialog(Activity context, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, "", "", "", 2, canceledOnTouchOutside);
+    }
+
+    public static void showErrorDialog(Activity context, String title, String msg, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, title, msg, confirmStr, 3, canceledOnTouchOutside);
+    }
+
+    public static void showErrorDialog(Activity context, String title, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, title, "", confirmStr, 3, canceledOnTouchOutside);
+    }
+
+    public static void showErrorDialog(Activity context, String confirmStr, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, "", "", confirmStr, 3, canceledOnTouchOutside);
+    }
+
+    public static void showErrorDialog(Activity context, boolean canceledOnTouchOutside) {
+        showAlertDialog(context, "", "", "", 3, canceledOnTouchOutside);
+    }
+
+
+    /**
+     * 3.進度條部分
+     */
+    private static void showDefaultProgressBar(Activity context, SYSDiaLogType type, String title, String msg,
+                                               boolean canceledOnTouchOutside, boolean cancelable, DialogInterface.OnCancelListener listener) {
+        if (context == null || context.isFinishing()) {
+            return;
+        }
+        closeKeyboardHidden(context);
+        initDialog();
+
+        if (TextUtils.isEmpty(title)) {
+            title = "";
+        }
+        switch (type) {
+            case HorizontalWithNumberProgressBar:
+                AlertDialog.Builder progressBarBuilder = new AlertDialog.Builder(context, R.style.AlertDialog_Styles);
+                View dialogView = View.inflate(context, R.layout.dialog_horizontal_progressbar_view, null);
+                LinearLayout dialog_progress_layout = (LinearLayout) dialogView.findViewById(R.id.dialog_progress_layout);
+                FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) dialog_progress_layout.getLayoutParams();
+                params.width = SupDialogStaticUtils.getScreenWidth(context) * 9 / 10;
+                params.height = SupDialogStaticUtils.dp2px(context, 120);
+                dialog_progress_layout.setLayoutParams(params);
+                TextView message_tv = (TextView) dialogView.findViewById(R.id.message_tv);
+                TextView title_tv = (TextView) dialogView.findViewById(R.id.title_tv);
+                horizontalProgressBar = (HorizontalWithNumberProgressBar) dialogView.findViewById(R.id.horizontal_bar);
+                if (TextUtils.isEmpty(title)) {
+                    title_tv.setVisibility(View.GONE);
+                } else {
+                    title_tv.setText(title);
+                }
+                if (TextUtils.isEmpty(msg)) {
+                    message_tv.setVisibility(View.GONE);
+                } else {
+                    message_tv.setText(msg);
+                }
+                progressBarBuilder.setView(dialogView);
+                progressAlertDialog = progressBarBuilder.create();
+                progressAlertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+                progressAlertDialog.setCancelable(cancelable);
+                if (listener != null && cancelable) {
+                    progressAlertDialog.setOnCancelListener(listener);
+                }
+                progressAlertDialog.show();
+                break;
+            case RoundWidthNumberProgressBar:
+                AlertDialog.Builder roundProgressBarBuilder = new AlertDialog.Builder(context, R.style.AlertDialog_Styles);
+                View rounddialogView = View.inflate(context, R.layout.dialog_round_progressbar_view, null);
+                LinearLayout dialog_round_progress_layout = (LinearLayout) rounddialogView.findViewById(R.id.dialog_progress_layout);
+                FrameLayout.LayoutParams params1 = (FrameLayout.LayoutParams) dialog_round_progress_layout.getLayoutParams();
+                params1.width = SupDialogStaticUtils.dp2px(context, 140);
+                params1.height = SupDialogStaticUtils.dp2px(context, 140);
+                dialog_round_progress_layout.setLayoutParams(params1);
+                TextView messageTv = (TextView) rounddialogView.findViewById(R.id.message_tv);
+                horizontalProgressBar = (HorizontalWithNumberProgressBar) rounddialogView.findViewById(R.id.round_bar);
+
+                if (TextUtils.isEmpty(msg)) {
+                    if (TextUtils.isEmpty(title)) {
+                        messageTv.setVisibility(View.GONE);
+                    } else {
+                        messageTv.setText(title);
+                    }
+                } else {
+                    messageTv.setText(msg);
+                }
+                roundProgressBarBuilder.setView(rounddialogView);
+                progressAlertDialog = roundProgressBarBuilder.create();
+                progressAlertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+                progressAlertDialog.setCancelable(cancelable);
+                if (listener != null && cancelable) {
+                    progressAlertDialog.setOnCancelListener(listener);
+                }
+                progressAlertDialog.show();
+                break;
+            case DefaultTpye:
+            default:
+                if (TextUtils.isEmpty(msg)) {
+                    msg = loadingStr;
+                }
+                progressDialog = new ProgressDialog(context);
+                progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  //设置样式
+                progressDialog.setTitle(title); //设置Title
+                progressDialog.setMessage(msg);
+                progressDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+                progressDialog.setCancelable(cancelable);
+                if (listener != null && cancelable) {
+                    progressDialog.setOnCancelListener(listener);
+                }
+                progressDialog.show();
+                break;
+        }
+
+    }
+
+    public static void showProgressBar(Activity context, String title, String msg, boolean canceledOnTouchOutside, DialogInterface.OnCancelListener listener) {
+        showDefaultProgressBar(context, SYSDiaLogType.DefaultTpye, title, msg, canceledOnTouchOutside, true, listener);
+    }
+
+    public static void showProgressBar(Activity context, String title, String msg, boolean canceledOnTouchOutside, boolean cancelable) {
+        showDefaultProgressBar(context, SYSDiaLogType.DefaultTpye, title, msg, canceledOnTouchOutside, cancelable, null);
+    }
+
+    public static void showProgressBar(Activity context, String title, String msg) {
+        showDefaultProgressBar(context, SYSDiaLogType.DefaultTpye, title, msg, false, false, null);
+    }
+
+    public static void showProgressBar(Activity context, String msg) {
+        showDefaultProgressBar(context, SYSDiaLogType.DefaultTpye, "", msg, false, false, null);
+    }
+
+    public static void showProgressBar(Activity context) {
+        showDefaultProgressBar(context, SYSDiaLogType.DefaultTpye, "", "", false, false, null);
+    }
+
+    public static void setProgressBar(int progress) {
+        if (progressDialog != null && progressDialog.isShowing()) {
+            progressDialog.setProgress(progress);
+        }
+        //horizontalProgressBar
+        if (progressAlertDialog != null && progressAlertDialog.isShowing() && horizontalProgressBar != null) {
+            horizontalProgressBar.setProgress(progress);
+        }
+    }
+
+    public static int getProgressBar() {
+        if (progressDialog != null && progressDialog.isShowing()) {
+            return progressDialog.getProgress();
+        }
+        //horizontalProgressBar
+        if (progressAlertDialog != null && progressAlertDialog.isShowing() && horizontalProgressBar != null) {
+            return horizontalProgressBar.getProgress();
+        }
+        return 0;
+    }
+
+    public static void showProgressBar(Activity context, SYSDiaLogType type, String title, String msg, boolean canceledOnTouchOutside, DialogInterface.OnCancelListener listener) {
+        showDefaultProgressBar(context, type, title, msg, canceledOnTouchOutside, true, listener);
+    }
+
+    public static void showProgressBar(Activity context, SYSDiaLogType type, String title, String msg, boolean canceledOnTouchOutside, boolean cancelable) {
+        showDefaultProgressBar(context, type, title, msg, canceledOnTouchOutside, cancelable, null);
+    }
+
+    public static void showProgressBar(Activity context, SYSDiaLogType type, String title, String msg) {
+        showDefaultProgressBar(context, type, title, msg, false, false, null);
+    }
+
+    public static void showProgressBar(Activity context, SYSDiaLogType type, String msg) {
+        showDefaultProgressBar(context, type, "", msg, false, false, null);
+    }
+
+    public static void showProgressBar(Activity context, SYSDiaLogType type) {
+        showDefaultProgressBar(context, type, "", "", false, false, null);
+    }
+
+    /**
+     * 4.確認 取消  對話框部分
+     * public enum SYSConfirmType {
+     * Success,//成功 綠色
+     * Tip,//提示  黃黃的
+     * Warning //警告 紅色
+     * }
+     */
+
+    private static void showConfirmAlertDialog(Activity context, boolean isShowPic, SYSConfirmType picType,
+                                               String title, String msg, String confirmStr, String cancelStr,
+                                               boolean canceledOnTouchOutside, boolean cancelable,
+                                               final ConfirmDialogListener confirmDialogListener) {
+        if (context == null || context.isFinishing()) {
+            return;
+        }
+        Log.d("TEST", "showConfirmAlertDialog");
+        closeKeyboardHidden(context);
+        initDialog();
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialog_Styles);
+        View dialogView = View.inflate(context, R.layout.dialog_confirm_alert_view, null);
+        LinearLayout dialog_view_layout = (LinearLayout) dialogView.findViewById(R.id.dialog_view_layout);
+        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) dialog_view_layout.getLayoutParams();
+        params.width = SupDialogStaticUtils.getScreenWidth(context) * 2 / 3;
+        dialog_view_layout.setLayoutParams(params);
+        ImageView dialog_icon = (ImageView) dialogView.findViewById(R.id.dialog_icon);
+
+        TextView confirm = (TextView) dialogView.findViewById(R.id.confirm);
+        TextView cancel = (TextView) dialogView.findViewById(R.id.cancel);
+        if (TextUtils.isEmpty(confirmStr)) {
+            confirmStr = SYSDiaLogUtils.confirmStr;
+        }
+        if (TextUtils.isEmpty(cancelStr)) {
+            cancelStr = SYSDiaLogUtils.cancelStr;
+        }
+        confirm.setText(confirmStr);
+        cancel.setText(cancelStr);
+        confirm.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Log.d("TEST", ">>> onClick");
+                if (confirmDialogListener != null) {
+                    confirmDialogListener.onClickButton(false, true);
+                }
+                if (confirmDialog != null && confirmDialog.isShowing()) {
+                    confirmDialog.dismiss();
+                }
+            }
+        });
+        cancel.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (confirmDialogListener != null) {
+                    confirmDialogListener.onClickButton(true, false);
+                }
+                if (confirmDialog != null && confirmDialog.isShowing()) {
+                    confirmDialog.dismiss();
+                }
+            }
+        });
+        if (!isShowPic) {
+            dialog_icon.setVisibility(View.GONE);
+        } else {
+            //1.成功  2.提示   3.錯誤
+            switch (picType) {
+                case Success:
+                    if (TextUtils.isEmpty(title) && TextUtils.isEmpty(msg)) {
+                        title = SYSDiaLogUtils.successStr;
+                    }
+                    dialog_icon.setImageDrawable(context.getResources().getDrawable(R.drawable.dialog_success));
+                    //selector_green
+                    confirm.setBackgroundResource(R.drawable.selector_green);
+                    //confirm.setBackground(context.getResources().getDrawable(R.drawable.selector_green));
+                    break;
+                case Tip:
+                    if (TextUtils.isEmpty(title) && TextUtils.isEmpty(msg)) {
+                        title = SYSDiaLogUtils.tipStr;
+                    }
+                    dialog_icon.setImageDrawable(context.getResources().getDrawable(R.drawable.dialog_tip));
+                    confirm.setBackgroundResource(R.drawable.selector_tip_color);
+                    //confirm.setBackground(context.getResources().getDrawable(R.drawable.selector_tip_color));
+                    break;
+                case Warning:
+                    if (TextUtils.isEmpty(title) && TextUtils.isEmpty(msg)) {
+                        title = SYSDiaLogUtils.errorStr;
+                    }
+                    dialog_icon.setImageDrawable(context.getResources().getDrawable(R.drawable.dialog_error));
+                    confirm.setBackgroundResource(R.drawable.selector_error_red);
+                    //confirm.setBackground(context.getResources().getDrawable(R.drawable.selector_error_red));
+                    break;
+                default:
+                    dialog_icon.setVisibility(View.GONE);
+                    break;
+            }
+        }
+        TextView title_tv = (TextView) dialogView.findViewById(R.id.title_tv);
+        if (TextUtils.isEmpty(title)) {
+            title_tv.setVisibility(View.GONE);
+        } else {
+            title_tv.setText(title);
+        }
+
+        TextView message_tv = (TextView) dialogView.findViewById(R.id.message_tv);
+        if (TextUtils.isEmpty(msg)) {
+            message_tv.setVisibility(View.GONE);
+        } else {
+            message_tv.setText(msg);
+        }
+
+        builder.setView(dialogView);
+        confirmDialog = builder.create();
+        confirmDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+        confirmDialog.setCancelable(cancelable);
+        confirmDialog.show();
+
+        //所需要的文件
+        //<style name="AlertDialog_Styles" parent="Theme.AppCompat.Light.Dialog" />
+    }
+
+    public static void showConfirmDialog(Activity context, boolean isShowPic, SYSConfirmType picType,
+                                         String title, String msg, String confirmStr, String cancelStr,
+                                         boolean canceledOnTouchOutside, boolean cancelable,
+                                         final ConfirmDialogListener confirmDialogListener) {
+        showConfirmAlertDialog(context, isShowPic, picType, title, msg, confirmStr, cancelStr, canceledOnTouchOutside, cancelable, confirmDialogListener);
+    }
+
+    public static void showConfirmDialog(Activity context, boolean isShowPic, SYSConfirmType picType,
+                                         String title, String msg,
+                                         final ConfirmDialogListener confirmDialogListener) {
+        showConfirmAlertDialog(context, isShowPic, picType, title, msg, "", "", false, true, confirmDialogListener);
+    }
+
+    public static void showConfirmDialog(Activity context, String title, String msg, String confirmStr, String cancelStr,
+                                         boolean canceledOnTouchOutside, boolean cancelable,
+                                         final ConfirmDialogListener confirmDialogListener) {
+        showConfirmAlertDialog(context, false, SYSConfirmType.Success, title, msg, confirmStr, cancelStr, canceledOnTouchOutside, cancelable, confirmDialogListener);
+    }
+
+    public static void showConfirmDialog(Activity context, String title, String msg, String confirmStr, String cancelStr, ConfirmDialogListener confirmDialogListener) {
+        showConfirmAlertDialog(context, false, SYSConfirmType.Success, title, msg, confirmStr, cancelStr, false, true, confirmDialogListener);
+    }
+
+    public static void showConfirmDialog(Activity context, String title, String msg, ConfirmDialogListener confirmDialogListener) {
+        showConfirmAlertDialog(context, false, SYSConfirmType.Success, title, msg, "", "", false, true, confirmDialogListener);
+    }
+
+    public static void showConfirmDialog(Activity context, String msg, ConfirmDialogListener confirmDialogListener) {
+        showConfirmAlertDialog(context, false, SYSConfirmType.Success, "", msg, "", "", false, true, confirmDialogListener);
+    }
+
+
+    public interface ConfirmDialogListener {
+        void onClickButton(boolean clickLeft, boolean clickRight);
+    }
+
+//    private static void showCustomizeLoadingProgressDialog(Context context, boolean canceledOnTouchOutside) {
+//        ProgressDialog mCustomizeLoadingProgressDialog = new ProgressDialog(context, ProgressDialog.THEME_HOLO_LIGHT);
+//        mCustomizeLoadingProgressDialog.setMessage(AppConstants.appStrMap.get(AppConstants.loading));
+//        mCustomizeLoadingProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+//        mCustomizeLoadingProgressDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
+//        mCustomizeLoadingProgressDialog.setCancelable(true);
+//        mCustomizeLoadingProgressDialog.show();
+//        Point size = new Point();
+//        mCustomizeLoadingProgressDialog.getWindow().getWindowManager().getDefaultDisplay().getSize(size);
+//        //记得用mProgressDialog来得到这个界面的大小,实际上不加就是得到当前监听器匿名类对象的界面宽度</span>
+//
+//        int width = size.x;//获取界面的宽度像素
+//        int height = size.y;
+//        WindowManager.LayoutParams params = mCustomizeLoadingProgressDialog.getWindow().getAttributes(); //一定要用mProgressDialog得到当前界面的参数对象,否则就不是设置ProgressDialog的界面了
+//        params.alpha = 1.0f;//设置进度条背景透明度
+//        params.height = height / 9;//设置进度条的高度
+//        params.gravity = Gravity.BOTTOM;//设置ProgressDialog的重心
+//        params.width = 2 * width / 3;//设置进度条的宽度
+//        params.dimAmount = 0f;//设置半透明背景的灰度,范围0~1,系统默认值是0.5,1表示背景完全是黑色的,0表示背景不变暗,和原来的灰度一样
+//        mCustomizeLoadingProgressDialog.getWindow().setAttributes(params);//把参数设置给进度条,注意,一定要先show出来才可以再设置,不然就没效果了,因为只有当界面显示出来后才可以获得它的屏幕尺寸及参数等一些信息
+//    }
+}

+ 219 - 0
DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/progressbar/horizontal/HorizontalWithNumberProgressBar.java

@@ -0,0 +1,219 @@
+package com.fingerth.supdialogutils.progressbar.horizontal;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.widget.ProgressBar;
+
+import com.fingerth.supdialogutils.R;
+import com.fingerth.supdialogutils.utils.SupDialogStaticUtils;
+
+/**
+ * ======================================================
+ * Created by Administrator able_fingerth on 2017/7/13.
+ * <p/>
+ * 版权所有,违者必究!
+ * <详情描述/>
+ * 參考路徑:
+ * http://blog.csdn.net/lmj623565791/article/details/43371299
+ */
+public class HorizontalWithNumberProgressBar extends ProgressBar {
+
+    private static final int DEFAULT_TEXT_SIZE = 10;
+    private static final int DEFAULT_TEXT_COLOR = 0XFFFC00D1;
+    private static final int DEFAULT_COLOR_UNREACHED_COLOR = 0xFFd3d6da;
+    private static final int DEFAULT_HEIGHT_REACHED_PROGRESS_BAR = 2;
+    private static final int DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR = 2;
+    private static final int DEFAULT_SIZE_TEXT_OFFSET = 10;
+
+    /**
+     * painter of all drawing things
+     */
+    protected Paint mPaint = new Paint();
+    /**
+     * color of progress number
+     */
+    protected int mTextColor = DEFAULT_TEXT_COLOR;
+    /**
+     * size of text (sp)
+     */
+    protected int mTextSize = SupDialogStaticUtils.sp2px(getContext(), DEFAULT_TEXT_SIZE);
+
+    /**
+     * offset of draw progress
+     */
+    protected int mTextOffset = SupDialogStaticUtils.dp2px(getContext(), DEFAULT_SIZE_TEXT_OFFSET);
+
+    /**
+     * height of reached progress bar
+     */
+    protected int mReachedProgressBarHeight = SupDialogStaticUtils.dp2px(getContext(), DEFAULT_HEIGHT_REACHED_PROGRESS_BAR);
+
+    /**
+     * color of reached bar
+     */
+    protected int mReachedBarColor = DEFAULT_TEXT_COLOR;
+    /**
+     * color of unreached bar
+     */
+    protected int mUnReachedBarColor = DEFAULT_COLOR_UNREACHED_COLOR;
+    /**
+     * height of unreached progress bar
+     */
+    protected int mUnReachedProgressBarHeight = SupDialogStaticUtils.dp2px(getContext(), DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR);
+    /**
+     * view width except padding
+     */
+    protected int mRealWidth;
+
+    protected boolean mIfDrawText = true;
+
+    protected static final int VISIBLE = 0;
+
+    public HorizontalWithNumberProgressBar(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public HorizontalWithNumberProgressBar(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        setHorizontalScrollBarEnabled(true);
+
+        obtainStyledAttributes(attrs);
+
+        mPaint.setTextSize(mTextSize);
+        mPaint.setColor(mTextColor);
+
+    }
+
+    /**
+     * get the styled attributes
+     *
+     * @param attrs
+     */
+    private void obtainStyledAttributes(AttributeSet attrs) {
+        // init values from custom attributes
+        final TypedArray attributes = getContext().obtainStyledAttributes(
+                attrs, R.styleable.HorizontalWithNumberProgressBar);
+
+        mTextColor = attributes
+                .getColor(R.styleable.HorizontalWithNumberProgressBar_progressbar_text_color,
+                        DEFAULT_TEXT_COLOR);
+        mTextSize = (int) attributes.getDimension(
+                R.styleable.HorizontalWithNumberProgressBar_progressbar_text_size,
+                mTextSize);
+
+        mReachedBarColor = attributes
+                .getColor(
+                        R.styleable.HorizontalWithNumberProgressBar_progressbar_reached_color,
+                        mTextColor);
+        mUnReachedBarColor = attributes
+                .getColor(
+                        R.styleable.HorizontalWithNumberProgressBar_progressbar_unreached_color,
+                        DEFAULT_COLOR_UNREACHED_COLOR);
+        mReachedProgressBarHeight = (int) attributes
+                .getDimension(
+                        R.styleable.HorizontalWithNumberProgressBar_progressbar_reached_height,
+                        mReachedProgressBarHeight);
+        mUnReachedProgressBarHeight = (int) attributes
+                .getDimension(
+                        R.styleable.HorizontalWithNumberProgressBar_progressbar_unreached_height,
+                        mUnReachedProgressBarHeight);
+        mTextOffset = (int) attributes
+                .getDimension(
+                        R.styleable.HorizontalWithNumberProgressBar_progressbar_text_offset,
+                        mTextOffset);
+
+        int textVisible = attributes
+                .getInt(R.styleable.HorizontalWithNumberProgressBar_progressbar_text_visibility,
+                        VISIBLE);
+        if (textVisible != VISIBLE) {
+            mIfDrawText = false;
+        }
+        attributes.recycle();
+    }
+
+    /**
+     * 刚才不是出onDraw里面写写就行了么,为什么要改onMeasure呢,主要是因为我们所有的属性比如进度条宽度让用户自定义了,所以我们的测量也得稍微变下。
+     */
+    @Override
+    protected synchronized void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+
+        if (heightMode != MeasureSpec.EXACTLY) {
+
+            float textHeight = (mPaint.descent() + mPaint.ascent());
+            int exceptHeight = (int) (getPaddingTop() + getPaddingBottom() + Math
+                    .max(Math.max(mReachedProgressBarHeight,
+                            mUnReachedProgressBarHeight), Math.abs(textHeight)));
+
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(exceptHeight,MeasureSpec.EXACTLY);
+        }
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+    }
+
+    /**
+     * 宽度我们不变,所以的自定义属性不涉及宽度,高度呢,只考虑不是EXACTLY的情况(用户明确指定了,我们就不管了),根据padding和进度条宽度算出自己想要的,如果非EXACTLY下,我们进行exceptHeight封装,传入给控件进行测量高度。
+     * 测量完,就到我们的onDraw了~~~
+     * <p>
+     * 其实核心方法就是onDraw了,但是呢,onDraw也很简单,绘制线、绘制文本、绘制线,结束。
+     */
+    @Override
+    protected synchronized void onDraw(Canvas canvas) {
+        canvas.save();
+        //画笔平移到指定paddingLeft, getHeight() / 2位置,注意以后坐标都为以此为0,0
+        canvas.translate(getPaddingLeft(), getHeight() / 2);
+
+        boolean noNeedBg = false;
+        //当前进度和总值的比例
+        float radio = getProgress() * 1.0f / getMax();
+        //已到达的宽度
+        float progressPosX = (int) (mRealWidth * radio);
+        //绘制的文本
+        String text = getProgress() + "%";
+
+        //拿到字体的宽度和高度
+        float textWidth = mPaint.measureText(text);
+        float textHeight = (mPaint.descent() + mPaint.ascent()) / 2;
+
+        //如果到达最后,则未到达的进度条不需要绘制
+        if (progressPosX + textWidth > mRealWidth) {
+            progressPosX = mRealWidth - textWidth;
+            noNeedBg = true;
+        }
+
+        // 绘制已到达的进度
+        float endX = progressPosX - mTextOffset / 2;
+        if (endX > 0) {
+            mPaint.setColor(mReachedBarColor);
+            mPaint.setStrokeWidth(mReachedProgressBarHeight);
+            canvas.drawLine(0, 0, endX, 0, mPaint);
+        }
+
+        // 绘制文本
+        if (mIfDrawText) {
+            mPaint.setColor(mTextColor);
+            canvas.drawText(text, progressPosX, -textHeight, mPaint);
+        }
+
+        // 绘制未到达的进度条
+        if (!noNeedBg) {
+            float start = progressPosX + mTextOffset / 2 + textWidth;
+            mPaint.setColor(mUnReachedBarColor);
+            mPaint.setStrokeWidth(mUnReachedProgressBarHeight);
+            canvas.drawLine(start, 0, mRealWidth, 0, mPaint);
+        }
+
+        canvas.restore();
+
+    }
+
+    @Override
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+        super.onSizeChanged(w, h, oldw, oldh);
+        mRealWidth = w - getPaddingRight() - getPaddingLeft();
+    }
+}

+ 119 - 0
DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/progressbar/round/RoundWidthNumberProgressBar.java

@@ -0,0 +1,119 @@
+package com.fingerth.supdialogutils.progressbar.round;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+
+import com.fingerth.supdialogutils.R;
+import com.fingerth.supdialogutils.progressbar.horizontal.HorizontalWithNumberProgressBar;
+import com.fingerth.supdialogutils.utils.SupDialogStaticUtils;
+
+/**
+ * ======================================================
+ * Created by Administrator able_fingerth on 2017/7/13.
+ * <p/>
+ * 版权所有,违者必究!
+ * <详情描述/>
+ * 參考路徑:
+ * http://blog.csdn.net/lmj623565791/article/details/43371299
+ * 我自己有改善。
+ */
+public class RoundWidthNumberProgressBar extends HorizontalWithNumberProgressBar {
+
+//    android:layout_width="90dp"
+//    android:layout_height="90dp"
+//    fingerth:progressbar_reached_color="#0EFF96"
+//    fingerth:progressbar_reached_height="2dp"
+//    fingerth:progressbar_text_color="#0EFF96"
+//    fingerth:progressbar_text_size="16sp"
+//    fingerth:progressbar_unreached_color="#dddddd"
+//    fingerth:progressbar_unreached_height="1.5dp"
+//    fingerth:radius="43dp"
+
+//      <!--注意:當我把長寬寫成90dp時, 為了讓progressbar居中並且全部顯示,這時 radius + progressbar_reached_height 要等于45dp()-->
+
+    /**
+     * mRadius of view
+     */
+    private int mRadius = SupDialogStaticUtils.dp2px(getContext(), 30);
+
+    public RoundWidthNumberProgressBar(Context context) {
+        this(context, null);
+    }
+
+    public RoundWidthNumberProgressBar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        //mReachedProgressBarHeight = (int) (mUnReachedProgressBarHeight * 2.5f);
+        //這裡我處理下 mReachedProgressBarHeight 要大於 mUnReachedProgressBarHeight
+        if (mUnReachedProgressBarHeight > mReachedProgressBarHeight) {
+            mUnReachedProgressBarHeight = mReachedProgressBarHeight;
+        }
+
+        TypedArray ta = context.obtainStyledAttributes(attrs,
+                R.styleable.RoundWidthNumberBar);
+        mRadius = (int) ta.getDimension(
+                R.styleable.RoundWidthNumberBar_radius, mRadius);
+        ta.recycle();
+
+        mTextSize = SupDialogStaticUtils.sp2px(getContext(), 14);
+
+        mPaint.setStyle(Paint.Style.STROKE);
+        mPaint.setAntiAlias(true);
+        mPaint.setDither(true);
+        mPaint.setStrokeCap(Paint.Cap.ROUND);
+
+    }
+
+    @Override
+    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+
+        int paintWidth = Math.max(mReachedProgressBarHeight, mUnReachedProgressBarHeight);
+
+        if (heightMode != MeasureSpec.EXACTLY) {
+            int exceptHeight = (int) (getPaddingTop() + getPaddingBottom() + mRadius * 2 + paintWidth);
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(exceptHeight, MeasureSpec.EXACTLY);
+        }
+        if (widthMode != MeasureSpec.EXACTLY) {
+            int exceptWidth = (int) (getPaddingLeft() + getPaddingRight() + mRadius * 2 + paintWidth);
+            widthMeasureSpec = MeasureSpec.makeMeasureSpec(exceptWidth, MeasureSpec.EXACTLY);
+        }
+
+        super.onMeasure(heightMeasureSpec, heightMeasureSpec);
+
+    }
+
+    @Override
+    protected synchronized void onDraw(Canvas canvas) {
+
+        String text = getProgress() + "%";
+        // mPaint.getTextBounds(text, 0, text.length(), mTextBound);
+        float textWidth = mPaint.measureText(text);
+        float textHeight = (mPaint.descent() + mPaint.ascent()) / 2;
+
+        canvas.save();
+        canvas.translate(getPaddingLeft(), getPaddingTop());
+        mPaint.setStyle(Paint.Style.STROKE);
+        // draw unreaded bar
+        mPaint.setColor(mUnReachedBarColor);
+        mPaint.setStrokeWidth(mUnReachedProgressBarHeight);
+        canvas.drawCircle(mRadius + mReachedProgressBarHeight / 2, mRadius + mReachedProgressBarHeight / 2, mRadius, mPaint);
+        // draw reached bar
+        mPaint.setColor(mReachedBarColor);
+        mPaint.setStrokeWidth(mReachedProgressBarHeight);
+        float sweepAngle = getProgress() * 1.0f / getMax() * 360;
+        canvas.drawArc(new RectF(mReachedProgressBarHeight / 2, mReachedProgressBarHeight / 2, mRadius * 2 + mReachedProgressBarHeight / 2, mRadius * 2 + mReachedProgressBarHeight / 2),
+                270, sweepAngle, false, mPaint);
+        // draw text
+        mPaint.setStyle(Paint.Style.FILL);
+        canvas.drawText(text, mRadius - textWidth / 2, mRadius - textHeight, mPaint);
+
+        canvas.restore();
+
+    }
+}

+ 66 - 0
DialogUtilsLibrary/src/main/java/com/fingerth/supdialogutils/utils/SupDialogStaticUtils.java

@@ -0,0 +1,66 @@
+package com.fingerth.supdialogutils.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+
+public class SupDialogStaticUtils {
+
+    public static final String TAG = "SupDialogStaticUtils";
+
+    private static int sysWidth = 0;
+    private static int sysHeight = 0;
+
+    /**
+     * 获取手机的分比率,高和宽
+     */
+    private static void getScreen(Activity activity) {
+        if (SupDialogStaticUtils.sysWidth <= 0 || SupDialogStaticUtils.sysHeight <= 0) {
+            DisplayMetrics dm = new DisplayMetrics();
+            activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
+            SupDialogStaticUtils.sysWidth = dm.widthPixels;
+            SupDialogStaticUtils.sysHeight = dm.heightPixels;
+        }
+    }
+
+    public static int getScreenWidth(Activity activity) {
+        getScreen(activity);
+        return SupDialogStaticUtils.sysWidth;
+    }
+
+    public static int getScreenHeight(Activity activity) {
+        getScreen(activity);
+        return SupDialogStaticUtils.sysHeight;
+    }
+
+    public static int getStatusBarHeight(Context c) {
+        int result = 0;
+        int resourceId = c.getResources().getIdentifier("status_bar_height", "dimen", "android");
+        if (resourceId > 0) {
+            result = c.getResources().getDimensionPixelSize(resourceId);
+        }
+        return result;
+    }
+
+
+    public static int dp2px(Context context, int dp) {
+        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
+    }
+
+    public static int dp2px(Context context, float dp) {
+        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
+    }
+
+
+    public static int sp2px(Context context, int sp) {
+        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
+
+    }
+
+    public static int px2dip(Context context, float pxValue) {
+        final float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (pxValue / scale + 0.5f);
+    }
+
+}

BIN
DialogUtilsLibrary/src/main/res/drawable-hdpi/dialog_error.png


BIN
DialogUtilsLibrary/src/main/res/drawable-hdpi/dialog_success.png


BIN
DialogUtilsLibrary/src/main/res/drawable-hdpi/dialog_tip.png


+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_error_red.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="#E70012"
+        android:startColor="#E70012" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="#E70012" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="#E70012" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_error_red_dark.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="#AA0012"
+        android:startColor="#AA0012" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="#AA0012" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="#AA0012" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_gray.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="@color/gray_a3"
+        android:startColor="@color/gray_a3" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="@color/gray_a3" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="@color/gray_a3" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_gray_dark.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="@color/gray_63"
+        android:startColor="@color/gray_63" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="@color/gray_63" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="@color/gray_63" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_green.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="#6BC839"
+        android:startColor="#6BC839" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="#6BC839" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="#6BC839" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_green_dark.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="#3C7E18"
+        android:startColor="#3C7E18" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="#3C7E18" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="#3C7E18" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_tip.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="@color/tip_color"
+        android:startColor="@color/tip_color" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="@color/tip_color" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="@color/tip_color" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_tip_dark.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="2dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="@color/tip_dark_color"
+        android:startColor="@color/tip_dark_color" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="@color/tip_dark_color" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="@color/tip_dark_color" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_white.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="10dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="@color/white"
+        android:startColor="@color/white" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="@color/white" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="@color/white" />
+
+</shape>

+ 22 - 0
DialogUtilsLibrary/src/main/res/drawable/drawable_round_white_dd.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--圆角的半径,设置圆角半径-->
+    <corners android:radius="5dp" />
+
+    <!-- 渐变 -->
+    <gradient
+        android:angle="270"
+        android:endColor="@color/white_dd"
+        android:startColor="@color/white_dd" />
+
+
+    <!-- 填充,填充的颜色 -->
+    <solid android:color="@color/white_dd" />
+
+    <!-- 描边 -->
+    <stroke
+        android:width="0.5dp"
+        android:color="@color/white_dd" />
+
+</shape>

+ 6 - 0
DialogUtilsLibrary/src/main/res/drawable/selector_error_red.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/drawable_round_error_red_dark" android:state_pressed="true" />
+    <item android:drawable="@drawable/drawable_round_error_red" />
+
+</selector>

+ 6 - 0
DialogUtilsLibrary/src/main/res/drawable/selector_gray.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/drawable_round_gray_dark" android:state_pressed="true" />
+    <item android:drawable="@drawable/drawable_round_gray" />
+
+</selector>

+ 6 - 0
DialogUtilsLibrary/src/main/res/drawable/selector_green.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/drawable_round_green_dark" android:state_pressed="true" />
+    <item android:drawable="@drawable/drawable_round_green" />
+
+</selector>

+ 6 - 0
DialogUtilsLibrary/src/main/res/drawable/selector_tip_color.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/drawable_round_tip_dark" android:state_pressed="true" />
+    <item android:drawable="@drawable/drawable_round_tip" />
+
+</selector>

+ 69 - 0
DialogUtilsLibrary/src/main/res/layout/dialog_alert_view.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/trans"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:id="@+id/dialog_view_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/drawable_round_white"
+        android:orientation="vertical"
+        android:paddingBottom="25dp"
+        android:paddingLeft="10dp"
+        android:paddingRight="10dp"
+        android:paddingTop="10dp">
+
+        <ImageView
+            android:id="@+id/dialog_icon"
+            android:layout_width="60dp"
+            android:layout_height="60dp"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginBottom="5dp"
+            android:layout_marginTop="15dp"
+            android:scaleType="fitCenter" />
+
+
+        <TextView
+            android:id="@+id/title_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:gravity="center_horizontal"
+            android:padding="10dp"
+            android:singleLine="true"
+            android:textColor="@color/gray_24"
+            android:textSize="23sp"
+            android:textStyle="bold" />
+
+        <TextView
+            android:id="@+id/message_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:gravity="center_horizontal"
+            android:padding="5dp"
+            android:textColor="@color/gray_6c"
+            android:textSize="14sp" />
+
+
+        <TextView
+            android:id="@+id/confirm"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="10dp"
+            android:background="@drawable/selector_green"
+            android:gravity="center"
+            android:minWidth="70dp"
+            android:paddingBottom="6dp"
+            android:paddingLeft="10dp"
+            android:paddingRight="10dp"
+            android:paddingTop="6dp"
+            android:textColor="@color/white"
+            android:textSize="16sp" />
+    </LinearLayout>
+
+</FrameLayout>

+ 109 - 0
DialogUtilsLibrary/src/main/res/layout/dialog_confirm_alert_view.xml

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/trans"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:id="@+id/dialog_view_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/drawable_round_white"
+        android:orientation="vertical"
+        android:paddingBottom="20dp"
+        android:paddingLeft="10dp"
+        android:paddingRight="10dp"
+        android:paddingTop="15dp">
+
+        <ImageView
+            android:id="@+id/dialog_icon"
+            android:layout_width="60dp"
+            android:layout_height="60dp"
+            android:layout_gravity="center_horizontal"
+            android:paddingBottom="5dp"
+            android:scaleType="fitCenter"
+            android:src="@drawable/dialog_tip" />
+
+
+        <TextView
+            android:id="@+id/title_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:gravity="center_horizontal"
+            android:paddingBottom="5dp"
+            android:paddingTop="1dp"
+            android:singleLine="true"
+            android:text="標題"
+            android:textColor="@color/gray_24"
+            android:textSize="23sp"
+            android:textStyle="bold" />
+
+        <TextView
+            android:id="@+id/message_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:gravity="center_horizontal"
+            android:paddingBottom="15dp"
+            android:paddingTop="1dp"
+            android:text="你確定要這樣嗎?"
+            android:textColor="@color/gray_6c"
+            android:textSize="14sp" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="3" />
+
+            <TextView
+                android:id="@+id/cancel"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:background="@drawable/selector_gray"
+                android:gravity="center"
+                android:minWidth="90dp"
+                android:paddingBottom="8dp"
+                android:paddingLeft="10dp"
+                android:paddingRight="10dp"
+                android:paddingTop="8dp"
+                android:textColor="@color/white"
+                android:textSize="16sp" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="1" />
+
+            <TextView
+                android:id="@+id/confirm"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:background="@drawable/selector_tip_color"
+                android:gravity="center"
+                android:minWidth="90dp"
+                android:paddingBottom="8dp"
+                android:paddingLeft="10dp"
+                android:paddingRight="10dp"
+                android:paddingTop="8dp"
+                android:textColor="@color/white"
+                android:textSize="16sp" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:layout_weight="3" />
+        </LinearLayout>
+
+
+    </LinearLayout>
+
+</FrameLayout>

+ 69 - 0
DialogUtilsLibrary/src/main/res/layout/dialog_horizontal_progressbar_view.xml

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:fingerth="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/trans"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:id="@+id/dialog_progress_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/drawable_round_white"
+        android:orientation="vertical"
+        android:paddingBottom="10dp"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp"
+        android:paddingTop="10dp">
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="3" />
+
+        <TextView
+            android:id="@+id/title_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:padding="5dp"
+            android:singleLine="true"
+            android:textColor="@color/gray_24"
+            android:textSize="16sp" />
+
+        <TextView
+            android:id="@+id/message_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:padding="5dp"
+            android:singleLine="true"
+            android:textColor="@color/gray_24"
+            android:textSize="14sp" />
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+        <com.fingerth.supdialogutils.progressbar.horizontal.HorizontalWithNumberProgressBar
+            android:id="@+id/horizontal_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="5dp"
+            android:progress="50"
+            fingerth:progressbar_text_color="#0EFF96"
+            fingerth:progressbar_unreached_color="#dddddd"
+            fingerth:progressbar_reached_color="#0EFF96"
+            />
+
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="4" />
+
+
+    </LinearLayout>
+</FrameLayout>

+ 51 - 0
DialogUtilsLibrary/src/main/res/layout/dialog_progress_view.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/trans"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:id="@+id/dialog_progress_layout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@drawable/drawable_round_white"
+        android:orientation="vertical"
+        android:paddingBottom="25dp"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp"
+        android:paddingTop="10dp">
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+        <ProgressBar
+            style="@android:style/Widget.Holo.Light.ProgressBar.Large"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginBottom="5dp"
+            android:layout_marginTop="15dp" />
+        
+        <TextView
+            android:id="@+id/message_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:gravity="center_horizontal"
+            android:padding="5dp"
+            android:singleLine="true"
+            android:text="加載中..."
+            android:textColor="@color/gray_63"
+            android:textSize="16sp" />
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+
+    </LinearLayout>
+</FrameLayout>

+ 61 - 0
DialogUtilsLibrary/src/main/res/layout/dialog_round_progressbar_view.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:fingerth="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/trans"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:id="@+id/dialog_progress_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/drawable_round_white"
+        android:orientation="vertical"
+        android:paddingBottom="10dp"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp"
+        android:paddingTop="10dp">
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+
+        <com.fingerth.supdialogutils.progressbar.round.RoundWidthNumberProgressBar
+            android:id="@+id/round_bar"
+            android:layout_width="80dp"
+            android:layout_height="80dp"
+            android:layout_gravity="center_horizontal"
+            android:progress="50"
+            fingerth:progressbar_reached_color="#0EFF96"
+            fingerth:progressbar_reached_height="2dp"
+            fingerth:progressbar_text_color="#0EFF96"
+            fingerth:progressbar_text_size="14sp"
+            fingerth:progressbar_unreached_color="#dddddd"
+            fingerth:progressbar_unreached_height="1.5dp"
+            fingerth:radius="38dp" />
+
+        <!--注意:當我把長寬寫成80dp時, 為了讓progressbar居中並且全部顯示,這時 radius+progressbar_reached_height 要等于40dp()-->
+
+        <TextView
+            android:id="@+id/message_tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="1dp"
+            android:gravity="center_horizontal"
+            android:padding="2dp"
+            android:singleLine="true"
+            android:textColor="@color/gray_24"
+            android:textSize="14sp" />
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+
+
+    </LinearLayout>
+</FrameLayout>

+ 24 - 0
DialogUtilsLibrary/src/main/res/values/attr_progressbar.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <declare-styleable name="HorizontalWithNumberProgressBar">
+        <attr name="progressbar_reached_color" format="color" />
+        <attr name="progressbar_unreached_color" format="color" />
+
+        <attr name="progressbar_reached_height" format="dimension" />
+        <attr name="progressbar_unreached_height" format="dimension" />
+
+
+        <attr name="progressbar_text_size" format="dimension" />
+        <attr name="progressbar_text_color" format="color" />
+        <attr name="progressbar_text_offset" format="dimension" />
+        <attr name="progressbar_text_visibility" format="enum">
+            <enum name="visible" value="0" />
+            <enum name="invisible" value="1" />
+        </attr>
+    </declare-styleable>
+
+
+    <declare-styleable name="RoundWidthNumberBar">
+        <attr name="radius" format="dimension" />
+    </declare-styleable>
+</resources>

+ 30 - 0
DialogUtilsLibrary/src/main/res/values/colors.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- 黑色 -->
+    <color name="black">#000000</color>
+    <color name="red">#ff0000</color>
+
+    <color name="trans">#00000000</color>
+
+
+    <color name="white">#FFFFFF</color>
+    <color name="white_f8">#F8F8F8</color>
+    <color name="white_f4">#F4F4F4</color>
+    <color name="white_dd">#DDDDDD</color>
+    <color name="white_ee">#EEEEEE</color>
+
+
+    <color name="gray_24">#24292B</color>
+    <color name="gray_33">#333333</color>
+    <color name="gray_a3">#A3A3A3</color>
+    <color name="gray_6c">#6c6c6c</color>
+    <color name="gray_63">#636363</color>
+    <color name="gray">#808080</color>
+
+
+    <color name="green">#808080</color>
+
+    <color name="tip_color">#FF5252</color>
+    <color name="tip_dark_color">#FF2525</color>
+
+</resources>

+ 3 - 0
DialogUtilsLibrary/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">FingerthDialogUtilsLibrary</string>
+</resources>

+ 22 - 0
DialogUtilsLibrary/src/main/res/values/styles.xml

@@ -0,0 +1,22 @@
+<resources>
+
+
+    <!--<style name="AlertDialog_Styles" parent="Theme.AppCompat.Light.Dialog" />-->
+
+    <style name="AlertDialog_Styles" parent="android:Theme.Dialog">
+        <!--<item name="android:windowAnimationStyle">@style/AnimAlert</item>-->
+        <!-- 边框 -->
+        <item name="android:windowFrame">@null</item>
+        <!-- 是否浮现在activity之上 -->
+        <item name="android:windowIsFloating">true</item>
+        <!-- 半透明 -->
+        <item name="android:windowIsTranslucent">true</item>
+        <!-- 无标题 -->
+        <item name="android:windowNoTitle">true</item>
+        <!-- 背景透明 -->
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <!-- 模糊 -->
+        <item name="android:backgroundDimEnabled">true</item>
+    </style>
+
+</resources>

+ 19 - 0
MaintainApp.iml

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

+ 41 - 2
README.md

@@ -1,3 +1,42 @@
-# weightbox-maintain-app
+# 单门柜/双门柜硬件接线及说明
+
+&emsp; 目前默认,接一个锁是单门柜,接两个锁是双门柜.
+
+### 单门柜
+1. usb摄像头接靠近lan口的大usb口.
+3. 锁接2号插槽.
+
+### 双门柜
+1. 摄像头布局,1号柜子usb摄像头接靠近lan口的大usb口.2号 随意.
+2. 锁接线,1号柜子的锁线接上面1号锁插槽,2号柜子锁线接下面2号位置插槽.
+3. 称重板布线, 1号柜子序号1-8,2号柜子布线序号 9-16.
+4. 设备序列号,1号柜子是默认设备序列号,比如:N0002, 2号柜子就是N0003 (N0002+1)
+
+
+
+# 调零校准流程
+1. 调零开门,取出所有物品,关门,调零结束
+2. 校准开门,注意接口中的砝码为10000g,对应的在柜子的各层板上依次放入10千克砝码,听到滴的一声,即为此层板校准完成,当全部层板校准完成时,会听到连续3声滴。
+此接口中的gratings为预留进阶使用,当前校准所有层板。
+
+
+## 接口说明
+- 正式环境
+<br/>&emsp;server: 106.15.235.241:8090
+- 测试环境
+<br/>&emsp;server: 106.15.235.241:8029
+- params
+<br/>&emsp;设备 devid: N0001
+<br/>&emsp;校准砝码 weight: 5000g(>= 5kg)
+
+1. 调用调零接口
+<br/>URL: http://${server}/weightbox/control/adjustZero?id=${devid}&weight=0&gratings=1_1
+<br/>方法: POST
+<br/>说明: 接口中weight和gratings为预留进阶使用。
+
+
+2. 调用标定校准接口
+<br/>URL: http://${server}/weightbox/control/calibration?id=${devid}&weight=${weight}&gratings=1_1
+<br/>方法: POST
+<br/>说明: 校准有3分钟超时, 校准成功,校准会立即结束; 校准失败,会等待3分钟超时结束.
 
-weightbox  maintain app.

+ 1 - 0
app/.gitignore

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

+ 178 - 0
app/app.iml

@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android-gradle" name="Android-Gradle">
+      <configuration>
+        <option name="GRADLE_PROJECT_PATH" value=":app" />
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.6.4" />
+        <option name="LAST_KNOWN_AGP_VERSION" value="3.6.4" />
+      </configuration>
+    </facet>
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+        <afterSyncTasks>
+          <task>generateDebugSources</task>
+        </afterSyncTasks>
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/out" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:junit:1.1.2@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-core:3.3.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.3.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:core:1.3.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.3.0@aar" level="project" />
+    <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-idling-resource:3.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.room:room-common:2.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.collection:collection:1.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-annotations:10.0.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.1.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout-solver:2.0.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.flatbuffers:flatbuffers-java:1.12.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.retrofit2:converter-gson:2.5.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.retrofit2:adapter-rxjava2:2.5.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.retrofit2:retrofit:2.5.0@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okhttp3:logging-interceptor:3.13.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okhttp3:okhttp:3.13.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.17.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.code.gson:gson:2.8.5@jar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.2.7@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.reactivestreams:reactive-streams:1.0.2@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.eclipse.paho:org.eclipse.paho.android.service:1.1.1@jar" level="project" />
+    <orderEntry type="library" name="Gradle: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5@jar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.navigation:navigation-ui:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.android.material:material:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout:2.0.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-extensions:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-process:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-service:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-v4:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.navigation:navigation-fragment:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.viewpager2:viewpager2:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.appcompat:appcompat-resources:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-ui:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.media:media:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.room:room-runtime:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.legacy:legacy-support-core-utils:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.coordinatorlayout:coordinatorlayout:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.recyclerview:recyclerview:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.transition:transition:1.2.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.jakewharton:butterknife:10.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.jakewharton:butterknife-runtime:10.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.navigation:navigation-runtime:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.activity:activity:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.slidingpanelayout:slidingpanelayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.swiperefreshlayout:swiperefreshlayout:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.asynclayoutinflater:asynclayoutinflater:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.navigation:navigation-common:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.core:core:1.3.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.savedstate:savedstate:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.cardview:cardview:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.sqlite:sqlite-framework:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.sqlite:sqlite:2.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.documentfile:documentfile:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.localbroadcastmanager:localbroadcastmanager:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.print:print:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: androidx.annotation:annotation-experimental:1.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: de.hdodenhof:circleimageview:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.orhanobut:logger:2.1.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxandroid:2.1.1@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.github.inksnow:popuputils:1.0.9@aar" level="project" />
+    <orderEntry type="module" module-name="DialogUtilsLibrary" />
+  </component>
+</module>

+ 89 - 0
app/build.gradle

@@ -0,0 +1,89 @@
+apply plugin: 'com.android.application'
+android {
+    compileSdkVersion 29
+
+    defaultConfig {
+        applicationId "com.ifastore.maintain"
+        minSdkVersion 21
+        targetSdkVersion 23
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        ndk {
+            abiFilters "armeabi"//可以适当补填其他
+        }
+    }
+
+    sourceSets {
+        main {
+            jniLibs.srcDirs = ['libs']
+        }
+    }
+
+    compileOptions {
+        sourceCompatibility 1.8
+        targetCompatibility 1.8
+    }
+
+    repositories {
+        flatDir {
+            dirs 'libs'
+        }
+        maven { url 'https://repo.eclipse.org/content/repositories/paho-snapshots/' }
+    }
+
+}
+
+dependencies {
+    implementation fileTree(dir: "libs", include: ["*.jar"])
+    implementation 'androidx.appcompat:appcompat:1.2.0'
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+    implementation 'com.google.android.material:material:1.2.0'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+    implementation 'androidx.navigation:navigation-fragment:2.1.0'
+    implementation 'androidx.navigation:navigation-ui:2.1.0'
+    implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
+    testImplementation 'junit:junit:4.12'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+
+    implementation 'de.hdodenhof:circleimageview:2.1.0'
+    implementation 'com.jakewharton:butterknife:10.0.0'
+    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
+
+    //flatbuffers  1.12.0
+    // https://mvnrepository.com/artifact/com.google.flatbuffers/flatbuffers-java
+    implementation group: 'com.google.flatbuffers', name: 'flatbuffers-java', version: '1.12.0'
+
+    //viewmodel and livedata
+    implementation "android.arch.lifecycle:extensions:1.1.1"
+    annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
+
+    implementation 'com.squareup.retrofit2:retrofit:2.5.0'//导入retrofit
+    implementation 'com.google.code.gson:gson:2.8.5'//Gson 库
+    //retrofit日志拦截
+    implementation 'com.squareup.okhttp3:logging-interceptor:3.13.1'
+    implementation 'com.orhanobut:logger:2.1.0' // 打印日志
+    //下面两个是RxJava 和 RxAndroid
+    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
+    implementation 'io.reactivex.rxjava2:rxjava:2.2.7'
+    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'//转换器,请求结果转换成Model
+    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'//配合Rxjava 使用
+    //room databases
+    implementation "android.arch.persistence.room:runtime:1.1.1"
+    annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
+    //loading view
+    implementation project(':DialogUtilsLibrary')
+
+    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
+    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
+
+    implementation 'com.github.inksnow:popuputils:1.0.9'
+
+    //log
+ /*   implementation 'com.jakewharton.Timber:timber:4.7.1'
+    implementation 'org.slf4j:slf4j-api:1.7.25'
+    implementation 'com.github.tony19:logback-android:2.0.0'*/
+
+}

+ 21 - 0
app/proguard-rules.pro

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

+ 26 - 0
app/src/androidTest/java/com/ifastore/maintain/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.ifastore.maintain;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        assertEquals("com.ifastore.uhfmanage", appContext.getPackageName());
+    }
+}

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

@@ -0,0 +1,50 @@
+<?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.ifastore.maintain">
+
+
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
+        tools:ignore="ProtectedPermissions" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:name="com.ifastore.maintain.App"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity
+            android:name="com.ifastore.maintain.ui.MainActivity"
+            android:label="@string/app_name"
+            android:theme="@style/AppTheme.NoActionBar">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name="com.ifastore.maintain.ui.showgoods.ShowGoodsInfoActivity"
+            android:configChanges="orientation|keyboardHidden"
+            android:theme="@android:style/Theme.Holo.Dialog.NoActionBar.MinWidth" />
+        <service android:name="com.ifastore.maintain.service.ControlService">
+        </service>
+
+        <!-- MQTT Service -->
+        <service android:name="org.eclipse.paho.android.service.MqttService" />
+
+    </application>
+
+
+
+</manifest>

+ 69 - 0
app/src/main/assets/logback.xml

@@ -0,0 +1,69 @@
+<!--debug属性用来决定是否打印logback的日志信息-->
+<configuration debug='false'>
+    <!--<property name="LOG_DIR" value="/storage/emulated/0/logfiles" />-->
+    <property name="LOG_DIR" value="/storage/emulated/0/reduxsolutionsAgent/log" />
+
+    <!--声明一个时间戳-->
+    <timestamp datePattern="yyyyMMdd" key="today"/>
+
+    <!--用于在控制台输出的Appender-->
+    <appender name="LOGCAT" class="ch.qos.logback.classic.android.LogcatAppender">
+        <encoder>
+            <pattern>%-5relative [%thread][%file:%M:%line] - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!--声明一个FileAppender-->
+    <appender name="BASE_FILE" class="ch.qos.logback.core.FileAppender">
+        <!--初始化的时候不创建文件,在第一次使用的时候创建文件-->
+        <lazy>true</lazy>
+        <!--log追加到文件,否则覆盖文件-->
+        <append>true</append>
+        <!--用来保存log的文件全路径-->
+        <file>${LOG_DIR}/base.log</file>
+        <!--输出log的格式-->
+        <encoder>
+            <!--<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>-->
+            <pattern>%date [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!--声明一个RollingFileAppender-->
+    <appender name="BASE_ROLL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!--<file>${LOG_DIR}/base.roll.${today}.log</file>-->
+        <file>${LOG_DIR}/maintain-app.log</file>
+        <append>true</append>
+        <encoder>
+            <!--<pattern>%date %-5relative [%thread] %-5level %logger{36} [%file:%M:%line] - %msg%n</pattern>-->
+            <pattern>%date %-5relative [%thread] %-5level - %msg%n</pattern>
+        </encoder>
+
+        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
+            <!--<fileNamePattern>${LOG_DIR}/base.roll.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+            <!--<fileNamePattern>${LOG_DIR}/AndroidAssistantAgent.%d{yyyy-MM-dd}.txt</fileNamePattern>-->
+            <!--最大保存7天的日志-->
+            <!--<maxHistory>7</maxHistory>-->
+        <!--</rollingPolicy>-->
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <!--<fileNamePattern>tests.%i.log.zip</fileNamePattern>-->
+            <fileNamePattern>${LOG_DIR}/maintain-app.log.%i</fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>3</maxIndex>
+        </rollingPolicy>
+
+        <!--文件大于5mb,切换文件-->
+        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>5MB</maxFileSize>
+        </triggeringPolicy>
+    </appender>
+
+    <logger name="LOGGER_ROLLING">
+        <appender-ref ref="BASE_ROLL_FILE"/>
+    </logger>
+
+    <root level="TRACE">
+        <!--<appender-ref ref="LOGCAT" />-->
+        <appender-ref ref="BASE_ROLL_FILE"/>
+    </root>
+</configuration>

+ 20 - 0
app/src/main/java/com/ifastore/maintain/App.java

@@ -0,0 +1,20 @@
+package com.ifastore.maintain;
+
+import android.app.Application;
+import android.content.Intent;
+import android.os.Build;
+
+import androidx.annotation.RequiresApi;
+
+import com.ifastore.maintain.service.ControlService;
+
+public class App extends Application {
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    @Override
+    public void onCreate() {
+        super.onCreate();
+       // Timber.plant(new FileLoggingTree());
+        Intent intent = new Intent(this, ControlService.class);
+        startForegroundService(intent);
+    }
+}

+ 31 - 0
app/src/main/java/com/ifastore/maintain/common/BaseUrlAdress.java

@@ -0,0 +1,31 @@
+package com.ifastore.maintain.common;
+
+/**
+ * Created by Jen on 19-4-16.
+ */
+public class BaseUrlAdress {
+
+    private static BaseUrlAdress loaderParseFile;
+
+    private String baseurl;
+
+    private BaseUrlAdress(){
+
+    }
+
+    public static BaseUrlAdress getInstance(){
+        if(loaderParseFile==null){
+            loaderParseFile = new BaseUrlAdress();
+        }
+        return loaderParseFile;
+    }
+
+
+    public String getBaseurl() {
+        return baseurl;
+    }
+
+    public void setBaseurl(String baseurl) {
+        this.baseurl = baseurl;
+    }
+}

+ 27 - 0
app/src/main/java/com/ifastore/maintain/common/Contants.java

@@ -0,0 +1,27 @@
+package com.ifastore.maintain.common;
+
+public class Contants {
+    //cmd
+
+    public static final String CMD_MQ_OPENDOOR       =  "mq_open";
+    public static final String CMD_MQ_MONITORING     =  "mq_monitor";
+    public static final String CMD_MQ_SETUP          =  "mq_setup";
+    public static final String CMD_MQ_TEMP           =  "mq_temp";
+    public static final String CMD_MQ_GRATINGS       =  "mq_Gratings";
+    public static final String CMD_MQ_UPGRADE        =  "mq_upgrade";
+    public static final String CMD_MQ_VERSION        =  "mq_getVersion";
+    public static final String CMD_MQ_REBOOT         =  "mq_reboot";
+    public static final String CMD_MQ_SHUTDOWN       =  "mq_shutdown";
+    public static final String CMD_MQ_REAL_WEIGHT    =  "mq_getRealWeight";
+    public static final String CMD_MQ_CALIBRATION    =  "mq_calibration";
+    public static final String CMD_MQ_SET_ZERO       =  "mq_adjustZero";
+    public static final String CMD_MQ_SET_THRESHOLD  =  "mq_setThreshold";
+    public static final String CMD_MQ_ADJUST_EVENT   =  "mq_adjust_zero";
+    public static final String CMD_MQ_SENSOR_EVENT   =  "mq_sensor_event";
+    public static final String CMD_MQ_STATUS         =  "mq_status";
+    public static final String CMD_MQ_ALERTS         =  "mq_alerts";
+    public static final String CMD_MQ_CLOSE          =  "mq_close";
+
+    public static final String MQ_ACK          =  "mq_ack";
+
+}

+ 30 - 0
app/src/main/java/com/ifastore/maintain/models/AlertsBean.java

@@ -0,0 +1,30 @@
+package com.ifastore.maintain.models;
+
+public class AlertsBean {
+
+    /**
+     * {"alerttype": 0, "reason": "xxxx"}
+     *
+     * alerttype : 0
+     * reason : xxxx
+     */
+
+    private int alerttype;
+    private String reason;
+
+    public int getAlerttype() {
+        return alerttype;
+    }
+
+    public void setAlerttype(int alerttype) {
+        this.alerttype = alerttype;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+}

+ 193 - 0
app/src/main/java/com/ifastore/maintain/models/CloseBean.java

@@ -0,0 +1,193 @@
+package com.ifastore.maintain.models;
+
+import java.util.List;
+
+public class CloseBean {
+    /**
+     *
+     *    * {"userid": "123", "evtdatas": [{"bindcode":"1-1", "weight": 12.00}],"eventdatas":  [{"bindcode":"1-1", "weight": 12.00, "timestamp": 159324234}],"remaindatas": [{"bindcode":"1-1", "weight": 12.00}], "extradata": {"optype":"open", "uuid": "11122222222"}}
+     *
+     * userid : 123
+     * evtdatas : [{"bindcode":"1-1","weight":12}]
+     * eventdatas : [{"bindcode":"1-1","weight":12,"timestamp":159324234}]
+     * remaindatas : [{"bindcode":"1-1","weight":12}]
+     * extradata : {"optype":"open","uuid":"11122222222"}
+     */
+
+    private String userid;
+    private ExtradataBean extradata;
+    private List<EvtdatasBean> evtdatas;
+    private List<EventdatasBean> eventdatas;
+    private List<RemaindatasBean> remaindatas;
+
+    public String getUserid() {
+        return userid;
+    }
+
+    public void setUserid(String userid) {
+        this.userid = userid;
+    }
+
+    public ExtradataBean getExtradata() {
+        return extradata;
+    }
+
+    public void setExtradata(ExtradataBean extradata) {
+        this.extradata = extradata;
+    }
+
+    public List<EvtdatasBean> getEvtdatas() {
+        return evtdatas;
+    }
+
+    public void setEvtdatas(List<EvtdatasBean> evtdatas) {
+        this.evtdatas = evtdatas;
+    }
+
+    public List<EventdatasBean> getEventdatas() {
+        return eventdatas;
+    }
+
+    public void setEventdatas(List<EventdatasBean> eventdatas) {
+        this.eventdatas = eventdatas;
+    }
+
+    public List<RemaindatasBean> getRemaindatas() {
+        return remaindatas;
+    }
+
+    public void setRemaindatas(List<RemaindatasBean> remaindatas) {
+        this.remaindatas = remaindatas;
+    }
+
+    public static class ExtradataBean {
+        /**
+         * optype : open
+         * uuid : 11122222222
+         */
+
+        private String optype;
+        private String uuid;
+
+        public String getOptype() {
+            return optype;
+        }
+
+        public void setOptype(String optype) {
+            this.optype = optype;
+        }
+
+        public String getUuid() {
+            return uuid;
+        }
+
+        public void setUuid(String uuid) {
+            this.uuid = uuid;
+        }
+    }
+
+    public static class EvtdatasBean {
+        /**
+         * bindcode : 1-1
+         * weight : 12.0
+         */
+
+        public EvtdatasBean(){
+            bindcode = "0";
+        }
+
+        private String bindcode;
+        private float weight;
+
+        public String getBindcode() {
+            return bindcode;
+        }
+
+        public void setBindcode(String bindcode) {
+            this.bindcode = bindcode;
+        }
+
+        public float getWeight() {
+            return weight;
+        }
+
+        public void setWeight(float weight) {
+            this.weight = weight;
+        }
+    }
+
+    public static class EventdatasBean {
+        /**
+         * bindcode : 1-1
+         * weight : 12.0
+         * timestamp : 159324234
+         */
+
+        private String bindcode;
+        private float weight;
+        private Long timestamp;
+
+        public EventdatasBean(){
+            bindcode = "0";
+            timestamp = 0L;
+            weight = 0f;
+        }
+
+        public String getBindcode() {
+            return bindcode;
+        }
+
+        public void setBindcode(String bindcode) {
+            this.bindcode = bindcode;
+        }
+
+        public float getWeight() {
+            return weight;
+        }
+
+        public void setWeight(float weight) {
+            this.weight = weight;
+        }
+
+        public Long getTimestamp() {
+            return timestamp;
+        }
+
+        public void setTimestamp(Long timestamp) {
+            this.timestamp = timestamp;
+        }
+    }
+
+    public static class RemaindatasBean {
+        /**
+         * bindcode : 1-1
+         * weight : 12.0
+         */
+
+        private String bindcode;
+        private float weight;
+
+        public RemaindatasBean(){
+            bindcode = "0";
+        }
+
+        public String getBindcode() {
+            return bindcode;
+        }
+
+        public void setBindcode(String bindcode) {
+            this.bindcode = bindcode;
+        }
+
+        public float getWeight() {
+            return weight;
+        }
+
+        public void setWeight(float weight) {
+            this.weight = weight;
+        }
+    }
+
+
+
+}

+ 40 - 0
app/src/main/java/com/ifastore/maintain/models/GoodsDetail.java

@@ -0,0 +1,40 @@
+package com.ifastore.maintain.models;
+
+
+public class GoodsDetail {
+
+    private String tags;
+    private String goodsName;
+    private String goodsDescribe;
+    public GoodsDetail(String goodsName, String specification, String goodsNum){
+        this.goodsName = goodsName;
+        this.tags = specification;
+        this.goodsDescribe = goodsNum;
+    }
+    public GoodsDetail(){
+    }
+
+    public String getGoodsDescribe() {
+        return goodsDescribe;
+    }
+
+    public void setGoodsDescribe(String goodsDescribe) {
+        this.goodsDescribe = goodsDescribe;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getTags() {
+        return tags;
+    }
+
+    public void setTags(String tags) {
+        this.tags = tags;
+    }
+}

+ 52 - 0
app/src/main/java/com/ifastore/maintain/models/GratingsBean.java

@@ -0,0 +1,52 @@
+package com.ifastore.maintain.models;
+
+import java.util.List;
+
+public class GratingsBean {
+    /**
+     * //{"gratings": [1,2]", "reason":"", "reply": "xxxx", "result": 0}
+     * gratings : xxxxx
+     * weight : 0
+     * reason :
+     * reply : xxxx
+     * result : 0
+     */
+
+    private List<String> gratings;
+    private String reason;
+    private String reply;
+    private byte result;
+
+    public List<String> getGratings() {
+        return gratings;
+    }
+
+    public void setGratings(List<String> gratings) {
+        this.gratings = gratings;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getReply() {
+        return reply;
+    }
+
+    public void setReply(String reply) {
+        this.reply = reply;
+    }
+
+    public byte getResult() {
+        return result;
+    }
+
+    public void setResult(byte result) {
+        this.result = result;
+    }
+
+}

+ 30 - 0
app/src/main/java/com/ifastore/maintain/models/LoginBean.java

@@ -0,0 +1,30 @@
+package com.ifastore.maintain.models;
+
+/**
+ * Created by Jen on 19-3-1.
+ */
+public class LoginBean {
+    private String usrName;
+    private String passwd;
+
+    public LoginBean(String usr, String pwd){
+        this.usrName = usr;
+        this.passwd = pwd;
+    }
+
+    public String getUsrName() {
+        return usrName;
+    }
+
+    public void setUsrName(String usrName) {
+        this.usrName = usrName;
+    }
+
+    public String getPasswd() {
+        return passwd;
+    }
+
+    public void setPasswd(String passwd) {
+        this.passwd = passwd;
+    }
+}

+ 79 - 0
app/src/main/java/com/ifastore/maintain/models/OpenBean.java

@@ -0,0 +1,79 @@
+package com.ifastore.maintain.models;
+
+public class OpenBean {
+
+
+    /**
+     * {"userid": "123", "uuid": "11111111","optype": "1","reply": "result", "result":"0","reason": "xxxxxxx"}
+     * userid : 123
+     * uuid : 11111111
+     * optype : 1
+     * reply : result
+     * result : 0
+     * reason : xxxxxxx
+     */
+
+    private String userid;
+    private String uuid;
+    private String optype;
+    private String reply;
+    private int result;
+    private String reason;
+    private String cmd;
+
+    public String getUserid() {
+        return userid;
+    }
+
+    public void setUserid(String userid) {
+        this.userid = userid;
+    }
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getOptype() {
+        return optype;
+    }
+
+    public void setOptype(String optype) {
+        this.optype = optype;
+    }
+
+    public String getReply() {
+        return reply;
+    }
+
+    public void setReply(String reply) {
+        this.reply = reply;
+    }
+
+    public int getResult() {
+        return result;
+    }
+
+    public void setResult(int result) {
+        this.result = result;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getCmd() {
+        return cmd;
+    }
+
+    public void setCmd(String cmd) {
+        this.cmd = cmd;
+    }
+}

+ 275 - 0
app/src/main/java/com/ifastore/maintain/models/PermissionBean.java

@@ -0,0 +1,275 @@
+package com.ifastore.maintain.models;
+
+import java.util.List;
+
+/**
+ * created by jen on 18-10-24.
+ */
+public class PermissionBean {
+
+    /**
+     * returnData : {"page_content":[{"id_public_middle_table":2954,"type_middle_app":400,"type_inner_app":1,"value_4_middle_table":"17号设备","key_4_middle_table":"WP18291M20000017","is_online":"0","time_update":"Oct 24, 2018 9:54:32 AM","time_insert":"Oct 12, 2018 4:49:32 PM","id_public_user_info":0,"id_public_agent_info":300235,"id_public_data_admin_user":804,"mid_table_remark_001":"硬件团队","mid_table_remark_002":"O型","mid_table_remark_003":"小任","mid_table_remark_004":"56L","mid_table_remark_005":"999","mid_table_remark_006":"18101978888","nike_name":"瞬得自运营","agent_name":"17号设备"},{"id_public_middle_table":2443,"type_middle_app":400,"type_inner_app":1,"value_4_middle_table":"shupai_001","key_4_middle_table":"WP18291M20000009","is_online":"0","time_update":"Oct 23, 2018 5:04:32 PM","time_insert":"Sep 1, 2018 9:14:31 AM","id_public_user_info":0,"id_public_agent_info":300207,"id_public_data_admin_user":804,"mid_table_remark_001":"竖排玫瑰园","mid_table_remark_002":"瞬得I代","mid_table_remark_003":"Gerry","mid_table_remark_004":"200L","mid_table_remark_005":"20","mid_table_remark_006":"13203308118","nike_name":"瞬得自运营","agent_name":"竖排测试机"}],"result_num":2}
+     * status : 0
+     * opt_state : -1
+     * server_time_current : 1540346939667
+     */
+
+    private ReturnDataBean returnData;
+    private int status;
+    private int opt_state;
+    private String server_time_current;
+
+    public ReturnDataBean getReturnData() {
+        return returnData;
+    }
+
+    public void setReturnData(ReturnDataBean returnData) {
+        this.returnData = returnData;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public int getOpt_state() {
+        return opt_state;
+    }
+
+    public void setOpt_state(int opt_state) {
+        this.opt_state = opt_state;
+    }
+
+    public String getServer_time_current() {
+        return server_time_current;
+    }
+
+    public void setServer_time_current(String server_time_current) {
+        this.server_time_current = server_time_current;
+    }
+
+    public static class ReturnDataBean {
+        /**
+         * page_content : [{"id_public_middle_table":2954,"type_middle_app":400,"type_inner_app":1,"value_4_middle_table":"17号设备","key_4_middle_table":"WP18291M20000017","is_online":"0","time_update":"Oct 24, 2018 9:54:32 AM","time_insert":"Oct 12, 2018 4:49:32 PM","id_public_user_info":0,"id_public_agent_info":300235,"id_public_data_admin_user":804,"mid_table_remark_001":"硬件团队","mid_table_remark_002":"O型","mid_table_remark_003":"小任","mid_table_remark_004":"56L","mid_table_remark_005":"999","mid_table_remark_006":"18101978888","nike_name":"瞬得自运营","agent_name":"17号设备"},{"id_public_middle_table":2443,"type_middle_app":400,"type_inner_app":1,"value_4_middle_table":"shupai_001","key_4_middle_table":"WP18291M20000009","is_online":"0","time_update":"Oct 23, 2018 5:04:32 PM","time_insert":"Sep 1, 2018 9:14:31 AM","id_public_user_info":0,"id_public_agent_info":300207,"id_public_data_admin_user":804,"mid_table_remark_001":"竖排玫瑰园","mid_table_remark_002":"瞬得I代","mid_table_remark_003":"Gerry","mid_table_remark_004":"200L","mid_table_remark_005":"20","mid_table_remark_006":"13203308118","nike_name":"瞬得自运营","agent_name":"竖排测试机"}]
+         * result_num : 2
+         */
+
+        private int result_num;
+        private List<PageContentBean> page_content;
+
+        public int getResult_num() {
+            return result_num;
+        }
+
+        public void setResult_num(int result_num) {
+            this.result_num = result_num;
+        }
+
+        public List<PageContentBean> getPage_content() {
+            return page_content;
+        }
+
+        public void setPage_content(List<PageContentBean> page_content) {
+            this.page_content = page_content;
+        }
+
+        public static class PageContentBean {
+            /**
+             * id_public_middle_table : 2954
+             * type_middle_app : 400
+             * type_inner_app : 1
+             * value_4_middle_table : 17号设备
+             * key_4_middle_table : WP18291M20000017
+             * is_online : 0
+             * time_update : Oct 24, 2018 9:54:32 AM
+             * time_insert : Oct 12, 2018 4:49:32 PM
+             * id_public_user_info : 0
+             * id_public_agent_info : 300235
+             * id_public_data_admin_user : 804
+             * mid_table_remark_001 : 硬件团队
+             * mid_table_remark_002 : O型
+             * mid_table_remark_003 : 小任
+             * mid_table_remark_004 : 56L
+             * mid_table_remark_005 : 999
+             * mid_table_remark_006 : 18101978888
+             * nike_name : 瞬得自运营
+             * agent_name : 17号设备
+             */
+
+            private int id_public_middle_table;
+            private int type_middle_app;
+            private int type_inner_app;
+            private String value_4_middle_table;
+            private String key_4_middle_table;
+            private String is_online;
+            private String time_update;
+            private String time_insert;
+            private int id_public_user_info;
+            private int id_public_agent_info;
+            private int id_public_data_admin_user;
+            private String mid_table_remark_001;
+            private String mid_table_remark_002;
+            private String mid_table_remark_003;
+            private String mid_table_remark_004;
+            private String mid_table_remark_005;
+            private String mid_table_remark_006;
+            private String nike_name;
+            private String agent_name;
+
+            public int getId_public_middle_table() {
+                return id_public_middle_table;
+            }
+
+            public void setId_public_middle_table(int id_public_middle_table) {
+                this.id_public_middle_table = id_public_middle_table;
+            }
+
+            public int getType_middle_app() {
+                return type_middle_app;
+            }
+
+            public void setType_middle_app(int type_middle_app) {
+                this.type_middle_app = type_middle_app;
+            }
+
+            public int getType_inner_app() {
+                return type_inner_app;
+            }
+
+            public void setType_inner_app(int type_inner_app) {
+                this.type_inner_app = type_inner_app;
+            }
+
+            public String getValue_4_middle_table() {
+                return value_4_middle_table;
+            }
+
+            public void setValue_4_middle_table(String value_4_middle_table) {
+                this.value_4_middle_table = value_4_middle_table;
+            }
+
+            public String getKey_4_middle_table() {
+                return key_4_middle_table;
+            }
+
+            public void setKey_4_middle_table(String key_4_middle_table) {
+                this.key_4_middle_table = key_4_middle_table;
+            }
+
+            public String getIs_online() {
+                return is_online;
+            }
+
+            public void setIs_online(String is_online) {
+                this.is_online = is_online;
+            }
+
+            public String getTime_update() {
+                return time_update;
+            }
+
+            public void setTime_update(String time_update) {
+                this.time_update = time_update;
+            }
+
+            public String getTime_insert() {
+                return time_insert;
+            }
+
+            public void setTime_insert(String time_insert) {
+                this.time_insert = time_insert;
+            }
+
+            public int getId_public_user_info() {
+                return id_public_user_info;
+            }
+
+            public void setId_public_user_info(int id_public_user_info) {
+                this.id_public_user_info = id_public_user_info;
+            }
+
+            public int getId_public_agent_info() {
+                return id_public_agent_info;
+            }
+
+            public void setId_public_agent_info(int id_public_agent_info) {
+                this.id_public_agent_info = id_public_agent_info;
+            }
+
+            public int getId_public_data_admin_user() {
+                return id_public_data_admin_user;
+            }
+
+            public void setId_public_data_admin_user(int id_public_data_admin_user) {
+                this.id_public_data_admin_user = id_public_data_admin_user;
+            }
+
+            public String getMid_table_remark_001() {
+                return mid_table_remark_001;
+            }
+
+            public void setMid_table_remark_001(String mid_table_remark_001) {
+                this.mid_table_remark_001 = mid_table_remark_001;
+            }
+
+            public String getMid_table_remark_002() {
+                return mid_table_remark_002;
+            }
+
+            public void setMid_table_remark_002(String mid_table_remark_002) {
+                this.mid_table_remark_002 = mid_table_remark_002;
+            }
+
+            public String getMid_table_remark_003() {
+                return mid_table_remark_003;
+            }
+
+            public void setMid_table_remark_003(String mid_table_remark_003) {
+                this.mid_table_remark_003 = mid_table_remark_003;
+            }
+
+            public String getMid_table_remark_004() {
+                return mid_table_remark_004;
+            }
+
+            public void setMid_table_remark_004(String mid_table_remark_004) {
+                this.mid_table_remark_004 = mid_table_remark_004;
+            }
+
+            public String getMid_table_remark_005() {
+                return mid_table_remark_005;
+            }
+
+            public void setMid_table_remark_005(String mid_table_remark_005) {
+                this.mid_table_remark_005 = mid_table_remark_005;
+            }
+
+            public String getMid_table_remark_006() {
+                return mid_table_remark_006;
+            }
+
+            public void setMid_table_remark_006(String mid_table_remark_006) {
+                this.mid_table_remark_006 = mid_table_remark_006;
+            }
+
+            public String getNike_name() {
+                return nike_name;
+            }
+
+            public void setNike_name(String nike_name) {
+                this.nike_name = nike_name;
+            }
+
+            public String getAgent_name() {
+                return agent_name;
+            }
+
+            public void setAgent_name(String agent_name) {
+                this.agent_name = agent_name;
+            }
+        }
+    }
+}

+ 51 - 0
app/src/main/java/com/ifastore/maintain/models/PowerBean.java

@@ -0,0 +1,51 @@
+package com.ifastore.maintain.models;
+
+public class PowerBean {
+
+    /**
+     *
+     * {"reqtime": 0, "reply": "xxxx","result":0, "reason": "xxxx"}
+     *
+     * reqtime : 0
+     * reply : xxxx
+     * result : 0
+     * reason : xxxx
+     */
+
+    private Long reqtime;
+    private String reply;
+    private int result;
+    private String reason;
+
+    public Long getReqtime() {
+        return reqtime;
+    }
+
+    public void setReqtime(Long reqtime) {
+        this.reqtime = reqtime;
+    }
+
+    public String getReply() {
+        return reply;
+    }
+
+    public void setReply(String reply) {
+        this.reply = reply;
+    }
+
+    public int getResult() {
+        return result;
+    }
+
+    public void setResult(int result) {
+        this.result = result;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+}

+ 27 - 0
app/src/main/java/com/ifastore/maintain/models/Reqmsg.java

@@ -0,0 +1,27 @@
+package com.ifastore.maintain.models;
+
+public class Reqmsg {
+    private String cmd;
+    private Object mesg;
+
+    public Reqmsg(String cmd, Object o){
+        this.cmd = cmd;
+        this.mesg = o;
+    }
+
+    public Object getMesg() {
+        return mesg;
+    }
+
+    public void setMesg(Object mesg) {
+        this.mesg = mesg;
+    }
+
+    public String getCmd() {
+        return cmd;
+    }
+
+    public void setCmd(String cmd) {
+        this.cmd = cmd;
+    }
+}

+ 37 - 0
app/src/main/java/com/ifastore/maintain/models/ResultInfo.java

@@ -0,0 +1,37 @@
+package com.ifastore.maintain.models;
+
+public class ResultInfo {
+
+    /**
+     * code : 300
+     * data : 账号或密码错误
+     */
+
+    private int code;
+    private String data;
+    private String msg;
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 60 - 0
app/src/main/java/com/ifastore/maintain/models/StatusBean.java

@@ -0,0 +1,60 @@
+package com.ifastore.maintain.models;
+
+public class StatusBean {
+
+    /**
+     * {"network": "123", "time": "2020-08-09 12:22:09","temp": "23.3","softver": "123213", "hardver":"20200101"}
+     *
+     * network : 123
+     * time : 2020-08-09 12:22:09
+     * temp : 23.3
+     * softver : 123213
+     * hardver : 20200101
+     */
+
+    private String network;
+    private String time;
+    private String temp;
+    private String softver;
+    private String hardver;
+
+    public String getNetwork() {
+        return network;
+    }
+
+    public void setNetwork(String network) {
+        this.network = network;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getTemp() {
+        return temp;
+    }
+
+    public void setTemp(String temp) {
+        this.temp = temp;
+    }
+
+    public String getSoftver() {
+        return softver;
+    }
+
+    public void setSoftver(String softver) {
+        this.softver = softver;
+    }
+
+    public String getHardver() {
+        return hardver;
+    }
+
+    public void setHardver(String hardver) {
+        this.hardver = hardver;
+    }
+}

+ 83 - 0
app/src/main/java/com/ifastore/maintain/models/TallyBean.java

@@ -0,0 +1,83 @@
+package com.ifastore.maintain.models;
+
+import java.util.List;
+
+public class TallyBean {
+    /**
+     *
+     * {"uuid": "122222222222", "flag": "test","reply":  "fail","remaindatas": [{"bindcode":"1-1", "weight": 12.00}]}
+     *
+     * uuid : 122222222222
+     * flag : test
+     * reply : fail
+     * remaindatas : [{"bindcode":"1-1","weight":12}]
+     */
+
+    private String uuid;
+    private String flag;
+    private String reply;
+    private List<RemaindatasBean> remaindatas;
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getFlag() {
+        return flag;
+    }
+
+    public void setFlag(String flag) {
+        this.flag = flag;
+    }
+
+    public String getReply() {
+        return reply;
+    }
+
+    public void setReply(String reply) {
+        this.reply = reply;
+    }
+
+    public List<RemaindatasBean> getRemaindatas() {
+        return remaindatas;
+    }
+
+    public void setRemaindatas(List<RemaindatasBean> remaindatas) {
+        this.remaindatas = remaindatas;
+    }
+
+    public static class RemaindatasBean {
+        /**
+         * bindcode : 1-1
+         * weight : 12.0
+         */
+
+        public RemaindatasBean(){
+            bindcode = "0";
+        }
+
+        private String bindcode;
+        private float weight;
+
+        public String getBindcode() {
+            return bindcode;
+        }
+
+        public void setBindcode(String bindcode) {
+            this.bindcode = bindcode;
+        }
+
+        public float getWeight() {
+            return weight;
+        }
+
+        public void setWeight(float weight) {
+            this.weight = weight;
+        }
+    }
+
+}

+ 28 - 0
app/src/main/java/com/ifastore/maintain/models/TempBean.java

@@ -0,0 +1,28 @@
+package com.ifastore.maintain.models;
+
+public class TempBean {
+
+    /**
+     * {"temp": 0, "time": "xxxx"}
+     */
+
+    private float temp;
+    private long time;
+
+
+    public float getTemp() {
+        return temp;
+    }
+
+    public void setTemp(float temp) {
+        this.temp = temp;
+    }
+
+    public long getTime() {
+        return time;
+    }
+
+    public void setTime(long time) {
+        this.time = time;
+    }
+}

+ 59 - 0
app/src/main/java/com/ifastore/maintain/models/WeightSensorBean.java

@@ -0,0 +1,59 @@
+package com.ifastore.maintain.models;
+
+public class WeightSensorBean {
+    /**
+     * gratings : xxxxx
+     * weight : 0
+     * reason :
+     * reply : xxxx
+     * result : 0
+     */
+
+    private String gratings;
+    private String reason;
+    private String reply;
+    private float weight;
+    private byte result;
+
+    public String getGratings() {
+        return gratings;
+    }
+
+    public void setGratings(String gratings) {
+        this.gratings = gratings;
+    }
+
+    public float getWeight() {
+        return weight;
+    }
+
+    public void setWeight(float weight) {
+        this.weight = weight;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getReply() {
+        return reply;
+    }
+
+    public void setReply(String reply) {
+        this.reply = reply;
+    }
+
+    public byte getResult() {
+        return result;
+    }
+
+    public void setResult(byte result) {
+        this.result = result;
+    }
+    //{"gratings": "xxxxx", "weight": 0,"reason":"", "reply": "xxxx", "result": 0}
+
+}

+ 91 - 0
app/src/main/java/com/ifastore/maintain/repository/Repository.java

@@ -0,0 +1,91 @@
+package com.ifastore.maintain.repository;
+
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.google.gson.Gson;
+import com.ifastore.maintain.models.LoginBean;
+import com.ifastore.maintain.repository.remote.http.NetworkClient;
+import com.ifastore.maintain.utils.Logger;
+
+import java.io.IOException;
+
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+import okhttp3.ResponseBody;
+
+/**
+ * Created by Jen on 19-3-1.
+ */
+public class Repository {
+    private NetworkClient networkClient;
+
+    public Repository(){
+        this.networkClient = NetworkClient.getNetWorkInstance();
+    }
+
+    public void Login(Observer<ResponseBody> observer, LoginBean bean){
+        networkClient.login(observer, bean);
+    }
+    public void queryGoodsInfo(){
+        networkClient.queryAllGoodsInfo(new Observer<ResponseBody>() {
+            @Override
+            public void onSubscribe(Disposable d) {
+
+            }
+
+            @Override
+            public void onNext(ResponseBody responseBody) {
+                //todo
+                String result = null;
+                try {
+                    result = responseBody.string();
+                    Gson g = new Gson();
+                    //GoodsInfo goodsInfo = g.fromJson(result, GoodsInfo.class);
+                    //listener.goodsInfo(goodsInfo);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+
+            }
+
+            @Override
+            public void onComplete() {
+
+            }
+        });
+    }
+
+    public void bindGoodsInfo(Observer<ResponseBody> observer, String gInfo){
+        networkClient.bindGoodsInfo(observer, gInfo);
+    }
+
+    public void bindShop(Observer<ResponseBody> observer, String json){
+        networkClient.bindShop(observer, json);
+    }
+
+    public void sellGoods(Observer<ResponseBody> observer, String json){
+        networkClient.sellGoods(observer, json);
+    }
+
+    public void selectGoodsByRfids(Observer<ResponseBody> observer, String json){
+        networkClient.selectGoodsByRfids(observer, json);
+    }
+
+    public void updateShop(Observer<ResponseBody> observer, String json){
+        networkClient.updateShop(observer, json);
+    }
+
+    public void getAllShop(Observer<ResponseBody> observer){
+        networkClient.getAllShop(observer);
+    }
+
+    public void uploadGoodsInfo(Observer<ResponseBody> observer, String sn, String msg, String json){
+        Logger.debug("json:"+json);
+        networkClient.selectGoodsByRfids(observer, json);
+    }
+}

+ 32 - 0
app/src/main/java/com/ifastore/maintain/repository/local/db/AppDatabase.java

@@ -0,0 +1,32 @@
+package com.ifastore.maintain.repository.local.db;
+
+import android.content.Context;
+
+import androidx.room.Database;
+import androidx.room.Room;
+import androidx.room.RoomDatabase;
+
+import com.ifastore.maintain.repository.local.db.goodsinfo.GoodsDao;
+import com.ifastore.maintain.repository.local.db.goodsinfo.GoodsBean;
+
+
+/**
+ * Created by Jen on 19-3-4.
+ */
+@Database(entities = {GoodsBean.class}, version = 4, exportSchema = false)
+public abstract class AppDatabase extends RoomDatabase {
+    private static String db = "uhf";
+    private static AppDatabase INSTANCE;
+    private static final Object sLock = new Object();
+    public abstract GoodsDao goodsDao();
+
+    public static AppDatabase getInstance(Context context) {
+        synchronized (sLock) {
+            if (INSTANCE == null)
+                INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, db)
+                        .allowMainThreadQueries()
+                        .build();
+            return INSTANCE;
+        }
+    }
+}

+ 75 - 0
app/src/main/java/com/ifastore/maintain/repository/local/db/goodsinfo/GoodsBean.java

@@ -0,0 +1,75 @@
+package com.ifastore.maintain.repository.local.db.goodsinfo;
+
+
+import androidx.room.ColumnInfo;
+import androidx.room.Entity;
+import androidx.room.Index;
+import androidx.room.PrimaryKey;
+
+/**
+ *
+ * type : 饮品类
+ * subType : 碳酸饮料
+ * goodsName : 可乐
+ * describe : 500ml
+ * id_public_goods_info : 640
+ * code_public_goods_info : 123123123123
+ *
+ */
+
+@Entity(tableName = "goodsInfo", indices = {@Index(value = {"goodsId"},
+        unique = true)})
+public class GoodsBean {
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "goodsId")
+    private int goodsId;
+    @ColumnInfo(name = "category")
+    private String category;
+    @ColumnInfo(name = "goodsName")
+    private String goodsName;
+    @ColumnInfo(name = "describe")
+    private String describe;
+    @ColumnInfo(name = "goodsCode")
+    private String goodsCode;
+
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getDescribe() {
+        return describe;
+    }
+
+    public void setDescribe(String describe) {
+        this.describe = describe;
+    }
+
+    public int getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(int goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getGoodsCode() {
+        return goodsCode;
+    }
+
+    public void setGoodsCode(String goodsCode) {
+        this.goodsCode = goodsCode;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+}

+ 34 - 0
app/src/main/java/com/ifastore/maintain/repository/local/db/goodsinfo/GoodsDao.java

@@ -0,0 +1,34 @@
+package com.ifastore.maintain.repository.local.db.goodsinfo;
+
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import java.util.List;
+
+@Dao
+public interface GoodsDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    public void insertBean(GoodsBean... beans);
+
+    @Delete
+    public void deleteOneRecord(GoodsBean beans);
+
+    @Query("DELETE FROM goodsInfo;")
+    public void deleteAll();
+
+    @Update
+    public void updateBean(GoodsBean beans);
+
+    @Query("SELECT * FROM goodsInfo;")
+    public List<GoodsBean> queryAll();
+
+    //query goodsid
+    @Query("SELECT * FROM goodsInfo WHERE goodsCode =:goodsCode")
+    public GoodsBean queryGoodsInfo(String goodsCode);
+
+}

+ 28 - 0
app/src/main/java/com/ifastore/maintain/repository/local/sharedpreferences/SharedpreferenceManager.java

@@ -0,0 +1,28 @@
+package com.ifastore.maintain.repository.local.sharedpreferences;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import static android.content.Context.MODE_PRIVATE;
+
+/**
+ * Created by Jen on 19-3-4.
+ */
+public class SharedpreferenceManager {
+    private SharedPreferences sharedPreferences;
+    private final String fileName = "login.ini";
+    private final String KEY_LOGIN_NAME = "usrName";
+    private final String KEY_PWD = "passwd";
+
+    public SharedpreferenceManager(Context context){
+        sharedPreferences = context.getSharedPreferences(fileName, MODE_PRIVATE);
+    }
+
+    private void saveUserInfo(String name, String pwd){
+        SharedPreferences.Editor editor = sharedPreferences.edit();
+        editor.putString(KEY_LOGIN_NAME, name);
+        editor.putString(KEY_PWD, pwd);
+        //提交当前数据
+        editor.apply();
+    }
+}

+ 86 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/http/ApiServer.java

@@ -0,0 +1,86 @@
+package com.ifastore.maintain.repository.remote.http;
+
+import io.reactivex.Observable;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.Query;
+
+import static com.ifastore.maintain.repository.remote.http.Constants.BindShop;
+import static com.ifastore.maintain.repository.remote.http.Constants.LoginUrl;
+import static com.ifastore.maintain.repository.remote.http.Constants.QueryGoodsInfo;
+import static com.ifastore.maintain.repository.remote.http.Constants.BindGoodsInfo;
+import static com.ifastore.maintain.repository.remote.http.Constants.SelectGoodsByRfids;
+import static com.ifastore.maintain.repository.remote.http.Constants.Sell;
+import static com.ifastore.maintain.repository.remote.http.Constants.UpdateShop;
+import static com.ifastore.maintain.repository.remote.http.Constants.GetAllShop;
+
+/**
+ * Created by Jen on 19-3-1.
+ */
+public interface ApiServer {
+    /**
+     * GET
+     * 登录
+     * @param userName
+     * @param pwd
+     * @return
+     */
+    @GET(LoginUrl)
+    Observable<ResponseBody> login(@Query("username") String userName, @Query("password") String pwd);
+
+    /**
+     * GET
+     * 查询商品信息
+     * @return
+     */
+    @GET(QueryGoodsInfo)
+    Observable<ResponseBody> queryAllGoodsInfo();
+
+    /**
+     * GET
+     * 获取奶茶列表
+     */
+    @POST(BindGoodsInfo)
+    Observable<ResponseBody> bindGoods(@Body RequestBody requestBody);
+
+    /**
+     * GET
+     * Bind Shop
+     */
+    @POST(BindShop)
+    Observable<ResponseBody> bindShop(@Body RequestBody body);
+
+    /**
+     * GET
+     * Bind Shop
+     */
+    @POST(SelectGoodsByRfids)
+    Observable<ResponseBody> selectGoodsByRfids(@Body RequestBody body);
+
+    /**
+     * GET
+     * update Shop
+     */
+    @POST(UpdateShop)
+    Observable<ResponseBody> updateShop(@Body RequestBody body);
+
+    /**
+     * GET
+     * Get All Shop
+     */
+    @GET(GetAllShop)
+    Observable<ResponseBody> getAllShop();
+
+    /**
+     * GET
+     * get current dev all goods list
+     */
+    @POST(Sell)
+    Observable<ResponseBody> sell(@Body RequestBody body);
+
+
+
+}

+ 73 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/http/Constants.java

@@ -0,0 +1,73 @@
+package com.ifastore.maintain.repository.remote.http;
+
+/**
+ * Created by Jen on 19-2-28.
+ */
+class Constants {
+    //public static final String BaseUrl = "http://www.ifastore.com.cn/";
+    public static final String BaseUrl = "http://47.101.59.32:9999/app/";
+    //public static final String BaseUrl = "https://app10.downline.cn/wholefarm_demo_project_001/";
+    /*
+    *
+    * 接口一: 登录, 注意登录的时候,需要带Jsession ID
+        https://app10.downline.cn/wholefarm_demo_project_001/mgr_public_data_admin_user?invoke_method=public_page_4m_login_data_admin&account_user=shupai_admin&password_user=jlt110&type_4_api_command=1
+        参数:
+        account_user 账号
+        password_user: 密码
+        返回值:
+        可以直接查看
+    *
+    * */
+    //public static final String LoginUrl = "mgr_public_data_admin_user?invoke_method=public_page_4m_login_data_admin&type_4_api_command=1";
+    public static final String LoginUrl = "login";
+
+    /*
+     *
+     * 接口二: 通过商品名称查询接口
+     * https://app10.downline.cn/wholefarm_demo_project_001/mgr_public_goods_info?invoke_method=public_page_4m_load_goods_list&goods_name=雪碧&filter_type=1&begin_idx=0&length_4_list=100&type_4_api_command=2
+     * 参数:
+     * goods_name=名称
+     * */
+
+    public static final String QueryGoodsInfo = "getAllGoodsInfo";
+
+    /*
+    *接口3. 选择录入商品的信息
+    *https://app10.downline.cn/wholefarm_demo_project_001/icebox/event?invoke_method=reflect_goods_data_batch_big_data
+    * 正确返回:
+    * {"status":0,"opt_state":-1, "msg":"重复录入的ID号"}
+    * 错误返回:
+    * {"status":999001,"msg":"重复录入的ID号"}
+    * POST数据:
+    * 发送数据的部分
+    [{
+    id_public_goods_info:'503',
+    code_public_goods_info:'',
+    id_goods_rfids:'A10019991,A10029992',
+    time_start:"2018-07-31 16:34:39"
+    },
+    {
+    id_public_goods_info:'612',
+    code_public_goods_info:'',
+    id_goods_rfids:'A10019993,A10029994',
+    time_start:"2018-07-31 16:34:39"
+    }]
+    * {"id_public_goods_info":"1070",
+    * "code_public_goods_info":"DLNGc8",
+    * "id_goods_rfids":"E00401509DC085A1,E00401509DC08207,E00401509DC080CF",
+    * "time_start":"2020-08-04 15:26:58"}
+    *
+    * */
+    public static final String BindGoodsInfo = "addRFID";
+
+
+    public static final String SelectGoodsByRfids = "selectGoodsByRfids";
+
+    public static final String BindShop = "toShop";
+
+    public static final String UpdateShop = "updateShop";
+
+    public static final String GetAllShop = "getAllShop";
+
+    public static final String Sell = "sell";
+}

+ 188 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/http/NetworkClient.java

@@ -0,0 +1,188 @@
+package com.ifastore.maintain.repository.remote.http;
+
+import android.util.Log;
+
+import com.ifastore.maintain.models.LoginBean;
+import com.ifastore.maintain.utils.Logger;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.Cookie;
+import okhttp3.CookieJar;
+import okhttp3.FormBody;
+import okhttp3.HttpUrl;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.CallAdapter;
+import retrofit2.Converter;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+import static com.ifastore.maintain.repository.remote.http.Constants.BaseUrl;
+
+
+/**
+ * Created by Jen on 19-2-28.
+ */
+public class NetworkClient {
+    private static NetworkClient networkClient;
+    private static Retrofit retrofit;
+    private static OkHttpClient httpClient;
+    private static HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
+    private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
+    private static CallAdapter.Factory rxJavaCallAdapterFactory = RxJava2CallAdapterFactory.create();
+    private static HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
+    private static ApiServer apiServer;
+    private NetworkClient(){
+        if(retrofit==null){
+            retrofit = new Retrofit.Builder()
+                    .baseUrl(BaseUrl)
+                    .client(getHttpClientInstance())
+                    .addConverterFactory(gsonConverterFactory)
+                    .addCallAdapterFactory(rxJavaCallAdapterFactory)
+                    .build();
+            apiServer = retrofit.create(ApiServer.class); //实例化 url接口
+        }
+    }
+
+
+    public static NetworkClient getNetWorkInstance(){
+        if(networkClient==null){
+            networkClient = new NetworkClient();
+
+        }
+        return networkClient;
+    }
+
+    private static OkHttpClient getHttpClientInstance(){
+        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+        if(httpClient==null){
+            httpClient = new OkHttpClient.Builder()
+                    .addInterceptor(loggingInterceptor)
+                    .cookieJar(new CookieJar() {
+                        /**
+                         * Saves {@code cookies} from an HTTP response to this store according to this jar's policy.
+                         * <p>
+                         * <p>Note that this method may be called a second time for a single HTTP response if the response
+                         * includes a trailer. For this obscure HTTP feature, {@code cookies} contains only the trailer's
+                         * cookies.
+                         *
+                         * @param url
+                         * @param cookies
+                         */
+                        @Override
+                        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
+                            Log.d("TEST",cookies.get(0).toString());
+                            cookieStore.put(url.host(), cookies);
+                        }
+
+                        /**
+                         * Load cookies from the jar for an HTTP request to {@code url.json}. This method returns a possibly
+                         * empty list of cookies for the network request.
+                         * <p>
+                         * <p>Simple implementations will return the accepted cookies that have not yet expired and that
+                         * {@linkplain Cookie#matches match} {@code url.json}.
+                         *
+                         * @param url
+                         */
+                        @Override
+                        public List<Cookie> loadForRequest(HttpUrl url) {
+                            List<Cookie> cookies = cookieStore.get(url.host());
+                            if(cookies != null)
+                                Log.d("TEST",cookies.toString());
+                            return cookies != null ? cookies : new ArrayList<Cookie>();
+                        }
+                    }).build();
+        }
+        return httpClient;
+    }
+    public void login(Observer<ResponseBody> observer, LoginBean bean){
+
+        apiServer.login(bean.getUsrName(), bean.getPasswd())
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe((observer));
+    }
+
+    //登录
+    public void bindShop(Observer<ResponseBody> observer, String json) {
+        RequestBody formBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
+        Logger.debug("json:"+json);
+        apiServer.bindShop(formBody)
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
+
+    //盘点库存,更新到商铺
+    public void updateShop(Observer<ResponseBody> observer, String json) {
+        RequestBody formBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
+        Logger.debug("json:"+json);
+        apiServer.updateShop(formBody)
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
+
+    //切换到当前用户设备
+    public void getAllShop(Observer<ResponseBody> observer) {
+        apiServer.getAllShop()
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
+
+    public void queryAllGoodsInfo(Observer<ResponseBody> observer){
+        apiServer.queryAllGoodsInfo()
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe((observer));
+    }
+
+    public void bindGoodsInfo(Observer<ResponseBody> observer, String json){
+        RequestBody formBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
+        Logger.debug("json:"+json);
+        apiServer.bindGoods(formBody)
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe((observer));
+    }
+
+    public void sellGoods(Observer<ResponseBody> observer, String json) {
+        RequestBody formBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
+        Logger.debug("json:"+json);
+        apiServer.sell(formBody)
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
+
+
+    public void selectGoodsByRfids(Observer<ResponseBody> observer, String json) {
+        RequestBody formBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json);
+        Logger.debug("json:"+json);
+        apiServer.selectGoodsByRfids(formBody)
+                .subscribeOn(Schedulers.io())
+                .unsubscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
+
+
+}

+ 32 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/Constants.java

@@ -0,0 +1,32 @@
+package com.ifastore.maintain.repository.remote.mqtt;
+
+
+public class Constants {
+
+    // mqtt1.redux-solutions.cn --> 167.88.163.111
+    // private final String serverUri = "tcp://167.88.163.111:1883";
+    // private final String serverUri = "tcp://47.100.230.25:1883";
+    //public static final String ServerUri  = "tcp://47.100.230.25";
+    //public static final String ServerUser = "testuser";//"testuser";//"user";
+    //public static final String ServerPwd  = "testpassword";//"testpassword";///"public";
+
+    /*public static final String ServerUri  = "tcp://106.15.235.241:1883";// mqtt server3
+    public static final String ServerUser = "reduxbroker";
+    public static final String ServerPwd  = "brokersecret";*/
+
+    //public static final String ServerName = "wb50";  //test
+    //public static final String ServerName = "wb100";   //product
+    public static final String DeviceType = "weightbox";
+
+    //catlog type
+    public static final String CatTypeTemp    =  "temp[-flat]";
+    public static final String CatTypeDevice  =  "device[-flat]";
+    public static final String CatTypeEvent   =  "event[-flat]";
+    public static final String CatTypeMedia   =  "config[-flat]";
+    public static final String CatTypeCamera  =  "camera[-flat]";
+
+    public static final String CatTypeTagStatus  =  "tagsstatus[-flat]";
+    //control
+    public static final String CatTypeControl =  "control[-flat]";
+
+}

+ 208 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/MqttClient.java

@@ -0,0 +1,208 @@
+package com.ifastore.maintain.repository.remote.mqtt;
+
+import android.content.Context;
+
+
+import com.ifastore.maintain.utils.Logger;
+
+import org.eclipse.paho.android.service.MqttAndroidClient;
+import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions;
+import org.eclipse.paho.client.mqttv3.IMqttActionListener;
+import org.eclipse.paho.client.mqttv3.IMqttToken;
+import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+
+import java.io.File;
+
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.CatTypeDevice;
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.CatTypeEvent;
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.CatTypeMedia;
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.CatTypeControl;
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.CatTypeTagStatus;
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.CatTypeTemp;
+import static com.ifastore.maintain.repository.remote.mqtt.Constants.DeviceType;
+
+
+public class MqttClient implements IMqttActionListener{
+    private MqttAndroidClient mqttAndroidClient;
+    private MqttConnectOptions mqttConnectOptions;
+    private Context context;
+    private static String clientID = "";
+    private String ServerClient = "";
+
+
+    @Override
+    public void onSuccess(IMqttToken asyncActionToken) {
+        DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
+        disconnectedBufferOptions.setBufferEnabled(true);
+        disconnectedBufferOptions.setBufferSize(100);
+        disconnectedBufferOptions.setPersistBuffer(false);
+        disconnectedBufferOptions.setDeleteOldestMessages(false);
+        mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
+    }
+
+    @Override
+    public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+        disconnect();
+        Logger.warn("Failed to connect to server "  +" "+ exception.toString());
+        Logger.warn(exception);
+        Logger.warn(""+asyncActionToken);
+    }
+
+    private interface IStatusConnect {
+        int OFFLINE = 0;
+        int ONLINE = 1;
+        int KEEPALIVE = 2;
+        int REPORTONLINE = 3;
+    }
+
+    /*
+    *   //catlog type
+        public static final String CatTypeTemp    =  "temp";
+        public static final String CatTypeDevice  =  "device";
+        public static final String CatTypeEvent   =  "event";
+        public static final String CatTypeMedia   =  "media";
+        public static final String CatTypeCamera  =  "camera";
+        public static final String CatTypeControl =  "control";
+    * */
+    private String listenTopicTemp;
+    private String listenTopicDevice;
+    private String listenTopicEvent;
+    private String listenTopicMedia;
+    private String listenTopicCamera;
+    private String listenTopicControl;
+    private String publicTopicEvent;
+    private String publicTopicDevice;
+    private String publicTopicTemp;
+
+    //control
+    private String publicTopicControl;
+
+
+
+
+    public MqttClient(Context context, String clientId, String serverName, String userName, String password){
+        this.context = context;
+        this.clientID = clientId;
+        this.listenTopicControl=  clientID   + File.separator + DeviceType +File.separator+ "+";
+        this.publicTopicEvent  =  File.separator + DeviceType +File.separator+ CatTypeEvent+File.separator+clientID;
+        this.publicTopicControl =  File.separator + DeviceType +File.separator+ CatTypeControl;
+        Logger.debug(listenTopicControl);
+        initMqtt(serverName, userName, password);
+        connect();
+    }
+
+    private void initMqtt(String serverUrl, String userName, String passWord){
+        mqttAndroidClient = new MqttAndroidClient(context, serverUrl, clientID);
+        mqttConnectOptions = new MqttConnectOptions();
+        mqttConnectOptions.setAutomaticReconnect(false);
+        mqttConnectOptions.setConnectionTimeout(20);
+        mqttConnectOptions.setCleanSession(true);
+        mqttConnectOptions.setUserName(userName);
+        mqttConnectOptions.setPassword(passWord.toCharArray());
+    }
+
+
+
+
+
+    public void setCallback(MqttCallbackExtended callback) {
+        mqttAndroidClient.setCallback(callback);
+    }
+
+    private void connect(){
+        try {
+            if(!mqttAndroidClient.isConnected()){
+                Logger.debug("try connect mqtt server...");
+                mqttAndroidClient.connect(mqttConnectOptions, null, this);
+            }
+        } catch (MqttException ex){
+            //Logger.error(ex);
+        }
+    }
+
+
+    public void subscribeToTopic() {
+        try {
+            mqttAndroidClient.subscribe(listenTopicControl, 2 , null, new IMqttActionListener() {
+                @Override
+                public void onSuccess(IMqttToken asyncActionToken) {
+                    for(String topic: asyncActionToken.getTopics()) {
+                        Logger.debug("Subscribed! %s", topic);
+                    }
+                }
+
+                @Override
+                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
+                    for(String topic: asyncActionToken.getTopics()) {
+                        Logger.warn("Subscribed fail! %s", topic);
+                    }
+                }
+            });
+        } catch (MqttException ex) {
+           // Logger.e(ex);
+        }
+    }
+
+    public void unsubscribeToTopic() {
+        try {
+            if(mqttAndroidClient!=null){
+                mqttAndroidClient.unsubscribe(new String[]{listenTopicControl} );
+            }
+        } catch (MqttException ex) {
+            //Logger.e(ex);
+        }
+    }
+
+    public void disconnect() {
+        if(mqttAndroidClient != null){
+            try {
+                mqttAndroidClient.unregisterResources();
+                if(mqttConnectOptions!=null){
+                    mqttAndroidClient.disconnect();
+                }
+            } catch (MqttException ex) {
+               // Logger.e(ex);
+            }
+        }
+
+    }
+
+
+    private void publishMessage(String cmd, String topic, byte[] msg) {
+        Logger.debug("publish message [cmd: %s, msg size:%s byte, tpoic:%s]", cmd, msg.length, topic);
+        try {
+            MqttMessage message = new MqttMessage();
+            message.setPayload(msg);
+            if(!mqttAndroidClient.isConnected()){
+                Logger.debug( "%d messages in buffer.", mqttAndroidClient.getBufferedMessageCount());
+            }else {
+                mqttAndroidClient.publish(topic, message);
+            }
+
+        } catch (MqttException ex) {
+           // Logger.error(ex);
+        }
+    }
+
+
+    public void publishToTopicControl(String cmd, String deviceId, byte[] msg, Object reply) {
+        publishMessage(cmd, deviceId+ publicTopicControl, msg);
+    }
+
+    public void publishTopicEvent(String cmd, byte[] msg) {
+        publishMessage(cmd, publicTopicEvent, msg);
+    }
+
+    public void publishTopicTemp(String cmd, byte[] msg) {
+        publishMessage(cmd, publicTopicTemp, msg);
+    }
+
+    public void publishTopicClose(String cmd, byte[] msg) {
+        publishMessage(cmd, publicTopicDevice, msg);
+    }
+
+
+}

+ 106 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/MqttManager.java

@@ -0,0 +1,106 @@
+package com.ifastore.maintain.repository.remote.mqtt;
+
+import android.content.Context;
+
+import com.ifastore.maintain.utils.Logger;
+
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+
+
+public class MqttManager {
+
+    private MqttClient mqttClient = null;
+    private Context context;
+    private boolean mqttconnect = false;
+    private IMqttListener mqttListener;
+
+    public MqttManager(Context context, IMqttListener mqttListener) {
+        this.context = context;
+        this.mqttListener = mqttListener;
+    }
+
+    public void startMqtt(final String clientId, String serverName, String userName, String passWord) {
+        try {
+            Logger.debug("start mqtt");
+            mqttClient = new MqttClient(context, clientId, serverName, userName, passWord);
+            mqttClient.setCallback(new MqttCallbackExtended() {
+                @Override
+                public void connectComplete(boolean b, String s) {
+                    Logger.debug("client id %s connectComplete %b, %s",clientId,  b, s);
+                    if(!mqttconnect){
+                        mqttconnect = true;
+                        mqttClient.subscribeToTopic();
+                        mqttListener.onMqttOnline();
+                    }
+                }
+
+                @Override
+                public void connectionLost(Throwable throwable) {
+                    Logger.debug("connectionLost:"+throwable);
+                    if(mqttconnect){
+                        mqttconnect = false;
+                        mqttClient.disconnect();
+                        mqttListener.onMqttOffline();
+                    }
+                }
+
+                @Override
+                public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
+                    Logger.debug(">>>  mqtt recv topic  %s", topic);
+                    if (mqttMessage.getPayload() != null){
+                        mqttListener.onMqttMessage(mqttMessage.getPayload());
+                    }
+                }
+
+                @Override
+                public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
+                    Logger.debug("deliveryComplete");
+                }
+            });
+        } catch (Exception e) {
+            Logger.debug(e.getMessage());
+        }
+    }
+
+    public void releaseMqtt(){
+        if(mqttClient!=null){
+            mqttClient.disconnect();
+        }
+    }
+
+
+
+
+    synchronized public void publishControlMessage(String cmd, String devid, byte[] result, Object reply) {
+        if(mqttClient!=null) mqttClient.publishToTopicControl(cmd, devid, result, reply);
+    }
+
+
+
+    public void publishEventMessage(String cmd, byte[] status) {
+        if(mqttClient!=null) mqttClient.publishTopicEvent(cmd, status);
+    }
+
+    public void publishTempMessage(String cmd, byte[] temp) {
+        if(mqttClient!=null) mqttClient.publishTopicTemp(cmd, temp);
+    }
+
+    public void publishTagsMessage(String cmd, byte[] temp) {
+        if(mqttClient!=null) mqttClient.publishTopicClose(cmd, temp);
+    }
+
+    public boolean isMqttconnected() {
+        return mqttconnect;
+    }
+
+
+    public interface IMqttListener {
+        void onMqttOnline();
+        void onMqttOffline();
+        void onMqttMessage(byte[] message);
+    }
+
+
+}

+ 655 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/MaintainFlatHandler.java

@@ -0,0 +1,655 @@
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer;
+
+import com.google.flatbuffers.FlatBufferBuilder;
+import com.ifastore.maintain.models.AlertsBean;
+import com.ifastore.maintain.models.CloseBean;
+import com.ifastore.maintain.models.GratingsBean;
+import com.ifastore.maintain.models.OpenBean;
+import com.ifastore.maintain.models.PowerBean;
+import com.ifastore.maintain.models.Reqmsg;
+import com.ifastore.maintain.models.StatusBean;
+import com.ifastore.maintain.models.TallyBean;
+import com.ifastore.maintain.models.TempBean;
+import com.ifastore.maintain.models.WeightSensorBean;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.AdjustZero;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.AdjustZeroEvent;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Alerts;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Calibration;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Close;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Eventdata;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Evtdata;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Extradata;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Gratings;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Monitoring;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Open;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Payload;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Payloads;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Reboot;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Remaindata;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.SensorEvent;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.SetWeightThreshold;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Setup;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Shutdown;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Status;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Tally;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.TempStatus;
+import com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg.Upgrade;
+import com.ifastore.maintain.utils.ByteBufUtils;
+import com.ifastore.maintain.utils.Logger;
+
+import java.nio.ByteBuffer;
+import java.util.concurrent.BlockingQueue;
+
+import static com.ifastore.maintain.common.Contants.CMD_MQ_ADJUST_EVENT;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_CALIBRATION;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_GRATINGS;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_MONITORING;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_OPENDOOR;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_REAL_WEIGHT;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_REBOOT;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_SENSOR_EVENT;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_SETUP;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_SET_THRESHOLD;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_SET_ZERO;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_SHUTDOWN;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_TEMP;
+import static com.ifastore.maintain.common.Contants.CMD_MQ_UPGRADE;
+
+public class MaintainFlatHandler {
+    private BlockingQueue<Reqmsg> blockingQueue;
+
+    public MaintainFlatHandler(BlockingQueue<Reqmsg> blockingQueue){
+        this.blockingQueue = blockingQueue;
+    }
+
+    /**
+     * create open door buffer
+     *
+     * @param openBean
+     * @return
+     */
+
+    public byte[] createOpenDoorBuffer(OpenBean openBean){
+        byte[] byteArray;
+        FlatBufferBuilder builder = new FlatBufferBuilder(0);
+        if(openBean == null){
+            return null;
+        }
+        try {
+            int userid = builder.createString(openBean.getUserid());
+            int uuid   = builder.createString(openBean.getUuid());
+            int optype = builder.createString(openBean.getOptype());
+            int reply  = builder.createString(openBean.getReply());
+            int reason = builder.createString(openBean.getReason());
+            Open.startOpen(builder);
+            Open.addUserid(builder,  userid);
+            Open.addUuid(builder,  uuid);
+            Open.addResult(builder, (byte) openBean.getResult());
+            Open.addOptype(builder, optype);
+            Open.addReply(builder, reply);
+            Open.addReason(builder, reason);
+            int openTableOfset = Open.endOpen(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Open);
+            Payload.addType(builder, openTableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+
+            byteArray = builder.sizedByteArray();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return byteArray;
+    }
+
+
+    /**
+     * create Close buffer
+     *
+     * @param bean
+     * @return
+     */
+
+    public byte[] createCloseBuffer(CloseBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int userid = builder.createString(bean.getUserid());
+
+            int remadinSize = bean.getRemaindatas().size();
+            int[] remainOffsetArray = new int[remadinSize];
+            for(int i = 0; i < remadinSize; i ++){
+                int bindOffset = builder.createString(bean.getRemaindatas().get(i).getBindcode());
+                Remaindata.startRemaindata(builder);
+                Remaindata.addBindcode(builder, bindOffset);
+                Remaindata.addWeight(builder, bean.getRemaindatas().get(i).getWeight());
+                int remainData = Remaindata.endRemaindata(builder);
+                remainOffsetArray[i] = remainData;
+            }
+            int remainOffset = Close.createRemaindatasVector(builder, remainOffsetArray);
+            int evtSize = bean.getEvtdatas().size();
+            int evtOffset = 0;
+            if(evtSize!=0){
+                int[] evtOffsetArray = new int[evtSize];
+                for(int i = 0; i < evtSize; i ++) {
+                    int offset =  builder.createString(bean.getEvtdatas().get(i).getBindcode());
+                    Evtdata.startEvtdata(builder);
+                    Evtdata.addBindcode(builder, offset);
+                    Evtdata.addWeight(builder, bean.getEvtdatas().get(i).getWeight());
+                    evtOffsetArray[i]  = Evtdata.endEvtdata(builder);
+                }
+                evtOffset = Close.createEvtdatasVector(builder,  evtOffsetArray);
+            }
+
+            int offset = builder.createString(bean.getExtradata().getOptype());
+            int uuidOffset = builder.createString(bean.getExtradata().getUuid());
+            Extradata.startExtradata(builder);
+            Extradata.addOptype(builder, offset);
+            Extradata.addUuid(builder, uuidOffset);
+            int extraData = Extradata.endExtradata(builder);
+
+            int eventSize = bean.getEventdatas().size();
+            int eventOffset = 0;
+            // Evtdatas 不为空,eventdata 也不为空.
+            if(evtSize != 0){
+                int[] eventOffsetArray = new int[eventSize];
+                for(int i = 0; i < eventSize; i ++) {
+                    offset =  builder.createString(bean.getEventdatas().get(i).getBindcode());
+                    Eventdata.startEventdata(builder);
+                    Eventdata.addBindcode(builder, offset);
+                    Eventdata.addWeight(builder, bean.getEventdatas().get(i).getWeight());
+                    Eventdata.addTimestamp(builder, bean.getEventdatas().get(i).getTimestamp());
+                    eventOffsetArray[i] =  Eventdata.endEventdata(builder);
+                }
+                eventOffset = Close.createEventdatasVector(builder,  eventOffsetArray);
+            }
+
+            Close.startClose(builder);
+            Close.addUserid(builder,  userid);
+            Close.addEventdatas(builder,  eventOffset);
+            Close.addEvtdatas(builder, evtOffset);
+            Close.addRemaindatas(builder, remainOffset);
+            Close.addExtradata(builder, extraData);
+            int tableOfset = Close.endClose(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Close);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+    /**
+     * create status buffer
+     *
+     * @param bean
+     * @return
+     */
+    public byte[] createStatusBuffer(StatusBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int network = builder.createString(bean.getNetwork());
+            int time   = builder.createString(bean.getTime());
+            int temp = builder.createString(bean.getTemp());
+            int softver  = builder.createString(bean.getSoftver());
+            int hardver = builder.createString(bean.getHardver());
+            Status.startStatus(builder);
+            Status.addNetwork(builder,  network);
+            Status.addTemp(builder,  temp);
+            Status.addTime(builder, (byte) time);
+            Status.addSoftver(builder, softver);
+            Status.addHardver(builder, hardver);
+            int tableOfset = Status.endStatus(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Status);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     * create Tally buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createTallyBuffer(TallyBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int uuid = builder.createString(bean.getUuid());
+            int flag = builder.createString(bean.getFlag());
+            int reply = builder.createString(bean.getReply());
+            int remadinSize = bean.getRemaindatas().size();
+            int[] remainOffsetArray = new int[remadinSize];
+            for(int i = 0; i < remadinSize; i ++){
+                int bindOffset = builder.createString(bean.getRemaindatas().get(i).getBindcode());
+                Remaindata.startRemaindata(builder);
+                Remaindata.addBindcode(builder, bindOffset);
+                Remaindata.addWeight(builder, bean.getRemaindatas().get(i).getWeight());
+                int remainData = Remaindata.endRemaindata(builder);
+                remainOffsetArray[i] = remainData;
+            }
+            int remainOffset = Tally.createRemaindatasVector(builder, remainOffsetArray);
+            Tally.startTally(builder);
+            Tally.addUuid(builder,  uuid);
+            Tally.addFlag(builder,  flag);
+            Tally.addReply(builder, reply);
+            Tally.addRemaindatas(builder, remainOffset);
+            int tableOfset = Tally.endTally(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Tally);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     *create Tally buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createAlertsBuffer(AlertsBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reson   = builder.createString(bean.getReason());
+            Alerts.startAlerts(builder);
+            Alerts.addAlerttype(builder, bean.getAlerttype());
+            Alerts.addReason(builder, reson);
+            int tableOfset = Alerts.endAlerts(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Alerts);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     *create reboot buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createRebootBuffer(PowerBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reply   = builder.createString(bean.getReply());
+            int reson   = builder.createString(bean.getReason());
+            Reboot.startReboot(builder);
+            Reboot.addReply(builder, reply);
+            Reboot.addResult(builder, (byte) bean.getResult());
+            Reboot.addReqtime(builder, bean.getReqtime());
+            Reboot.addReason(builder, reson);
+            int tableOfset = Reboot.endReboot(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Reboot);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     *create shutdown buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createShutdownBuffer(PowerBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reply   = builder.createString(bean.getReply());
+            int reson   = builder.createString(bean.getReason());
+            Shutdown.startShutdown(builder);
+            Shutdown.addReply(builder, reply);
+            Shutdown.addResult(builder, (byte) bean.getResult());
+            Shutdown.addReqtime(builder, bean.getReqtime());
+            Shutdown.addReason(builder, reson);
+            int tableOfset = Shutdown.endShutdown(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Shutdown);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     *create temp buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createTempStatusBuffer(TempBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            TempStatus.startTempStatus(builder);
+            TempStatus.addTemp(builder, bean.getTemp());
+            TempStatus.addTime(builder, bean.getTime());
+            int tableOfset = TempStatus.endTempStatus(builder);
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.TempStatus);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+
+    /**
+     *create weight sensor buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createAdjustZeroBuffer(WeightSensorBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reply    = builder.createString(bean.getReply());
+            int reson    = builder.createString(bean.getReason());
+            int gratings = builder.createString(bean.getGratings());
+            AdjustZero.startAdjustZero(builder);
+            AdjustZero.addReply(builder, reply);
+            AdjustZero.addResult(builder, bean.getResult());
+            AdjustZero.addGratings(builder, gratings);
+            AdjustZero.addWeight(builder, bean.getWeight());
+            AdjustZero.addReason(builder, reson);
+            int tableOfset = AdjustZero.endAdjustZero(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.AdjustZero);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     *create weight sensor buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createCalibrationBuffer(WeightSensorBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reply    = builder.createString(bean.getReply());
+            int reson    = builder.createString(bean.getReason());
+            int gratings = builder.createString(bean.getGratings());
+            Calibration.startCalibration(builder);
+            Calibration.addReply(builder, reply);
+            Calibration.addResult(builder, bean.getResult());
+            Calibration.addGratings(builder, gratings);
+            Calibration.addWeight(builder, bean.getWeight());
+            Calibration.addReason(builder, reson);
+            int tableOfset = Calibration.endCalibration(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Calibration);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+
+    /**
+     *create weight sensor buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createSetWeightThresholdBuffer(WeightSensorBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reply    = builder.createString(bean.getReply());
+            int reson    = builder.createString(bean.getReason());
+            int gratings = builder.createString(bean.getGratings());
+            SetWeightThreshold.startSetWeightThreshold(builder);
+            SetWeightThreshold.addReply(builder, reply);
+            SetWeightThreshold.addResult(builder, bean.getResult());
+            SetWeightThreshold.addGratings(builder, gratings);
+            SetWeightThreshold.addWeight(builder, bean.getWeight());
+            SetWeightThreshold.addReason(builder, reson);
+            int tableOfset = SetWeightThreshold.endSetWeightThreshold(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.SetWeightThreshold);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+    /**
+     *create Gratings buffer
+     *
+     * @param bean
+     * @return
+     */
+    public  byte[] createSetGratingsBuffer(GratingsBean bean){
+        FlatBufferBuilder builder = new FlatBufferBuilder();
+        if(bean == null){
+            return null;
+        }
+        try {
+            int reply    = builder.createString(bean.getReply());
+            int reson    = builder.createString(bean.getReason());
+            int[] gratings = new int[bean.getGratings().size()];
+            for(int i = 0; i < bean.getGratings().size(); i ++){
+                gratings[i] = builder.createString(bean.getGratings().get(i));
+            }
+            int data = builder.createVectorOfTables(gratings);
+            Gratings.startGratings(builder);
+            Gratings.addReply(builder, reply);
+            Gratings.addResult(builder, bean.getResult());
+            Gratings.addReason(builder, reson);
+            Gratings.addData(builder, data);
+            int tableOfset = Gratings.endGratings(builder);
+
+            Payload.startPayload(builder);
+            Payload.addTypeType(builder, Payloads.Gratings);
+            Payload.addType(builder, tableOfset);
+            int paylod = Payload.endPayload(builder);
+            builder.finish(paylod);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return ByteBufUtils.bytebuffer2ByteArray(builder.dataBuffer());
+    }
+
+
+
+
+
+    /**
+     * parse mqtt flat buffer message
+     *
+     * @param buffer
+     */
+    public  void parseFlatBufferMessage(byte[] buffer) {
+        if (buffer == null) {
+            return;
+        }
+        try {
+            ByteBuffer byteBuffer = ByteBufUtils.byte2Byffer(buffer);
+            Payload payload = Payload.getRootAsPayload(byteBuffer);
+            Logger.debug("FlatBuffer Type :"+payload.typeType());
+            Reqmsg reqmsg;
+            switch (payload.typeType()) {
+                case Payloads.Open:
+                    Logger.error("Command: Open");
+                    Open open = (Open) payload.type(new Open());
+                    reqmsg = new Reqmsg(CMD_MQ_OPENDOOR, open);
+                    break;
+                case Payloads.Monitoring:
+                    Logger.error("Command: Monitoring");
+                    Monitoring monitoring = (Monitoring) payload.type(new Monitoring());
+                    reqmsg = new Reqmsg(CMD_MQ_MONITORING, monitoring);
+                    break;
+                case Payloads.Reboot:
+                    Logger.error("Command: Reboot");
+                    Reboot reboot = (Reboot) payload.type(new Reboot());
+                    reqmsg = new Reqmsg(CMD_MQ_REBOOT, reboot);
+                    break;
+                case Payloads.Shutdown:
+                    Logger.error("Command: Shutdown");
+                    Shutdown shutdown = (Shutdown) payload.type(new Shutdown());
+                    reqmsg = new Reqmsg(CMD_MQ_SHUTDOWN, shutdown);
+                    break;
+                case Payloads.Setup:
+                    Logger.error("Command: Setup");
+                    Setup setup = (Setup) payload.type(new Setup());
+                    reqmsg = new Reqmsg(CMD_MQ_SETUP, setup);
+                    break;
+                case Payloads.Tally:
+                    Logger.error("Command: Tally");
+                    Tally tally = (Tally) payload.type(new Tally());
+                    reqmsg = new Reqmsg(CMD_MQ_REAL_WEIGHT, tally);
+                    break;
+                case Payloads.TempStatus:
+                    Logger.error("Command: TempStatus");
+                    TempStatus tempStatus = (TempStatus) payload.type(new TempStatus());
+                    reqmsg = new Reqmsg(CMD_MQ_TEMP, tempStatus);
+                    break;
+                case Payloads.Upgrade:
+                    Logger.error("Command: Upgrade");
+                    Upgrade upgrade = (Upgrade) payload.type(new Upgrade());
+                    reqmsg = new Reqmsg(CMD_MQ_UPGRADE, upgrade);
+                    break;
+                case Payloads.Gratings:
+                    Logger.error("Command: Gratings");
+                    Gratings gratings = (Gratings) payload.type(new Gratings());
+                    reqmsg = new Reqmsg(CMD_MQ_GRATINGS, gratings);
+                    break;
+                case Payloads.AdjustZero:
+                    Logger.error("Command: AdjustZero");
+                    AdjustZero adjustZero = (AdjustZero) payload.type(new AdjustZero());
+                    reqmsg = new Reqmsg(CMD_MQ_SET_ZERO, adjustZero);
+                    break;
+                case Payloads.Calibration:
+                    Logger.error("Command: Calibration");
+                    Calibration calibration = (Calibration) payload.type(new Calibration());
+                    reqmsg = new Reqmsg(CMD_MQ_CALIBRATION, calibration);
+                    break;
+                case Payloads.SetWeightThreshold:
+                    Logger.error("Command: SetWeightThreshold");
+                    SetWeightThreshold setWeightThreshold = (SetWeightThreshold) payload.type(new SetWeightThreshold());
+                    reqmsg = new Reqmsg(CMD_MQ_SET_THRESHOLD, setWeightThreshold);
+                    break;
+                case Payloads.AdjustZeroEvent:
+                    Logger.error("Command: adjust zero event");
+                    AdjustZeroEvent adjustZeroEvent = (AdjustZeroEvent) payload.type(new AdjustZeroEvent());
+                    reqmsg = new Reqmsg(CMD_MQ_ADJUST_EVENT, adjustZeroEvent);
+                    break;
+                case Payloads.SensorEvent:
+                    Logger.error("Command: sensor event");
+                    SensorEvent sensorEvent = (SensorEvent) payload.type(new SensorEvent());
+                    reqmsg = new Reqmsg(CMD_MQ_SENSOR_EVENT, sensorEvent);
+                    break;
+                default:
+                    return;
+            }
+            blockingQueue.put(reqmsg);
+        } catch (Exception e) {
+            e.printStackTrace();
+            Logger.error(e.getMessage());
+        }
+    }
+
+
+
+
+
+
+}

+ 2 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/readme.md

@@ -0,0 +1,2 @@
+# generate table data
+flatc -j -o src schema/weight.fbs

+ 153 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/schema/weight.fbs

@@ -0,0 +1,153 @@
+namespace weightbox.msg;
+
+enum Result:byte { Success = 0, Failure }
+
+union Payloads { Open, Tally,  Monitoring, Reboot, Shutdown, Setup, Gratings, Close, Status, TempStatus, Alerts, Upgrade, AdjustZero, Calibration, SetWeightThreshold, SensorEvent, AdjustZeroEvent }
+
+//optype:buy/manage
+//reply:random
+//rsp topic random:reply
+table Open {
+  userid:string;
+  uuid:string;
+  optype:string;
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table Tally {
+  uuid:string;
+  flag:string;
+  reply:string;
+  remaindatas:[Remaindata];
+}
+
+table Monitoring {
+  reqtime:long;
+}
+
+table Reboot {
+  reqtime:long;
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table Shutdown {
+  reqtime:long;
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table Setup {
+  threshold1:float;
+  threshold2:float;
+}
+
+table Remaindata {
+  bindcode:string;
+  weight:float;
+}
+
+//e.g bindcode:1-1, 1-2, 2-1
+// weight:1000
+table Evtdata {
+  bindcode:string;
+  weight:float;
+}
+
+//e.g bindcode:1-1
+//    weight:-10
+//    timestamp:15636638182
+table Eventdata {
+  bindcode:string;
+  weight:float;
+  timestamp:long;
+}
+
+table Extradata {
+  optype:string;
+  uuid:string;
+}
+
+table Close {
+  userid:string;
+  evtdatas:[Evtdata];
+  eventdatas:[Eventdata];
+  remaindatas:[Remaindata];
+  extradata:Extradata;
+}
+
+//network:online/offline
+table Status {
+  network:string;
+  time:long;
+  temp:float;
+  softver:string;
+  hardver:string;
+}
+
+table TempStatus {
+  time:long;
+  temp:float;
+}
+
+//alert type, 0:camera, 1:lock, 2:Gravity sensor, 3:cpu/memory/ram/space, 4:power failure
+table Alerts {
+  alerttype:int;
+  reason:string;
+}
+
+table Upgrade {
+  softver:string;
+  url:string;
+}
+
+//bind weight box model
+table Gratings {
+  data:[string];
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table AdjustZero {
+  weight:float;
+  gratings:string;
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table AdjustZeroEvent {
+  result:Result;
+  reason:string;
+}
+
+table Calibration {
+  weight:float;
+  gratings:string;
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table SensorEvent {
+  gratings:[string];
+}
+
+table SetWeightThreshold {
+  weight:float;
+  gratings:string;
+  reply:string;
+  result:Result;
+  reason:string;
+}
+
+table Payload{
+  type: Payloads;
+}
+
+root_type Payload;

+ 63 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/AdjustZero.java

@@ -0,0 +1,63 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class AdjustZero extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static AdjustZero getRootAsAdjustZero(ByteBuffer _bb) { return getRootAsAdjustZero(_bb, new AdjustZero()); }
+  public static AdjustZero getRootAsAdjustZero(ByteBuffer _bb, AdjustZero obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public AdjustZero __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public float weight() { int o = __offset(4); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+  public String gratings() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer gratingsAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer gratingsInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public String reply() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
+  public byte result() { int o = __offset(10); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(12); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(12, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 12, 1); }
+
+  public static int createAdjustZero(FlatBufferBuilder builder,
+      float weight,
+      int gratingsOffset,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(5);
+    AdjustZero.addReason(builder, reasonOffset);
+    AdjustZero.addReply(builder, replyOffset);
+    AdjustZero.addGratings(builder, gratingsOffset);
+    AdjustZero.addWeight(builder, weight);
+    AdjustZero.addResult(builder, result);
+    return AdjustZero.endAdjustZero(builder);
+  }
+
+  public static void startAdjustZero(FlatBufferBuilder builder) { builder.startTable(5); }
+  public static void addWeight(FlatBufferBuilder builder, float weight) { builder.addFloat(0, weight, 0.0f); }
+  public static void addGratings(FlatBufferBuilder builder, int gratingsOffset) { builder.addOffset(1, gratingsOffset, 0); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(2, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(3, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(4, reasonOffset, 0); }
+  public static int endAdjustZero(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public AdjustZero get(int j) { return get(new AdjustZero(), j); }
+    public AdjustZero get(AdjustZero obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 39 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/AdjustZeroEvent.java

@@ -0,0 +1,39 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+import java.util.*;
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class AdjustZeroEvent extends Table {
+  public static AdjustZeroEvent getRootAsAdjustZeroEvent(ByteBuffer _bb) { return getRootAsAdjustZeroEvent(_bb, new AdjustZeroEvent()); }
+  public static AdjustZeroEvent getRootAsAdjustZeroEvent(ByteBuffer _bb, AdjustZeroEvent obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public AdjustZeroEvent __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public byte result() { int o = __offset(4); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+
+  public static int createAdjustZeroEvent(FlatBufferBuilder builder,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(2);
+    AdjustZeroEvent.addReason(builder, reasonOffset);
+    AdjustZeroEvent.addResult(builder, result);
+    return AdjustZeroEvent.endAdjustZeroEvent(builder);
+  }
+
+  public static void startAdjustZeroEvent(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(0, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(1, reasonOffset, 0); }
+  public static int endAdjustZeroEvent(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+}
+

+ 47 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Alerts.java

@@ -0,0 +1,47 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Alerts extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Alerts getRootAsAlerts(ByteBuffer _bb) { return getRootAsAlerts(_bb, new Alerts()); }
+  public static Alerts getRootAsAlerts(ByteBuffer _bb, Alerts obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Alerts __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public int alerttype() { int o = __offset(4); return o != 0 ? bb.getInt(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+
+  public static int createAlerts(FlatBufferBuilder builder,
+      int alerttype,
+      int reasonOffset) {
+    builder.startTable(2);
+    Alerts.addReason(builder, reasonOffset);
+    Alerts.addAlerttype(builder, alerttype);
+    return Alerts.endAlerts(builder);
+  }
+
+  public static void startAlerts(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addAlerttype(FlatBufferBuilder builder, int alerttype) { builder.addInt(0, alerttype, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(1, reasonOffset, 0); }
+  public static int endAlerts(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Alerts get(int j) { return get(new Alerts(), j); }
+    public Alerts get(Alerts obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 63 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Calibration.java

@@ -0,0 +1,63 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Calibration extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Calibration getRootAsCalibration(ByteBuffer _bb) { return getRootAsCalibration(_bb, new Calibration()); }
+  public static Calibration getRootAsCalibration(ByteBuffer _bb, Calibration obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Calibration __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public float weight() { int o = __offset(4); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+  public String gratings() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer gratingsAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer gratingsInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public String reply() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
+  public byte result() { int o = __offset(10); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(12); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(12, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 12, 1); }
+
+  public static int createCalibration(FlatBufferBuilder builder,
+      float weight,
+      int gratingsOffset,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(5);
+    Calibration.addReason(builder, reasonOffset);
+    Calibration.addReply(builder, replyOffset);
+    Calibration.addGratings(builder, gratingsOffset);
+    Calibration.addWeight(builder, weight);
+    Calibration.addResult(builder, result);
+    return Calibration.endCalibration(builder);
+  }
+
+  public static void startCalibration(FlatBufferBuilder builder) { builder.startTable(5); }
+  public static void addWeight(FlatBufferBuilder builder, float weight) { builder.addFloat(0, weight, 0.0f); }
+  public static void addGratings(FlatBufferBuilder builder, int gratingsOffset) { builder.addOffset(1, gratingsOffset, 0); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(2, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(3, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(4, reasonOffset, 0); }
+  public static int endCalibration(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Calibration get(int j) { return get(new Calibration(), j); }
+    public Calibration get(Calibration obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 78 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Close.java

@@ -0,0 +1,78 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Close extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Close getRootAsClose(ByteBuffer _bb) { return getRootAsClose(_bb, new Close()); }
+  public static Close getRootAsClose(ByteBuffer _bb, Close obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Close __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String userid() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer useridAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer useridInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public Evtdata evtdatas(int j) { return evtdatas(new Evtdata(), j); }
+  public Evtdata evtdatas(Evtdata obj, int j) { int o = __offset(6); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
+  public int evtdatasLength() { int o = __offset(6); return o != 0 ? __vector_len(o) : 0; }
+  public Evtdata.Vector evtdatasVector() { return evtdatasVector(new Evtdata.Vector()); }
+  public Evtdata.Vector evtdatasVector(Evtdata.Vector obj) { int o = __offset(6); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
+  public Eventdata eventdatas(int j) { return eventdatas(new Eventdata(), j); }
+  public Eventdata eventdatas(Eventdata obj, int j) { int o = __offset(8); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
+  public int eventdatasLength() { int o = __offset(8); return o != 0 ? __vector_len(o) : 0; }
+  public Eventdata.Vector eventdatasVector() { return eventdatasVector(new Eventdata.Vector()); }
+  public Eventdata.Vector eventdatasVector(Eventdata.Vector obj) { int o = __offset(8); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
+  public Remaindata remaindatas(int j) { return remaindatas(new Remaindata(), j); }
+  public Remaindata remaindatas(Remaindata obj, int j) { int o = __offset(10); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
+  public int remaindatasLength() { int o = __offset(10); return o != 0 ? __vector_len(o) : 0; }
+  public Remaindata.Vector remaindatasVector() { return remaindatasVector(new Remaindata.Vector()); }
+  public Remaindata.Vector remaindatasVector(Remaindata.Vector obj) { int o = __offset(10); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
+  public Extradata extradata() { return extradata(new Extradata()); }
+  public Extradata extradata(Extradata obj) { int o = __offset(12); return o != 0 ? obj.__assign(__indirect(o + bb_pos), bb) : null; }
+
+  public static int createClose(FlatBufferBuilder builder,
+      int useridOffset,
+      int evtdatasOffset,
+      int eventdatasOffset,
+      int remaindatasOffset,
+      int extradataOffset) {
+    builder.startTable(5);
+    Close.addExtradata(builder, extradataOffset);
+    Close.addRemaindatas(builder, remaindatasOffset);
+    Close.addEventdatas(builder, eventdatasOffset);
+    Close.addEvtdatas(builder, evtdatasOffset);
+    Close.addUserid(builder, useridOffset);
+    return Close.endClose(builder);
+  }
+
+  public static void startClose(FlatBufferBuilder builder) { builder.startTable(5); }
+  public static void addUserid(FlatBufferBuilder builder, int useridOffset) { builder.addOffset(0, useridOffset, 0); }
+  public static void addEvtdatas(FlatBufferBuilder builder, int evtdatasOffset) { builder.addOffset(1, evtdatasOffset, 0); }
+  public static int createEvtdatasVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+  public static void startEvtdatasVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static void addEventdatas(FlatBufferBuilder builder, int eventdatasOffset) { builder.addOffset(2, eventdatasOffset, 0); }
+  public static int createEventdatasVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+  public static void startEventdatasVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static void addRemaindatas(FlatBufferBuilder builder, int remaindatasOffset) { builder.addOffset(3, remaindatasOffset, 0); }
+  public static int createRemaindatasVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+  public static void startRemaindatasVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static void addExtradata(FlatBufferBuilder builder, int extradataOffset) { builder.addOffset(4, extradataOffset, 0); }
+  public static int endClose(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Close get(int j) { return get(new Close(), j); }
+    public Close get(Close obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 51 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Eventdata.java

@@ -0,0 +1,51 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Eventdata extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Eventdata getRootAsEventdata(ByteBuffer _bb) { return getRootAsEventdata(_bb, new Eventdata()); }
+  public static Eventdata getRootAsEventdata(ByteBuffer _bb, Eventdata obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Eventdata __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String bindcode() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer bindcodeAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer bindcodeInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public float weight() { int o = __offset(6); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+  public long timestamp() { int o = __offset(8); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
+
+  public static int createEventdata(FlatBufferBuilder builder,
+      int bindcodeOffset,
+      float weight,
+      long timestamp) {
+    builder.startTable(3);
+    Eventdata.addTimestamp(builder, timestamp);
+    Eventdata.addWeight(builder, weight);
+    Eventdata.addBindcode(builder, bindcodeOffset);
+    return Eventdata.endEventdata(builder);
+  }
+
+  public static void startEventdata(FlatBufferBuilder builder) { builder.startTable(3); }
+  public static void addBindcode(FlatBufferBuilder builder, int bindcodeOffset) { builder.addOffset(0, bindcodeOffset, 0); }
+  public static void addWeight(FlatBufferBuilder builder, float weight) { builder.addFloat(1, weight, 0.0f); }
+  public static void addTimestamp(FlatBufferBuilder builder, long timestamp) { builder.addLong(2, timestamp, 0L); }
+  public static int endEventdata(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Eventdata get(int j) { return get(new Eventdata(), j); }
+    public Eventdata get(Eventdata obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 47 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Evtdata.java

@@ -0,0 +1,47 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Evtdata extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Evtdata getRootAsEvtdata(ByteBuffer _bb) { return getRootAsEvtdata(_bb, new Evtdata()); }
+  public static Evtdata getRootAsEvtdata(ByteBuffer _bb, Evtdata obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Evtdata __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String bindcode() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer bindcodeAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer bindcodeInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public float weight() { int o = __offset(6); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+
+  public static int createEvtdata(FlatBufferBuilder builder,
+      int bindcodeOffset,
+      float weight) {
+    builder.startTable(2);
+    Evtdata.addWeight(builder, weight);
+    Evtdata.addBindcode(builder, bindcodeOffset);
+    return Evtdata.endEvtdata(builder);
+  }
+
+  public static void startEvtdata(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addBindcode(FlatBufferBuilder builder, int bindcodeOffset) { builder.addOffset(0, bindcodeOffset, 0); }
+  public static void addWeight(FlatBufferBuilder builder, float weight) { builder.addFloat(1, weight, 0.0f); }
+  public static int endEvtdata(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Evtdata get(int j) { return get(new Evtdata(), j); }
+    public Evtdata get(Evtdata obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 49 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Extradata.java

@@ -0,0 +1,49 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Extradata extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Extradata getRootAsExtradata(ByteBuffer _bb) { return getRootAsExtradata(_bb, new Extradata()); }
+  public static Extradata getRootAsExtradata(ByteBuffer _bb, Extradata obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Extradata __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String optype() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer optypeAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer optypeInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public String uuid() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer uuidAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer uuidInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+
+  public static int createExtradata(FlatBufferBuilder builder,
+      int optypeOffset,
+      int uuidOffset) {
+    builder.startTable(2);
+    Extradata.addUuid(builder, uuidOffset);
+    Extradata.addOptype(builder, optypeOffset);
+    return Extradata.endExtradata(builder);
+  }
+
+  public static void startExtradata(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addOptype(FlatBufferBuilder builder, int optypeOffset) { builder.addOffset(0, optypeOffset, 0); }
+  public static void addUuid(FlatBufferBuilder builder, int uuidOffset) { builder.addOffset(1, uuidOffset, 0); }
+  public static int endExtradata(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Extradata get(int j) { return get(new Extradata(), j); }
+    public Extradata get(Extradata obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 62 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Gratings.java

@@ -0,0 +1,62 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Gratings extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Gratings getRootAsGratings(ByteBuffer _bb) { return getRootAsGratings(_bb, new Gratings()); }
+  public static Gratings getRootAsGratings(ByteBuffer _bb, Gratings obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Gratings __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String data(int j) { int o = __offset(4); return o != 0 ? __string(__vector(o) + j * 4) : null; }
+  public int dataLength() { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; }
+  public StringVector dataVector() { return dataVector(new StringVector()); }
+  public StringVector dataVector(StringVector obj) { int o = __offset(4); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
+  public String reply() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public byte result() { int o = __offset(8); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
+
+  public static int createGratings(FlatBufferBuilder builder,
+      int dataOffset,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(4);
+    Gratings.addReason(builder, reasonOffset);
+    Gratings.addReply(builder, replyOffset);
+    Gratings.addData(builder, dataOffset);
+    Gratings.addResult(builder, result);
+    return Gratings.endGratings(builder);
+  }
+
+  public static void startGratings(FlatBufferBuilder builder) { builder.startTable(4); }
+  public static void addData(FlatBufferBuilder builder, int dataOffset) { builder.addOffset(0, dataOffset, 0); }
+  public static int createDataVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+  public static void startDataVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(1, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(2, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(3, reasonOffset, 0); }
+  public static int endGratings(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Gratings get(int j) { return get(new Gratings(), j); }
+    public Gratings get(Gratings obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 41 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Monitoring.java

@@ -0,0 +1,41 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Monitoring extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Monitoring getRootAsMonitoring(ByteBuffer _bb) { return getRootAsMonitoring(_bb, new Monitoring()); }
+  public static Monitoring getRootAsMonitoring(ByteBuffer _bb, Monitoring obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Monitoring __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public long reqtime() { int o = __offset(4); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
+
+  public static int createMonitoring(FlatBufferBuilder builder,
+      long reqtime) {
+    builder.startTable(1);
+    Monitoring.addReqtime(builder, reqtime);
+    return Monitoring.endMonitoring(builder);
+  }
+
+  public static void startMonitoring(FlatBufferBuilder builder) { builder.startTable(1); }
+  public static void addReqtime(FlatBufferBuilder builder, long reqtime) { builder.addLong(0, reqtime, 0L); }
+  public static int endMonitoring(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Monitoring get(int j) { return get(new Monitoring(), j); }
+    public Monitoring get(Monitoring obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 71 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Open.java

@@ -0,0 +1,71 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Open extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Open getRootAsOpen(ByteBuffer _bb) { return getRootAsOpen(_bb, new Open()); }
+  public static Open getRootAsOpen(ByteBuffer _bb, Open obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Open __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String userid() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer useridAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer useridInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public String uuid() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer uuidAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer uuidInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public String optype() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer optypeAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
+  public ByteBuffer optypeInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
+  public String reply() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
+  public byte result() { int o = __offset(12); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(14); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(14, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 14, 1); }
+
+  public static int createOpen(FlatBufferBuilder builder,
+      int useridOffset,
+      int uuidOffset,
+      int optypeOffset,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(6);
+    Open.addReason(builder, reasonOffset);
+    Open.addReply(builder, replyOffset);
+    Open.addOptype(builder, optypeOffset);
+    Open.addUuid(builder, uuidOffset);
+    Open.addUserid(builder, useridOffset);
+    Open.addResult(builder, result);
+    return Open.endOpen(builder);
+  }
+
+  public static void startOpen(FlatBufferBuilder builder) { builder.startTable(6); }
+  public static void addUserid(FlatBufferBuilder builder, int useridOffset) { builder.addOffset(0, useridOffset, 0); }
+  public static void addUuid(FlatBufferBuilder builder, int uuidOffset) { builder.addOffset(1, uuidOffset, 0); }
+  public static void addOptype(FlatBufferBuilder builder, int optypeOffset) { builder.addOffset(2, optypeOffset, 0); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(3, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(4, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(5, reasonOffset, 0); }
+  public static int endOpen(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Open get(int j) { return get(new Open(), j); }
+    public Open get(Open obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 47 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Payload.java

@@ -0,0 +1,47 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Payload extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Payload getRootAsPayload(ByteBuffer _bb) { return getRootAsPayload(_bb, new Payload()); }
+  public static Payload getRootAsPayload(ByteBuffer _bb, Payload obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Payload __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public byte typeType() { int o = __offset(4); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public Table type(Table obj) { int o = __offset(6); return o != 0 ? __union(obj, o + bb_pos) : null; }
+
+  public static int createPayload(FlatBufferBuilder builder,
+      byte type_type,
+      int typeOffset) {
+    builder.startTable(2);
+    Payload.addType(builder, typeOffset);
+    Payload.addTypeType(builder, type_type);
+    return Payload.endPayload(builder);
+  }
+
+  public static void startPayload(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addTypeType(FlatBufferBuilder builder, byte typeType) { builder.addByte(0, typeType, 0); }
+  public static void addType(FlatBufferBuilder builder, int typeOffset) { builder.addOffset(1, typeOffset, 0); }
+  public static int endPayload(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+  public static void finishPayloadBuffer(FlatBufferBuilder builder, int offset) { builder.finish(offset); }
+  public static void finishSizePrefixedPayloadBuffer(FlatBufferBuilder builder, int offset) { builder.finishSizePrefixed(offset); }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Payload get(int j) { return get(new Payload(), j); }
+    public Payload get(Payload obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 30 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Payloads.java

@@ -0,0 +1,30 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+public final class Payloads {
+  private Payloads() { }
+  public static final byte NONE = 0;
+  public static final byte Open = 1;
+  public static final byte Tally = 2;
+  public static final byte Monitoring = 3;
+  public static final byte Reboot = 4;
+  public static final byte Shutdown = 5;
+  public static final byte Setup = 6;
+  public static final byte Gratings = 7;
+  public static final byte Close = 8;
+  public static final byte Status = 9;
+  public static final byte TempStatus = 10;
+  public static final byte Alerts = 11;
+  public static final byte Upgrade = 12;
+  public static final byte AdjustZero = 13;
+  public static final byte Calibration = 14;
+  public static final byte SetWeightThreshold = 15;
+  public static final byte AdjustZeroEvent = 16;
+  public static final byte SensorEvent = 17;
+
+  public static final String[] names = { "NONE", "Open", "Tally", "Monitoring", "Reboot", "Shutdown", "Setup", "Gratings", "Close", "Status", "TempStatus", "Alerts", "Upgrade", "AdjustZero", "Calibration", "SetWeightThreshold", "AdjustZeroEvent", "SensorEvent", };
+
+  public static String name(int e) { return names[e]; }
+}
+

+ 57 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Reboot.java

@@ -0,0 +1,57 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Reboot extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Reboot getRootAsReboot(ByteBuffer _bb) { return getRootAsReboot(_bb, new Reboot()); }
+  public static Reboot getRootAsReboot(ByteBuffer _bb, Reboot obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Reboot __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public long reqtime() { int o = __offset(4); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
+  public String reply() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public byte result() { int o = __offset(8); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
+
+  public static int createReboot(FlatBufferBuilder builder,
+      long reqtime,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(4);
+    Reboot.addReqtime(builder, reqtime);
+    Reboot.addReason(builder, reasonOffset);
+    Reboot.addReply(builder, replyOffset);
+    Reboot.addResult(builder, result);
+    return Reboot.endReboot(builder);
+  }
+
+  public static void startReboot(FlatBufferBuilder builder) { builder.startTable(4); }
+  public static void addReqtime(FlatBufferBuilder builder, long reqtime) { builder.addLong(0, reqtime, 0L); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(1, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(2, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(3, reasonOffset, 0); }
+  public static int endReboot(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Reboot get(int j) { return get(new Reboot(), j); }
+    public Reboot get(Reboot obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 47 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Remaindata.java

@@ -0,0 +1,47 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Remaindata extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Remaindata getRootAsRemaindata(ByteBuffer _bb) { return getRootAsRemaindata(_bb, new Remaindata()); }
+  public static Remaindata getRootAsRemaindata(ByteBuffer _bb, Remaindata obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Remaindata __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String bindcode() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer bindcodeAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer bindcodeInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public float weight() { int o = __offset(6); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+
+  public static int createRemaindata(FlatBufferBuilder builder,
+      int bindcodeOffset,
+      float weight) {
+    builder.startTable(2);
+    Remaindata.addWeight(builder, weight);
+    Remaindata.addBindcode(builder, bindcodeOffset);
+    return Remaindata.endRemaindata(builder);
+  }
+
+  public static void startRemaindata(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addBindcode(FlatBufferBuilder builder, int bindcodeOffset) { builder.addOffset(0, bindcodeOffset, 0); }
+  public static void addWeight(FlatBufferBuilder builder, float weight) { builder.addFloat(1, weight, 0.0f); }
+  public static int endRemaindata(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Remaindata get(int j) { return get(new Remaindata(), j); }
+    public Remaindata get(Remaindata obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 14 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Result.java

@@ -0,0 +1,14 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+public final class Result {
+  private Result() { }
+  public static final byte Success = 0;
+  public static final byte Failure = 1;
+
+  public static final String[] names = { "Success", "Failure", };
+
+  public static String name(int e) { return names[e]; }
+}
+

+ 37 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/SensorEvent.java

@@ -0,0 +1,37 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+import java.util.*;
+import com.google.flatbuffers.*;
+
+  @SuppressWarnings("unused")
+  public final class SensorEvent extends Table {
+    public static SensorEvent getRootAsSensorEvent(ByteBuffer _bb) { return getRootAsSensorEvent(_bb, new SensorEvent()); }
+    public static SensorEvent getRootAsSensorEvent(ByteBuffer _bb, SensorEvent obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+    public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+    public SensorEvent __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+    public String gratings(int j) { int o = __offset(4); return o != 0 ? __string(__vector(o) + j * 4) : null; }
+    public int gratingsLength() { int o = __offset(4); return o != 0 ? __vector_len(o) : 0; }
+
+    public static int createSensorEvent(FlatBufferBuilder builder,
+                                        int gratingsOffset) {
+      builder.startTable(1);
+      SensorEvent.addGratings(builder, gratingsOffset);
+      return SensorEvent.endSensorEvent(builder);
+    }
+
+    public static void startSensorEvent(FlatBufferBuilder builder) { builder.startTable(1); }
+    public static void addGratings(FlatBufferBuilder builder, int gratingsOffset) { builder.addOffset(0, gratingsOffset, 0); }
+    public static int createGratingsVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+    public static void startGratingsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+    public static int endSensorEvent(FlatBufferBuilder builder) {
+      int o = builder.endTable();
+      return o;
+    }
+  }
+
+

+ 63 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/SetWeightThreshold.java

@@ -0,0 +1,63 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class SetWeightThreshold extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static SetWeightThreshold getRootAsSetWeightThreshold(ByteBuffer _bb) { return getRootAsSetWeightThreshold(_bb, new SetWeightThreshold()); }
+  public static SetWeightThreshold getRootAsSetWeightThreshold(ByteBuffer _bb, SetWeightThreshold obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public SetWeightThreshold __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public float weight() { int o = __offset(4); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+  public String gratings() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer gratingsAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer gratingsInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public String reply() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
+  public byte result() { int o = __offset(10); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(12); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(12, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 12, 1); }
+
+  public static int createSetWeightThreshold(FlatBufferBuilder builder,
+      float weight,
+      int gratingsOffset,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(5);
+    SetWeightThreshold.addReason(builder, reasonOffset);
+    SetWeightThreshold.addReply(builder, replyOffset);
+    SetWeightThreshold.addGratings(builder, gratingsOffset);
+    SetWeightThreshold.addWeight(builder, weight);
+    SetWeightThreshold.addResult(builder, result);
+    return SetWeightThreshold.endSetWeightThreshold(builder);
+  }
+
+  public static void startSetWeightThreshold(FlatBufferBuilder builder) { builder.startTable(5); }
+  public static void addWeight(FlatBufferBuilder builder, float weight) { builder.addFloat(0, weight, 0.0f); }
+  public static void addGratings(FlatBufferBuilder builder, int gratingsOffset) { builder.addOffset(1, gratingsOffset, 0); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(2, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(3, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(4, reasonOffset, 0); }
+  public static int endSetWeightThreshold(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public SetWeightThreshold get(int j) { return get(new SetWeightThreshold(), j); }
+    public SetWeightThreshold get(SetWeightThreshold obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 45 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Setup.java

@@ -0,0 +1,45 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Setup extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Setup getRootAsSetup(ByteBuffer _bb) { return getRootAsSetup(_bb, new Setup()); }
+  public static Setup getRootAsSetup(ByteBuffer _bb, Setup obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Setup __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public float threshold1() { int o = __offset(4); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+  public float threshold2() { int o = __offset(6); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+
+  public static int createSetup(FlatBufferBuilder builder,
+      float threshold1,
+      float threshold2) {
+    builder.startTable(2);
+    Setup.addThreshold2(builder, threshold2);
+    Setup.addThreshold1(builder, threshold1);
+    return Setup.endSetup(builder);
+  }
+
+  public static void startSetup(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addThreshold1(FlatBufferBuilder builder, float threshold1) { builder.addFloat(0, threshold1, 0.0f); }
+  public static void addThreshold2(FlatBufferBuilder builder, float threshold2) { builder.addFloat(1, threshold2, 0.0f); }
+  public static int endSetup(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Setup get(int j) { return get(new Setup(), j); }
+    public Setup get(Setup obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 57 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Shutdown.java

@@ -0,0 +1,57 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Shutdown extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Shutdown getRootAsShutdown(ByteBuffer _bb) { return getRootAsShutdown(_bb, new Shutdown()); }
+  public static Shutdown getRootAsShutdown(ByteBuffer _bb, Shutdown obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Shutdown __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public long reqtime() { int o = __offset(4); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
+  public String reply() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public byte result() { int o = __offset(8); return o != 0 ? bb.get(o + bb_pos) : 0; }
+  public String reason() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer reasonAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
+  public ByteBuffer reasonInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
+
+  public static int createShutdown(FlatBufferBuilder builder,
+      long reqtime,
+      int replyOffset,
+      byte result,
+      int reasonOffset) {
+    builder.startTable(4);
+    Shutdown.addReqtime(builder, reqtime);
+    Shutdown.addReason(builder, reasonOffset);
+    Shutdown.addReply(builder, replyOffset);
+    Shutdown.addResult(builder, result);
+    return Shutdown.endShutdown(builder);
+  }
+
+  public static void startShutdown(FlatBufferBuilder builder) { builder.startTable(4); }
+  public static void addReqtime(FlatBufferBuilder builder, long reqtime) { builder.addLong(0, reqtime, 0L); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(1, replyOffset, 0); }
+  public static void addResult(FlatBufferBuilder builder, byte result) { builder.addByte(2, result, 0); }
+  public static void addReason(FlatBufferBuilder builder, int reasonOffset) { builder.addOffset(3, reasonOffset, 0); }
+  public static int endShutdown(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Shutdown get(int j) { return get(new Shutdown(), j); }
+    public Shutdown get(Shutdown obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 63 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Status.java

@@ -0,0 +1,63 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Status extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Status getRootAsStatus(ByteBuffer _bb) { return getRootAsStatus(_bb, new Status()); }
+  public static Status getRootAsStatus(ByteBuffer _bb, Status obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Status __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String network() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer networkAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer networkInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public long time() { int o = __offset(6); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
+  public float temp() { int o = __offset(8); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+  public String softver() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer softverAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
+  public ByteBuffer softverInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
+  public String hardver() { int o = __offset(12); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer hardverAsByteBuffer() { return __vector_as_bytebuffer(12, 1); }
+  public ByteBuffer hardverInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 12, 1); }
+
+  public static int createStatus(FlatBufferBuilder builder,
+      int networkOffset,
+      long time,
+      float temp,
+      int softverOffset,
+      int hardverOffset) {
+    builder.startTable(5);
+    Status.addTime(builder, time);
+    Status.addHardver(builder, hardverOffset);
+    Status.addSoftver(builder, softverOffset);
+    Status.addTemp(builder, temp);
+    Status.addNetwork(builder, networkOffset);
+    return Status.endStatus(builder);
+  }
+
+  public static void startStatus(FlatBufferBuilder builder) { builder.startTable(5); }
+  public static void addNetwork(FlatBufferBuilder builder, int networkOffset) { builder.addOffset(0, networkOffset, 0); }
+  public static void addTime(FlatBufferBuilder builder, long time) { builder.addLong(1, time, 0L); }
+  public static void addTemp(FlatBufferBuilder builder, float temp) { builder.addFloat(2, temp, 0.0f); }
+  public static void addSoftver(FlatBufferBuilder builder, int softverOffset) { builder.addOffset(3, softverOffset, 0); }
+  public static void addHardver(FlatBufferBuilder builder, int hardverOffset) { builder.addOffset(4, hardverOffset, 0); }
+  public static int endStatus(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Status get(int j) { return get(new Status(), j); }
+    public Status get(Status obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 65 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Tally.java

@@ -0,0 +1,65 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Tally extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Tally getRootAsTally(ByteBuffer _bb) { return getRootAsTally(_bb, new Tally()); }
+  public static Tally getRootAsTally(ByteBuffer _bb, Tally obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Tally __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String uuid() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer uuidAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer uuidInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public String flag() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer flagAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer flagInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+  public String reply() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer replyAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
+  public ByteBuffer replyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
+  public Remaindata remaindatas(int j) { return remaindatas(new Remaindata(), j); }
+  public Remaindata remaindatas(Remaindata obj, int j) { int o = __offset(10); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
+  public int remaindatasLength() { int o = __offset(10); return o != 0 ? __vector_len(o) : 0; }
+  public Remaindata.Vector remaindatasVector() { return remaindatasVector(new Remaindata.Vector()); }
+  public Remaindata.Vector remaindatasVector(Remaindata.Vector obj) { int o = __offset(10); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
+
+  public static int createTally(FlatBufferBuilder builder,
+      int uuidOffset,
+      int flagOffset,
+      int replyOffset,
+      int remaindatasOffset) {
+    builder.startTable(4);
+    Tally.addRemaindatas(builder, remaindatasOffset);
+    Tally.addReply(builder, replyOffset);
+    Tally.addFlag(builder, flagOffset);
+    Tally.addUuid(builder, uuidOffset);
+    return Tally.endTally(builder);
+  }
+
+  public static void startTally(FlatBufferBuilder builder) { builder.startTable(4); }
+  public static void addUuid(FlatBufferBuilder builder, int uuidOffset) { builder.addOffset(0, uuidOffset, 0); }
+  public static void addFlag(FlatBufferBuilder builder, int flagOffset) { builder.addOffset(1, flagOffset, 0); }
+  public static void addReply(FlatBufferBuilder builder, int replyOffset) { builder.addOffset(2, replyOffset, 0); }
+  public static void addRemaindatas(FlatBufferBuilder builder, int remaindatasOffset) { builder.addOffset(3, remaindatasOffset, 0); }
+  public static int createRemaindatasVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
+  public static void startRemaindatasVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
+  public static int endTally(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Tally get(int j) { return get(new Tally(), j); }
+    public Tally get(Tally obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 45 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/TempStatus.java

@@ -0,0 +1,45 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class TempStatus extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static TempStatus getRootAsTempStatus(ByteBuffer _bb) { return getRootAsTempStatus(_bb, new TempStatus()); }
+  public static TempStatus getRootAsTempStatus(ByteBuffer _bb, TempStatus obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public TempStatus __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public long time() { int o = __offset(4); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
+  public float temp() { int o = __offset(6); return o != 0 ? bb.getFloat(o + bb_pos) : 0.0f; }
+
+  public static int createTempStatus(FlatBufferBuilder builder,
+      long time,
+      float temp) {
+    builder.startTable(2);
+    TempStatus.addTime(builder, time);
+    TempStatus.addTemp(builder, temp);
+    return TempStatus.endTempStatus(builder);
+  }
+
+  public static void startTempStatus(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addTime(FlatBufferBuilder builder, long time) { builder.addLong(0, time, 0L); }
+  public static void addTemp(FlatBufferBuilder builder, float temp) { builder.addFloat(1, temp, 0.0f); }
+  public static int endTempStatus(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public TempStatus get(int j) { return get(new TempStatus(), j); }
+    public TempStatus get(TempStatus obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

+ 49 - 0
app/src/main/java/com/ifastore/maintain/repository/remote/mqtt/flatbuffer/src/weightbox/msg/Upgrade.java

@@ -0,0 +1,49 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+package com.ifastore.maintain.repository.remote.mqtt.flatbuffer.src.weightbox.msg;
+
+import java.nio.*;
+import java.lang.*;
+
+import com.google.flatbuffers.*;
+
+@SuppressWarnings("unused")
+public final class Upgrade extends Table {
+  public static void ValidateVersion() { Constants.FLATBUFFERS_1_12_0(); }
+  public static Upgrade getRootAsUpgrade(ByteBuffer _bb) { return getRootAsUpgrade(_bb, new Upgrade()); }
+  public static Upgrade getRootAsUpgrade(ByteBuffer _bb, Upgrade obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
+  public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
+  public Upgrade __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
+
+  public String softver() { int o = __offset(4); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer softverAsByteBuffer() { return __vector_as_bytebuffer(4, 1); }
+  public ByteBuffer softverInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 4, 1); }
+  public String url() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
+  public ByteBuffer urlAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
+  public ByteBuffer urlInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
+
+  public static int createUpgrade(FlatBufferBuilder builder,
+      int softverOffset,
+      int urlOffset) {
+    builder.startTable(2);
+    Upgrade.addUrl(builder, urlOffset);
+    Upgrade.addSoftver(builder, softverOffset);
+    return Upgrade.endUpgrade(builder);
+  }
+
+  public static void startUpgrade(FlatBufferBuilder builder) { builder.startTable(2); }
+  public static void addSoftver(FlatBufferBuilder builder, int softverOffset) { builder.addOffset(0, softverOffset, 0); }
+  public static void addUrl(FlatBufferBuilder builder, int urlOffset) { builder.addOffset(1, urlOffset, 0); }
+  public static int endUpgrade(FlatBufferBuilder builder) {
+    int o = builder.endTable();
+    return o;
+  }
+
+  public static final class Vector extends BaseVector {
+    public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
+
+    public Upgrade get(int j) { return get(new Upgrade(), j); }
+    public Upgrade get(Upgrade obj, int j) {  return obj.__assign(__indirect(__element(j), bb), bb); }
+  }
+}
+

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません