diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
index 8dc5aba..5775599 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -1,21 +1,22 @@
package com.casic.br.operationsite.view
+import android.graphics.Color
import android.os.Bundle
import android.os.Handler
+import android.os.Message
import android.view.View
import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.ActivityAlarmListBinding
import com.casic.br.operationsite.extensions.combineImagePath
import com.casic.br.operationsite.extensions.formatToDate
import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.AlarmListModel
import com.casic.br.operationsite.vm.AlarmViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.diffCurrentTime
import com.pengxh.kt.lite.extensions.navigatePageTo
@@ -24,8 +25,9 @@
import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-class AlarmListActivity : KotlinBaseActivity() {
+class AlarmListActivity : KotlinBaseActivity(), Handler.Callback {
+ private val context = this@AlarmListActivity
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var alarmListAdapter: NormalRecyclerAdapter
private lateinit var alarmViewModel: AlarmViewModel
@@ -51,39 +53,9 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(callback)
+ weakReferenceHandler = WeakReferenceHandler(this)
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- }
-
- override fun observeRequestState() {
- alarmViewModel.loadState.observe(this) {
- if (!isLoadMore && !isRefresh) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
- }
-
- override fun onResume() {
- super.onResume()
getAlarmListByPage()
- }
-
- override fun initEvent() {
- binding.alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListByPage()
- }
- binding.alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListByPage()
- }
-
alarmViewModel.alarmModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data?.rows!!
@@ -112,77 +84,92 @@
}
}
+ override fun observeRequestState() {
+ alarmViewModel.loadState.observe(this) {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ }
+
+ override fun initEvent() {
+ binding.alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListByPage()
+ }
+ binding.alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListByPage()
+ }
+ }
+
private fun getAlarmListByPage() {
alarmViewModel.getAlarmListByPage(this, keywords, pageIndex)
}
- private val callback = Handler.Callback {
- if (it.what == 2022071201) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- getAlarmListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- alarmListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_alarm_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: AlarmListModel.DataModel.RowsModel
- ) {
- val deltaT = item.alarmTime.diffCurrentTime()
- val diffTime = if (deltaT < 24) {
- "${deltaT}小时前"
- } else {
- item.alarmTime.formatToDate()
- }
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022071201) {
+ alarmListAdapter = object : NormalRecyclerAdapter(
+ R.layout.item_alarm_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: AlarmListModel.DataModel.RowsModel
+ ) {
+ val deltaT = item.alarmTime.diffCurrentTime()
+ val diffTime = if (deltaT < 24) {
+ "${deltaT}小时前"
+ } else {
+ item.alarmTime.formatToDate()
+ }
- val color = when (item.alarmStatusName) {
- "正在报警" -> R.color.redTextColor.convertColor(this@AlarmListActivity)
- "手动消警" -> R.color.greenColor.convertColor(this@AlarmListActivity)
- else -> R.color.hintTextColor.convertColor(this@AlarmListActivity)
- }
+ val color = when (item.alarmStatusName) {
+ "正在报警" -> R.color.redTextColor.convertColor(context)
+ "手动消警" -> R.color.greenColor.convertColor(context)
+ else -> R.color.hintTextColor.convertColor(context)
+ }
- viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
- .setBackgroundColor(R.id.alarmStatusView, color)
- .setText(R.id.alarmContentView, item.alarmContent)
- .setText(R.id.workRoadView, item.workRoad)
- .setText(R.id.alarmTimeView, diffTime)
- .setImageResource(
- R.id.alarmImageView, item.alarmImage.combineImagePath()
- )
- .setOnClickListener(R.id.alarmImageView) {
- navigatePageTo(
- 0, arrayListOf(item.alarmImage.combineImagePath())
- )
- }
- if (item.alarmType == "2") {
- viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
- } else {
- viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
- .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
- }
+ viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
+ .setBackgroundColor(R.id.alarmStatusView, color)
+ .setText(R.id.alarmContentView, item.alarmContent)
+ .setText(R.id.workRoadView, item.workRoad)
+ .setText(R.id.alarmTimeView, diffTime)
+ .setImageResource(R.id.alarmImageView, item.alarmImage.combineImagePath())
+ .setOnClickListener(R.id.alarmImageView) {
+ navigatePageTo(
+ 0, arrayListOf(item.alarmImage.combineImagePath())
+ )
}
+ if (item.alarmType == "2") {
+ viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
+ .setVisibility(R.id.alarmImageView, View.VISIBLE)
+ } else {
+ viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
+ .setVisibility(R.id.alarmImageView, View.GONE)
+ .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
}
- binding.alarmRecyclerView.addItemDecoration(
- DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
- )
- binding.alarmRecyclerView.adapter = alarmListAdapter
- alarmListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: AlarmListModel.DataModel.RowsModel
- ) {
-// navigatePageTo(t.id)
- "未实现".show(this@AlarmListActivity)
- }
- })
+ }
}
+ binding.alarmRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.alarmRecyclerView.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: AlarmListModel.DataModel.RowsModel
+ ) {
+ //TODO
+// navigatePageTo(t.id)
+ }
+ })
}
- true
+ return true
}
/**
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
index 8dc5aba..5775599 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -1,21 +1,22 @@
package com.casic.br.operationsite.view
+import android.graphics.Color
import android.os.Bundle
import android.os.Handler
+import android.os.Message
import android.view.View
import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.ActivityAlarmListBinding
import com.casic.br.operationsite.extensions.combineImagePath
import com.casic.br.operationsite.extensions.formatToDate
import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.AlarmListModel
import com.casic.br.operationsite.vm.AlarmViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.diffCurrentTime
import com.pengxh.kt.lite.extensions.navigatePageTo
@@ -24,8 +25,9 @@
import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-class AlarmListActivity : KotlinBaseActivity() {
+class AlarmListActivity : KotlinBaseActivity(), Handler.Callback {
+ private val context = this@AlarmListActivity
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var alarmListAdapter: NormalRecyclerAdapter
private lateinit var alarmViewModel: AlarmViewModel
@@ -51,39 +53,9 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(callback)
+ weakReferenceHandler = WeakReferenceHandler(this)
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- }
-
- override fun observeRequestState() {
- alarmViewModel.loadState.observe(this) {
- if (!isLoadMore && !isRefresh) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
- }
-
- override fun onResume() {
- super.onResume()
getAlarmListByPage()
- }
-
- override fun initEvent() {
- binding.alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListByPage()
- }
- binding.alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListByPage()
- }
-
alarmViewModel.alarmModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data?.rows!!
@@ -112,77 +84,92 @@
}
}
+ override fun observeRequestState() {
+ alarmViewModel.loadState.observe(this) {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ }
+
+ override fun initEvent() {
+ binding.alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListByPage()
+ }
+ binding.alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListByPage()
+ }
+ }
+
private fun getAlarmListByPage() {
alarmViewModel.getAlarmListByPage(this, keywords, pageIndex)
}
- private val callback = Handler.Callback {
- if (it.what == 2022071201) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- getAlarmListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- alarmListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_alarm_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: AlarmListModel.DataModel.RowsModel
- ) {
- val deltaT = item.alarmTime.diffCurrentTime()
- val diffTime = if (deltaT < 24) {
- "${deltaT}小时前"
- } else {
- item.alarmTime.formatToDate()
- }
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022071201) {
+ alarmListAdapter = object : NormalRecyclerAdapter(
+ R.layout.item_alarm_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: AlarmListModel.DataModel.RowsModel
+ ) {
+ val deltaT = item.alarmTime.diffCurrentTime()
+ val diffTime = if (deltaT < 24) {
+ "${deltaT}小时前"
+ } else {
+ item.alarmTime.formatToDate()
+ }
- val color = when (item.alarmStatusName) {
- "正在报警" -> R.color.redTextColor.convertColor(this@AlarmListActivity)
- "手动消警" -> R.color.greenColor.convertColor(this@AlarmListActivity)
- else -> R.color.hintTextColor.convertColor(this@AlarmListActivity)
- }
+ val color = when (item.alarmStatusName) {
+ "正在报警" -> R.color.redTextColor.convertColor(context)
+ "手动消警" -> R.color.greenColor.convertColor(context)
+ else -> R.color.hintTextColor.convertColor(context)
+ }
- viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
- .setBackgroundColor(R.id.alarmStatusView, color)
- .setText(R.id.alarmContentView, item.alarmContent)
- .setText(R.id.workRoadView, item.workRoad)
- .setText(R.id.alarmTimeView, diffTime)
- .setImageResource(
- R.id.alarmImageView, item.alarmImage.combineImagePath()
- )
- .setOnClickListener(R.id.alarmImageView) {
- navigatePageTo(
- 0, arrayListOf(item.alarmImage.combineImagePath())
- )
- }
- if (item.alarmType == "2") {
- viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
- } else {
- viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
- .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
- }
+ viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
+ .setBackgroundColor(R.id.alarmStatusView, color)
+ .setText(R.id.alarmContentView, item.alarmContent)
+ .setText(R.id.workRoadView, item.workRoad)
+ .setText(R.id.alarmTimeView, diffTime)
+ .setImageResource(R.id.alarmImageView, item.alarmImage.combineImagePath())
+ .setOnClickListener(R.id.alarmImageView) {
+ navigatePageTo(
+ 0, arrayListOf(item.alarmImage.combineImagePath())
+ )
}
+ if (item.alarmType == "2") {
+ viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
+ .setVisibility(R.id.alarmImageView, View.VISIBLE)
+ } else {
+ viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
+ .setVisibility(R.id.alarmImageView, View.GONE)
+ .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
}
- binding.alarmRecyclerView.addItemDecoration(
- DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
- )
- binding.alarmRecyclerView.adapter = alarmListAdapter
- alarmListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: AlarmListModel.DataModel.RowsModel
- ) {
-// navigatePageTo(t.id)
- "未实现".show(this@AlarmListActivity)
- }
- })
+ }
}
+ binding.alarmRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.alarmRecyclerView.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: AlarmListModel.DataModel.RowsModel
+ ) {
+ //TODO
+// navigatePageTo(t.id)
+ }
+ })
}
- true
+ return true
}
/**
diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
index 6fc4cf6..74da7c2 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
@@ -63,7 +63,7 @@
override fun setupTopBarLayout() {
binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleInclude.titleView.text = "摄像头参数"
+ binding.titleInclude.titleView.text = "摄像头区域配置"
binding.titleInclude.rightOptionView.text = "重画"
binding.titleInclude.rightOptionView.setOnClickListener {
binding.regionView.clearRoutePath()
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
index 8dc5aba..5775599 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -1,21 +1,22 @@
package com.casic.br.operationsite.view
+import android.graphics.Color
import android.os.Bundle
import android.os.Handler
+import android.os.Message
import android.view.View
import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.ActivityAlarmListBinding
import com.casic.br.operationsite.extensions.combineImagePath
import com.casic.br.operationsite.extensions.formatToDate
import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.AlarmListModel
import com.casic.br.operationsite.vm.AlarmViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.diffCurrentTime
import com.pengxh.kt.lite.extensions.navigatePageTo
@@ -24,8 +25,9 @@
import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-class AlarmListActivity : KotlinBaseActivity() {
+class AlarmListActivity : KotlinBaseActivity(), Handler.Callback {
+ private val context = this@AlarmListActivity
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var alarmListAdapter: NormalRecyclerAdapter
private lateinit var alarmViewModel: AlarmViewModel
@@ -51,39 +53,9 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(callback)
+ weakReferenceHandler = WeakReferenceHandler(this)
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- }
-
- override fun observeRequestState() {
- alarmViewModel.loadState.observe(this) {
- if (!isLoadMore && !isRefresh) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
- }
-
- override fun onResume() {
- super.onResume()
getAlarmListByPage()
- }
-
- override fun initEvent() {
- binding.alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListByPage()
- }
- binding.alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListByPage()
- }
-
alarmViewModel.alarmModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data?.rows!!
@@ -112,77 +84,92 @@
}
}
+ override fun observeRequestState() {
+ alarmViewModel.loadState.observe(this) {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ }
+
+ override fun initEvent() {
+ binding.alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListByPage()
+ }
+ binding.alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListByPage()
+ }
+ }
+
private fun getAlarmListByPage() {
alarmViewModel.getAlarmListByPage(this, keywords, pageIndex)
}
- private val callback = Handler.Callback {
- if (it.what == 2022071201) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- getAlarmListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- alarmListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_alarm_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: AlarmListModel.DataModel.RowsModel
- ) {
- val deltaT = item.alarmTime.diffCurrentTime()
- val diffTime = if (deltaT < 24) {
- "${deltaT}小时前"
- } else {
- item.alarmTime.formatToDate()
- }
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022071201) {
+ alarmListAdapter = object : NormalRecyclerAdapter(
+ R.layout.item_alarm_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: AlarmListModel.DataModel.RowsModel
+ ) {
+ val deltaT = item.alarmTime.diffCurrentTime()
+ val diffTime = if (deltaT < 24) {
+ "${deltaT}小时前"
+ } else {
+ item.alarmTime.formatToDate()
+ }
- val color = when (item.alarmStatusName) {
- "正在报警" -> R.color.redTextColor.convertColor(this@AlarmListActivity)
- "手动消警" -> R.color.greenColor.convertColor(this@AlarmListActivity)
- else -> R.color.hintTextColor.convertColor(this@AlarmListActivity)
- }
+ val color = when (item.alarmStatusName) {
+ "正在报警" -> R.color.redTextColor.convertColor(context)
+ "手动消警" -> R.color.greenColor.convertColor(context)
+ else -> R.color.hintTextColor.convertColor(context)
+ }
- viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
- .setBackgroundColor(R.id.alarmStatusView, color)
- .setText(R.id.alarmContentView, item.alarmContent)
- .setText(R.id.workRoadView, item.workRoad)
- .setText(R.id.alarmTimeView, diffTime)
- .setImageResource(
- R.id.alarmImageView, item.alarmImage.combineImagePath()
- )
- .setOnClickListener(R.id.alarmImageView) {
- navigatePageTo(
- 0, arrayListOf(item.alarmImage.combineImagePath())
- )
- }
- if (item.alarmType == "2") {
- viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
- } else {
- viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
- .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
- }
+ viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
+ .setBackgroundColor(R.id.alarmStatusView, color)
+ .setText(R.id.alarmContentView, item.alarmContent)
+ .setText(R.id.workRoadView, item.workRoad)
+ .setText(R.id.alarmTimeView, diffTime)
+ .setImageResource(R.id.alarmImageView, item.alarmImage.combineImagePath())
+ .setOnClickListener(R.id.alarmImageView) {
+ navigatePageTo(
+ 0, arrayListOf(item.alarmImage.combineImagePath())
+ )
}
+ if (item.alarmType == "2") {
+ viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
+ .setVisibility(R.id.alarmImageView, View.VISIBLE)
+ } else {
+ viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
+ .setVisibility(R.id.alarmImageView, View.GONE)
+ .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
}
- binding.alarmRecyclerView.addItemDecoration(
- DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
- )
- binding.alarmRecyclerView.adapter = alarmListAdapter
- alarmListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: AlarmListModel.DataModel.RowsModel
- ) {
-// navigatePageTo(t.id)
- "未实现".show(this@AlarmListActivity)
- }
- })
+ }
}
+ binding.alarmRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.alarmRecyclerView.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: AlarmListModel.DataModel.RowsModel
+ ) {
+ //TODO
+// navigatePageTo(t.id)
+ }
+ })
}
- true
+ return true
}
/**
diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
index 6fc4cf6..74da7c2 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
@@ -63,7 +63,7 @@
override fun setupTopBarLayout() {
binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleInclude.titleView.text = "摄像头参数"
+ binding.titleInclude.titleView.text = "摄像头区域配置"
binding.titleInclude.rightOptionView.text = "重画"
binding.titleInclude.rightOptionView.setOnClickListener {
binding.regionView.clearRoutePath()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
new file mode 100644
index 0000000..82c63f9
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -0,0 +1,182 @@
+package com.casic.br.operationsite.view
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import android.net.Uri
+import android.net.wifi.WifiManager
+import android.net.wifi.WifiNetworkSpecifier
+import android.os.Build
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
+import com.casic.br.operationsite.extensions.initImmersionBar
+import com.casic.br.operationsite.extensions.reformatFloatArray
+import com.casic.br.operationsite.utils.DeviceType
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.RuntimeCache
+import com.casic.br.operationsite.vm.RegionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+
+class VideoBoundaryActivity : KotlinBaseActivity() {
+
+ private val context = this@VideoBoundaryActivity
+ private val wifiManager by lazy { getSystemService() }
+ private val wifiSsids = ArrayList()
+ private val cameraItems = ArrayList()
+ private var connectivityManager: ConnectivityManager? = null
+ private var isStarted = false
+ private lateinit var regionViewModel: RegionViewModel
+
+ override fun initEvent() {
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
+
+ val bottomActionSheet = BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(cameraItems)
+ .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ binding.configSelectView.text = cameraItems[position]
+ //切换摄像头的时候需要重新读取RTSP流
+ binding.videoSurfaceView.stopPlayback()
+ binding.videoSurfaceView.clearFocus()
+ isStarted = false
+ binding.videoSurfaceView.setVideoURI(Uri.parse("rtsp://192.168.118.213:554/live/site"))
+ }
+ }).build()
+ binding.configSelectView.setOnClickListener { bottomActionSheet.show() }
+
+ binding.netSelectView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(wifiSsids)
+ .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ binding.netSelectView.text = wifiSsids[position]
+
+ //连接wifi
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ val specifier = WifiNetworkSpecifier.Builder()
+ .setSsid(wifiSsids[position])
+ .setWpa2Passphrase(LocaleConstant.WIFI_PASSWORD)
+ .build()
+
+ val request = NetworkRequest.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .setNetworkSpecifier(specifier)
+ .build()
+
+ connectivityManager = context.getSystemService(
+ Context.CONNECTIVITY_SERVICE
+ ) as ConnectivityManager
+ connectivityManager?.requestNetwork(request, networkCallback)
+ }
+ }
+ }).build().show()
+ }
+
+ binding.startRtspButton.setOnClickListener {
+ if (isStarted) {
+ binding.videoSurfaceView.stopPlayback()
+ binding.videoSurfaceView.clearFocus()
+ isStarted = false
+ binding.startRtspButton.text = "打开摄像头"
+ } else {
+ //播放RTSP流
+ binding.videoSurfaceView.setVideoURI(Uri.parse("rtsp://192.168.118.213:554/live/site"))
+ }
+ }
+
+ binding.videoSurfaceView.setOnPreparedListener {
+ binding.videoSurfaceView.requestFocus()
+ binding.videoSurfaceView.start()
+ isStarted = true
+ binding.startRtspButton.text = "关闭摄像头"
+ }
+
+ binding.saveCameraRegionButton.setOnClickListener {
+ val region = binding.regionView.getConfirmedPoints()
+ val data = region.reformatFloatArray()
+
+ regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+ }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ val params = binding.fragmentContainer.layoutParams
+ params.width = getScreenWidth()
+ params.height = ((9 / 16f) * params.width).toInt()
+ binding.fragmentContainer.layoutParams = params
+
+ RuntimeCache.deviceModels.forEach {
+ if (it.deviceType == DeviceType.CAMERA) {
+ cameraItems.add("${it.host}:${it.port}")
+ }
+ }
+ binding.configSelectView.text = cameraItems[0]
+
+ //获取wifi列表
+ wifiSsids.clear()
+ wifiManager?.scanResults?.forEach { res ->
+ //只要YTJ-010002
+ if (res.SSID == "YTJ-010002") {
+ wifiSsids.add(res.SSID)
+ }
+ }
+
+ regionViewModel = ViewModelProvider(this)[RegionViewModel::class.java]
+ regionViewModel.postResult.observe(this) {
+ if (it.code == 200) {
+ "区域配置成功".show(this)
+ finish()
+ }
+ }
+ }
+
+ override fun initViewBinding(): ActivityVideoBoundaryBinding {
+ return ActivityVideoBoundaryBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
+
+ binding.titleInclude.titleView.text = "摄像头区域配置"
+ binding.titleInclude.rightOptionView.text = "重画"
+ binding.titleInclude.rightOptionView.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+ }
+
+ private val networkCallback = object : ConnectivityManager.NetworkCallback() {
+ override fun onAvailable(network: Network) {
+ super.onAvailable(network)
+ connectivityManager?.bindProcessToNetwork(network)
+ }
+
+ override fun onUnavailable() {
+
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ connectivityManager?.bindProcessToNetwork(null)
+ connectivityManager?.unregisterNetworkCallback(networkCallback)
+ binding.videoSurfaceView.suspend()
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
index 8dc5aba..5775599 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -1,21 +1,22 @@
package com.casic.br.operationsite.view
+import android.graphics.Color
import android.os.Bundle
import android.os.Handler
+import android.os.Message
import android.view.View
import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.ActivityAlarmListBinding
import com.casic.br.operationsite.extensions.combineImagePath
import com.casic.br.operationsite.extensions.formatToDate
import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.AlarmListModel
import com.casic.br.operationsite.vm.AlarmViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.diffCurrentTime
import com.pengxh.kt.lite.extensions.navigatePageTo
@@ -24,8 +25,9 @@
import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-class AlarmListActivity : KotlinBaseActivity() {
+class AlarmListActivity : KotlinBaseActivity(), Handler.Callback {
+ private val context = this@AlarmListActivity
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var alarmListAdapter: NormalRecyclerAdapter
private lateinit var alarmViewModel: AlarmViewModel
@@ -51,39 +53,9 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(callback)
+ weakReferenceHandler = WeakReferenceHandler(this)
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- }
-
- override fun observeRequestState() {
- alarmViewModel.loadState.observe(this) {
- if (!isLoadMore && !isRefresh) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
- }
-
- override fun onResume() {
- super.onResume()
getAlarmListByPage()
- }
-
- override fun initEvent() {
- binding.alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListByPage()
- }
- binding.alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListByPage()
- }
-
alarmViewModel.alarmModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data?.rows!!
@@ -112,77 +84,92 @@
}
}
+ override fun observeRequestState() {
+ alarmViewModel.loadState.observe(this) {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ }
+
+ override fun initEvent() {
+ binding.alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListByPage()
+ }
+ binding.alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListByPage()
+ }
+ }
+
private fun getAlarmListByPage() {
alarmViewModel.getAlarmListByPage(this, keywords, pageIndex)
}
- private val callback = Handler.Callback {
- if (it.what == 2022071201) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- getAlarmListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- alarmListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_alarm_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: AlarmListModel.DataModel.RowsModel
- ) {
- val deltaT = item.alarmTime.diffCurrentTime()
- val diffTime = if (deltaT < 24) {
- "${deltaT}小时前"
- } else {
- item.alarmTime.formatToDate()
- }
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022071201) {
+ alarmListAdapter = object : NormalRecyclerAdapter(
+ R.layout.item_alarm_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: AlarmListModel.DataModel.RowsModel
+ ) {
+ val deltaT = item.alarmTime.diffCurrentTime()
+ val diffTime = if (deltaT < 24) {
+ "${deltaT}小时前"
+ } else {
+ item.alarmTime.formatToDate()
+ }
- val color = when (item.alarmStatusName) {
- "正在报警" -> R.color.redTextColor.convertColor(this@AlarmListActivity)
- "手动消警" -> R.color.greenColor.convertColor(this@AlarmListActivity)
- else -> R.color.hintTextColor.convertColor(this@AlarmListActivity)
- }
+ val color = when (item.alarmStatusName) {
+ "正在报警" -> R.color.redTextColor.convertColor(context)
+ "手动消警" -> R.color.greenColor.convertColor(context)
+ else -> R.color.hintTextColor.convertColor(context)
+ }
- viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
- .setBackgroundColor(R.id.alarmStatusView, color)
- .setText(R.id.alarmContentView, item.alarmContent)
- .setText(R.id.workRoadView, item.workRoad)
- .setText(R.id.alarmTimeView, diffTime)
- .setImageResource(
- R.id.alarmImageView, item.alarmImage.combineImagePath()
- )
- .setOnClickListener(R.id.alarmImageView) {
- navigatePageTo(
- 0, arrayListOf(item.alarmImage.combineImagePath())
- )
- }
- if (item.alarmType == "2") {
- viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
- } else {
- viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
- .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
- }
+ viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
+ .setBackgroundColor(R.id.alarmStatusView, color)
+ .setText(R.id.alarmContentView, item.alarmContent)
+ .setText(R.id.workRoadView, item.workRoad)
+ .setText(R.id.alarmTimeView, diffTime)
+ .setImageResource(R.id.alarmImageView, item.alarmImage.combineImagePath())
+ .setOnClickListener(R.id.alarmImageView) {
+ navigatePageTo(
+ 0, arrayListOf(item.alarmImage.combineImagePath())
+ )
}
+ if (item.alarmType == "2") {
+ viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
+ .setVisibility(R.id.alarmImageView, View.VISIBLE)
+ } else {
+ viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
+ .setVisibility(R.id.alarmImageView, View.GONE)
+ .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
}
- binding.alarmRecyclerView.addItemDecoration(
- DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
- )
- binding.alarmRecyclerView.adapter = alarmListAdapter
- alarmListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: AlarmListModel.DataModel.RowsModel
- ) {
-// navigatePageTo(t.id)
- "未实现".show(this@AlarmListActivity)
- }
- })
+ }
}
+ binding.alarmRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.alarmRecyclerView.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: AlarmListModel.DataModel.RowsModel
+ ) {
+ //TODO
+// navigatePageTo(t.id)
+ }
+ })
}
- true
+ return true
}
/**
diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
index 6fc4cf6..74da7c2 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
@@ -63,7 +63,7 @@
override fun setupTopBarLayout() {
binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleInclude.titleView.text = "摄像头参数"
+ binding.titleInclude.titleView.text = "摄像头区域配置"
binding.titleInclude.rightOptionView.text = "重画"
binding.titleInclude.rightOptionView.setOnClickListener {
binding.regionView.clearRoutePath()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
new file mode 100644
index 0000000..82c63f9
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -0,0 +1,182 @@
+package com.casic.br.operationsite.view
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import android.net.Uri
+import android.net.wifi.WifiManager
+import android.net.wifi.WifiNetworkSpecifier
+import android.os.Build
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
+import com.casic.br.operationsite.extensions.initImmersionBar
+import com.casic.br.operationsite.extensions.reformatFloatArray
+import com.casic.br.operationsite.utils.DeviceType
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.RuntimeCache
+import com.casic.br.operationsite.vm.RegionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+
+class VideoBoundaryActivity : KotlinBaseActivity() {
+
+ private val context = this@VideoBoundaryActivity
+ private val wifiManager by lazy { getSystemService() }
+ private val wifiSsids = ArrayList()
+ private val cameraItems = ArrayList()
+ private var connectivityManager: ConnectivityManager? = null
+ private var isStarted = false
+ private lateinit var regionViewModel: RegionViewModel
+
+ override fun initEvent() {
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
+
+ val bottomActionSheet = BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(cameraItems)
+ .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ binding.configSelectView.text = cameraItems[position]
+ //切换摄像头的时候需要重新读取RTSP流
+ binding.videoSurfaceView.stopPlayback()
+ binding.videoSurfaceView.clearFocus()
+ isStarted = false
+ binding.videoSurfaceView.setVideoURI(Uri.parse("rtsp://192.168.118.213:554/live/site"))
+ }
+ }).build()
+ binding.configSelectView.setOnClickListener { bottomActionSheet.show() }
+
+ binding.netSelectView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(wifiSsids)
+ .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ binding.netSelectView.text = wifiSsids[position]
+
+ //连接wifi
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ val specifier = WifiNetworkSpecifier.Builder()
+ .setSsid(wifiSsids[position])
+ .setWpa2Passphrase(LocaleConstant.WIFI_PASSWORD)
+ .build()
+
+ val request = NetworkRequest.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .setNetworkSpecifier(specifier)
+ .build()
+
+ connectivityManager = context.getSystemService(
+ Context.CONNECTIVITY_SERVICE
+ ) as ConnectivityManager
+ connectivityManager?.requestNetwork(request, networkCallback)
+ }
+ }
+ }).build().show()
+ }
+
+ binding.startRtspButton.setOnClickListener {
+ if (isStarted) {
+ binding.videoSurfaceView.stopPlayback()
+ binding.videoSurfaceView.clearFocus()
+ isStarted = false
+ binding.startRtspButton.text = "打开摄像头"
+ } else {
+ //播放RTSP流
+ binding.videoSurfaceView.setVideoURI(Uri.parse("rtsp://192.168.118.213:554/live/site"))
+ }
+ }
+
+ binding.videoSurfaceView.setOnPreparedListener {
+ binding.videoSurfaceView.requestFocus()
+ binding.videoSurfaceView.start()
+ isStarted = true
+ binding.startRtspButton.text = "关闭摄像头"
+ }
+
+ binding.saveCameraRegionButton.setOnClickListener {
+ val region = binding.regionView.getConfirmedPoints()
+ val data = region.reformatFloatArray()
+
+ regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+ }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ val params = binding.fragmentContainer.layoutParams
+ params.width = getScreenWidth()
+ params.height = ((9 / 16f) * params.width).toInt()
+ binding.fragmentContainer.layoutParams = params
+
+ RuntimeCache.deviceModels.forEach {
+ if (it.deviceType == DeviceType.CAMERA) {
+ cameraItems.add("${it.host}:${it.port}")
+ }
+ }
+ binding.configSelectView.text = cameraItems[0]
+
+ //获取wifi列表
+ wifiSsids.clear()
+ wifiManager?.scanResults?.forEach { res ->
+ //只要YTJ-010002
+ if (res.SSID == "YTJ-010002") {
+ wifiSsids.add(res.SSID)
+ }
+ }
+
+ regionViewModel = ViewModelProvider(this)[RegionViewModel::class.java]
+ regionViewModel.postResult.observe(this) {
+ if (it.code == 200) {
+ "区域配置成功".show(this)
+ finish()
+ }
+ }
+ }
+
+ override fun initViewBinding(): ActivityVideoBoundaryBinding {
+ return ActivityVideoBoundaryBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
+
+ binding.titleInclude.titleView.text = "摄像头区域配置"
+ binding.titleInclude.rightOptionView.text = "重画"
+ binding.titleInclude.rightOptionView.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+ }
+
+ private val networkCallback = object : ConnectivityManager.NetworkCallback() {
+ override fun onAvailable(network: Network) {
+ super.onAvailable(network)
+ connectivityManager?.bindProcessToNetwork(network)
+ }
+
+ override fun onUnavailable() {
+
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ connectivityManager?.bindProcessToNetwork(null)
+ connectivityManager?.unregisterNetworkCallback(networkCallback)
+ binding.videoSurfaceView.suspend()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 29796a9..c8b16ea 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -26,12 +26,10 @@
import com.casic.br.operationsite.vm.DeviceViewModel
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
class WorkSiteTabActivity : KotlinBaseActivity(),
AMap.OnMarkerClickListener, AMap.InfoWindowAdapter {
@@ -153,7 +151,7 @@
//计算所有点的中心点位置
val centerLatLng = LatLng(latitudeList.average(), longitudeList.average())
//移动到指定经纬度
- val cameraPosition = CameraPosition(centerLatLng, 16f, 0f, 0f)
+ val cameraPosition = CameraPosition(centerLatLng, 18f, 0f, 0f)
val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
aMap.animateCamera(cameraUpdate)
@@ -255,17 +253,19 @@
}
binding.fenceTextView.setOnClickListener {
- BottomActionSheet.Builder().setContext(this)
- .setActionItemTitle(arrayListOf("监控区域", "云台参数"))
- .setItemTextColor(R.color.mainThemeColor.convertColor(this))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> navigatePageTo()
- 1 -> navigatePageTo()
- }
- }
- }).build().show()
+ //TODO 二期布控球不支持手机控制
+// BottomActionSheet.Builder().setContext(this)
+// .setActionItemTitle(arrayListOf("监控区域", "云台参数"))
+// .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+// .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+// override fun onActionItemClick(position: Int) {
+// when (position) {
+// 0 -> navigatePageTo()
+// 1 -> navigatePageTo()
+// }
+// }
+// }).build().show()
+ navigatePageTo()
}
binding.uploadTextView.setOnClickListener {
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
index 8dc5aba..5775599 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -1,21 +1,22 @@
package com.casic.br.operationsite.view
+import android.graphics.Color
import android.os.Bundle
import android.os.Handler
+import android.os.Message
import android.view.View
import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.ActivityAlarmListBinding
import com.casic.br.operationsite.extensions.combineImagePath
import com.casic.br.operationsite.extensions.formatToDate
import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.AlarmListModel
import com.casic.br.operationsite.vm.AlarmViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.diffCurrentTime
import com.pengxh.kt.lite.extensions.navigatePageTo
@@ -24,8 +25,9 @@
import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-class AlarmListActivity : KotlinBaseActivity() {
+class AlarmListActivity : KotlinBaseActivity(), Handler.Callback {
+ private val context = this@AlarmListActivity
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var alarmListAdapter: NormalRecyclerAdapter
private lateinit var alarmViewModel: AlarmViewModel
@@ -51,39 +53,9 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(callback)
+ weakReferenceHandler = WeakReferenceHandler(this)
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- }
-
- override fun observeRequestState() {
- alarmViewModel.loadState.observe(this) {
- if (!isLoadMore && !isRefresh) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
- }
-
- override fun onResume() {
- super.onResume()
getAlarmListByPage()
- }
-
- override fun initEvent() {
- binding.alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListByPage()
- }
- binding.alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListByPage()
- }
-
alarmViewModel.alarmModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data?.rows!!
@@ -112,77 +84,92 @@
}
}
+ override fun observeRequestState() {
+ alarmViewModel.loadState.observe(this) {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ }
+
+ override fun initEvent() {
+ binding.alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListByPage()
+ }
+ binding.alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListByPage()
+ }
+ }
+
private fun getAlarmListByPage() {
alarmViewModel.getAlarmListByPage(this, keywords, pageIndex)
}
- private val callback = Handler.Callback {
- if (it.what == 2022071201) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- getAlarmListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- alarmListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_alarm_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: AlarmListModel.DataModel.RowsModel
- ) {
- val deltaT = item.alarmTime.diffCurrentTime()
- val diffTime = if (deltaT < 24) {
- "${deltaT}小时前"
- } else {
- item.alarmTime.formatToDate()
- }
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022071201) {
+ alarmListAdapter = object : NormalRecyclerAdapter(
+ R.layout.item_alarm_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: AlarmListModel.DataModel.RowsModel
+ ) {
+ val deltaT = item.alarmTime.diffCurrentTime()
+ val diffTime = if (deltaT < 24) {
+ "${deltaT}小时前"
+ } else {
+ item.alarmTime.formatToDate()
+ }
- val color = when (item.alarmStatusName) {
- "正在报警" -> R.color.redTextColor.convertColor(this@AlarmListActivity)
- "手动消警" -> R.color.greenColor.convertColor(this@AlarmListActivity)
- else -> R.color.hintTextColor.convertColor(this@AlarmListActivity)
- }
+ val color = when (item.alarmStatusName) {
+ "正在报警" -> R.color.redTextColor.convertColor(context)
+ "手动消警" -> R.color.greenColor.convertColor(context)
+ else -> R.color.hintTextColor.convertColor(context)
+ }
- viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
- .setBackgroundColor(R.id.alarmStatusView, color)
- .setText(R.id.alarmContentView, item.alarmContent)
- .setText(R.id.workRoadView, item.workRoad)
- .setText(R.id.alarmTimeView, diffTime)
- .setImageResource(
- R.id.alarmImageView, item.alarmImage.combineImagePath()
- )
- .setOnClickListener(R.id.alarmImageView) {
- navigatePageTo(
- 0, arrayListOf(item.alarmImage.combineImagePath())
- )
- }
- if (item.alarmType == "2") {
- viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
- } else {
- viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
- .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
- }
+ viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
+ .setBackgroundColor(R.id.alarmStatusView, color)
+ .setText(R.id.alarmContentView, item.alarmContent)
+ .setText(R.id.workRoadView, item.workRoad)
+ .setText(R.id.alarmTimeView, diffTime)
+ .setImageResource(R.id.alarmImageView, item.alarmImage.combineImagePath())
+ .setOnClickListener(R.id.alarmImageView) {
+ navigatePageTo(
+ 0, arrayListOf(item.alarmImage.combineImagePath())
+ )
}
+ if (item.alarmType == "2") {
+ viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
+ .setVisibility(R.id.alarmImageView, View.VISIBLE)
+ } else {
+ viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
+ .setVisibility(R.id.alarmImageView, View.GONE)
+ .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
}
- binding.alarmRecyclerView.addItemDecoration(
- DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
- )
- binding.alarmRecyclerView.adapter = alarmListAdapter
- alarmListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: AlarmListModel.DataModel.RowsModel
- ) {
-// navigatePageTo(t.id)
- "未实现".show(this@AlarmListActivity)
- }
- })
+ }
}
+ binding.alarmRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.alarmRecyclerView.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: AlarmListModel.DataModel.RowsModel
+ ) {
+ //TODO
+// navigatePageTo(t.id)
+ }
+ })
}
- true
+ return true
}
/**
diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
index 6fc4cf6..74da7c2 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
@@ -63,7 +63,7 @@
override fun setupTopBarLayout() {
binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleInclude.titleView.text = "摄像头参数"
+ binding.titleInclude.titleView.text = "摄像头区域配置"
binding.titleInclude.rightOptionView.text = "重画"
binding.titleInclude.rightOptionView.setOnClickListener {
binding.regionView.clearRoutePath()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
new file mode 100644
index 0000000..82c63f9
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -0,0 +1,182 @@
+package com.casic.br.operationsite.view
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import android.net.Uri
+import android.net.wifi.WifiManager
+import android.net.wifi.WifiNetworkSpecifier
+import android.os.Build
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
+import com.casic.br.operationsite.extensions.initImmersionBar
+import com.casic.br.operationsite.extensions.reformatFloatArray
+import com.casic.br.operationsite.utils.DeviceType
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.RuntimeCache
+import com.casic.br.operationsite.vm.RegionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+
+class VideoBoundaryActivity : KotlinBaseActivity() {
+
+ private val context = this@VideoBoundaryActivity
+ private val wifiManager by lazy { getSystemService() }
+ private val wifiSsids = ArrayList()
+ private val cameraItems = ArrayList()
+ private var connectivityManager: ConnectivityManager? = null
+ private var isStarted = false
+ private lateinit var regionViewModel: RegionViewModel
+
+ override fun initEvent() {
+ binding.titleInclude.leftBackView.setOnClickListener { finish() }
+
+ val bottomActionSheet = BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(cameraItems)
+ .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ binding.configSelectView.text = cameraItems[position]
+ //切换摄像头的时候需要重新读取RTSP流
+ binding.videoSurfaceView.stopPlayback()
+ binding.videoSurfaceView.clearFocus()
+ isStarted = false
+ binding.videoSurfaceView.setVideoURI(Uri.parse("rtsp://192.168.118.213:554/live/site"))
+ }
+ }).build()
+ binding.configSelectView.setOnClickListener { bottomActionSheet.show() }
+
+ binding.netSelectView.setOnClickListener {
+ BottomActionSheet.Builder()
+ .setContext(this)
+ .setActionItemTitle(wifiSsids)
+ .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+ .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+ override fun onActionItemClick(position: Int) {
+ binding.netSelectView.text = wifiSsids[position]
+
+ //连接wifi
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ val specifier = WifiNetworkSpecifier.Builder()
+ .setSsid(wifiSsids[position])
+ .setWpa2Passphrase(LocaleConstant.WIFI_PASSWORD)
+ .build()
+
+ val request = NetworkRequest.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .setNetworkSpecifier(specifier)
+ .build()
+
+ connectivityManager = context.getSystemService(
+ Context.CONNECTIVITY_SERVICE
+ ) as ConnectivityManager
+ connectivityManager?.requestNetwork(request, networkCallback)
+ }
+ }
+ }).build().show()
+ }
+
+ binding.startRtspButton.setOnClickListener {
+ if (isStarted) {
+ binding.videoSurfaceView.stopPlayback()
+ binding.videoSurfaceView.clearFocus()
+ isStarted = false
+ binding.startRtspButton.text = "打开摄像头"
+ } else {
+ //播放RTSP流
+ binding.videoSurfaceView.setVideoURI(Uri.parse("rtsp://192.168.118.213:554/live/site"))
+ }
+ }
+
+ binding.videoSurfaceView.setOnPreparedListener {
+ binding.videoSurfaceView.requestFocus()
+ binding.videoSurfaceView.start()
+ isStarted = true
+ binding.startRtspButton.text = "关闭摄像头"
+ }
+
+ binding.saveCameraRegionButton.setOnClickListener {
+ val region = binding.regionView.getConfirmedPoints()
+ val data = region.reformatFloatArray()
+
+ regionViewModel.postRegion(this, "11,12", "#FF0000", data)
+ }
+ }
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ val params = binding.fragmentContainer.layoutParams
+ params.width = getScreenWidth()
+ params.height = ((9 / 16f) * params.width).toInt()
+ binding.fragmentContainer.layoutParams = params
+
+ RuntimeCache.deviceModels.forEach {
+ if (it.deviceType == DeviceType.CAMERA) {
+ cameraItems.add("${it.host}:${it.port}")
+ }
+ }
+ binding.configSelectView.text = cameraItems[0]
+
+ //获取wifi列表
+ wifiSsids.clear()
+ wifiManager?.scanResults?.forEach { res ->
+ //只要YTJ-010002
+ if (res.SSID == "YTJ-010002") {
+ wifiSsids.add(res.SSID)
+ }
+ }
+
+ regionViewModel = ViewModelProvider(this)[RegionViewModel::class.java]
+ regionViewModel.postResult.observe(this) {
+ if (it.code == 200) {
+ "区域配置成功".show(this)
+ finish()
+ }
+ }
+ }
+
+ override fun initViewBinding(): ActivityVideoBoundaryBinding {
+ return ActivityVideoBoundaryBinding.inflate(layoutInflater)
+ }
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
+
+ binding.titleInclude.titleView.text = "摄像头区域配置"
+ binding.titleInclude.rightOptionView.text = "重画"
+ binding.titleInclude.rightOptionView.setOnClickListener {
+ binding.regionView.clearRoutePath()
+ }
+ }
+
+ private val networkCallback = object : ConnectivityManager.NetworkCallback() {
+ override fun onAvailable(network: Network) {
+ super.onAvailable(network)
+ connectivityManager?.bindProcessToNetwork(network)
+ }
+
+ override fun onUnavailable() {
+
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ connectivityManager?.bindProcessToNetwork(null)
+ connectivityManager?.unregisterNetworkCallback(networkCallback)
+ binding.videoSurfaceView.suspend()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
index 29796a9..c8b16ea 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/WorkSiteTabActivity.kt
@@ -26,12 +26,10 @@
import com.casic.br.operationsite.vm.DeviceViewModel
import com.casic.br.operationsite.vm.WorkSiteViewModel
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.LoadState
import com.pengxh.kt.lite.utils.LoadingDialogHub
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
class WorkSiteTabActivity : KotlinBaseActivity(),
AMap.OnMarkerClickListener, AMap.InfoWindowAdapter {
@@ -153,7 +151,7 @@
//计算所有点的中心点位置
val centerLatLng = LatLng(latitudeList.average(), longitudeList.average())
//移动到指定经纬度
- val cameraPosition = CameraPosition(centerLatLng, 16f, 0f, 0f)
+ val cameraPosition = CameraPosition(centerLatLng, 18f, 0f, 0f)
val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition)
aMap.animateCamera(cameraUpdate)
@@ -255,17 +253,19 @@
}
binding.fenceTextView.setOnClickListener {
- BottomActionSheet.Builder().setContext(this)
- .setActionItemTitle(arrayListOf("监控区域", "云台参数"))
- .setItemTextColor(R.color.mainThemeColor.convertColor(this))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> navigatePageTo()
- 1 -> navigatePageTo()
- }
- }
- }).build().show()
+ //TODO 二期布控球不支持手机控制
+// BottomActionSheet.Builder().setContext(this)
+// .setActionItemTitle(arrayListOf("监控区域", "云台参数"))
+// .setItemTextColor(R.color.mainThemeColor.convertColor(this))
+// .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
+// override fun onActionItemClick(position: Int) {
+// when (position) {
+// 0 -> navigatePageTo()
+// 1 -> navigatePageTo()
+// }
+// }
+// }).build().show()
+ navigatePageTo()
}
binding.uploadTextView.setOnClickListener {
diff --git a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt
index c056bba..9b6f9df 100644
--- a/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt
+++ b/app/src/main/java/com/casic/br/operationsite/vm/LoginViewModel.kt
@@ -27,7 +27,6 @@
response, object : TypeToken() {}.type
)
loadState.value = LoadState.Success
- "登录成功".show(context)
}
else -> {
diff --git a/app/build.gradle b/app/build.gradle
index 0430e6b..4512b85 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -84,9 +84,6 @@
implementation 'pub.devrel:easypermissions:3.0.0'
//沉浸式状态栏。基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
- //空白页 TODO
- implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
- implementation 'com.qmuiteam:arch:0.3.1'
def vm_version = "2.5.1"
//Kotlin协程
implementation "androidx.lifecycle:lifecycle-runtime-ktx:${vm_version}"
@@ -115,8 +112,6 @@
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//高德地图
implementation 'com.amap.api:3dmap:latest.integration'
- //高德地图搜索
- implementation 'com.amap.api:search:8.1.0'
//CameraX
def camerax_version = '1.2.3'
implementation "androidx.camera:camera-core:$camerax_version"
@@ -128,4 +123,6 @@
implementation "androidx.camera:camera-view:$camerax_version"
//TCP
implementation 'io.netty:netty-all:4.1.23.Final'
+ //播放RTSP流
+ implementation 'com.github.NodeMedia:NodeMediaClient-Android:2.8.4'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cde8f45..7f84591 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -71,6 +71,7 @@
android:theme="@style/Theme.BigImageActivity" />
+
-
-
-
diff --git a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt b/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
deleted file mode 100644
index 0696166..0000000
--- a/app/src/main/java/com/casic/br/operationsite/extensions/QMUIEmptyView.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.casic.br.operationsite.extensions
-
-import android.view.View
-import com.qmuiteam.qmui.widget.QMUIEmptyView
-
-fun QMUIEmptyView.showEmptyPage(onButtonClickListener: View.OnClickListener) {
- this.show(false, "抱歉,无法查询到相关记录", null, "重试", onButtonClickListener)
-}
-
-fun QMUIEmptyView.showEmptyPage(title: String, onButtonClickListener: View.OnClickListener) {
- this.show(false, title, null, "刷新", onButtonClickListener)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
index eb97647..2ce5cbe 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/CompletedFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentCompletedBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,51 +127,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071502) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.completedRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.completedRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.completedRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.completedRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
index 404a4c1..b78c537 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/NotStartFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentNotStartBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -128,52 +127,44 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071501) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView,
- "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView,
+ "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.notStartRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.notStartRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.notStartRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.notStartRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
index c6426a5..ef4dfe0 100644
--- a/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
+++ b/app/src/main/java/com/casic/br/operationsite/fragment/WorkingFragment.kt
@@ -13,7 +13,6 @@
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.FragmentWorkingBinding
import com.casic.br.operationsite.extensions.combineImagePath
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.BroadcastDataModel
import com.casic.br.operationsite.model.WorkSiteListModel
import com.casic.br.operationsite.utils.LocaleConstant
@@ -129,51 +128,43 @@
override fun handleMessage(msg: Message): Boolean {
if (msg.what == 2022071101) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- obtainProjectListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- workingListAdapter = object :
- NormalRecyclerAdapter(
- R.layout.item_working_rv, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: WorkSiteListModel.DataModel.RowsModel
- ) {
- if (item.imageUrl.isNullOrBlank()) {
- viewHolder.setImageResource(
- R.id.workSiteImageView, R.mipmap.ic_launcher
- )
- } else {
- viewHolder.setImageResource(
- R.id.workSiteImageView, item.imageUrl.combineImagePath()
- )
- }
- viewHolder.setText(R.id.workTitleView, item.workTitle)
- .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
- .setText(
- R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
- )
- .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
+ workingListAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_working_rv, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int,
+ item: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ if (item.imageUrl.isNullOrBlank()) {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, R.mipmap.ic_launcher
+ )
+ } else {
+ viewHolder.setImageResource(
+ R.id.workSiteImageView, item.imageUrl.combineImagePath()
+ )
}
+ viewHolder.setText(R.id.workTitleView, item.workTitle)
+ .setText(R.id.workPersonView, "现场负责人:${item.workPersonName}")
+ .setText(
+ R.id.connectionPhoneView, "联系电话:${item.workPersonPhoneNumber}"
+ )
+ .setText(R.id.workSiteView, "现场描述:${item.workSiteDesc}")
}
- binding.workingRecyclerView.addItemDecoration(
- RecyclerViewItemDivider(1, Color.LTGRAY)
- )
- binding.workingRecyclerView.adapter = workingListAdapter
- workingListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: WorkSiteListModel.DataModel.RowsModel
- ) {
- requireContext().navigatePageTo(t.id)
- }
- })
}
+ binding.workingRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.workingRecyclerView.adapter = workingListAdapter
+ workingListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: WorkSiteListModel.DataModel.RowsModel
+ ) {
+ requireContext().navigatePageTo(t.id)
+ }
+ })
}
return true
}
diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
index aae1838..a49fad9 100644
--- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt
@@ -1,22 +1,46 @@
package com.casic.br.operationsite.utils
import android.Manifest
+import android.os.Build
object LocaleConstant {
- val USER_PERMISSIONS = arrayOf(
- Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.CHANGE_NETWORK_STATE,
- Manifest.permission.WRITE_SETTINGS,
- Manifest.permission.CAMERA,
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.MANAGE_EXTERNAL_STORAGE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- )
+ val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_MEDIA_IMAGES,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.MANAGE_EXTERNAL_STORAGE
+ )
+ } else {
+ arrayOf(
+ Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
+ Manifest.permission.ACCESS_COARSE_LOCATION,
+ Manifest.permission.ACCESS_FINE_LOCATION,
+ Manifest.permission.READ_PHONE_STATE,
+ Manifest.permission.CHANGE_NETWORK_STATE,
+ Manifest.permission.WRITE_SETTINGS,
+ Manifest.permission.CAMERA,
+ Manifest.permission.READ_EXTERNAL_STORAGE,
+ Manifest.permission.WRITE_EXTERNAL_STORAGE
+ )
+ }
const val SERVER_BASE_URL = "http://111.198.10.15:21409"
const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
diff --git a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
index 8dc5aba..5775599 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/AlarmListActivity.kt
@@ -1,21 +1,22 @@
package com.casic.br.operationsite.view
+import android.graphics.Color
import android.os.Bundle
import android.os.Handler
+import android.os.Message
import android.view.View
import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.DividerItemDecoration
import com.casic.br.operationsite.R
import com.casic.br.operationsite.databinding.ActivityAlarmListBinding
import com.casic.br.operationsite.extensions.combineImagePath
import com.casic.br.operationsite.extensions.formatToDate
import com.casic.br.operationsite.extensions.initImmersionBar
-import com.casic.br.operationsite.extensions.showEmptyPage
import com.casic.br.operationsite.model.AlarmListModel
import com.casic.br.operationsite.vm.AlarmViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.divider.RecyclerViewItemDivider
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.diffCurrentTime
import com.pengxh.kt.lite.extensions.navigatePageTo
@@ -24,8 +25,9 @@
import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.WeakReferenceHandler
-class AlarmListActivity : KotlinBaseActivity() {
+class AlarmListActivity : KotlinBaseActivity(), Handler.Callback {
+ private val context = this@AlarmListActivity
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var alarmListAdapter: NormalRecyclerAdapter
private lateinit var alarmViewModel: AlarmViewModel
@@ -51,39 +53,9 @@
}
override fun initOnCreate(savedInstanceState: Bundle?) {
- weakReferenceHandler = WeakReferenceHandler(callback)
+ weakReferenceHandler = WeakReferenceHandler(this)
alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java]
- }
-
- override fun observeRequestState() {
- alarmViewModel.loadState.observe(this) {
- if (!isLoadMore && !isRefresh) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
- }
-
- override fun onResume() {
- super.onResume()
getAlarmListByPage()
- }
-
- override fun initEvent() {
- binding.alarmRefreshLayout.setOnRefreshListener {
- isRefresh = true
- //刷新之后页码重置
- pageIndex = 1
- getAlarmListByPage()
- }
- binding.alarmRefreshLayout.setOnLoadMoreListener {
- isLoadMore = true
- pageIndex++
- getAlarmListByPage()
- }
-
alarmViewModel.alarmModel.observe(this) {
if (it.code == 200) {
val dataRows = it.data?.rows!!
@@ -112,77 +84,92 @@
}
}
+ override fun observeRequestState() {
+ alarmViewModel.loadState.observe(this) {
+ if (!isLoadMore && !isRefresh) {
+ when (it) {
+ LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中,请稍后...")
+ else -> LoadingDialogHub.dismiss()
+ }
+ }
+ }
+ }
+
+ override fun initEvent() {
+ binding.alarmRefreshLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getAlarmListByPage()
+ }
+ binding.alarmRefreshLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getAlarmListByPage()
+ }
+ }
+
private fun getAlarmListByPage() {
alarmViewModel.getAlarmListByPage(this, keywords, pageIndex)
}
- private val callback = Handler.Callback {
- if (it.what == 2022071201) {
- if (dataBeans.size == 0) {
- binding.emptyInclude.emptyView.showEmptyPage {
- pageIndex = 1
- getAlarmListByPage()
- }
- } else {
- binding.emptyInclude.emptyView.hide()
- alarmListAdapter =
- object : NormalRecyclerAdapter(
- R.layout.item_alarm_rv_l, dataBeans
- ) {
- override fun convertView(
- viewHolder: ViewHolder, position: Int,
- item: AlarmListModel.DataModel.RowsModel
- ) {
- val deltaT = item.alarmTime.diffCurrentTime()
- val diffTime = if (deltaT < 24) {
- "${deltaT}小时前"
- } else {
- item.alarmTime.formatToDate()
- }
+ override fun handleMessage(msg: Message): Boolean {
+ if (msg.what == 2022071201) {
+ alarmListAdapter = object : NormalRecyclerAdapter(
+ R.layout.item_alarm_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: AlarmListModel.DataModel.RowsModel
+ ) {
+ val deltaT = item.alarmTime.diffCurrentTime()
+ val diffTime = if (deltaT < 24) {
+ "${deltaT}小时前"
+ } else {
+ item.alarmTime.formatToDate()
+ }
- val color = when (item.alarmStatusName) {
- "正在报警" -> R.color.redTextColor.convertColor(this@AlarmListActivity)
- "手动消警" -> R.color.greenColor.convertColor(this@AlarmListActivity)
- else -> R.color.hintTextColor.convertColor(this@AlarmListActivity)
- }
+ val color = when (item.alarmStatusName) {
+ "正在报警" -> R.color.redTextColor.convertColor(context)
+ "手动消警" -> R.color.greenColor.convertColor(context)
+ else -> R.color.hintTextColor.convertColor(context)
+ }
- viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
- .setBackgroundColor(R.id.alarmStatusView, color)
- .setText(R.id.alarmContentView, item.alarmContent)
- .setText(R.id.workRoadView, item.workRoad)
- .setText(R.id.alarmTimeView, diffTime)
- .setImageResource(
- R.id.alarmImageView, item.alarmImage.combineImagePath()
- )
- .setOnClickListener(R.id.alarmImageView) {
- navigatePageTo(
- 0, arrayListOf(item.alarmImage.combineImagePath())
- )
- }
- if (item.alarmType == "2") {
- viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
- } else {
- viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
- .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
- }
+ viewHolder.setText(R.id.alarmStatusView, item.alarmStatusName)
+ .setBackgroundColor(R.id.alarmStatusView, color)
+ .setText(R.id.alarmContentView, item.alarmContent)
+ .setText(R.id.workRoadView, item.workRoad)
+ .setText(R.id.alarmTimeView, diffTime)
+ .setImageResource(R.id.alarmImageView, item.alarmImage.combineImagePath())
+ .setOnClickListener(R.id.alarmImageView) {
+ navigatePageTo(
+ 0, arrayListOf(item.alarmImage.combineImagePath())
+ )
}
+ if (item.alarmType == "2") {
+ viewHolder.setVisibility(R.id.alarmValueView, View.INVISIBLE)
+ .setVisibility(R.id.alarmImageView, View.VISIBLE)
+ } else {
+ viewHolder.setVisibility(R.id.alarmValueView, View.VISIBLE)
+ .setVisibility(R.id.alarmImageView, View.GONE)
+ .setText(R.id.alarmValueView, "报警值:${item.alarmValue}")
}
- binding.alarmRecyclerView.addItemDecoration(
- DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
- )
- binding.alarmRecyclerView.adapter = alarmListAdapter
- alarmListAdapter.setOnItemClickedListener(object :
- NormalRecyclerAdapter.OnItemClickedListener {
- override fun onItemClicked(
- position: Int, t: AlarmListModel.DataModel.RowsModel
- ) {
-// navigatePageTo(t.id)
- "未实现".show(this@AlarmListActivity)
- }
- })
+ }
}
+ binding.alarmRecyclerView.addItemDecoration(
+ RecyclerViewItemDivider(1, Color.LTGRAY)
+ )
+ binding.alarmRecyclerView.adapter = alarmListAdapter
+ alarmListAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(
+ position: Int, t: AlarmListModel.DataModel.RowsModel
+ ) {
+ //TODO
+// navigatePageTo(t.id)
+ }
+ })
}
- true
+ return true
}
/**
diff --git a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
index 6fc4cf6..74da7c2 100644
--- a/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
+++ b/app/src/main/java/com/casic/br/operationsite/view/HikVisionActivity.kt
@@ -63,7 +63,7 @@
override fun setupTopBarLayout() {
binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor)
- binding.titleInclude.titleView.text = "摄像头参数"
+ binding.titleInclude.titleView.text = "摄像头区域配置"
binding.titleInclude.rightOptionView.text = "重画"
binding.titleInclude.rightOptionView.setOnClickListener {
binding.regionView.clearRoutePath()
diff --git a/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
new file mode 100644
index 0000000..82c63f9
--- /dev/null
+++ b/app/src/main/java/com/casic/br/operationsite/view/VideoBoundaryActivity.kt
@@ -0,0 +1,182 @@
+package com.casic.br.operationsite.view
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import android.net.Uri
+import android.net.wifi.WifiManager
+import android.net.wifi.WifiNetworkSpecifier
+import android.os.Build
+import android.os.Bundle
+import androidx.lifecycle.ViewModelProvider
+import com.casic.br.operationsite.R
+import com.casic.br.operationsite.databinding.ActivityVideoBoundaryBinding
+import com.casic.br.operationsite.extensions.initImmersionBar
+import com.casic.br.operationsite.extensions.reformatFloatArray
+import com.casic.br.operationsite.utils.DeviceType
+import com.casic.br.operationsite.utils.LocaleConstant
+import com.casic.br.operationsite.utils.RuntimeCache
+import com.casic.br.operationsite.vm.RegionViewModel
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.convertColor
+import com.pengxh.kt.lite.extensions.getScreenWidth
+import com.pengxh.kt.lite.extensions.getSystemService
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
+
+class VideoBoundaryActivity : KotlinBaseActivity() {
+
+ private val context = this@VideoBoundaryActivity
+ private val wifiManager by lazy { getSystemService