diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/app/src/main/res/drawable/ic_dot_blue.xml b/app/src/main/res/drawable/ic_dot_blue.xml
new file mode 100644
index 0000000..5e709c2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_blue.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/app/src/main/res/drawable/ic_dot_blue.xml b/app/src/main/res/drawable/ic_dot_blue.xml
new file mode 100644
index 0000000..5e709c2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_blue.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_dot_green.xml b/app/src/main/res/drawable/ic_dot_green.xml
new file mode 100644
index 0000000..f2638aa
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_green.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/app/src/main/res/drawable/ic_dot_blue.xml b/app/src/main/res/drawable/ic_dot_blue.xml
new file mode 100644
index 0000000..5e709c2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_blue.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_dot_green.xml b/app/src/main/res/drawable/ic_dot_green.xml
new file mode 100644
index 0000000..f2638aa
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_green.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/layout/item_event_rv_l.xml b/app/src/main/res/layout/item_event_rv_l.xml
index e7d44d7..9e24bfd 100644
--- a/app/src/main/res/layout/item_event_rv_l.xml
+++ b/app/src/main/res/layout/item_event_rv_l.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_5"
- android:layout_marginBottom="@dimen/dp_5"
+ android:layout_marginTop="@dimen/dp_5"
android:background="@drawable/bg_solid_layout_white_radius_5"
android:orientation="horizontal"
android:padding="@dimen/dp_5">
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/app/src/main/res/drawable/ic_dot_blue.xml b/app/src/main/res/drawable/ic_dot_blue.xml
new file mode 100644
index 0000000..5e709c2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_blue.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_dot_green.xml b/app/src/main/res/drawable/ic_dot_green.xml
new file mode 100644
index 0000000..f2638aa
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_green.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/layout/item_event_rv_l.xml b/app/src/main/res/layout/item_event_rv_l.xml
index e7d44d7..9e24bfd 100644
--- a/app/src/main/res/layout/item_event_rv_l.xml
+++ b/app/src/main/res/layout/item_event_rv_l.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_5"
- android:layout_marginBottom="@dimen/dp_5"
+ android:layout_marginTop="@dimen/dp_5"
android:background="@drawable/bg_solid_layout_white_radius_5"
android:orientation="horizontal"
android:padding="@dimen/dp_5">
diff --git a/app/src/main/res/layout/item_inspect_rv_l.xml b/app/src/main/res/layout/item_inspect_rv_l.xml
index f2b0626..11f13e6 100644
--- a/app/src/main/res/layout/item_inspect_rv_l.xml
+++ b/app/src/main/res/layout/item_inspect_rv_l.xml
@@ -1,59 +1,172 @@
+
+
+ android:orientation="horizontal">
-
+
-
+
-
+
+
-
+
+
+
+
+
+
+
+
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/app/src/main/res/drawable/ic_dot_blue.xml b/app/src/main/res/drawable/ic_dot_blue.xml
new file mode 100644
index 0000000..5e709c2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_blue.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_dot_green.xml b/app/src/main/res/drawable/ic_dot_green.xml
new file mode 100644
index 0000000..f2638aa
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_green.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/layout/item_event_rv_l.xml b/app/src/main/res/layout/item_event_rv_l.xml
index e7d44d7..9e24bfd 100644
--- a/app/src/main/res/layout/item_event_rv_l.xml
+++ b/app/src/main/res/layout/item_event_rv_l.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_5"
- android:layout_marginBottom="@dimen/dp_5"
+ android:layout_marginTop="@dimen/dp_5"
android:background="@drawable/bg_solid_layout_white_radius_5"
android:orientation="horizontal"
android:padding="@dimen/dp_5">
diff --git a/app/src/main/res/layout/item_inspect_rv_l.xml b/app/src/main/res/layout/item_inspect_rv_l.xml
index f2b0626..11f13e6 100644
--- a/app/src/main/res/layout/item_inspect_rv_l.xml
+++ b/app/src/main/res/layout/item_inspect_rv_l.xml
@@ -1,59 +1,172 @@
+
+
+ android:orientation="horizontal">
-
+
-
+
-
+
+
-
+
+
+
+
+
+
+
+
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/single_fragment_query_event.xml b/app/src/main/res/layout/single_fragment_query_event.xml
index 47ef620..f2d7b92 100644
--- a/app/src/main/res/layout/single_fragment_query_event.xml
+++ b/app/src/main/res/layout/single_fragment_query_event.xml
@@ -4,7 +4,7 @@
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/white"
+ android:background="@color/mainBackground"
android:orientation="vertical">
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e7cbf98..60406bc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -20,6 +20,9 @@
+
+
+
@@ -70,7 +73,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 3127c49..067a62a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -91,7 +91,7 @@
//图片选择框架
implementation 'io.github.lucksiege:pictureselector:v3.0.4'
//官方Json解析库
- implementation 'com.google.code.gson:gson:2.9.0'
+ implementation 'com.google.code.gson:gson:2.10.1'
//Kotlin协程
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'
//MVVM+LiveData
@@ -112,9 +112,11 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
- implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
- //高德导航、定位、地图三合一
- implementation 'com.amap.api:navi-3dmap:latest.integration'
+ implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.11'
+ //高德地图
+ implementation 'com.amap.api:3dmap:latest.integration'
+ //高德地图搜索
+ implementation 'com.amap.api:search:8.1.0'
//绕过Android 11反射限制
implementation 'com.github.tiann:FreeReflection:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
new file mode 100644
index 0000000..3f2ca80
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnDistanceSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnDistanceSearchListener {
+ fun onDistanceSearched(distance: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
new file mode 100644
index 0000000..3f1448b
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/callback/OnGeocodeSearchListener.kt
@@ -0,0 +1,5 @@
+package com.casic.birmm.inspect.callback
+
+interface OnGeocodeSearchListener {
+ fun onRegionCodeSearched(address: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
index 12c92e6..bea64eb 100644
--- a/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ArrayList.kt
@@ -1,5 +1,13 @@
package com.casic.birmm.inspect.extensions
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.route.DistanceSearch
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.model.RoutePointModel
+import java.text.DecimalFormat
+
+
/**
* ArrayList扩展方法
*/
@@ -25,4 +33,39 @@
result.add(it)
}
return result
+}
+
+private val distanceSearch by lazy { DistanceSearch(BaseApplication.get()) }
+private val distanceQuery by lazy { DistanceSearch.DistanceQuery() }
+private val decimalFormat by lazy { DecimalFormat("#.##") }
+
+fun ArrayList.calculateDistance(listener: OnDistanceSearchListener) {
+ if (this.isEmpty()) {
+ listener.onDistanceSearched("0.00")
+ }
+
+ val last = this.last()
+ val dest = LatLonPoint(last.lat, last.lng)
+
+ //去掉最后一个点
+ this.removeLast()
+ val latLonPoints: ArrayList = ArrayList()
+ this.forEach {
+ latLonPoints.add(LatLonPoint(it.lat, it.lng))
+ }
+
+ distanceQuery.origins = latLonPoints
+ distanceQuery.destination = dest
+ distanceQuery.type = DistanceSearch.TYPE_WALK_DISTANCE
+ distanceSearch.calculateRouteDistanceAsyn(distanceQuery)
+ distanceSearch.setDistanceSearchListener { distanceResult, errorCode ->
+ if (errorCode == 1000) {
+ //DistanceResult返回的是单位是米
+ val temp = distanceResult.distanceResults[0].distance
+ val distance = temp / 1000
+ listener.onDistanceSearched(decimalFormat.format(distance))
+ } else {
+ listener.onDistanceSearched("0.00")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
new file mode 100644
index 0000000..5ed1321
--- /dev/null
+++ b/app/src/main/java/com/casic/birmm/inspect/extensions/LatLng.kt
@@ -0,0 +1,28 @@
+package com.casic.birmm.inspect.extensions
+
+import com.amap.api.maps.model.LatLng
+import com.amap.api.services.core.LatLonPoint
+import com.amap.api.services.geocoder.GeocodeResult
+import com.amap.api.services.geocoder.GeocodeSearch
+import com.amap.api.services.geocoder.RegeocodeQuery
+import com.amap.api.services.geocoder.RegeocodeResult
+import com.casic.birmm.inspect.base.BaseApplication
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+
+private val geocoderSearch by lazy { GeocodeSearch(BaseApplication.get()) }
+
+fun LatLng.toChinese(listener: OnGeocodeSearchListener) {
+ val queryParam = RegeocodeQuery(
+ LatLonPoint(this.latitude, this.longitude), 200f, GeocodeSearch.AMAP
+ )
+ geocoderSearch.getFromLocationAsyn(queryParam)
+ geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener {
+ override fun onRegeocodeSearched(regeocodeResult: RegeocodeResult, code: Int) {
+ if (code == 1000) {
+ listener.onRegionCodeSearched(regeocodeResult.regeocodeAddress.formatAddress)
+ }
+ }
+
+ override fun onGeocodeSearched(geocodeResult: GeocodeResult?, i: Int) {}
+ })
+}
\ No newline at end of file
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 477e914..b0c666a 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
@@ -1,9 +1,15 @@
package com.casic.birmm.inspect.fragment
import android.os.Handler
+import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.view.InspectionRouteActivity
@@ -85,7 +91,6 @@
override fun onResume() {
super.onResume()
- pageIndex = 1
getInspectionList()
}
@@ -115,17 +120,38 @@
val routeModels = if (routeJson.isEmpty()) {
ArrayList()
} else {
- gson.fromJson>(
+ gson.fromJson>(
routeJson,
- object : TypeToken>() {}.type
+ object : TypeToken>() {}.type
)
}
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectUserView, "巡检人:${item.user}")
- .setText(
- R.id.inspectDateView, "巡检时间:${item.startTime} ~ ${item.endTime}"
- ).setText(R.id.inspectPointView, "巡检点数:${routeModels.size}个")
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
}
}
inspectRecyclerView.addItemDecoration(
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
index 812d329..f3de4f3 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryEventFragment.kt
@@ -1,5 +1,7 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.birmm.inspect.R
@@ -11,13 +13,72 @@
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.toJson
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_event.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class QueryEventFragment : KotlinBaseFragment() {
+class QueryEventFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081102) {
+ dataBeans = DataBaseManager.get.loadEvent()
+ } else if (msg.what == 2023081101) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val eventListAdapter =
+ object : NormalRecyclerAdapter(
+ R.layout.item_event_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: EventListModel.DataModel.RowsModel
+ ) {
+ if (!item.images.isNullOrBlank()) {
+ val imageArray = item.images!!.split(",")
+ lifecycleScope.launch(Dispatchers.Main) {
+ try {
+ val drawable = withContext(Dispatchers.IO) {
+ Glide.with(requireContext()).load(imageArray[0])
+ .submit()
+ .get()
+ }
+ viewHolder.setImageResource(R.id.inspectImageView, drawable)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.inspectTypeView, "类型:${item.type}")
+ .setText(R.id.inspectDateView, "时间:${item.createTime}")
+ }
+ }
+ eventRecyclerView.adapter = eventListAdapter
+ eventListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int,
+ t: EventListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.toJson())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_event
@@ -30,50 +91,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadEvent()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val eventListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_event_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: EventListModel.DataModel.RowsModel
- ) {
- if (!item.images.isNullOrBlank()) {
- val imageArray = item.images!!.split(",")
- lifecycleScope.launch(Dispatchers.Main) {
- try {
- val drawable = withContext(Dispatchers.IO) {
- Glide.with(requireContext()).load(imageArray[0]).submit()
- .get()
- }
- viewHolder.setImageResource(R.id.inspectImageView, drawable)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- }
-
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectTypeView, "类型:${item.type}")
- .setText(R.id.inspectDateView, "时间:${item.createTime}")
- }
- }
- eventRecyclerView.adapter = eventListAdapter
- eventListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: EventListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.toJson())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadEvent()
+ weakReferenceHandler.sendEmptyMessage(2023081101)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
index f41008a..7bc6bea 100644
--- a/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/single/fragment/QueryInspectionFragment.kt
@@ -1,17 +1,104 @@
package com.casic.birmm.inspect.single.fragment
+import android.os.Handler
+import android.os.Message
+import android.widget.TextView
+import com.amap.api.maps.model.LatLng
import com.casic.birmm.inspect.R
+import com.casic.birmm.inspect.callback.OnDistanceSearchListener
+import com.casic.birmm.inspect.callback.OnGeocodeSearchListener
+import com.casic.birmm.inspect.extensions.calculateDistance
+import com.casic.birmm.inspect.extensions.toChinese
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.model.RoutePointModel
import com.casic.birmm.inspect.single.view.InspectionRouteActivity
import com.casic.birmm.inspect.utils.DataBaseManager
+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
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.include_empty_view.*
import kotlinx.android.synthetic.main.single_fragment_query_inspect.*
-class QueryInspectionFragment : KotlinBaseFragment() {
+class QueryInspectionFragment : KotlinBaseFragment(), Handler.Callback {
+
+ private val gson by lazy { Gson() }
+ private var dataBeans: MutableList = ArrayList()
+
+ companion object {
+ lateinit var weakReferenceHandler: WeakReferenceHandler
+ }
+
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2023081202) {
+ dataBeans = DataBaseManager.get.loadInspection()
+ } else if (msg.what == 2023081201) {
+ if (dataBeans.size == 0) {
+ emptyView.show("抱歉,无法查询到相关记录", null)
+ } else {
+ emptyView.hide()
+ val inspectListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_inspect_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: InspectListModel.DataModel.RowsModel
+ ) {
+ val routeJson = item.routes!!
+ val routeModels = if (routeJson.isEmpty()) {
+ ArrayList()
+ } else {
+ gson.fromJson>(
+ routeJson,
+ object : TypeToken>() {}.type
+ )
+ }
+
+ val startLocationView = viewHolder.getView(R.id.startLocationView)
+ val endLocationView = viewHolder.getView(R.id.endLocationView)
+ LatLng(item.startLat, item.startLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ startLocationView.text = address
+ }
+ })
+
+ LatLng(item.endLat, item.endLng).toChinese(object :
+ OnGeocodeSearchListener {
+ override fun onRegionCodeSearched(address: String) {
+ endLocationView.text = address
+ }
+ })
+
+ val distanceView = viewHolder.getView(R.id.distanceView)
+ routeModels.calculateDistance(object : OnDistanceSearchListener {
+ override fun onDistanceSearched(distance: String) {
+ distanceView.text = distance
+ }
+ })
+
+ viewHolder.setText(R.id.inspectMsgView, item.name)
+ .setText(R.id.startTimeView, item.startTime)
+ .setText(R.id.endTimeView, item.endTime)
+ }
+ }
+ inspectRecyclerView.adapter = inspectListAdapter
+ inspectListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: InspectListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id.toString())
+ }
+ })
+ }
+ }
+ return true
+ }
override fun initLayoutView(): Int = R.layout.single_fragment_query_inspect
@@ -24,35 +111,16 @@
}
override fun initData() {
- val dataBeans = DataBaseManager.get.loadInspection()
- if (dataBeans.size == 0) {
- emptyView.show("抱歉,无法查询到相关记录", null)
- } else {
- emptyView.hide()
- val inspectListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_inspect_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder,
- position: Int,
- item: InspectListModel.DataModel.RowsModel
- ) {
- viewHolder.setText(R.id.inspectMsgView, item.name)
- .setText(R.id.inspectDateView, "上报时间:${item.date}")
- }
- }
- inspectRecyclerView.adapter = inspectListAdapter
- inspectListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(position: Int, t: InspectListModel.DataModel.RowsModel) {
- requireContext().navigatePageTo(t.id.toString())
- }
- })
- }
+ weakReferenceHandler = WeakReferenceHandler(this)
}
override fun initEvent() {
}
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.loadInspection()
+ weakReferenceHandler.sendEmptyMessage(2023081201)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
index 72b7238..8569dc1 100644
--- a/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
+++ b/app/src/main/java/com/casic/birmm/inspect/utils/DataBaseManager.kt
@@ -9,6 +9,8 @@
import com.casic.birmm.inspect.model.InspectDetailModel
import com.casic.birmm.inspect.model.InspectEventModel
import com.casic.birmm.inspect.model.InspectListModel
+import com.casic.birmm.inspect.single.fragment.QueryEventFragment
+import com.casic.birmm.inspect.single.fragment.QueryInspectionFragment
class DataBaseManager private constructor() {
@@ -56,6 +58,8 @@
if (!isInspectionExist(inspectionId)) {
inspectionDao.insert(bean)
+ //通知列表刷新
+ QueryInspectionFragment.weakReferenceHandler.sendEmptyMessage(2023081202)
}
}
@@ -204,6 +208,8 @@
bean.user = "超级管理员"
if (!isEventExist(taskId)) {
taskEventDao.insert(bean)
+ //通知列表刷新
+ QueryEventFragment.weakReferenceHandler.sendEmptyMessage(2023081102)
}
}
diff --git a/app/src/main/res/drawable/ic_dot_blue.xml b/app/src/main/res/drawable/ic_dot_blue.xml
new file mode 100644
index 0000000..5e709c2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_dot_blue.xml
@@ -0,0 +1,12 @@
+
+