diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
new file mode 100644
index 0000000..92ea1f6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
@@ -0,0 +1,52 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_user_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class UserDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_user_detail
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "个人资料"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ val user = it.data
+
+ userNameView.text = user.account
+ userRealNameView.text = user.name
+ userDeptView.text = user.deptName
+ userPhoneView.text = user.phone
+ ipAddressView.text = user.ipAddr
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
new file mode 100644
index 0000000..92ea1f6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
@@ -0,0 +1,52 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_user_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class UserDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_user_detail
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "个人资料"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ val user = it.data
+
+ userNameView.text = user.account
+ userRealNameView.text = user.name
+ userDeptView.text = user.deptName
+ userPhoneView.text = user.phone
+ ipAddressView.text = user.ipAddr
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index dba8d11..a6ae8ab 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val outResultModel = MutableLiveData()
+ val updateResult = MutableLiveData()
fun getLoginResult(account: String, secretKey: String) = launch({
loadState.value = LoadState.Loading
@@ -69,4 +70,33 @@
}, {
it.cause.toString().show(BaseApplication.get())
})
+
+ fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.updateUserInfo(
+ id, account, name, deptid, avatar, phone, roleid
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ updateResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
new file mode 100644
index 0000000..92ea1f6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
@@ -0,0 +1,52 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_user_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class UserDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_user_detail
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "个人资料"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ val user = it.data
+
+ userNameView.text = user.account
+ userRealNameView.text = user.name
+ userDeptView.text = user.deptName
+ userPhoneView.text = user.phone
+ ipAddressView.text = user.ipAddr
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index dba8d11..a6ae8ab 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val outResultModel = MutableLiveData()
+ val updateResult = MutableLiveData()
fun getLoginResult(account: String, secretKey: String) = launch({
loadState.value = LoadState.Loading
@@ -69,4 +70,33 @@
}, {
it.cause.toString().show(BaseApplication.get())
})
+
+ fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.updateUserInfo(
+ id, account, name, deptid, avatar, phone, roleid
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ updateResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/avatar_border_circle.xml b/app/src/main/res/drawable/avatar_border_circle.xml
new file mode 100644
index 0000000..41a75be
--- /dev/null
+++ b/app/src/main/res/drawable/avatar_border_circle.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
new file mode 100644
index 0000000..92ea1f6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
@@ -0,0 +1,52 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_user_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class UserDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_user_detail
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "个人资料"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ val user = it.data
+
+ userNameView.text = user.account
+ userRealNameView.text = user.name
+ userDeptView.text = user.deptName
+ userPhoneView.text = user.phone
+ ipAddressView.text = user.ipAddr
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index dba8d11..a6ae8ab 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val outResultModel = MutableLiveData()
+ val updateResult = MutableLiveData()
fun getLoginResult(account: String, secretKey: String) = launch({
loadState.value = LoadState.Loading
@@ -69,4 +70,33 @@
}, {
it.cause.toString().show(BaseApplication.get())
})
+
+ fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.updateUserInfo(
+ id, account, name, deptid, avatar, phone, roleid
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ updateResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/avatar_border_circle.xml b/app/src/main/res/drawable/avatar_border_circle.xml
new file mode 100644
index 0000000..41a75be
--- /dev/null
+++ b/app/src/main/res/drawable/avatar_border_circle.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
new file mode 100644
index 0000000..92ea1f6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
@@ -0,0 +1,52 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_user_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class UserDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_user_detail
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "个人资料"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ val user = it.data
+
+ userNameView.text = user.account
+ userRealNameView.text = user.name
+ userDeptView.text = user.deptName
+ userPhoneView.text = user.phone
+ ipAddressView.text = user.ipAddr
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index dba8d11..a6ae8ab 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val outResultModel = MutableLiveData()
+ val updateResult = MutableLiveData()
fun getLoginResult(account: String, secretKey: String) = launch({
loadState.value = LoadState.Loading
@@ -69,4 +70,33 @@
}, {
it.cause.toString().show(BaseApplication.get())
})
+
+ fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.updateUserInfo(
+ id, account, name, deptid, avatar, phone, roleid
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ updateResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/avatar_border_circle.xml b/app/src/main/res/drawable/avatar_border_circle.xml
new file mode 100644
index 0000000..41a75be
--- /dev/null
+++ b/app/src/main/res/drawable/avatar_border_circle.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_account.xml b/app/src/main/res/drawable/ic_account.xml
new file mode 100644
index 0000000..f0334b3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_account.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aa2699f..7ec44c5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,30 +3,47 @@
diff --git a/app/build.gradle b/app/build.gradle
index a2a60a3..0f9a4e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
signingConfigs {
release {
- storeFile file("${rootDir}/app/Inspection.jks")
+ storeFile file("/Users/a203/Desktop/AndroidProjects/MethaneInspection/app/Inspection.jks")
storePassword '123456789'
keyAlias 'appKey'
keyPassword '123456789'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5f8a9a..6f006bd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,7 @@
+
@@ -32,7 +33,7 @@
android:name=".base.BaseApplication"
android:allowBackup="true"
android:allowNativeHeapPointerTagging="false"
- android:icon="@mipmap/logo"
+ android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
@@ -53,7 +54,8 @@
android:theme="@style/Theme.BigImageActivity" />
-
+
+
diff --git a/app/src/main/assets/HelpCenterH5.html b/app/src/main/assets/HelpCenterH5.html
new file mode 100644
index 0000000..caf7c87
--- /dev/null
+++ b/app/src/main/assets/HelpCenterH5.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+1、如何新建巡检?
+ 登录APP进入系统,首页地图左边四个按钮第四个按钮即为新建巡检按钮,按照弹出对话框提示即可新建巡检任务,然后就可以手持巡检设备开始进行检测作业。
+2、如何新建事件?
+ 当巡检到异常之后,可以点击【新建事件】来记录此时此地的巡检数据,巡检结束后可以直接在【数据】页查看当时的异常数据或者在巡检系统看到原始数据。
+3、如何连接设备?
+ 首先确认手机蓝牙已打开,然后点击首页地图左边第二个按钮开始扫描附近可用的蓝牙设备,一段时间后点击扫描出来的需要连接的设备进行连接即可。
+4、地图无法正常显示或报找不到许可文件错误怎么办?
+ 手机版本原因可能部分手机默认不允许读取存储,需要进入系统设置,为应用开启读取存储的权限即可。
+5、应用所需的其他权限?
+ 获取手机信息(IMEI)的权限,为安全访问网络,此项请务必允许。
+
+
\ No newline at end of file
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
new file mode 100644
index 0000000..65bf7b8
--- /dev/null
+++ b/app/src/main/ic_launcher-playstore.png
Binary files differ
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
new file mode 100644
index 0000000..acf996d
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/List.kt
@@ -0,0 +1,16 @@
+package com.casic.birmm.inspect.extensions
+
+//将集合格式化成满足上传格式的数据
+fun List.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, l ->
+ if (index == this.size - 1) {
+ builder.append(l)
+ } else {
+ builder.append(l).append(",")
+ }
+ }
+ return builder.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
index 409ca4e..103b958 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/DataLogPageFragment.kt
@@ -1,12 +1,13 @@
package com.casic.birmm.inspect.fragment
-import android.view.View
+import android.graphics.Color
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.adapter.SubViewPagerAdapter
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_query_data_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
class DataLogPageFragment : KotlinBaseFragment() {
@@ -35,7 +36,11 @@
}
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "数据"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.setBackgroundColor(Color.WHITE)
+ statusBarView.requestLayout()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
index 9b91165..52579df 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt
@@ -13,6 +13,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.amap.api.maps.AMap
@@ -47,9 +48,9 @@
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet
import kotlinx.android.synthetic.main.fragment_map_inspect.view.*
-import kotlinx.android.synthetic.main.include_base_title.view.*
@SuppressLint("MissingPermission")
class HomePageFragment : Fragment() {
@@ -82,9 +83,12 @@
): View {
homeView = inflater.inflate(R.layout.fragment_map_inspect, container, false)
- homeView.leftBackView.visibility = View.GONE
- homeView.titleView.text = "巡检"
- homeView.rightImageView.visibility = View.VISIBLE
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = homeView.statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ homeView.statusBarView.setBackgroundColor(Color.parseColor("#D6EEFE"))
+ homeView.statusBarView.requestLayout()
vibrator = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
eventViewModel = ViewModelProvider(this)[EventViewModel::class.java]
@@ -131,7 +135,7 @@
}
private fun initEvent() {
- homeView.rightImageView.setOnClickListener {
+ homeView.addInspectionButton.setOnClickListener {
AlertInputDialog.Builder().setContext(requireContext()).setTitle("请输入巡检标签")
.setHintMessage("如:xxx区间巡检").setNegativeButton("放弃").setPositiveButton("开始巡检")
.setOnDialogButtonClickListener(object :
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
index 0a249eb..91e66ad 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/QueryInspectionFragment.kt
@@ -2,10 +2,14 @@
import android.os.Handler
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.birmm.inspect.R
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
import com.casic.birmm.inspect.vm.InspectionViewModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
@@ -27,6 +31,7 @@
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var adapter: NormalRecyclerAdapter
private lateinit var viewModel: InspectionViewModel
+ private val gson by lazy { Gson() }
override fun initLayoutView(): Int = R.layout.fragment_query_inspect
@@ -111,13 +116,27 @@
position: Int,
item: InspectListModel.DataModel.RowsModel
) {
- viewHolder.setImageResource(R.id.inspectImageView, R.mipmap.logo)
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView,"巡检人:${item.user}")
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
+ .setText(R.id.inspectUserView, "巡检人:${item.user}")
+ .setText(
+ R.id.inspectDateView,
+ "巡检时间:${item.startTime} ~ ${item.endTime}"
+ ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
}
}
+ inspectRecyclerView.addItemDecoration(
+ DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
+ )
inspectRecyclerView!!.adapter = adapter
adapter.setOnItemClickedListener(object :
NormalRecyclerAdapter.OnItemClickedListener {
diff --git a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
index 4148800..4078afe 100644
--- a/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/fragment/SettingPageFragment.kt
@@ -1,49 +1,122 @@
package com.casic.birmm.inspect.fragment
import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.net.Uri
import android.os.Vibrator
-import android.view.View
+import android.widget.LinearLayout
import androidx.lifecycle.ViewModelProvider
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
import com.casic.birmm.inspect.BuildConfig
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnImageCompressListener
+import com.casic.birmm.inspect.extensions.combineImagePath
+import com.casic.birmm.inspect.extensions.compressImage
+import com.casic.birmm.inspect.extensions.reformat
import com.casic.birmm.inspect.model.UserInfoModel
import com.casic.birmm.inspect.utils.AuthenticationHelper
+import com.casic.birmm.inspect.utils.LoadingDialogHub
import com.casic.birmm.inspect.utils.LocaleConstant
import com.casic.birmm.inspect.utils.SoundPoolHelper
+import com.casic.birmm.inspect.view.HelpCenterActivity
import com.casic.birmm.inspect.view.LoginActivity
-import com.casic.birmm.inspect.view.ShowLogActivity
+import com.casic.birmm.inspect.view.UserDetailActivity
+import com.casic.birmm.inspect.vm.UploadImageViewModel
import com.casic.birmm.inspect.vm.UserViewModel
-import com.google.gson.Gson
+import com.casic.xz.meterage.utils.GlideLoadEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
+import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
import kotlinx.android.synthetic.main.fragment_user_settings.*
-import kotlinx.android.synthetic.main.include_base_title.*
+import java.io.File
class SettingPageFragment : KotlinBaseFragment() {
- private val gson by lazy { Gson() }
private lateinit var userViewModel: UserViewModel
+ private lateinit var uploadImageViewModel: UploadImageViewModel
private lateinit var vibrator: Vibrator
+ private lateinit var user: UserInfoModel.DataModel
override fun initLayoutView(): Int = R.layout.fragment_user_settings
override fun setupTopBarLayout() {
- leftBackView.visibility = View.GONE
- titleView.text = "设置"
+ //根据不同设备状态栏高度设置statusBarView高度
+ val statusBarHeight = QMUIDisplayHelper.getStatusBarHeight(requireContext())
+ val params = statusBarView.layoutParams as LinearLayout.LayoutParams
+ params.height = statusBarHeight
+ statusBarView.requestLayout()
}
override fun initData() {
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ this.user = it.data
- val userModelJson = SaveKeyValues.getValue(LocaleConstant.USER_OBJECT, "") as String
- val userModel = gson.fromJson(userModelJson, UserInfoModel::class.java)
- val data = userModel.data
- userNameView.text = data?.name
- userPhoneView.text = data?.phone
+ userNameView.text = user.name
+ userUnitView.text = user.deptName
+ userPhoneView.text = user.phone
+
+ if (user.avatar.isNullOrBlank()) {
+ Glide.with(requireContext())
+ .load(R.mipmap.ic_launcher)
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ } else {
+ Glide.with(requireContext())
+ .load(user.avatar.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
+ }
+ userViewModel.updateResult.observe(this) {
+ if (it.code == 200) {
+ "头像更新成功".show(requireContext())
+ }
+ }
+ userViewModel.outResultModel.observe(viewLifecycleOwner) {
+ if (it.code == 200) {
+ AuthenticationHelper.removeToken()
+ requireContext().navigatePageTo()
+ //清除所有Activity
+ PageNavigationManager.finishAllActivity()
+ }
+ }
+
+ uploadImageViewModel = ViewModelProvider(this)[UploadImageViewModel::class.java]
+ uploadImageViewModel.uploadResult.observe(this) {
+ if (it.code == 200) {
+ //更新用户信息表
+ userViewModel.updateUserInfo(
+ user.id,
+ user.account,
+ user.name,
+ user.deptId,
+ it.data,
+ "",
+ user.roleList.reformat()
+ )
+
+ Glide.with(requireContext())
+ .load(it.data.combineImagePath())
+ .apply(RequestOptions.circleCropTransform())
+ .into(userAvatarView)
+ }
+ }
val isOpen = SaveKeyValues.getValue(LocaleConstant.OPEN_WARNING, false) as Boolean
warningSwitch.isChecked = isOpen
@@ -57,10 +130,88 @@
}
override fun observeRequestState() {
-
+ uploadImageViewModel.loadState.observe(this) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(requireActivity(), "头像更新中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
}
override fun initEvent() {
+ userAvatarView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(requireContext())
+ .setItemTextColor(Color.BLUE)
+ .setActionItemTitle(listOf("拍照", "相册"))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ when (position) {
+ 0 -> PictureSelector.create(context)
+ .openCamera(SelectMimeType.ofImage())
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "拍照失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ 1 -> PictureSelector.create(context)
+ .openGallery(SelectMimeType.ofImage())
+ .isGif(false)
+ .isMaxSelectEnabledMask(true)
+ .setFilterMinFileSize(100)
+ .setMaxSelectNum(1)
+ .isDisplayCamera(false)
+ .setImageEngine(GlideLoadEngine.instance)
+ .forResult(object : OnResultCallbackListener {
+ override fun onResult(result: ArrayList?) {
+ if (result == null) {
+ "选择照片失败,请重试".show(requireContext())
+ return
+ }
+ analyticalSelectResults(result[0])
+ }
+
+ override fun onCancel() {
+
+ }
+ })
+ }
+ }
+ }).build().show()
+ }
+
+ exitLoginView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(requireContext())
+ .setTitle("提示")
+ .setMessage("确定要退出吗?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ //执行退出登录操作
+ userViewModel.loginOut()
+ }
+ }).build().show()
+ }
+
+ userAccountLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
warningSwitch.setOnClickListener {
if (!vibrator.hasVibrator()) {
"设备没有震动蜂鸣器,无法打开此开关".show(requireContext())
@@ -85,35 +236,47 @@
SaveKeyValues.putValue(LocaleConstant.AUTO_RECORD, false)
}
}
- logLayout.setOnClickListener {
- requireContext().navigatePageTo()
+
+ helpLayout.setOnClickListener {
+ requireContext().navigatePageTo()
}
- loginOutButton.setOnClickListener {
+
+ updateLayout.setOnClickListener {
+ "已是最新版本,无需更新".show(requireContext())
+ }
+
+ backLayout.setOnClickListener {
AlertControlDialog.Builder()
.setContext(requireContext())
.setTitle("提示")
- .setMessage("确定要退出吗?")
+ .setMessage("是否确定拨打客服的电话?")
.setNegativeButton("取消")
.setPositiveButton("确定")
.setOnDialogButtonClickListener(object :
AlertControlDialog.OnDialogButtonClickListener {
- override fun onCancelClick() {
-
- }
-
override fun onConfirmClick() {
- //执行退出登录操作
- userViewModel.loginOut()
- userViewModel.outResultModel.observe(this@SettingPageFragment) {
- if (it.code == 200) {
- AuthenticationHelper.removeToken()
- requireContext().navigatePageTo()
- //清除所有Activity
- PageNavigationManager.finishAllActivity()
- }
- }
+ val intent = Intent()
+ intent.action = Intent.ACTION_CALL
+ intent.data = Uri.parse("tel:18310581916")
+ startActivity(intent)
}
+
+ override fun onCancelClick() {}
}).build().show()
}
}
+
+ private fun analyticalSelectResults(result: LocalMedia) {
+ //压缩图片后上传
+ result.realPath.compressImage(requireContext(), object : OnImageCompressListener {
+ override fun onSuccess(file: File) {
+ //上传图片
+ uploadImageViewModel.uploadImage(file)
+ }
+
+ override fun onError(e: Throwable) {
+ e.printStackTrace()
+ }
+ })
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
index 5f8c9bf..01865c1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/LocaleConstant.kt
@@ -17,6 +17,7 @@
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CAMERA,
+ Manifest.permission.CALL_PHONE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_SCAN,
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
index 24f130e..1281613 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitService.kt
@@ -34,6 +34,22 @@
suspend fun getLoginOutResult(@Header("token") token: String): String
/**
+ * 更新用户信息
+ */
+ @FormUrlEncoded
+ @POST("/mgr/update")
+ suspend fun updateUserInfo(
+ @Header("token") token: String,
+ @Field("id") id: String,
+ @Field("account") account: String,
+ @Field("name") name: String,
+ @Field("deptid") deptid: String,
+ @Field("avatar") avatar: String,
+ @Field("phone") phone: String,
+ @Field("roleid") roleid: String
+ ): String
+
+ /**
* 巡检记录列表
*/
@GET("/inspection/search")
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
index eea6758..4c1f278 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/retrofit/RetrofitServiceManager.kt
@@ -47,6 +47,23 @@
}
/**
+ * 更新用户信息
+ */
+ suspend fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ): String {
+ return api.updateUserInfo(
+ AuthenticationHelper.token!!, id, account, name, deptid, avatar, phone, roleid
+ )
+ }
+
+ /**
* 巡检记录列表
*/
suspend fun getInspectionList(
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
new file mode 100644
index 0000000..b943b82
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/HelpCenterActivity.kt
@@ -0,0 +1,39 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import android.webkit.WebViewClient
+import androidx.core.content.ContextCompat
+import com.casic.birmm.inspect.R
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_help_center.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+
+class HelpCenterActivity : KotlinBaseActivity() {
+ override fun initLayoutView(): Int = R.layout.activity_help_center
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "帮助中心"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ answerView.loadUrl("file:///android_asset/HelpCenterH5.html")
+ answerView.settings.defaultTextEncodingName = "utf-8"
+ answerView.webViewClient = WebViewClient()
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
index f5f0d91..6c9459a 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/LoginActivity.kt
@@ -13,10 +13,8 @@
import com.google.gson.Gson
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.writeToFile
import com.pengxh.kt.lite.utils.PageNavigationManager
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.vm.LoadState
@@ -48,6 +46,17 @@
authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java]
userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.userInfo.observe(this) { user ->
+ if (user.code == 200) {
+ //记录登录log
+ SaveKeyValues.putValue(
+ LocaleConstant.USER_OBJECT, gson.toJson(user)
+ )//保存用户对象
+
+ PageNavigationManager.finishAllActivity()
+ navigatePageTo()
+ }
+ }
}
override fun observeRequestState() {
@@ -94,18 +103,6 @@
AuthenticationHelper.saveToken(loginResult.data!!.token!!)
userViewModel.getUserInfo()
- userViewModel.userInfo.observe(this) { user ->
- if (user.code == 200) {
- //记录登录log
- "${user.data!!.name}登录成功".writeToFile(createLogFile())
- SaveKeyValues.putValue(
- LocaleConstant.USER_OBJECT, gson.toJson(user)
- )//保存用户对象
-
- PageNavigationManager.finishAllActivity()
- navigatePageTo()
- }
- }
}
}
}
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
index 876121e..da444fd 100644
--- a/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/view/MainActivity.kt
@@ -2,7 +2,6 @@
import android.view.KeyEvent
import android.view.MenuItem
-import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager
import com.amap.api.maps.MapsInitializer
@@ -14,7 +13,6 @@
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -100,8 +98,7 @@
}
override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
deleted file mode 100644
index fbb9486..0000000
--- a/app/src/main/java/com/casic/birmm/inspect/view/ShowLogActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.casic.birmm.inspect.view
-
-import androidx.core.content.ContextCompat
-import com.casic.birmm.inspect.R
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.createLogFile
-import com.pengxh.kt.lite.extensions.read
-import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
-import kotlinx.android.synthetic.main.activity_show_log.*
-import kotlinx.android.synthetic.main.include_base_title.*
-
-class ShowLogActivity : KotlinBaseActivity() {
-
- override fun initLayoutView(): Int = R.layout.activity_show_log
-
- override fun setupTopBarLayout() {
- ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
- ImmersionBar.with(this).statusBarDarkFont(false).init()
- titleView.text = "日志"
- }
-
- override fun observeRequestState() {
-
- }
-
- override fun initData() {
- userLoginLogView.text = createLogFile().read()
- }
-
- override fun initEvent() {
- leftBackView.setOnClickListener { this.finish() }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
new file mode 100644
index 0000000..92ea1f6
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/view/UserDetailActivity.kt
@@ -0,0 +1,52 @@
+package com.casic.birmm.inspect.view
+
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.ViewModelProvider
+import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.vm.UserViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import kotlinx.android.synthetic.main.activity_user_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+class UserDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var userViewModel: UserViewModel
+
+ override fun initLayoutView(): Int = R.layout.activity_user_detail
+
+ override fun setupTopBarLayout() {
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.themeColor))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+
+ titleView.text = "个人资料"
+ leftBackView.visibility = View.VISIBLE
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initData() {
+ userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo()
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ val user = it.data
+
+ userNameView.text = user.account
+ userRealNameView.text = user.name
+ userDeptView.text = user.deptName
+ userPhoneView.text = user.phone
+ ipAddressView.text = user.ipAddr
+ }
+ }
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
index dba8d11..a6ae8ab 100644
--- a/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/vm/UserViewModel.kt
@@ -25,6 +25,7 @@
val loginResult = MutableLiveData()
val userInfo = MutableLiveData()
val outResultModel = MutableLiveData()
+ val updateResult = MutableLiveData()
fun getLoginResult(account: String, secretKey: String) = launch({
loadState.value = LoadState.Loading
@@ -69,4 +70,33 @@
}, {
it.cause.toString().show(BaseApplication.get())
})
+
+ fun updateUserInfo(
+ id: String,
+ account: String,
+ name: String,
+ deptid: String,
+ avatar: String,
+ phone: String,
+ roleid: String
+ ) = launch({
+ loadState.value = LoadState.Loading
+ val response = RetrofitServiceManager.updateUserInfo(
+ id, account, name, deptid, avatar, phone, roleid
+ )
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ loadState.value = LoadState.Success
+ updateResult.value = gson.fromJson(
+ response, object : TypeToken() {}.type
+ )
+ } else {
+ loadState.value = LoadState.Fail
+ response.toErrorMessage().show(BaseApplication.get())
+ }
+ }, {
+ loadState.value = LoadState.Fail
+ it.cause.toString().show(BaseApplication.get())
+ it.printStackTrace()
+ })
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/avatar_border_circle.xml b/app/src/main/res/drawable/avatar_border_circle.xml
new file mode 100644
index 0000000..41a75be
--- /dev/null
+++ b/app/src/main/res/drawable/avatar_border_circle.xml
@@ -0,0 +1,6 @@
+
+
+
+